Esta estrategia combina indicadores de impulso con el índice de fuerza relativa (RSI) junto con un mecanismo de parada de seguimiento dinámico para capturar la dirección de la tendencia mientras controla el riesgo.
Utilice el indicador ADX para determinar la dirección de la tendencia de los precios
ADX por encima de 20 muestra tendencia presente
+DI cruzando por encima de -DI es señal larga
- El cruce del DI por debajo de +DI es señal corta
Indicador de rendimiento para identificar el sobrecomprado/sobrevendido
RSI por encima de 70 sugiere sobrecompra, corta señal
RSI por debajo de 30 sugiere sobreventa, señal larga
Tome posiciones largas/cortas cuando el ADX muestre tendencia + señal de confirmación del RSI.
La estrategia utiliza un mecanismo dinámico de detención de trailers con dos parámetros:
Nivel de activación: Activar la parada de seguimiento cuando el precio alcanza el porcentaje establecido después de la entrada
Porcentaje de seguimiento: porcentaje de los trayectos de nivel de parada establecidos con respecto a la mayor ganancia
Una vez activado, el stop de rastreo seguirá el nivel de ganancia más alto. A medida que el precio se retrace, el nivel de parada se mueve más abajo. Si el retroceso excede el porcentaje de rastreo, se activa el stop cerrando todas las posiciones.
El ADX de impulso determina la dirección de la tendencia, evitando falsas rupturas
La confirmación de los índices de variabilidad garantiza que no se pierdan las oportunidades de reversión
El stop de trailing ajustable bloquea las ganancias y minimiza las pérdidas
Lógica de estrategia simple y clara, fácil de entender
Aplicable a diversos mercados y plazos
ADX puede señalar una falla.
RSI puede dar múltiples señales falsas
Parámetros de parada de tracción deficientes
Las lagunas pueden causar paradas perdidas
Prueba de combinaciones ADX/RSI para optimizar las entradas
Prueba posterior de varios niveles de activación y porcentajes de rastreo
Añadir filtros adicionales para mejorar la calidad de la señal
Prueba en diferentes mercados para encontrar parámetros sólidos
Esta estrategia integra el análisis de impulso, RSI y trailing stops para determinar eficazmente la dirección de la tendencia, las reversiones al contado y el control del riesgo. La lógica sencilla hace que sea fácil de implementar en los mercados de acciones, divisas, criptomonedas y otros mercados de tendencia.
/*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)