【回測系列】KD 指標買台股 (一)

回測系列文章的目標是希望可以來測試市場上的技術指標策略,來提供比較基準,並且幫助思考不同方法之間的差異,透過使用一些程式工具來讓讀者跟我一起走一趟研究量化投資的旅程!

量化投資對我來說是透過資料科學來找到 穩定產生正期望值 的方法,透過了解這些策略的統計特徵,來了解投資人可能會面臨的 風險 以及實際執行的時候會發生的問題,例如以月為主的量化策略交易的時間框架較長,會比較容易執行 (用手動跟肉眼就能執行) 並且也會有較低的交易成本; 反之時間框架比較短的方法,可能就會因為人類無法確實執行而更傾向能夠靠程式來 自動執行

本文測試的題目是市場上常見的日 KD 指標交易策略,就讓我們來看看用這樣的方法投資國民 ETF 0050 是不是真的能夠獲利 ???

▍技術指標 — KD 指標 Stochastic Oscillator

首先先在這邊列一些閱讀的文章讓大家理解一下什麼是 KD 指標:

  1. KD 指標的 Wiki 條目
  2. Cmoney上的教學
  3. Stockchart School 的介紹

在台灣我們稱呼為 KD 指標,在國外被稱為 Stochastic Oscillator ( 隨機震盪指標 ) 是1950 年代由 George Lane 發展的指標,透過計算一定時間區間價格的動能大小來表示目前市場價格是 超買或是超賣狀態 的一種指標,但是根據上述的文章我們大致可以分類一下這個策略產生交易訊號的方式:

KD 交易訊號的類型

  1. 數值區間的類型: 日 K<20 時買進,日 K>80 時賣出
  2. K 值與 D 值相對關係的類型: K > D 黃金交叉買進, K < D 死亡交叉賣出

▍測試策略 — 日 KD 交易

這是這個系列文章的第一篇,在這一篇文章裡面我們先試試看台股 ETF 之王 0050 使用 日 K<20 時買進,日 K>80 賣出 策略,來看看這個策略的結果吧!

在這個回測之中,初始金額設定為 10 萬,然後每一次交易(買進跟賣出各算一次)的費用設定成 0.3%,讓回測比較容易進行。我們的 KD 指標採用標準的 14 日 KD 值 來進行測試,然後一出現訊號的時候我們就 All-in 所有的現金試試。

0050.TW 2008/01–2020/10 回測結果

從 2008 年 1 月的回測

我們先來看一下回測圖上各項指標的意義:

  1. 第一區是 現金跟目前資產的總值,紅色是現金的線圖,所以你會看到當第三區塊有買進訊號 (有綠色向上箭頭) 的時候,代表現金的紅線就會直接掉到 0 代表 All-in 的意思,賣出的時候 (紅色向下箭頭) ,現金又會回到資產曲線的位置。
  2. 第二區有 紅藍點 區塊是有該次買賣交易獲利情況,有獲利的為藍色點,沒有獲利的是紅色點。
  3. 第三區為 價格走勢圖,綠色的箭頭是買進訊號,紅色的箭頭是賣出訊號
  4. 第四區為 K 值的訊號。

您看到結果應該會蠻傻眼的,傳說中有用的方法經過 12 年的時間,居然錢變得更少了,只剩下 92206 元,到底是怎麼一回事呢?難道是我們的測試起始的時間太倒霉了,一進場就遇到金融海嘯?

那我們試試看讓進場的時間直接閃過大跌好了,我們在運氣最好的時候 2009/04月再開始執行策略看看,照理來說接下來會有很多年平步青雲的過程。

0050.TW 2009/04–2020/10 回測結果

閃過金融海嘯

最終還是看到徒勞無功的 100915 元,我們來大致想一下這個方法基本的問題:

  1. 指標似乎太敏感,交易的次數太多導致交易費用很高。
  2. 就算運氣好閃過金融海嘯,這個策略都無法有效的持續保持獲利,稍微劇烈一點的波動都會讓所有的成果消失。
  3. 交易的勝率似乎是蠻高的,藍色點的數目明顯多於紅色點,但是少數的虧損卻很驚人,一下就把賺到的獲利給回吐回去。

初步的改進方法

如果我想繼續改進這個策略,那先試著克服很常看見的指標鈍化好了,指標鈍化的意思是買超的訊號已經達到高點,但由於指標只會在 0 –100 之間移動的關係,KD 有可能會持續保持高檔或是低檔一段時間。

克服鈍化的第一個方法我會想到的是那我們就在下跌的時候慢慢買進,每次買進 10% 的現金:

2009/04 開始,每次買進 10% 現金的 0050

慢慢加倉的結果

我們可以發現獲利變好了,藍色的點多過紅色的點代表 勝率變高,但是少數的虧損依然是讓整體獲利變差,代表 益損比 很糟糕。10 年的時間獲利只有 10 % 左右,比定存還糟糕應該是大家很難接受的成果,更何況這次的測試我們還偷偷幫策略閃過了 2008 年的金融海嘯。

▍結論

交易策略的問題

回測過後再回頭仔細閱讀這些策略相關的文章就會發現一些問題:

  1. 該如何決定訊號測量的時間長度?常見是 14 天,有的是 9 天,甚至也可以有用週為單位。
  2. 多頭空頭的判斷的方法不太一致,我們該如何判斷現在是多頭還是空頭?
  3. 哪些交易商品符合技術指標的統計特徵?

改進的方向

  1. 尋找最佳化參數,選出一個交易頻率跟勝率更好的參數
  2. 嘗試改進加倉減倉的比例
  3. 試試看不同的商品類型,個股或者是其他的 ETF。

其實這些問題不透過驗證很難知道採用這些策略是不是真的能夠獲利,我們必須透過回測來大致上了解在過去的歷史這個特定方法統計上的事實是什麼,才能讓我們做出判斷決定冒險或是再找更好的投資策略。

接下來的系列文章會繼續來嘗試對這個策略進行最佳化,看看能不能找出打敗 買進並且長期持有 0050 獲利的方法!

謝謝您的閱讀!如果有任何回饋或有興趣的主題,歡迎留言給 CAGR.RUN !如果單純想給我一點鼓勵,請給我 1–10 個拍手
如果覺得文章對你有點幫助,請給我 11-30 個拍手
如果想看更多資料科學或是投資的秘密,請盡情長按拍手(max 50)讓我們知道 👏🏻
想要持續追蹤 CAGR.RUN 的最新文章,請記得訂閱,雖然沒有小鈴鐺。
我們每個週末都會認真更新文章,持續設計程式小工具或是提供新的知識!
所有設計的工具可以到 https://www.cagr.run/ 來尋寶喔!

--

--

Ming Cheng Ho a.k.a Memorysaver
CAGR.RUN

iCHEF Co-founder. Love to code and figure out tech stuff. I am recently interested in Quantitative Investing.