如何修改指定Pine Script代码避免TradingView平台信号重绘?
Pine Script策略去重绘修改方案
核心重绘问题定位
你这段代码的重绘问题全部来自对未收盘K线、未来数据的隐式调用,具体问题点如下:
security函数调用逻辑错误:原代码取的是当日未走完的日线收盘价,日内会实时变动,且Pine v2版本的security默认允许偷取未来数据,没有做重绘防护。- 进出场条件用了实时K线值:所有判断逻辑用的都是当前未走完K线的指标值,盘中价格变动会导致指标值反复变化,信号出现后又消失。
- 低版本Pine的隐式漏洞:v2版本本身对未来数据的管控极松,很多逻辑默认会触发重绘。
- 一目均衡表偏移值的错误使用:判断条件直接用了加了位移偏移的云带数值,本质是提前调用了未来的K线计算结果。
具体修改步骤及原因
- 升级Pine版本
把开头的//@version=2改成//@version=5,适配v5的语法规范,v5默认禁用了大部分隐式未来数据调用,对重绘的防护机制更完善。 - 修正
security函数的调用逻辑
原confidence的计算逻辑完全依赖未收盘的日线数据,修改为取已完全收盘的前两根日线数据计算,同时强制关闭未来数据调用:
修改原因:只有完全收盘的K线数值是固定不变的,加dailyClose_1 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_on, barmerge.lookahead_off) dailyClose_2 = request.security(syminfo.tickerid, "D", close[2], barmerge.gaps_on, barmerge.lookahead_off) confidence = (dailyClose_1 - dailyClose_2) / dailyClose_2barmerge.lookahead_off参数强制禁止security函数偷取未来K线数据。 - 所有进出场判断偏移1根K线
把longCondition、shortCondition、closelong、closeshort里所有的指标参数都加[1],取上一根完全收盘K线的数值做判断,比如:- 原
n1<n2改为n1[1]<n2[1] - 原
MACD<aMACD改为MACD[1]<aMACD[1] - 原
leadLine1<leadLine2改为leadLine1[1]<leadLine2[1]
修改原因:已收盘K线的所有指标值都是固定的,不会随盘中价格波动变动,信号一旦出现就不会消失。
- 原
- 修正一目均衡表判断逻辑
不要用加了displacement偏移的绘图值做判断,直接用未偏移的原始leadLine1、leadLine2数值做判断,避免提前调用未来K线的计算结果。
重绘验证方法
修改完成后用TradingView的K线回放功能,逐根回放历史K线,观察信号出现后会不会在后续K线走完时消失或移位,所有信号位置固定不变即为修改成功。
内容的提问来源于stack exchange,提问作者Nakupenda ErrorfourOfour
相关产品推荐
相关产品推荐

