Bibliotecas: MT4Orders - página 64

 
mktr8591:
Pero no ocurre cada 15 minutos, ¿verdad?

Sí.

 

Para los que utilizan este paquete.

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

Bibliotecas: MT4Orders

fxsaber, 2021.05.12 21:58

#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

Recomiendo actualizar el sincronizador.

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading.

Bibliotecas: TradesID

fxsaber, 2021.06.30 15:53

ByPass.mqh ha sido actualizado. Funciona correctamente en la situación de borrar una orden parcialmente ejecutada. Añadido logging cuando se producen problemas.

Hasta que se solucione, recomiendo trabajar en b2958.

 
fxsaber:

Por favor, aclare algunos puntos del código MT4Orders.mqh (de 2021.06.01):

1. línea 1413 HistoryDealSelect2():
else if (::HistoryDealGetInteger(DealTicket, DEAL_TIME_MSC) < OrderTimeFill)
            break;

aquí se interrumpe el ciclo histórico si la hora de la operación es inferior a la hora de la orden.

¿No ocurre en la práctica que el tiempo de una operación en mqh es menor que el tiempo de la orden, que la operación ejecutó (no me refiero a situaciones en las que la orden fue ejecutada por varias operaciones a la vez)?

2. línea 2259 MT4OrderSend():

return((arrow_color == INT_MAX) ? (MT4ORDERS::NewOrderCheck() ? 0 : -1) :
           ((((int)arrow_color != INT_MIN) || MT4ORDERS::NewOrderCheck()) &&
            MT4ORDERS::OrderSend(MT4ORDERS::LastTradeRequest, MT4ORDERS::LastTradeResult)
          #ifdef  MT4ORDERS_BYPASS_MAXTIME
            && (!MT4ORDERS::IsHedging || _B2(MT4ORDERS::ByPass += MT4ORDERS::LastTradeResult.order))
          #endif // #ifdef MT4ORDERS_BYPASS_MAXTIME
                                                                                          ?
            (MT4ORDERS::IsHedging ? (long)MT4ORDERS::LastTradeResult.order : // PositionID == Result.order - Función MT5-Hedge
             ((MT4ORDERS::LastTradeRequest.action == TRADE_ACTION_DEAL) ?
              (MT4ORDERS::IsTester ? (_B2(::PositionSelect(MT4ORDERS::LastTradeRequest.symbol)) ? PositionGetInteger(POSITION_TICKET) : 0) :
                                      // HistoryDealSelect en MT4ORDERS::OrderSend
                                      ::HistoryDealGetInteger(MT4ORDERS::LastTradeResult.deal, DEAL_POSITION_ID)) :
              (long)MT4ORDERS::LastTradeResult.order)) : -1));

¿Por qué para la compensación la orden no se añade a MT4ORDERS::ByPass+= ?

3: En algunas funciones se utiliza la macro WHILE(A) : línea 1088

#define  WHILE(A) while ((!(Res = (A))) && MT4ORDERS::Waiting())

¿Por qué no comprueba IsStopped()? ¿Para optimizar el tiempo? ¿Y si el usuario establece OrderSend_MaxPause a varios segundos?

4. He notado que antes de OrderSend(LastTradeRequest, LastTradeResult) no borra LastTradeResult. ¿Esto lo hace la propia función? ¿Como una característica no documentada?

 
mktr8591:

Por favor, aclare algunos puntos del código MT4Orders.mqh (de 2021.06.01):

1. línea 1413 HistoryDealSelect2():

aquí se interrumpe el ciclo histórico si la hora de la operación es inferior a la hora de la orden.

¿No ocurre en la práctica que el tiempo de una operación en mqh es menor que el tiempo de la orden, que la operación ejecutó (no me refiero a situaciones en las que la orden fue ejecutada por varias operaciones a la vez)?

Tomado muy fuera de contexto. Mira donde se llama a HistoryDealSelect2. Result.deal se encuentra allí, cuando es nulo con Result.order completamente ejecutado. Límite de tiempo para guardar. pase de bucle. Probablemente probado en un gran problema de la historia. No recuerdo ya. Yo mismo no uso el sincronizador incorporado en OrderSend, porque tomo el null MT4ORDERS::OrderSend_MaxPause.

 
mktr8591:

2. línea 2259 MT4OrderSend():

¿Por qué no se añade la orden a MT4ORDERS::ByPass+= ?

No he pensado en ByPass para netting. Lo escribo para mi.
 
mktr8591:

3. en algunas funciones se utiliza la macro WHILE(A) : línea 1088

¿Por qué no comprueba IsStopped()? ¿Para optimizar el tiempo? ¿Y si el usuario establece OrderSend_MaxPause en varios segundos?

En la práctica no veo ningún problema aquí. No lo he añadido definitivamente no por olvido.

 
mktr8591:

4. He observado que antes de OrderSend(LastTradeRequest, LastTradeResult) no se borra LastTradeResult. ¿Esto lo hace la propia función? ¿Como una característica no documentada?

Parece que todos los campos MqlTradeResult son rellenados por OrderSend, así me ahorro la limpieza.

 
fxsaber:


Gracias.

La biblioteca es genial.

 
fxsaber:
No he diseñado ByPass para la red. Lo escribo para mí.
Miré el código ByPass desde el punto de vista de la red - todo debería funcionar bien. (por supuesto, usted debe probarlo).
 
Торговый оборот в триллион USD и другие достижения библиотеки за пять лет.
Торговый оборот в триллион USD и другие достижения библиотеки за пять лет.
  • www.mql5.com
Для MetaTrader 5 написана торговая библиотека MT4Orders . Начиналось так. // Список изменений: // 03.08.2016: //   Релиз - писался и проверялся только на оффлайн-тестере. Сегодня библиотеке