Estrategia de escalado de cobertura de impulso de RSI-EMA múltiple

RSI EMA TP SL
Fecha de creación: 2024-12-04 15:41:10 Última modificación: 2024-12-04 15:41:10
Copiar: 0 Número de Visitas: 514
1
Seguir
1617
Seguidores

Estrategia de escalado de cobertura de impulso de RSI-EMA múltiple

Descripción general

Se trata de una estrategia de movimiento de cobertura basada en el indicador RSI y la línea media EMA. La estrategia utiliza el período de tiempo doble RSI ((RSI-14 y RSI-2) en combinación con la línea media triple EMA ((50 , 100 , 200) para capturar oportunidades de reversión de tendencia en el mercado y lograr un efecto de rebote a través de la gestión dinámica de la posición. La característica central de la estrategia es aumentar gradualmente las posiciones cuando se cumplen las condiciones de entrada, al tiempo que se establecen las condiciones de parada de sobreventa y sobreventa basadas en el RSI.

Principio de estrategia

La estrategia utiliza el índice de relative strength RSI-14 y RSI-2 de dos períodos diferentes, en combinación con las tres líneas medias EMA-50, EMA-100 y EMA-200 para determinar la señal de negociación. Para hacer múltiples condiciones, se requiere que el RSI-14 esté por debajo de 31 y el RSI-2 se rompa hacia arriba a 10, mientras que se requiere que las tres líneas medias muestren una línea de cabeza vacía (EMA-50 < EMA-100 < EMA-200).

Ventajas estratégicas

  1. Verificación cruzada de múltiples indicadores técnicos para mejorar la fiabilidad de la señal
  2. Gestión de posiciones dinámica, con flexibilidad para ajustar las posiciones según las condiciones del mercado
  3. Un mecanismo de intercambio bidireccional que permite obtener ganancias en dos direcciones en el espacio libre.
  4. Adaptarse a las condiciones de suspensión para evitar una salida prematura
  5. Interfaz gráfica que muestra claramente las señales de negociación y el estado del mercado
  6. El mecanismo de cobertura puede reducir la exposición al riesgo unidireccional
  7. Calculación de posiciones dinámicas basadas en derechos e intereses, control de riesgo más razonable

Riesgo estratégico

  1. El multiplicador de alto nivel de apalancamiento (de 20 veces) puede conllevar un mayor riesgo de ruptura de posición
  2. Las posiciones crecientes pueden causar grandes pérdidas en momentos de gran volatilidad en el mercado.
  3. Sin condiciones de stop loss, el riesgo de una caída continua es posible
  4. El indicador RSI puede generar señales falsas en un mercado lateral
  5. La combinación de varios indicadores tecnológicos puede reducir las oportunidades de negociación
  6. La gestión de posiciones puede acumular grandes riesgos en transacciones simultáneas continuas

Dirección de optimización de la estrategia

  1. Introducción de mecanismos de pérdidas adaptativas, como pérdidas dinámicas basadas en el ATR o en la volatilidad
  2. Optimización del coeficiente de apalancamiento, que puede considerarse ajustar en función de la dinámica de la volatilidad del mercado
  3. Agrega un filtro de tiempo para evitar comerciar durante la baja volatilidad
  4. Introducción de indicadores de tráfico para mejorar la fiabilidad de la señal
  5. Optimización de los multiplicadores de las posiciones aumentadas, se puede considerar el establecimiento de un límite de posición máxima
  6. Se agregó un filtro de fuerza de tendencia para evitar operar en tendencias débiles.
  7. Mejorar los mecanismos de gestión de riesgos, como el establecimiento de límites de pérdidas máximas diarias

Resumir

Se trata de una estrategia integral que combina dinámica y tendencias para mejorar la precisión de las operaciones mediante la combinación de múltiples indicadores técnicos. La innovación de la estrategia radica en la adopción de una gestión de posición dinámica y un mecanismo de cobertura, pero también conlleva un mayor riesgo.

Código Fuente de la Estrategia
/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-03 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom RSI EMA Strategy Hedge", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Definování vstupních podmínek
rsi_14 = ta.rsi(close, 14)
rsi_2 = ta.rsi(close, 2)
ema_50 = ta.ema(close, 50)
ema_100 = ta.ema(close, 100)
ema_200 = ta.ema(close, 200)

// Pákový efekt
leverage = 20

// Podmínky pro long pozici
longCondition = (rsi_14[1] < 31) and ta.crossover(rsi_2, 10) and (ema_50 < ema_100) and (ema_100 < ema_200)

// Podmínky pro short pozici
shortCondition = (rsi_14[1] > 69) and ta.crossunder(rsi_2, 90) and (ema_50 > ema_100) and (ema_100 > ema_200)

// Identifikátory pozic
long_id = "Long"
short_id = "Short"

// Definování průměrné ceny pozice pro long a short
var float long_avg_price = na
var float short_avg_price = na

// Sledujeme, zda se velikost pozice změnila
var float last_long_position_size = na
var float last_short_position_size = na

// Přerušení průměrné ceny pozice při změně pozice
if (last_long_position_size != strategy.position_size and strategy.position_size > 0)
    long_avg_price := na
if (last_short_position_size != strategy.position_size and strategy.position_size < 0)
    short_avg_price := na

// Aktualizace průměrné ceny pozice
if (strategy.position_size > 0)
    long_avg_price := strategy.position_avg_price
else
    long_avg_price := na

if (strategy.position_size < 0)
    short_avg_price := strategy.position_avg_price
else
    short_avg_price := na

// Uložení aktuální velikosti pozice pro příští bar
if (strategy.position_size > 0)
    last_long_position_size := strategy.position_size
else if (strategy.position_size < 0)
    last_short_position_size := strategy.position_size

// Podmínky pro take profit
takeProfitLongCondition = (rsi_14 > 69) and (rsi_2 > 90) and (long_avg_price < close)
takeProfitShortCondition = (rsi_14 < 31) and (rsi_2 < 10) and (short_avg_price > close)

// Velikost pozice
new_long_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2
new_short_position_size = strategy.position_size == 0 ? na : math.abs(strategy.position_size) * 2

// Úprava velikosti pozice s ohledem na pákový efekt
position_value = strategy.equity * leverage
trade_qty_long = position_value / close
trade_qty_short = position_value / close

// Vstup do long pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (longCondition)
    strategy.entry(long_id, strategy.long, qty=new_long_position_size == na ? trade_qty_long : new_long_position_size)

// Vstup do short pozice s dvojnásobkem aktuální pozice nebo standardní velikostí při první pozici
if (shortCondition)
    strategy.entry(short_id, strategy.short, qty=new_short_position_size == na ? trade_qty_short : new_short_position_size)

// Výstup z long pozice při splnění podmínek pro take profit
if (takeProfitLongCondition)
    strategy.close(long_id)

// Výstup z short pozice při splnění podmínek pro take profit
if (takeProfitShortCondition)
    strategy.close(short_id)

// Zvýraznění části grafu, kde platí podmínky pro long
highlightLongCondition = (ema_50 < ema_100) and (ema_100 < ema_200)
bgcolor(highlightLongCondition ? color.new(color.green, 90) : na)

// Zvýraznění části grafu, kde platí podmínky pro short
highlightShortCondition = (ema_50 > ema_100) and (ema_100 > ema_200)
bgcolor(highlightShortCondition ? color.new(color.red, 90) : na)

// Přidání bodů pozic do grafu
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="L")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="S")

// Vykreslení průměrné ceny pozice pro long a short pouze pokud pozice existuje
plot(strategy.position_size > 0 ? long_avg_price : na, title="Long Avg Price", color=color.blue, linewidth=2)
plot(strategy.position_size < 0 ? short_avg_price : na, title="Short Avg Price", color=color.orange, linewidth=2)

// Zvýraznění čtverců pro RSI14 > 70 (červeně) a RSI14 < 30 (zeleně)
var int rsi_above_70_start = na
var int rsi_below_30_start = na

var float top_value_above_70 = na
var float bottom_value_above_70 = na

var float top_value_below_30 = na
var float bottom_value_below_30 = na

// Identifikace začátku a konce období pro RSI14 > 70
if (rsi_14[1] > 70 and rsi_14[2] > 70)
    if na(rsi_above_70_start)
        rsi_above_70_start := bar_index
        top_value_above_70 := high
        bottom_value_above_70 := low
    else
        top_value_above_70 := math.max(top_value_above_70, high)
        bottom_value_above_70 := math.min(bottom_value_above_70, low)
else
    if not na(rsi_above_70_start)
        // box.new(left = rsi_above_70_start, right = bar_index - 1, top = top_value_above_70, bottom = bottom_value_above_70, border_color = color.red, border_width = 2, bgcolor=color.new(color.red, 90))
        rsi_above_70_start := na
        top_value_above_70 := na
        bottom_value_above_70 := na

// Identifikace začátku a konce období pro RSI14 < 30
if (rsi_14[1] < 30 and rsi_14[2] < 30)
    if na(rsi_below_30_start)
        rsi_below_30_start := bar_index
        top_value_below_30 := high
        bottom_value_below_30 := low
    else
        top_value_below_30 := math.max(top_value_below_30, high)
        bottom_value_below_30 := math.min(bottom_value_below_30, low)
else
    if not na(rsi_below_30_start)
        // box.new(left = rsi_below_30_start, right = bar_index - 1, top = top_value_below_30, bottom = bottom_value_below_30, border_color = color.green, border_width = 2, bgcolor=color.new(color.green, 90))
        rsi_below_30_start := na
        top_value_below_30 := na
        bottom_value_below_30 := na