You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine 5条件颜色绘制异常求助:形状始终显示绿色

问题分析与修正方案

首先看你代码里的核心错误:

  • 重置countval2的条件写反了:if countval2 > 15 or countval2 < 15 这个条件意味着只要countval2不等于15就会被重置为0,所以countval2几乎始终是0,导致colorplot2永远触发>=0的条件显示绿色。

另外还有几个逻辑漏洞:

  1. 初始K线中countval2[1]是na,直接运算会导致异常,需要用nz()函数处理空值。
  2. 当价格处于区间(lower和upper之间)时,没有保留countval2的当前值,导致计数被中断。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:27:18