Pine 5条件颜色绘制异常求助:形状始终显示绿色
问题分析与修正方案
首先看你代码里的核心错误:
- 重置
countval2的条件写反了:if countval2 > 15 or countval2 < 15这个条件意味着只要countval2不等于15就会被重置为0,所以countval2几乎始终是0,导致colorplot2永远触发>=0的条件显示绿色。
另外还有几个逻辑漏洞:
- 初始K线中
countval2[1]是na,直接运算会导致异常,需要用nz()函数处理空值。 - 当价格处于区间(lower和upper之间)时,没有保留
countval2的当前值,导致计数被中断。 colorplot2的判断可以简化,避免冗余的if语句。
修正后的代码
//@version=5 indicator("修正后的计数颜色示例", overlay=true) // 假设你已定义middle、lower、upper、out2,此处补充示例定义(实际已有可删除) middle = ta.ema(close, 20) lower = middle - ta.stdev(close, 20) upper = middle + ta.stdev(close, 20) out2 = ta.sma(close, 10) countval = 0 countval2 = 0 colorplot = color.yellow colorplot2 = color.gray // 处理初始值,用nz避免空值干扰 prev_countval2 = nz(countval2[1], 0) // 跟踪方向计数 if close > middle colorplot := color.green countval2 := prev_countval2 + 1 elif close <= middle colorplot := color.red countval2 := prev_countval2 - 1 else // 价格等于middle时保持计数不变 countval2 := prev_countval2 // 仅当计数绝对值超过15时重置 if math.abs(countval2) > 15 countval2 := 0 // 价格处于区间内时的处理 if close > lower and close < upper colorplot := colorplot[1] countval := 1 // 区间内保持countval2的当前值,不中断计数 countval2 := prev_countval2 // 简化colorplot2的颜色判断逻辑 colorplot2 = countval2 < 0 ? color.red : color.green plot(out2, color = colorplot, linewidth = 3) plotshape(close, "range diamond", style = shape.diamond, location = location.abovebar, size = size.tiny, color = countval == 1 ? colorplot2 : na)
关键修改说明
- 重置条件改为
math.abs(countval2) > 15,确保计数超过±15时才触发重置。 - 用
nz(countval2[1], 0)处理初始K线的空值,避免计数逻辑异常。 - 区间内新增
countval2 := prev_countval2,保证计数不会被中断。 - 用三元运算符简化
colorplot2的颜色赋值,逻辑更直观。
内容的提问来源于stack exchange,提问作者james wagner
相关产品推荐
相关产品推荐

