计算双指数移动平均(DEMA)后比较收盘价与DEMA触发ValueError的问题求助
计算双指数移动平均(DEMA)后比较收盘价与DEMA触发ValueError的问题求助
大家好,我最近在基于Backtrader写交易策略时,自己实现了双指数移动平均(DEMA)的计算逻辑,但在比较收盘价和DEMA值的时候触发了一个ValueError,卡在这里好一会儿了,想请社区的朋友们帮忙诊断下问题。
我的DEMA计算代码
首先是我用来计算DEMA的自定义类:
import backtrader as bt import pandas as pd class CalculateDema: def __init__(self, data, period): self.period = period self.data = data close = [] for i in self.data: close.append(i) self.df = pd.DataFrame(close) def calculate_ema(self, data, period): return data.ewm(span=period, adjust=False).mean() def calculate_dema(self): ema1 = self.calculate_ema(self.df, self.period) ema2 = self.calculate_ema(ema1, self.period) dema = (2 * ema1) - ema2 dema_df = pd.DataFrame(dema) return dema_df
主逻辑中的调用与输出
在策略的主逻辑里,我通过以下方式调用这个类并获取DEMA结果:
dema = CalculateDema(data = self.dataclose, period = self.p.period) self.dema = dema.calculate_dema()
当我打印self.dema[0]时,得到的是一整个Pandas Series,输出格式如下:
0 56258.620924 1 56140.770683 2 56064.450842 3 56025.820675 4 55990.549055 ... 1496 56300.308681 1497 56291.186529 1498 56289.345639 1499 56289.648383 1500 56278.184361 Name: 0, Length: 1501, dtype: float64
触发错误的比较代码与报错信息
接下来我尝试编写条件判断逻辑,想检查当前bar的收盘价是否同时大于等于DEMA值和Donchian通道的中轨,代码如下:
if (self.dataclose[0] >= self.dema[0] and self.dataclose[0] >= self.donchian.dcm[0]): # 执行预设的交易操作 do something
结果运行时直接触发了ValueError,错误信息指向self.dataclose[0] >= self.dema[0]这部分判断:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我的疑惑
我本来以为self.dema[0]会取到当前bar对应的单个DEMA值,但看起来这里拿到的是整个Series?或者是不是我在DEMA计算、数据传递的环节哪里处理错了?应该怎么修改才能正确完成单根bar的收盘价与对应DEMA值的比较呢?
麻烦大家帮我看看,谢谢啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

