VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 5
声望: 0

rt

Member
avatar
加入于:
帖子: 5
声望: 0

def init(self, cta_engine, strategy_name, vt_symbol, setting):
""" 初始化策略 """
super().init(cta_engine, strategy_name, vt_symbol, setting)

    self.bg = BarGenerator(self.on_bar)
    #self.bg = BarGenerator(self.on_bar,window=5,on_window_bar=self.on_5min_bar)
    self.am = ArrayManager(1000)


def on_init(self):
    self.write_log("策略初始化")
    self.load_bar(20)

def on_start(self):
    self.write_log("策略启动")
    self.put_event()

def on_stop(self):
    self.write_log("策略停止")
    self.put_event()

def on_tick(self, tick: TickData):
    self.bg.update_tick(tick)
    self.bid_price = tick.bid_price_2
    self.ask_price = tick.ask_price_2
'''
def on_bar(self, bar: BarData):
    self.bg.update_bar(bar)'''

def on_bar(self, bar: BarData):
    self.cancel_all()


    am = self.am
    am.update_bar(bar)

    if not am.inited:
        return


    self.normalize_pos()
    # 计算均线
    fast_ma = am.sma(self.fast_window,array=True)
    self.fast_ma0 = fast_ma[-1]
    self.fast_ma1 = fast_ma[-2]

    slow_ma = am.sma(self.slow_window,array=True)
    self.slow_ma0 = slow_ma[-1]
    self.slow_ma1 = slow_ma[-2]

    # 计算ATR
    self.atr_value = am.atr(self.atr_length)
Super Moderator
avatar
加入于:
帖子: 92
声望: 9

为什么 VeighNa 和 TradingView 的 ATR 指标结果不一致?

ATR(真实波幅均值)的计算结果在 VeighNa(使用 TA-Lib)和 TradingView 上出现较大差异,通常由以下原因导致:


1. 计算逻辑不同

  • TA-Lib(VeighNa 使用)
    严格遵循经典 ATR 公式,使用简单移动平均(SMA)计算波幅均值。
  • TradingView
    可能采用不同的平滑方式(如指数移动平均 EMA),或对公式进行了优化调整。

2. 数据源差异

  • K 线数据不同
    两家平台的数据来源(交易所、数据提供商)可能不同,导致开盘价、收盘价等基础数据存在微小差异。
  • 数据清洗规则
    对异常值(如跳空、缺失数据)的处理方式可能不同。

3. 参数设置不同

  • 计算周期(N)
    检查双方是否均设置为 14(默认值),周期不同会导致结果直接差异。
  • 初始值处理
    TA-Lib 和 TradingView 对前 N 根 K 线的初始 ATR 值计算方法可能不同。

4. 时间周期问题

  • K 线划分方式
    例如,1 小时 K 线的起始时间点是否一致(如 TradingView 默认 UTC 时间,VeighNa 可能用本地时间)。
  • 交易时段过滤
    是否包含非交易时段数据(如休市期间的 K 线)。

如何自行排查?

  1. 打印原始数据对比
    在 VeighNa 和 TradingView 上导出相同标的、相同周期的 K 线数据(开盘价、最高价、最低价、收盘价),检查数值是否完全一致。
  2. 手动验证计算过程
    用同一组 K 线数据,分别按 TA-Lib 和 TradingView 的公式手动计算 ATR,定位差异步骤。
  3. 检查参数一致性
    确保两边的 ATR 周期、价格类型(如是否包含盘前盘后数据)等参数完全相同。

总结

差异通常源于 数据源、计算公式或参数设置 的不同。建议优先对比原始数据,再逐步验证计算逻辑。若仍无法解决,可联系平台确认具体实现细节。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】