MT5 et la vitesse en action - page 85

 
Anton:

@Anton, dans de nombreuses fonctions standard, vous pouvez spécifier NULL au lieu d'un caractère. Cela affecte-t-il la vitesse d'exécution ?

SymbolInfoTick(NULL, Tick);

SymbolInfoTick(_Symbol, Tick);

Ou cela ne fait-il aucune différence pour le terminal/testeur ?

 
fxsaber:

@Anton, dans de nombreuses fonctions standard, vous pouvez spécifier NULL au lieu d'un caractère. Cela affecte-t-il la vitesse d'exécution ?

Ou bien n'y a-t-il pas de différence pour Terminal/Tester ?

Je ne peux pas le dire avec certitude, mais intuitivement je n'écris jamais NULL nulle part.

Théoriquement, cela ne devrait pas faire de différence. Je pense qu'en compilant NULL change à une valeur normale, et je n'aime pas voir des choses incompréhensibles avec mes yeux.

 
Alexey Viktorov:

Je ne peux pas le dire avec certitude, mais intuitivement je n'écris jamais NULL nulle part.

Théoriquement, cela ne devrait avoir aucun effet. Je pense que NULL passe à une valeur normale lors de la compilation, et je n'aime pas voir des choses qui n'ont pas de sens à mes yeux.

Il en va de même. Mais c'est la vitesse qui m'inquiète.

 

Je ne comprends pas comment SymbolInfoTicks peut ralentir dans une minuterie de secondes pendant le week-end !

2021.02.28 21:33:02.993 ::SymbolInfoTick(_Symbol,Tick) = 171 mcs.

20 graphiques de différents symboles, sur chacun desquels un EA est en cours d'exécution, qui ne prend qu'un tick de son symbole dans le second timer.

Qu'y a-t-il à ralentir un jour de congé ? !


SZY 3374 MB dans la capture d'écran - c'est il y a une heure demandant des ticks pour la semaine. Economiser les ressources comme ça.

 
fxsaber:

Je ne comprends pas comment SymbolInfoTicks peut ralentir dans une minuterie de secondes pendant le week-end !

20 graphiques de différents symboles, sur chacun desquels un EA est en cours d'exécution, qui ne prend qu'un tick de son symbole dans le second timer.

Qu'est-ce qu'il y a à ralentir un jour de week-end !

Vous avez :

  1. le manque d'information
  2. quelques dizaines de threads de l'Expert Advisor fonctionnant en parallèle sur 4 cœurs (8 avec hyperthreading peuvent être ignorés)
  3. une fois qu'une seule valeur aberrante provenant d'une longue attente est trouvée ?
  4. à nouveau une latence unique et aléatoire du système au gré du gestionnaire de threads ?


 
Renat Fatkhullin:

Vous avez :

  1. le manque d'information
  2. quelques douzaines de threads experts fonctionnant en parallèle sur 4 cœurs (8 avec hyperthreading peuvent être négligés)
  3. encore une seule aberration d'une longue attente est trouvée ?
  4. Encore une fois, une seule latence aléatoire du système à la volonté du gestionnaire de threads ?

Je me demande pourquoi SymbolInfoTick est une fonction si sélective pour la latence ?

 
fxsaber:

Je me demande pourquoi SymbolInfoTick est une fonction si choisie pour le freinage ?

Ce n'est pas le cas.

Vous trouverez toujours des retards aléatoires dans n'importe quel programme. Commencez à garder une trace de tout et vous serez horrifié par les réalités de Windows. Je l'ai déjà expliqué en détail plusieurs fois.

À un moment donné, nous avons nous aussi été étonnés de voir des rafales aléatoires de 60-80 ms au lieu de 0 ms sur les fonctions WinAPI du système.


Nous sommes en train de migrer en masse la plupart de nos solutions Windows vers des versions Core de Windows Server 2019 spécialement dégraissées, et les projets web .NET Core vers Linux. Cela permet de réaliser des économies considérables en termes de ressources système et de réduire considérablement la latence du système.

La première étape de l'écrémage des terminaux MataTrader 5 a consisté à mettre en place un gestionnaire de tâches pour suivre à la volée la consommation des ressources. Pour nous-mêmes, nous recueillons davantage d'informations.

Il a déjà été révélé que nous :

  • une rétention trop longue des flux inutiles
  • sur-échantillonnage
  • Dépassement des caches.
Dans la prochaine version, nous corrigerons certains des problèmes de ressources étape par étape.
 
Alexey Viktorov:

Théoriquement, cela ne devrait avoir aucun effet. Je pense que NULL passe à une valeur normale lors de la compilation, et je n'aime pas voir des choses incompréhensibles avec mes yeux.

Théoriquement, cela devrait avoir un effet, mais ce n'est pas le cas parce que la

SymbolInfoTick(_Symbol, Tick);

_Symbol est transmis non pas par valeur (d'après la description de l'aide) mais par référence.

 
Renat Fatkhullin:

Ce n'est pas le cas.

Vous trouverez toujours des retards aléatoires dans n'importe quel programme. Commencez à garder une trace de tout et vous serez horrifié par les réalités de Windows. Je l'ai déjà expliqué en détail à plusieurs reprises.

Merci, je vais vérifier.


Veuillez réfléchir à une telle fonctionnalité.

int SymbolInfoTicks( const string Symb, MqlTick &Ticks[] ); // Возвращает свежие тики (не более сотни), пришедшие с предыдущего вызова этой функции.


Le problème de l'obtention de ticks tardifs sans sauts est maintenant résolu uniquement par CopyTicks*. C'est un mécanisme très lourd pour cette tâche très répandue. C'est comme tirer des oiseaux avec un canon.

D'où les freins, la conservation d'énormes caches, etc.

 
A100:

Théoriquement, cela devrait avoir un effet, mais ce n'est pas le cas, car en

_Symbol n'est pas transmis par valeur (comme le suggère la description dans l'aide), mais par référence.

À l'intérieur de la fonction, nous devons encore passer au caractère de tique approprié. C'est le temps nécessaire à l'analyse de la variable chaîne. Ce n'est pas nécessaire avec NULL.