iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
永豐金融APIs

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

Day15 - Shioaji X Backtesting -均線突破策略

Backtesting到底要怎麼用呢?這邊我們會一步一步向大家介紹,
最簡單的方式就是直接實做一個策略來和大家講解裡面的細節。

那我們就先從實做一條均線(季線60MA)做進出場依據的策略開始吧,把策略取名為OneMA。

from backtesting import Backtest, Strategy 
from backtesting.lib import crossover
from backtesting.test import SMA 
import talib

class OneMA(Strategy): 
    
    n1 = 60  #預設的均線參數
    
    def init(self): #初始化會用到的參數和指標,告知要如何計算
        self.sma1 = self.I(SMA, self.data.Close, self.n1) 

    def next(self): #回測的時候每一根K棒出現什麼狀況要觸發進出場
        #如果收盤價>sma1(也就是60ma),而且目前沒有多單部位
        if (self.data.Close > self.sma1) and (not self.position.is_long) :
            self.buy()#做多
        #如果收盤價<sma1(也就是60ma)
        elif (self.data.Close < self.sma1):
            self.position.close()#部位出場
                                 #如果要做空就用self.sell()

策略搞定之後就要來用Backtest回測囉!

#輸入回測的條件,df是上一篇台積電日K資料,OneMA是寫好的策略,初始資金10000,交易成本0.2%
bt = Backtest(df, OneMA, cash=10000, commission=0.002)

#將跑完回測得到的數據放到stats
stats = bt.run()
stats

從下面的回測結果可以發現:
資料:台積電2020-2021/9/22
策略:「高於季線做多,跌破出場」
績效有超過50%,但卻比買進並持有的績效還差!
這段期間的Sharpe Ratio更是低到只有0.23!
勝率也只有不到3成的27.7%!

Out:
---------------------------------------------
Start                     2020-01-02 00:00:00
End                       2021-09-22 00:00:00
Duration                    629 days 00:00:00
Exposure [%]                        58.028617
Equity Final [$]                 15061.227055
Equity Peak [$]                  21692.629027
Return [%]                          50.612271
Buy & Hold Return [%]               72.861357
Max. Drawdown [%]                   -30.56984
Avg. Drawdown [%]                   -4.895715
Max. Drawdown Duration      244 days 00:00:00
Avg. Drawdown Duration       30 days 00:00:00
# Trades                                   18
Win Rate [%]                        27.777778
Best Trade [%]                      47.195966
Worst Trade [%]                      -3.02392
Avg. Trade [%]                       3.034155
Max. Trade Duration         162 days 00:00:00
Avg. Trade Duration          21 days 00:00:00
Expectancy [%]                       5.630253
SQN                                   0.84756
Sharpe Ratio                         0.231967
Sortino Ratio                        3.252764
Calmar Ratio                         0.099253
_strategy                               OneMA

接著我們用下面這行code就能把圖畫出來囉!

bt.plot(superimpose = False)

這張圖配色舒服,互動體驗也很好,也可以客製化調整只秀出你想看到的數據,趕快來玩玩看吧!

從回測資料看來這個策略還有很大的改善空間,那要怎麼做策略的最佳化呢?
請期待我們下一篇的文章喔!


上一篇
Day14 - Shioaji X Backtesting -回測框架搭配API歷史資料
下一篇
Day16 - Shioaji X Backtesting - 參數最佳化
系列文
永豐金API之30天不中斷Q&A26

尚未有邦友留言

立即登入留言