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
En gros, j'ai placé deux ordres en attente à un moment précis, à savoir 23:00 GMT+2 je pense. Un des ordres en attente est un stop de vente et l'autre un stop d'achat, les deux ordres sont à une distance égale de l'ouverture de la bougie de 23:00, dans ce cas 14 pips. Les deux ordres ont un TakeProfit de 28 pips (dans ce cas) et un StopLoss de 55 pips.
Maintenant, lorsque les deux ordres sont exécutés (essentiellement en montant et en descendant de 14 pips par rapport au prix d'ouverture à la bougie de 23h00 avant que les ordres n'expirent), je veux que les deux ordres aient leurs take profits augmentés, par exemple, de 20 pips. Leur nouveau take profit est donc de 58 pips dans ce cas. Le stop loss, quant à lui, doit rester inchangé. En fait, ce que j'essaie de faire, c'est une sorte de couverture.
Si deux positions sont ouvertes, il est probable que le prix évolue dans une direction, suffisamment pour annuler les pertes si les prises de bénéfices des deux positions sont augmentées. Pour obtenir un bénéfice, il suffit qu'une seule transaction s'ouvre et atteigne le take profit ou que les deux transactions s'ouvrent et atteignent les take profits sans aller loin dans une direction.
J'espère que c'est clair, si ce n'est pas le cas, je vais fournir une image qui devrait être plus claire.
Je faisais référence à votre post directement précédent
Voici le code révisé pour l'ensemble de l'EA :
J'espère que c'est clair, si ce n'est pas le cas, je vais fournir une image qui devrait être plus claire.
C'est clair, merci.
Donc vous voulez juste modifier ces ordres une fois... alors la réponse est simple. Vous devez vérifier la barre de 23:00 et déterminer les TP auxquels les ordres auraient dû être ouverts ... si les ordres sont au même TP alors ils doivent être modifiés, s'ils ne sont pas au même TP alors ils ont déjà été modifiés et n'ont pas besoin d'être modifiés à nouveau ... simple.
C'est clair, merci.
Vous voulez donc modifier ces ordres une seule fois... alors la réponse est simple. Vous devez vérifier la barre de 23:00 et déterminer les TPs auxquels les ordres auraient dû être ouverts ... si les ordres sont au même TP, ils doivent être modifiés, s'ils ne sont pas au même TP, ils ont déjà été modifiés et n'ont pas besoin de l'être à nouveau ... simple.
Donc, essentiellement, s'il y a deux transactions (même symbole et même numéro magique), l'EA devrait vérifier les prises de bénéfices des transactions ouvertes par rapport aux ordres en attente précédemment existants (qui sont maintenant exécutés) et s'ils sont identiques, ils devraient être modifiés, et une fois qu'il aura bouclé, il vérifiera à nouveau et constatera qu'ils ne sont pas identiques et ne modifiera donc plus les transactions ?
1. La modification et la vérification ne devraient avoir lieu que lorsque deux transactions sont ouvertes. Comment dois-je m'y prendre ? Dois-je ajouter au code que j'ai déjà ou recommencer ?
2. Donc, essentiellement, s'il y a deux transactions (même symbole et même numéro magique), l'EA devrait vérifier les prises de bénéfices des transactions ouvertes par rapport aux ordres en attente précédemment existants (qui sont maintenant exécutés) et s'ils sont identiques, ils devraient être modifiés, et une fois qu'il aura bouclé, il vérifiera à nouveau et constatera qu'ils ne sont pas identiques et ne modifiera donc plus les transactions ?
1. Bouclez à travers les ordres ouverts, vérifiez le symbole, le numéro magique, quand vous avez une correspondance qui n'est pas un type d'ordre en attente, incrémentez un compteur... quand vous avez fini de vérifier les ordres, si vous avez compté 2, alors vous avez 2 ordres ouverts pour le bon symbole et le bon numéro magique... donc maintenant vous pouvez les modifier... voir 2.
2. Non, vous ne pouvez pas voir le TP des ordres en attente s'ils ont été activés et ne sont plus en attente. L'EA doit vérifier la barre de 23:00 et déterminer quels auraient été les TP originaux... puis les comparer aux TP des 2 ordres ouverts... à partir de cette information, la décision peut être prise de modifier ou non.
1. Bouclez à travers les ordres ouverts, vérifiez le symbole, le numéro magique, quand vous avez une correspondance qui n'est pas un type d'ordre en attente, incrémentez un compteur... quand vous avez fini de vérifier les ordres, si vous avez compté 2, alors vous avez 2 ordres ouverts pour le bon symbole et le bon numéro magique... donc maintenant vous pouvez les modifier... voir 2.
2. Non, vous ne pouvez pas voir le TP des ordres en attente s'ils ont été activés et ne sont plus en attente. L'EA doit vérifier la barre de 23:00 et calculer ce qu'auraient été les TPs originaux ... puis les comparer aux TPs des 2 ordres ouverts ... à partir de cette information, la décision peut être prise de modifier ou non.
Ah je vois, je crois que c'est ce que j'ai essayé de faire depuis le début. Pour l'instant, un des ordres est modifié (en particulier l'ordre d'achat qui est l'ordre 2 dans mon test) mais il continue à être modifié, dois-je utiliser 'break' pour l'empêcher de se répéter ? De plus, comment puis-je compter et modifier les ordres ouverts uniquement lorsqu'il y en a deux d'ouverts ? J'ai essayé d'utiliser OrdersTotal() pour cela mais cela ne fonctionne pas, je ne pense pas avoir besoin de faire deux morceaux de code séparés pour chaque ordre, n'est-ce pas ?
Seuls les ordres ouverts pairs sont modifiés et comme je l'ai dit, ils sont modifiés à plusieurs reprises, j'ai essayé plusieurs combinaisons pour OrderSelect() mais je n'arrive toujours pas à comprendre, comme je l'ai dit, je suis un noob total à MQL et cette EA est presque terminée donc je voudrais juste la terminer. J'ai lu cecihttps://book.mql4.com/trading/ordermodify. Est-ce que cela a quelque chose à voir avec ma situation ? C'est pour un stop loss mais j'en ai besoin pour un take profit essentiellement.
Qu'est-ce que je fais de mal ici ?
Comment puis-je vérifier si le TP est le même que celui de la bougie de 23h00 ? Serait-ce nécessaire en tant que tel, puisque tant que les ordres ouverts sont modifiés lorsque 2 d'entre eux sont là, cela aurait le même effet ? Ou est-ce juste pour éviter que l'ordre ne soit continuellement modifié et oui, j'ai vérifié la documentation.
Merci,
madmax3
Votre return(0) vous fait sortir de start() avant que le second ordre ne soit modifié.
Tout ce que vous faites est de sélectionner l'ordre par position, de vérifier qu'il a le bon numéro magique, qu'il s'agit du bon symbole et qu'il est OP_BUY... puis vous le modifiez, où déterminez-vous s'il a déjà été modifié ou non ?
Votre EA doit être capable de se remettre d'une interruption... si vos ordres sont placés et que MT4 se plante, il doit être capable de reprendre là où il s'est arrêté lorsqu'il est relancé.
C'est pourquoi vous devez déterminer si l'ordre a déjà été modifié ou doit être modifié... comment ?
"J'ai défini deux ordres en attente à une heure précise, à savoir 23:00 GMT+2 je pense. L'un des ordres en attente est un stop de vente et l'autre un stop d'achat, les deux ordres sont à une distance égale de l'ouverture de la bougie de 23:00, dans ce cas 14 pips. Les deux ont un TakeProfit de 28 pips (dans ce cas) et un StopLoss de 55 pips. "
Vous pouvez calculer où était le TP d'origine en vous référant à la bougie de 23:00, vérifier l'ordre et voir s'il est toujours défini sur le TP d'origine, s'il l'est alors il peut être modifié ... sinon il a déjà été modifié donc ne le modifiez pas à nouveau.
Il y a d'autres façons d'enregistrer que l'ordre a été modifié, gardez la trace du numéro de ticket, écrivez l'information dans un fichier quand il a été modifié, quand vous êtes sur le point de le modifier à nouveau, ouvrez le fichier et vérifiez le numéro de ticket, etc.... Je pense que la vérification par rapport au TP original est beaucoup plus simple.
Pour l'instant, j'ai ceci,
Le code d'écriture du fichier tel qu'il est inclus dans l'exemple ci-dessus,
Mais j'ai ces erreurs,
2012.04.04 15:30:06 2012.01.16 06:25 TimeBasedEA Version 2 : FileOpen - trop de fichiers ouverts
2012.04.04 15:30:06 2012.01.16 06:25 TimeBasedEA Version 2 : poignée invalide -1 dans FileWrite
Qu'est-ce qui se passe ?
Pourquoi diable avez-vous choisi la plus difficile des deux options ?
Lorsque vous avez fini d'écrire dans le fichier, vous devez le fermer... s'il est déjà ouvert, vous n'avez pas besoin de le rouvrir.
Votre boucle for est erronée... la position du dernier ordre est 0 et non 1.
Pourquoi diable avez-vous choisi la plus difficile des deux options ?