为什么会出现在当前的bar.datetime时间下,之前的数据与原始值发生了变化,导致连续出现相同的信号
求教有没有大佬能帮忙解决一下这个问题呢
为什么会出现在当前的bar.datetime时间下,之前的数据与原始值发生了变化,导致连续出现相同的信号
求教有没有大佬能帮忙解决一下这个问题呢
在VeighNa平台的CTA策略中,使用ArrayManager
计算EMA指标时,随着K线更新导致EMA数值发生变化,这确实与EMA指标的计算方法有关。具体原因如下:
EMA(指数移动平均)是一种递归计算的指标,其计算公式为:
EMA_today = (Price_today * α) + (EMA_yesterday * (1 - α))
其中,α = 2 / (N + 1)
,N
为EMA的窗口周期。
由于EMA的计算依赖于前一天的EMA值,因此当新的K线数据加入时,EMA的计算会基于最新的价格和前一天的EMA值重新计算,从而导致EMA数值发生变化。
增加缓存数据长度(即ArrayManager
的初始化长度)可以在一定程度上缓解EMA数值的波动,但并不能完全消除。原因如下:
为了减少EMA数值的波动,可以采取以下措施:
ArrayManager
的初始化长度足够长(例如设置为EMA窗口周期的2倍以上),以减少初始化阶段的影响。在策略中,可以通过以下方式设置ArrayManager
的缓存长度并计算EMA:
# 初始化ArrayManager,设置缓存长度为1000
self.am = ArrayManager(1000)
# 更新K线数据
self.am.update_bar(bar)
# 计算EMA指标
ema_value = self.am.ema(window=20) # 假设EMA窗口为20
通过以上方法,可以在一定程度上减少EMA数值的波动,但需要注意EMA本身的递归计算特性。
希望以上解答对您有所帮助!