Test des "CopyTicks". - page 25

 
Ou peut-être l'avez-vous torturé ? :)
 
prostotrader:
Ou peut-être l'avez-vous torturé ? :)

Il l'est. Il l'a vraiment mal pris. Je dois lui reconnaître qu'il est parfois dans un état de stupeur, mais rarement.

J'ai écrit un bel indicateur de tic-tac. Je suis trop paresseux pour déboguer les défaillances rares.

 
fxsaber:

Il l'est. Il l'a vraiment mal pris. Je dois lui reconnaître qu'il est parfois dans un état de stupeur, mais rarement.

J'ai écrit un bel indicateur de tic-tac. J'ai la flemme de déboguer les défaillances rares.

Arriver à faire rentrer tous les ticks de manière égale dans la bougie en temps réel, à chaque fois ?

Ajouté :

En mode COPY_TICKS_TRADE avec vérification du volume.

 
Alexey Kozitsyn:

Arriver à faire rentrer tous les ticks de manière égale dans la bougie en temps réel, à chaque fois ?

Ajouté :

En mode COPY_TICKS_TRADE avec vérification du volume.

J'en ai une légèrement différente. Comme "n'a pas d'analogues" et bla bla bla bla.

Je ne pense pas que ce soit le cas pour les performances, car il est promis de les améliorer de manière significative dans la prochaine version.

 
fxsaber:

J'en ai une légèrement différente. Comme "inégalé" et bla, bla, bla.

Je ne pense pas que ce soit le cas pour les performances, car il est promis de les améliorer de manière significative dans la prochaine version.

Il ne s'agit pas de performance... Il y a des situations comme celle-ci, par exemple maintenant :

L'indicateur collecte les ticks et calcule le volume par ceux-ci. Ensuite, il compare ce volume avec le volume[].

Et il y a des erreurs dans plusieurs situations :

Parfois, le volume de la première bougie du jour est calculé de manière incorrecte (ne coïncide pas avec le contrôle) ;

Parfois, le volume par ticks est calculé correctement mais le volume renvoie une valeur incorrecte. 3 ;

3. Parfois, le volume par ticks est calculé de manière incorrecte, alors que le volume renvoie une valeur incorrecte ;

Le plus intéressant est que si les erreurs 1, 2 ou 3 apparaissent dans l'historique, après avoir recompilé l'indicateur, l'erreur ne disparaît pas. Et en cas de connexion à un autre serveur, il disparaît.

En bref, les miracles ne sont pas encore terminés.

Si ce post est lu par des développeurs et qu'ils veulent comprendre, veuillez vous diriger vers "Service Desk", je fournirai toutes les sources.

 
Renat Fatkhullin:

C'est ainsi que vous devriez tester CopyTicks :

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ulong from   =(TimeTradeServer()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Voici le résultat en microsecondes : 95 microsecondes par échantillon de 2048 ticks INFO pour les 20 dernières minutes.

2016.10.18 14:15:38.673 TEST (USDCHF,M1)        Time: 95 msc for 1206 records
C'est radicalement différent des dizaines de millisecondes que vous prétendez. C'est parce que vous n'avez pas mesuré les CopyTicks.

Freiner après la fermeture du marché

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ulong from   =(TimeCurrent()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Résultat

2016.10.29 00:31:10.952 Test (GBPUSD,M1)        Time: 85 msc for 1333 records
2016.10.29 00:31:05.435 Test (EURCHF,M1)        Time: 15283 msc for 874 records
2016.10.29 00:31:03.960 Test (EURCHF,M1)        Time: 11629 msc for 874 records
2016.10.29 00:31:02.128 Test (EURCHF,M1)        Time: 10127 msc for 874 records
2016.10.29 00:31:00.332 Test (EURCHF,M1)        Time: 7318 msc for 874 records

2016.10.29 00:30:52.049 Test (EURUSD,M1)        Time: 51 msc for 862 records

Il peut sembler que cela ne concerne que l'EURCHF. Mais dès qu'on commence à pomper les cotations pour l'EURUSD. Dès que le script commence à s'exécuter pendant quelques dizaines de ms sur EURSD. Ce ralentissement a commencé après la fermeture du marché. Tout a été beaucoup plus rapide avant la fermeture du marché.

 

Chers développeurs ! Le problème avec CopyTicks(), et en particulier la synchronisation des volumes sur une bougie (empiler tous les volumes tick d'une bougie dans une bougie et le comparer au volume[] de cette bougie). Il poursuit .

Maintenant, nous avons à nouveau 2 erreurs :

1. Erreur stable de contrôle du volume sur une bougie d'ouverture (10.00). Je teste sur RTS, SBRF, Si (tous à -12.16). Erreur sur chacun de ces symboles !

2. Si pour une raison quelconque il y a une erreur de contrôle du volume sur le chandelier après 10.00 en temps réel, la même erreur se produit sur l'historique. Cependant ! Si vous changez le serveur, l'erreur sur l'historique disparaît.

 

Exemple au poste précédent (sur l'erreur 2) :

2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: ОШИБКА на свече 2016.10.31 10:07! Сумма объемов на покупку = 1074, сумма объемов на продажу = 3917, контрольная сумма (покупки+продажи) = 5009
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:13:43.699 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

C'est avant le changement de serveur. Et voici le journal après le changement de serveur :

2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:05 пройден! Контрольная сумма = 3480 (1353+2127)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:06 пройден! Контрольная сумма = 4103 (2236+1867)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:07 пройден! Контрольная сумма = 5009 (1082+3927)
2016.10.31 12:18:12.109 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:08 пройден! Контрольная сумма = 3121 (1479+1642)
2016.10.31 12:18:12.110 (Si-12.16,M1)   VolumeControl: Контроль свечи 2016.10.31 10:09 пройден! Контрольная сумма = 3760 (1046+2714)

Le voici, le "BORDER" localisé ! Moi-même je ne dessine pas ici de contrôle, les valeurs entre parenthèses ne s'ajustent pas, je n'en ai pas besoin. Mais il y a une erreur, et elle peut être corrigée en changeant le serveur !

C'est le journal du contrôle de l'historique (lorsque vous démarrez l'indicateur/cliquez sur le bouton "rafraîchir").

 

Et maintenant des remarques sur l'erreur n°1.

Quelque temps après l'ouverture du marché (environ 40 minutes se sont écoulées maintenant). Avec un recalcul complet de l'indicateur - il n'y a pas d'erreur de contrôle de la bougie à 10.00 ! Même sans changer le serveur. Comme si quelqu'un avait téléchargé l'historique sur le serveur.

 

Une autre observation sur l'erreur n°2 :

Если по какой-то причине возникает ошибка контроля объемов на свече после 10.00 в реальном времени, то эта же ошибка возникает и на истории. Однако! Если изменить сервер - ошибка на истории пропадает. 

Il semble que les ticks précédemment reçus localement soient mis en cache sur la machine et ne soient écrasés qu'après un changement de serveur. Ce serait bien, mais au cas où ils seraient reçus dans leur intégralité ! Mais il s'avère que les erreurs dans l'histoire s'accumulent. Et la seule façon de s'en débarrasser est de changer le serveur de commerce (du moins je ne connais que cette façon).
Raison: