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
相关产品推荐
相关产品推荐

