Testen von 'CopyTicks' - Seite 13

 
prostotrader:

Woher wissen Sie so viel?

Zusätzlich zu Plaza II gibt es das FAST/FIX-Protokoll

Hunderte von Operationen werden in 1 ms durchgeführt

Die Geschichte der Ticks zeigt, dass es so etwas bei den RTS-Futures nicht gibt.
 
fxsaber:

Wie kann das sein? Schließlich können selbst HFTs einen Limitauftrag nicht in weniger als 1 ms löschen.

  • Es gibt spezielle Arten von Marktaufträgen, die mehrere Aktionen auf einmal kombinieren (nicht MT5).
  • Wer sagt, dass die Diskretion von Handlungen durch ein Timing von 1ms festgelegt werden muss? Jede Handelsaktion ist im Wesentlichen ein Eintrag im Börsenkern, der eine Datenbank ist. Das Schreiben in die Datenbank ist viel schneller als 1msec. Aus demselben Grund bilden übereinstimmende Gebote lange Sequenzen von Ticks mit identischen Auftrittszeiten, bis hin zu Millionstelsekunden. Das heißt, dass die Abschlüsse tatsächlich gleichzeitig erfolgen (in die Datenbank geschrieben), obwohl sie auf dem Chart als eine lange Last-Sequenz erscheinen.
 
Vasiliy Sokolov:
  • Es gibt spezielle Arten von Marktaufträgen, die mehrere Aktionen auf einmal kombinieren (nicht MT5).
  • Wer hat gesagt, dass die Diskretion von Handlungen durch eine Zeitvorgabe von 1msec festgelegt werden sollte? Jede Handelsaktion ist im Wesentlichen ein Schreibvorgang in den Kern der Börse, die eine Datenbank ist.
Vier Ticks in einer Millisekunde wurden noch nicht festgestellt. Drei - einmal. Zwei - Zehntausende von Hunderttausenden.
  • Das Schreiben in die Datenbank ist viel schneller als 1msec. Aus demselben Grund bilden übereinstimmende Gebote lange Sequenzen von Ticks mit identischen Auftrittszeiten, bis hin zu Millionstelsekunden. Das bedeutet, dass die Abschlüsse tatsächlich gleichzeitig erfolgen (in die Datenbank geschrieben), obwohl sie auf dem Chart als eine lange Last-Sequenz erscheinen.
Die Sache ist die, dass nicht Flipper, sondern Bestbands überwacht wurden (COPY_TICKS_INFO). 1msec ist also angemessen. Wenn es HFTs gibt, wo sind sie dann? Nach dem Drehbuch zu urteilen, sind sie eine Art Bremsen.
 
Skript gibt COPY_TICKS_INFO mit Nullpreisen aus
#property script_show_inputs

sinput int Count = 100000; // Количество тиков на проверку

#define  TOSTRING(A) " " + #A + " = " + (string)Tick.A

string TickToString( const MqlTick &Tick )
{
  static int i = 0;
  
  i++;
  
  return("Tick" + (string)i + ":" + TOSTRING(time) + "." + (string)(Tick.time_msc %1000) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume));
}

void OnStart()
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicks(_Symbol, Ticks, COPY_TICKS_INFO, 0, Count);
  
  for (int i = 0; i < Amount; i++)
    if ((Ticks[i].bid == 0) || (Ticks[i].ask == 0))
      Print(TickToString(Ticks[i]));
}

Ergebnis

2016.09.13 18:02:06.297 Test (RTS-9.16,M1)      Tick2: time = 2016.09.12 18:52:36.378 bid = 0.0 ask = 0.0 last = 98480.0 volume = 1
2016.09.13 18:02:06.297 Test (RTS-9.16,M1)      Tick1: time = 2016.09.12 18:44:59.951 bid = 0.0 ask = 0.0 last = 98480.0 volume = 1

CopyTicks Fehler?

 

Der Indikator zeigt, dass CopyTicks möglicherweise nicht die letzten Ticks liefert.

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

#define  TOSTRING(A) " " + #A + " = " + (string)Tick.A

string TickToString( const MqlTick &Tick )
{
  static int i = 0;
  
  i++;
  
  return("Tick" + (string)i + ":" + TOSTRING(time) + "." + (string)(Tick.time_msc %1000) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume));
}

bool MySymbolInfoTick( const string Symb, MqlTick &Tick, const uint Type = COPY_TICKS_ALL )
{
  MqlTick Ticks[];
  const int Amount = ::CopyTicks(Symb, Ticks, Type, 0, 1);
  const bool Res = (Amount > 0);
  
  if (Res)
    Tick = Ticks[Amount - 1];
  
  return(Res);
}

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[] )
{
  MqlTick Tick1, Tick2;
  
  if (SymbolInfoTick(_Symbol, Tick2) && MySymbolInfoTick(_Symbol, Tick1))
    if (Tick1.time_msc != Tick2.time_msc)
      Print(TickToString(Tick1) + "\n" + TickToString(Tick2) + "\n");
  
  return(rates_total);
}

Ergebnis

2016.09.14 12:55:23.047 Test2 (Si-9.16,M1)      Tick250: time = 2016.09.14 12:55:04.521 bid = 64999.0 ask = 65002.0 last = 65002.0 volume = 2
2016.09.14 12:55:23.047 Test2 (Si-9.16,M1)      Tick249: time = 2016.09.14 12:55:04.513 bid = 64999.0 ask = 65002.0 last = 65002.0 volume = 2
 
fxsaber:
Das Skript gibt COPY_TICKS_INFO mit Nullpreisen aus

Ergebnis

CopyTicks Fehler?

Ausgangskennzeichen zu
 
Slawa:
Auch die Flaggen ausgeben

Zum Beispiel

string GetTickFlag(uint tickflag)
  {
   string flag="";
//---
   if((tickflag&TICK_FLAG_BID)==TICK_FLAG_BID)
      flag=flag+"TICK_FLAG_BID";

   if((tickflag&TICK_FLAG_ASK)==TICK_FLAG_ASK)
      flag=flag+" TICK_FLAG_ASK";

   if((tickflag&TICK_FLAG_LAST)==TICK_FLAG_LAST)
      flag=flag+" TICK_FLAG_LAST";

   if((tickflag&TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME)
      flag=flag+" TICK_FLAG_VOLUME";

   if((tickflag&TICK_FLAG_BUY)==TICK_FLAG_BUY)
      flag=flag+" TICK_FLAG_BUY";

   if((tickflag&TICK_FLAG_SELL)==TICK_FLAG_SELL)
      flag=flag+" TICK_FLAG_SELL";
   if(StringLen(flag)==0)
      return("FLAG_UNKNOWN");
   return(flag);
  }
//+------------------------------------------------------------------+
 
Slawa:
Geben Sie auch die Flaggen aus

Korrigiert

#property script_show_inputs

sinput int Count = 1000000; // Количество тиков на проверку

#define  TOSTRING(A) " " + #A + " = " + (string)Tick.A

string TickToString( const MqlTick &Tick )
{
  static int i = 0;
  
  i++;
  
  return("Tick" + (string)i + ":" + TOSTRING(time) + "." + (string)(Tick.time_msc %1000) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + TOSTRING(flags));
}

void OnStart()
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicks(_Symbol, Ticks, COPY_TICKS_INFO, 0, Count);
  
  for (int i = 0; i < Amount; i++)
    if ((Ticks[i].bid == 0) || (Ticks[i].ask == 0))
      Print(TickToString(Ticks[i]));
}

Ergebnis auf BCS-MetaTrader5

2016.09.14 13:37:03.896 Test (Si-9.16,M1)       Tick23: time = 2016.09.13 18:52:35.505 bid = 0.0 ask = 0.0 last = 65253.0 volume = 35 flags = 6
2016.09.14 13:37:03.896 Test (Si-9.16,M1)       Tick22: time = 2016.09.13 18:44:59.978 bid = 0.0 ask = 0.0 last = 65253.0 volume = 35 flags = 6
2016.09.14 13:37:03.895 Test (Si-9.16,M1)       Tick21: time = 2016.09.13 00:02:36.809 bid = 0.0 ask = 0.0 last = 0.0 volume = 0 flags = 6
2016.09.14 13:37:03.895 Test (Si-9.16,M1)       Tick20: time = 2016.09.13 00:02:36.809 bid = 0.0 ask = 0.0 last = 0.0 volume = 0 flags = 6
2016.09.14 13:37:03.895 Test (Si-9.16,M1)       Tick19: time = 2016.09.12 18:52:35.635 bid = 0.0 ask = 0.0 last = 64721.0 volume = 2 flags = 6
2016.09.14 13:37:03.895 Test (Si-9.16,M1)       Tick18: time = 2016.09.09 18:52:09.8 bid = 0.0 ask = 0.0 last = 64729.0 volume = 43 flags = 6
2016.09.14 13:37:03.895 Test (Si-9.16,M1)       Tick17: time = 2016.09.09 18:44:59.923 bid = 0.0 ask = 0.0 last = 64729.0 volume = 43 flags = 6
2016.09.14 13:37:03.894 Test (Si-9.16,M1)       Tick16: time = 2016.09.08 23:53:05.468 bid = 0.0 ask = 0.0 last = 64118.0 volume = 1 flags = 6
2016.09.14 13:37:03.894 Test (Si-9.16,M1)       Tick15: time = 2016.09.08 18:51:59.107 bid = 0.0 ask = 0.0 last = 63870.0 volume = 99 flags = 6
2016.09.14 13:37:03.894 Test (Si-9.16,M1)       Tick14: time = 2016.09.08 18:44:59.570 bid = 0.0 ask = 0.0 last = 63870.0 volume = 99 flags = 6
2016.09.14 13:37:03.893 Test (Si-9.16,M1)       Tick13: time = 2016.09.07 23:56:45.427 bid = 0.0 ask = 0.0 last = 64263.0 volume = 1 flags = 6
2016.09.14 13:37:03.893 Test (Si-9.16,M1)       Tick12: time = 2016.09.07 18:52:00.724 bid = 0.0 ask = 0.0 last = 64472.0 volume = 6 flags = 6
2016.09.14 13:37:03.893 Test (Si-9.16,M1)       Tick11: time = 2016.09.07 18:44:59.713 bid = 0.0 ask = 0.0 last = 64472.0 volume = 6 flags = 6
2016.09.14 13:37:03.893 Test (Si-9.16,M1)       Tick10: time = 2016.09.06 23:53:48.388 bid = 0.0 ask = 0.0 last = 64720.0 volume = 1 flags = 6
2016.09.14 13:37:03.893 Test (Si-9.16,M1)       Tick9: time = 2016.09.06 23:53:48.388 bid = 0.0 ask = 0.0 last = 64720.0 volume = 1 flags = 6
2016.09.14 13:37:03.893 Test (Si-9.16,M1)       Tick8: time = 2016.09.06 18:53:15.598 bid = 0.0 ask = 0.0 last = 64679.0 volume = 5 flags = 6
2016.09.14 13:37:03.893 Test (Si-9.16,M1)       Tick7: time = 2016.09.06 18:44:59.960 bid = 0.0 ask = 0.0 last = 64679.0 volume = 5 flags = 6
2016.09.14 13:37:03.892 Test (Si-9.16,M1)       Tick6: time = 2016.09.05 23:59:06.607 bid = 0.0 ask = 0.0 last = 65225.0 volume = 3 flags = 6
2016.09.14 13:37:03.892 Test (Si-9.16,M1)       Tick5: time = 2016.09.05 23:59:06.607 bid = 0.0 ask = 0.0 last = 65225.0 volume = 3 flags = 6
2016.09.14 13:37:03.892 Test (Si-9.16,M1)       Tick4: time = 2016.09.05 23:59:03.529 bid = 0.0 ask = 0.0 last = 65225.0 volume = 3 flags = 6
2016.09.14 13:37:03.892 Test (Si-9.16,M1)       Tick3: time = 2016.09.05 23:54:00.315 bid = 0.0 ask = 0.0 last = 65225.0 volume = 3 flags = 6
2016.09.14 13:37:03.892 Test (Si-9.16,M1)       Tick2: time = 2016.09.05 18:51:40.877 bid = 0.0 ask = 0.0 last = 65178.0 volume = 2 flags = 6
2016.09.14 13:37:03.892 Test (Si-9.16,M1)       Tick1: time = 2016.09.05 18:44:59.998 bid = 0.0 ask = 0.0 last = 65178.0 volume = 2 flags = 6
 
fxsaber:

Ergebnis auf BCS-MetaTrader5

Ist es echt oder eine Demo? So etwas Ähnliches gab es auch bei den Demokonten, wenn ich mich recht erinnere.
 
Rashid Umarov:
Ist es echt oder eine Demo? Wenn ich mich recht erinnere, gab es etwas Ähnliches für Demokonten.

Wirklich. Sie können es nicht reproduzieren?