Bibliotecas: MT4Orders - página 15

 
Aleksey Vyazmikin:

¿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.

 
fxsaber:

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).


 
Aleksey Vyazmikin:

Actualizada la biblioteca, mucho mejor resultado

Ten en cuenta este matiz. Mucha gente escribe así

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

const int Total = OrdersHistoryTotal();

for (int i = 0; i < Total; i++)
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    // ...

Será más rápido.

 
// 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)
 

// 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.

 
Maxim Dmitrievsky:

// 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í

      if (!Res || MT4ORDERS::OrderSendBug)
      {
        Alert(Res ? "OrderSend - BUG!" : "MT4ORDERS - not Sync with History!");

Te recomiendo encarecidamente que actualices.

 
fxsaber:

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.

Actualizado hace un momento, gracias )
 
Un ejemplo de cierta susceptibilidad de la biblioteca a las funciones estándar MQL5
#include <MT4Orders.mqh>

void OnStart()
{
  if (PositionsTotal() > 1)
  {
    OrderSelect(0, SELECT_BY_POS); // Órdenes MT4 seleccionadas.
    OrderPrint();                  // Imprimir una posición como en MT4
    
    PositionGetTicket(1);          // Seleccionado por MQL5
    OrderPrint();                  // Imprimir una posición como en MT4
  }
}