Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 103
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
S'il est 7h43 et que je ne me suis pas couché... Donc je suppose que ça s'écrit graal !
Nan, pas besoin de jurer comme ça :)) Yusuf m'a donné le Graal. Je suis assis dans mes valises, attendant la manne du ciel, pour aller aux Maldives :))
Alors montre-moi ce que tu as fait... Pas de télépathes ici - ils sont en vacances.
J'ai téléchargé le code général de l'Expert Advisor, afin de rendre plus clair ce qu'il devrait faire... Je sais que c'est un peu le bazar, mais je n'ai pas encore appris autre chose =)))
Je vais vous dire une fois de plus où c'est stupide.
ouvrir des ordres en suspens : ouvre soit un ordre en suspens sans l'opposé, soit un ensemble d'ordres en suspens dans une direction.
Il supprime les commandes : parfois ok le soir à une heure bien précise, et parfois en une journée, ou ne ferme pas du tout....
Eh bien, la condition est :
Si le premier ordre en attente ouvert se ferme avec un profit, le second est supprimé immédiatement - je doute d'avoir écrit correctement, mais je ne peux pas le vérifier en action car je ne veux pas ouvrir deux positions opposées=(((((.
Lors de la recherche du dernier ordre clôturé, nous devrions d'abord trouver le plus récemment clôturé mais la vérification de la clôture à la prise devrait être retirée de la boucle, sinon elle vérifiera la clôture à la prise pour chaque ordre clôturé et, si c'est le cas, elle se souviendra de l'heure du premier ordre clôturé à la prise dans la boucle et non du dernier.
C'est de l'optimisation de code. Le résultat ne changera pas, comme je le vois. Il faut juste plus de temps pour le calculer. J'ai corrigé le code, mais c'est toujours la même chose.
Pourtant, il y a quelque chose qui cloche.
J'ai essayé de vous montrer le code d'une EA, je sais que c'est un fouillis, mais je n'ai jamais appris à le faire d'une autre manière).
Je vais vous dire encore une fois où c'est stupide
Ouvrir des ordres en suspens : il ouvre soit un ordre en suspens sans l'opposé, soit tout un tas d'ordres en suspens dans une direction.
Suppression des commandes : les supprime à chaque fois, parfois ok le soir à une heure bien précise, et parfois en une journée, ou ne ferme pas du tout...
Eh bien, la condition :
Si le premier ordre en attente ouvert ferme avec un profit, le second sera supprimé immédiatement - Je doute également que je l'ai écrit correctement, mais je ne peux pas vérifier au travail, parce que je ne veux pas ouvrir deux positions opposées=(((((
Pour répondre à une question par une question. Qu'est-ce que c'est que ça ?
Déchiffrez-le pour moi, je ne comprends pas :)
Les contrôles pour ouvrir une position doivent être effectués après la tentative d'ouverture d'une position. I.e.
Vous le placez après avoir envoyé une commande.
Le prix doit être supérieur ou inférieur à l'Asc ou à l'Bid pour ouvrir la position. C'est comme ça que ça se passe pour le Buy :
if (OOP > Ask)
C'est de l'optimisation de code. Le résultat ne changera pas, comme je le vois. Il faut juste plus de temps pour le calculer. J'ai corrigé le code, mais c'est toujours la même chose.
Il y a toujours quelque chose qui cloche.
Non, ce n'est pas de l'optimisation de code. C'est juste qu'il cherche exactement le dernier. Une fois que nous avons terminé la recherche de tous les ordres fermés et que nous avons trouvé le dernier ordre fermé d'entre eux, alors seulement nous devons vérifier la fermeture par la prise et, si elle est fermée par la prise, alors seulement il est logique de continuer à chercher le reste.
Si nous vérifions qu'il y a un proche à l'intérieur de la boucle, qu'obtiendrons-nous ? Nous obtiendrons une erreur de logique :
Supposons que nous ayons sélectionné un ordre qui a été fermé il y a un an. Son temps sera de toute façon supérieur à -1, donc nous le vérifions pour le fermer à la prise (il est vérifié à l'intérieur de la boucle). Oui, ça a fermé sur la prise... Que fait votre fonction ensuite ? C'est vrai - il continue à fonctionner avec cet ordre fermé à la marque il y a un an. Laissez-moi voir ce qui ne va pas. Je viens de rentrer chez moi...
Il était écrit : 2. Si la dernière position ouverte se ferme à la prise, alors fermez tout !
Donc, ça se passe comme ça :
Nous passons à la fonction le symbole que nous voulons vérifier, le numéro magique et le delta (distance en pips == différence entre le prix de l'ordre et le prix de clôture), comme ceci :
Je n'ai pas vérifié cette fonction, je l'ai écrite de ma propre main. Je vous laisse donc le soin de rechercher les erreurs.
Vous pouvez le rendre int et utiliser des codes de retour. Par exemple, si la position recherchée n'existe pas ou existe, mais est fermée avec une perte, retournez -1 ;
si elle existe et est fermée avec un profit, mais pas dans le delta, retournez 0 ;
si elle existe et est fermée avec un profit et au Take (dans le delta), retournez 1...
Les possibilités d'imagination sont énormes...
Si, d'autre part, nous vérifions la fermeture de la prise, qu'obtenons-nous ? Nous obtiendrons une erreur de logique :
Supposons que nous ayons sélectionné une commande qui a été clôturée il y a un an. Son temps sera de toute façon supérieur à -1, donc nous le vérifions pour le fermer à la prise (cette vérification à l'intérieur de la boucle est incluse dans le code). Oui, ça a fermé sur la prise...
Ainsi, si nous bouclons sur toutes les commandes, la boucle passera de toute façon par toutes les commandes. L'heure de clôture de chaque commande sera comparée à celle de la commande sélectionnée précédemment. Mais c'est là que nous sommes confrontés à un problème de performance. Le TakeProfit sera constamment vérifié dans la boucle, avec chaque position fermée, au lieu de seulement la dernière. N'est-ce pas ! ?
Bien.
Mais il existe Open[], avec un prix d'ouverture.
Je l'ai eu, merci :)
Donc, si vous faites un cycle de toutes les commandes, le cycle fera de toute façon un cycle de toutes les commandes. L'heure de clôture de chaque commande sera comparée à celle de la commande précédente. Mais c'est là que nous sommes confrontés à un problème de performance. Le TakeProfit sera constamment vérifié dans la boucle, avec chaque position fermée, au lieu de seulement la dernière. N'est-ce pas ?
Donc si nous bouclons sur toutes les commandes, la boucle bouclera de toute façon sur toutes les commandes. L'heure de clôture de chaque commande sera comparée à celle de la commande précédente. Mais ici, nous avons un problème de performance. Le TakeProfit sera constamment vérifié dans la boucle, avec chaque position fermée, au lieu de seulement la dernière. N'est-ce pas ! ?
C'est un problème :