Pine Script中var定义变量plot绘图不显示值问题求解
故障原因
核心是两个Pine Script语法和逻辑的叠加问题:
var关键字的机制理解错误:Pine Script中被var修饰的变量仅在脚本加载完成后的第一根历史K线上执行一次初始化赋值,后续所有K线周期都不会自动重新赋值,会永久保留第一次初始化拿到的值。你的指标默认boxp参数为5,前序K线根本凑不够计算周期,触发不了BottomBox的赋值条件,第一根K线取到的BottomBox是na空值,后续哪怕BottomBox算出有效数值,longstopprice也永远停在初始的na状态,自然无法绘制。- 变量逻辑缺失:BottomBox本身是条件触发型变量,只有当
barssince(high>k1[1])==boxp-2 and box1条件成立的K线才会返回具体价格,其余未触发条件的K线默认返回na空值,就算去掉var,如果不做有效值留存,绘制的线也会是断的,只有触发时点会出现孤立的点。另外BottomBox[0]属于冗余写法,本身不带下标的BottomBox就是取当前K线的对应值,加[0]没有实际作用。
修复方案
- 调整变量声明逻辑:不要在var初始化时直接赋值BottomBox,而是先初始化longstopprice为空值,仅当BottomBox生成有效价格时才更新变量,利用var的持久化特性保留上一次的有效止损价,保证非触发时段价格连续。
- 对应正确代码如下:
//box boxp=input(5, "BOX LENGTH") LL = lowest(low,boxp) k1=highest(high,boxp) k2=highest(high,boxp-1) k3=highest(high,boxp-2) NH = valuewhen(high>k1[1],high,0) box1 =k3<k2 TopBox = valuewhen(barssince(high>k1[1])==boxp-2 and box1, NH, 0) BottomBox = valuewhen(barssince(high>k1[1])==boxp-2 and box1, LL, 0) // 修复后的止损价变量声明 var float longstopprice = na if not na(BottomBox) longstopprice := BottomBox // 调用plot即可正常显示连续的止损线 plot(longstopprice, color=color.red, title="多单止损价", linewidth=2)
如果不需要留存历史价格、仅在BottomBox触发时显示点位,直接去掉var写longstopprice = BottomBox即可,但常规交易指标的止损线需要连续显示,推荐使用上面的留存写法。
内容的提问来源于stack exchange,提问作者陳庭語
相关产品推荐
相关产品推荐

