Estrategia dinámica adaptativa de stop-profit y stop-loss con cruce de medias móviles dobles

SMA MA SL TP ATR
Fecha de creación: 2024-11-18 15:32:26 Última modificación: 2024-11-18 15:54:16
Copiar: 0 Número de Visitas: 505
1
Seguir
1617
Seguidores

Estrategia dinámica adaptativa de stop-profit y stop-loss con cruce de medias móviles dobles

Descripción general

La estrategia es un sistema de negociación cuantitativa basado en señales de cruce de dos líneas homogéneas, que identifica los cambios en la tendencia del mercado a través de cruces de promedios móviles a corto y largo plazo, y combina la gestión dinámica de paros para controlar el riesgo. La estrategia opera a precios de mercado, liquida automáticamente las posiciones existentes y abre nuevas posiciones cuando se activa la señal, para proteger los fondos mediante el establecimiento de puntos de paros.

Principio de estrategia

La estrategia utiliza una media móvil simple (SMA) de dos períodos diferentes como la base principal de la señal de negociación. Cuando la línea de media corta atraviesa la línea de media larga, el sistema genera múltiples señales; cuando la línea de media corta atraviesa la línea de media larga, el sistema genera una señal de cancelación.

Ventajas estratégicas

  1. La claridad de la señal - el cruce de dos líneas uniformes es un indicador técnico clásico, la señal es clara y fácil de entender
  2. Gestión de riesgos perfecta - control de riesgos en cada operación mediante un stop loss dinámico
  3. Alto grado de automatización - Ejecución automatizada de todo el proceso, desde la identificación de señales hasta la gestión de posiciones
  4. Adaptabilidad - puede adaptarse a diferentes entornos de mercado mediante parámetros
  5. Estructura sencilla - lógica de código clara, fácil de mantener y optimizar
  6. Monitoreo en tiempo real: cuenta con una función de recordatorio de transacciones para seguir la ejecución de la estrategia

Riesgo estratégico

  1. Riesgo de mercado en turbulencia - el riesgo de pérdidas por el riesgo de transacciones frecuentes en situaciones de turbulencia interzonal
  2. Riesgo de deslizamiento - La ejecución de un precio de mercado podría enfrentar un deslizamiento mayor
  3. Sensibilidad de los parámetros - La elección del ciclo de la línea media tiene un mayor impacto en el rendimiento de la estrategia
  4. Riesgo de brechas falsas - puede haber una reajuste rápido después de brechas de corta duración
  5. Riesgo de gestión de fondos: el cierre porcentual fijo puede no ser adecuado para todos los entornos de mercado

Dirección de optimización de la estrategia

  1. Aumentar los filtros de tendencia para evitar el comercio frecuente en mercados convulsionados
  2. Introducción de un indicador de fluctuación para ajustar dinámicamente el porcentaje de pérdidas de parada
  3. Añadir señales de confirmación de transacciones para mejorar la calidad de las transacciones
  4. Optimizar el momento de apertura de las posiciones y considerar la introducción de un mecanismo de reajuste de precios
  5. Mejora de los sistemas de gestión de fondos y control dinámico de las posiciones
  6. Aumentar los indicadores de sentimiento del mercado y mejorar la fiabilidad de las señales

Resumir

Esta es una estrategia de comercio cuantitativa estructurada, lógica y clara. Captura los cambios de tendencia a través del cruce de dos líneas equiláteras, junto con el riesgo de gestión de stop loss dinámico. La estrategia tiene la ventaja de tener un alto grado de sistematización. El riesgo es controlado, pero se debe tener en cuenta el riesgo de todo tipo de mercado en la bolsa.

Código Fuente de la Estrategia
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("BTCUSD Daily Strategy - Market Orders Only", overlay=true, initial_capital=10000, currency=currency.USD)

// Configurable Inputs
stop_loss_percent = input.float(title="Stop Loss (%)", defval=1.0, minval=0.0, step=0.1)
take_profit_percent = input.float(title="Take Profit (%)", defval=2.0, minval=0.0, step=0.1)
short_ma_length = input.int(title="Short MA Length", defval=9, minval=1)
long_ma_length = input.int(title="Long MA Length", defval=21, minval=1)

// Moving Averages
short_ma = ta.sma(close, short_ma_length)
long_ma = ta.sma(close, long_ma_length)

// Plotting Moving Averages
plot(short_ma, color=color.blue, title="Short MA")
plot(long_ma, color=color.red, title="Long MA")

// Buy and Sell Signals
buy_signal = ta.crossover(short_ma, long_ma)
sell_signal = ta.crossunder(short_ma, long_ma)

// Market Buy Logic
if (buy_signal and strategy.position_size <= 0)
    // Close any existing short position
    if (strategy.position_size < 0)
        strategy.close(id="Market Sell")
    
    // Calculate Stop Loss and Take Profit Prices
    entry_price = close
    long_stop = entry_price * (1 - stop_loss_percent / 100)
    long_take_profit = entry_price * (1 + take_profit_percent / 100)

    // Enter Long Position
    strategy.entry(id="Market Buy", direction=strategy.long)
    strategy.exit(id="Exit Long", from_entry="Market Buy", stop=long_stop, limit=long_take_profit)

    // Alert for Market Buy
    alert("Market Buy Signal at price " + str.tostring(close) + ". Stop Loss: " + str.tostring(long_stop) + ", Take Profit: " + str.tostring(long_take_profit), alert.freq_once_per_bar_close)

// Market Sell Logic
if (sell_signal and strategy.position_size >= 0)
    // Close any existing long position
    if (strategy.position_size > 0)
        strategy.close(id="Market Buy")

    // Calculate Stop Loss and Take Profit Prices
    entry_price = close
    short_stop = entry_price * (1 + stop_loss_percent / 100)
    short_take_profit = entry_price * (1 - take_profit_percent / 100)

    // Enter Short Position
    strategy.entry(id="Market Sell", direction=strategy.short)
    strategy.exit(id="Exit Short", from_entry="Market Sell", stop=short_stop, limit=short_take_profit)

    // Alert for Market Sell
    alert("Market Sell Signal at price " + str.tostring(close) + ". Stop Loss: " + str.tostring(short_stop) + ", Take Profit: " + str.tostring(short_take_profit), alert.freq_once_per_bar_close)