這篇文章中,我們將承接著之前的單元,來教大家怎麼做策略參數最佳化!
必備的單元提要:
- 環境設定:使用 colab 並且安裝相關 packages
- 簡單回測:利用均線相交產生買賣訊號回測
要執行完上述兩個單元的程式碼,才能繼續接下來的單元喔!
我們將上次的回測程式改成以下的樣子,請大家來比較一下有什麼不同:
from backtesting import Backtest
from backtesting.lib import SignalStrategy
import pandas as pd
class Strategy(SignalStrategy):
n1 = 20
n2 = 60
def init(self):
super().init()
# Precompute the two moving averages
close = pd.Series(self.data.Close)
sma1 = close.rolling(self.n1).mean()
sma2 = close.rolling(self.n2).mean()
# Precompute signal
signal_long = (sma1 > sma2) & (sma1.shift() < sma2.shift())
signal_short = (sma1 < sma2) & (sma1.shift() > sma2.shift())
# combine signal
signal = signal_long
signal[signal_short] = -1
# add signal
self.set_signal(signal)
bt = Backtest(df, Strategy)
result1 = bt.run()
bt.plot()
沒錯,我們新增了7、8行的物件參數,分別代表兩條均線的參數,並且在15、16行,製作均線時,使用該參數來製作均線。
另外我們也在倒數第二行,將回測結果存到 result1
,等等可以做比較。
接下來就可以自動最佳化了!
內容目錄
隱藏
暴力枚舉
你可能以為要寫for迴圈,但其實 backtesting 已經幫你寫好了,我們只要將參數範圍傳入 bt.optimize
,就可以了,非常方便:
result2 = bt.optimize(n1=range(5, 100, 5),
n2=range(5, 100, 5))
策略參數最佳化的結果
由於策略優化完後,參數會自動更新,所以我們可以用:
bt.plot()
三年半 20 倍,是不是很夢幻呀!而且還多空都賺,拿量化交易的方式交易比特幣,就像是拿大砲對付刀劍一樣,我們可以將優化前後的績效比對一下,真的差很多呢!
result1._trade_data.Equity.plot()
result2._trade_data.Equity.plot()
但隨著期貨市場的開放,這樣的績效,或許沒辦法重現,或許市場已經慢慢走向效率化,可以看到2019年以後,賺得比較少,但是加密貨幣又不是只有 BTC,一定有很多未開發的地帶,等著量化交易去開拓的,所以也不用太擔心!
這些單元的用意,就是在你在開江闢土時,提供你豐富的資源,讓你在開發策略事半功倍!
更新:很多人都躍躍欲試呢!我幫大家寫好完整的代碼,可以在線上直接運行喔!
請點此
下個階段,我們就可以來真的入金交易囉!
你可以到FinLab粉專,點選追蹤,或點讚,就可以收到我們的新單元囉!
如果喜歡我們的文章,也歡迎參考我們最新募資的線上課程「用 Python 理財:打造加密貨幣實戰策略」,在線上課程中,我們會更有系統、更完整地教您如何從無到有,打造10種加密貨幣實戰策略,並且能夠自動化雲端交易!有興趣的話,可以點此觀看課程介紹影片喔!