El valor de las acciones de la entidad en el mercado de divisas se calculará en función de la posición de la entidad en el mercado.

El autor:¿ Qué pasa?, fecha: 2023-10-09 15:36:07
Las etiquetas:

Resumen general

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.

Cómo funciona

Entradas con Momentum ADX y RSI

  • 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.

Parada de arrastre ajustable

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.

Ventajas

  • 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

Riesgos y mitigaciones

  • ADX puede señalar una falla.

    • Ajuste los parámetros de ADX para detectar movimientos de tendencia verdaderos
  • RSI puede dar múltiples señales falsas

    • Ajustar los niveles de sobrecompra/sobreventa para reducir los problemas
  • Parámetros de parada de tracción deficientes

    • Optimice los parámetros para encontrar los mejores niveles de parada
  • Las lagunas pueden causar paradas perdidas

    • Considere el uso de órdenes stop-limit

Oportunidades de optimización

  • 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

Conclusión

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)


Más.