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
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 reçoit 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 :
Bien sûr. Je veux dire "pourquoi il a pu voir...". Le point ici est qu'il n'y a rien dans votre code qui peut expliquer pourquoi vous avez eu ces 2 échanges.
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 :
* Lors de l'utilisation de la méthode PositionOpen de la classe CTrade, au moins 3 utilisateurs ont obtenu à un moment donné, 2 transactions dans la même direction au lieu d'une, résultant en une position avec un volume doublé par rapport à ce qui est attendu.
J'utilise les deux méthodes, pour ouvrir une nouvelle position = "à l'ancienne", en modifiant le stoploss = "classe CTrade".
* Ce problème semble se produire sur le même broker, avec un symbole où la profondeur de marché est activée (les personnes concernées peuvent-elles le confirmer s'il vous plaît).
Oui le serveur du broker X, Depth of Market est activé.
* Ce problème se produit avec un ordre synchrone, l'ordre asynchrone n'a pas été utilisé (veuillez confirmer).
Oui, l'ordre asynchrone n'a pas été utilisé.
* Le problème se produit de manière aléatoire.
Oui, mais seulement pendant les heures de pointe du marché( événementsmacro-économiques ).
A mon avis, ce problème peut être facilement résolu.
L'EA doit toujours attendre une réponse si la fonction "PositionSelect(Symbol())" est utilisée et que le terminal a mis à jour les données de la fonction, avant de pouvoir reprendre l'exécution du code.
L'EA doit toujours attendre une réponse si la fonction "OrderSend(mrequest,mresult)" est utilisée et que le terminal a mis à jour les données de la fonction, avant de pouvoir reprendre l'exécution du code.
Je mentionne également le terminal lui-même car les données de la fonction seront copiées sur le terminal et cela prendra également un certain temps.
De cette façon, la taille de la position actuelle sera toujours calculée correctement, de sorte que le double ordre n' aura plus lieu.
Qu'en pensez-vous ?
A mon avis, ce problème peut être facilement résolu.
L'EA doit toujours attendre une réponse si la fonction "PositionSelect(Symbol())" est utilisée et que le terminal a mis à jour les données de la fonction, avant de pouvoir reprendre l'exécution du code.
L'EA doit toujours attendre une réponse si la fonction "OrderSend(mrequest,mresult)" est utilisée et que le terminal a mis à jour les données de la fonction, avant de pouvoir reprendre l'exécution du code.
Je mentionne également le terminal lui-même parce que les données de la fonction seront copiées sur le terminal et cela prendra également un certain temps.
De cette façon, la taille de la position actuelle sera toujours calculée correctement, de sorte que le double ordre n' aura plus lieu.
Qu'en pensez-vous ?
Je ne suis pas sûr de ce que vous voulez dire par "attendre toujours une réponse..." ?
Quoi qu'il en soit, j'ai envoyé une demande au ServiceDesk pour demander conseil. Nous verrons bien.
Je ne suis pas sûr de ce que vous voulez dire par "toujours attendre une réponse...". ?
Quoi qu'il en soit, j'ai envoyé une demande au ServiceDesk pour demander conseil. Nous allons voir.
"Je ne suis pas sûr de ce que vous voulez dire par "toujours attendre une réponse..." ? ?"
L'EA doit attendre/se stopper jusqu'à ce que la fonction PositionSelect(Symbol()) ait terminé de copier les données sur une position dans l'environnement du programme.
Voyez cela comme une fonction sleep() forcée.
"Je ne sais pas ce que vous voulez dire par "toujours attendre une réponse...". ?"
L'EA doit attendre/se stopper jusqu'à ce que la fonction PositionSelect(Symbol()) ait terminé de copier les données relatives à une position dans l'environnement du programme.
Considérez-la comme une fonction sleep() forcée.