Une autre question - Je comprends que dans MT5 le premier temps de copie du tampon CopyClose dépend de :
1. si, auparavant, vous ne receviez pas du tout de cotations pour un ticker, n'ouvriez pas de graphique, etc. (dépend du ping, de la vitesse de l'internet, du disque dur, de la préparation du fichier Bases/Broker/history/ticker/cache/)
2017.04.1111:27:38.828 время копирования буфера (EURUSD,M1) проход = 0 время= 83555812017.04.1111:27:38.828 время копирования буфера (EURUSD,M1) проход = 1 время= 1083
2. si les cotations ont été reçues précédemment et que le terminal a été rechargé, à condition qu'aucun graphique de ce ticker n'ait été ouvert (préparation du fichier Bases/Broker/History/Ticker/Cache/)
2017.04.1111:29:14.672 время копирования буфера (EURUSD,M1) проход = 0 время= 5993962017.04.1111:29:14.734 время копирования буфера (EURUSD,M1) проход = 1 время= 259/////////////////////////////2017.04.1219:32:46.489 время копирования буфера (FULT,M5) проход = 0 время= 981672017.04.1219:32:46.557 время копирования буфера (FULT,M5) проход = 1 время= 1552017.04.1219:32:46.557 время копирования буфера (FULT,M5) проход = 2 время= 14
le temps est 10 à 15 fois inférieur à celui de p.1
pour comparaison, le temps d'accès en МТ4 selon le point 2, c'est-à-dire après la réinitialisation du terminal.
2017.04.1219:30:38.831 время копирования буфера EURUSD,M1: проход = 2 время= 2762017.04.1219:30:38.831 время копирования буфера EURUSD,M1: проход = 1 время= 4342017.04.1219:30:38.831 время копирования буфера EURUSD,M1: проход = 0 время= 22602017.04.1219:30:38.816 время копирования буфера EURUSD,M1: initialized
2017.04.1219:30:38.666 время копирования буфера EURUSD,M1 inputs: Pair=USDCAD;
c'est-à-dire que le temps après le redémarrage du terminal MT4 est inférieur de quelques ordres de grandeur.
Cette fois, j'ai tout vérifié sur le Windows, sans SSD !
Quand j'ai obtenu les citations, le terminal n'a pas été redémarré, les données ont été accédées
2017.04.1111:35:30.648 время копирования буфера (EURUSD,M1) проход = 0 время= 892017.04.1111:35:30.648 время копирования буфера (EURUSD,M1) проход = 1 время= 42
Ai-je bien compris qu'après le chargement du cache, le terminal a besoin de beaucoup moins de temps pour les requêtes suivantes (à partir de la deuxième requête) ?
Peut-on réduire le temps du premier appel après le redémarrage du terminal pour le rendre similaire à celui de MT4 ?
Le code était dans https://www.mql5.com/ru/forum/1111/page1870#comment_4856899
J'ai une autre question - je comprends que sur MT5 le premier temps de copie du même tampon CopyClose dépend de :
Vous avez une méthode de test très sale car il n'y a pas du tout de description de l'environnement et de la méthode de lecture.
Non spécifié :
limites des barres dans la fenêtre
les volumes de données réels dans les bases de données terminales
sur quel serveur exactement, les bases de données sont-elles sur le disque ? toutes les données doivent être garanties sur le disque.
plate-forme et débit binaire de test (sous vin ? à préciser en détail)
fenêtres ouvertes
Sans cela, les conclusions ne sont pas fondées.
Par exemple, regardez EURUSD M1 - MT5 a plus de 6 millions de barres là (si le mode illimité aux graphiques), mais MT4 a combien ? Quelques dizaines de milliers de barres M1 dans la base de données actuelle ?
Vous avez une méthode de test très désordonnée car il n'y a aucune description de l'environnement et de la méthode de lecture.
Non spécifié :
limites des barres dans la fenêtre
les volumes de données réels dans les bases de données terminales
quel est exactement le serveur, les bases sont-elles sur le disque ? toutes les données doivent être garanties sur le disque.
plate-forme et débit binaire de test (sous vin ? à préciser en détail)
disponibilité des fenêtres ouvertes
Sans cela, les conclusions ne sont pas fondées.
On m'a posé la plupart des questions dans mon post, pas de problème, je vais vous donner toutes les données maintenant.
Tout d'abord, la réponse à la question
какой точно сервер, находятся ли базы на диске? все данные обязаны быть гарантированно на диске.
Le serveur MQ-demo, les données sont chargées, comme nous parlons du point 2 et du point 3 dans le post précédent. Avec le point 1 tout est clair et il n'y a pas de questions là - comme il a été écrit - les données sont chargées, le cache est formé sur le chemin spécifié.
лимиты баров в окне
MT4
MT5
фактические объемы данных в базах терминалов
MT4
MT5
платформа и битность тестирования (под вайном? нужно указывать детально)
win XP 32bit, toutes les constructions de MT, toutes les dernières
наличие открытых окон
MT4 - ouvrir 1 graphique, vérifier avec un autre symbole
MT5 - 1 graphique ouvert, vérifier avec un autre symbole
répéter, recharger le terminal, envoyer le script au graphique, sélectionner un AUTRE symbole dont les données ont été chargées AVANT de recharger le terminal.
MT4
2017.04.1221:18:31.575 время копирования буфера EURUSD,M1: проход = 2 время= 362017.04.1221:18:31.575 время копирования буфера EURUSD,M1: проход = 1 время= 2822017.04.1221:18:31.575 время копирования буфера EURUSD,M1: проход = 0 время= 18712017.04.1221:18:31.575 время копирования буфера EURUSD,M1: initialized
2017.04.1221:18:31.405 время копирования буфера EURUSD,M1 inputs: Pair=GBPUSD;
MT5
2017.04.1221:19:47.735 время копирования буфера (EURUSD,H1) проход = 0 время= 3039512017.04.1221:19:47.735 время копирования буфера (EURUSD,H1) проход = 1 время= 292017.04.1221:19:47.735 время копирования буфера (EURUSD,H1) проход = 2 время= 25
GBPUSD, M1 seulement, le script est aussi lancé dessus
seulement GBPUSD, M1, le même script est lancé dessus
Les résultats sont froids, après le démarrage du terminal
#0 pass, 1000 records in680 msc
#1 pass, 1000 records in2 msc
#2 pass, 1000 records in2 msc
#0 pass, 1000 records in113497 msc
#1 pass, 1000 records in3 msc
#2 pass, 1000 records in3 msc
Les résultats sont chauds, le deuxième passage se fait immédiatement après le premier.
#0 pass, 1000 records in13 msc
#1 pass, 1000 records in2 msc
#2 pass, 1000 records in2 msc
#0 pass, 1000 records in14 msc
#1 pass, 1000 records in2 msc
#2 pass, 1000 records in2 msc
Les fichiers de test sont joints et tous les temps sont exprimés en microsecondes (et non en millisecondes, 1 milliseconde = 1000 microsecondes).
Maintenant, les conclusions :
La seule différence est la vitesse d'initialisation du cache des graphiques - 0,6 ms pour MT4 contre 113 ms pour MT5
Aucun problème ici - le levage coûte toujours des ressources. En particulier lorsque des architectures conceptuellement différentes sont utilisées : MT5 a des caches plus complexes (les fichiers cache\*.hc sont construits à partir des *.hcc originaux) pour des raisons de mise à l'échelle + contrôle obligatoire de la synchronisation complète avec les données du serveur (morceaux binaires *.hcc).
Des demandes répétées montrent une vitesse identique - 2-3 microsecondes par copie de données.
Il n'y a aucune défaillance dans la mise en œuvre des deux terminaux et tout fonctionne rapidement.
Dans l'ensemble, les résultats sont tels que je les ai montrés dans mes posts.
J'ai fait des tests sur un régulier.
Et pourtant les résultats entre MT4 et MT5 sont presque 200 fois différents (en raison de -doit contrôler la synchronisation complète avec les données du serveur? ? et ping ? ).
Je m'y suis habitué avant de poster ici que c'est probablement une caractéristique du terminal. Je peux même vivre avec, mais c'est difficile à certains moments. Par exemple, les prix sont uniquement disponibles via CopyClose, ils ne sont pas disponibles via SymbolInfoDouble ou via MqlTick jusqu'à ce que le symbole soit ajouté à la surveillance du marché, donc ce script s'exécute "infiniment" longtemps après le démarrage du terminal. Ce n'est qu'un exemple.
Dans l'ensemble, les résultats sont tels que je les ai montrés dans mes posts.
J'ai fait des tests sur un régulier.
Pas de triche, ce sont les mêmes conditions pour les deux systèmes.
Et pourtant les résultats entre MT4 et MT5 sont presque 200 fois différents (à cause du -contrôle obligatoire de la synchronisation complète avec les données du serveur? ? et du ping ? ).
Environ 0.6ms dans MT4, je vais encore trouver une solution. Apparemment, les données qui s'y trouvent sont déjà préparées à l'avance et ce chiffre ne montre donc pas les coûts réels.
MT4 a une idéologie assez différente et en fait le terminal copie une énorme quantité de données pour chaque script/expert au niveau du système à partir du code MQL4. Par conséquent, les mesures effectuées dans MQL4 ne démontrent généralement pas la consommation réelle des ressources pour la réception des données. Les dépenses existent bien sûr, mais elles se situent à un autre niveau - le système en est responsable.
Il est clair que le mécanisme MT4 (création de copies des données du marché pour chaque robot) ne peut pas être appliqué lorsque votre tâche est mise à l'échelle de flux de données infinis (historique profond, dizaines de milliers d'instruments). Par conséquent, j'ai dû modifier et améliorer considérablement MQL5 en me débarrassant des accès directs Open/High/Low/Close et en passant aux fonctions CopyXXX. Compte tenu de la taille des données MT5, il est trop coûteux pour un conseiller expert de construire la copie EURUSD M1 pour 6 millions de barres.
MT5/MQL5 utilise la stratégie de téléchargement des données à la demande sans copie à l'avance, ce qui signifie une meilleure possibilité de mesurer les coûts réels du code MQL5.
Amener la base de données en mémoire, vérifier la synchronisation et préparer les caches d'un objet complexe dans MT5 en 113 millisecondes est acceptable.
un bug lors de l'utilisation d'un styler?
Supposons que nous écrivions en utilisant l'onglet.
Il n'y a pas d'erreur.
puis on utilise le styler, on obtient
c'est-à-dire que le styliste efface l'espace entre leTWO_DIM(10000)
Résultat
Quelle est la bonne méthode ?
1. si, auparavant, vous ne receviez pas du tout de cotations pour un ticker, n'ouvriez pas de graphique, etc. (dépend du ping, de la vitesse de l'internet, du disque dur, de la préparation du fichier Bases/Broker/history/ticker/cache/)
2. si les cotations ont été reçues précédemment et que le terminal a été rechargé, à condition qu'aucun graphique de ce ticker n'ait été ouvert (préparation du fichier Bases/Broker/History/Ticker/Cache/)
le temps est 10 à 15 fois inférieur à celui de p.1
pour comparaison, le temps d'accès en МТ4 selon le point 2, c'est-à-dire après la réinitialisation du terminal.
c'est-à-dire que le temps après le redémarrage du terminal MT4 est inférieur de quelques ordres de grandeur.
Cette fois, j'ai tout vérifié sur le Windows, sans SSD !
Quand j'ai obtenu les citations, le terminal n'a pas été redémarré, les données ont été accédées
Ai-je bien compris qu'après le chargement du cache, le terminal a besoin de beaucoup moins de temps pour les requêtes suivantes (à partir de la deuxième requête) ?
Peut-on réduire le temps du premier appel après le redémarrage du terminal pour le rendre similaire à celui de MT4 ?
Le code était dans https://www.mql5.com/ru/forum/1111/page1870#comment_4856899
Vous avez une méthode de test très sale car il n'y a pas du tout de description de l'environnement et de la méthode de lecture.
Non spécifié :
Sans cela, les conclusions ne sont pas fondées.
Par exemple, regardez EURUSD M1 - MT5 a plus de 6 millions de barres là (si le mode illimité aux graphiques), mais MT4 a combien ? Quelques dizaines de milliers de barres M1 dans la base de données actuelle ?
Vous avez une méthode de test très désordonnée car il n'y a aucune description de l'environnement et de la méthode de lecture.
Non spécifié :
limites des barres dans la fenêtre
Sans cela, les conclusions ne sont pas fondées.
On m'a posé la plupart des questions dans mon post, pas de problème, je vais vous donner toutes les données maintenant.
Tout d'abord, la réponse à la question
Le serveur MQ-demo, les données sont chargées, comme nous parlons du point 2 et du point 3 dans le post précédent. Avec le point 1 tout est clair et il n'y a pas de questions là - comme il a été écrit - les données sont chargées, le cache est formé sur le chemin spécifié.
MT4
MT5
MT4
MT5
win XP 32bit, toutes les constructions de MT, toutes les dernières
MT4 - ouvrir 1 graphique, vérifier avec un autre symbole
MT5 - 1 graphique ouvert, vérifier avec un autre symbole
répéter, recharger le terminal, envoyer le script au graphique, sélectionner un AUTRE symbole dont les données ont été chargées AVANT de recharger le terminal.
MT4
MT5
Voici mon test avec plus de détails et plus de précision :
Les fichiers de test sont joints et tous les temps sont exprimés en microsecondes (et non en millisecondes, 1 milliseconde = 1000 microsecondes).
Maintenant, les conclusions :
Aucun problème ici - le levage coûte toujours des ressources.
En particulier lorsque des architectures conceptuellement différentes sont utilisées : MT5 a des caches plus complexes (les fichiers cache\*.hc sont construits à partir des *.hcc originaux) pour des raisons de mise à l'échelle + contrôle obligatoire de la synchronisation complète avec les données du serveur (morceaux binaires *.hcc).
Il n'y a aucune défaillance dans la mise en œuvre des deux terminaux et tout fonctionne rapidement.
Je vous remercie de votre réponse.
Dans l'ensemble, les résultats sont tels que je les ai montrés dans mes posts.
J'ai fait des tests sur un régulier.
Et pourtant les résultats entre MT4 et MT5 sont presque 200 fois différents (en raison de -doit contrôler la synchronisation complète avec les données du serveur? ? et ping ? ).
Je m'y suis habitué avant de poster ici que c'est probablement une caractéristique du terminal. Je peux même vivre avec, mais c'est difficile à certains moments. Par exemple, les prix sont uniquement disponibles via CopyClose, ils ne sont pas disponibles via SymbolInfoDouble ou via MqlTick jusqu'à ce que le symbole soit ajouté à la surveillance du marché, donc ce script s'exécute "infiniment" longtemps après le démarrage du terminal. Ce n'est qu'un exemple.
Je vous remercie de votre réponse.
Dans l'ensemble, les résultats sont tels que je les ai montrés dans mes posts.
J'ai fait des tests sur un régulier.
Et pourtant les résultats entre MT4 et MT5 sont presque 200 fois différents (à cause du -contrôle obligatoire de la synchronisation complète avec les données du serveur? ? et du ping ? ).
Environ 0.6ms dans MT4, je vais encore trouver une solution. Apparemment, les données qui s'y trouvent sont déjà préparées à l'avance et ce chiffre ne montre donc pas les coûts réels.
MT4 a une idéologie assez différente et en fait le terminal copie une énorme quantité de données pour chaque script/expert au niveau du système à partir du code MQL4. Par conséquent, les mesures effectuées dans MQL4 ne démontrent généralement pas la consommation réelle des ressources pour la réception des données. Les dépenses existent bien sûr, mais elles se situent à un autre niveau - le système en est responsable.
Il est clair que le mécanisme MT4 (création de copies des données du marché pour chaque robot) ne peut pas être appliqué lorsque votre tâche est mise à l'échelle de flux de données infinis (historique profond, dizaines de milliers d'instruments). Par conséquent, j'ai dû modifier et améliorer considérablement MQL5 en me débarrassant des accès directs Open/High/Low/Close et en passant aux fonctions CopyXXX. Compte tenu de la taille des données MT5, il est trop coûteux pour un conseiller expert de construire la copie EURUSD M1 pour 6 millions de barres.
MT5/MQL5 utilise la stratégie de téléchargement des données à la demande sans copie à l'avance, ce qui signifie une meilleure possibilité de mesurer les coûts réels du code MQL5.
Amener la base de données en mémoire, vérifier la synchronisation et préparer les caches d'un objet complexe dans MT5 en 113 millisecondes est acceptable.