Estrategia dinámica de cruce de promedios móviles exponenciales multiperiodo y sistema de optimización de caídas

EMA MA SMA RSI
Fecha de creación: 2024-12-27 15:29:38 Última modificación: 2024-12-27 15:29:38
Copiar: 1 Número de Visitas: 415
1
Seguir
1617
Seguidores

Estrategia dinámica de cruce de promedios móviles exponenciales multiperiodo y sistema de optimización de caídas

Descripción general

La estrategia es un sistema de trading cuantitativo basado en múltiples cruces de medias móviles exponenciales (EMA) y optimización del retroceso. Utiliza cinco promedios móviles, EMA5, EMA8, EMA13, EMA21 y EMA50, y realiza la apertura por lotes y el cierre dinámico de posiciones observando la relación cruzada entre los promedios móviles de diferentes períodos y la relación posicional entre los precios y los promedios móviles. La estrategia adopta un sistema de gestión de dinero, dividiendo las posiciones en diferentes proporciones, como 20%, 40%, etc., y aumentando o reduciendo gradualmente las posiciones de acuerdo con diferentes señales del mercado.

Principio de estrategia

La lógica central de la estrategia incluye tres condiciones de entrada principales y dos condiciones de salida:

  1. Las señales para abrir una posición incluyen: abrir una posición del 20% cuando EMA5 cruza EMA8; agregar una posición del 20% cuando EMA5 cruza EMA13; agregar una posición del 40% cuando EMA8 cruza EMA21
  2. Sistema de optimización de retroceso: abra una posición del 20% cuando el precio alcance la EMA50; agregue un 20% cuando el precio vuelva a superar la EMA50
  3. Señal de cierre: cuando EMA5 cruce por debajo de EMA13, cierre el 50% de la posición; cuando EMA8 cruce por debajo de EMA21, cierre todas las posiciones
  4. Control de riesgos: cuando el precio, EMA5 y EMA8 están por debajo de EMA50 al mismo tiempo, liquide inmediatamente todas las posiciones.

Ventajas estratégicas

  1. Mecanismo de confirmación múltiple: proporciona señales comerciales más confiables a través de múltiples cruces de promedios móviles
  2. Gestión dinámica de la posición: utilice diferentes relaciones de posición según las distintas intensidades de la señal para controlar los riesgos de forma eficaz
  3. Diseño de optimización de retroceso: utilice EMA50 como nivel de soporte para compras de retroceso para mejorar la precisión de entrada
  4. Mecanismo de liquidación flexible: adopte una estrategia de liquidación paso a paso para controlar el retroceso y retener las ganancias
  5. Control de riesgo perfecto: establezca condiciones claras de stop loss para evitar pérdidas causadas por caídas bruscas

Riesgo estratégico

  1. Histéresis de la media móvil: La media móvil en sí tiene histéresis, lo que puede provocar un retraso en la señal.
  2. Riesgo de mercado volátil: pueden ocurrir frecuentes rupturas falsas en un mercado lateral y volátil.
  3. Riesgo de sobreoperación: múltiples condiciones de apertura pueden llevar a una operación excesiva
  4. Costos de ejecución: las transacciones frecuentes pueden resultar en tarifas de transacción más altas
  5. Riesgo sistémico: puede ser demasiado tarde para cerrar posiciones en un mercado volátil

Dirección de optimización de la estrategia

  1. Introducción de filtros de tendencia: puede agregar indicadores de tendencia como ADX para ejecutar transacciones solo cuando haya una tendencia fuerte
  2. Optimice la gestión de posiciones: ajuste dinámicamente el tamaño de las posiciones en función de la volatilidad
  3. Agregue reconocimiento de patrones de precios: combine patrones de línea K para mejorar la precisión de entrada
  4. Mejore el mecanismo de stop-profit: puede establecer una línea de stop-profit dinámica para bloquear mejor las ganancias.
  5. Añadir indicadores de sentimiento del mercado: introducir RSI y otros indicadores para filtrar el estado del mercado

Resumir

Esta estrategia construye un sistema de trading relativamente completo a través de múltiples cruces de medias móviles y sistemas de optimización de retroceso. Sus ventajas radican en sus múltiples mecanismos de confirmación y gestión flexible de posiciones, pero también tiene defectos inherentes como el desfase de la media móvil. Al introducir métodos de optimización como filtros de tendencias, se pueden mejorar aún más la estabilidad y la rentabilidad de la estrategia. Esta estrategia es adecuada para su uso en mercados con tendencias obvias y se requiere que los operadores optimicen los parámetros en función de las condiciones reales del mercado.

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

//@version=5
strategy("EMA Strategy with Price & EMA5 & EMA8 < EMA50 Condition", overlay=true, margin_long=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)

// ==============================
// INPUTS
// ==============================
lengthEMA5 = input.int(5, "EMA5 Length")
lengthEMA8 = input.int(8, "EMA8 Length")
lengthEMA13 = input.int(13, "EMA13 Length")
lengthEMA21 = input.int(21, "EMA21 Length")
lengthEMA50 = input.int(50, "EMA50 Length")

// Tam pozisyon boyutu (örnek: 100 birim)
full_position = 100.0 
qty20 = full_position * 0.2
qty40 = full_position * 0.4

// ==============================
// EMA HESAPLAMALARI
// ==============================
ema5 = ta.ema(close, lengthEMA5)
ema8 = ta.ema(close, lengthEMA8)
ema13 = ta.ema(close, lengthEMA13)
ema21 = ta.ema(close, lengthEMA21)
ema50 = ta.ema(close, lengthEMA50)

// ==============================
// KESİŞİMLERİ TESPİT FONKSİYONLARI
// ==============================
crossUp(src1, src2) => ta.crossover(src1, src2)
crossDown(src1, src2) => ta.crossunder(src1, src2)

// ==============================
// STRATEJİ KOŞULLARI
// ==============================

// Adım 1: EMA5, EMA8’i yukarı keserse %20’lik alım
step1_condition = crossUp(ema5, ema8)

// Adım 2: EMA5, EMA8’i yukarı kestikten sonra EMA5, EMA13’ü de yukarı keserse %20 daha alım
step2_condition = crossUp(ema5, ema13)

// Adım 3: EMA8, EMA21’i yukarı keserse %40 alım
step3_condition = crossUp(ema8, ema21)

// Çıkış koşulları:
// EMA5, EMA13’ü aşağı keserse pozisyonun %50’sini kapat.
// EMA8, EMA21’i aşağı keserse tüm pozisyonu kapat.
half_close_condition = crossDown(ema5, ema13)
full_close_condition = crossDown(ema8, ema21)

// Düşüşlerde EMA50'ye dokunma -> %20 alım
pullback_condition = low <= ema50 or close <= ema50

// Fiyat tekrar EMA50'nin üzerine çıkarsa -> %20 alım
above_ema50_condition = crossUp(close, ema50)

// Yeni ek koşul:  
// Fiyat, EMA5 ve EMA8’in herbiri EMA50’nin altındaysa tüm pozisyon kapat.
// Bu durum tam bir düşüş senaryosunu işaret eder.
all_below_condition = (close < ema50) and (ema5 < ema50) and (ema8 < ema50)

// Mevcut pozisyon büyüklüğü
pos_size = strategy.position_size

// ==============================
// POZİSYON GİRİŞLERİ
// ==============================
if (step1_condition and pos_size == 0)
    strategy.entry("Step1", strategy.long, qty=qty20)

if (step2_condition and strategy.opentrades < 2)
    strategy.entry("Step2", strategy.long, qty=qty20)

if (step3_condition and strategy.opentrades < 3)
    strategy.entry("Step3", strategy.long, qty=qty40)

// Pullback: Fiyat EMA50'ye temas ederse ve pozisyon yoksa %20 alım
if (pullback_condition and strategy.opentrades == 0)
    strategy.entry("Pullback", strategy.long, qty=qty20)

// Fiyat EMA50’nin üzerine çıkarsa ve pozisyon %100'e ulaşmamışsa %20 alım
if (above_ema50_condition and strategy.opentrades < 4)
    strategy.entry("Above50", strategy.long, qty=qty20)

// ==============================
// POZİSYON YÖNETİMİ (ÇIKIŞLAR)
// ==============================
if (all_below_condition and strategy.opentrades > 0)
    // Tüm pozisyonu kapat çünkü sert düşüş senaryosuna girildi
    strategy.close("Step3")
    strategy.close("Step2")
    strategy.close("Step1")
    strategy.close("Pullback")
    strategy.close("Above50")
else
    // Yarı kapatma (EMA5, EMA13 aşağı kesişimi)
    if (half_close_condition)
        totalTrades = strategy.opentrades
        // Öncelikle en son açılan en büyük pozisyonu kapatarak kademeli küçültme
        if (totalTrades >= 3)
            strategy.close("Step3")     // Bu 40% kapatır
        else if (totalTrades == 2)
            strategy.close("Step2")     // Bu 20% kapatır
        else if (totalTrades == 1)
            strategy.close("Step1")     // Bu da 20% kapatır (tamamen çıkar, ama basitlik için böyle)

    // Tam kapatma (EMA8, EMA21 aşağı kesişimi)
    if (full_close_condition)
        // Açık olan tüm pozisyonları kapat
        strategy.close("Step3")
        strategy.close("Step2")
        strategy.close("Step1")
        strategy.close("Pullback")
        strategy.close("Above50")

// ==============================
// GÖRSELLEŞTİRME
// ==============================
plot(ema5, "EMA5", color=color.new(color.yellow, 0))
plot(ema8, "EMA8", color=color.new(color.blue, 0))
plot(ema13, "EMA13", color=color.new(color.green, 0))
plot(ema21, "EMA21", color=color.new(color.red, 0))
plot(ema50, "EMA50", color=color.new(color.purple, 0))