Pine Script双SMMA交叉预警异常:选一个却触发双预警求助
Pine Script v5双SMMA交叉预警问题解决
问题描述
编写了基于5和13周期SMMA交叉的预警脚本,预期:
- 5周期SMMA上穿13周期时触发多头预警
- 5周期SMMA下穿13周期时触发空头预警
但遇到两个问题:
- 预警菜单中只能选择一个预警项
- SMMA交叉时会同时触发两个预警
错误原因分析
- 预警定义方式错误:直接使用
alert()函数时,TradingView会将所有预警合并为一个选项,无法区分多头/空头预警;需要用alertcondition()来定义独立的预警条件。 - 交叉条件逻辑写反:原脚本中
MyCondition用ta.crossover(smma2, smma1)(13周期SMMA上穿5周期)却触发多头预警,逻辑完全颠倒,导致交叉时条件判断混乱,可能同时触发两个预警。 - 绘图与预警条件不一致:绘图的交叉条件和预警条件逻辑不匹配,进一步加剧了信号混乱。
修正后的代码
//@version=5 indicator('SMMA 5-13 cross', shorttitle='SMMA 5-13 Cross', overlay=true, max_bars_back=501) // 5周期SMMA计算 len1 = input.int(5, minval=1, title='Short SMMA Length') src1 = input(close, title='Short SMMA Source') smma1 = 0.0 sma_1 = ta.sma(src1, len1) smma1 := na(smma1[1]) ? sma_1 : (smma1[1] * (len1 - 1) + src1) / len1 plot(smma1, color=color.new(color.lime, 0), linewidth=3) // 时间过滤设置 timeInput = input('0830-1600', title="Indicator Active Time (Exchange Timezone):") t = time(timeframe.period, timeInput) // 13周期SMMA计算 len2 = input.int(13, minval=1, title='Long SMMA Length') src2 = input(close, title='Long SMMA Source') smma2 = 0.0 sma_2 = ta.sma(src2, len2) smma2 := na(smma2[1]) ? sma_2 : (smma2[1] * (len2 - 1) + src2) / len2 plot(smma2, color=color.new(color.red, 0), linewidth=3) // 修正后的交叉条件 longCondition = ta.crossover(smma1, smma2) and t // 5周期上穿13周期=多头信号 shortCondition = ta.crossunder(smma1, smma2) and t // 5周期下穿13周期=空头信号 // 绘制交叉标记 plot(longCondition ? smma1 : na, style=plot.style_circles, linewidth=10, color=color.new(color.green, 50)) plot(shortCondition ? smma1 : na, style=plot.style_circles, linewidth=10, color=color.new(color.red, 50)) // 定义独立预警条件 alertcondition(longCondition, title="SMMA Cross Long", message="5周期SMMA上穿13周期,多头信号") alertcondition(shortCondition, title="SMMA Cross Short", message="5周期SMMA下穿13周期,空头信号")
关键修改点
- 用
alertcondition()替代alert(),分别定义多头/空头预警,预警菜单会显示两个独立选项,可分别设置通知方式。 - 修正交叉条件逻辑,让
longCondition对应5周期SMMA上穿13周期,shortCondition对应下穿,保持信号逻辑一致。 - 统一绘图和预警的条件,确保标记和预警信号完全匹配。
内容的提问来源于stack exchange,提问作者ChrischnLOK
相关产品推荐
相关产品推荐

