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

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

必備的單元提要:

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
就可以了,非常方便:

1
2
result2 = bt.optimize(n1=range(5, 100, 5),
n2=range(5, 100, 5))

優化後的結果

由於策略優化完後,參數會自動更新
所以我們可以用

1
bt.plot()

來看優化後的績效就可以了!

三年半 20 倍,是不是很夢幻呀!而且還多空都賺
拿量化交易的方式交易比特幣,
就像是拿大砲對付刀劍一樣

我們可以將優化前後的績效比對一下,
真的差很多呢!

1
2
result1._trade_data.Equity.plot()
result2._trade_data.Equity.plot()

但隨著期貨市場的開放
這樣的績效,或許沒辦法重現,
或許市場已經慢慢走向效率化,
可以看到2019年以後,賺得比較少

但是加密貨幣又不是只有 BTC,
一定有很多未開發的地帶,
等著量化交易去開拓的!
所以也不用太擔心!

這些單元的用意
就是在你在開江闢土時
提供你豐富的資源,
讓你在開發策略事半功倍!

你可以到FinLab粉專
點選追蹤,或點讚,就可以收到我們的新單元囉!

文章不錯,影音課程更讚:


或我們按個 鼓勵一下吧!