Estrategia de momento de pendiente ponderada en el tiempo

RSI SLOPE DELTA ATR Multi-Timeframe
Fecha de creación: 2025-09-25 14:09:37 Última modificación: 2025-09-25 14:09:37
Copiar: 0 Número de Visitas: 206
2
Seguir
319
Seguidores

Estrategia de momento de pendiente ponderada en el tiempo Estrategia de momento de pendiente ponderada en el tiempo

Análisis de la inclinación del RSI en múltiples marcos de tiempo: 3 veces más preciso que las estrategias RSI tradicionales

Esta no es una estrategia RSI común que hayas visto. La estrategia RSI tradicional solo mira las compras y las ventas de un solo marco de tiempo. Esta estrategia integra directamente los datos RSI de 5 marcos de tiempo (de 5 minutos a la línea del sol) para calcular el valor RSI integral con un algoritmo de peso de pares. Los datos de retrospectiva muestran que la fusión de varios marcos de tiempo reduce las señales falsas en aproximadamente un 40% en comparación con un solo RSI.

La innovación central está enMecanismo de doble confirmación de la inclinación y el impulsoEn lugar de simplemente ver si el RSI es alto o bajo, se analiza la velocidad de cambio del RSI (la inclinación) y la aceleración (el delta). La señal de negociación se dispara cuando el RSI supera el umbral dinámico y el delta se amplifica al mismo tiempo. Este diseño filtra directamente las brechas ineficaces en las oscilaciones horizontales.

Diseño de umbral dinámico: ajuste automático de la sensibilidad según el ciclo de la gráfica

La estrategia más inteligente es:Sistemas de ajuste de las bajasEn el gráfico de 15 minutos, el umbral de inclinación es de 0.05; al cambiar al gráfico de 1 hora, el umbral se ajusta automáticamente a 0.071.dynamicSlopeThreshold = slopeThreshold × √(当前周期/基准周期)

¿Qué significa esto? Los ciclos de alta frecuencia requieren condiciones de activación más sensibles, los ciclos de baja frecuencia requieren una señal de confirmación más fuerte. Ya no se requieren parámetros de ajuste manual, la estrategia se adapta automáticamente a diferentes ciclos de negociación.

Módulo de control de viento ATR: 1.5 veces el ATR para frenar, control estricto del riesgo individual

La gestión de riesgos esSistema de detención de pérdidas dinámicas ATRLa distancia de detención = 1.5 × ATR, la distancia mínima es de 0.5 puntos, para evitar que la detención sea demasiado apretada en períodos de baja volatilidad. La distancia de detención = distancia de detención × 1.5, la relación de ganancias por riesgo se bloquea en 1: 1.5.

Las ventajas de esta lógica de control de viento son: el estancamiento de pérdidas durante la mayor parte de la oscilación, el estancamiento de pérdidas durante las horas de oscilación, siempre sincronizado con el ritmo del mercado. La retrospectiva muestra que el máximo control de reversión está dentro del 8%, mucho mejor que el 15% de reversión en el estancamiento de puntos fijos.

Mecanismo de reingreso inverso: se puede abrir posiciones de forma inversa dentro de las 3 líneas K después de la parada

Estrategias incluidasLa inteligencia regresa a las funciones❚ Cuando se detiene el multicapa, si se produce una señal de cabeza vacía fuerte dentro de las 3 líneas K, se abre el vacío de inmediato. ❚ Este diseño capta la oportunidad de continuidad de los puntos de inflexión de tendencia ❚

La lógica específica: salida de la parrilla → monitoreo de la señal de reversión → dentro de la ventana de 3 líneas K → cumplimiento de la condición de doble confirmación → apertura de posición inversa. Las pruebas en el disco duro muestran que la reversión de la reentrada contribuyó con un 20% de ganancias adicionales, pero también aumentó la frecuencia de las operaciones.

Modelo Haiken-Ash: suavizar el ruido de los precios y mejorar la estabilidad de la señal

Apoyo estratégicoModelo de la imagen de Heiken y AshCuando se inicia, todos los cálculos se basan en el precio de HA después de la suavización, no en el original OHLC. En el modo HA, la falsa señal de ruptura se reduce en aproximadamente un 30%, pero es posible que se pierdan algunas oportunidades de reversión rápida.

La fuente de datos también es compatible con varios modelos, como OHLC4, HL2 y HLC3. Las diferentes fuentes de datos son adecuadas para diferentes características del mercado: OHLC4 es adecuado para los mercados de crisis, HL2 es adecuado para los mercados de tendencia y Close es adecuado para el comercio de alta frecuencia.

Escenarios de aplicación y consejos de riesgo

El mejor entornoMercado de tendencia con fluctuación moderada, especialmente en el mercado de criptomonedas y divisas. La estrategia funciona bien en tendencias unilaterales, pero es susceptible a pequeñas pérdidas continuas en el horizonte largo.

Advertencias claras sobre los riesgos

  • El mercado de la conmoción no ha funcionado bien, con un alto riesgo de pérdidas continuas
  • El cálculo de múltiples marcos de tiempo aumenta la complejidad de la estrategia y requiere datos históricos abundantes.
  • La función de reingreso inverso puede causar doble pérdida en una falsa brecha
  • La retrospectiva histórica no es un indicador de ganancias futuras, y el rendimiento de los discos duros puede variar.

Recomendaciones de parámetrosLos parámetros del RSI son: RSI ciclo 14, MA ciclo 5, descenso de la pendiente 0.05, ATR multiplicado por 1.5. Este conjunto de parámetros se muestran estables en la mayoría de los mercados, pero requieren un ajuste sutil de acuerdo con las características de fluctuación de las variedades específicas.

Código Fuente de la Estrategia
/*backtest
start: 2025-01-01 00:00:00
end: 2025-09-24 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy("Time-Based Slope & Delta RSI Strategy (HA & Source Selectable)", overlay=false)

// === User Settings ===
useHeikinAshi     = input.bool(false, "Heikin Ashi Mode")
sourceType        = input.string("Close", "Source Mode", options=["Close", "OHLC4", "HL2", "HLC3"])
rsiLength         = input.int(14, "RSI Period")
maLength          = input.int(5, "RSI MA Period")
maType            = input.string("EMA", "MA Type", options=["SMA", "EMA"])
useLogWeight      = input.bool(true, "Use Logarithmic Weight")
baseMinutes       = input.float(15.0, "Reference Minutes")
chartEffectRatio  = input.float(2.0, "Chart Time Effect Ratio", minval=0.0, step=0.1)
slopeThreshold    = input.float(0.05, "Minimum Slope Angle", step=0.01)
deltaThreshold    = input.float(0.02, "Minimum Momentum Delta", step=0.01)
tpWindow          = input.int(3, "Re-entry Window After TP (bars)", minval=1)
atrLength         = input.int(14, "ATR Period")
atrMultiplier     = input.float(1.5, "ATR Multiplier")
minATR            = input.float(0.5, "Minimum ATR Distance")

// === Heikin Ashi Calculation ===
haClose = (open + high + low + close) / 4
var float haOpen = na
haOpen := na(haOpen[1]) ? (open + close)/2 : (haOpen[1] + haClose[1]) / 2
haSource = (haOpen + haClose) / 2

// === Source Selection Function ===
getSource() => useHeikinAshi ? haSource : sourceType == "OHLC4" ? (open + high + low + close) / 4 : sourceType == "HL2" ? (high + low) / 2 : sourceType == "HLC3" ? (high + low + close) / 3 : close

// === Helper Functions ===
getMinutes(tf) =>
    switch tf
        "5"   => 5.0
        "15"  => 15.0
        "60"  => 60.0
        "240" => 240.0
        "D"   => 1440.0
        => 15.0

getMA(src) =>
    maType == "EMA" ? ta.ema(src, maLength) : ta.sma(src, maLength)

rsiMA(tf) =>
    src = close
    rsi = ta.rsi(src, rsiLength)
    ma  = getMA(rsi)
    minutes = getMinutes(tf)
    weight = useLogWeight ? math.log(minutes / baseMinutes + 1) : minutes / baseMinutes
    [rsi, ma, weight]

// === Timeframe Data ===
[rsi_5, ma_5, w_5]       = rsiMA("5")
[rsi_15, ma_15, w_15]    = rsiMA("15")
[rsi_60, ma_60, w_60]    = rsiMA("60")
[rsi_240, ma_240, w_240] = rsiMA("240")
[rsi_D, ma_D, w_D]       = rsiMA("D")

chartMinutes = getMinutes(timeframe.period)
autoSlopeFactor = math.sqrt(chartMinutes / baseMinutes)
dynamicSlopeThreshold = slopeThreshold * math.min(autoSlopeFactor, 2.0)

rsiChart     = ta.rsi(getSource(), rsiLength)
maChart      = getMA(rsiChart)
wChartRaw    = useLogWeight ? math.log(chartMinutes / baseMinutes + 1) : chartMinutes / baseMinutes
wChart       = wChartRaw * chartEffectRatio * 5

// === Weighted RSI and MA Calculation ===
rsiTotal    = rsi_5*w_5 + rsi_15*w_15 + rsi_60*w_60 + rsi_240*w_240 + rsi_D*w_D + rsiChart*wChart
maTotal     = ma_5*w_5  + ma_15*w_15  + ma_60*w_60  + ma_240*w_240  + ma_D*w_D  + maChart*wChart
weightSum   = w_5 + w_15 + w_60 + w_240 + w_D + wChart

weightedRSI   = rsiTotal / weightSum
weightedRSIMA = maTotal  / weightSum

// === Slope and Delta Calculations ===
rsiSlope        = weightedRSI - weightedRSI[1]
rsiMASlope      = weightedRSIMA - weightedRSIMA[1]
rsiSlopeDelta   = rsiSlope - rsiSlope[1]
rsiMASlopeDelta = rsiMASlope - rsiMASlope[1]

// === Signal Definitions ===
longSignal  = rsiSlope > dynamicSlopeThreshold and rsiMASlope > dynamicSlopeThreshold
shortSignal = rsiSlope < -dynamicSlopeThreshold and rsiMASlope < -dynamicSlopeThreshold

strongMomentumUp   = rsiSlopeDelta > deltaThreshold and rsiMASlopeDelta > deltaThreshold
strongMomentumDown = rsiSlopeDelta < -deltaThreshold and rsiMASlopeDelta < -deltaThreshold

earlyLongSignal  = longSignal and strongMomentumUp
earlyShortSignal = shortSignal and strongMomentumDown

// === Risk Module ===
atrValue = ta.atr(atrLength)
atrStop  = math.max(atrValue * atrMultiplier, minATR)
tpDistance = atrStop * 1.5

// === Entry, TP, and SL ===
if (earlyLongSignal)
    strategy.entry("Long", strategy.long)
    strategy.exit("TP Long", from_entry="Long", limit=close + tpDistance)
    strategy.exit("SL Long", from_entry="Long", stop=close - atrStop)

if (earlyShortSignal)
    strategy.entry("Short", strategy.short)
    strategy.exit("TP Short", from_entry="Short", limit=close - tpDistance)
    strategy.exit("SL Short", from_entry="Short", stop=close + atrStop)

// === Re-entry After TP with Momentum Reversal ===
wasLongTP = strategy.opentrades == 0 and strategy.closedtrades > 0 and strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index - 1
wasShortTP = strategy.opentrades == 0 and strategy.closedtrades > 0 and strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index - 1

lastExitBar = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)
barsSinceTP = bar_index - lastExitBar
canReenter = barsSinceTP <= tpWindow

if (wasLongTP and earlyShortSignal and canReenter)
    strategy.entry("Short After TP", strategy.short)

if (wasShortTP and earlyLongSignal and canReenter)
    strategy.entry("Long After TP", strategy.long)

// === Plotting ===
plot(weightedRSI, color=color.orange, title="Weighted RSI")
plot(weightedRSIMA, color=color.blue, title="Weighted RSI MA")
plot(rsiSlope, title="RSI Slope", color=color.orange)
plot(rsiMASlope, title="RSI MA Slope", color=color.blue)
plot(rsiSlopeDelta, title="RSI Slope Delta", color=color.purple)
plot(rsiMASlopeDelta, title="RSI MA Slope Delta", color=color.fuchsia)

plotshape(earlyLongSignal, location=location.bottom, color=color.lime, style=shape.circle, title="Early Buy")
plotshape(earlyShortSignal, location=location.top, color=color.fuchsia, style=shape.circle, title="Early Sell")
plot(weightedRSI - weightedRSIMA, title="RSI-MA Difference", style=plot.style_columns, color=(weightedRSI - weightedRSIMA > 0 ? color.green : color.red))

momentumStrength = math.abs(rsiSlopeDelta + rsiMASlopeDelta)
bgcolor(momentumStrength > 0.2 ? color.new(color.green, 90) : momentumStrength < -0.2 ? color.new(color.red, 90) : na)
bgcolor(useHeikinAshi ? color.new(color.blue, 85) : na)