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
Regardez le timing du journal. Tout cela s'est passé dans un ms, et à côté (dans le même ms) un tas d'OnBooks.
Vous pouvez compter tous les événements par des compteurs, mais même visuellement vous pouvez voir qu'il y a plus d'OnBooks.
N'avez-vous pas écrit que vous utilisez des commandes asynchrones ?
Je me demandais, quel algorithme utilisez-vous pour contrôler l'exécution des transactions ?
Andrew, les chiffres ici sont des microsecondes fixes lorsque les OnFunctions sont déclenchées, et tout est imprimé ensemble alors à partir du tableau. Il y a peut-être plus d'OnBooks au total - je vais compter, mais on ne sait pas pourquoi ils passent avant les OnTicks dans la file d'attente. Ou bien chaque OnTick ne correspond pas à un OnBook ?
bienvenue dans le monde des réseaux ))))
La chose la plus simple à faire est d'exécuterNetstat - a -b sous l'administrateur.
Vous verrez des ports et des logiciels, je ne veux pas m'embêter, mais je pense que le serveur MT5 transmet de manière asynchrone des paquets avec différentes informations que le terminal place dans les "étagères" nécessaires.
SZZY : à propos de Print() et du saut des impressions si vous en imprimez beaucoup à la fois, savez-vous ? - Il suffit d'écrire vos informations dans le fichier - de cette façon, vous sauvegarderez tout et dans l'ordre, mais n'oubliez pas de fermer le fichier avant de le clore. En théorie et Print() dans les journaux dans le fichier devrait être complète, mais n'ont pas vérifié et en général je ne fais pas confiance si un grand nombre de données de sortie. Discuté icihttps://www.mql5.com/ru/forum/329730, très souvent les "empreintes manquantes" sont discutées )))) - recherche
Andrew, les nombres sont fixés en microsecondes lorsque les OnFunctions sont déclenchées, puis imprimés tous ensemble à partir du tableau. Il y a peut-être plus d'OnBooks au total - je vais les compter, mais on ne sait pas pourquoi ils passent avant les OnTicks dans la file d'attente. Ou bien chaque OnTick ne correspond pas à un OnBook ?
Je l'ai.
Eh bien, il y a beaucoup d'OnBooks dans le coin de toute façon. Il est difficile de tirer des conclusions avec un tel registre.
Je croyais que vous aviez écrit que vous utilisiez des commandes asynchrones ?
Je me demandais, quel algorithme utilisez-vous pour contrôler l'exécution des transactions ?
Dans la fonction OnTradeTransaction()+ vérifier s'il n'y a pas de réponse du serveur pendant une longue période.
Généralement par magie.
Je réserve 65535 symboles magiques pour chaque symbole lors du paramétrage d'un EA,
et lorsque j'envoie un ordre, je lui attribue un numéro magique unique qui ne croise en aucun cas d'autres symboles.
qui ne se chevauche en aucune façon avec d'autres instruments.
Voici comment je fixe le nombre magique initial pour un symbole
Magique - ulong (8 octets) par ex.
GAZR-3.12
L'octet [7] (octet de poids fort) est "G".
L'octet [6] est "A"
Octet [5] pour "Z"
L'octet [4] est "R
L'octet [3] est "3
L'octet [2] est "12".
L'octet [1] et l'octet [0] sont des réserves magiques (65535)
C'est ainsi que je procède aux magies lors de l'envoi d'une commande :
Mais cela ne fonctionne que pour les FORTS car les noms des symboles sont standardisés!
Ajouté
Si la commande est envoyée avec succès, alors
rappelez-vous le temps
Et ensuite (s'il n'y a pas de réponse dans OnTradeTransaction)
Et ensuite la fonctionFindOrderBuyMagic elle-même.
Ajouté par
"Bonne idée" d'ajouter l'identifiant de l' EA (0-255) au 1er octet dans l'automate,
mais je n'en ai pas encore besoin, donc je ne l'ai pas fait :)
Dans la fonction OnTradeTransaction()+ vérifier s'il n'y a pas de réponse du serveur pendant une longue période.
Merci pour le conseil.
1. Le deuxième terminal et les suivants chez le courtier sont payants et je n'ai pas de stratégies où je ne négocie que des actions(portefeuilles d'actions).
2. Si vous voulez afficher les données accumulées dansGetMicrosecondCount(), alors
faites-le sans timer dans OnDeinit(), quand EA sort, tout s'imprimera.
Veuillez m'envoyer le lien vers le courtier, c'est possible dans le LC.
C'est une branche intéressante... :-)
bienvenue dans le monde des réseaux ))))
la chose la plus simple à faire est de lancerNetstat - a -b sous l'administrateur
Vous verrez des ports et des logiciels, je ne veux pas m'embêter, mais je pense que le serveur MT5 transmet de manière asynchrone des paquets avec différentes informations que le terminal place dans les "étagères" nécessaires.
SZZY : à propos de Print() et du fait de sauter des impressions si vous en imprimez beaucoup à la fois, savez-vous ? - Il suffit d'écrire vos informations dans le fichier - de cette façon vous sauvegarderez tout et dans l'ordre, mais n'oubliez pas de fermer le fichier avant de le clore. En théorie et Print() dans les journaux dans le fichier devrait être complète, mais n'ont pas vérifié et en général je ne fais pas confiance si un grand nombre de données de sortie. Discuté icihttps://www.mql5.com/ru/forum/329730, très souvent les "empreintes manquantes" sont discutées )))) - recherche
Igor, la perte d'empreintes est discutée par ceux qui n'ont pas ouvert le fichier journal, une centaine de fois et Rinat Fatkullin lui-même a écrit que rien n'est perdu dans le fichier journal. Mais votre message n'a pas été vain :) J'ai ajouté la sortie dans un fichier séparé, en plus j'ai fait le deuxième fichier, où je sors un peu différemment (en rassemblant tous les événements dans CArrayObj) pour contourner les bugs possibles de ma conception, qui ordonne deux tableaux, c'est-à-dire que je mets tout dans CArrayObj à partir de deux tableaux, puis trier par microsecondes et sortie avec marquage de quel événement Tick ou Book.
Et oui, qu'est-ce que ça a à voir avec les ports, qu'est-ce que ça a à voir ? Je teste juste la file d'attente des événements EA. Si un tick arrive, deux événements doivent être générés - OnTick, et OnBook correspondant, et OnBook est toujours placé dans la file d'attente, et OnTick peut disparaître s'il y a déjà OnTick dans la file d'attente (comme dans le manuel), c'est à dire la situation où un OnTick après l'autre sans OnTick ne peut être que si 1. les OnTicks vont "sans file d'attente" 2. il y a un retard système de OnBook, c'est ce que je veux vérifier, cela peut expliquer le décalage de quelques secondes, précédemment identifié par des collègues. Le nombre total d'OnBooks est 2+ fois plus élevé en une journée, mais pourquoi sont-ils en retard ? Si ce retard est dû à des paquets asynchrones et au parsing, peut-être, mais je ne vérifie jusqu'à présent que le fait de leur arrivée dans l'Expert Advisor. Comment tester en tenant compte du reste des nuances, je n'y ai pas encore pensé.
Voici le nouveau code, à l'ouverture je testerai l'exactitude du travail et je fonctionnerai pour la journée.
s.w. La raison peut aussi être : si Tick est passé aux mêmes prix sans changer la coupe - OnBook n'est pas formé ? Je ne suis pas un spécialiste en bourse, qui peut me le dire. Je pensais que OnTick provoquait toujours OnBook.
Mais je me demande si le responsable est satisfait des réponses à sa question.
J'ai déjà reçu toutes les réponses et j'ai tiré mes propres conclusions.
J'ai besoin d'analyser la bande des transactions pour une période de temps fixe - prix des transactions, volumes réalisés, etc.
Et j'ai également besoin de simuler le fonctionnement de l'algorithme dans le testeur de stratégie.
L'événement OnTick s'en sort parfaitement, les résultats du trading réel et les résultats de la modélisation dans le testeur concordent avec une petite erreur à ma satisfaction.
Si vous avez besoin d'une analyse plus rapide de la bande, vous pouvez utiliser OnTimer.
Et il n'est pas nécessaire que chaque tick qui arrive au terminal soit placé dans l'OnBook - c'est la spécificité de l'exécution des ordres au marché.
Et chaque tick qui entre dans le terminal ne doit pas nécessairement aller dans l'OnBook - il est spécifique à l'exécution des ordres de marché.
Au contraire, chaque tick(événement) arrivant au handler OnTick doit être synchronisé avec OnBook.
Il y a trois événements dans le gestionnaire OnTick, le changement du prix de la meilleure offre, le changement du prix de la meilleure demande, et la transaction (dernière).
Si le prix d'achat ou de vente change sans qu'il y ait de transaction, il s'agira d'un événement et OnTick recevra ces événements.
Et OnBook doit également attraper ces événements, mais ses propres événements, son gestionnaire, sinon il y aura un décalage des prix d'achat et de vente entre les gestionnaires.
Et si OnTick reçoit un dernier événement, cela signifie qu'une transaction est passée.
La transaction génère l'événement OnTick, car après la transaction, le prix ou le volume des offres et des demandes change sur le marché.
C'est un cercle vicieux.
Dans OnTick comme dans OnBook, il existe un événement Best Bid et Best Ask.
Ces événements doivent toujours être synchrones dans les deux gestionnaires.
Et l'événement dernier par lui-même, il génère un événement dans OnBook après la transaction.
Par conséquent, tout événement qui arrive au gestionnaire OnTick doit être reflété de manière synchrone dans OnBook.