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
Maintenant mis à jour et essayant de le comprendre à nouveau. J'ai mis des empreintes sur presque toutes les lignes. Je ferai part des résultats.
Voici le parcours avec votre insert, au moment où le stop loss a été fixé :
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 Position longue par EURUSD à fermer de stop-loss2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 -----------------Deal #63 sl 1.33328
2011.08.09 00:41:08 Core 1 2011.01.01.14 01:41:27 oldDealsTotal=62 newDealsTotal=63
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 CSampleExpert::Trade
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 ordre exécuté vendre 0.15 à 1.33328 [#63 vendre 0.15 EURUSD à 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 transaction effectuée [#63 vendre 0.15 EURUSD à 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 deal #63 sell 0.15 EURUSD at 1.33328 done (based on order #63)
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 stop loss déclenché acheter 0.15 EURUSD 1.32127 sl : 1.33328 tp : 1.35139 [#63 vendre 0.15 EURUSD à 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.13 18:32:00 Position longue par EURUSD à modifier trailing
Je place des ordres en attente avec une durée de vie d'une heure. Après une heure, les ordres qui n'ont pas été activés sont fermés à l'heure d'expiration de l'ordre. Si plusieurs ordres sont fermés simultanément, et qu'avant la fermeture, la fonction HistoryOrdersTotal() avait une valeur non nulle, alors elle perd certains ordres. Par exemple, avant la clôture de 8 ordres, la fonction avait une valeur de 4, mais après la clôture, elle a une valeur de 10. Deux ordres sont perdus.
Que voulez-vous dire par "les ordres ont été perdus" ? Il faut garder à l'esprit que les messages arrivant à OnTrade() peuvent porter des informations sur plus d'un événement commercial. En outre, si plusieurs messages sont envoyés simultanément, lors du traitement du premier message, le cache historique peut déjà avoir changé, et vous pouvez avoir une sensation d'"événements perdus".
Veuillez lire l'article Événements commerciaux dans MetaTrader 5:
Conclusion
Toutes les opérations dans la plateforme de trading MetaTrader 5 sont asynchrones, et l'envoi de messages sur tous les changements dans le compte de trading se fait indépendamment les uns des autres, donc n'essayez pas de tracer un seul événement selon la règle "Une demande - Un événement de trading". Si vous voulez déterminer exactement ce qui a changé après l'événement Trade, vous devez analyser toutes les transactions, positions et ordres à chaque appel du gestionnaire OnTrade et les comparer avec l'état que nous avions avant l'apparition de l'événement.J'ai spécifiquement demandé la valeur HistoryOrdersTotal(), qui était égale à 4, avant de fermer les ordres. Après la clôture de 8 ordres, la valeur de HistoryOrdersTotal() aurait dû être égale à 12 (4 + 8), mais elle était égale à 10. J'ai joint un fichier journal, on peut y voir des situations similaires plus d'une fois. J'ai également joint le conseiller expert, avec lequel on obtient ce résultat. Faites-le vous-même et vous verrez tout.
Essayez de changer la fonction, que se passera-t-il ?
Le rapport HTML de l'exécution du test n'est pas toujours enregistré dans un fichier !
Décrivez plus précisément. Dans quelles circonstances.
Décrivez plus précisément. Dans quelles circonstances.
Rarement, environ un essai sur 20-30 - ouvrir l'onglet "Résultats".
cliquez sur enregistrer le rapport XML - je reçois le fichier du rapport, tout est OK !
cliquez sur enregistrer le rapport HTML - la fenêtre d'enregistrement du fichier apparaît, se bloque avec une barre de progression vide pendant un moment (brièvement), puis la barre de progression se remplit rapidement et la fenêtre se ferme... Mais aucun fichier de rapport n'est créé !
Je ne peux pas spécifier un modèle pour savoir quand cela se produit exactement.
Essayez de changer la fonction, que se passera-t-il ?
La clé est la suivante :" vous devez analyser toutes les transactions, positions et ordres à chaque appel au gestionnaire OnTrade et le comparer à l'état dans lequel il se trouvait avant son apparition " . Dans l'exemple de à avec des ordres en attente, cela ne s'applique qu'aux ordres dans l'historique. Pour éviter de perdre des ordres, je modifierais le code de cette façon :
Introduire une variable globale int oldHistoryOrders ; et dans Ontrade, quelque chose comme ceci :
Ce n'est pas la façon dont je travaille avec OnTrade() comme vous l'avez décrit. Dans mon code joint, j'ai tout supprimé, ne laissant que la partie qui met en évidence le bug de la fonction. Je n'ai pratiquement pas de boucles dans mon EA. L'EA traite un seul symbole sur un seul tick. Par conséquent, je n'ai pas besoin de cycles. Je traite tous les symboles dans les 12 ticks.
PS : OnTrade() m'informe d'un événement commercial. Et l'événement qui s'est produit est défini par mes fonctions sans boucles.