VPN Indicator的ThinkScript转Python后绘图峰值不匹配问题求助
问题排查与修复方案
你可以按照以下优先级排查问题:
- 数据源对齐问题
这是最常见的峰值错位原因:确认你使用的SPY.csv数据和ThinkOrSwim平台上的数据规则完全一致,包括是否复权、时区是否统一、K线的收盘时间是否对齐、有没有缺失K线。尤其是1分钟级别的高频数据,只要有一根K线错位,后续所有指标峰值都会偏移。 - ATR计算修正
你手动实现的Wilders ATR逻辑是对的,但可以直接调用talib内置的ATR函数减少计算误差,talib.ATR本身就是按照Wilders平滑规则实现的,替换对应代码即可:
# 替换原来手动计算ATR的5行代码 df['WildersATR'] = talib.ATR(df['High'], df['Low'], df['Close'], timeperiod=params['length'])
- 无效值过滤
你使用了rolling窗口和shift计算,前面N根K线的指标值是无效的,ThinkOrSwim默认会自动跳过这些无效值开始绘图,你需要在计算完指标后过滤掉空值,再传入绘图函数,避免前面的空值导致整体偏移:
df = VPN_Indicator(df, params) # 新增一行过滤空值 df = df.dropna()
- 滚动窗口参数校验
确认pandas的rolling窗口参数和ThinkScript的Sum函数逻辑一致,你当前用的默认参数是右对齐、包含当前K线,和ThinkScript的Sum规则一致,不需要调整,但如果还是不对,可以手动取3-5个连续的K线,分别在平台和Python里手动计算指标值,定位到具体是哪一步计算出现了差异。
内容的提问来源于stack exchange,提问作者wildcat89
相关产品推荐
相关产品推荐

