Testando 'CopyTicks'. - página 13

 
prostotrader:

Como você sabe tanto?

Além da Plaza II, há o protocolo FAST/FIX

Centenas de operações são realizadas em 1 ms

A história dos carrapatos mostra que não existe tal coisa nos futuros da RTS.
 
fxsaber:

Como isso pode ser? Afinal, mesmo HFTs não podem remover uma ordem limite em menos de 1ms de tempo.

  • Existem tipos especiais de ordens de mercado que combinam várias ações ao mesmo tempo (não MT5).
  • Quem diz que a discrição das ações tem que ser definida por um tempo de 1ms? Qualquer ação comercial é essencialmente um registro no núcleo da bolsa, que é um banco de dados. Escrever para o banco de dados é muito mais rápido do que 1msec. Pela mesma razão, as ofertas combinadas formam longas seqüências de carrapatos com tempos de ocorrência idênticos, até milionésimos de segundo. Ou seja, os negócios realmente ocorrem simultaneamente (escritos no banco de dados), embora apareçam no gráfico como uma longa Última seqüência.
 
Vasiliy Sokolov:
  • Existem tipos especiais de ordens de mercado que combinam várias ações ao mesmo tempo (não MT5).
  • Quem disse que a discrição das ações deve ser definida por um tempo de 1msec? Qualquer ação comercial é essencialmente uma escrita para o núcleo da bolsa, que é um banco de dados.
Quatro carrapatos em um milissegundo ainda não foram detectados. Três - uma vez. Duas - dezenas de centenas de milhares.
  • Escrever para o banco de dados é muito mais rápido do que 1msec. Pela mesma razão, as ofertas combinadas formam longas seqüências de carrapatos com tempos de ocorrência idênticos, até milionésimos de segundo. Ou seja, os negócios ocorrem de fato simultaneamente (escritos no banco de dados), embora apareçam no gráfico como uma longa Última seqüência.
O problema não é que as barbatanas de flippers, mas as bestbands foram monitoradas (COPY_TICKS_INFO). Portanto, 1msec é razoável. Se há HFTs, onde estão? A julgar pelo roteiro, eles são algum tipo de freio.
 
Saídas do script COPY_TICKS_INFO com preço zero
#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

CopyTicks bug?

 

O indicador mostra que o CopyTicks pode não dar os últimos tiquetaques

#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:
O script sai COPY_TICKS_INFO com preço zero

Resultado

CopyTicks bug?

Bandeiras de saída também
 
Slawa:
Emitir também as bandeiras

Por exemplo

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:
Emitir também as bandeiras

Correção

#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 no 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 no BCS-MetaTrader5

É real ou demonstrativo? Se bem me lembro, havia algo semelhante nas contas de demonstração.
 
Rashid Umarov:
É real ou demonstrativo? Se bem me lembro, havia algo semelhante nas contas de demonstração.

Real. Não consegue reproduzi-lo?