Histoire d'un tic-tac - page 16

 
Karputov Vladimir:

Voici ce qui a été demandé :

La transition après 24 heures est correcte.
Méthode de test : Avec le terminal allumé, j'ai effacé les fichiers de l'historique des tics. Puis j'ai exécuté le script deux fois (comme il n'y avait pas d'historique, la première exécution du script a initialisé le chargement de l'historique).

Oui, merci, j'ai fait la même chose - ça a aidé. Cependant, le comportement est très étrange.
 

Mais le comportement étrange ne s'arrête pas là. J'ai décidé de comparer deux moments d'interrogation de la même histoire.

Le premier moment a eu lieu hier, lorsque j'ai écrit sur l'erreur d'arrivée du vendredi au lundi :

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

Histoire d'un tic-tac

Tapochun, 2015.10.19 08:48

Un peu plus tard - l'image est comme ceci. Mode 3000 ticks :

2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2774 2015.10.16 23:59:05: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2775 2015.10.16 23:59:05: spread = 72, ask = 1.54428, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2776 2015.10.16 23:59:06: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2777 2015.10.16 23:59:06: spread = 75, ask = 1.54431, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2778 2015.10.16 23:59:07: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54357
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2779 2015.10.16 23:59:07: spread = 74, ask = 1.54431, bid = 1.54357, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2780 2015.10.16 23:59:10: spread = 0, ask = 0.00000, bid = 0.00000, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2781 2015.10.19 09:44:41: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2782 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2783 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2784 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2785 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2786 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2787 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480

Un trou dans l'histoire. En mode INFO - similaire.

Notez les tics qui arrivent à partir de 9.44.41. Maintenant l'historique pour le même symbole, au même moment, dans le même mode (ALL) seulement demandé aujourd'hui :

QK      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289463 2015.10.19 09:44:41: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
LN      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289464 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DO      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289465 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
ES      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289466 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
HR      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289467 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
EG      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289468 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DI      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289469 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
DH      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289470 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
IM      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289471 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480

Le mode de livraison est différent. Et il manque définitivement des millisecondes.

Et comment analyser les tiques dans cette situation !

 
Renat Fatkhullin:

C'est exact.

Je l'ai souligné exactement - il n'y a aucune structure ou logique dans le remplissage des ticks. Chaque champ de prix est indépendant des autres. Ce qui vient du fournisseur est ce qui est traduit.

Renat, il s'avère que les mêmes ticks peuvent provenir d'un fournisseur, selon le moment de la demande, de différentes manières ?

Le format de l'historique dépend-il du serveur auquel vous êtes connecté ?

 
Tapochun:

Il est promis d'être dans le prochain build et je suis sûr qu'il aura ses puces.

Il serait bon si sans "puces", et normalement ... et fatigué de ces tableaux qui disent 99% de qualité de simulation ... et le vrai ne s'en approche même pas :) Pour moi, en principe, il ne devrait pas y avoir une telle chose, sinon ce n'est pas un testeur mais un jouet. Et on ne peut pas faire beaucoup de bouillie avec des stratégies de fermeture de bar...

 
Maxim Dmitrievsky:

Ce serait bien s'il n'y avait pas de "trucs" et que c'était OK... mais je suis fatigué de ces tableaux qui disent que la qualité du modelage est de 99%... et ce n'est même pas proche de la vraie chose :) Pour moi, en principe, il ne devrait pas y avoir une telle chose, sinon ce n'est pas un testeur mais un jouet. Et on ne peut pas faire beaucoup de bouillie avec des stratégies de fermeture de bar...

Sans les puces, tout se passe rarement en même temps. Cette histoire de tique est attendue depuis longtemps, et nous voulons la terminer le plus tôt possible. Je veux qu'il soit prêt à la fois dans le testeur et sur le compte réel. Malheureusement, il n'y a pas beaucoup de retour d'information. J'espère que les travaux de mise à niveau progressent.

 
Karputov Vladimir:

Veuillez spécifier l'indicateur de réception de tick COPY_TICKS_INFO (seulement Bid et Ask) - Bid et Ask peuvent-ils toujours avoir la valeur "0" ou en mode COPY_TICKS_INFO - Bid et Ask ne contiendront pas de zéros et le flux de tick sera similaire à celui duterminal, dans la fenêtre "Market Watch", onglet "Ticks" ?


Il sera résolu dans le build 1200 :

MQL5 : Format étendu de la structure MqlTick. Maintenant, il contient l'heure d'arrivée du tick en millisecondes, ainsi que des drapeaux qui permettent de déterminer quel paramètre du tick a été modifié.
struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;           // Текущая цена Bid
   double       ask;           // Текущая цена Ask
   double       last;          // Текущая цена последней сделки (Last)
   ulong        volume;        // Объем для текущей цены Last
   long         time_msc;      // Время последнего обновления цен в миллисекундах
   uint         flags;         // Флаги тиков
  };
Tous les paramètres sont toujours renseignés à chaque tick, que les données aient changé ou non depuis le tick précédent. Cela vous permet d'avoir toujours un état actualisé des prix à tout moment sans avoir à rechercher les valeurs précédentes dans l'historique des ticks. Par exemple, avec un tick, seul le prix de l'offre peut avoir changé, mais la structure contiendra d'autres paramètres en plus du nouveau prix : prix de l'offre précédente, volume, etc. Pour savoir quelles données ont exactement changé avec le tick actuel, analysez ses drapeaux :

  • TICK_FLAG_BID - le tick a changé le prix de l'offre.
  • TICK_FLAG_ASK - le tick a modifié le prix de vente.
  • TICK_FLAG_LAST - le tick a changé le prix de la dernière transaction.
  • TICK_FLAG_VOLUME - Le tick a changé de volume.
  • TICK_FLAG_BUY - Le tick s'est produit à la suite d'une transaction d'achat.
  • TICK_FLAG_SELL - le tick a eu lieu à la suite d'une transaction de vente.

La structure MqlTick est utilisée dans deux méthodes :

  • CopyTicks - la méthode ne prend pas en charge l'ancien format de structure. Les fichiers EX5 précédemment compilés qui utilisent l'ancien format de tick renverront l'erreur 4006 (ERR_MQL_INVALID_ARRAY) lors de l'appel de la fonction CopyTicks.
  • SymbolInfoTick - la méthode supporte l'ancien et le nouveau format de structure.
 

Donc :

MetaTrader 5 x64 build 1192 started (MetaQuotes Software Corp.)
...
authorized on MetaQuotes-Demo through Access Point Asia (ping: 556.27 ms)

et la structure MqlTick mise à jour :

Mise à jour de la structure de MqlTick

 
Karputov Vladimir:

Donc :

Et la structure MqlTick mise à jour :


Et comment suivre correctement l'arrivée d'une nouvelle tique dans le terminal ? Par exemple, dans le testeur.

"La fonction OnTick() n'est pas un gestionnaire de chaque tick, elle informe un Expert Advisor des changements survenus sur le marché. Les changements peuvent se faire par lots : plusieurs ticks peuvent arriver simultanément sur le terminal, mais la fonction OnTick() ne sera appelée qu'une seule fois pour notifier au conseiller expert la dernière condition du marché".

 
Maxim Dmitrievsky:

Quelle est la manière correcte de suivre l'arrivée d'une nouvelle coche dans le terminal ? Par exemple, dans le testeur.

" La fonction OnTick() n'est pas un gestionnaire de chaque tick, elle informe le conseiller expert des changements survenus sur le marché. Les changements peuvent se faire par lots : le terminal peut recevoir plusieurs ticks en même temps, mais la fonction OnTick() ne sera appelée qu'une seule fois pour informer le conseiller expert de la dernière condition du marché".

Si vous voulez suivre chaque tick, vous devez le faire dans l'indicateur. Un indicateur, contrairement à un EA, traite chaque tick.

Ajouté : maintenant il est possible d'analyser tous les ticks dans EA aussi - seulement il est nécessaire d'entrer les contrôles (par exemple pour analyser la demande CopyTicks avec la profondeur de 5 ticks).

 

Construire 1192. Windows 10 x32.

J'ai préalablement supprimé complètement le dossier de l'historique des tics du serveur MetaQuotes-Demo. Utilisation de l'indicateur

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property indicator_chart_window
#property indicator_plots 0
//--- input parameter
input int   InpShowTicks=500;    // клубина истории тиков
//--- parameters
MqlTick     arr_mql_tick[];      // массив структур хранящий тики
bool        bingo=false;         // false - скачано тиков меньше запрошенного
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Comment("");
   ResetLastError();
//--- новый размер массива структур тиков
   if(ArrayResize(arr_mql_tick,InpShowTicks)==-1)
     {
      Print("Error OnInit #1",GetLastError());
      return(INIT_FAILED);
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   static int count;
   string text="";
   if(bingo)
      return(rates_total);
   int copied=CopyTicks(_Symbol,arr_mql_tick,COPY_TICKS_INFO,0,InpShowTicks);
   if(copied==InpShowTicks)
      bingo=true;
   text="Запрошено "+IntegerToString(InpShowTicks)+" тиков, скачано "+IntegerToString(copied);
   Comment(text);
   count++;
   return(rates_total);
  }
//+------------------------------------------------------------------+

J'ai vérifié le téléchargement des tiques. Pour certains instruments, 500 ticks sont téléchargés au premier ou au deuxième tick et ils ne téléchargent pas plus de 200 Ko (je fais simplement glisser et déposer les outils de Market Watch sur un graphique).

Mais dans certains instruments des miracles se produisent : l'historique des ticks ne veut pas me donner les 500 ticks nécessaires, mais le terminal télécharge environ 20 Mb d'historique (historique pour 10 et 9 mois).

Dossiers :
test.mq5  3 kb
Raison: