Day22 - Shioaji X Backtesting -双均线策略

Shioaji X Backtesting -双均线策略

好啦!经过这麽多堂课,相信大家对Backtesting有一定的认识了,
今天要来和大家分享的是常见的双均线策略。

双均线策略-TwoMA

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

class TwoMA(Strategy):   
    # 定义长短天期均线参数
    n1 = 20
    n2 = 60
    
    # 先算好均线(技术指标)价格
    def init(self):       
        self.sma1 = self.I(SMA, self.data.Close, self.n1)
        self.sma2 = self.I(SMA, self.data.Close, self.n2)

    #一次推进一根 K 棒    
    def next(self):       
        #短天期均线较长天期均线高,隔日开盘价买进
        if self.sma1 > self.sma2 and (not self.position.is_long):
            self.buy()
        #短天期均线较长天期均线低,隔日开盘价卖出
        elif self.sma2 > self.sma1 :
            self.position.close()

Backtesting回测罗!

#输入回测的条件,df是上一篇台积电日K资料,TwoMA是写好的策略,初始资金10000,交易成本0.2%
bt = Backtest(df, TwoMA, cash=10000, commission=0.002)

#将跑完回测得到的数据放到stats
stats = bt.run()
stats

从下面的回测结果可以发现:

资料:台积电2020-2021/9/22

策略:「短均线>长均线做多,短均线<长均线出场」

绩效:单单用月线和季线的组合,竟然就有90%的报酬!

Out:
---------------------------------------------
Start                     2020-01-02 00:00:00
End                       2021-09-22 00:00:00
Duration                    629 days 00:00:00
Exposure [%]                        59.300477
Equity Final [$]                 19049.461623
Equity Peak [$]                  22923.436404
Return [%]                          90.494616
Buy & Hold Return [%]               72.861357
Max. Drawdown [%]                  -16.899625
Avg. Drawdown [%]                   -3.820395
Max. Drawdown Duration      244 days 00:00:00
Avg. Drawdown Duration       27 days 00:00:00
# Trades                                    2
Win Rate [%]                             50.0
Best Trade [%]                     101.822896
Worst Trade [%]                     -0.202401
Avg. Trade [%]                      50.810247
Max. Trade Duration         322 days 00:00:00
Avg. Trade Duration         187 days 00:00:00
Expectancy [%]                      51.012648
SQN                                  0.992163
Sharpe Ratio                         0.704301
Sortino Ratio                             NaN
Calmar Ratio                          3.00659
_strategy                               TwoMA

一行code把图画出来

bt.plot(superimpose = False)

接着来做最佳化吧!

stats = bt.optimize(n1=range(10, 41, 1),
                    n2=range(41, 121, 1),
                    maximize='Equity Final [$]',
                    )
stats
Out:
---------------------------------------------
Start                     2020-01-02 00:00:00
End                       2021-09-22 00:00:00
Duration                    629 days 00:00:00
Exposure [%]                        55.166932
Equity Final [$]                 21305.634403
Equity Peak [$]                  22923.436404
Return [%]                         113.056344
Buy & Hold Return [%]               72.861357
Max. Drawdown [%]                  -14.561664
Avg. Drawdown [%]                   -3.776633
Max. Drawdown Duration      244 days 00:00:00
Avg. Drawdown Duration       28 days 00:00:00
# Trades                                    3
Win Rate [%]                            100.0
Best Trade [%]                     102.861905
Worst Trade [%]                      1.855479
Avg. Trade [%]                      35.984833
Max. Trade Duration         315 days 00:00:00
Avg. Trade Duration         116 days 00:00:00
Expectancy [%]                            NaN
SQN                                  1.160389
Sharpe Ratio                          0.62127
Sortino Ratio                             NaN
Calmar Ratio                         2.471203
_strategy                  TwoMA(n1=40,n2=48)

最佳化後用40和48这两条均线可以得到最佳解!

虽然这绩效看起来真的惊人,但这看起来也未免太人工了,
因此这边只是帮大家熟悉一下基本策略如何实作及最佳化,
大家可别直接拿去用啊!

之前安装了Talib,下一篇会介绍用Talib的RSI低买高卖策略!


<<:  Day 22 Flask-SocketIO

>>:  [DAY29]GKE-从0开始动手建k8s

DAY 4 - 牛头怪

大家好~ 我是五岁~ 今天来画牛头怪~ 今天会尝试卡通风格~ 目标是一只跟人一样站立的牛头怪,武器是...

失败的升级维护...

以Android的环境特性来看,这种事情迟早要碰到... 「核心功能的元件要整个换掉。」 这种事情理...

Day 12- 提计画案初体验

开启Word档案後先是脑袋一片空白於是请教了同事有没有计画书的范本,看完之後灵感有如用涌泉般的冒出,...

疫後数位化

人的科技文明发展始终来自於人性 在疫情的时代当中,当所有的一切都变得不再单纯时,或是当所有的一切都变...

Day9 - 串接 LINE Login 与 LIFF

Heroku 网址:https://www.heroku.com/ LINE Developers...