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 la fonction OrderSend a retourné true et que result.order a un ticket d'ordre (result.order!=0), est-ce que cela garantit que l'ordre est accepté par le courtier et qu'il est dans l'onglet trading ou à ce stade la demande est acceptée seulement par le serveur du courtier mais pas par la bourse ?
Et la deuxième question, peut-il y avoir une situation où OrderSend renvoie true et result.order==0 ?
Pouvez-vous me dire si la fonction OrderSend retourne true et si result.order a un ticket d'ordre (result.order!=0), cela garantit-il que l'ordre est accepté par le courtier et qu'il est dans l'onglet trading ou à ce stade la demande est acceptée seulement par le serveur du courtier mais pas par la bourse ?
C'est garanti.
Et la deuxième question, peut-il y avoir une situation où OrderSend renvoie true et result.order==0 ?
Non.
Garanties.
Non.
L'autre jour, ils ont ajouté une clarification pour la fonction OrderSend, voir l'aide en ligne.
L'autre jour, une clarification a été apportée à la fonction OrderSend(voir l'aide en ligne).
Cela s'applique-t-il aux ordres de marché ?
Chaque ordre accepté est stocké sur le serveur de négociation en attendant d'être traité jusqu'à ce que l'une des conditions de son exécution se produise :
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Erreurs typiques et moyens de les éliminer lorsque l'on travaille dans l'environnement de négociation
fxsaber, 2018.02.20 12:23 pm.
Schéma conditionnel de la mise en œuvre de l'OrderSend standard (sans timeout).À partir de ce schéma, nous pouvons clairement voir que lors du placement d'un ordre de marché via OrderSendAsync sur le même MetaQuotes-Demo, il est impossible de garantir attraper l'événement de placement de l'ordre correspondant jusqu'à ce que l'ordre soit exécuté ou rejeté. En effet, MT5 ne dispose pas de mécanismes simples pour évaluer les résultats intermédiaires de son OrderSendAsync.
OrderSend est exécuté jusqu'à ce que Result.request_id soit égal à la même valeur de OrderSendAsync dans OnTradeTransaction. Ou jusqu'à ce qu'il soit interrompu par un délai d'attente. Par conséquent, le résultat de OrderSend dépend uniquement du type de message dans OnTradeTransaction avec le request_id correspondant.
Il serait utile de connaître la formation du request_id lui-même. Si je comprends bien, il s'agit d'un compteur d'ordres envoyés au serveur commercial à partir du moment où le terminal/compte est lancé/connecté. Le terminal lui-même analyse les messages entrants du serveur commercial et attribue le request_id requis à un seul (ce qui est douteux), ou réinitialise le request_id à un certain message (ce qui est le plus probable). Ce comportement a permis, il y a quelque temps, de faire correspondre l'historique des offres à la sortie d'OrderSend. Mais comme un seul message dans OnTradeTransaction est visible avec le bon request_id, la situation désagréable en mode asynchrone décrite dans la citation ci-dessus se produit.
Bonjour, j'ai trouvé des incohérences pour MqlTradeResult.deal et MqlTradeResult.order
1) Description (Manuel de référence MQL5)
2) Négociation en temps réel
Je place des ordres de marché (TRADE_ACTION_DEAL). Je sors les valeurs de MqlTradeResult à l'aide de la fonction Print :
et la transaction apparaît dans le journal :
J'ai essayé de "m'endormir" avec la fonction Sleep pendant quelques secondes et d'éditer à nouveau les données (alors que la transaction est déjà exactement faite et que la position est ouverte), le numéro de la transaction n'est pas apparu.
3) Testeur de stratégie
Tous les champs sont remplis ici :
Qu'est-ce qui provoque de telles différences ?
Bonjour, j'ai trouvé des incohérences pour MqlTradeResult.deal et MqlTradeResult.order.
https://www.mql5.com/fr/docs/trading/ordersend
Lors de l'envoi d'un ordre de marché (MqlTradeRequest.action=TRADE_ACTION_DEAL), le résultat positif de la fonction OrderSend() ne signifie pas que l'ordre a été exécuté (les transactions correspondantes ont été exécutées) : true dans ce cas signifie seulement que l'ordre a été placé avec succès dans le système de négociation en vue d'une exécution ultérieure. Le serveur commercial peut indiquer les valeurs des champs de transaction ou d'ordre dans la structure de résultat renvoyée , s'il a connaissance de ces données au moment de l'élaboration de la réponse à l'appel de la fonction OrderSend(). En général, l'événement ou les événements d'exécution des transactions correspondant à l'ordre peuvent se produire après l'envoi de la réponse à l'appel OrderSend(). Par conséquent, pour tout type de demande de transaction, lors de la réception du résultat de l'exécution de la fonction OrderSend(), il est nécessaire de vérifier tout d'abord le code de retour du serveur commercial retcode et le code de réponse du système de négociation externe retcode_external (le cas échéant), qui sont disponibles dans la structure de résultat renvoyée.
Merci pour cet article si instructif. @MetaQuotes
Query : Comment puis-je boucler collectivement les ordres ouverts et les positions ouvertes dans une seule boucle for() (de la même manière que nous bouclons tous les ordres dans MQL4 et vérifions ensuite si un ordre est déjà exécuté ou s'il s'agit d'un ordre en attente) ?
Merci pour cet article si instructif. @MetaQuotes
Query : Comment puis-je boucler collectivement les ordres ouverts et les positions ouvertes dans une seule boucle for() (de la même manière que nous bouclons tous les ordres dans MQL4 et vérifions ensuite si un ordre est déjà exécuté ou s'il s'agit d'un ordre en attente) ?
Pour calculer les POSITIONS et les ORDRES EN ATTENTE, vous devez utiliser deux cycles indépendants. Un cycle énumère les POSITIONS, et le second cycle énumère les ORDRES EN ATTENTE. Exemple : Calculer les positions et les ordres en attente
Je sais que vous n'êtes pas vraiment du genre à vous préoccuper de ceux qui débutent dans le langage mql5, étant donné la forte communauté que vous avez, malgré de nombreuses critiques, en voici une de plus :
La traduction et la formulation même du texte nuit à la compréhension...J'ai sué, j'ai dû aller loin pour savoir qui devait passer en premier, puisque la documentation elle-même se contredit, dans le texte :
Pour obtenir des informations sur une commande à partir de l'historique, vous devez d'abord créer le cache de l'historique de la commande à l'aide de l'une des trois fonctions suivantes : HistorySelect(start, end), HistorySelectByPosition() ou HistoryOrderSelect(ticket). Si l'exécution est réussie, le cache stockera le nombre de commandes, renvoyé par la fonctionHistoryOrdersTotal(). L'accès aux propriétés de ces commandes est effectué par chacun des éléments du ticket, à l'aide de la fonction appropriée :
Contrairement à : https://www.mql5.com/fr/docs/trading/historyorderstotal transcrit ci-dessous.
HistoryOrdersTotalRenvoie le nombre d'ordres dans l'historique. Avant d'appeler HistoryOrdersTotal(), vous devez d'abord recevoir l'historique des transactions et des ordres à l'aide de la fonctionHistorySelect() ou de la fonctionHistorySelectByPosition().
int HistoryOrdersTotal() ;
Valeur de retour
Valeur de typedouble.
Remarque
Ne pas confondre les ordres de l'historique des transactions avec lesordres en attente qui apparaissent dans l'onglet "Trade" de la barre Toolbox. La liste desordres qui ont été annulés ou qui ont donné lieu à une transaction est visible dans l'onglet "Historique" de la boîte à outils du terminal client.
Voir aussi
Le premier passage se contredit lui-même, il n'a pas besoin d'aide, mais le second vient achever de compliquer les choses.... : après tout, qui vient en premier, HistoryOrdersTotal ou l'une des trois fonctions HistorySelect (start, end) HistorySelectByPosition() ou HistoryOrderSelect(ticket), ou même HistorySelectByPosition(), mentionnée dans le second texte.
C'était difficile, ça aurait pu être plus facile... mais je pense que la première chose qui me vient à l'esprit est l'une des trois HistorySelect(start, end) HistorySelectByPosition () ou HistoryOrderSelect(ticket), ou même HistorySelectByPosition(), mentionnées dans le deuxième texte...
Bonjour,
question aux développeurs : pouvez-vous me donner une information approximative sur la quantité de mémoire que prend le cache de l'historique ? environ kbytes pour une transaction et une commande.
J'ai exécuté le script dans un terminal avec un petit historique et j'ai obtenu ce résultat :
Cela signifie qu'avec un historique de quelques millions de transactions et d'un million d'ordres, le cache prendra environ un gigaoctet ?
Et ainsi pour chaque programme mql ?