跳至主要內容
FinLab

用Python投資加密貨幣:三年20倍的策略參數最佳化 (Part 7)

這篇文章中,我們將承接著之前的單元,來教大家怎麼做策略參數最佳化!

用 Python 投資加密貨幣策略參數最佳化教學封面

必備的單元提要:

  1. 環境設定:使用 colab 並且安裝相關 packages
  2. 簡單回測:利用均線相交產生買賣訊號回測

要執行完上述兩個單元的程式碼,才能繼續接下來的單元喔!

我們將上次的回測程式改成以下的樣子,請大家來比較一下有什麼不同:

顯示程式碼
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種加密貨幣實戰策略,並且能夠自動化雲端交易!有興趣的話,可以點此觀看課程介紹影片喔!

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始