PineScript技术问题:满足单向条件仅绘一次,反向触发后再绘制
RSI信号单向仅绘一次,反向触发后才允许重绘
你需要实现的是:仅在首次触发某方向(上穿超买/下穿超卖)信号时绘制三角形,之后必须等反向信号触发,该方向再次满足条件时才会重新绘制。用var变量记录上次触发的方向即可实现,修改后的代码如下:
//@version=5 indicator("RSI 单向信号控制", overlay=true) overBought = input.int(80, title="超买阈值") overSold = input.int(20, title="超卖阈值") rsiValue = ta.rsi(close, 14) // 补充RSI计算逻辑,原代码遗漏此部分 cross_upper = ta.crossover(rsiValue, overBought) // RSI上穿超买线 cross_lower = ta.crossunder(rsiValue, overSold) // RSI下穿超卖线 // 记录上次触发的信号方向:0=无信号,1=上穿超买,-1=下穿超卖 var int lastSignalDir = 0 // 上穿信号:仅当上次不是上穿信号时才绘制 plotshape(cross_upper and lastSignalDir != 1, style=shape.triangleup, location=location.bottom, color=#ff00ff, size=size.tiny) // 下穿信号:仅当上次不是下穿信号时才绘制 plotshape(cross_lower and lastSignalDir != -1, style=shape.triangledown, location=location.top, color=#ff00ff, size=size.tiny) // 更新信号方向记录 if cross_upper lastSignalDir := 1 elif cross_lower lastSignalDir := -1
逻辑说明
var关键字让lastSignalDir仅在脚本启动时初始化一次,不会随每根K线重置- 绘制条件中加入
lastSignalDir != 当前方向的判断,直接过滤掉同方向的重复信号 - 每次触发有效信号后,更新
lastSignalDir的取值,确保下次同方向信号不会被绘制,直到反向信号触发
内容的提问来源于stack exchange,提问作者user27501116
相关产品推荐
相关产品推荐

