Estrategia de costo promedio ponderado por múltiplos EMA basada en stop loss dinámico y beneficio objetivo


Fecha de creación: 2024-01-19 15:16:53 Última modificación: 2024-01-19 15:16:53
Copiar: 2 Número de Visitas: 778
1
Seguir
1617
Seguidores

Estrategia de costo promedio ponderado por múltiplos EMA basada en stop loss dinámico y beneficio objetivo

Descripción general

Esta estrategia utiliza una dinámica de múltiples medias móviles de índices como señal de entrada, en combinación con un mecanismo de seguimiento de stop loss y ganancias objetivo para administrar los riesgos y ganancias. La estrategia aprovecha al máximo la naturaleza suave de la EMA para identificar tendencias y controlar los costos a través de múltiples inversiones de DCA. Además, integra la configuración dinámica de stop loss y ganancias objetivo para que toda la estrategia sea más inteligente y automática.

Principio de estrategia

Cálculo del indicador

  • Las medias móviles de EMA5, EMA10, EMA20, EMA50, EMA100 y EMA200
  • La amplitud real promedio de ATR

Señales de entrada

Cuando el precio se acerca o atraviesa un ciclo EMA establecido, se genera una señal de salida, el ciclo EMA se puede personalizar, típicamente se eligen ciclos 5, 10, 20, 50, 100 y 200. Esta estrategia adopta el precio en el rango del 1% por encima o por debajo del EMA como condición de entrada.

Gestión de riesgos

La integración de varios mecanismos de gestión de riesgos:

  1. ATR Stop: Cancelación de liquidación cuando el ATR excede el umbral establecido
  2. Control de las entradas máximas: evitar inversiones excesivas
  3. Detener el seguimiento dinámico: detener el seguimiento en función de las fluctuaciones en tiempo real de los precios

Mecanismo de ganancias

Establecer un nivel de ganancias objetivo y salir cuando el precio supera el objetivo

Análisis de las ventajas estratégicas

  1. Utiliza EMA para identificar tendencias y filtrar las fluctuaciones a corto plazo
  2. Los costos de los DCA se dispersan para evitar compras y ventas altas
  3. Portfolio de múltiples EMAs para mejorar la tasa de éxito de la salida a bolsa
  4. Dinámica de pérdidas de control de pérdidas en tiempo real
  5. El objetivo es obtener ganancias claras y no desperdiciar mucho dinero.

Riesgos y mejoras

  1. La selección del factor EMA requiere optimización, y la combinación de ciclos en diferentes mercados tiene efectos muy diferentes
  2. El exceso de DCA puede ocasionar una ocupación excesiva de fondos
  3. La configuración de la amplitud de los estancamientos requiere una optimización de retroalimentación

Optimización de estrategias

  1. Utiliza el sistema EMA avanzado para identificar tendencias
  2. Optimización multivariable para el número óptimo de DCA y el stop loss
  3. Un modelo de aprendizaje automático para predecir cambios en los precios
  4. Modulo de gestión de fondos integrado para controlar la inversión global

Resumir

Esta estrategia integra varios mecanismos, como la identificación de tendencias de EMA, el control de costos de DCA, el seguimiento dinámico de stop loss y la retirada de ganancias objetivo. Hay mucho espacio de optimización en cuanto a ajuste de parámetros y control de riesgos. En general, la estrategia tiene una gran adaptabilidad y escalabilidad, que puede generar ganancias adicionales estables para los inversores.

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

//@version=4
strategy("EMA DCA Strategy with Trailing Stop and Profit Target", overlay=true )

// Define the investment amount for when the condition is met
investment_per_condition = 6

// Define the EMAs
ema5 = ema(close, 5)
ema10 = ema(close, 10)
ema20 = ema(close, 20)
ema50 = ema(close, 50)
ema100 = ema(close, 100)
ema200 = ema(close, 200)

// Define ATR sell threshold
atr_sell_threshold = input(title="ATR Sell Threshold", type=input.integer, defval=10, minval=1)

// Helper function to find if the price is within 1% of the EMA
isWithin1Percent(price, ema) =>
    ema_min = ema * 0.99
    ema_max = ema * 1.01
    price >= ema_min and price <= ema_max

// Control the number of buys
var int buy_count = 0
buy_limit = input(title="Buy Limit", type=input.integer, defval=3000)

// Calculate trailing stop and profit target levels
trail_percent = input(title="Trailing Stop Percentage", type=input.integer, defval=1, minval=0, maxval=10)
profit_target_percent = input(title="Profit Target Percentage", type=input.integer, defval=3, minval=1, maxval=10)

// Determine if the conditions are met and execute the strategy
checkConditionAndBuy(emaValue, emaName) =>
    var int local_buy_count = 0 // Create a local mutable variable
    if isWithin1Percent(close, emaValue) and local_buy_count < buy_limit
        strategy.entry("Buy at " + emaName, strategy.long, qty=investment_per_condition / close, alert_message ="Buy condition met for " + emaName)
        local_buy_count := local_buy_count + 1
        // alert("Buy Condition", "Buy condition met for ", freq_once_per_bar_close)
        
    local_buy_count // Return the updated local_buy_count

// Add ATR sell condition
atr_condition = atr(20) > atr_sell_threshold
if atr_condition
    strategy.close_all()
    buy_count := 0 // Reset the global buy_count when selling

// Strategy execution
buy_count := checkConditionAndBuy(ema5, "EMA5")
buy_count := checkConditionAndBuy(ema10, "EMA10")
buy_count := checkConditionAndBuy(ema20, "EMA20")
buy_count := checkConditionAndBuy(ema50, "EMA50")
buy_count := checkConditionAndBuy(ema100, "EMA100")
buy_count := checkConditionAndBuy(ema200, "EMA200")

// Calculate trailing stop level
trail_offset = close * trail_percent / 100
trail_level = close - trail_offset

// Set profit target level
profit_target_level = close * (1 + profit_target_percent / 100)

// Exit strategy: Trailing Stop and Profit Target
strategy.exit("TrailingStop", from_entry="Buy at EMA", trail_offset=trail_offset, trail_price=trail_level)
strategy.exit("ProfitTarget", from_entry="Buy at EMA",  when=close >= profit_target_level)

// Plot EMAs
plot(ema5, title="EMA 5", color=color.red)
plot(ema10, title="EMA 10", color=color.orange)
plot(ema20, title="EMA 20", color=color.yellow)
plot(ema50, title="EMA 50", color=color.green)
plot(ema100, title="EMA 100", color=color.blue)
plot(ema200, title="EMA 200", color=color.purple)