请求优化RSI指标代码:仅触发首次超买穿40/超卖穿60信号
RSI交易信号脚本修正(仅触发首个跨位信号)
需求说明
需要实现以下RSI交易信号逻辑:
- 空单信号:RSI从**超买区间(≥70)**下穿40水平时触发,且仅触发该区间内的首个下穿信号
- 多单信号:RSI从**超卖区间(≤30)**上穿60水平时触发,且仅触发该区间内的首个上穿信号
修正后的Pine Script代码
//@version=5 indicator(title='RSI 专属交易信号', overlay=false) // 输入参数 rsiLength = input.int(title='RSI周期', defval=14) overboughtLevel = input.int(title='超买阈值', defval=70) oversoldLevel = input.int(title='超卖阈值', defval=30) shortCrossLevel = input.int(title='空单触发下穿水平', defval=40) longCrossLevel = input.int(title='多单触发上穿水平', defval=60) // 计算RSI值 rsi = ta.rsi(close, rsiLength) // 持久化变量:记录是否已触发当前区间的信号 var bool hasLongSignal = false var bool hasShortSignal = false // 重置信号状态的条件:RSI回到中线,或重新进入超买/超卖区间 resetLong = ta.crossover(rsi, 50) or ta.crossunder(rsi, oversoldLevel) resetShort = ta.crossunder(rsi, 50) or ta.crossover(rsi, overboughtLevel) if resetLong hasLongSignal := false if resetShort hasShortSignal := false // 生成信号的核心逻辑 longCondition = ta.crossover(rsi, longCrossLevel) and not hasLongSignal and ta.barssince(ta.crossover(rsi, oversoldLevel)) > 0 shortCondition = ta.crossunder(rsi, shortCrossLevel) and not hasShortSignal and ta.barssince(ta.crossunder(rsi, overboughtLevel)) > 0 // 触发信号后标记为已触发 if longCondition hasLongSignal := true if shortCondition hasShortSignal := true // 绘制信号标记 plotshape(longCondition, "多单信号", style=shape.triangleup, location=location.bottom, color=color.green, size=size.small) plotshape(shortCondition, "空单信号", style=shape.triangledown, location=location.top, color=color.red, size=size.small) // 绘制RSI及关键水平线 plot(rsi, title='RSI', color=color.purple) hline(overboughtLevel, '超买线', color=color.new(color.red, 50)) hline(oversoldLevel, '超卖线', color=color.new(color.green, 50)) hline(shortCrossLevel, '空单触发线', color=color.new(color.red, 20)) hline(longCrossLevel, '多单触发线', color=color.new(color.green, 20)) hline(50, '中线', color=color.new(#787B86, 60))
代码关键逻辑说明
- 持久化信号标记:用
var声明的hasLongSignal和hasShortSignal会在脚本运行全程保留状态,避免同一区间内重复触发信号 - 信号重置机制:当RSI回到50中线,或者重新进入超买/超卖区间时,重置信号标记,确保下次符合条件时能触发新信号
- 跨位条件校验:在判断跨位的同时,加入“RSI此前曾进入对应超买/超卖区间”的校验,确保信号是从目标区间出发的跨位动作
- 单次触发控制:只有在未触发过当前区间信号的情况下,才生成有效交易信号,触发后标记为已触发,避免重复提示
内容的提问来源于stack exchange,提问作者Stefan Anders
相关产品推荐
相关产品推荐

