Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Si le prix monte de 600 points depuis OrderOpenprice(), = StartTraillingStop (200) + 8(xai)*50
le code est ici :
mais le code fera tous les xai de 0 à 8, disons que le code est à xai = 4 ; est-ce que cette condition est vraie ?
if ( ( ( OrderClosePrice() - OrderOpenPrice() ) / Figure ) >= ( StartTrailingStop + ( CummulativeValue * xai ) ) )
oui alors le SL sera fixé à : StartTraillinStop (200) + 4(xai)*50 ( en descendant à partir du précédent )
puis xai 5, le SL sera fixé à : StartTraillinStop (200) + 5(xai)*50
et ainsi de suite, donc il n'est pas possible de mettre un break une fois que le SL est fixé ;
juniorlcq Votre code est beaucoup plus facile à lire maintenant que vous l'avez reformaté. Je l'ai reformaté un peu plus pour le rendre plus petit à poster, j'ai mis en évidence les problèmes possibles. Je pense que tu as peut-être un problème de "double == calculated double" qui empêche ton code d'exécuter certaines pistes. Avez-vous déjà lu le fil de discussion à propos de can price != price ?
Je me méfie surtout du 2ème et du 4ème car ce sont des calculs plus compliqués.
Mettez des instructions Print() après ces calculs pour voir s'ils font vraiment == ou pas.
L'erreur connue sous le nom d'erreur de virgule flottante pourrait les rendre != même quand il semble qu'ils devraient être ==.
== n'est vraiment sûr à 100% qu'avec des nombres entiers, vous pouvez donc changer le == en <= ou >= comme test.
Aussi comme une note latérale : Votre code serait beaucoup plus efficace si vous appelez OrderOpenPrice(), OrderStopLoss(), OrderClosePrice() une fois au début de votre boucle OrderSelect() et assigner leurs valeurs à des vars locales à utiliser dans le reste du code. Les variables locales sont beaucoup plus rapides d'accès que les appels de fonction. Vous devez donc éviter de faire des appels de fonction répétés pour le même résultat... En règle générale, plus vous avez d'écriture rose dans votre code, plus les performances de l'EA seront lentes.
Je comprends, je n'arrive pas à le faire fonctionner, celui-ci peut fonctionner avec l'ordre d'achat, les SL descendent comme expliqué :
Ohhhhhhh je ne connaissais pas cela . Merci WHRoeder :) .
Alors, cela signifie-t-il que ,
disons que OrdersTotal() == 3 , avec le compte à rebours de la boucle for ( int x = ( OrdersTotal() - 1 ) ; x >= 0 ; x-- ) x enregistrera la première valeur comme 2, puis continuera la boucle for à partir de 2 sans repasser par OrdersTotal() ? ?
juniorlcq Votre code est beaucoup plus facile à lire maintenant que vous l'avez reformaté. Je l'ai reformaté un peu plus pour le rendre plus petit à poster, j'ai mis en évidence les problèmes possibles. Je pense que tu as peut-être un problème de "double == calculated double" qui empêche ton code d'exécuter certaines pistes. Avez-vous déjà lu le fil de discussion à propos de can price != price ?
Je me méfie surtout du 2ème et du 4ème car ce sont des calculs plus compliqués.
Mettez des instructions Print() après ces calculs pour voir s'ils font vraiment == ou pas.
L'erreur connue sous le nom d'erreur de virgule flottante pourrait les rendre != même quand il semble qu'ils devraient être ==.
== n'est vraiment sûr à 100% qu'avec des nombres entiers, vous pouvez donc changer le == en <= ou >= comme test.
Non, je n'ai pas lu ce fil avant. Je viens juste de le faire.
Ce que vous avez suggéré semble logique. D'un autre côté, il arrive que les lignes tracées sur MT4 sur les propriétés du prix n'indiquent pas vraiment un prix à 5 chiffres, mais parfois quelque chose de plus que cela.
Mais voici un de mes trades flottants sur le compte précédent, je l'ai imprimé pour voir comment était le double avec un simple codage d'impression. Bizarre MQL4 je suppose @.@ ?
Je suis toujours en train de penser comment modifier la partie double == double .....
Par ailleurs, votre code serait beaucoup plus efficace si vous appeliez OrderOpenPrice(), OrderStopLoss(), OrderClosePrice() une fois au début de votre boucle OrderSelect() et si vous assigniez leurs valeurs à des variables locales à utiliser dans le reste du code. Les variables locales sont beaucoup plus rapides d'accès que les appels de fonction. Vous devez donc éviter de faire des appels de fonction répétés pour le même résultat... En règle générale, plus vous avez d'écriture rose dans votre code, plus les performances de l'EA seront lentes.
Ohhh je ne savais pas qu'il y aurait une énorme différence dans la vitesse d'exécution, merci pour le guide SDC. Je vais modifier le code selon votre guide après que l'arrêt de la piste ait commencé à fonctionner.
Essayez de remplacer le dernier bloc de code par cette version de débogage. Vérifiez mon code, je ne l'ai pas compilé.
Cela pourrait révéler quelque chose, vous pourriez faire quelque chose de similaire avec les autres conditions == aussi.
Essayez de remplacer le dernier bloc de code par cette version de débogage. Vous pouvez faire quelque chose de similaire avec le xa
Cela pourrait révéler quelque chose, vous pourriez faire quelque chose de similaire avec les autres conditions == aussi.
Oui, le problème est apparu, il s'agit du " problème double == double calculé ". Merci d'avoir signalé le problème à SDC.
Merci ffoorr d'avoir également signalé le même problème plus tôt, mais je ne l'ai pas modifié de la bonne manière et j'ai pensé que ce n'était pas le problème.
J'ai une question et j'ai besoin d'une suggestion, pour les 2ème et 3ème if dans la 2ème boucle for, est-il préférable de mettre une instruction " entre " ? Comme OrderStopLoss() >= x + 1 && x - 1 ? ? Ou devrais-je simplement utiliser >= ou <= ? ??
J'espère que WHR ne lira pas ceci, il va faire une crise, mais je vais vous dire d'essayer NormalizeDouble() .... cela devrait rendre ces conditions égales quand elles sont supposées l'être. Il ne devrait pas être nécessaire de le faire aussi du côté de l'OrderStopLoss(), mais s'il n'y a toujours pas égalité quand il le faut, vous pouvez essayer de le faire des deux côtés de la condition.....