修改VWAP指标转Pine Script时累计值计算与Excel结果不一致求助
问题原因分析
你的代码存在两个核心错误导致结果不匹配:
- 强制类型转换丢失精度:累加
NewVol时你调用了int()函数,将原本为浮点数的NewVol直接取整,直接丢失了小数部分的精度,这是结果偏差最大的原因 - 自定义循环的冗余和易出错性:手动写for循环做滚动累加很容易出现索引边界错误,且效率远低于Pine Script内置的累加函数
修正后的代码(4天测试版本)
//@version=4 study("筹码平均线 by Jason") PriceDis = pow(close - (high + low)/2, 2) NewVol = PriceDis * volume // 用内置sum函数计算最近4个周期的NewVol累计值,等价于你原来的循环逻辑,且没有精度损失 TotalNewVol = ta.sum(NewVol, 4) // 避免前3根bar数据不足导致的除零错误 WeightedVol = na(TotalNewVol) or TotalNewVol == 0 ? na : NewVol / TotalNewVol WeightedPrice = close * WeightedVol plot(WeightedPrice)
正确的多日数值累计方法
Pine Script中做固定周期的滚动累计,直接使用内置的ta.sum(数值, 周期数)函数即可,该函数会自动计算最近N根K线的数值之和,不需要手动写for循环,不仅代码更简洁,也不会出现索引错误、精度损失这类问题。
如果你需要调整为200天的正式版本,只需要把ta.sum(NewVol, 4)中的4改为200即可。
内容的提问来源于stack exchange,提问作者DogDogMe
相关产品推荐
相关产品推荐

