Questions des débutants MQL5 MT5 MetaTrader 5 - page 815
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
Je n'arrive pas à savoir si c'est normal que...
Il y a beaucoup de choses qui sont difficiles à comprendre ici. En particulier, en ce qui concerne la séquence des transactions, j'ai constaté qu'il y avait des incohérences dans un certain nombre de cas.
À mon avis, il est préférable d'organiser le contrôle de vos transactions : mémorisez vos ordres de transactions et contrôlez la composition des ordres et des positions par le simple fait de leur présence dans les listes correspondantes.Par exemple, lors de l'ouverture d'une position, un ordre au marché est formellement ouvert en premier, qui se transforme ensuite en position. Cependant, au cours de cette série de transactions à la mitraillette, il arrive qu'une position ait déjà été ouverte, mais que l'ordre n'ait pas encore été clôturé. Il s'agit clairement du même événement, mais les transactions sont organisées de manière fragmentaire, émises de manière séquentielle, et avec cette approche, il est en principe impossible de refléter correctement la transformation d'un ordre de marché en position.
En parlant d'oiseaux.
Saviez-vous que les ordres au marché sont émis dans ces transactions avec un prix nul ?
Par exemple, une personne veut ouvrir une position d'achat à 1.2000, Sl=1.1000, Tr=1.3000.
Lorsque cette transaction est exécutée, la première chose qui apparaît est l'ordre au marché avec les données suivantes :
Sl= 1.1000, Tr=1.3000, c'est-à-dire avec les chiffres sélectionnés et Price=0 (égal à zéro). Juste une sorte d'ordre de marché avec un prix nul :) Et pense ce que tu veux.
Pour plus de commodité. Une petite fonction est appelée depuis MqlTradeTransaction. L'élément requis y est trouvé par la recherche d'éléments de la classe. Et pour cet élément, on appelle une des fonctions de la classe qui fait quelque chose d'utile.
Veuillez décrire plus en détail ce que vous voulez obtenir exactement ? Pourquoi appelez-vous quelque chose depuis OnTradeTransaction ?
D'abord juste en paroles, ensuite on corrigera dans le bon sens.
La fonction Abc() de l'utilisateur est exécutée, et elle met en œuvre un algorithme long (en termes de temps).
Au cours de l'exécution de cette fonction, certains événements ont lieu, par exemple - Trade, Timer, etc.
Est-il possible de savoir que ces événements se sont produits sans terminer l'exécution de la fonction Abc() ?
Non. Pendant qu'une fonction est en train de compter, toutes les autres sont sautées.
Elle est similaire à lafonctionSleep()- c'est-à-dire que si votre fonction compte pendant un temps très long, son comportement est similaire à Sleep - tous les autres événements seront ignorés.
...
Absolument tout est transparent dans OnTradeTransaction.
Premièrement,la structure MqlTradeTransaction est remplie différemment selon le type de transaction (ENUM_TRADE_TRANSACTION_TYPE).
lire ici :Structure d'une transaction commerciale (MqlTradeTransaction)
Deuxièmement : Pour visualiser les résultats, nous pouvons extraire ce bloc de code de l'exempleOrderSendAsync
et le coller dans un conseiller expert qui peut être attaché à un graphique. Vous pouvez ensuite ouvrir/fermer manuellement des positions et consulter l'impression des résultats dans l'onglet Experts.
Non. Pendant qu'une fonction est en train de compter, toutes les autres sont sautées.
Elle est analogue à lafonctionSleep()- c'est-à-dire que si votre fonction compte pendant un temps très long, son comportement est anflogique à Sleep - tous les événements de repos seront ignorés.
Merci, c'est malheureux.
Et comment utiliser efficacement la ressource PC alors ? Encore du code en boucle et une interrogation périodique des paramètres ?
Absolument tout est transparent dans OnTradeTransaction.
Merci pour la réponse, c'est à peu près ce que j'ai fait. Plus de questions que d'idées jusqu'à présent...
Veuillez décrire plus en détail ce que vous voulez obtenir exactement ? Pourquoi appelez-vous quelque chose depuis OnTradeTransaction ?
D'abord juste en paroles, ensuite on corrigera dans le bon sens.
J'ai compris que le problème ne vient pas de OnTradeTransaction. Regardez le désordre que j'ai ici :
Voici le code.
Et voici le résultat de son exécution
2017.09.22 10:30:12 Impossible de sélectionner la position par le symbole SBRF-12.17
2017.09.22 10:30:12 Volume 0.0 Volume 0. 0
J'ai échangé les lignes 2 et 3, c'est à dire que le code est maintenant
J'obtiens un résultat comme celui-ci.
2017.09.22 10:30:12 Impossible de sélectionner la position par le symbole SBRF-12.17
2017.09.22 10:30:12 SBRF-3.18 Volume 1.0 SBRF-3.18 Volume 1.0
Dans les deux cas, aucun avertissement n'est généré par le compilateur. Vous trouverez ci-joint le code de 80 lignes du conseiller expert et les paramètres de test. Courtier BCS. La version 1730.
Je me suis rendu compte que le problème ne vient pas de OnTradeTransaction. Regardez le désordre que j'ai mis en place :
Voici le code.
Et voici le résultat de son exécution
2017.09.22 10:30:12 Impossible de sélectionner la position par le symbole SBRF-12.17
2017.09.22 10:30:12 Volume 0.0 Volume 0. 0
J'ai échangé les lignes 2 et 3, c'est-à-dire que le code est maintenant
J'obtiens un résultat comme celui-ci.
2017.09.22 10:30:12 Impossible de sélectionner la position par le symbole SBRF-12.17
2017.09.22 10:30:12 SBRF-3.18 Volume 1.0 SBRF-3.18 Volume 1.0
Dans les deux cas, aucun avertissement n'est généré par le compilateur. Vous trouverez ci-joint le code de 80 lignes du conseiller expert et les paramètres de test. Courtier BCS. La version 1730.
L'erreur semble provenir du fait que l'on essaie d'obtenir des informations sur plus d'une position, sur une ligne(Print).
Seules les informations concernant une position (sélectionnée ) sont disponibles à tout moment :
- Dans le second cas, tout est correct, car le dernier Select renvoie true, ce que vous n'avez pas vérifié.
- Et dans le premier cas : le dernier Select renvoie false, ce que vous n'avez pas non plus vérifié, et le résultat est imprévisible.
..... évidemment Select==false réinitialise les informations du Select==true précédent