Probando 'CopyTicks' - página 13

 
prostotrader:

¿Cómo sabes tanto?

Además de Plaza II, existe el protocolo FAST/FIX

Cientos de operaciones se realizan en 1 ms

La historia de las garrapatas demuestra que no existe tal cosa en los futuros RTS.
 
fxsaber:

¿Cómo puede ser esto? Al fin y al cabo, ni siquiera los HFT pueden eliminar una orden limitada en menos de 1ms de tiempo.

  • Existen tipos especiales de órdenes de mercado que combinan varias acciones a la vez (No MT5).
  • ¿Quién dice que la discreción de las acciones tiene que ser fijada por un tiempo de 1ms? Toda acción comercial es esencialmente un registro en el núcleo de la bolsa, que es una base de datos. La escritura en la base de datos es mucho más rápida que 1mseg. Por la misma razón, las ofertas coincidentes forman largas secuencias de ticks con tiempos de ocurrencia idénticos, hasta en millonésimas de segundo. Es decir, las operaciones se producen realmente de forma simultánea (se escriben en la base de datos), aunque aparezcan en el gráfico como una última secuencia larga.
 
Vasiliy Sokolov:
  • Existen tipos especiales de órdenes de mercado que combinan varias acciones a la vez (No MT5).
  • ¿Quién ha dicho que la discreción de las acciones debe establecerse por un tiempo de 1mseg? Cualquier acción comercial es esencialmente una escritura en el núcleo de la bolsa, que es una base de datos.
No se han detectado cuatro ticks en un milisegundo. Tres - una vez. Dos: decenas de cientos de miles.
  • La escritura en la base de datos es mucho más rápida que 1mseg. Por la misma razón, las ofertas coincidentes forman largas secuencias de ticks con tiempos de ocurrencia idénticos, hasta en millonésimas de segundo. Es decir, las operaciones se producen realmente de forma simultánea (se escriben en la base de datos), aunque aparezcan en el gráfico como una última secuencia larga.
Lo que pasa es que no se han monitorizado los flippers, sino los bestbands (COPY_TICKS_INFO). Así que 1mseg es razonable. Si hay HFT, ¿dónde están? A juzgar por el guión, son una especie de frenos.
 
El script produce COPY_TICKS_INFO con precios cero
#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]));
}

Resultado

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

¿Fallo de CopyTicks?

 

El indicador muestra que CopyTicks puede no dar los últimos ticks

#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);
}

Resultado

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:
La secuencia de comandos produce COPY_TICKS_INFO con precios cero

Resultado

¿Fallo de CopyTicks?

También las banderas de salida
 
Slawa:
También se pueden imprimir las banderas

Por ejemplo

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:
También se pueden imprimir las banderas

Corregido

#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]));
}

Resultado en 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:

Resultado en BCS-MetaTrader5

¿Es real o demo? Si no recuerdo mal, había algo similar en las cuentas de demostración.
 
Rashid Umarov:
¿Es real o demo? Si no recuerdo mal, había algo similar en las cuentas de demostración.

Real. ¿No puede reproducirlo?