分享

backtrader策略参数大规模优化

 禁忌石 2022-05-10 发布于浙江省
# example of optimizing SMA crossover strategy parameters using # Particle Swarm Optimization in the opptunity python library # https://github.com/claesenm/optunity from datetime import datetime import backtrader as bt import optunity import optunity.metrics class SmaCross(bt.SignalStrategy): params = ( ('sma1', 10), # 需要优化的参数1,短期均线窗口 ('sma2', 30), # 需要优化的参数2,长期均线窗口 ) def __init__(self): SMA1 = bt.ind.SMA(period=int(self.params.sma1)) # 用int取整 SMA2 = bt.ind.SMA(period=int(self.params.sma2)) # 用int取整 crossover = bt.ind.CrossOver(SMA1, SMA2) self.signal_add(bt.SIGNAL_LONG, crossover) data0 = bt.feeds.YahooFinanceData(dataname='YHOO', fromdate=datetime(2011, 1, 1), todate=datetime(2012, 12, 31)) def runstrat(sma1,sma2): cerebro = bt.Cerebro() cerebro.addstrategy(SmaCross, sma1=sma1, sma2=sma2) cerebro.adddata(data0) cerebro.run() return cerebro.broker.getvalue() # 执行优化,执行100次回测(num_evals),设置两个参数的取值范围 opt = optunity.maximize(runstrat, num_evals=100,solver_name='particle swarm', sma1=[2, 55], sma2=[2, 55]) optimal_pars, details, _ = opt print('Optimal Parameters:') print('sma1 = %.2f' % optimal_pars['sma1']) print('sma2 = %.2f' % optimal_pars['sma2']) cerebro = bt.Cerebro() cerebro.addstrategy(SmaCross, sma1=optimal_pars['sma1'], sma2=optimal_pars['sma2']) cerebro.adddata(data0) cerebro.run() cerebro.plot()

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多