SL et PT avec atr pour MultiCharts
2 réponses
paix à l'est
Il y a 4 ans #254805
Bonjour, Mark,
Bien que ce problème ait été clôturé avec un statut corrigé, je souhaite discuter à nouveau des SL et PT avec ATR pour Multicharts. Je voudrais rediscuter des SL et PT avec ATR pour Multicharts.
https://roadmap.strategyquant.com/tasks/sq4_5100
Le code de MC est maintenant comme ça.
———-
if(MarketPosition > 0) then begin
LongSLPlaced = false ;
Si BarsSinceEntry = 0 alors begin
IntLongSL = 0 ;
IntLongTS = 0 ;
fin ;
// StopLoss
IntLongSL = Round2Fraction(EntryPrice - (StopLossCoef * SQ_ATR(20)[1])) ;
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true) ;
….
————-
Dans le code actuel, la valeur de l'ATR change à chaque barre après l'entrée. Les ratios SL, PT et RR changeront également, bien que ce changement ne soit pas trop important. Mais il est également nuisible.
Dans l'hypothèse d'une position longue, si la volatilité diminue et que le marché baisse lentement, le stop loss sera élargi.
La plupart des stratégies de MC fonctionnent par barre, et mettent à jour les signaux et les actions après la fermeture de la barre. Ainsi, lorsque l'ordre d'entrée stop est déclenché, il utilise la valeur ATR précédente (barre de signal), et non celle de la barre actuelle (barre d'entrée).
Ce n'est donc pas un problème pour le calcul de MM. Il peut et doit utiliser la valeur fixe de l'ATR. Dans le code de Mc, cela ressemble à ceci,
if(MarketPosition > 0) then begin
LongSLPlaced = false ;
Si BarsSinceEntry = 0 alors begin
IntLongSL = prix d'entrée - AtrSLmulti * valeur ATR[1] ;
IntLongPT = prix d'entrée + AtrPTmulti * valeur ATR[1] ;
fin ;
Cela sera tout à fait cohérent avec la valeur ATR utilisée par le calcul MM lorsque la condition d'entrée est vraie.
Cela n'a rien à voir avec les variables globales. Cela fonctionne bien dans MC. Et je trouve que le code généré par d'autres logiciels, définit également le SL dans le bloc de code if (BarsSinceEntry = 0)
Merci de reconsidérer cette approche.
tomas262
Il y a 4 ans #254893
Bonjour,
Actuellement, il doit en être ainsi. Cela signifie que le SL doit être modifié en fonction de la valeur de l'ATR. A l'avenir, nous pourrions modifier cela, mais pour l'instant, en ce qui concerne le fonctionnement de TS, nous préférons le laisser fonctionner de cette manière.
paix à l'est
Il y a 4 ans #254939
Une autre raison explique la nécessité d'ajuster la mise en œuvre du stop loss et du profit initiaux.
La stratégie utilise des niveaux d'indicateurs comme stop loss. Le stop loss initial devient un stop loss suiveur ou la condition de sortie de l'indicateur.
Cela affaiblira l'effet des règles de sortie (indicateurs conditionnant la sortie) ou de la méthode du stop suiveur, ou entraînera une confusion logique.
//--------
// Ordres de sortie (SL, PT, Trailing) pour la règle : Entrée longue
//--------
if(MarketPosition > 0) then begin
LongSLPlaced = false ;
Si BarsSinceEntry = 0 alors begin
IntLongSL = 0 ;
IntLongTS = 0 ;
fin ;
// StopLoss
IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]) ;
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true) ;
Sell("LongSL") next bar at IntLongSL stop ;
LongSLPlaced = true ;
...
Comme le montre la figure, si le stop loss initial suit la bonne logique, le stop loss intermédiaire ne devrait pas se produire.
Lorsque je modifie les codes dans MC. La stratégie fonctionne logiquement. Le module trailing stop jouera le rôle qu'il doit jouer.
if(MarketPosition > 0) then begin
LongSLPlaced = false ;
Si BarsSinceEntry = 0 alors begin
//IntLongSL = 0 ;
IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]) ;
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true) ;
IntLongTS = 0 ;
fin ;
// StopLoss
//IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]) ;
//IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true) ;
Sell("LongSL") next bar at IntLongSL stop ;
LongSLPlaced = true ;
…
Affichage de 2 réponses de 1 à 2 (sur un total de 2)