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 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?
Примечание
Функция может быть применена только к динамическим массивам. При этом необходимо иметь ввиду, что нельзя изменять размер для динамических массивов,
назначенных в качестве индикаторных буферов функцией SetIndexBuffer(). Для индикаторных буферов все операции по изменению размера производит
исполняющая подсистема терминала.
Общее число элементов в массиве не может превышать 2147483647.
La secuencia de comandos produce ticks cuando las mejores bandas cambian en el mismo milisegundo
#property script_show_inputssinputint Count = 10000; // Количество тиков на проверку#define TOSTRING(A) " " + #A + " = " + (string)Tick.A
string TickToString( constMqlTick &Tick )
{
staticint i = 0;
i++;
return("Tick" + (string)i + ":" + TOSTRING(time) + "." + (string)(Tick.time_msc %1000) +
TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume));
}
voidOnStart()
{
MqlTick Ticks[];
constint 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.1311:58:46.861 Test (RTS-9.16,M1) Tick14: time = 2016.09.1310:12:55.819 bid = 98220.0 ask = 98240.0 last = 98240.0 volume = 22016.09.1311:58:46.861 Test (RTS-9.16,M1) Tick13: time = 2016.09.1310: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.1311:58:46.861 Test (RTS-9.16,M1) Tick4: time = 2016.09.1310:00:00.235 bid = 98490.0 ask = 99040.0 last = 98500.0 volume = 82016.09.1311:58:46.861 Test (RTS-9.16,M1) Tick3: time = 2016.09.1310:00:00.235 bid = 98490.0 ask = 98600.0 last = 98500.0 volume = 82016.09.1311:58:46.861 Test (RTS-9.16,M1)
2016.09.1311:58:46.861 Test (RTS-9.16,M1) Tick2: time = 2016.09.1310:00:00.235 bid = 98490.0 ask = 98600.0 last = 98500.0 volume = 82016.09.1311:58:46.861 Test (RTS-9.16,M1) Tick1: time = 2016.09.1310: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)?
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.
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
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?
Un array dinámico está limitado a INT_MAX, por lo que es mejor establecer el array a este tamaño de inmediato.
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ú? :-)
La secuencia de comandos produce ticks cuando las mejores bandas cambian en el mismo milisegundo
Parte del resultado:
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:
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)?
¿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.