求助:基于EMA云颜色变化添加警报的PineScript代码修正
基于趋势云颜色变化的警报修正方案
原代码的问题在于警报逻辑和云颜色变化的核心条件无关,云颜色由rsi1与smma的相对位置决定,所以需要基于两者的交叉信号来触发警报,具体修改如下:
核心逻辑说明
云颜色切换的本质是:
- 当
rsi1上穿smma时,云从红色变为绿色,触发多头警报 - 当
rsi1下穿smma时,云从绿色变为红色,触发空头警报
修改后的完整代码片段
///////////////plot MAs plot_ma1 = plot(MA1, color= dynamic ? dynColor: color.green , linewidth=1, title = "MA1") plot_ma2 = plot(MA2, color= dynamic ? dynColor: color.red , linewidth=1, title = "MA2") plot_ma3 = plot(MA3, color= dynamic ? dynColor: color.yellow, linewidth=1, title = "MA3") plot_ma4 = plot(MA4, color= dynamic ? dynColor: color.white, linewidth=1, title = "MA4") // Trend Fill rsi1 = ta.rsi(close,14) smmaLen = 50 //input(50, minval=1, title="SMMA Length", group = "Smoothed MA") smmaSrc = rsi1 smma = 0.0 smma := na(smma[1]) ? ta.sma(smmaSrc, smmaLen) : (smma[1] * (smmaLen - 1) + smmaSrc) / smmaLen trendFill = input(title="Show Trend Fill", defval=true, group = "Smoothed MA Inputs") transparencyValue= trendFill ? math.abs(rsi1-smma): na bColor = if rsi1 > smma color.from_gradient(transparencyValue,0, 50, color.new(color.lime, 80), color.lime) else color.from_gradient(transparencyValue,0, 50, color.new(color.red, 80),color.red) fill(plot_ma1,plot_ma2,bColor,title="RSI Fill") // ### 修正后的云颜色变化警报逻辑 longS = input.bool(title="Show Long Cloud Signal", defval=true, group = "Plot Mas") shortS = input.bool(title="Show Short Cloud Signal", defval=true, group = "Plot Mas") // 捕捉rsi1上穿smma的信号(云变绿) longSig = ta.crossover(rsi1, smma) // 捕捉rsi1下穿smma的信号(云变红) shortSig = ta.crossunder(rsi1, smma) // 绘制多头信号标记 plotshape(longS ? longSig : na, style=shape.triangleup, color=color.green, location=location.belowbar, size = size.small, title="Cloud Color Change Up") // 绘制空头信号标记 plotshape(shortS ? shortSig : na, style=shape.triangledown, color=color.red, location=location.abovebar, size = size.small, title="Cloud Color Change Down") // 设置警报条件 alertcondition(longSig, title="Cloud Long", message="[CurrencyPair] [TimeFrame], Cloud turned green (Long Signal)") alertcondition(shortSig, title="Cloud Short", message="[CurrencyPair] [TimeFrame], Cloud turned red (Short Signal)") // End ###
关键修改点
- 替换了原错误的
longSig和shortSig逻辑:用ta.crossover()和ta.crossunder()精准捕捉rsi1与smma的交叉点,这正是云颜色切换的触发点 - 修正了
plotshape中未定义的变量(原代码的bullS、bullSig等拼写错误,替换为正确的longS、longSig) - 更新了警报消息,使其更清晰反映云颜色变化的状态
内容的提问来源于stack exchange,提问作者Phosphorus
相关产品推荐
相关产品推荐

