PineScript如何过滤plotshape重复买卖信号 仅显示首次信号直至反向触发
PineScript 同方向买卖信号仅首次触发显示实现
核心实现逻辑
通过新增状态变量记录上一次已触发的信号类型,只有当前信号与上一次信号方向相反时才输出新信号,即可实现同方向信号仅首次生效的效果,同时修正了原代码中变量大小写拼写错误的问题。
完整修正代码
study(title="ALMA", overlay=true) alma = alma(close, 9, 0.85, 6) plot(alma, title="ALMA", color=color.yellow, linewidth=2) ema50 = ema(close,50) plot(ema50, title="EMA", color=color.fuchsia, linewidth=2) A = close > alma B = close < alma // 定义状态变量:0无信号,1已触发买入信号,2已触发卖出信号 var signal_status = 0 // 计算有效可显示信号:仅当前信号和历史状态不一致时生效 valid_buy = A and signal_status != 1 valid_sell = B and signal_status != 2 // 触发有效信号后更新状态 if valid_buy signal_status := 1 if valid_sell signal_status := 2 plotshape(valid_buy,text="Buy",style=shape.flag,size=size.small,offset=0,color=color.green,textcolor=color.green,location=location.belowbar) plotshape(valid_sell,text="Sell",style=shape.flag,size=size.small,offset=0,color=color.red,textcolor=color.red,location=location.abovebar)
改动说明
- 替换原有逻辑混乱的
S_sell、S_buy变量为统一的信号状态变量,代码逻辑更清晰 - 新增有效信号判定规则,同方向信号触发后会被自动过滤,直到反向信号触发更新状态后才会重新判定新的同方向信号
内容的提问来源于stack exchange,提问作者John Kenneth Miano
相关产品推荐
相关产品推荐

