Fonction TrailingStop - discutable
5 réponses
Mike H.
Il y a 9 ans #112526
Lorsque j'ai visualisé la fonction TrailingStop dans l'éditeur, j'ai remarqué que le code était identique
pour le type d'ordre BUY et le type d'ordre SELL.
Je me demandais pourquoi mes règles TrailingStop pour mes TRADES COURTS ne s'activaient pas...
Voici comment l'assistant EA écrit la fonction : (j'ai souligné les segments en question) (remarquez les différents nombres magiques)
double getOrderTrailingStop(int orderMagicNumber, int orderType, double price) {
double valeur = 0 ;
if(orderMagicNumber == 2456) {
valeur = ( 11 * getPointCoef(orderMagicNumber)) ;
if(value > 0) {
if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
valeur = Offre - valeur ;
} else {
valeur = Demande + valeur ;
}
}
Il en va de même pour OrderBreakEven :
}
if(orderMagicNumber == 3798) {
valeur = ( 11 * getPointCoef(orderMagicNumber)) ;
if(value > 0) {
if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
valeur = Offre - valeur ;
} else {
valeur = Demande + valeur ;
}
}
}
return(NormalizeDouble(value, Digits)) ;
}
Idem pour OrderBreakEven :
double getOrderBreakEven(int orderMagicNumber, int orderType, double price) {
double valeur = 0 ;
if(orderMagicNumber == 2456) {
valeur = ( 7 * getPointCoef(orderMagicNumber)) ;
if(value > 0) {
if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
valeur = Offre - valeur ;
} else {
valeur = Demande + valeur ;
}
}
}
if(orderMagicNumber == 3798) {
valeur = ( 7 * getPointCoef(orderMagicNumber)) ;
if(value > 0) {
if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
valeur = Offre - valeur ;
} else {
valeur = Demande + valeur ;
}
}
}
return(NormalizeDouble(value, Digits)) ;
}
Cher Mark, plutôt que d'attendre une mise à jour de l'assistant EA, pourriez-vous me montrer comment effectuer les changements dans l'éditeur ?
? ?? Changer BUY en SELL et valeur = ? ???
Mike H.
Il y a 9 ans #126086
Cher Mark, je n'ai pas pu attendre, j'ai donc déjà effectué les changements nécessaires...
if(orderMagicNumber == 3978) {
valeur = ( 11 * getPointCoef(orderMagicNumber)) ;
if(value > 0) {
if(orderType == OP_SELL || orderType == OP_SELLSTOP || orderType == OP_SELLLIMIT) {
valeur = Demande + valeur ;
} else {
valeur = Offre - valeur ;
if(orderMagicNumber == 3798) {
valeur = ( 0 * getPointCoef(orderMagicNumber)) ;
if(value > 0) {
if(orderType == OP_SELL || orderType == OP_SELLSTOP || orderType == OP_SELLLIMIT) {
valeur = Demande + valeur ;
} else {
valeur = Offre - valeur ;
Les fonctions TrailingStop et BreakEven fonctionnent bien maintenant...
Plus tard, Mike H.
Mark Fric
Il y a 9 ans #126096
Bonjour Mike,
Je suis désolée, mais jeSi je ne me trompe pas, ces sont fonctionnellement équivalents.
if(orderType == OP_SELL || orderType == OP_SELLSTOP || orderType == OP_SELLLIMIT) {
valeur = Demande + valeur ;
} else {
valeur = Offre - valeur ;
}
est fonctionnellement identique à :
if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
valeur = Offre - valeur ;
} else {
valeur = Demande + valeur ;
}
La condition If reconnaît si l'ordre est un ordre d'achat ou de vente et utilise la valeur appropriée. Ce que vous avez fait, c'est que vous avez seulement modifié la vérification, mais cela devrait fonctionner exactement de la même manière.
Donc, si cela fonctionne soudainement, c'est peut-être dû à autre chose.
Marque
StratégieArchitecte de Quantités
Mike H.
Il y a 9 ans #126108
Bonjour Mark, Le premier message de ce sujet montre comment l'EA Wizard génère le code...
L'assistant EA génère le code suivant :
double getOrderTrailingStop(int orderMagicNumber, int orderType, double price) {
double valeur = 0 ;
if(orderMagicNumber == 2456) {
valeur = ( 11 * getPointCoef(orderMagicNumber)) ;
if(value > 0) {
if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
valeur = Offre - valeur ;
} else {
valeur = Demande + valeur ;
}
}
Il en va de même pour OrderBreakEven :
}
if(orderMagicNumber == 3798) {
valeur = ( 11 * getPointCoef(orderMagicNumber)) ;
if(value > 0) {
if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
valeur = Offre - valeur ;
} else {
valeur = Demande + valeur ;
}
}
}
return(NormalizeDouble(value, Digits)) ;
}
Ce que je vois, c'est qu'il n'y a pas de condition de vente... Les 2 IF sont identiques...
Ci-dessus, l'EA Wizard écrit le code >>> IFs identiques soulignés pour les différents nombres magiques...
Mark Fric
Il y a 9 ans #126147
Oui, mais la logique est correcte. Si l'ordre est un ordre d'achat, le prix est calculé d'une certaine manière, sinon (l'ordre doit être un ordre de vente) le prix est calculé d'une autre manière.
if(orderType == OP_BUY || orderType == OP_BUYSTOP || orderType == OP_BUYLIMIT) {
cela signifie qu'il s'agit d'un ordre d'achat
…
} else {
cela signifie qu'il s'agit d'un ordre de vente
…
}
Il ne semble pas y avoir d'erreur dans l'EA, qui a été testé des deux côtés.
Marque
StratégieArchitecte de Quantités
Mike H.
Il y a 9 ans #126157
Je vois et je comprends maintenant... Merci Mark ! !!
Affichage de 5 réponses de 1 à 5 (sur un total de 5)