今天開始處理訓練集和驗證集的問題
開始前先安裝yahoo finance的package
pip install yfinance
以前有安裝過的也可以先更新一下,我這邊的用法參考最新的版本,我也不知道新舊版會有甚麼差別
在進入正題之前先講講要做這邊要什麼,前一天用來做最佳化跟回測績效的時間範圍如下圖所示,兩者時間範圍是重疊的,這樣說這一套策略可以使用是欠缺說服力的,就像現在的我也拿不到未來的資料作最佳化一樣的意思。
在驗證這套流程預測未來能力的階段,使用的最佳化時間範圍和回測績效的時間範圍應該如下圖所示,前者時間在前,後者時間在後,而且不要重疊。所以這邊會拿更長時間的資料減去之前抓到的資料來做最佳化,而回測績效的部分用之前那個就行了。
進入程式碼的部分,先把途中的部分註解或移除掉,這邊用不到,跑起來也滿花時間的
再來就是正題,一開始是使用今天新加入的yfinance抓取0050的部分,這個工具包他是可以爬全球股票的日K,所以0050後面要加個.tw。再來就是把這個新抓的0050股價時間和之前文章抓的0050股價時間重疊的部份去掉,避免作弊的問題。後面就是一些資料處理,因為yfinance的價格裡面有一些是0,在最佳化的時候會出錯。後面的部分都和之前做得差不多,不過我把最佳化的range從(x,y,1)改成(x,y,2),應該可以快一點。
以下是跑出來的結果,其實不是很理想,再來看看報酬率曲線圖看看發生了什麼事
以下是報酬率曲線,可以看到不作弊使用2019~現在資料的情況下,在一開始的時候效果還是可以的,就只有吃到2019四月的下跌(看dayopen.index[80]的數值可以知道報酬率曲線開始動的時候是四月十九),2019後面的下跌看起來對報酬率曲線沒甚麼影響。但是到2020就沒甚麼用了。從這邊看起來,這個均線交叉訊號再搭配最佳化的手法,雖然可以用,其實並不能一勞永逸的解決問題,他最佳化的參數是有個賞味期的,大概每隔三個月到一年就要再做一次最佳化比較好。
有均線交叉搭配最佳化的範例,要改用RSI或MACD之類的也不是難事,所以這部份我可能想不到要做甚麼的時候再用來發文。接下來我會先試著做跨市交易,讓手上的部位在0051和0050之間做切換之類的,一樣使用均線。