2015年2月16日 星期一

計算 KD 值的方法

最近重讀王錦樹寫的 "點睛技術分析-心法篇" (2010, 寰宇出版), 裡面詳細解說了主要的幾種指標的計算方法與原理. 其中最老牌也最簡單的就是 KD 值的計算 (參考第七章 : "KD 線-壓力與支撐"), 雖然技術指標玲瑯滿目, 但據說許多老手還是只靠平均線與 KD 指標致勝. 今天就用 Google 雲端硬碟來實作 KD 的計算.

關於 KD 的原理, 可以參考下列資料 :

# 甚麼是 KD 值

計算 KD 前, 必須計算所謂的 RSV 值 (未成熟隨機震盪值, Row Stochastic oscillator Value), 定義如下 :

RSV=100*(第N天收盤價-近N日內最低價)/(近N日內最高價-近N日內最低價)

注意, 這裡的最低價與最高價都是指每天的收盤價, 不是每日盤中的最低價與最高價. 其中 N 一般為 9, 以 9 天為參數算出來的 K/D 值也就稱為 K9 與 D9 了.

RSV 的值域為 0~100, 若當日收盤價為 9 日內最低價, RSV 值為 0; 若當日收盤價為 9 日內最高價, 則 RSV 值為 100, 因此 RSV 本身就可以作為股價是否達到 9 日內新低或新高的技術指標.

接著就可以計算 K/D 值了, 其算式如下 :

Kt=(1/3)RSVt + (2/3)Kt-1
Dt=(1/3)Kt  + (2/3)Dt-1

這裡下標 t 表示當日, t-1 為前一日. K/D 值事實上是上面 RSV 值的加權移動平均, 是指數平滑化的一種方法.

下面以與大盤亦步亦趨的台灣 50 為對象, 計算其 9 日 KD 值, 樣本取自 Yahoo 股市台灣 50 (0050) 的每日收盤價 :

https://tw.finance.yahoo.com/q/ta?s=0050




樣本日期為 2015-01-21 到 2015-02-13 封關日共 18 天如下 :

日期收盤價
2015012167.25
2015012267.6
2015012368.7
2015012668.7
2015012769.15
2015012869.15
2015012968.3
2015013068
2015020268.15
2015020368.65
2015020469.4
2015020569.1
2015020668.75
2015020968.5
2015021068.25
2015021169
2015021269
2015021369.45

把這些日期輸入到雲端硬碟的試算表文件上, 然後在右邊新增最高價, 最低價, 回溯填入 9 日內的最高與最低收盤價 :


日期收盤價最高價最低價
2015012167.25
2015012267.6
2015012368.7
2015012668.7
2015012769.15
2015012869.15
2015012968.3
2015013068
2015020268.1569.1567.25
2015020368.6569.1567.6
2015020469.469.468
2015020569.169.468
2015020668.7569.468
2015020968.569.468
2015021068.2569.468
201502116969.468
201502126969.468.15
2015021369.4569.4568.25


然後在右邊新增 RSV, K, D 三欄, 以便填入計算後的值. 因為 K9/D9 必須有 9 筆之前的資料才能得到 9 日內最高價與最低價以進行計算, 也就是 20150202 那天才能開始計算 RSV 與 K/D. 計算這一天的 K/D 需要用到前一日 (20150130) 的 K/D, 我們設定初始 K/D 均為 50.

先計算 RSV, 如下圖所示, 點 E10 格, 即 20150202 的 RSV 欄, 輸入下列計算公式 :

E11 : =100*(B10-D10)/(C10-D10)

接著計算 K 值, 點 F11 格,  即 20150202 的 K 欄, 輸入下列公式 :

F11 : =(1/3)*E10+(2/3)*F9  

最後計算 D 值, 點 G11 格, 即 20150202 的 D 欄, 輸入下列公式 :

G11 : =(1/3)*F10+(2/3)*G9

然後分別按 E11, F11, G11 儲存格的右下控點往下拉到底, 就會自動將公式套用到 20150213 封關日的 RSV, K, D 值計算, 結果如下 :


日期收盤價最高價最低價RSVKD
2015012167.25
2015012267.6
2015012368.7
2015012668.7
2015012769.15
2015012869.15
2015012968.3
20150130685050
2015020268.1569.1567.2547.3684210549.1228070249.70760234
2015020368.6569.1567.667.7419354855.3291831751.58146262
2015020469.469.46810070.2194554557.79412689
2015020569.169.46878.5714285773.0034464962.86390009
2015020668.7569.46853.5714285766.5261071864.08463579
2015020968.569.46835.7142857156.2555000361.47492387
2015021068.2569.46817.8571428643.4560476455.46863179
201502116969.46871.4285714352.7802222354.57249527
201502126969.468.156857.8534814955.66615734
2015021369.4569.4568.2510071.9023209961.07821189




結果封關日 20150213 的 K=71.90, D=61.08, 對照 Yahoo 股市 20130213 日的 K=68.11, D=61.63, 可見 K 值誤差稍大 (-3.79), D 值誤差較小 (-0.55), 若日期稍長, 數值將逐漸收斂, 誤差將變小.

台灣 50 除了存股賺股息外, 也可以用技術指標來賺差價, 而且只用 KD 與均線即可, 因為台灣 50 包含 50 個成分股, 走勢貼近大盤, 要騙線沒這麼容易, 方法參見 :

用台灣50(0050)幫你年賺15%的操作方法

要言之, 即 KD 小於 20 時酌量買進, 若再低, 不要猶豫繼續買, 然後等待它必然的回升, 當 KD 高於 80 時即伺機賣出. 不過這種機會不會很多, 要耐心等待, 也要耐心持有, 至少年底還有不錯的配息.

回溯過去幾年台灣 50 的走勢, 這種 KD 降至接近 20 的情況, 自 2007 到 2014 的 7 年之間只出現兩次, 一次是 2008 年底的金融海嘯, 另一次是 2012 年 6 月左右 :




所以, 若這樣的交易頻率太低, 或許 KD 往下降至 40 就可以考慮進場了.

2017-10-12 補充 :

感謝網友匿名兄反映, 上述我對公式中最高價與最低價的理解似乎有誤, 可能是當日最高價與最低價, 我將找時間重新驗算一次. (請瀏覽底下熱血網友的留言)

8 則留言 :

匿名 提到...

您好:拜讀您的大作,獲益良多。能否請問如果要計算周KD或月KD時之算法為何?謝謝。

小狐狸事務所 提到...

Sorry, 這我倒還沒去探究, 我想應該是用過去一周或一月的平均值吧!

Unknown 提到...

請問為什麼KD初值放50。

小狐狸事務所 提到...

原書用 50 為初值之用意, 我想可能是 KD 範圍 0~100, 取中間值收斂速度較快吧!

匿名 提到...

請問這個算法,以 0050 在 2017/7/6 的價格
收盤價 80.4
最高價 80.75
最低價 80.2
算出來的 RSV 為 36.36363636

但為何 yahoo 的是顯示 37.14 呢?

小狐狸事務所 提到...

因為我們只計算了剛開始的幾個日期而已.

匿名 提到...

注意, 這裡的最低價與最高價都是指每天的收盤價, 不是每日盤中的最低價與最高價

是每天出現過的最低價與最高價喔,不是每天的收盤價!
害我算半天為何跟 yahoo 的算不同,去 google 別人的文章才找到問題!

小狐狸事務所 提到...

感謝匿名兄留言, 原來是我理解錯誤, 我會找時間重算一次.