使用Backtrader Optstrategy触发AttributeError:无法获取MA_strategy属性
解决Backtrader Optstrategy的AttributeError问题
错误原因
这个错误是因为Backtrader的optstrategy默认采用多进程并行执行参数优化,而Windows系统的多进程机制要求被序列化的对象(这里是你的MA_strategy类)必须能被子进程正确导入。当策略类定义在__main__模块(即直接运行的脚本文件)中时,子进程无法定位到这个类,从而抛出AttributeError。
解决方案
方案1:将策略类移至独立模块(推荐)
把MA_strategy类单独放到一个Python文件中,让子进程能正常导入该类。
- 创建
strategies.py文件,写入策略代码:
import backtrader as bt class MA_strategy(bt.Strategy): params = dict(MA_period = 20) def __init__(self): self.order = None self.SMA = bt.indicators.MovingAverageSimple(period = self.params.MA_period) def next(self): if self.order: return if not self.position: if self.data.close[0] > self.SMA[0]: self.order = self.buy() else: if self.data.close[0] < self.SMA[0]: self.order = self.sell()
- 在主脚本中修改导入语句:
from strategies import MA_strategy
方案2:强制使用单进程执行优化
如果不想拆分文件,可以在调用cerebro.run()时指定maxcpus=1,禁用多进程,避免序列化问题。
修改主脚本中的运行代码:
result = cerebro.run(maxcpus=1)
注意:此方法会让参数优化变为串行执行,当参数范围较大时,运行速度会明显变慢。
内容的提问来源于stack exchange,提问作者user23981884
相关产品推荐
相关产品推荐

