La última versión está siempre disponible en la página de la biblioteca.
Porque con la que tengo el EA se ralentiza.
Con la biblioteca
2017.08.23 12:03:00.097 Core 3 Si Splice,M1: 992989 ticks, 248280 barras generadas. Entorno sincronizado a las 0:00:00.078. Prueba superada en 0:01:24.069 (incluido el preprocesamiento de ticks 0:00:00.421).
Sin biblioteca
2017.08.23 12:06:38.022 Core 3 Si Splice,M1: 992989 ticks, 248280 barras generadas. Entorno sincronizado a las 0:00:00.079. Prueba superada en 0:01:09.186 (incluido el preprocesamiento de ticks 0:00:00.421).
La única diferencia está en la clase, que funciona durante la desinicialización, corriendo a través de órdenes cerradas - fue escrita en MT4.
Tal clase debería funcionar en unos pocos milisegundos.
La última versión está siempre disponible en la página de la biblioteca.
Una clase así debería funcionar en pocos milisegundos.
Actualizada la librería, resultado mucho mejor
2017.08.23 14:02:22.204 Core 3 Si Splice,M1: 992989 ticks, 248280 barras generadas. Entorno sincronizado a las 0:00:00.062. Prueba superada en 0:01:10.341 (incluido el preprocesamiento de ticks 0:00:00.437).
for (int i = 0; i < OrdersHistoryTotal(); i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
// ...
Esto lleva a llamar a OrdersHistoryTotal() en cada pasada del bucle. La función está optimizada y se ejecuta rápidamente, pero seguirá comprobando los cambios en el Historial cada vez. Lo que obviamente es innecesario y consume un tiempo precioso. Por eso es correcto escribirlo de esta manera
constint Total = OrdersHistoryTotal();
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
// ...
// Lista de cambios:// 26.08.2017:// Añadir: Añadido OrderOpenTimeMsc() y OrderCloseTimeMsc() - tiempo correspondiente en milisegundos.// Fix: Anteriormente todos los tickets de operaciones tenían tipo int, como en MT4. Debido a casos de ir más allá de int-type en MT5, el tipo de tickets se ha cambiado a long.// En consecuencia, OrderTicket y OrderSend devuelven valores long. El modo de retorno del mismo tipo que en MT4 (int) se habilita mediante// escribiendo la siguiente línea antes #include <MT4Orders.mqh>// #define MT4_TICKET_TYPE // Obliga a OrderSend y OrderTicket a devolver un valor del mismo tipo que en MT4 - int.
// Lista de cambios:// 03.09.2017:// Añadir: Añadido OrderTicketOpen() - Ticket de transacción de apertura de posición MT5// OrderOpenReason() - motivo de la operación de apertura de MT5 (motivo de la apertura de una posición)// OrderCloseReason() - motivo de la operación de cierre de MT5 (motivo del cierre de la posición)
Un ejemplo de cierta susceptibilidad de la biblioteca a las funciones estándar MQL5
#include <MT4Orders.mqh>
voidOnStart()
{
if (PositionsTotal() > 1)
{
OrderSelect(0, SELECT_BY_POS); // Órdenes MT4 seleccionadas.OrderPrint(); // Imprimir una posición como en MT4PositionGetTicket(1); // Seleccionado por MQL5OrderPrint(); // Imprimir una posición como en MT4
}
}
¿Dónde puedo conseguir la última biblioteca?
La última versión está siempre disponible en la página de la biblioteca.
Porque con la que tengo el EA se ralentiza.
Con la biblioteca
2017.08.23 12:03:00.097 Core 3 Si Splice,M1: 992989 ticks, 248280 barras generadas. Entorno sincronizado a las 0:00:00.078. Prueba superada en 0:01:24.069 (incluido el preprocesamiento de ticks 0:00:00.421).
Sin biblioteca
2017.08.23 12:06:38.022 Core 3 Si Splice,M1: 992989 ticks, 248280 barras generadas. Entorno sincronizado a las 0:00:00.079. Prueba superada en 0:01:09.186 (incluido el preprocesamiento de ticks 0:00:00.421).
La única diferencia está en la clase, que funciona durante la desinicialización, corriendo a través de órdenes cerradas - fue escrita en MT4.
Tal clase debería funcionar en unos pocos milisegundos.
La última versión está siempre disponible en la página de la biblioteca.
Una clase así debería funcionar en pocos milisegundos.
Actualizada la librería, resultado mucho mejor
2017.08.23 14:02:22.204 Core 3 Si Splice,M1: 992989 ticks, 248280 barras generadas. Entorno sincronizado a las 0:00:00.062. Prueba superada en 0:01:10.341 (incluido el preprocesamiento de ticks 0:00:00.437).
Actualizada la biblioteca, mucho mejor resultado
Ten en cuenta este matiz. Mucha gente escribe así
Esto lleva a llamar a OrdersHistoryTotal() en cada pasada del bucle. La función está optimizada y se ejecuta rápidamente, pero seguirá comprobando los cambios en el Historial cada vez. Lo que obviamente es innecesario y consume un tiempo precioso. Por eso es correcto escribirlo de esta manera
Será más rápido.
// if (MT4ORDERS::OrderSendBug)
// // {
// Alert("¡BUG!!!!!!");
//
// //MT4ORDERS_BENCHMARK;
// }
¿qué es esta alerta en el código? ¿da un "bug" si el historial no se ha sincronizado durante un cierto tiempo?
Lo encontré antes en los kaments, la pregunta ya no está. Así que no es nada crítico, también aparecía a veces.
// if (MT4ORDERS::OrderSendBug)
// // {
// Alert("¡BUG!!!!!!");
//
// //MT4ORDERS_BENCHMARK;
// }
¿qué es esta alerta en el código? ¿da un "bug" si el historial no se ha sincronizado durante un cierto tiempo?
Lo encontré antes en los kaments, la pregunta ya no está. Así que no es nada crítico, también aparecía a veces.
Sí, es cierto. Un error raro de los desarrolladores. Sólo en la biblioteca durante más de un mes se ve así
Te recomiendo encarecidamente que actualices.
Sí, es cierto. Un error raro de los desarrolladores. Sólo en la biblioteca durante más de un mes esto es lo que parece
Muy recomendable actualizar.
Foro sobre trading, sistemas automatizados de trading y comprobación de estrategias de trading
Bibliotecas: TesterBenchmark
fxsaber, 2017.09.05 09:36 pm.
MT4Orders lag desde el MQL5 puro optimizado al máximo es menos de un por ciento.