iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
1
Software Development

Python 程式交易 30 天新手入門系列 第 21

Day-21 計算指標:KD

指標描述

KD 指標是使用 RSV 的加權移動平均來計算的,RSV 數據表達的是與最近 9 天相比,今天的股價是強還是弱。而 KD 數值越高代表個股的收盤價接近最近幾天的最高價,反之 KD 數值越低代表個股的收盤價接近最近幾天的最低價。

RSV

RSV = ( 今日收盤價 - 最近九天的最低價 ) / ( 最近九天的最高價 - 最近九天最低價 )

K

K 是 RSV 和前一日的 K 的加權平均

K = 2/3 * ( 昨日K值 ) + 1/3 * ( 今日RSV )

D

D 是 K 和前一日的 D 的加權平均

D = 2/3 * ( 昨日D值 ) + 1/3 * ( 今日K值 )

完整 KD 指標說明和公式講解可參考日盛證券的理財學園

技術整合

前情提要

  1. Day-11 資料保存:取得 2019 年每日加權指數盤後資訊並繪製線圖
  2. Day-14 券商串接:串接元大期貨行情 API(一)
  3. Day-17 計算指標:從 Tick 換算分 K 與分 MA
  4. Day-18 計算指標:從 Tick 及盤後資訊換算時 K 與周 K

計算 RSV

import numpy
import pandas
import plotly.graph_objects
import plotly.subplots

TXF_1DAYK = pandas.read_csv('taiexs-2019.csv')
TXF_1DAYK = TXF_1DAYK.rename(
    columns={
        'Date': 'date',
        'OpenPrice': 'open',
        'HighestPrice': 'high',
        'LowestPrice': 'low',
        'ClosePrice': 'close'
    }
)
TXF_1DAYK['date'] = pandas.to_datetime(TXF_1DAYK['date'], format='%Y%m%d')
TXF_1DAYK = TXF_1DAYK.set_index('date')
print(TXF_1DAYK)

# 計算 9 日內最高成交價
TXF_1DAYK['9DAYMAX'] = TXF_1DAYK['high'].rolling('9D').max()
print(TXF_1DAYK)

# 計算 9 日內最低成交價
TXF_1DAYK['9DAYMIN'] = TXF_1DAYK['low'].rolling('9D').min()
print(TXF_1DAYK)

# 計算每日 RSV 值
TXF_1DAYK['RSV'] = 0
TXF_1DAYK['RSV'] = 100 * (TXF_1DAYK['close'] - TXF_1DAYK['9DAYMIN']) / (TXF_1DAYK['9DAYMAX'] - TXF_1DAYK['9DAYMIN'])
print(TXF_1DAYK)

# 計算 K 值
K = 0
def KValue(rsv):
    global K
    K = (2/3) * K + (1/3) * rsv
    return K
TXF_1DAYK['K'] = 0
TXF_1DAYK['K'] = TXF_1DAYK['RSV'].apply(KValue)

# 計算 D 值
D = 0
def DValue(k):
    global D
    D = (2/3) * D + (1/3) * k
    return D
TXF_1DAYK['D'] = 0
TXF_1DAYK['D'] = TXF_1DAYK['K'].apply(DValue)

print(TXF_1DAYK)

figure = plotly.graph_objects.Figure(
    data=[
        # K
        plotly.graph_objects.Scatter(
            x=TXF_1DAYK.loc[TXF_1DAYK['K'] != 0].index,
            y=TXF_1DAYK['K'],
            name='K',
            mode='lines',
            line=plotly.graph_objects.scatter.Line(
                color='#6B99E5'
            )
        ),
        # D
        plotly.graph_objects.Scatter(
            x=TXF_1DAYK.loc[TXF_1DAYK['D'] != 0].index,
            y=TXF_1DAYK['D'],
            name='D',
            mode='lines',
            line=plotly.graph_objects.scatter.Line(
                color='#E58B6B'
            )
        )
    ],
    # 設定 XY 顯示格式
    layout=plotly.graph_objects.Layout(
        xaxis=plotly.graph_objects.layout.XAxis(
            tickformat='%Y-%m-%d'
        ),
        yaxis=plotly.graph_objects.layout.YAxis(
            tickformat='.2f'
        )
    )
)
figure.show()

KD


團隊系列文:

CSScoke - 金魚都能懂的這個網頁畫面怎麼切 - 金魚都能懂了你還怕學不會嗎
Clarence - LINE bot 好好玩 30 天玩轉 LINE API
Hina Hina - 陣列大亂鬥
King Tzeng - IoT沒那麼難!新手用JavaScript入門做自己的玩具
Vita Ora - 好 Js 不學嗎 !? JavaScript 入門中的入門。
TaTaMo - 用Python開發的網頁不能放到Github上?Lektor說可以!!


上一篇
Day-20 計算指標:分 K 收價均線
下一篇
Day-22 資料保存:MongoDB
系列文
Python 程式交易 30 天新手入門30

尚未有邦友留言

立即登入留言