好啦!经过这麽多堂课,相信大家对Backtesting有一定的认识了,
今天要来和大家分享的是常见的双均线策略。
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()
#输入回测的条件,df是上一篇台积电日K资料,TwoMA是写好的策略,初始资金10000,交易成本0.2%
bt = Backtest(df, TwoMA, cash=10000, commission=0.002)
#将跑完回测得到的数据放到stats
stats = bt.run()
stats
从下面的回测结果可以发现:
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
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)
虽然这绩效看起来真的惊人,但这看起来也未免太人工了,
因此这边只是帮大家熟悉一下基本策略如何实作及最佳化,
大家可别直接拿去用啊!
大家好~ 我是五岁~ 今天来画牛头怪~ 今天会尝试卡通风格~ 目标是一只跟人一样站立的牛头怪,武器是...
以Android的环境特性来看,这种事情迟早要碰到... 「核心功能的元件要整个换掉。」 这种事情理...
开启Word档案後先是脑袋一片空白於是请教了同事有没有计画书的范本,看完之後灵感有如用涌泉般的冒出,...
人的科技文明发展始终来自於人性 在疫情的时代当中,当所有的一切都变得不再单纯时,或是当所有的一切都变...
Heroku 网址:https://www.heroku.com/ LINE Developers...