Pine Script绘图异常:大循环下无法精准绘制流动性Wick水平线
Pine Script大循环下流动性Wick水平线不显示的原因解析
这个Pine Script脚本用来给没被突破的前期流动性Wick最高点画向右延伸的水平线,但运行时出了问题:
- 循环范围设成
for i=0 to 4998时,图表红框里的早期蜡烛区域没生成预期的水平线; - 改成
for i=0 to 300后,前300根蜡烛的水平线能正常显示,只是后面的蜡烛没覆盖到。
脚本代码:
//@version=5 indicator("Liquidity Profiling", overlay = true, max_bars_back = 4999) highs = request.security(syminfo.tickerid, timeframe.period, high) prevH = 0.0 currH = nz(highs[0]) if barstate.islast for i=0 to 4998 if currH >= prevH line.new(bar_index-i, high[i], bar_index+1, high[i], extend = extend.right, color=color.white, width = 1) prevH := currH currH := nz(highs[i+1])
问题原因
- 线条数量超平台限制:Pine Script对单个脚本能创建的
line线条数量有上限,一般远少于4999条。大循环下脚本要创建的线条太多,超过了平台允许的数量,系统会自动删掉一部分早期生成的线条,导致前部分蜡烛的水平线显示不出来。缩小到300的循环范围后,线条数量在限制内,所以前300根的线条能正常保留。 - 遍历逻辑搞反了判断方向:脚本从当前K线往前遍历历史K线,
currH取的是更早K线的高点,判断条件currH >= prevH其实是在找比后面K线高点还高的历史高点。当遍历范围扩大到4998时,大部分早期高点早就被后面的价格突破了,不符合绘制条件,自然不会生成水平线;而缩小到300时,近期没被突破的高点更多,所以能显示不少线条。 - 多余的
request.security拖慢性能:脚本里request.security(syminfo.tickerid, timeframe.period, high)完全没必要,直接用high就能拿到当前品种当前周期的高点数据。这个冗余调用会增加脚本运行负担,大循环时更明显,间接影响线条的正常绘制。
内容的提问来源于stack exchange,提问作者Ali Azlan
相关产品推荐
相关产品推荐

