iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
永豐金融APIs

永豐金API之30天不中斷Q&A系列 第 16

Day16 - Shioaji X Backtesting - 參數最佳化

  • 分享至 

  • xImage
  •  

上一篇介紹如何在Backtesting寫策略,這篇會和大家介紹如何做參數的最佳化。

什麼是參數最佳化呢?簡單來說就是找到一個參數,能讓「(目標)」(最佳)。
而這個「結果(目標)」可以是勝率、最後帳戶總淨值、Sharpe Ratio等等,
根據不同的目標做參數的最佳化,很可能會得到不一樣的參數喔!

拿上一篇的策略來做參數最佳化,看看2330用哪條均線能讓帳戶總淨值最高。

#這邊會將均線參數從2~240去跑跑看這239個參數中哪一個能讓最後帳戶總淨值最高
stats = bt.optimize(n1=range(2, 241, 1),maximize='Equity Final [$]')
stats

來看看根據「期末帳戶總淨值(Equity Final [$])」最佳化後的結果吧:

Out:
---------------------------------------------
Start                     2020-01-02 00:00:00
End                       2021-09-22 00:00:00
Duration                    629 days 00:00:00
Exposure [%]                        56.915739
Equity Final [$]                 16862.610291
Equity Peak [$]                  22388.556221
Return [%]                          68.626103
Buy & Hold Return [%]               72.861357
Max. Drawdown [%]                  -24.682011
Avg. Drawdown [%]                   -4.579849
Max. Drawdown Duration      244 days 00:00:00
Avg. Drawdown Duration       29 days 00:00:00
# Trades                                    9
Win Rate [%]                        22.222222
Best Trade [%]                      93.488372
Worst Trade [%]                      -3.02392
Avg. Trade [%]                       9.078804
Max. Trade Duration         296 days 00:00:00
Avg. Trade Duration          40 days 00:00:00
Expectancy [%]                      11.798029
SQN                                  0.744065
Sharpe Ratio                          0.28662
Sortino Ratio                        8.522299
Calmar Ratio                         0.367831
_strategy                        OneMA(n1=76)
dtype: object

下圖是優化前(60MA)和優化後(76MA)比較圖,

從圖中可以發現:(紅色框部分)
期末帳戶總淨值:從15061->16862,
總報酬率:從50.6%->68.6%,
Sharpe Ratio和Sortino Ratio也都有成長,

但綠色框的勝率變低了,這也是上面提的,參數僅會根據你的目標做最佳化,未必所有數據都變好。

將目標改成勝率,看看過去這段期間2330用哪條均線能讓策略的勝率最高。

#這邊會將均線參數從2~240去跑跑看這239個參數中哪一個能讓最後帳戶總淨值最高
stats = bt.optimize(n1=range(2, 241, 1),maximize='Win Rate [%]')
stats

來看看根據「勝率(Win Rate [%])」最佳化後的結果吧:

Out:
---------------------------------------------
Start                     2020-01-02 00:00:00
End                       2021-09-22 00:00:00
Duration                    629 days 00:00:00
Exposure [%]                        52.941176
Equity Final [$]                 12581.739697
Equity Peak [$]                  14826.858424
Return [%]                          25.817397
Buy & Hold Return [%]               72.861357
Max. Drawdown [%]                   -18.72214
Avg. Drawdown [%]                   -5.958689
Max. Drawdown Duration      244 days 00:00:00
Avg. Drawdown Duration       50 days 00:00:00
# Trades                                    1
Win Rate [%]                            100.0
Best Trade [%]                      28.560535
Worst Trade [%]                     28.560535
Avg. Trade [%]                      28.560535
Max. Trade Duration         333 days 00:00:00
Avg. Trade Duration         333 days 00:00:00
Expectancy [%]                            NaN
SQN                                       NaN
Sharpe Ratio                              NaN
Sortino Ratio                             NaN
Calmar Ratio                         1.525495
_strategy                       OneMA(n1=171)
dtype: object

從上面的數據可以發現:

使用171MA,策略勝率來到了100%,雖然報酬率有25.8%,

但交易次數只剩一次,但很明顯是overfitting的結果,並不適合拿來使用。

以上就是針對用backtesting回測框架的簡介,

過幾天會再和大家分享如何寫MACD和RSI的策略,請大家持續關注我們唷!


上一篇
Day15 - Shioaji X Backtesting -均線突破策略
下一篇
Day17 - 如何用shioaji搭配Ta-Lib計算技術指標: 應用篇
系列文
永豐金API之30天不中斷Q&A26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言