You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Backtrader Optstrategy触发AttributeError:无法获取MA_strategy属性

解决Backtrader Optstrategy的AttributeError问题

错误原因

这个错误是因为Backtrader的optstrategy默认采用多进程并行执行参数优化,而Windows系统的多进程机制要求被序列化的对象(这里是你的MA_strategy类)必须能被子进程正确导入。当策略类定义在__main__模块(即直接运行的脚本文件)中时,子进程无法定位到这个类,从而抛出AttributeError。

解决方案

方案1:将策略类移至独立模块(推荐)

把MA_strategy类单独放到一个Python文件中,让子进程能正常导入该类。

  1. 创建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()
  1. 在主脚本中修改导入语句:
from strategies import MA_strategy

方案2:强制使用单进程执行优化

如果不想拆分文件,可以在调用cerebro.run()时指定maxcpus=1,禁用多进程,避免序列化问题。

修改主脚本中的运行代码:

result = cerebro.run(maxcpus=1)

注意:此方法会让参数优化变为串行执行,当参数范围较大时,运行速度会明显变慢。

内容的提问来源于stack exchange,提问作者user23981884

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 20:35:27