MT5 et la vitesse en action - page 28

 
fxsaber:
L'ajout d'un ordre/une transaction à l'historique des transactions entraîne la reconstruction complète du cache HistorySelect, et non partielle. D'où les décalages dans le déclenchement des ordres en attente.

b2595 - corrigé, super !

J'ai vérifié la mauvaise histoire, je ne l'ai pas encore réparée.

 

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

MT5 et la vitesse en action

fxsaber, 2020.09.08 19:46

2020.09.08 20:23:32.103 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:23:32.239 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:31:59.863 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 9 ms.
2020.09.08 20:32:00.845 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:32:01.856 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 4 ms.
2020.09.08 20:32:02.846 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 7 ms.

Le b2596 est devenu plus rapide, il semble.

2020.09.11 05:06:17.854 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.11 05:06:18.853 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.11 05:06:19.875 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.11 05:06:20.871 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 1 ms.
 
b2605 - plus d'alertes. Un excellent travail réalisé, merci !
MT5 и скорость в боевом исполнении
MT5 и скорость в боевом исполнении
  • 2020.09.07
  • www.mql5.com
MT5 - шустрая платформа. Но есть узкие горлышки, которые сводят на нет все старания быстрой торговли...
 

Pouvez-vous me dire ce qu'il faut faire pour éviter ce genre de choses lors des transactions ?

2020.09.15 22:17:04.633 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 13 ms.
2020.09.15 22:17:04.638 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 18 ms.
2020.09.15 22:17:04.640 Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 20 ms.
 
Résultat de l'exécution de ce script sur un terminal en direct.
2020.09.15 22:26:41.788 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 484: OrderSelect(0)] = 1 ms.
2020.09.15 22:26:48.322 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 489: PositionsTotal()] = 2 ms.
2020.09.15 22:27:07.661 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 490: PositionSelect(Symb)] = 1 ms.
2020.09.15 22:27:47.228 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 483: OrdersTotal()] = 2 ms.
2020.09.15 22:27:53.039 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 483: OrdersTotal()] = 9 ms.
2020.09.15 22:28:13.858 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 490: PositionSelect(Symb)] = 1 ms.
2020.09.15 22:28:21.058 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 484: OrderSelect(0)] = 8 ms.
2020.09.15 22:28:47.813 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 489: PositionsTotal()] = 4 ms.
2020.09.15 22:28:51.482 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 505: AccountInfoInteger(ACCOUNT_TRADE_EXPERT)] = 4 ms.
2020.09.15 22:29:09.053 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 490: PositionSelect(Symb)] = 1 ms.
2020.09.15 22:29:09.353 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 506: AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)] = 1 ms.
2020.09.15 22:29:28.814 Test6 (EURUSD,H1)       Alert: Time[Test6.mq5 457: HistorySelect(Tick.time,INT_MAX)] = 2 ms.

La dernière ligne est normale.


Les décalages peuvent-ils être affectés par des EA fonctionnant en parallèle ? Aucun indicateur.


SZY Profilage sur un terminal vide.

SymbolInfoTick est une fonction coûteuse.

 
fxsaber:

Les décalages peuvent-ils être affectés par des EA fonctionnant en parallèle ? Il n'y a pas d'indicateurs.

J'ai lancé un terminal vide en parallèle et l'ai essayé. Je n'ai pas vu la même chose.

Configuration.
2020.09.15 20:35:42.481 Terminal        Windows 10 build 19042, Intel Core i7-2700 K  @ 3.50 GHz, 6 / 15 Gb memory, 20 / 29 Gb disk, IE 11, Admin, GMT+3
 
En général, étant donné que presque toutes les fonctions régulières peuvent provoquer un freinage, le conseiller de combat effectue chaque OnTick pendant plusieurs dizaines de millisecondes. Ce montant est consommé par la somme des appels à Ordre*+SymbolInfoTick+Position*, etc. Il n'y a pas de calculs mathématiques. Vous avez besoin d'instantanés gratuits. Sans eux, le HDI sur MT5 ne fonctionne pas.
 
fxsaber:
Quoi qu'il en soit, étant donné que presque toutes les fonctions régulières peuvent entraîner un ralentissement, le conseiller expert de la bataille exécute chaque OnTick pendant plusieurs dizaines de millisecondes. La somme des appels Ordre*+SymbolInfoTick+Position*, etc. consomme cette somme. Il n'y a pas de calculs mathématiques. Vous avez besoin d'instantanés gratuits. Sans eux, le HDI sur MT5 ne fonctionne pas.

Quelque chose ne va pas avec l'approche... Apparemment, les fonctions OnTrade sont nécessaires, plutôt que de scanner l'état à partir de zéro à chaque tick.

 
Andrey Khatimlianskii:

Quelque chose ne va pas avec l'approche... Apparemment, les fonctions OnTrade sont nécessaires, plutôt que de scanner l'état à partir de zéro à chaque tick.

Le paradigme OOP suppose que chaque sous-TC scrute l'environnement commercial. Cependant, si vous le voulez vraiment, vous pouvez briser un peu l'indépendance des objets OOP.

Par exemple, faites un instantané complet au tout début de OnTick. Et elle doit être répétée uniquement après l'appel des fonctions synchrones - OrderSend et CopyTicks.

En ce qui concerne OnTrade*, les ruptures de connexion perturbent le système lorsque les instantanés sont effectués uniquement dans les fonctions OnTrade. Sinon, bien sûr, il y aurait une grande économie.

 
fxsaber:

Le paradigme OOP suppose que chaque sous-OS scrute l'environnement commercial. Cependant, si on le veut vraiment, on peut briser un peu l'indépendance des objets OOP.

Par exemple, faites un instantané complet au tout début de OnTick. Et il ne sera répété qu'après l'appel des fonctions synchrones - OrderSend et CopyTicks.

Bien entendu, l'objet de l'instantané doit être unique.


fxsaber:

En ce qui concerne OnTrade*, les ruptures de liens perturbent le système lorsque les instantanés sont effectués uniquement dans les fonctions OnTrade. Sinon, bien sûr, il y aurait une grande économie.

Détecter une rupture de connexion et forcer la mise à jour de l'instantané au prochain tick, puis revenir en mode économique ?

Raison: