Pine Script v2转v5后结果不一致问题求助
Pine Script v2转v5后当日高低价获取异常问题
将Pine Script v2脚本转换为v5后,转换过程无报错,但运行结果与v2版本不一致:v2能正确获取当日高低价数据,v5却调用了前一日的高低价数据。
对比效果:

v2 原脚本
h = security(tickerid, "D", high) l= security(tickerid, "D", low) fibext = input(1) fib6 = l fib5 = input(0.2360) fib4 = input(0.382) fib3 = input(0.50) fib2 = input(0.618) fib1 = input(0.786) fib0 = h range = (h-l) fib0plot = h-(range*fibext) fib1plot = (range*fib1)+l fib2plot = (range*fib2)+l fib3plot = (range*fib3)+l fib4plot = (range*fib4)+l fib5plot = (range*fib5)+l fib6plot = (range*fibext)+l plot(fib0plot, color=gray,linewidth=3, style=solid, title="Fib0") plot(fib1plot, color=aqua,linewidth=2, style=solid, title="Fib1") plot(fib2plot, color=gray,linewidth=2, style=solid, title="Fib2") plot(fib3plot, color=orange,linewidth=2, style=solid, title="Fib3") plot(fib4plot, color=orange,linewidth=2, style=solid, title="Fib4") plot(fib5plot, color=aqua,linewidth=2, style=solid, title="Fib5") plot(fib6plot, color=gray,linewidth=3, style=solid, title="Fib6")
v5 转换后脚本
h = request.security(syminfo.tickerid, 'D', high, barmerge.gaps_off) l = request.security(syminfo.tickerid, 'D', low, barmerge.gaps_off) fibext = input(1) fib6 = l fib5 = input(0.2360) fib4 = input(0.382) fib3 = input(0.50) fib2 = input(0.618) fib1 = input(0.786) fib0 = h range_1 = h - l fib0plot = h - range_1 * fibext fib1plot = range_1 * fib1 + l fib2plot = range_1 * fib2 + l fib3plot = range_1 * fib3 + l fib4plot = range_1 * fib4 + l fib5plot = range_1 * fib5 + l fib6plot = range_1 * fibext + l plot(fib0plot, color=color.new(color.gray, 0), linewidth=3, style=plot.style_line, title='Fib0') plot(fib1plot, color=color.new(color.aqua, 0), linewidth=2, style=plot.style_line, title='Fib1') plot(fib2plot, color=color.new(color.gray, 0), linewidth=2, style=plot.style_line, title='Fib2') plot(fib3plot, color=color.new(color.orange, 0), linewidth=2, style=plot.style_line, title='Fib3') plot(fib4plot, color=color.new(color.orange, 0), linewidth=2, style=plot.style_line, title='Fib4') plot(fib5plot, color=color.new(color.aqua, 0), linewidth=2, style=plot.style_line, title='Fib5') plot(fib6plot, color=color.new(color.gray, 0), linewidth=3, style=plot.style_line, title='Fib6')
问题原因与解决方法
- 核心差异:v2的
security()函数默认启用前瞻引用(lookahead),会实时获取当前未完成日线bar的最新高低价;而v5的request.security()默认关闭前瞻引用,仅返回已完全闭合的日线bar数据,因此当日交易时段会调用前一日的高低价。 - 修正代码:修改
request.security()的参数,启用前瞻引用:h = request.security(syminfo.tickerid, 'D', high, barmerge.gaps_off, barmerge.lookahead_on) l = request.security(syminfo.tickerid, 'D', low, barmerge.gaps_off, barmerge.lookahead_on) - 额外验证:确保v2和v5脚本的图表时区设置一致,避免时区差异导致日线bar的时间判定不同。
内容的提问来源于stack exchange,提问作者Philo
相关产品推荐
相关产品推荐

