Backtrader guid 参数调优代码错误
示例代码中 LOG输入的是四个参数 但是定义中确实三个参数
后续需要在更改下LOG 更 import datetime # 导入backtrader框架 import backtrader as bt import akshare as ak # 升级到最新版 import pandas as pd # 创建策略继承bt.Strategy class TestStrategy(bt.Strategy): params = ( # 均线参数设置15天,15日均线 ('maperiod', 15), ('printlog', False), ) def log(self, txt, dt=None, doprint=False): # 记录策略的执行日志 if self.params.printlog or doprint: dt = dt or self.datas[0].datetime.date(0) print('%s, %s' % (dt.isoformat(), txt)) def __init__(self): # 保存收盘价的引用 self.dataclose = self.datas[0].close # 跟踪挂单 self.order = None # 买入价格和手续费 self.buyprice = None self.buycomm = None # 加入均线指标 self.sma = bt.indicators.SimpleMovingAverage(self.datas[0], period=self.params.maperiod) # 订单状态通知,买入卖出都是下单 def notify_order(self, order): if order.status in [order.Submitted, order.Accepted]: # broker 提交/接受了,买/卖订单则什么都不做 return # 检查一个订单是否完成 # 注意: 当资金不足时,broker会拒绝订单 if order.status in [order.Completed]: if order.isbuy(): self.log( '已买入, 价格: %.2f, 费用: %.2f, 佣金 %.2f' % (order.executed.price, order.executed.value, order.executed.comm)) self.buyprice = order.executed.price self.buycomm = order.executed.comm elif order.issell(): self.log('已卖出, 价格: %.2f, 费用: %.2f, 佣金 %.2f' % (order.executed.price, order.executed.value, order.executed.comm)) # 记录当前交易数量 self.bar_executed = len(self) elif order.status in [order.Canceled, order.Margin, order.Rejected]: self.log('订单取消/保证金不足/拒绝') # 其他状态记录为:无挂起订单 self.order = None # 交易状态通知,一买一卖算交易 def notify_trade(self, trade): if not trade.isclosed: return self.log('交易利润, 毛利润 %.2f, 净利润 %.2f' % (trade.pnl, trade.pnlcomm)) def next(self): # 记录收盘价 self.log('Close, %.2f' % self.dataclose[0]) # 如果有订单正在挂起,不操作 if self.order: return # 如果没有持仓则买入 if not self.position: # 今天的收盘价在均线价格之上 if self.dataclose[0] > self.sma[0]: # 买入 self.log('买入单, %.2f' % self.dataclose[0]) # 跟踪订单避免重复 self.order = self.buy() else: # 如果已经持仓,收盘价在均线价格之下 if self.dataclose[0] < self.sma[0]: # 全部卖出 self.log('卖出单, %.2f' % self.dataclose[0]) # 跟踪订单避免重复 self.order = self.sell() # 测略结束时,多用于参数调优 def stop(self): self.log('(均线周期 %2d)期末资金 %.2f' % (self.params.maperiod, self.broker.getvalue()), doprint=True) if __name__ == '__main__': # 创建Cerebro引擎 cerebro = bt.Cerebro() # Cerebro引擎在后台创建broker(经纪人),系统默认资金量为10000 # 为Cerebro引擎添加策略 # cerebro.addstrategy(TestStrategy) # 为Cerebro引擎添加策略, 优化策略 # 使用参数来设定10到31天的均线,看看均线参数下那个收益最好 strats = cerebro.optstrategy( TestStrategy, maperiod=range(10, 31)) ##加载交易数据 # 利用 AKShare 获取股票的后复权数据,这里只获取前 6 列 stock_hfq_df = ak.stock_zh_a_hist(symbol="000718", adjust="hfq", start_date='2020-01-01', end_date='2022-07-17').iloc[:, :6] # 处理字段命名,以符合 Backtrader 的要求 stock_hfq_df.columns = [ 'date', 'open', 'close', 'high', 'low', 'volume', ] # 把 date 作为日期索引,以符合 Backtrader 的要求 stock_hfq_df.index = pd.to_datetime(stock_hfq_df['date']) data = bt.feeds.PandasData(dataname=stock_hfq_df) # 加载数据 ## # 加载交易数据 cerebro.adddata(data) # 设置投资金额1000.0 cerebro.broker.setcash(1000.0) # 每笔交易使用固定交易量 cerebro.addsizer(bt.sizers.FixedSize, stake=10) # 设置佣金为0.0 cerebro.broker.setcommission(commission=0.0) cerebro.run()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现