如何让两条移动平均线基于二者斜率同步切换颜色?
同步配色均线的Pine Script优化方案
我是编程新手,之前靠Stack Overflow社区帮忙做了一个带多条变色移动平均线的指标。现在想进一步优化:当两条均线的斜率都为正时,两条线都显示绿色;都为负时,都显示红色;一正一负时,都显示银色。自己尝试写代码时遇到了未声明标识符错误,相关代码如下:
原代码
outA = ta.sma(close, 15) positiveSlopeA = outA > outA[1] colorA = positiveSlopeA ? color.green : color.red //positive slope -> green, else red plot(outA, color=colorA, title="SMA(15)") outB = ta.sma(close, 20) positiveSlopeB = outB > outB[1] colorB = positiveSlopeB ? color.green : color.red //positive slope -> green, else red plot(outB, color=colorB, title="SMA(20)")
尝试编写的代码
outA = ta.sma(close, 15) positiveSlopeA = outA > outA[1] negativeSlopeA = outA < outA[1] outB = ta.sma(close, 30) positiveSlopeB = outB > outB[1] negativeSlopeB = outB < outB[1] if positiveSlopeA and positiveSlopeB colorA = color.green else if negativeSlopeA and negativeSlopeB colorA = color.red else colorA = color.silver
问题原因
你遇到的错误是因为Pine Script中,if代码块内声明的变量作用域仅限于块内,外部无法访问。比如你在if里定义的colorA,在后面的plot调用时会被识别为未声明的标识符。
修正后的完整代码
//@version=5 indicator("同步配色均线", overlay=true) // 计算两条均线 sma15 = ta.sma(close, 15) sma20 = ta.sma(close, 20) // 判断每条均线的斜率方向 sma15Up = sma15 > sma15[1] sma15Down = sma15 < sma15[1] sma20Up = sma20 > sma20[1] sma20Down = sma20 < sma20[1] // 统一判断同步配色条件 bothUp = sma15Up and sma20Up bothDown = sma15Down and sma20Down // 确定统一显示颜色 lineColor = bothUp ? color.green : bothDown ? color.red : color.silver // 绘制两条均线,使用统一颜色 plot(sma15, color=lineColor, title="SMA(15)", linewidth=2) plot(sma20, color=lineColor, title="SMA(20)", linewidth=2)
代码说明
- 用全局作用域的变量存储颜色值,避免作用域问题
- 通过嵌套三元运算符直接根据条件赋值,代码更简洁高效
- 把两条均线的颜色绑定到同一个变量
lineColor,确保斜率方向一致时同步变色 - 新增了
linewidth参数让均线更清晰,也可以根据需求调整
内容的提问来源于stack exchange,提问作者Whallet
相关产品推荐
相关产品推荐

