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
Puis-je demander si PositionSelect() vérifie le côté client ou le côté serveur ?
J'ai le fort sentiment que le problème est causé par le retard où le serveur (côté courtier) traite la demande et n'a pas mis à jour le côté client, c'est pourquoi PositionSelect() s'exécute à nouveau.
J'ai le sentiment qu'il n'y a pas de différence entre cTrade et MqlTradeRequest et que la fonction Sleep devrait aider à retarder tout ce qui est nécessaire pour que le côté client soit "mis à jour" avant que PositionSelect() ne s'exécute à nouveau, causant une double entrée. En vérifiant à partir de mon onglet journal, >2013.12.20 08:35:00 Trades '800****' : exchange buy 0.01 EURUSD at market placed for execution in 313 ms <
mettre en sommeil plus de 400 devrait être sûr ???
Qu'en pensez-vous ?
"J'ai le fort sentiment que le problème est causé par le délai où le serveur (côté courtier) traite la demande et ne met pas à jour le côté client c'est pourquoi PositionSelect() s'exécute à nouveau".
Je pense également que c'est la cause de la double entrée. Dans mon code, il est théoriquement impossible d'envoyer un nouvel ordre si la taille de la position actuelle est égale ou supérieure à la taille maximale autorisée, donc lorsque PositionSelect() ne reçoit pas à temps le statut de la position actuelle, mon EA enverra à nouveau un nouvel ordre.
"mettre en sommeil plus de 400 devrait être sûr ? ??"
Plus l'intervalle de temps est grand, mieux c'est, mais il y a un problème. Si vous retournez votre position, en deux étapes (LONG à SHORT ou SHORT à LONG), ce délai supplémentaire peut être la cause d'un mauvais prix d'exécution, surtout pendant un événement macro-économique.
"J'ai le fort sentiment que le problème est causé par le délai où le serveur (côté courtier) traite la requête et n'a pas mis à jour le côté client ; c'est pourquoi PositionSelect() s'exécute à nouveau"
Je pense également que c'est la cause de la double entrée. Dans mon code, il est théoriquement impossible d'envoyer un nouvel ordre si la taille de la position actuelle est égale ou supérieure à la taille maximale autorisée, donc lorsque PositionSelect() ne reçoit pas à temps le statut de la position actuelle, mon EA enverra à nouveau un nouvel ordre.
"Mettre en sommeil plus de 400 devrait être sûr ???"
Plus l'intervalle de temps est grand, mieux c'est, mais il y a un problème. Si vous retournez votre position, en deux étapes (LONG à SHORT ou SHORT à LONG), ce délai supplémentaire peut être la cause d'un mauvais prix d'exécution, surtout pendant un événement macro-économique.
Je ne sais pas si le courtier joue à part ici mais il semble que notre courtier soit le même. Alpari.
J'ai eu une autre double entrée depuis le 10 mars 2013. J'utilise les deux méthodes pour envoyer ma commande. Voir mon message précédent.
Voici ce que je viens de mettre en place. J'espère pouvoir résoudre le problème.
Voici ce que je viens de mettre en place. J'espère pouvoir résoudre le problème.
Je pense qu'il est très important de trouver la raison derrière ce problème, bien sûr il est également important d'avoir une solution de contournement (Sleep ?) jusqu'à ce que nous puissions comprendre pleinement ce qui se passe. J'essaie donc de résumer la situation :
Je suis d'accord avec snella_moda que la meilleure explication est:
I think the problem is the (to slow) execution of the PositionSelect(Symbol()) function. Maybe, the new ticks come in so fast, the EA sends in a new order before it receives a response of the PositionSelect(Symbol()). So the current position size is not calculated properly. In my code, its theoretically impossible to send in a new/double order if the current position size is equal or greater than the max allowed position size, see code.
Mais c'est difficile à vérifier.
Je pense que la meilleure chose à faire est de demander conseil à Metaquotes. Je vais essayer.
La ligne concernant "chaque tick" pourrait être la raison pour laquelle cela ne se produit plus.
La fonction n'est exécutée que lorsqu'une nouvelle barre apparaît. Donc, très probablement, seul le premier tick d'une barre peut exécuter un trade. Après la première barre, le code obtient un 'return' jusqu'à ce qu'une nouvelle barre apparaisse. Peut-être que cela a résolu le problème pour moi.
Je pense que ce morceau de code provient des articles :
La ligne concernant "chaque tick" pourrait être la raison pour laquelle cela ne se produit plus.
La fonction n'est exécutée que lorsqu'une nouvelle barre apparaît. Donc, très probablement, seul le premier tick d'une barre peut exécuter un trade. Après la première barre, le code obtient un 'return' jusqu'à ce qu'une nouvelle barre apparaisse. Peut-être que cela a résolu le problème pour moi.
Je pense que ce morceau de code provient des articles :
Correction. Il y a un double"Position opened in..." et 2 trades ont été ouverts.