Momentum ADX y RSI combinados con estrategia de trailing stop ajustable


Fecha de creación: 2023-10-09 15:36:07 Última modificación: 2023-10-09 15:36:07
Copiar: 1 Número de Visitas: 711
1
Seguir
1617
Seguidores

Descripción general

La estrategia combina el indicador de dinámica con el indicador de fuerza relativa (RSI), complementado con un mecanismo de parada de pérdidas que se puede ajustar para capturar la dirección de la tendencia y controlar el riesgo. Cuando el precio tiene un impulso fuerte, compra más; cuando el precio tiene un impulso débil, vende a cero. La estrategia también establece condiciones de parada de pérdidas, utiliza el seguimiento de la parada de pérdidas para rastrear el nivel de ganancias más alto y puede bloquear las ganancias y reducir las pérdidas.

Principio de estrategia

La línea de fuerza y el indicador RSI juzgan la entrada

  • El uso del indicador de dinámica ADX para determinar la dirección de la tendencia de los precios

    • ADX mayor a 20 indica tendencia

    • Cuando el +DI en línea pasa por el -DI en línea para ver la señal de alarma

    • Cuando la línea -DI cruza la línea +DI es una señal bajista.

  • El RSI es un indicador de sobrecompra y sobreventa

    • El RSI por encima de 70 es una zona de sobrecompra, señal de bajista

    • El RSI por debajo de 30 es una zona de venta excesiva, vean señales de pérdida

Cuando el ADX juzgue que la tendencia existe y el RSI emita una señal de confirmación, realice la operación de espacio superior correspondiente.

Mecanismo de suspensión de pérdidas que se puede seguir

La estrategia utiliza un mecanismo de seguimiento de stop loss dinámicamente ajustable, que incluye dos parámetros:

  • Proporción de activación: activación de la suspensión de pérdidas cuando el precio alcanza la proporción establecida después de abrir la posición

  • Proporción de seguimiento: la distancia de seguimiento de la pérdida de seguimiento a la distancia proporcional de la ganancia más reciente

Cuando el precio alcanza la condición de activación, la línea de parada de seguimiento seguirá el nivel de máxima ganancia. Cuando el precio retrocede, la línea de parada de pérdida se moverá por debajo. Si la amplitud de la retracción supera la proporción de seguimiento establecida, la línea de parada de pérdida se activará y cerrará todas las posiciones.

Análisis de las ventajas

  • Indicadores de dinámica para determinar la dirección de la tendencia y evitar que las empresas se sobrepongan

  • El indicador RSI asegura que no se pierda la oportunidad de revertir

  • Dispositivo de seguimiento de pérdidas para bloquear beneficios y reducir pérdidas

  • La estrategia es clara, concisa y fácil de entender.

  • Ampliamente adaptable a diferentes mercados y períodos de tiempo

Riesgos y contramedidas

  • ADX determina que una falsa brecha produce una señal errónea

    • Ajustar los parámetros de ADX para asegurar que la tendencia sea real
  • El RSI ha generado varias señales falsas

    • Ajuste de los parámetros de sobrecompra y sobreventa para evitar el comercio frecuente
  • Los parámetros de ajuste no están bien configurados

    • Optimización de parámetros para encontrar el nivel óptimo de pérdida
  • Un gran salto en el aire no se detiene.

    • Considere la combinación de la lista de precios para evitar pérdidas perdidas

Optimización de las ideas

  • Prueba de entrada optimizada para diferentes combinaciones de parámetros ADX y RSI

  • Detección de diferentes puntos de activación de stop loss y amplitud de seguimiento para encontrar los parámetros óptimos

  • Considerar la posibilidad de incluir filtros en otros indicadores para mejorar la calidad de la señal

  • Prueba de diferentes mercados para determinar la configuración de los parámetros generales

Resumir

La estrategia integra el análisis de la dinámica, el indicador RSI y el mecanismo de parada de seguimiento, que permite determinar la dirección de la tendencia, identificar los puntos de reversión y controlar el riesgo de negociación. La estrategia es clara, sencilla de implementar y se puede utilizar ampliamente para el comercio de tendencias en mercados como acciones, divisas y monedas digitales. La optimización de parámetros y el filtrado de indicadores pueden mejorar aún más el rendimiento de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-03 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trailing Stop with RSI", overlay=true)

length = input.int(12, "Momentum Length")
price = close
momentum(seria, length) =>
    mom = seria - seria[length]
    mom
mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)

rsiLength = input.int(14, "RSI Length")
rsiOverbought = input(70, "RSI Overbought Level")
rsiOversold = input(30, "RSI Oversold Level")

rsiValue = ta.rsi(close, rsiLength)

tsact = input.float(0.0, "Trailing Stop Activation (%)", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop (%)", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na

in_long = strategy.position_size > 0
in_short = strategy.position_size < 0

var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0

if in_long
    if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
    if not tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
if in_short
    if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    if not tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)

trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na

if (mom0 > 0 and mom1 > 0)
    strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
    strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
    strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
    strategy.cancel("MomSE")

tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
    strategy.close_all()
if not strategy.opentrades
    array.clear(ts_)

rsiOverboughtCondition = rsiValue >= rsiOverbought
rsiOversoldCondition = rsiValue <= rsiOversold

if rsiOverboughtCondition
    strategy.close("SHORT", "SX")
    strategy.entry("LONG", strategy.long)

if rsiOversoldCondition
    strategy.close("LONG", "LX")
    strategy.entry("SHORT", strategy.short)

plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)