Tiki in Echtzeit - Seite 5

 
Aleksey Mavrin:

Können Zecken nicht mehr als eine Flagge gleichzeitig haben?

Sie haben Recht, das habe ich.

//+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
bool is_book;
MqlTick ticks[];
ulong last_time, mem_cnt;
bool is_first;
int t_cnt, result;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  is_book = MarketBookAdd(Symbol());
  result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, 0, 1);
  if(result > 0)
  {
    last_time = ulong(ticks[0].time_msc);
    is_first = true;
  }
  else
  {
    is_first = false;
    Alert("No start time!");
    return(INIT_FAILED);
  }   
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+ 
//| возвращает строковое описание тика                               | 
//+------------------------------------------------------------------+ 
string GetTickDescription(MqlTick &tick) 
  { 
   string res = string(tick.time) + "." +  string(tick.time_msc%1000); 
// 
   bool buy_tick=((tick.flags&TICK_FLAG_BUY)==TICK_FLAG_BUY); 
   bool sell_tick=((tick.flags&TICK_FLAG_SELL)==TICK_FLAG_SELL); 
   bool ask_tick=((tick.flags&TICK_FLAG_ASK)==TICK_FLAG_ASK); 
   bool bid_tick=((tick.flags&TICK_FLAG_BID)==TICK_FLAG_BID); 
   bool last_tick=((tick.flags&TICK_FLAG_LAST)==TICK_FLAG_LAST); 
   bool volume_tick=((tick.flags&TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME); 
// 
   if((buy_tick== true) || (sell_tick == true)) 
   { 
     res = res + (buy_tick?StringFormat(" Buy Tick: Last=%G Volume=%d ",tick.last,tick.volume):""); 
     res = res + (sell_tick?StringFormat(" Sell Tick: Last=%G Volume=%d ",tick.last,tick.volume):""); 
     res = res + (ask_tick?StringFormat(" Ask=%G ",tick.ask):""); 
     res = res + (bid_tick?StringFormat(" Bid=%G ",tick.ask):""); 
   } 
   else 
   { 
     res = res + (ask_tick?StringFormat(" Ask=%G ",tick.ask):""); 
     res = res + (bid_tick?StringFormat(" Bid=%G ",tick.ask):""); 
     res = res + (last_tick?StringFormat(" Last=%G ",tick.last):""); 
     res = res + (volume_tick?StringFormat(" Volume=%d ",tick.volume):""); 
   } 
   return res; 
  } 
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(is_book == true) MarketBookRelease(Symbol());
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
//void OnTick()
void OnBookEvent(const string &symbol)
{
  if(Symbol() == symbol)
  {
    if(is_first == true)
    {
      result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, last_time, 0);
      if(result > 0)
      {
        Print("First packet of ticks:");
        t_cnt = 0;
        for(int i= 0; i<result; i++)
        {
          if(ticks[i].time_msc == ticks[0].time_msc) t_cnt++;
          Print(GetTickDescription(ticks[i]));
        }
        is_first = false;
        last_time = ulong(ticks[0].time_msc);
      } 
    }
    else
    {
      result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, last_time, 0);
      if(result > 0)
      {
        if(result > t_cnt)
        {
          mem_cnt = t_cnt;
          t_cnt = 0;
          for(int i= 0; i<(result - int(mem_cnt)); i++)
          {
            if(ticks[i].time_msc == ticks[0].time_msc) t_cnt++;
            Print(GetTickDescription(ticks[i]));
          } 
          if(last_time == ulong(ticks[0].time_msc))
          {
            t_cnt += int(mem_cnt);
          }
          else last_time = ulong(ticks[0].time_msc + 1);
        }
        else
        {
          t_cnt = 0;
          last_time++;
        }
      }
      else
      {
        t_cnt = 0;
        last_time++;
      }
    }
  }
}
//+------------------------------------------------------------------+
Ich habe das Prinzip des All-Tick-Sammlers gezeigt, und Sie können diesen Code nach Belieben verwenden (Extraktion aller Flaggen)
 
Aleksey Mavrin:

Aber bedeutet das, dass es eine Garantie dafür gibt, dass Sie ALLE OnBookEvent-Ereignisse behandeln werden?

Bedeutet

 
prostotrader:

Wiederholen Sie

OnBookEvent() ist genau die Art von Garantie dafür, dass ein neuer Stapel von Zecken eingetroffen ist!

Sie haben einen Aktien-Tick.

OnTick bedeutet genau, dass ein Tick gekommen ist, und mit CopyTicks können Sie das ganze Paket bekommen.

Außerdem kann man sie von überall her bekommen (sogar von der Kartenveranstaltung). OnBookEvent hat seinen eigenen Zweck, und Sie müssen es nicht überall dort einfügen, wo Sie wollen oder nicht wollen.


Prostotrader:

Von der Referenz:

Ausgabesatz: Das Terminal speichert für jedes Zeichen 4096 letzte Ticks im Cache für schnellen Zugriff (für Zeichenmit laufendem Stack 65536 Ticks), Abfragen auf diese Daten sindam schnellsten.

Ende des Zitats----

Wenn Sie nicht genug von 4K Last Ticks bekommen können, dann abonnieren Sie unbedingt den Stack. Ich kann mir aber nicht vorstellen, wo dies erforderlich wäre (außer beim ersten Lauf).

 
prostotrader:

Bedeutet

Ja, und Sie müssen diese Ereignisse nicht in einer Warteschlange sammeln und verarbeiten, wenn Sie nur eine Tick-Historie wünschen.

 
Andrey Khatimlianskii:

Sie haben einen Aktien-Tick.

OnTick bedeutet genau, dass ein Tick eingetroffen ist, und mit CopyTicks können Sie das ganze Paket bekommen.

Darüber hinaus können Sie sie von überall her abrufen (sogar von der Kartenveranstaltung). OnBookEvent hat seinen eigenen Zweck, und Sie müssen es nicht überall dort einfügen, wo Sie wollen oder nicht wollen.


Wenn du nicht genug 4K last ticks hast, dann abonniere natürlich den tumblr. Aber ich kann mir nicht vorstellen, wo sie gebraucht werden könnte (außer beim ersten Durchlauf).

Andrew!

Das Thema hieß "Echtzeit-Zecken".

Es ist nicht nötig, 100 Mal darauf hinzuweisen, dass Ticks durch das OnTick()-Ereignis eines Timers oder ähnliches empfangen werden können.

 
prostotrader:

Andrej!

Das Thema lautete "Echtzeit-Zecken".

Es ist nicht nötig, 100 Mal darauf hinzuweisen, dass man Ticks durch das OnTick()-Ereignis eines Timers oder ähnliches erhalten kann.

Ganz genau! Und OnBookEvent hat die gleiche Relevanz für das Thema wie OnTimer

 
Andrey Khatimlianskii:

Ganz genau! Und OnBookEvent hat genauso viel mit dem Thema zu tun wie OnTimer

Dieses Jahr über ein Bestandsinstrument laufen lassen

//+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    is_book = MarketBookAdd(Symbol());
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
    if(is_book == true) MarketBookRelease(Symbol());
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    Print(__FUNCTION__ + " Tick is done!");
   
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
    if(Symbol() == symbol)
    {
      Print(__FUNCTION__ + " Tick is done!");
    }
   
  }
//+------------------------------------------------------------------+
 
prostotrader:

Start in diesem Jahr mit einem Aktieninstrument

Danke, ich weiß, wie es funktioniert.

Stellen Sie sich nur eine Sekunde lang vor, dass es eine andere Herangehensweise an den Handel geben könnte als Ihre.

 
Andrey Khatimlianskii:

Danke, ich weiß, wie es funktioniert.

Stellen Sie sich nur eine Sekunde lang vor, dass es eine andere Herangehensweise an den Handel geben könnte als Ihre.

Andrei(bei allem Respekt).

Warum machen Sie "Quatsch"?

Oder kennen Sie nicht den Unterschied zwischen Echtzeit- und historischen Informationen?

Und was hat das mit dem anderen Ansatz des Handels zu tun?

Jeder handelt und schreibt Roboter, wie er es für richtig hält!

Hinzugefügt von

Gefällt Ihnen meine Version des Echtzeit-Tickens nicht?

Dann posten Sie Ihre Version!

Dann lassen Sie uns einen anderen Ansatz sehen...

 
prostotrader:

Andrei(bei allem Respekt)

Warum machen Sie "Quatsch"?

Oder kennen Sie nicht den Unterschied zwischen Echtzeit- und historischen Informationen?

Und was hat das mit dem anderen Ansatz des Handels zu tun?

Jeder handelt und schreibt Roboter, wie er es für richtig hält!

Hinzugefügt von

Gefällt Ihnen meine Version nicht, bei der Sie Zecken in Echtzeit erhalten?

Dann posten Sie Ihre Version!

Dann lassen Sie uns einen anderen Ansatz sehen...

Ersetzen Sie OnBookEvent durch OnTick in Ihrem Code, und vergleichen Sie das Ergebnis.