MT5 et la vitesse en action - page 6

 
A100:

Il est suggéré de revenir à plusieurs reprises jusqu'à ce que vous ayez lu toute la file d'attente actuelle ou pour un nombre donné d'événements. Lorsque les événements commerciaux sont terminés, il y aura un retour de la minuterie et vous aurez accès à tous les événements en même temps.

Eh bien, je vais dire quelque chose... Bien sûr, bien sûr, IMHO, mais c'est demander d'exécuter le handler dans un thread séparé. Alors, je pense tout haut...

Et si vous le faites pour vous-même, vous mettez tout à l'extérieur et chaque maître-chien sera quelque chose de similaire :

void OnXXX{
 gOnXXXMutex.Lock();
 COnXXXOverlapped overlapped=new COnXXXOverlapped(<param_list>);
 gOnXXXOverlappedList.PushBack(overlapped);
 gOnXXXMutex.Unlock();
 DLLOnXXX(<param_list>,overlapped,&gOnXXXMutex);
}
 
A100:
il existe une solution plus élégante, sans OnTimer... pensez-y

Réfléchissez par vous-même aux raisons pour lesquelles cela ne fonctionnerait pas.

 
fxsaber:

Réfléchissez par vous-même aux raisons pour lesquelles cela ne fonctionnerait pas.

Et il n'y a pas besoin de réfléchir - le marché vient d'ouvrir, j'ai vérifié - tout fonctionne, jusqu'au calcul de la ligne

if (наблюдаемая позиция закрылась по тейку)

Lesévénements commerciaux ont été ajoutés à la file d'attente et peuvent être lus.

 
A100:

Et ici, vous n'avez pas besoin de réfléchir - le marché vient d'ouvrir, j'ai vérifié - tout fonctionne, jusqu'à la ligne

Les événements commerciaux ont été ajoutés à la file d'attente et peuvent être lus.

Désolé, mais je n'expliquerai rien dans votre compréhension du bon fonctionnement. Fatigué de devoir épeler des choses simples.

 
fxsaber:

Désolé, mais je ne vais même pas expliquer quoi que ce soit dans votre compréhension du bon fonctionnement. Je suis fatigué de devoir expliquer des choses simples.

Si vous ne voulez pas l'expliquer, ne l'expliquez pas. Je viens de vous montrer qu'ajouter

bool HandleNextEvent (ENUM_EVENT_TYPE);

ne change pas fondamentalement les choses

 
A100:

ne change pas fondamentalement

Cela fait une grande différence. Il semble juste que cela prenne beaucoup de temps (avec un résultat inconnu) pour rendre l'idée évidente dans de nombreuses têtes.

 
fxsaber:

Cela fait une grande différence. Il semble juste que cela prenne beaucoup de temps(avec un résultat inconnu) pour rendre cette idée évidente dans de nombreuses têtes.

Pas beaucoup, car selon la théorie de la simplicité d'Einstein : "Si vous ne pouvez pas l'expliquer simplement, vous ne le comprenez pas vous-même".

 
A100:

Ce n'est pas nécessaire, car selon la théorie de la simplicité d'Einstein : "Si vous ne pouvez pas l'expliquer simplement, c'est que vous ne l'avez pas compris vous-même."

Ouais, tu ne l'as pas eu.

 
fxsaber:

Oui, ça n'a pas marché pour toi.

Et je n'ai pas essayé d'expliquer quoi que ce soit - j'ai donné un exemple et obtenu des résultats :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

MT5 et la vitesse en action

A100, 2020.05.31 23:23

...le marché vient de s'ouvrir, j'ai vérifié - tout fonctionne, avant le calcul de la ligne

if (наблюдаемая позиция закрылась по тейку)

les événements de négociation ont été ajoutés à la file d'attente et peuvent être lus

Il s'avère que vous pouvez lire les événements commerciaux à partir de OnMain(). Vous avez prétendu le contraire
 
A100:

Je n'ai pas essayé d'expliquer quoi que ce soit - j'ai donné un exemple et obtenu le résultat :

Il s'est avéré que vous pouvez lire les événements commerciaux à partir de OnMain(). Vous avez prétendu le contraire.

Vous n'avez rien compris. Lorsque nous revenons, nous entrons dans la fonction On de la file d'attente formée. Cela peut provoquer une pause qui empêche d'envoyer le deuxième ordre correct immédiatement après le premier OrderSend.

Vous proposez d'accumuler la file d'attente en sauvegardant toutes les On-fonctions après le retour, en attendant la On-fonction, dans laquelle il y aura un message sur la fin du premier OrderSend. Et ensuite seulement envoyer le deuxième OrderSend.

En même temps, vous ne comprenez pas que la position de prise peut être exécutée pendant le premier envoi d'ordre, mais que son OnTradeTransaction sera dans la file d'attente plus tard (dans la même microseconde, mais plus tard) que le OnTradeTransaction de fin du premier envoi d'ordre.