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.
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.
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.
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
ADX determina que una falsa brecha produce una señal errónea
El RSI ha generado varias señales falsas
Los parámetros de ajuste no están bien configurados
Un gran salto en el aire no se detiene.
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
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.
/*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)