Estrategia de trading con stop loss dinámico según EMA

EMA RSI MACD
Fecha de creación: 2024-06-17 16:17:31 Última modificación: 2024-06-17 16:17:31
Copiar: 0 Número de Visitas: 635
1
Seguir
1617
Seguidores

Estrategia de trading con stop loss dinámico según EMA

Descripción general

La estrategia se basa en señales cruzadas de las medias móviles de los índices de 20 días y 200 días (EMA) y se confirma en combinación con el indicador de dispersión de las medias móviles de convergencia (MACD) y el indicador de dispersión de las medias móviles de convergencia (RSI) para generar señales de compra y venta. Al mismo tiempo, la estrategia utiliza un método de stop loss dinámico y un objetivo fijo de ganancias para administrar el riesgo de negociación y bloquear los beneficios.

Principio de estrategia

  1. Calcula el EMA de 20 días y 200 días, cuando el EMA de 20 días sobrepasa el EMA de 200 días, genera una señal de compra; cuando el EMA de 20 días debajo atraviesa el EMA de 200 días, genera una señal de venta.
  2. El uso de RSI y MACD para confirmar la señal de cruce de EMA solo se ejecuta cuando el RSI es superior a 50 y la línea MACD es superior a la línea de señal; solo se ejecuta la venta cuando el RSI es inferior a 50 y la línea MACD es inferior a la línea de señal.
  3. Establezca un objetivo de rentabilidad fijo (por ejemplo, 20%) y un stop loss inicial (por ejemplo, 10%).
  4. Cuando el beneficio de la posición alcanza la rentabilidad objetivo, el precio de parada de pérdidas se eleva a menos del 10% del precio actual, para lograr una parada de pérdidas dinámica.
  5. Cuando el precio toca el precio de parada dinámica, la posición cerrada se cierra con ganancias.

Ventajas estratégicas

  1. La combinación de varios indicadores técnicos para confirmar la señal de transacción aumenta la fiabilidad de la señal.
  2. El método de stop loss dinámico, mientras se bloquean las ganancias, da un cierto margen de retroceso al precio y evita la liquidación prematura.
  3. El establecimiento de un objetivo fijo de rentabilidad ayuda a controlar el riesgo y lograr una rentabilidad estable.

Riesgo estratégico

  1. Las señales cruzadas de EMA pueden presentarse con frecuencia y falsas, lo que aumenta el costo de la operación.
  2. En un mercado convulso, la estrategia puede dar lugar a pérdidas continuas.
  3. Las tasas de rendimiento y de pérdidas fijas pueden no adaptarse a diferentes condiciones del mercado y deben ajustarse a la volatilidad del mercado.

Dirección de optimización de la estrategia

  1. Introducir más indicadores técnicos o de sentimiento de mercado para mejorar la precisión y fiabilidad de las señales.
  2. Utiliza tasas de rendimiento y de pérdidas objetivo adaptadas y se ajusta dinámicamente según la volatilidad del mercado y las características de los activos.
  3. La combinación de las tendencias del mercado y los ciclos de fluctuación, con diferentes configuraciones de parámetros en diferentes entornos de mercado.

Resumir

La estrategia, confirmada por la combinación de señales cruzadas de EMA con RSI y MACD, y el método de gestión de riesgos de stop loss dinámico y ganancias de objetivo fijo, promete obtener ganancias estables en un mercado de tendencia. Sin embargo, en un mercado de volatilidad, la estrategia puede enfrentar el riesgo de operaciones frecuentes y pérdidas continuas. Por lo tanto, se necesitan más optimizaciones y mejoras para mejorar la adaptabilidad y solidez de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Crossover Strategy with RSI and MACD Confirmation and Dynamic Trailing Stop Loss", overlay=true)

// Calculate EMAs
ema20 = ta.ema(close, 20)
ema200 = ta.ema(close, 200)

// Calculate RSI
rsi = ta.rsi(close, 14)

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)

// Plot EMAs, RSI, and MACD on the chart
plot(ema20, color=color.blue, title="EMA 20")
plot(ema200, color=color.red, title="EMA 200")
hline(70, "Overbought", color=color.red)
hline(30, "Oversold", color=color.green)
plot(rsi, title="RSI", color=color.orange)
hline(0, "Zero Line", color=color.gray)
plot(macdLine, title="MACD Line", color=color.aqua)
plot(signalLine, title="Signal Line", color=color.fuchsia)

// Strategy parameters
targetProfitPercent = 20
trailingStopIncrement = 10

// Strategy variables
var float initialStopLevel = na
var float trailingStopLevel = na

// Strategy rules with RSI and MACD confirmation
longCondition = ta.crossover(ema20, ema200) and rsi > 50 and macdLine > signalLine
shortCondition = ta.crossunder(ema20, ema200) and rsi < 50 and macdLine < signalLine

// Execute trades
if (longCondition)
    strategy.entry("Buy Call", strategy.long)
    initialStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial stop-loss at 10% below entry price

if (shortCondition)
    strategy.entry("Buy Put", strategy.short)

// Calculate profit and loss targets
takeProfit = strategy.position_avg_price * (1 + targetProfitPercent / 100) // 20% profit target

// Update trailing stop loss
if (strategy.opentrades > 0)
    if (strategy.position_size > 0) // Long position
        if (strategy.netprofit >= takeProfit)
            // Update stop-loss based on profit increments
            if (trailingStopLevel == na)
                trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial trailing stop at 10% below entry price
            else
                if (strategy.position_avg_price * (1 - 0.10) > trailingStopLevel)
                    trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Increase stop-loss to 10% below current price
        
        // Apply trailing stop loss
        strategy.exit("Take Profit", "Buy Call", stop=trailingStopLevel)

// Plot buy and sell signals on the chart
plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")