Stratégie de croisement dynamique de moyenne mobile exponentielle multi-période et système d'optimisation des drawdowns

EMA MA SMA RSI
Date de création: 2024-12-27 15:29:38 Dernière modification: 2024-12-27 15:29:38
Copier: 1 Nombre de clics: 415
1
Suivre
1617
Abonnés

Stratégie de croisement dynamique de moyenne mobile exponentielle multi-période et système d’optimisation des drawdowns

Aperçu

La stratégie est un système de trading quantitatif basé sur de multiples croisements de moyennes mobiles exponentielles (EMA) et une optimisation des retracements. Il utilise cinq moyennes mobiles, EMA5, EMA8, EMA13, EMA21 et EMA50, et réalise l’ouverture par lots et la fermeture dynamique des positions en observant la relation croisée entre les moyennes mobiles de différentes périodes et la relation positionnelle entre les prix et les moyennes mobiles. La stratégie adopte un système de gestion de l’argent, divisant les positions en différentes proportions telles que 20 %, 40 %, etc., et créant ou réduisant progressivement les positions en fonction de différents signaux du marché.

Principe de stratégie

La logique fondamentale de la stratégie comprend trois conditions d’entrée principales et deux conditions de sortie :

  1. Les signaux d’ouverture d’une position incluent : ouvrir une position de 20 % lorsque l’EMA5 croise l’EMA8 ; ajouter une position de 20 % lorsque l’EMA5 croise l’EMA13 ; ajouter une position de 40 % lorsque l’EMA8 croise l’EMA21
  2. Système d’optimisation du retracement : ouvrez une position de 20 % lorsque le prix atteint l’EMA50 ; ajoutez 20 % lorsque le prix franchit à nouveau l’EMA50
  3. Signal de clôture : Lorsque l’EMA5 passe en dessous de l’EMA13, fermez 50 % de la position ; lorsque l’EMA8 passe en dessous de l’EMA21, fermez toutes les positions
  4. Contrôle des risques : Lorsque le prix, l’EMA5 et l’EMA8 sont inférieurs à l’EMA50 en même temps, effacez immédiatement toutes les positions

Avantages stratégiques

  1. Mécanisme de confirmation multiple : fournit des signaux de trading plus fiables grâce à plusieurs croisements de moyennes mobiles
  2. Gestion dynamique des positions : utilisez différents ratios de position en fonction des différentes forces de signal pour contrôler efficacement les risques
  3. Conception d’optimisation du retracement : utilisez l’EMA50 comme niveau de support pour l’achat de retracement afin d’améliorer la précision de l’entrée
  4. Mécanisme de liquidation flexible : adopter une stratégie de liquidation étape par étape pour contrôler le retracement tout en conservant les bénéfices
  5. Contrôle parfait des risques : définissez des conditions claires de stop loss pour éviter les pertes causées par de fortes baisses

Risque stratégique

  1. Hystérésis de la moyenne mobile : la moyenne mobile elle-même présente une hystérésis, ce qui peut entraîner un retard du signal
  2. Risque de marché volatil : de fréquentes fausses cassures peuvent se produire dans un marché latéral et volatil
  3. Risque de sur-négociation : des conditions d’ouverture multiples peuvent conduire à des transactions excessives
  4. Coûts d’exécution : les transactions fréquentes peuvent entraîner des frais de transaction plus élevés
  5. Risque systémique : il peut être trop tard pour clôturer des positions sur un marché volatil

Orientation de l’optimisation de la stratégie

  1. Présentation des filtres de tendance : vous pouvez ajouter des indicateurs de tendance tels que ADX pour exécuter des transactions uniquement lorsqu’il existe une tendance forte
  2. Optimiser la gestion des positions : ajuster dynamiquement la taille des positions en fonction de la volatilité
  3. Ajoutez la reconnaissance des modèles de prix : combinez les modèles de ligne K pour améliorer la précision de la saisie
  4. Améliorer le mécanisme de stop-profit : vous pouvez définir une ligne de stop-profit dynamique pour mieux verrouiller les bénéfices
  5. Ajoutez des indicateurs de sentiment du marché : introduisez le RSI et d’autres indicateurs pour filtrer l’état du marché

Résumer

Cette stratégie construit un système de trading relativement complet grâce à de multiples croisements de moyennes mobiles et à des systèmes d’optimisation de retracement. Ses avantages résident dans ses multiples mécanismes de confirmation et sa gestion flexible des positions, mais il présente également des défauts inhérents tels que le décalage de la moyenne mobile. En introduisant des méthodes d’optimisation telles que les filtres de tendance, la stabilité et la rentabilité de la stratégie peuvent être encore améliorées. Cette stratégie est adaptée aux marchés présentant des tendances évidentes et les traders doivent optimiser les paramètres en fonction des conditions réelles du marché.

Code source de la stratégie
/*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))