代码之家  ›  专栏  ›  技术社区  ›  kbs

回溯测试中的真值歧义错误.py回溯测试

  •  0
  • kbs  · 技术社区  · 2 年前

    我正在尝试使用Backtesting.py对动量策略进行回溯测试。我已经使用pandas_ta收集了数据并计算了指标值。我已经定义了空头和多头交易条件。现在我只需要Backtesting.py来运行一个backtest,这样我就可以确定我的策略在历史数据上的性能。

    此笔记本包含所有代码以及我收到的错误:

    https://github.com/kbs-code/algo_trader/blob/master/backtests/backtestingdotpy_broad_market_ema_vortex.ipynb

    最新的错误是:

    ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
    

    我在谷歌上搜索了这种类型的错误,并试图使用括号、逐位(和)和逻辑(和)来解决它。我不认为我的真相陈述在Python中是非法的,但我可能错了。 我还阅读了Backtesting.py的文档,以尽我所能理解这个框架。

    如有任何帮助,我们将不胜感激。

    1 回复  |  直到 2 年前
        1
  •  0
  •   enzo    2 年前

    二者都 self.close self.ema DataFrame 系列比较两个系列(例如。 self.close > self.ema )结果为布尔级数:

    a = pd.Series([1, 2, 3, 4])
    b = pd.Series([3, 1, 4, 2])
    print(a > b)    # Outputs pd.Series([False, True, False, True])
    

    在if语句中使用布尔序列(例如。 if a > b: )是模棱两可的,因为Pandas不知道你的意思:如果所有项目都是true,那么这个表达式应该评估为true吗?如果至少有一项为true,它的值应该为true?

    因此,您需要将其与 .any() .all() :

    if (a > b).all():  # If all items in `a` are greater than
        pass           # their corresponding items in `b`
    
    if (a > b).any():  # If any item in `a` is greater than
        pass           # their corresponding item in `b`
    

    这会让阅读您代码的人和您自己更清楚地了解您的意图。

    推荐文章