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
Vous avez mal compris.
C'est le serveur qui n'a pas envoyé le statut de commande PLASED pendant 20 secondes.
Il y a une erreur évidente dans le terminal, où l'état de la commandeORDER_STATE_STARTED"pend".
La question a-t-elle été définitivement réglée ?
Qu'est-ce que la bourse a dit exactement à propos de cet ordre? A-t-il été placé rapidement ? Si c'est le cas, il est évident qu'il y a eu une erreur sur le serveur ou le terminal MT qui n'a pas mis à jour le statut. Et avec ça, vous pouvez vous adresser au service d'assistance.
Suite à la discussion sur le problème avec Michael dans le Service Desk :
Apparemment, nous devons expliquer comment fonctionne le système de commande et ce que signifie le placement.
Donc :
1. Vous envoyez une demande
2. Le serveur MT5 vérifie cette demande (paramètres, pre-trade, etc.). S'il y a un problème, vous obtiendrez un code d'erreur correspondant en réponse à la demande.
Après cela, vous créez une nouvelle commande en lui donnant un ticket (#24025010) - avec cela, l'état "commencé" est défini pour la commande. Le ticket d'ordre est utilisé pour relier l'identifiant de l'ordre dans MT5 à l'ordre sur la bourse au moment où l'ordre est placé sur la bourse.
Le terminal envoie une transaction concernant l'ajout d'un nouvel ordre dans l'état "commencé", qui peut être suivi dans OnTradeTransaction.
3. Ensuite, le serveur de négociation (via la passerelle) envoie votre ordre à la bourse, si la demande a été envoyée avec succès, votre demande recevra une réponse - cela signifie
"que la demande a été envoyée", les résultats seront exécutés de manière asynchrone, car vous ne savez pas à l'avance combien de temps la bourse va répondre.
Respectivement c'est à ce moment que vous voyez l'enregistrement dans le journal
4. Après un certain temps, la bourse fixe l'ordre dans son système, lui attribue un identifiant et en informe ensuite la passerelle et le serveur MT5.
Si la bourse a fixé l'ordre, l'identifiant de l'ordre est inscrit dans l'ordre dans MT5 et le statut de l'ordre change avec => placé.
Si l'échange refuse de passer une commande pour une raison quelconque, la commande sera supprimée.
Tout cela peut être suivi en enregistrant simplement les transactions entrant dans OnTradeTransaction.
================================================================================
Ce qui se passe :
1. Vous soumettez une demande de commande - voir les étapes 1 à 3.
2. au moment où l'ordre est déjà dans MT5, et qu'il n'est pas encore présent sur la bourse, vous envoyez un ordre pour retirer cet ordre.
Vous devez effectuer les contrôles-corrections appropriés dans la logique de votre EA.Mais comme cette commande est dans son état initial (commencée) et que l'existence d'une commande pour celle-ci n'est pas définie, vous recevez un refus de retirer la commande
.
Z.U. L'autre chose est qu'en une seconde.
(et de plus pendant 20 secondes) la commande aurait dû être passée, ceci est en cours de traitement, un des problèmes potentiels a été trouvé - nous le corrigeons.Suite à la discussion sur le problème avec Michael au Service Desk :
Apparemment, nous devons expliquer comment fonctionne le système de commande et ce que signifie le placement.
Donc :
1. Vous envoyez une demande
2. Le serveur MT5 vérifie cette demande (paramètres, pre-trade, etc.). S'il y a un problème, vous obtiendrez un code d'erreur correspondant en réponse à la demande.
Après cela, vous créez une nouvelle commande en lui donnant un ticket (#24025010) - avec cela, l'état "commencé" est défini pour la commande. Le ticket d'ordre est utilisé pour relier l'identifiant de l'ordre dans MT5 à l'ordre sur la bourse au moment où l'ordre est placé sur la bourse.
Le terminal envoie une transaction concernant l'ajout d'un nouvel ordre dans l'état "commencé", qui peut être suivi dans OnTradeTransaction.
3. Ensuite, le serveur de négociation (via la passerelle) envoie votre ordre à la bourse, si la demande a été envoyée avec succès, votre demande recevra une réponse - cela signifie
"que la demande a été envoyée", les résultats seront exécutés de manière asynchrone, car vous ne savez pas à l'avance combien de temps la bourse va répondre.
Respectivement c'est à ce moment que vous voyez l'enregistrement dans le journal
4. Après un certain temps, la bourse fixe l'ordre dans son système, lui attribue un identifiant et en informe ensuite la passerelle et le serveur MT5.
Si la bourse a fixé l'ordre, l'identifiant de l'ordre est inscrit dans l'ordre dans MT5 et le statut de l'ordre change avec => placé.
Si l'échange refuse de passer une commande pour une raison quelconque, la commande sera supprimée.
Tout cela peut être suivi en enregistrant simplement les transactions entrant dans OnTradeTransaction.
================================================================================
Ce qui se passe :
1. Vous soumettez une demande de commande - voir les étapes 1 à 3.
2. au moment où l'ordre est déjà dans MT5, et qu'il n'est pas encore présent sur la bourse, vous envoyez un ordre pour retirer cet ordre.
Vous devez effectuer les contrôles-corrections appropriés dans la logique de votre EA.Mais comme cette commande est dans son état initial (commencée) et que l'existence d'une commande pour celle-ci n'est pas définie, vous recevez un refus de retirer la commande
.
P.S. L'autre chose, c'est qu'en une seconde...
(et de plus, pendant 20 secondes) la commande doit être passée, nous nous en occupons, nous avons trouvé un des problèmes potentiels - réglons-le.Il n'est pas clair à quel moment l'état de la commande "commencée" devient "placée". Cela se passe-t-il selon le point 3 de votre explication, selon le point 4 de votre explication ou dans les deux cas, selon les points 3 et 4 ?
4. Après un certain temps, la bourse fixe l'ordre dans son système, lui attribue son identifiant, puis en informe la passerelle et le serveur MT5.
Si la bourse a fixé l'ordre - l'identifiant de l'ordre est inscrit dans l'ordre dans MT5, et l'état de l'ordre passe de commencé => placé.
3. Ensuite, le serveur de négociation (via la passerelle) envoie votre demande à la bourse, si la demande a été envoyée avec succès, alors votre demande recevra une réponse, ce qui signifie que
"que la demande a été envoyée", les résultats de son travail seront exécutés de manière asynchrone, car vous ne savez pas à l'avance à quelle heure la réponse de l'échange sera donnée.
En conséquence, c'est à ce moment-là que vous voyez dans le journal de bord
2015.11.26 10:48:23.726 Trades 'xxxxxx': buy limit 5.00 SNGR-3.16 at 35501 placed for execution in 7 ms
4. Après un certain temps, la bourse fixe l'ordre dans son système, lui attribue un identifiant et en informe ensuite la passerelle et le serveur MT5.
Si la bourse a fixé l'ordre, l'identifiant de l'ordre dans MT5 est inscrit dans l'ordre dans MT5 et le statut de l'ordre change avec => placé.
Voici une autre raison de confusion : dans le journal, il est indiqué que la commande a déjà été passée, mais en fait son état n'a pas encore changé.
Peut-être devrions-nous écrire quelque chose comme "envoyé" au lieu de "placé" parce que la commande n'a pas été réellement acceptée par l'échange ?
Il en ressort ce qui suit.
Avant ( ou après ) d'effectuer toute action sur une commande,
vous devez "vérifier" son état à chaque fois (corrigez-moi si je ne suis pas sûr) :
Il en ressort ce qui suit.
Avant ( ou après ) d'effectuer toute action sur une commande,
vous devez "vérifier" son état à chaque fois (corrigez-moi si j'ai raté quelque chose) :
Faux,
Si nous regardons leHistoryOrderSelect( ticket ), alors nous devons appliquerHistoryOrderGetInteger(),HistoryOrderGetDouble()
C'est faux,
Si nous regardons dansHistoryOrderSelect( ticket ), nous devons appliquerHistoryOrderGetInteger(),HistoryOrderGetDouble()
C'est vrai, c'est une erreur d'impression :)
Merci, je l'ai corrigé...