You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于RSI信号的策略入场延迟问题及代码修正请求

问题解决:RSI信号入场延迟修正

问题概述

RSI指标的信号线条显示完全正确,但strategy.entry入场指令严重延迟3-4根K线,即使取消plotshape的offset设置,入场操作仍滞后,希望在信号线条结束时立即触发入场。

延迟原因

  1. 条件确认滞后:pivot_low_true是在当前K线确认pivot_right根之前的枢轴低点,而入场条件bullCond/bearCond还叠加了confirm_range(pivot_low_true[1]),要求上次枢轴低点已过去3-30根K线,这进一步推迟了入场时机。
  2. 视觉与实际触发错位:绘图时用offset=-pivot_right把信号提前显示到枢轴低点的位置,但实际入场条件是在确认后的K线才会触发,导致视觉上信号出现后,入场却晚了多根K线。

修正后的代码

RSI_PER = 14
pivot_right = 3
pivot_left = 3
max_range=30
min_range=3

rsi_value = ta.rsi(close, RSI_PER)
rsi_valueH = request.security(syminfo.tickerid, '60', rsi_value)

plot(rsi_value, title="RSI", linewidth=2, color=color.rgb(255, 255, 255))
hline(50,  linestyle=hline.style_dotted)
rsi_ob = hline(70, linestyle=hline.style_dotted)
rsi_os = hline(30, linestyle=hline.style_dotted)
fill(rsi_ob, rsi_os, color=color.rgb(223, 64, 251, 80))

// 检测RSI的枢轴低点,返回枢轴低点的RSI值(非NaN即存在)
pivot_low_rsi = ta.pivotlow(rsi_value, pivot_left, pivot_right)
pivot_low_true = not na(pivot_low_rsi)

// 获取上一次枢轴低点的相关数据
last_pivot_low_rsi = ta.valuewhen(pivot_low_true, pivot_low_rsi, 1)
last_pivot_low_price = ta.valuewhen(pivot_low_true, low[pivot_right], 1)
bars_since_last_pivot = ta.barssince(pivot_low_true[1])

//------------------------------------------------------------------------------
// 多头条件:在确认枢轴低点的当前K线,检查RSI更高低、价格更低低,且上次枢轴低点在范围内
bullCond = pivot_low_true and 
           (pivot_low_rsi > last_pivot_low_rsi) and 
           (low[pivot_right] < last_pivot_low_price) and 
           (min_range <= bars_since_last_pivot and bars_since_last_pivot <= max_range)

// 绘制多头信号(保持offset对齐枢轴低点位置)
plot(pivot_low_true ? pivot_low_rsi : na, offset=-pivot_right, linewidth=3, color=(bullCond ? color.green : color.new(color.white, 100)))

plotshape(
     bullCond ? pivot_low_rsi : na,
     offset=-pivot_right,
     text=" BUY ",
     style=shape.labelup,
     location=location.absolute,
     color=color.green,
     textcolor=color.white
)

//------------------------------------------------------------------------------
// 空头条件:在确认枢轴低点的当前K线,检查RSI更低高、价格更高低,且上次枢轴低点在范围内
bearCond = pivot_low_true and 
           (pivot_low_rsi < last_pivot_low_rsi) and 
           (low[pivot_right] > last_pivot_low_price) and 
           (min_range <= bars_since_last_pivot and bars_since_last_pivot <= max_range)

// 绘制空头信号(保持offset对齐枢轴低点位置)
plot(pivot_low_true ? pivot_low_rsi : na, offset=-pivot_right, linewidth=3, color=(bearCond ? color.red : color.new(color.white, 100)))

plotshape(
     bearCond ? pivot_low_rsi : na,
     offset=-pivot_right,
     text=" SELL ",
     style=shape.labeldown,
     location=location.absolute,
     color=color.red,
     textcolor=color.white
)

// 入场指令:在确认枢轴低点的当前K线立即触发
strategy.entry("BUY", strategy.long, when = bullCond)
strategy.entry("SELL", strategy.short, when = bearCond)

关键修改说明

  1. 合并条件判断时机:将bullCond/bearCond的所有判断逻辑移到pivot_low_true为true的当前K线,确保在确认枢轴低点的瞬间就触发入场,不再等待额外的K线。
  2. 简化数据获取:直接用ta.valuewhen获取上一次枢轴低点的RSI和价格,避免confirm_range函数带来的延迟。
  3. 保持视觉对齐:保留offset=-pivot_right让信号显示在枢轴低点的位置,同时让入场指令和信号视觉位置同步触发。

内容的提问来源于stack exchange,提问作者nocodingskillz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:24:54