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

上一篇 文章嘗試使用坊間常見的 KD 指標來進行投資,會發現實際上單純使用 日 K<20 時買進,日 K>80 時賣出 的策略在實際執行上交易的成果並不好,那我們有什麼方法可以來進化這個策略呢?最常見的辦法就是使用 Grid Search 來找出最佳的策略參數。

▍Grid Search 網格搜索

網格搜尋的想法其實非常的單純,就是透過窮舉的方式來找出所有參數組合之中的最佳組合,以我們現在要最佳化的 KD 指標為例,我們在上一篇文章之中有提出一個質疑,為什麼我們的交易訊號得是 20 跟 80 呢?有沒有可能是 10 跟 90 ? 還是有任何更好的組合,那我們會透過窮舉的方式來找出最佳組合。

以下我們使用 Fastquant 來進行 Grid Search , Fastquant 是 2020 年才開始發展的回測系統,目標是可以快速地幫助你回測策略。 Fastquant 有提供很方便的 Grid Search 的功能,只要你輸入要窮舉的 python list object,就能快速的進行 Grid Search。另外我們也會利用 TA 來計算技術指標的數值, TA 是一套提供技術指標數學計算的套件,可以減少我們得自己手寫技術指標數學計算的好用工具。

以下是 Grid Search 的程式碼,基本的設定跟上一次我們在第一篇文章的設定是一樣的,也會嘗試慢慢加碼買進。

import pandas as pd
from fastquant import backtest, get_stock_data
from ta.momentum import StochasticOscillator
# Fastquant 套件會使用 Yahoo Finance 來取得股價
df = get_stock_data("0050.TW", "2008-01-01", "2020-10-15", format='ohlcv')
# 透過 TA 底下的 KD 函式來計算 K 值
indicator = StochasticOscillator(close=df['close'], high=df['high'], low=df['low'], n=14)
df_k = indicator.stoch()
df['k'] = df_k
# 透過 range 建立 list object 來搜尋最佳參數
backtest("custom", df, upper_limit=range(10, 90, 5), lower_limit=range(10, 90, 5), custom_column='k', buy_prop=0.1, commission=0.003)

▍Grid Search 搜尋結果

K<10 時買進,日 K>50 時賣出 0050

執行過後的結果,由機器進行 Grid Search 後會發現,最佳的參數其實是 日 K<10 時買進,日 K>50 時賣出 ,反而是比較好的參數,不過從 2008 年交易到 2020–10–15 日的成績,其實也是只能有 103991 元,看來這個策略只要遇到金融海嘯都不會有太好的結果。

如果還有讀者真的想要試試看各種不同的參數,甚至也想要搜尋 KD 指標計算天數的最佳範圍的話,可以嘗試安裝 Fastquant 來試試看不同的組合。

▍結論

其實單純使用技術指標是很難取得太好的回報,大多看起來好的回測結果,只是透過窮舉參數取得最佳答案,非常有可能是 Over-fitting (過度擬合) 的結果,因為我們始終都是 用過去的歷史去找未來可能的答案,單純只是使用單一技術指標找出過去最佳化的參數,只是對過去的結果找出最好的獲利罷了,事實上我們並不能確定在未來也能取得一樣好的回報。 筆者其實更傾向透過 資產配置 的方式來取得獲利,對大部分的投資人來說,更容易執行,更容易讓自己專注在生活!

很抱歉讓大家失望了,我們其實沒辦法只透過 Grid Search 來改進 KD 的策略,不過至少讓大家了解,以日為觀察基礎的單一技術指標的策略,既耗費精神,甚至因為交易成本過高的關係其實是很難取得獲利的!

謝謝您的閱讀!如果有任何回饋或有興趣的主題,歡迎留言給 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.