MT5 et la vitesse en action - page 25

 
A100:
Naturellement, aucun expert/indicateur/script n'est en cours d'exécution - uniquement des constructions manuelles. La latence indiquée est reproductible sur toute tablette moderne moyenne de 64 bits. Si vous avez un ordinateur i7, je ne pense pas que vous ayez rencontré ce retard.

Est-ce que l'apk ou l'exe-système ralentit ?

 
Aujourd'hui, c'est le jour de congé. Un seul symbole dans Market Watch. EA exécute OnTimer une fois par seconde. J'ai trouvé ce journal.
2020.09.06 00:37:09.187         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 8 ms.
2020.09.06 03:57:17.902         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1731 ms.
2020.09.06 03:57:18.463         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 2292 ms.
2020.09.06 03:59:49.233         Alert: Time[MT4Orders.mqh 1788: ::PositionGetTicket(Index)] = 2 ms.
2020.09.06 04:35:54.170         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 04:55:34.486         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:10:54.387         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 211 ms.
2020.09.06 05:10:54.387         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 895 ms.
2020.09.06 05:23:20.484         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:24:41.484         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:47:41.492         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:50:41.172         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:55:45.176         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:57:32.169         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:17:11.177         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:28:03.184         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:30:22.482         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:48:07.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 07:45:12.490         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:23:24.172         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:24:26.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:37:57.183         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:08:37.180         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:12:58.497         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:57:20.486         Alert: Ping = 10000.000
2020.09.06 09:57:21.680         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 195 ms.
2020.09.06 09:57:54.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 10:47:56.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:06:21.175         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:11:50.208         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1023 ms.
2020.09.06 11:11:50.537         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1049 ms.
2020.09.06 11:11:51.502         Alert: Ping = 10000.000
2020.09.06 11:11:52.370         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 187 ms.
2020.09.06 11:19:41.502         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:38:00.176         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 13:49:02.493         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 14:03:28.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 14:45:05.175         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 16:43:51.196         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:00:17.494         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:40:02.486         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:54:00.180         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 18:16:47.173         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.

Sur l'autre terminal, l'optimisation fonctionne en parallèle sur six agents locaux sur les huit possibles.

S'il s'agit de ruptures de réseau, pourquoi cela affecte-t-il l'obtention du dernier tick de la Market Watch et l'obtention du dernier tick de l'historique des tick ?


ZZY Le journal du terminal est sur le même tronçon.

2020.09.06 01:48:38.338 Network '': scanning network for access points
2020.09.06 01:48:40.195 Network '': scanning network finished
2020.09.06 03:57:04.504 Network '': connection to RannForex-Server lost
2020.09.06 03:57:15.249 Network '': authorized on RannForex-Server through as.eu 6 (ping: 56.41 ms, build 2560)
2020.09.06 03:57:15.249 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.05 21:59:42
2020.09.06 03:57:15.678 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 03:57:15.678 Network '': trading has been enabled - hedging mode
2020.09.06 03:57:17.500 Network '': scanning network for access points
2020.09.06 03:57:20.416 Network '': scanning network finished
2020.09.06 05:10:52.296 Network '': connection to RannForex-Server lost
2020.09.06 05:10:53.033 Network '': authorized on RannForex-Server through as.eu 6 (ping: 56.31 ms, build 2560)
2020.09.06 05:10:53.033 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 05:10:59
2020.09.06 05:10:53.299 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 05:10:53.299 Network '': trading has been enabled - hedging mode
2020.09.06 09:57:18.310 Network '': scanning network for access points
2020.09.06 09:57:20.396 Network '': scanning network finished
2020.09.06 09:57:20.396 Network '': auto connecting to a better access point with 93 % quality (previous: 77 %)
2020.09.06 09:57:20.397 Network '': connection to RannForex-Server lost
2020.09.06 09:57:21.151 Network '': authorized on RannForex-Server through as.eu 5 (ping: 41.60 ms, build 2560)
2020.09.06 09:57:21.151 Network '': previous successful authorization performed from 
xx.xx.xx.xx  on 2020.09.06 05:10:59
2020.09.06 09:57:21.208 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 09:57:21.208 Network '': trading has been enabled - hedging mode
2020.09.06 11:08:16.952 Network '': connection to RannForex-Server lost
2020.09.06 11:11:48.892 Network '': authorized on RannForex-Server
2020.09.06 11:11:48.892 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:55
2020.09.06 11:11:48.970 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 11:11:48.970 Network '': trading has been enabled - hedging mode
2020.09.06 11:11:49.152 Network '': scanning network for access points
2020.09.06 11:11:51.319 Network '': scanning network finished
2020.09.06 11:11:51.319 Network '': auto connecting to a better access point with 92 % quality (previous: 91 %)
2020.09.06 11:11:51.320 Network '': connection to RannForex-Server lost
2020.09.06 11:11:52.035 Network '': authorized on RannForex-Server through as.eu 5 (ping: 43.31 ms, build 2560)
2020.09.06 11:11:52.035 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:55
2020.09.06 11:11:52.088 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 11:11:52.088 Network '': trading has been enabled - hedging mode
2020.09.06 17:11:49.928 Network '': scanning network for access points
2020.09.06 17:11:52.112 Network '': scanning network finished
 
fxsaber:

S'il s'agit de ruptures de réseau, pourquoi cela affecte-t-il l'obtention du dernier tick de la Market Watch et l'obtention du dernier tick de l'historique des tick ?

Une analyse minutieuse a montré que CopyTicks ralentit lorsqu'il y a des coupures de réseau.

2020.09.06 21:22:24.105         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1619 ms.
2020.09.06 21:22:24.515         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 2347 ms.
2020.09.06 21:22:53.814         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 274 ms.
2020.09.06 21:22:53.814         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 686 ms.

2020.09.06 21:20:59.301 Network connection to RannForex-Server lost
2020.09.06 21:22:21.043 Network authorized on RannForex-Server
2020.09.06 21:22:21.043 Network previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:59
2020.09.06 21:22:21.508 Network terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 21:22:21.508 Network trading has been enabled - hedging mode
2020.09.06 21:22:21.915 Network scanning network for access points
2020.09.06 21:22:28.819 Network scanning network finished
2020.09.06 21:22:45.523 Network connection to RannForex-Server lost
2020.09.06 21:22:52.951 Network authorized on RannForex-Server through as.eu 6 (ping: 56.55 ms, build 2560)
2020.09.06 21:22:52.951 Network previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 21:22:28
2020.09.06 21:22:53.024 Network terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 21:22:53.024 Network trading has been enabled - hedging mode
 
fxsaber:


if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX)); // В каком месте самострел?

Tout d'abord, FYI.

" Sile contrôle de la structure de base (contrôle du pointeur) est réussi, true est renvoyé -cela n'indique pas la réussite de l'exécution de l' opération commerciale. Pour obtenir une description plus détaillée du résultat de l'exécution de la fonction, il faut analyser les champs de la structure durésultat."


Deuxièmement, selon votre logique, si un ordre est ouvert, vous ne l'ajoutez pas à la liste des ordres, mais invalidez complètement le cache) ?

Vous pouvez optimiser tout le code, que vous avez HistorySelect sera le dernier endroit pour les questions sur le temps d'exécution) Utilisez la mise en cache. Vous pouvez l'invalider, par exemple, une fois par jour, mais cela accélérera considérablement votre EA.

 
Andrey Pogoreltsev:

Eh bien, tout d'abord

Vous devez soit exécuter le code pour le comprendre correctement, soit le lire très bien à partir d'une feuille de calcul.

Deuxièmement, selon votre logique, si un ordre est ouvert, vous ne l'ajoutez pas à la liste des ordres, mais invalidez entièrement le cache) ?

La liste des commandes ne change pas. Lisez le code.

 
fxsaber:

pour comprendre correctement le code, il faut soit l'exécuter, soit le lire très bien dans la feuille.

La liste des commandes ne change pas. Lisez le code.

Ici

if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX)); // В каком месте самострел?

Je vois cette logique :

  1. Si une demande de transaction est envoyée avec succès au serveur
  2. Nous sélectionnons l'histoire entière

Mais il se peut que la demande soit déjà rejetée sur le serveur - il n'y a pas de contrôle pour cela dans ce code. Quel est l'intérêt de sélectionner l'histoire ? Que voulons-nous y voir ?

Ici, dans ces deux lignes de code, je ne vois personnellement pas l'intérêt. Je le verrais bien s'il y avait une vérification pour changer l'histoire avant de la sélectionner. Bien sûr, ces deux lignes ne vous donnent peut-être pas une image complète de la tâche. Mais le lien entre l'envoi réussi d'une requête au serveur et la sélection de l'historique complet n'est pas clair pour moi. Même si le serveur envoie une requête avec succès, la liste des ordres et des positions du marché sera modifiée. Qu'est-ce que la liste d'histoire a à voir avec ça ?

 
Artyom Trishkin:

C'est ici que

Je vois cette logique :

  1. Si une demande de transaction est envoyée avec succès au serveur
  2. Sélectionner l'historique complet

Mais il se peut que la demande ait déjà été rejetée sur le serveur - il n'y a pas de vérification à ce sujet dans ce code. Quel est l'intérêt de sélectionner l'histoire ? Que voulons-nous y voir ?

Ici, dans ces deux lignes de code, je ne vois personnellement pas l'intérêt. Je le verrais bien s'il y avait une vérification pour changer l'histoire avant de la sélectionner. Bien sûr, ces deux lignes ne vous donnent peut-être pas une image complète de la tâche. Mais le lien entre l'envoi réussi d'une requête au serveur et la sélection de l'historique complet n'est pas clair pour moi. Même si le serveur envoie une requête avec succès, la liste des ordres et des positions du marché sera modifiée. Qu'est-ce que cela a à voir avec la liste historique ?

Si - pour se débarrasser de l'avertissement du compilateur. Il n'a rien d'autre à faire.

Ce fil de discussion n'a pas pour but de vous apprendre à écrire des EA. Il est destiné à éliminer les faiblesses du terminal. Les développeurs ont besoin d'un code simple, concis et reproductible pour le comprendre. Je n'écris pas ce genre de choses pour moi-même, bien sûr. Le fait est que le conseiller en combat enregistre les freins. Je commence à creuser et je réalise que le ralentissement se produit lorsque quelqu'un (au moins à la main) modifie une position. Cela réinitialise le cache historique, bien que l'historique ne change pas, bien sûr.


Le code démontre parfaitement le problème. Il n'est jamais nécessaire d'encombrer le code de relecture avec des contrôles inutiles. Son rôle est de montrer clairement le problème. Et une fois réparé - pour prouver que tout fonctionne correctement maintenant.

 
fxsaber:

pour comprendre correctement le code, il faut soit l'exécuter, soit le lire très bien dans la feuille.

La liste des commandes ne change pas. Lisez le code.

Considérez que je suis très bon pour lire sur la feuille :)


Vous avez pris ce code ailleurs et vous avez créé une nouvelle position, qui est exécutée, n'est-ce pas ?

Sinon, tout l'intérêt de votre code se résume à mettre à jour le TP de la position actuelle et à invalider le cache pour le plaisir, ce qui est également très étrange.

Dans ces deux cas, aucune logique n'est utilisée pour optimiser l'opération de mise en cache. De plus, votre solution n'est pas évolutive, car lorsque l'historique augmente, cela entraîne une augmentation du freinage.

 
fxsaber:

Ce code démontre parfaitement le problème. Il n'est jamais nécessaire d'encombrer le code de relecture avec des contrôles inutiles. Son rôle est de montrer clairement le problème. Et une fois corrigé - pour prouver que tout fonctionne correctement maintenant.

Donc, selon votre logique, ce code ici

int v = 0.0;

for (int i = 0; i < 1000000; i++) {
    v = i;
}

std::cout << "The last number: " << v << std::endl;

démontre la lenteur du processeur ?

 
Andrey Pogoreltsev:

Vous avez obtenu ce code de quelque part et vous l'avez placé là en créant une nouvelle position, qui est exécutée, n'est-ce pas ?

Question rhétorique : qu'essayez-vous d'atteindre ici ?
Andrey Pogoreltsev:

Donc, selon votre logique, ce code ici

montre la lenteur du processeur ?

Je ne répondrai plus, car vous dites n'importe quoi.