Bibliotecas: MT4Orders - página 60

 
Vitaly Muzichenko:

¿Por qué tan triste?

Si descarga el archivo de la KB, debería estar bien.

 
Vitaly Muzichenko:

¿Por qué tan triste?


Informado a https://www.mql5.com/ru/forum/1111/page3003#comment_21981258, pero parece que sigue ahí. Pero sólo afecta a la visualización. Si hace clic en un archivo y descargarlo, todo está bien.

 
traveller00:

Informado a https://www.mql5.com/ru/forum/1111/page3003#comment_21981258 pero parece que sigue ahí. Pero sólo afecta a la visualización. Si haces clic en un archivo y lo descargas, todo es normal.

Gracias. Sí, así se visualiza bien.

 

Esta es una peculiaridad interesante del estilo MT4, por eso escribo aquí en lugar de en el hilo del perfil.


A primera vista estos dos códigos deberían producir el mismo resultado.

while (OrdersTotal() <= 1)
  if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
  else
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    


while (OrdersTotal() <= 1)
  if (!OrdersTotal())
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    
  else if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);


De hecho, no es así. Trate de darse cuenta de la razón.

Особенности языка mql4, тонкости и приёмы работы
Особенности языка mql4, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql4, примеры решения тех, или иных задач...
 
// Lista de cambios:
// 12.05.2021
// Añadir: La macro MT4ORDERS_BYPASS_MAXTIME corrige las siempre presentes desincronizaciones del entorno comercial de MT5.

¡Actualización histórica de la librería! La única librería del mundo capaz de compensar las constantes desincronizaciones del entorno de trading MT5. Modesto, pero cierto.


Sólo tiene que escribir la macro correspondiente. He aquí un ejemplo.

// Demostración de la DECISIÓN de abrir una posición doble en MT5.
// https://www.mql5.com/ru/forum/368178/page13#comment_22171524

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Tiempo máximo (en µs) de espera para la sincronización del entorno comercial
#include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define  MinLot SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN)

void OnStart()
{
  MT4ORDERS::OrderSend_MaxPause = 0; // Rechazar la corrección de resultados incorporada en MT5-OrderSend.
  
  while (!IsStopped() && OrdersTotal() <= 1)
    if (!OrdersTotal())
      OrderSend(_Symbol, OP_BUY, MinLot, Ask, 0, 0, 0);    
    else if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
    
  Print(MT4ORDERS::ByPass.ToString()); // Imprime las estadísticas de sincronización.
}


Este script abre y cierra posiciones alternativamente. Se detendrá sólo en caso de inversión de la posición(una aflicción común MT5) - fallo de la biblioteca. Si alguien se encuentra con un problema de este tipo, por favor hágamelo saber.


Para mí esta actualización de la biblioteca es una necesidad. Recomendado.


ZY El mecanismo de sincronización es muy rápido.

Amount = 126/247 = 51.01%, Time(mcs) = 983/9915 = 9.91%, TimeAvg = 40 mcs, MaxInterval = 2483 mcs.
El mecanismo se invocó 247 veces (9915 µs.), de las cuales 126(983 µs. ) no se sincronizaron. El tiempo medio del mecanismo es de 40 µs. El máximo es de 2483 µs.
 
Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

Error encontrado:

La función OrderOpenReason() devuelve (ENUM_DEAL_REASON)DEAL_REASON_TP para órdenes cerradas en takeprofit.

 
fxsaber:
#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Tiempo máximo (en µs) de espera para la sincronización del entorno comercial

Gracias por la actualización.

¿Qué ocurre una vez transcurrido este segundo? ¿Seguirá funcionando en ausencia de sincronización?


fxsaber:
MT4ORDERS::OrderSend_MaxPause = 0; // Rechazar la corrección de resultados incorporada en MT5-OrderSend.

¿Es necesario que esto se prescriba en los robots de combate?

 
Andrey Khatimlianskii:

¿Qué ocurre una vez transcurrido este segundo? ¿Continuará la operación en ausencia de sincronización?

¿O basta con comprobar MT4ORDERS::ByPass.Is() antes de las operaciones de trading (para asegurarse de que no hay desincronización)?

 
Andrey Khatimlianskii:

¿Qué ocurre una vez transcurrido este segundo? ¿Continuará la operación en ausencia de sincronización?

Sí, continuará emitiendo una Alerta. Pero me cuesta imaginar que un segundo no sea suficiente. La sincronización dura milisegundos.

Si eso ocurre, es aconsejable informar de ello aquí.

¿Es algo que haya que escribir en los robots de combate?

No. Si ejecutas el script anterior sin esta línea, lo más probable es que las estadísticas muestren que no hubo ni una sola desincronización. Necesitaba esta línea como un factor adicional que provocara la detección del problema. Casi inicialmente, la librería intenta llevar cada solicitud de operación al estado de sincronización. Desactivé esta línea a propósito para complicar la tarea y probar un mecanismo independiente para identificar la desincronización.