Probando 'CopyTicks' - página 12

 
Dmitriy Skub:

Al cabo de un año, resumimos los resultados intermedios:

- la función CopyTicks funciona correctamente (como se describe);

- Los datos actuales del mercado de futuros obtenidos mediante esta función coinciden con los datos de la bolsa;

- El historial de datos de ticks del mercado de futuros para los instrumentos más líquidos es correcto a partir del 28.07.2016 (obviamente, inicio de la última versión del servidor);

Todo lo anterior se aplica al terminal MT5 versión 1395 y a las cuentas reales del mercado de derivados en Open-Broker. En principio, el tema está cerrado.

¿Has comprobado también la dirección de las operaciones?
 

Tengo una pregunta sobre CopyBuffer

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

¿Permite mql5 escribir un indicador que dibuje gráficos en diferentes ventanas o que acceda a los buffers de los indicadores en otras ventanas?

fxsaber, 2016.09.09 10:20

Tengo esta pregunta. ¿Es razonable (desde el punto de vista del rendimiento) cuando se utiliza CopyBuffer añadir buffers para el número de valores modificados(el recuento de parámetros de entrada no es cero) o hacer siempre una copia completa del buffer?

pero casi la misma pregunta sobre CopyTicks.

¿Es razonable (desde el punto de vista del rendimiento) cuando se utiliza CopyTicks añadir nuevos valores a los ticks ya recogidos o hacer siempre la solicitud completa desde el lugar, donde se requieren los ticks y no almacenar los valores recogidos previamente?

 
Al añadir ticks a un array dinámico, ¿cuál es el mejor tamaño de reserva en ArrayResize?
 
fxsaber:
Al añadir ticks a un array dinámico, ¿cuál es el mejor tamaño de reserva en ArrayResize?
Un array dinámico está limitado a INT_MAX, por lo que es mejor establecer este tamaño de inmediato.
 
prostotrader:
Un array dinámico está limitado a INT_MAX, por lo que es mejor establecer el array a este tamaño de inmediato.
Es una pena lo de la memoria del pájaro.
 
prostotrader:
Un array dinámico está limitado a INT_MAX, por lo que es mejor establecer el array a este tamaño de inmediato.
Mikalas, ¿eres tú? :-)
 
Dennis Kirichenko:
Mikalas, ¿eres tú? :-)
Примечание

Функция может быть применена только к динамическим массивам. При этом необходимо иметь ввиду, что нельзя изменять размер для динамических массивов, 
назначенных в качестве индикаторных буферов функцией SetIndexBuffer(). Для индикаторных буферов все операции по изменению размера производит 
исполняющая подсистема терминала.

Общее число элементов в массиве не может превышать 2147483647.
 
prostotrader:
Veo por tu letra que lo eres ;-)
 

La secuencia de comandos produce ticks cuando las mejores bandas cambian en el mismo milisegundo

#property script_show_inputs

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

#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 = 1; i < Amount; i++)
    if (Ticks[i].time_msc == Ticks[i - 1].time_msc) // ищем соседние тики с одним временем (с точностью до мс)
//      if ((Ticks[i].bid > Ticks[i - 1].bid) ||(Ticks[i].ask < Ticks[i - 1].ask)) // ищем выставление лимитной заявки внутрь спреда
        Print(TickToString(Ticks[i - 1]) + "\n" + TickToString(Ticks[i]) + "\n");
}

Parte del resultado:

2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick14: time = 2016.09.13 10:12:55.819 bid = 98220.0 ask = 98240.0 last = 98240.0 volume = 2
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick13: time = 2016.09.13 10:12:55.819 bid = 98230.0 ask = 98240.0 last = 98240.0 volume = 2

Aquí, en el mismo milisegundo alguien logró retirar su BuyLimit= 98230. Exactamente lo retiró, no fue golpeado con el marcador.

La comprobación ha demostrado que todas esas acciones en un milisegundo son retiradas (no ejecuciones) del mejor límite de la copa.

Otra parte del resultado:

2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick4: time = 2016.09.13 10:00:00.235 bid = 98490.0 ask = 99040.0 last = 98500.0 volume = 8
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick3: time = 2016.09.13 10:00:00.235 bid = 98490.0 ask = 98600.0 last = 98500.0 volume = 8
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick2: time = 2016.09.13 10:00:00.235 bid = 98490.0 ask = 98600.0 last = 98500.0 volume = 8
2016.09.13 11:58:46.861 Test (RTS-9.16,M1)      Tick1: time = 2016.09.13 10:00:00.235 bid = 98500.0 ask = 98600.0 last = 98500.0 volume = 8

Aquí, de alguna manera, en la apertura de la sesión, alguien logró eliminar tanto SellLimit como BuyLimit en un milisegundo. Es decir, ¡dos acciones en un milisegundo!

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

¿O si a través de OrderSendAsync se envían dos órdenes limitadas (BuyLimit1_price < BuyLimit2_price) dentro del spread, entonces la bolsa generará dos ticks consecutivos con mejora del precio de compra al mismo tiempo (con una precisión de 1ms)?

 
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.


¿De dónde has sacado esos conocimientos?

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

Hay cientos de operaciones en 1ms.