Stratégie de suivi de moyennes mobiles multiples et système de gestion de position dynamique

EMA ATR
Date de création: 2025-02-27 10:20:18 Dernière modification: 2025-02-27 10:20:18
Copier: 0 Nombre de clics: 478
2
Suivre
319
Abonnés

Stratégie de suivi de moyennes mobiles multiples et système de gestion de position dynamique Stratégie de suivi de moyennes mobiles multiples et système de gestion de position dynamique

Aperçu

Le système de gestion des positions dynamiques est une stratégie de négociation quantitative basée sur des moyennes mobiles multifonctionnelles (EMA). La stratégie construit un système de négociation complet en surveillant cinq cycles différents (EMA: 12, 144, 169, 576 et 676) pour déterminer la tendance, identifier les signaux d’entrée, construire des lots, arrêter les pertes dynamiques et arrêter les pertes dynamiques. La stratégie prend en charge non seulement les opérations de prise de position répétées, mais peut créer jusqu’à 5 positions de négociation, et a des mesures de contrôle des risques indépendantes pour chaque position.

Principe de stratégie

La logique centrale de la stratégie est basée sur la relation de position entre plusieurs indicateurs EMA et l’interaction des prix avec les EMA clés:

  1. Le mécanisme de jugement des tendances:

    • Les conditions de la tendance à plusieurs têtes sont les suivantes: EMA12 > EMA144 > EMA169 > EMA576 > EMA676
    • Les conditions de la tendance à la hausse sont les suivantes: EMA12 < EMA144 < EMA169 < EMA576 < EMA676
  2. Signaux d’entrée:

    • Entrée à plusieurs têtes: basée sur la satisfaction d’une tendance à plusieurs têtes, lorsque le bas dépasse l’EMA144 et que le prix de clôture est au-dessus de l’EMA169
    • Entrée à vide: basée sur la satisfaction de la tendance à vide, lorsque le sommet franchit l’EMA144 et que le prix de clôture est en dessous de l’EMA169
  3. Construction par lots:

    • Première mise en place: correspondant au signal d’entrée et sans position
    • Deuxième position: répondant au signal d’entrée et détenant actuellement une position
    • Trois à cinq emplacements: plus de 50 lignes K sont nécessaires pour satisfaire le signal d’entrée
  4. Arrêt dynamique de l’arrêt de perte:

    • Chaque position a un point de rupture dynamique basé sur le prix minimum (plusieurs têtes) ou le prix maximum (bure têtes) des 12 lignes K au moment de la création de la position.
    • Utilisation d’une stratégie d’arrêt symétrique avec un prix cible de “prix d’entrée + (prix d’entrée - prix d’arrêt) “
    • Profit par lots: chaque position est libérée à 50% lorsque son point d’arrêt est atteint, et le reste est conservé jusqu’à ce qu’elle atteigne son point d’arrêt
  5. Contrôle du risque global:

    • Lorsque les indicateurs EMA12 et EMA144 sont croisés ((EMA12 tombe en dessous de EMA144 dans une tendance à plusieurs niveaux, ou EMA12 dépasse EMA144 dans une tendance à la hausse), la position est totalement nulle

Dans l’ensemble, la stratégie établit la direction de la tendance du marché par l’alignement de plusieurs EMA, détermine le moment d’entrée par l’interaction du prix avec l’EMA144 et définit un point d’arrêt dynamique par la zone de fluctuation des prix à court terme, tout en optimisant la gestion des fonds par la constitution de lots et la répartition des bénéfices, ce qui aboutit à un système de négociation complet.

Avantages stratégiques

  1. Systématisation des jugements de tendance:

    • Système de détection des tendances à l’aide d’un triangle de cinq EMA de différents cycles pour réduire le risque de fausse rupture
    • La composition de l’indicateur EMA fournit une mesure quantitative de la force et de la faiblesse de la tendance, ce qui rend les décisions de négociation plus objectives.
  2. Le mécanisme précis d’admission:

    • Le comportement croisé du prix et de la ligne moyenne comme condition de déclenchement de l’entrée, améliorant l’efficacité de l’entrée
    • Exige que les signaux d’entrée soient confirmés dans les 12 lignes K, ce qui réduit le risque de transaction en retard
  3. Une gestion intelligente de l’argent:

    • Construction par lots de jusqu’à 5 emplacements, adaptés à différents stades de développement du marché
    • La construction ultérieure doit respecter un intervalle de temps minimum (environ 50 lignes K) pour éviter une construction excessive en peu de temps.
  4. Des stratégies de profit flexibles:

    • Prise de position avantageuse en fonction de la dynamique du prix d’entrée et du point d’arrêt, en utilisant le principe de la “partie symétrique”
    • Les bénéfices en lots (positions à 50%), qui bloquent une partie des bénéfices tout en conservant une marge de profit
  5. Des contrôles rigoureux des risques:

    • Chaque position définit un point d’arrêt indépendant, basé sur la gamme de fluctuations récentes (ligne K 12)
    • Signal de retour de tendance (cross-over entre EMA12 et EMA144) déclenche la clôture complète et le stop loss en temps opportun
  6. Très adaptable:

    • Prise en charge des transactions à plusieurs et à vide, adaptée à divers environnements de marché
    • Adapté à différentes variétés et périodes en ajustant des paramètres (comme le nombre de lignes ATR, le nombre de lignes K)

Risque stratégique

  1. Risque de décalage moyen:

    • Les EMA ont une certaine latence, ce qui peut entraîner une mauvaise entrée ou sortie en cas de forte volatilité.
    • Méthode d’atténuation: la combinaison d’indicateurs de dynamique à court terme peut être envisagée comme aide pour améliorer la vitesse de réaction du système
  2. La pression financière pour construire des entrepôts par lots:

    • Une stratégie de mise en place de plus de 5 positions peut conduire à une concentration excessive des fonds.
    • Méthode d’atténuation: La proportion de fonds pour chaque installation devrait être raisonnablement établie en fonction du montant total de fonds, afin d’assurer une répartition équilibrée des fonds
  3. Limitations des paramètres de cycle fixe:

    • Les périodes EMA du code ((12, 144, 169, 576, 676) sont des valeurs fixes et peuvent ne pas s’appliquer à tous les environnements de marché
    • Méthodes d’atténuation: introduction d’une méthode de calcul du cycle d’adaptation, ou mise en place d’un processus d’optimisation des paramètres spécifique aux différentes variétés
  4. Problème potentiel de l’arrêt de la symétrie:

    • Dans un marché en forte tendance, les stop symétriques peuvent profiter prématurément et manquer une plus grande marge de profit.
    • Méthode d’atténuation: il peut être envisagé de mettre en place un stop loss de suivi pour les 50% restants de la position afin de s’adapter à une tendance forte
  5. Les conditions d’entrée sont trop strictes:

    • Une combinaison de conditions multiples ((alignement moyen + croisement des prix + confirmation de clôture) peut entraîner la perte d’une partie du signal valide
    • Méthode d’atténuation: Mise en place de mécanismes d’entrée de choix adaptés aux différentes phases du marché, améliorant la sensibilité de la capture du signal
  6. Risques liés à la dépendance des données:

    • Les stratégies dépendant de longues périodes d’EMA (comme 576, 676) ont besoin de données historiques suffisamment longues pour fonctionner efficacement.
    • Méthode d’atténuation: dans le cas d’une insuffisance de données, il peut être envisagé d’utiliser des indicateurs alternatifs ou d’ajuster la méthode de calcul de l’EMA à long terme

Orientation de l’optimisation de la stratégie

  1. Présentation du mécanisme de paramètres adaptatifs:

    • Modifier les périodes d’EMA fixes ((12, 144, 169, 576, 676) en paramètres d’adaptation basés sur la volatilité du marché
    • Raison d’optimisation: Les cycles optimaux d’EMA varient considérablement selon les environnements de marché, et les mécanismes d’adaptation améliorent l’universalité des stratégies
  2. Filtrage amélioré des signaux d’entrée:

    • La combinaison d’indicateurs tels que le volume d’échanges, la volatilité du marché (comme l’ATR) et d’autres pour ajouter des conditions de confirmation supplémentaires aux signaux d’entrée
    • Raison de l’optimisation: le signal de croix purement homogène est vulnérable à l’interférence du bruit du marché, les conditions de filtrage supplémentaires améliorent la qualité du signal
  3. Améliorer le système de gestion des fonds:

    • Proportion de fonds investis à chaque création de position, ajustée en fonction du capital total du compte et de la volatilité du marché
    • Raison de l’optimisation: La part des fonds alloués à la stratégie actuelle est fixe et ne peut pas être automatiquement ajustée en fonction du niveau de risque, l’introduction d’une gestion dynamique des fonds améliore l’efficacité de l’utilisation des fonds
  4. Optimisation des mécanismes d’arrêt de frein:

    • Stratégies de stop-loss différenciées conçues pour différents emplacements de stockage, telles que le stop-loss à proportion fixe pour la première mise en service et le stop-loss suivi pour la suite de la construction
    • Raison de l’optimisation: les stratégies de stop-loss unifiées sont difficiles à adapter aux besoins de différentes phases du marché, tandis que les stratégies différenciées permettent une plus grande flexibilité pour répondre aux changements du marché
  5. Ajouter un filtre de temps:

    • Introduire des filtres de temps de négociation pour éviter les périodes de forte volatilité (comme avant ou après la clôture) ou pendant la publication de données importantes
    • Raison de l’optimisation: les fluctuations du marché au cours d’une période donnée ont tendance à manquer de direction, l’ajout de filtres temporels permet d’éviter les transactions inutiles
  6. Ajouter une évaluation de la force de la tendance:

    • Développer un indicateur de force de tendance, permettant de négocier uniquement lorsque la force de tendance atteint une barre
    • Raison de l’optimisation: les stratégies actuelles produisent des signaux même dans des environnements de tendance faible, l’introduction d’une évaluation de la force de la tendance peut réduire les faux signaux dans les marchés oscillante
  7. Construire une synergie à cycles multiples:

    • Les jugements de tendance associés à des périodes de temps plus longues servent de filtre de direction de la transaction
    • Raison de l’optimisation: les systèmes de négociation à cycle unique sont vulnérables aux perturbations à court terme et la synchronisation à cycles multiples améliore la stabilité du système

Résumer

La stratégie de suivi des lignes de moyenne multiples et le système de gestion des positions dynamiques est une stratégie de négociation quantifiée structurée et logiquement claire. La stratégie établit un cadre de jugement de tendance par une combinaison de plusieurs EMA, détermine le moment d’entrée par l’interaction du prix avec les lignes de moyenne critiques et réalise une gestion de fonds et un contrôle des risques sophistiqués par la constitution en lots de positions et des arrêts de perte dynamiques. L’avantage de la stratégie réside dans la détermination systématique des tendances, un mécanisme d’entrée précis, une gestion de fonds intelligente et un contrôle des risques rigoureux, ce qui lui donne une certaine adaptabilité dans différents environnements de marché.

Cependant, la stratégie présente également des risques tels que le retard de la ligne moyenne, la limitation des paramètres fixes et la pression de la gestion des fonds. Pour améliorer encore l’efficacité de la stratégie, des orientations d’optimisation telles que l’introduction de mécanismes de paramètres adaptatifs, le renforcement du filtrage des signaux, l’amélioration du système de gestion des fonds, l’optimisation des mécanismes de stop-loss et la construction d’un système de synchronisation à cycles multiples peuvent être envisagées.

Dans l’ensemble, la stratégie fournit un cadre opérationnel robuste pour le trading quantifié grâce à un suivi de tendance équilibré et une maîtrise des risques. Grâce à une optimisation continue et à un ajustement des paramètres pour un environnement de marché spécifique, la stratégie est susceptible d’obtenir des performances stables dans les transactions réelles.

Code source de la stratégie
/*backtest
start: 2024-09-08 00:00:00
end: 2024-12-08 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("专业级交易系统", overlay=false, close_entries_rule = "ANY")
x1 = input.float(1.5,"atr倍数",step=0.1)
x2 = input.int(50,"k线数量",step=1)
s1 = strategy.opentrades.entry_price(0)
s2 = strategy.opentrades.entry_price(1)
s3 = strategy.opentrades.entry_price(2)
s4 = strategy.opentrades.entry_price(3)
s5 = strategy.opentrades.entry_price(4)
s6 = strategy.opentrades.entry_price(5)
s7 = strategy.opentrades.entry_price(6)
s8 = strategy.opentrades.entry_price(7)
s9 = strategy.opentrades.entry_price(8)
c = strategy.position_size,o = strategy.opentrades
ema12_len = input.int(12,"EMA12长度")
ema144_len = input.int(144, "EMA144长度")
ema169_len = input.int(169,"EMA169长度")
ema576_len = input.int(376, "EMA576长度")
ema676_len = input.int(576,"EMA676长度")
ema12 = ta.ema(close,ema12_len)
ema144 = ta.ema(close, ema144_len)
ema169 = ta.ema(close, ema169_len)
ema576 = ta.ema(close, ema576_len)
ema676 = ta.ema(close, ema676_len)
e3 = ta.valuewhen(o ==2 and o[1] == 1 and c > 0,bar_index,0)
e4 = ta.valuewhen(o ==3 and o[1] == 2 and c > 0,bar_index,0)
e5 = ta.valuewhen(o ==4 and o[1] == 3 and c > 0,bar_index,0)
le1 = false
le1 := c <= 0 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 ? false : le1[1]
le11 = false
le11 := le1 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144,bar_index,0) < 12 ? true : false
le2 = false
le2 := c > 0 and o == 1 and o[1] == 1 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 1? false : le2[1]
le21 = false
le21 := le2 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
le3 = false
le3 := c > 0 and o == 2 and o[1] == 2 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 2? false : le3[1]
le31 = false
le31 := le3 and bar_index - e3 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
le4 = false
le4 := c > 0 and o == 3 and o[1] == 3 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 3? false : le4[1]
le41 = false
le41 := le4 and bar_index - e4 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
le5 = false
le5 := c > 0 and o == 4 and o[1] == 4 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 4? false : le5[1]
le51 = false
le51 := le5 and bar_index - e5 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
d1 = ta.valuewhen(o == 1 and o[1] == 0 and c > 0,ta.lowest(12),0)
d2 = ta.valuewhen(o == 2 and o[1] == 1 and c > 0,ta.lowest(12),0)
d3 = ta.valuewhen(o == 3 and o[1] == 2 and c > 0,ta.lowest(12),0)
d4 = ta.valuewhen(o == 4 and o[1] == 3 and c > 0,ta.lowest(12),0)
d5 = ta.valuewhen(o == 5 and o[1] == 4 and c > 0,ta.lowest(12),0)
if le11 and close > ema12 and o == 0
    strategy.order("l1",strategy.long,comment="第一单")
if c > 0 and o > 0
    strategy.exit("出场1","l1",limit = 2*s1- d1,stop= d1,qty_percent = 50)
    strategy.exit("出场11","l1",stop= d1)

if le21 and close > ema12 and o == 1
    strategy.order("l2",strategy.long,comment="第二单")
if c > 0 and o == 2
    strategy.exit("出场2","l2",limit = 2*s2- d2,stop= d2,qty_percent = 50)
    strategy.exit("出场21","l2",stop= d2)

if le31 and close > ema12 and o == 2
    strategy.order("l3",strategy.long,comment="第三单")
if c > 0 and o == 3
    strategy.exit("出场3","l3",limit = 2*s3- d3,stop= d3,qty_percent = 50)
    strategy.exit("出场31","l3",stop= d3)

if le41 and close > ema12 and o == 3
    strategy.order("l4",strategy.long,comment="第四单")
if c > 0 and o == 4 
    strategy.exit("出场4","l4",limit = 2*s4- d4,stop= d4,qty_percent = 50)
    strategy.exit("出场41","l4",stop= d4)

if le51 and close > ema12 and o == 4
    strategy.order("l5",strategy.long,comment="第五单")
if c > 0 and o == 5
    strategy.exit("出场5","l5",limit = 2*s5- d5,stop= d5,qty_percent = 50)
    strategy.exit("出场51","l5",stop= d5)
bgcolor(le2?color.red:na)
if c > 0 and ema12 < ema144
    strategy.close_all("跌破均线全部出场")

//做空
es3 = ta.valuewhen(o ==2 and o[1] == 1 and c < 0,bar_index,0)
es4 = ta.valuewhen(o ==3 and o[1] == 2 and c < 0,bar_index,0)
es5 = ta.valuewhen(o ==4 and o[1] == 3 and c < 0,bar_index,0)
se1 = false
se1 := c >= 0 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 ? false : se1[1]
se11 = false
se11 := se1 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144,bar_index,0) < 12 ? true : false
se2 = false
se2 := c < 0 and o == 1 and o[1] == 1 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 1? false : se2[1]
se21 = false
se21 := se2 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
se3 = false
se3 := c < 0 and o == 2 and o[1] == 2 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 2? false : se3[1]
se31 = false
se31 := se3 and bar_index - es3 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
se4 = false
se4 := c < 0 and o == 3 and o[1] == 3 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 3? false : se4[1]
se41 = false
se41 := se4 and bar_index - es4 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
se5 = false
se5 := c < 0 and o == 4 and o[1] == 4 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 4? false : se5[1]
se51 = false
se51 := se5 and bar_index - es5 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
ds1 = ta.valuewhen(o == 1 and o[1] == 0 and c < 0 ,ta.highest(12),0)
ds2 = ta.valuewhen(o == 2 and o[1] == 1 and c < 0,ta.highest(12),0)
ds3 = ta.valuewhen(o == 3 and o[1] == 2 and c < 0,ta.highest(12),0)
ds4 = ta.valuewhen(o == 4 and o[1] == 3 and c < 0,ta.highest(12),0)
ds5 = ta.valuewhen(o == 5 and o[1] == 4 and c < 0,ta.highest(12),0)
if se11 and close < ema12 and o == 0
    strategy.order("s1",strategy.short,comment="第一单")
if c < 0 and o > 0
    strategy.exit("出场1","s1",limit = 2*s1- ds1,stop= ds1,qty_percent = 50)
    strategy.exit("出场11","s1",stop= ds1)

if se21 and close < ema12 and o == 1
    strategy.order("s2",strategy.short,comment="第二单")
if c < 0 and o == 2
    strategy.exit("出场2","s2",limit = 2*s2- ds2,stop= ds2,qty_percent = 50)
    strategy.exit("出场21","s2",stop= ds2)

if se31 and close < ema12 and o == 2
    strategy.order("s3",strategy.short,comment="第三单")
if c < 0 and o == 3
    strategy.exit("出场3","s3",limit = 2*s3- ds3,stop= ds3,qty_percent = 50)
    strategy.exit("出场31","s3",stop= ds3)

if se41 and close < ema12 and o == 3
    strategy.order("s4",strategy.short,comment="第四单")
if c < 0 and o == 4 
    strategy.exit("出场4","s4",limit = 2*s4- ds4,stop= ds4,qty_percent = 50)
    strategy.exit("出场41","s4",stop= ds4)

if se51 and close < ema12 and o == 4
    strategy.order("s5",strategy.short,comment="第五单")
if c < 0 and o == 5
    strategy.exit("出场5","s5",limit = 2*s5- ds5,stop= ds5,qty_percent = 50)
    strategy.exit("出场51","s5",stop= ds5)
bgcolor(se1?color.red:na)
if c < 0 and ema12 > ema144
    strategy.close_all("跌破均线全部出场")
kaiguan = input.bool(true,"均线开关")
plot(ema12,force_overlay=true)
plot(ema144, "EMA144", color=color.new(#008000, 0),force_overlay=true)
plot(ema169, "EMA169", color=color.red,force_overlay=true)
plot(kaiguan?ema576:na,color=color.yellow,force_overlay=true)
plot(kaiguan?ema676:na,color=color.yellow,force_overlay=true)
//plotshape(series=entrySignal,title="买入信号",location=location.belowbar,color=color.new(color.green, 0),style=shape.labelup,text="BUY",textcolor=color.new(color.white, 0))