Tiki en temps réel - page 20

 
Roman:

Tu as fait un gâchis de tout.

Comme je l'ai écrit précédemment, les transactions et le niveau 2 sont des abonnements de données différents, donc des gestionnaires d'événements différents.
C'estpourquoi les transactions doivent être appelées depuis OnTick, et les groupes de volume depuis OnBook.
Vous essayez d'appeler des transactions à partir d'événements OnBook et des gangs à partir d'événements OnTick. Tout en pensant qu'OnBook sera plus rapide pour les échanges.
Ce ne sera pas plus rapide, je pense que c'est une illusion de comparer deux gestionnaires d'événements destinés à chacun des différents fils de données.
Je comprends qu'il ne s'agit que d'expérimentation, mais si vous ne comprenez pas la logique des sockets, vous allez confondre sans cesse ces gestionnaires OnTick et OnBook.

J'ai déjà écrit, au cas où vous ne l'auriez pas vu, "il n'y a pas d'alternative à OnBookEvent() pour moi".

Et tous les codes, les résultats, les explications - pour faire comprendre pourquoi.

A en juger par votre message, vous ne comprenez pas... :)

Peut-être que vous lisez le message?

Je peux obtenir toutes les données rapidement et facilement via OnBookEvent() sans utiliser OnTick().

mais je ne peux pas obtenir toutes les données avec OnTick(). Alors pourquoi devrais-je utiliser OnTick() ?

 
prostotrader:

J'ai déjà écrit, au cas où vous ne l'auriez pas vu, "pour moi il n'y a pas d'alternative à OnBookEvent()".

Et tous les codes, les résultats, les explications - pour faire comprendre pourquoi.

A en juger par votre post, ce n'est pas clair pour vous... :)

Peut-être que vous lisez le sujet?

Oui, je comprends que dans votre cas il n'y a pas d'alternative, et à juste titre.
Et je comprends ce dont vous parlez. Je voulais juste insister sur ce point, que les métiers et le niveau 2 sont des flux de données différents.
Nous devons nous en souvenir, et ceux qui ne le savent pas doivent le savoir.
C'est pourquoi si vous avez besoin de transactions, vous devez appeler les fonctions nécessaires à partir de OnTick,
Si vous avez besoin de faire des enchères avec le volume, ou la profondeur d'une tasse, alors les fonctions appropriées doivent être appelées depuis OnBook.
Il n'est pas correct de prendre les événements de OnBook et d'obtenir les transactions, et d'essayer d'obtenir les volumes ou la profondeur à partir des événements de OnTick.
Et donc je comprends que vous ne faites qu'expliquer aux autres, et expérimenter en cours de route.

 
Roman:



Et donc j'ai compris que vous ne faites qu'expliquer aux autres, et expérimenter en cours de route.

Tu as raison.

J'ai fait des expériences similaires il y a 7 ans, j'ai choisi OnbookEvent().

Et maintenant, j'ai décidé de vérifier si quelque chose a changé... Ce n'est pas le cas.

 
prostotrader:

Le fait est que le marché des produits dérivés (FORTS), même sur les instruments "hautement liquides", est très faible,

Cela signifie que vous ne pouvez acheter qu'unnombre trèslimité de contrats au bon prix, et que vous n'avez donc pas seulement besoin du prix,

mais le volume des contrats à ce prix est très important.


Et SymbolInfo ne donne pas le volume de ce prix.

Par conséquent, nous devons utiliserMarketBookGet() qui fournit à la fois le prix et le volume pour l'ensemble du livre.

Qu'est-ce que ça a à voir avec le sujet ? C'est la seule raison pour laquelle je suis bloqué. Je n'ai pas besoin de OnBook pour obtenir des ticks, car OnTick n'est certainement pas plus lent.

Et pourquoi répéter 20 fois chacun le caractère indispensable d'OnBook ? Est-ce que quelqu'un en doute ?


prostotrader:

Et je ne suis pas d'accord pour dire que lorsque OnTck() est déclenché, nous pouvons obtenir des ticks de l'historique.

En se souvenant de l'heure du dernier tic, quand OnTck() est déclenché, nous pouvons obtenir les ticks

un nouveau tick(s) est arrivé en temps réel - OnTck() est déclenché, nous le lisons immédiatement, c'est-à-dire qu'il n'est pas dans l'historique.

Tout billet entrant dans le terminal est déjà de l'histoire ancienne.

Mais ce n'est pas de cela que je parlais, mais de la construction de la bande sans lacunes(SymbolInfoTick n'aidera pas à cela).

 
Aleksey Mavrin:

Je voulais d'abord tester le code

Mais je ne peux pas ouvrir le compte démo de l'ouvreur pour quelque chose. L'heure n'est probablement pas respectée, ou y a-t-il d'autres complications ?

Tiki en temps réel

prostotrader, 2020.01.31 13:18

Compte : 1007932

Investisseur : FfiR87ty (mot de passe en lecture seule)
 
Andrey Khatimlianskii:

Qu'est-ce que cela a à voir avec le sujet ? C'est la seule raison pour laquelle je m'y mets, vous n'avez pas besoin de OnBook pour obtenir des ticks, car OnTick n'est certainement pas plus lent.

Et pourquoi répéter 20 fois chacun le caractère indispensable d'OnBook ? Y a-t-il quelqu'un qui en doute ?

Toute tique entrant dans le terminal est de l'histoire ancienne.

Mais ce n'est pas ce dont je parlais, je parlais de la construction d'une bande sans sauts (SymbolInfoTick n'y contribuera pas).

Vous semblez vous méprendre :))))
Il vous parle des meilleures combinaisons d'enchères avec le volume, et vous lui parlez des échanges et des transactions :))
Très bien, je pense qu'on a tout arrangé.

Eh bien, cela dépend de la façon dont vous regardez le tic-tac à venir - c'est l'histoire.
Si pour le serveur de l'échange, alors oui c'est de l'histoire ancienne, pour le terminal non.
Parce que le terminal pour OnTick stocke les 4096 derniers enregistrements dans le cache, pour y accéder à chaud, et les dépose ensuite dans l'historique sur le disque.
Puis il s'avère que ce n'est pas encore tout à fait de l'histoire ancienne ;), c'est-à-dire que l'arrêt d'urgence ne sauvegardera pas le cache sur le disque.
Et lorsque le terminal red émarre, les données perdues dans le cache seront chargées depuis le serveur. Mais cela ne s'applique qu'aux données OnTick.
OnBook ne chargera probablement pas les données.

 

Je pensais qu'il y avait au moins un OnBook pour chaque OnTick. Mais ensuite je n'ai pas compris ceci


 

Mettez ce code sur la Démo d'ouverture pour calculer le délai moyen et maximum entre OnTick et le prochain OnBook.

Le code est sous la main, il peut être tordu, je vais regarder les résultats.

//+------------------------------------------------------------------+
//|                                                   TestOnBook.mq5 |
//|                                           Copyright 2019, Allex@ |
//|                                                 alex-all@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, Allex@"
#property link      "alex-all@mail.ru"
#property version   "1.00"
//---
bool is_book;
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK        // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;
input int   SecForPrint =  300;
//---
ulong TimeArrayBook[65536];
ulong TimeArrayTick[65536];
ushort curBook,curTick;
ulong  DelaySum=0,DelayCount=0;
int delay,delayMax=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   curBook=0;
   curTick=0; 
   ArrayInitialize(TimeArrayBook,INT_MAX);
   ArrayInitialize(TimeArrayTick,INT_MAX);
  if(Mode == USE_BOOK) is_book = MarketBookAdd(Symbol());
  if (EventSetTimer(SecForPrint)) 
  return(INIT_SUCCEEDED);
  else return (INIT_FAILED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(Mode == USE_BOOK)
  {
    if(is_book == true) MarketBookRelease(Symbol());
  }  
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{ 
  TimeArrayBook[curBook++]=GetMicrosecondCount();
 }
void OnTick()
{
  TimeArrayTick[curTick++]=GetMicrosecondCount();
}
//+------------------------------------------------------------------+
void OnTimer()
  {
   string out=NULL;
   int total=MathMax(curBook,curTick);
   int i=0,k=0;
   while(i<total)
     {
      while(i<total && TimeArrayBook[i]<TimeArrayTick[k] )
        {
          Print("Book ",TimeArrayBook[i++]);
        }    
      if(k<curTick-1)
        {
        if(i<total)
          {
           delay=TimeArrayBook[i]-TimeArrayTick[k];
           if (delay>delayMax) 
            delayMax=delay;
           if (delay>0)
              {
                 DelaySum+=delay;
                 DelayCount++;
              }
          }
         Print("Tick ",TimeArrayTick[k++]);
        }       
        i++;
     }
     if (curTick>0)
     {
     Print("Tick ",TimeArrayTick[curTick-1], " last");
     string out="Count Event Book after Tick "+DelayCount+". Delay Average "+DoubleToString(DelaySum/DelayCount,2)+". Max "+delayMax;
     Print (out);
     Comment(out);
     }
     curBook=0;
     curTick=0;
  }
//---  
 
Andrey Khatimlianskii:

Toute tique qui entre dans le terminal est déjà une histoire.

Mais ce n'est pas ce dont je parlais, je parlais de la construction d'une bande sans sauts (SymbolInfoTick n'y contribuera pas).

Ok. Votre point de vue sur l'histoire est très clair.

Mais je maintiens mon opinion, à savoir que la méthode pour attraper les tiques dépendra de ce qui suit

leur lecture (à partir de l'historique ou en temps réel).

Et je n'étais pas en désaccord avec vous au sujet de SymbolInfoTick et de la bande sans sauts.

 

C'est la photo du jour. Bien sûr, nous n'avons pas vérifié si OnBook correspondait à Tick, mais nous avons simplement pris le suivant, en espérant que si OnTick était en avance sur OnBook, alors le correspondant serait soit le même, soit légèrement plus tard.

Le maximum bien sûr sans contrôles supplémentaires n'est pas un indicateur, ou le dépassement ou vraiment OnBook quelque part lent.


Mais c'est quelqu'un qui peut expliquer ? Pourquoi tant de OnTicks ne sont pas réglés, et pas un seul OnBook ne s'insère entre eux ?


Raison: