Tiki in Echtzeit - Seite 20

 
Roman:

Du hast alles vermasselt.

Wie ich bereits geschrieben habe, handelt es sich bei Trades und Level2 um unterschiedliche Datenabonnements, also um unterschiedliche Event-Handler.
Aus diesem Grund müssen Trades von OnTick und Volume Gangs von OnBook aufgerufen werden.
Sie versuchen, Trades von OnBook-Ereignissen und Gangs von OnTick-Ereignissen aufzurufen. Und das alles in dem Glauben, dass OnBook für den Handel schneller sein wird.
Es wird nicht schneller sein, ich denke, es ist eine Täuschung, zwei Ereignis-Handler zu vergleichen, die für jeden der verschiedenen Daten-Threads bestimmt sind.
Ich verstehe, dass dies alles Experimentieren ist, aber ohne das Verständnis der Logik von Sockets werden Sie endlos verwirren diese OnTick und OnBook Handler.

Ich habe bereits geschrieben, falls Sie es nicht gesehen haben, "für mich gibt es keine Alternative zu OnBookEvent()".

Und alle Codes, Ergebnisse, Erklärungen - um deutlich zu machen, warum.

Deinem Beitrag nach zu urteilen, verstehst du nicht... :)

Vielleicht lesen Sie die Nachricht?

Ich kann alle Daten schnell und einfach über OnBookEvent() abrufen, ohne OnTick() zu verwenden.

aber ich kann nicht alle Daten mit OnTick() erhalten. Warum sollte ich also OnTick() verwenden?

 
prostotrader:

Ich habe bereits geschrieben, falls Sie es nicht gesehen haben, "für mich gibt es keine Alternative zu OnBookEvent()".

Und alle Codes, Ergebnisse, Erklärungen - um deutlich zu machen, warum.

Ihrem Beitrag nach zu urteilen, ist Ihnen das nicht klar... :)

Vielleicht lesen Sie sich gerade das Thema durch?

Ja, ich verstehe, dass es in Ihrem Fall keine Alternative gibt, und das ist auch richtig so.
Und ich verstehe, wovon du sprichst. Ich wollte nur darauf hinweisen, dass es sich bei Handel und Level2 um unterschiedliche Datenströme handelt.
Wir müssen uns daran erinnern, und diejenigen, die es nicht wissen, sollten es wissen.
Wenn Sie also Trades benötigen, sollten Sie die dafür notwendigen Funktionen von OnTick aus aufrufen,
Wenn Sie das Volumen oder die Tiefe einer Tasse ermitteln wollen, müssen entsprechende Funktionen von OnBook aufgerufen werden.
Es ist nicht korrekt, Ereignisse von OnBook zu nehmen und Trades zu erhalten, und zu versuchen, Volumen oder Tiefe von OnTick-Ereignissen zu erhalten.
Ich verstehe also, dass Sie anderen nur etwas erklären und dabei experimentieren.

 
Roman:



Und so habe ich verstanden, dass du anderen nur erklärst und dabei experimentierst.

Da haben Sie recht.

Ich habe vor 7 Jahren ähnliche Experimente gemacht, ich habe OnbookEvent() gewählt.

Und jetzt habe ich beschlossen zu überprüfen, ob sich etwas geändert hat... Das ist nicht der Fall.

 
prostotrader:

Tatsache ist, dass der Derivatemarkt (FORTS), selbst bei "hochliquiden" Instrumenten, sehr schwach ist,

Das bedeutet, dass Sie nur eine sehrbegrenzte Anzahl von Verträgen zum richtigen Preis kaufen können, es kommt also nicht nur auf den Preis an,

aber das Volumen der Verträge zu diesem Preis ist sehr wichtig.


Und SymbolInfo gibt das Volumen dieses Preises nicht an.

Daher müssen wirMarketBookGet() verwenden, das sowohl Preis als auch Volumen für das gesamte Buch liefert.

Was hat das mit dem Thema zu tun? Das ist der einzige Grund, warum ich nicht weiterkomme. Ich brauche OnBook nicht, um die Ticks zu erhalten, weil OnTick definitiv nicht langsamer ist.

Und warum sollte man 20 Mal über die Unverzichtbarkeit von OnBook sprechen? Gibt es jemanden, der daran zweifelt?


prostotrader:

Und ich stimme nicht zu, dass wir, wenn OnTck() ausgelöst wird, Ticks aus der Historie erhalten können.

Indem wir uns die letzte Tick-Zeit merken, wenn OnTck() ausgelöst wird, können wir die Ticks erhalten

eine neue(r) Tick(s) kam in Echtzeit - OnTck() wird ausgelöst, wir lesen es sofort, d.h. es ist nicht Geschichte.

Jede Zecke, die am Terminal ankommt, ist bereits Geschichte.

Aber darum ging es mir nicht, sondern um den Aufbau des Bandes ohne Lücken(SymbolInfoTick hilft nicht).

 
Aleksey Mavrin:

Ich wollte den Code zuerst testen

Aber ich kann das Demo-Eröffner-Konto aus irgendeinem Grund nicht eröffnen. Die Zeit ist wahrscheinlich nicht in Ordnung, oder gibt es noch mehr Komplikationen?

Tiki in Echtzeit

prostotrader, 2020.01.31 13:18

Konto : 1007932

Anleger FfiR87ty (Nur-Lese-Passwort)
 
Andrey Khatimlianskii:

Was hat das mit dem Thema zu tun? Das ist der einzige Grund, warum ich mich damit beschäftige, man braucht OnBook nicht, um Ticks zu erhalten, da OnTick definitiv nicht langsamer ist.

Und warum sollte man 20 Mal über die Unverzichtbarkeit von OnBook sprechen? Gibt es jemanden, der daran zweifelt?

Jede Zecke, die in den Terminal kommt, ist Geschichte.

Aber darum ging es mir nicht, sondern darum, ein Band ohne Sprünge zu erstellen (SymbolInfoTick ist dabei nicht hilfreich).

Sie scheinen sich gegenseitig zu missverstehen :)))
Er erzählt Ihnen von den besten Gebotsanzügen mit Volumen, und Sie erzählen ihm von Geschäften und Deals :))
In Ordnung, ich denke, wir haben alles geklärt.

Nun, das hängt davon ab, wie man das kommende Ticken betrachtet - das ist Geschichte.
Wenn für den Server der Börse, dann ja ist es Geschichte, für das Terminal nicht so.
Denn das Terminal für OnTick speichert die letzten 4096 Datensätze im Cache, um einen schnellen Zugriff auf sie zu ermöglichen, und speichert sie dann in der Historie auf der Festplatte.
Dann stellt sich heraus, dass es noch nicht ganz Geschichte ist ))), d. h., bei einer Notabschaltung wird der Cache nicht auf der Festplatte gespeichert.
Und wenn das Terminal wieder startet, werden die verlorenen Daten im Cache vom Server heruntergeladen. Dies gilt jedoch nur für OnTick-Daten.
OnBook wird die Daten wahrscheinlich nicht laden.

 

Ich dachte, es gäbe mindestens ein OnBook für jeden OnTick. aber dann habe ich das nicht verstanden


 

Fügen Sie diesen Code in die Eröffnungsdemo ein, um die durchschnittliche und maximale Verzögerung zwischen OnTick und dem nächsten OnBook zu berechnen.

Der Code liegt vor, kann aber schief sein, ich werde mir die Ergebnisse ansehen.

//+------------------------------------------------------------------+
//|                                                   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:

Jede Zecke, die am Terminal eintrifft, ist bereits eine Geschichte.

Aber darum ging es mir nicht, sondern darum, ein Band ohne Sprünge zu erstellen (SymbolInfoTick ist dabei nicht hilfreich).

Gut. Ihr Standpunkt zur Geschichte ist ziemlich klar.

Ich bleibe aber bei meiner Meinung, dass die Art und Weise, wie man die Zecken bekommt, davon abhängt

ihre Lektüre (aus der Vergangenheit oder in Echtzeit).

Und ich habe Ihnen nicht widersprochen, was SymbolInfoTick und das Band ohne Übersprung betrifft.

 

Das ist das Bild des Tages. Natürlich haben wir nicht überprüft, ob OnBook mit Tick übereinstimmt, sondern haben einfach den nächsten genommen, in der Hoffnung, dass, wenn OnTick vor OnBook lag, der entsprechende Wert entweder gleich oder etwas später sein würde.

Maximale natürlich ohne zusätzliche Kontrollen ist kein Indikator, oder Überschwingen oder wirklich OnBook irgendwo langsam.


Aber das ist jemand, der es erklären kann? Warum sind so viele OnTicks nicht gesetzt, und kein einziges OnBook passt dazwischen?


Grund der Beschwerde: