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

Backtrader绘图报错ValueError: Axis limits cannot be NaN or Inf求助

Backtrader绘图报错ValueError: Axis limits cannot be NaN or Inf求助

嘿,我之前也碰到过这个ValueError: Axis limits cannot be NaN or Inf的问题,咱们来一步步拆解排查~

首先看你的代码,随机生成的数据确实不存在NaN或Inf值,那问题大概率出在Backtrader没有正确识别时间序列数据上——绘图时无法确定时间轴的有效范围,才抛出了这个轴限错误。

问题根源

你自定义的MyDataFeed里,把datetime参数设成了None,但你的DataFrame是用date列做索引的(datetime类型),Backtrader需要明确知道从哪里读取时间信息,否则绘图时时间轴没有有效数据,就会出现轴限为NaN的情况。

解决方案

给你两个可行的修复方案,选一个就行:

方案1:修复自定义DataFeed的datetime参数

把自定义DataFeed里的datetime参数改成-1,这个值表示让Backtrader直接使用DataFrame的索引作为时间列:

class MyDataFeed(bt.feeds.PandasData):  
    params = (  
        ('datetime', -1),  # 用DataFrame的索引作为datetime
        ('high', -1),  
        ('low', -1),  
        ('open', -1),  
        ('close', -1),  
        ('volume', None),
        ('openinterest', None),
    )

方案2:直接用默认的PandasData(更简单)

你的DataFrame列名(High、Low、Open、Close)完全符合Backtrader默认的PandasData参数要求,其实根本不需要自定义DataFeed,直接替换成下面的代码就行:

cerebro.adddata(bt.feeds.PandasData(dataname=df_random))

验证方法

修改之后重新运行代码,先确保cerebro.run()没有报错,再调用cerebro.plot(iplot=False),应该就能正常生成绘图了。

如果还是有问题,可以检查下策略里的指标是否正确关联了数据源,不过从你的代码看,self.sma = bt.indicators.SimpleMovingAverage(self.data)是没问题的,只要数据源的时间和价格数据正确读取,指标也能正常计算。

备注:内容来源于stack exchange,提问作者Nik Vh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:24:30