Les ressources ont été chargées... Je charge...

Stratégie croisée dynamique de moyenne mobile exponentielle à plusieurs périodes avec système d'optimisation de la rétroaction

Auteur:ChaoZhang est là., Date: 2024-12-27 15h29 et 38 min
Les étiquettes:Le taux d'intérêt- Je vous en prie.SMAIndice de résistance

img

Résumé

Cette stratégie est un système de trading quantitatif basé sur plusieurs croisements de moyennes mobiles exponentielles (EMA) et l'optimisation du rebond. Elle utilise cinq EMA (EMA5, EMA8, EMA13, EMA21, et EMA50) pour observer les relations croisées entre les différentes moyennes de période et les relations prix-EMA pour mettre en œuvre la construction de positions par étapes et la fermeture dynamique des positions. La stratégie utilise un système de gestion du capital qui divise les positions en différentes proportions comme 20% et 40%, construisant ou réduisant progressivement les positions en fonction de divers signaux du marché.

Principes de stratégie

La logique de base comprend trois conditions principales d'entrée et deux conditions de sortie:

  1. Signaux d'entrée: ouvrir une position de 20% lorsque l'EMA5 dépasse l'EMA8; ajouter 20% lorsque l'EMA5 dépasse l'EMA13; ajouter 40% lorsque l'EMA8 dépasse l'EMA21
  2. Système d'optimisation du retour en arrière: ouvrir une position de 20% lorsque le prix atteint l'EMA50; ajouter 20% lorsque le prix dépasse l'EMA50
  3. Signaux de sortie: Fermer 50% des positions lorsque l'EMA5 dépasse l'EMA13; Fermer toutes les positions lorsque l'EMA8 dépasse l'EMA21
  4. Contrôle des risques: éliminer immédiatement toutes les positions lorsque le prix, l'EMA5 et l'EMA8 sont tous inférieurs à l'EMA50

Les avantages de la stratégie

  1. Mécanisme de confirmation multiple: fournit des signaux de négociation plus fiables grâce à plusieurs croisements EMA
  2. Gestion dynamique des positions: utilise différentes tailles de positions en fonction de la force du signal pour un contrôle efficace des risques
  3. Conception d'optimisation de la rétroaction: utilise l'EMA50 comme support pour les entrées de rétroaction, améliorant la précision de l'entrée
  4. Mécanisme de sortie flexible: adopte une stratégie de clôture progressive des positions afin de préserver les bénéfices tout en contrôlant le prélèvement
  5. Contrôle complet des risques: définit des conditions claires d'arrêt des pertes afin d'éviter les pertes dues à des tendances à la baisse importantes

Risques stratégiques

  1. Décalage EMA: les moyennes mobiles présentent un décalage inhérent qui peut entraîner des signaux retardés.
  2. Risque de marché latéral: peut générer de fréquentes fausses ruptures sur des marchés variés
  3. Risque de suréchange: des conditions d'entrée multiples peuvent entraîner une suréchange
  4. Coûts d'exécution: les transactions fréquentes peuvent entraîner des frais de commission élevés
  5. Risque systémique: éventuelle non-sortie des positions suffisamment rapidement sur des marchés très volatils

Directions d'optimisation

  1. Introduire des filtres de tendance: ajouter des indicateurs comme ADX pour exécuter des transactions uniquement dans des tendances fortes
  2. Optimiser la gestion des positions: ajuster dynamiquement les positions en fonction de la volatilité
  3. Incorporer la reconnaissance des modèles de prix: combiner les modèles de chandeliers pour améliorer la précision d'entrée
  4. Améliorer le mécanisme de prise de bénéfices: fixer des niveaux dynamiques de prise de bénéfices pour mieux assurer les gains
  5. Ajouter des indicateurs de sentiment du marché: introduire des indicateurs tels que le RSI pour filtrer les conditions du marché

Résumé

Cette stratégie construit un système de trading relativement complet grâce à de multiples croisements EMA et à l'optimisation de pullback. Ses atouts résident dans son mécanisme de confirmation multiple et sa gestion de position flexible, bien qu'elle ait des limites inhérentes comme le décalage EMA. La stabilité et la rentabilité de la stratégie peuvent être encore améliorées en introduisant des filtres de tendance et d'autres optimisations.


/*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))


Relationnée

Plus de