You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode中将TradingView Pine脚本转Python计算vwap1值结果不一致求助

Pine脚本vwapScore转Python结果不一致修正方案

你代码的核心问题是混淆了Python内置sum函数和Pine脚本sum函数的逻辑:Pine的sum(series, length)是滚动窗口求和,每根K线对应计算自身往前推length个周期的总和,而Python内置sum会计算整个序列的总和,导致逻辑完全不符。

修正后的代码如下:

import pandas as pd
import numpy as np

def calculate_SMA(ser, days):
    return ser.rolling(window=days).mean()

def calculate_Zscore(pds, volume: pd.Series, close: pd.Series):
    # 滚动计算pds周期内的成交量加权平均价
    rolling_vwap_sum = (volume * close).rolling(window=pds).sum()
    rolling_vol_sum = volume.rolling(window=pds).sum()
    mean = rolling_vwap_sum / rolling_vol_sum
    
    # 计算滚动标准差
    deviation_sq = (close - mean) ** 2
    vwapsd = np.sqrt(calculate_SMA(deviation_sq, pds))
    
    return (close - mean) / vwapsd

使用时需要对齐以下配置,保证结果和TradingView一致:

  • 确认传入的K线数据周期和TradingView一致:比如Pine脚本运行在1小时周期,vwap1=48对应48小时窗口,Python端也必须传入同周期的1小时K线,不能用日线或其他周期数据。
  • 确认K线顺序为时间升序:时间最早的K线在DataFrame第一行,最新的K线在最后一行,和TradingView的K线序列顺序匹配。
  • 确认K线数量足够:计算结果的前pds-1行是空值,属于正常情况,TradingView同样不会在数据不足的位置输出有效值,对比时仅对比第pds行开始的数值即可。
  • 对齐复权规则:如果Python端用了前复权/后复权数据,要保证TradingView也开启了相同的复权配置,否则价格本身不一致,计算结果必然不同。

内容的提问来源于stack exchange,提问作者Carlos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:51:01