Estrategia de trading cuantitativo con stop-profit y stop-loss dinámicos de cruce de medias móviles dobles EMA

EMA
Fecha de creación: 2024-11-18 15:53:49 Última modificación: 2024-11-18 15:53:49
Copiar: 5 Número de Visitas: 611
1
Seguir
1617
Seguidores

Descripción general

La estrategia es un sistema de comercio cuantitativo basado en el cruce de líneas equilíneas, combinado con un mecanismo de stop-loss dinámico. El núcleo de la estrategia es identificar las tendencias del mercado a través de cruces de promedios móviles de 10 ciclos y 26 ciclos (EMA) y realizar operaciones en caso de retroceso. El sistema utiliza una configuración de punto de stop-loss fijo para proteger la seguridad de los fondos a través de un estricto control de riesgo.

Principio de estrategia

La estrategia utiliza dos EMAs de diferentes períodos como indicadores centrales: la corta EMA de 10 períodos y la larga EMA de 26 períodos. Cuando la corta EMA cruza hacia arriba la media de largo plazo, el sistema identifica como una tendencia alcista, produciendo una señal de compra; cuando la corta EMA cruza hacia abajo la media de largo plazo, el sistema identifica como una tendencia bajista, produciendo una señal de venta.

Ventajas estratégicas

  1. Claridad de la señal: utiliza el cruce equilátero como señal de negociación, las reglas son simples y claras, fáciles de ejecutar y monitorear
  2. Control de riesgos: con un punto de parada fijo, el riesgo de cada operación se controla de manera efectiva
  3. Seguimiento de tendencias: combinación de cruce de medias y reajustes de precios para una mejor comprensión de las tendencias
  4. Alto grado de automatización: lógica de la estrategia es clara y fácil de programar para automatizar las transacciones
  5. Adaptabilidad: Aplicable a diferentes variedades de comercio, especialmente las variedades con mayor volatilidad

Riesgo estratégico

  1. Riesgo de mercado en crisis: Las señales falsas pueden ser frecuentes en mercados en crisis intermedia
  2. Riesgo de deslizamiento: puede haber un deslizamiento mayor en un mercado con fuertes fluctuaciones
  3. Riesgo de pérdidas: el nivel de pérdidas fijas puede no ser lo suficientemente flexible en ciertos mercados
  4. La latencia de la señal: la señal de cruce de línea media tiene cierta latencia y puede perder el punto de entrada óptimo
  5. Riesgo de gestión de fondos: el control razonable de la proporción de fondos en cada transacción

Dirección de optimización de la estrategia

  1. Detención dinámica: se puede considerar la posibilidad de ajustar la posición de parada dinámicamente en función de la volatilidad del mercado
  2. Filtración de señales: incremento de indicadores auxiliares como volumen de tráfico, fluctuación para filtrar señales falsas
  3. Filtración de tiempo: aumenta el filtro de los períodos de negociación para evitar los períodos de gran volatilidad
  4. Administración de posiciones: aumento de la suspensión parcial, que permite mantener algunas posiciones para seguir la tendencia
  5. Gestión de fondos: agregando un sistema de gestión de fondos dinámico que ajusta automáticamente el tamaño de las transacciones en función del valor neto de la cuenta

Resumir

La estrategia establece un sistema de negociación completo mediante la combinación de cruce de la línea media de la EMA y la reajuste de precios. La estrategia está diseñada de manera simple e intuitiva, el control del riesgo es claro y se adapta a las variedades de operaciones con mayor volatilidad.

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

//@version=5
strategy("30 Pips Target & 15 Pips Stop-Loss with One Signal at a Time", overlay=true)

// Define settings for target and stop-loss in pips
target_in_pips = 30
stoploss_in_pips = 10

// Convert pips to price value based on market (for forex, 1 pip = 0.0001 for major pairs like GBP/JPY)
pip_value = syminfo.mintick * 10  // For forex, 1 pip = 0.0001 or 0.01 for JPY pairs
target_value = target_in_pips * pip_value
stoploss_value = stoploss_in_pips * pip_value

// Define EMAs (10-EMA and 26-EMA) for the crossover strategy
ema10 = ta.ema(close, 10)
ema26 = ta.ema(close, 26)

// Buy signal: when 10 EMA crosses above 26 EMA
longCondition = ta.crossover(ema10, ema26)
// Sell signal: when 10 EMA crosses below 26 EMA
shortCondition = ta.crossunder(ema10, ema26)

// Define price levels with explicit type float
var float long_entry_price = na
var float long_take_profit = na
var float long_stop_loss = na
var float short_entry_price = na
var float short_take_profit = na
var float short_stop_loss = na

// Variable to track if a trade is active
var bool inTrade = false

// Check if the trade hit stop loss or take profit
if (inTrade)
    if (not na(long_take_profit) and close >= long_take_profit)
        inTrade := false  // Exit the trade after hitting target
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(long_stop_loss) and close <= long_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(short_take_profit) and close <= short_take_profit)
        inTrade := false  // Exit the trade after hitting target
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

    if (not na(short_stop_loss) and close >= short_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

// Only generate new signals if not already in a trade
if (not inTrade)
    if (longCondition)
        long_entry_price := close
        long_take_profit := close + target_value
        long_stop_loss := close - stoploss_value
        strategy.entry("Long", strategy.long)  // Enter a long trade
        strategy.exit("Take Profit/Stop Loss", "Long", limit=long_take_profit, stop=long_stop_loss)
        inTrade := true  // Mark trade as active

    if (shortCondition)
        short_entry_price := close
        short_take_profit := close - target_value
        short_stop_loss := close + stoploss_value
        strategy.entry("Short", strategy.short)  // Enter a short trade
        strategy.exit("Take Profit/Stop Loss", "Short", limit=short_take_profit, stop=short_stop_loss)
        inTrade := true  // Mark trade as active

// Plot the levels on the chart only when in a trade
plot(inTrade and not na(long_take_profit) ? long_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Long)")
plot(inTrade and not na(long_stop_loss) ? long_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Long)")

plot(inTrade and not na(short_take_profit) ? short_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Short)")
plot(inTrade and not na(short_stop_loss) ? short_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Short)")

plotshape(series=longCondition and not inTrade, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition and not inTrade, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")