Apprendre et écrire ensemble en MQL5 - page 17

 
Yedelkin:

Question sur la fonction Sleep(). Est-ce que je comprends bien que l'utilisation de cette fonction dans un Expert Advisor arrête l'exécution de cet EA uniquement, et transfère les ressources CPU (noyau) aux tâches suivantes dans la liste des tâches de ce noyau ? En d'autres termes, est-il exact que la fonction Sleep() ne ralentit pas le fil d'exécution dans lequel le conseiller expert est traité, mais fonctionne comme un commutateur entre le conseiller expert actuel et d'autres programmes pris en charge par un noyau particulier ?

D'après ce que j'ai compris, si je règle Sleep(0), il basculera. Si je règle Sleep(millisecondes), l'EA sera arrêté pendant un nombre de millisecondes spécifié.

En même temps, d'après ce que je comprends, chaque conseiller expert est un thread séparé et chacun de ces threads demande du temps processeur (la vérification de l'état du thread est effectuée toutes les 100 millisecondes selon l'aide).

Ainsi, si un thread est inactif, quelle qu'en soit la raison, le temps CPU est transmis à un autre thread et le statut du thread qui a "décidé de dormir" est vérifié après 100 millisecondes.

PS

En ce qui concerne la répartition des cœurs entre les threads, c'est aux développeurs de décider.

 
Yedelkin:

Question sur la fonction Sleep(). Est-ce que je comprends bien que l'utilisation de cette fonction dans un Expert Advisor suspend l'exécution de ce seul EA et transfère les ressources CPU (noyau) aux tâches suivantes dans la liste des tâches de ce noyau ? En d'autres termes, est-il exact que la fonction Sleep() ne ralentit pas le fil d'exécution dans lequel le conseiller expert est traité, mais agit comme un commutateur entre le conseiller expert actuel et d'autres programmes pris en charge par un noyau particulier ?

Chaque expert est exécuté dans son propre thread. Sleep() ralentit ce fil. Il n'y a pas de liaison avec les noyaux (masque d'affinité).
 
Yedelkin:

Question sur la structure de MqlTradeResult. Je n'y ai pas trouvé de champ de temps - le temps de la vérification réussie de la demande de base (ou quelque chose comme ça). Quelqu'un se souvient-il s'il y avait une question sur l'introduction d'un champ de temps supplémentaire dans la structure de MqlTradeResult ? Nécessaire pour retirer un ordre en attente s'il passe soudainement en historique.

La demande n'est pas claire. Si la commande a été ouverte, l'heure d'ouverture est enregistrée. Pourquoi avez-vous besoin du temps de réponse du serveur ?
 
sergeev:
La demande n'est pas claire. Si la commande a été ouverte, l'heure d'ouverture est enregistrée. Pourquoi avez-vous besoin du temps de réponse du serveur ?

Le sort de la commande est suivi par le ticket, n'est-ce pas ? Toutefois, le retour du ticket par la fonction OrderSend() ne garantit pas la bonne exécution de l'opération commerciale. Selon la logique du programme, il suffit de vérifier si mon billet est apparu parmi les commandes historiques et quelles transactions ont été effectuées après qu'il ait été placé. Pour cela, je voudrais télécharger le minimum d'historique dans le cache de l'historique - c'est-à-dire à partir du moment où le serveur a répondu à la demande initiale, et pas plus. Nous n'avons pas besoin de travailler avec les propriétés d'un ordre ouvert - ce serait des morceaux de code redondants. La commande peut même ne pas être ouverte. Ainsi, le temps de réponse du serveur est nécessaire pour télécharger la taille optimale (quantité) d'un nouvel historique, en utilisant la fonction HistorySelect(). Alors, est-ce que c'est clair de "sortir une commande de l'historique" ?

D'après ce que je comprends, la question de l'introduction d'un champ horaire supplémentaire dans la structure MqlTradeResult n'a pas encore été soulevée.

 

À propos de Sleep(), j'ai compris que le retard du thread de l'Expert Advisor n'affecte pas l'exécution des autres programmes. Merci.

 

Une autre question sur Sleep(). Le commentaire dit: "Vous ne pouvez pas appeler la fonction Sleep() à partir d'indicateurs personnalisés, carles indicateurs sont exécutés dans le thread de l'interface et cela ne devrait pas la ralentir". J'ai lu le forum, mais je ne comprends toujours pas ce qui suit : la phrase "vous ne pouvez pas l'appeler à partir d'indicateurs" - s'agit-il d'une interdiction prédéfinie ou d'une recommandation au programmeur ?

 
Yedelkin:

Le sort de la commande est suivi par le ticket, n'est-ce pas ? Cependant, le retour du ticket OrderSend() ne garantit pas la bonne exécution de la transaction.

ahem.... vous devriez regarder dans un manuel sur l'envoi d'une commande.
 
Yedelkin:

Une autre question sur Sleep(). Le commentaire dit: "Vous ne pouvez pas appeler la fonction Sleep() à partir d'indicateurs personnalisés, carles indicateurs sont exécutés dans le thread de l'interface et cela ne devrait pas la ralentir". J'ai lu le forum, mais je ne comprends toujours pas ce qui suit : la phrase "vous ne pouvez pas l'appeler à partir d'indicateurs" - s'agit-il d'une interdiction prédéfinie ou d'une recommandation au programmeur ?

interdiction
 
sergeev:
xxm.... vous devriez regarder dans un manuel sur l'envoi d'une commande.

Eh bien, vous comprenez. Je vous le dis méticuleusement, vous pouvez vérifier : la fonction OrderSend() renvoie une valeur booléenne. Dans ce cas, si la demande est vérifiée avec succès, le ticket de commande est écrit dans une variable de la structure MqlResult. Pour ma part, j'appelle cela le "retour de la fonction ticket de commande". Voici le lien vers la source :"Lorsque vous envoyez une demande d'achat à l'aide de la fonction OrderSend(), vous pouvez immédiatement voir le ticket de l'ordre qui a été créé si la demande est vérifiée avec succès.

Pour la réponse concernant le "bannissement" - merci, j'ai compris.

 
Yedelkin:

Eh bien, vous comprenez.

Malheureusement, je ne comprends toujours pas.

vous devez avoir un champ "heure" dans la structure de retour pour une raison quelconque. utilisez l'heure dans l'ordre où elle apparaît. C'est suffisant pour contrôler un peu d'histoire.

Raison: