Bibliotecas: MT4Orders - página 24

 

Lo siento, no puedo hablar ruso. Yo uso el traductor de Google.

Hace unos días encontré esta biblioteca muy interesante. Pero tengo un problema: envío una orden de mercado a través de OrderSend () y guardo la entrada devuelta por OrderSend (). Después de un tiempo, se alcanzan los stop losses o se obtienen beneficios. Entonces intento seleccionar una orden via OrderSelect(ticket, SELECT_BY_TICKET) con este ticket. En MQL4 la orden se encuentra en el historial. Pero usando esta librería con MQL5, OrderSelect fallará.

He mirado un poco en el código de MT4orders.mqh. MT4ORDERS::SelectByTicket () llama a SelectByExistingTicket(), que falla, y luego a SelectByHistoryTicket(), que espero que tenga éxito. En SelectByHistoryTicket(), HistoryDealSelect() normalmente devuelve false (excepto quizás en una prueba) porque el ticket es un identificador de posición, no un ticket de transacción. ::HistoryOrderSelect() devuelve true, porque el ticket es el mismo que el ticket de la orden (e identificador de posición) (uso MT5 en modo cobertura). Pero MT4HISTORY::IsMT4Order(Ticket) devuelve false. Espero que devuelva true. La función devolverá true si el id de posición es cero. Pero veo que tanto en la prueba como en la cuenta real, el id de posición no es cero y es igual al bit de orden en la orden.

Cualquier ayuda es bienvenida.

 
winloosewin:

Hace unos días encontré esta biblioteca muy interesante. Pero tengo un problema: envío una orden de mercado a través de OrderSend () y guardo la entrada devuelta por OrderSend (). Al cabo de un rato, se alcanzan los stop losses o se obtienen beneficios. Entonces intento seleccionar una orden via OrderSelect(ticket, SELECT_BY_TICKET) con este ticket. En MQL4 la orden se encuentra en el historial. Pero usando esta libreria con MQL5, OrderSelect fallara.

Esto es correcto. Los detalles se describen aquí.

Usted puede hacer PositionTicket = OrderSend(OP_BUY, 2 lotes) y OrderClose(0.2 lotes) + OrderClose(0.3 lotes). Entonces obtendrá dos "posiciones" cerradas (0.2/0.3 lotes) y una posición abierta (1.5 lotes) con un ticket igual a PositionTicket. Esta es una peculiaridad de MT5. Por lo tanto, es incorrecto seleccionar una posición por su POSITION_ID en el Historial de Operaciones en el modo SELECT_BY_TICKET+MODE_HISTORY.


La memorización de tickets es un mal estilo, aunque es popular. La forma correcta es cuando en cada evento el robot de trading lee todo el entorno desde cero.


ZY Aquí se puede ver aproximadamente la misma situación que la descrita anteriormente

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

Bibliotecas: MT4Orders

fxsaber, 2018.04.14 09:10 AM

Ejemplo

#include <MT4Orders.mqh>

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnInit()
{
  long Ticket;
  
  PRINT((Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Bid - 100 * _Point, Bid + 100 * _Point, "Hello World!", 12345)));
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    PRINT(OrderClose(OrderTicket(), 0.3, OrderClosePrice(), 0));
}

void OnDeinit( const int )
{
  const int Total = OrdersHistoryTotal();
  
  for (int i = 1; i < Total; i++)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      OrderPrint();
      
      PRINT(OrderTicket());
      PRINT(OrderMagicNumber());
      PRINT(OrderComment());
      PRINT(OrderTicketOpen());
    }
}


Resultado

2018.03.25 00:00:00   instant buy 1.00 EURUSD at 1.23527 sl: 1.23414 tp: 1.23614 (1.23514 / 1.23527)
2018.03.25 00:00:00   deal #2  buy 1.00 EURUSD at 1.23527 done (based on order #2)
2018.03.25 00:00:00   deal performed [#2  buy 1.00 EURUSD at 1.23527]
2018.03.25 00:00:00   order performed buy 1.00 at 1.23527 [#2  buy 1.00 EURUSD at 1.23527]
2018.03.25 00:00:00   (Ticket=OrderSend(_Symbol,OP_BUY,1,Ask,0,Bid-100*_Point,Bid+100*_Point,Hello World!,12345)) = 2
2018.03.25 00:00:00   instant sell 0.30 EURUSD at 1.23514, close #2 (1.23514 / 1.23527)
2018.03.25 00:00:00   deal #3  sell 0.30 EURUSD at 1.23514 done (based on order #3)
2018.03.25 00:00:00   deal performed [#3  sell 0.30 EURUSD at 1.23514]
2018.03.25 00:00:00   order performed sell 0.30 at 1.23514 [#3  sell 0.30 EURUSD at 1.23514]
2018.03.25 00:00:00   OrderClose(OrderTicket(),0.3,OrderClosePrice(),0) = true
2018.03.26 01:04:40   take profit triggered #2  buy 0.70 EURUSD 1.23527 sl: 1.23414 tp: 1.23614 [#4  sell 0.70 EURUSD at 1.23614]
2018.03.26 01:04:40   deal #4  sell 0.70 EURUSD at 1.23614 done (based on order #4)
2018.03.26 01:04:40   deal performed [#4  sell 0.70 EURUSD at 1.23614]
2018.03.26 01:04:40   order performed sell 0.70 at 1.23614 [#4  sell 0.70 EURUSD at 1.23614]
final balance 10000046.11 EUR
2018.03.26 23:59:59   #3 2018.03.25 00:00:00 buy 0.30 EURUSD 1.23527 1.23414 1.23614 2018.03.25 00:00:00 1.23514 0.00 0.00 -3.16 Hello World! 12345
2018.03.26 23:59:59   OrderTicket() = 3
2018.03.26 23:59:59   OrderMagicNumber() = 12345
2018.03.26 23:59:59   OrderComment() = Hello World!
2018.03.26 23:59:59   OrderTicketOpen() = 2
2018.03.26 23:59:59   #4 2018.03.25 00:00:00 buy 0.70 EURUSD 1.23527 0.00000 1.23614 2018.03.26 01:04:40 1.23614 0.00 0.00 49.27 tp 1.23614 12345
2018.03.26 23:59:59   OrderTicket() = 4
2018.03.26 23:59:59   OrderMagicNumber() = 12345
2018.03.26 23:59:59   OrderComment() = tp 1.23614
2018.03.26 23:59:59   OrderTicketOpen() = 2

Los resultados muestran que se abrió una posición con ticket == 2. Luego se cerró dos veces, creando así dos "posiciones" cerradas en el Historial de Operaciones. Sus tickets son diferentes, pero ambas "posiciones" tienen OrderTicketOpen == 2. Es decir, debe darse cuenta de que si cierra una posición en MT5, su ticket histórico no coincide con el de tiempo real.


Observe que en MT5 incluso los comentarios al cerrar la misma posición en tiempo real son diferentes:"Hello World!" y"tp 1.23614".

 
winloosewin:

Lo siento, no puedo hablar ruso. Yo uso el traductor de Google.

Hace unos días encontré esta biblioteca muy interesante. Pero tengo un problema: envío una orden de mercado a través de OrderSend () y guardo la entrada devuelta por OrderSend (). Después de un tiempo, se alcanzan los stop losses o se obtienen beneficios. Entonces intento seleccionar una orden via OrderSelect(ticket, SELECT_BY_TICKET) con este ticket. En MQL4 la orden se encuentra en el historial. Pero usando esta librería con MQL5, OrderSelect fallará.

He mirado un poco en el código de MT4orders.mqh. MT4ORDERS::SelectByTicket () llama a SelectByExistingTicket(), que falla, y luego a SelectByHistoryTicket(), que espero que tenga éxito. En SelectByHistoryTicket(), HistoryDealSelect() normalmente devuelve false (excepto quizás en una prueba) porque el ticket es un identificador de posición, no un ticket de transacción. ::HistoryOrderSelect() devuelve true porque el ticket es el mismo que el ticket de la orden (e identificador de posición) (estoy usando MT5 en modo cobertura). Pero MT4HISTORY::IsMT4Order(Ticket) devuelve false. Espero que devuelva true. La función devolverá true si el id de posición es cero. Pero veo que tanto en la prueba como en la cuenta real, el id de posición no es cero y es igual al bit de orden en la orden.

Cualquier ayuda es bienvenida.

Para una mejor comprensión de la traducción automática, adjunte el texto en inglés.

 

He encontrado esta biblioteca muy interesante hace unos días. Pero tengo un problema: Envío una orden de mercado a través de OrderSend() y almaceno el ticket devuelto por OrderSend(). Despues de un tiempo el stop loss o take profit es alcanzado. Entonces intento seleccionar la orden via
OrderSelect(ticket, SELECT_BY_TICKET) con este ticket. En MQL4 la orden seria encontrada en el historial. Pero usando esta libreria con MQL5, OrderSelect no tiene exito.

He mirado un poco en el código de MT4orders.mqh . MT4ORDERS::SelectByTicket() llama a SelectByExistingTicket() que falla y luego a SelectByHistoryTicket() que yo esperaría que tuviera éxito. En SelectByHistoryTicket() la función HistoryDealSelect() generalmente devuelve false (excepto quizás en el tester) porque el ticket es el identificador de posición y no el ticket de la operación. ::HistoryOrderSelect() devuelve true porque el ticket es el mismo que el ticket de la orden (y el identificador de posición)(uso MT5 en modo cobertura). Pero MT4HISTORY::IsMT4Order(Ticket) devuelve false. Yo esperaría que devolviera true. La función devolvería true si el identificador de posición fuera cero. Pero veo que tanto en el tester como en una cuenta real el identificador de posición no es cero - e igual al ticket de la orden de entrada.

En otras palabras: No entiendo por qué en la función MT4HISTORY::IsMT4Order() está el siguiente código (devuelve true si el identificador de posición es cero):

    return(/*(::HistoryOrderGetDouble(Ticket, ORDER_VOLUME_CURRENT) > 0) ||*/ !::HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID));

A continuación adjunto mi código de prueba:

void OnTick()
{
   PrintChangesOfMQL5OrderSystemState();

   int total=OrdersTotal();

   double bid = MarketInfo(Symbol(), MODE_BID);
   double ask = MarketInfo(Symbol(), MODE_ASK);

   static int state=0;
   static ulong ticket = 0;

   switch(state)
   {
      case 0:
         ticket = OrderSend(Symbol(), OP_BUY, 1.0, ask, 10, bid - 3*Point, bid + 3*Point);
         state=1;
         break;

      case 1:
         if(0==total)
         {
            bool res = OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
            if(false==res)
            {
               Print("OrderSelect failed with ticket: ", (string)ticket);
               Print("ORDER_POSITION_ID = ", (string)HistoryOrderGetInteger(ticket, ORDER_POSITION_ID));
               HistoryDealSelect(ticket);
               Print("HistoryDealSelect", (string)HistoryDealSelect(ticket), "   MT4HISTORY::IsMT4Deal", (string)MT4HISTORY::IsMT4Deal(ticket));
               HistoryOrderSelect(ticket);
               Print("HistoryOrderSelect", (string)HistoryOrderSelect(ticket), "   ORDER_POSITION_ID", ::HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID));
               
               ExpertRemove();
            }
         }
         break;
   }
}

PrintChangesOfMQL5OrderSystemState() es una función sencilla que imprime el estado del sistema de pedidos MQL5 cada vez que se detecta un cambio.

Aquí está la salida del código de prueba (ejecutado en el probador):

EURUSD  bid=1.087360   ask=1.087860
263207 EURUSD 2016.01.03 00:00:00  

HistDeal: ticket: 1  position_id: 0  MAGIC: 0  balance  open_price: 0.000000  volume: 0.000000  opened by order: 0  type=balance  reason=client  entry=in


--------------------
EURUSD  bid=1.087350   ask=1.087850
263207 EURUSD 2016.01.03 00:00:00  

HistDeal: ticket: 2  position_id: 2  MAGIC: 0  buy  open_price: 1.087860  volume: 1.000000  opened by order: 2  type=buy  reason=expert  entry=in
HistDeal: ticket: 1  position_id: 0  MAGIC: 0  balance  open_price: 0.000000  volume: 0.000000  opened by order: 0  type=balance  reason=client  entry=in

HistOrder ticket: 2  position_id: 2  MAGIC: 0  buy  open_price: 1.087860  volume: 1.000000  cur_vol=0.000000  type=buy  reason=expert
Order:    ticket: 0  position_id: 0  MAGIC: 0  buy  open_price: 0.000000  volume: 0.000000  cur_vol=0.000000  type=buy  reason=client

Position: ticket: 2  position_id: 2  MAGIC: 0  buy  open_price: 1.087860  volume: 1.000000  reason=expert

--------------------
EURUSD  bid=1.087330   ask=1.087830
263207 EURUSD 2016.01.03 00:00:16  

HistDeal: ticket: 3  position_id: 2  MAGIC: 0  sell  open_price: 1.087330  volume: 1.000000  opened by order: 3  type=sell  reason=stop loss  entry=out
HistDeal: ticket: 2  position_id: 2  MAGIC: 0  buy  open_price: 1.087860  volume: 1.000000  opened by order: 2  type=buy  reason=expert  entry=in
HistDeal: ticket: 1  position_id: 0  MAGIC: 0  balance  open_price: 0.000000  volume: 0.000000  opened by order: 0  type=balance  reason=client  entry=in

HistOrder ticket: 3  position_id: 2  MAGIC: 0  sell  open_price: 1.087330  volume: 1.000000  cur_vol=0.000000  type=sell  reason=stop loss
HistOrder ticket: 2  position_id: 2  MAGIC: 0  buy  open_price: 1.087860  volume: 1.000000  cur_vol=0.000000  type=buy  reason=expert

--------------------

OrderSelect failed with ticket:  2
ORDER_POSITION_ID =  2
HistoryDealSelect true    MT4HISTORY::IsMT4Deal false
HistoryOrderSelect true    MT4HISTORY::IsMT4Order false    ::HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID) 2


Puede ver que HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID) devuelve 2 y no cero. Esta es la razón por la que MT4HISTORY::IsMT4Order() devuelve false.



Cualquier ayuda es apreciada.
Общие принципы - Торговые операции - MetaTrader 5
Общие принципы - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 
winloosewin:
Ya te han contestado más arriba.


En otras palabras: No entiendo por qué en la función MT4HISTORY::IsMT4Order() está el siguiente código (devuelve true si el id de posición es cero):

A continuación adjunto mi código de prueba:

PrintChangesOfMQL5OrderSystemState() es una función sencilla que imprime el estado del sistema de órdenes MQL5 cada vez que se detecta un cambio.

Aquí está la salida del código de prueba (ejecutado en el probador):


Se puede ver que HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID) devuelve 2 y no cero. Esta es la razón por la que MT4HISTORY::IsMT4Order() devuelve false.

No te das cuenta de que una orden en MT5 y MT4 son entidades diferentes.

 
fxsaber:
Ya te han contestado más arriba.


Usted no entiende que una orden en MT5 y en MT4 son entidades diferentes.

Entiendo los sistemas de orden de MQL5 y de MQL4 y sus diferencias.


fxsaber:
Por lo tanto, es incorrecto seleccionar una posición por su POSITION_ID en el Historial de Operaciones en modo SELECT_BY_TICKET+MODE_HISTORY.

Sí, ya sé que la función MQL5 HistoryOrderSelect() espera un ticket y no un identificador de posición.

Pero mi codigo de prueba es codigo MQL4 valido (excepto las llamadas a las funciones MQL5 HistoryOrderSelect() y HistoryDealSelect())

y en MQL4 la funcion OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) devuelve true como era de esperar.

Que yo sepa, el propósito de la librería es emular el sistema de pedidos de MQL4 lo mejor posible en MQL5. Por lo tanto, yo esperaría que con

la libreria la funcion OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) tambien devuelva true.

He mirado el código y he intentado averiguar por qué devuelve false.

Primero: Como trabajo en un sistema de cobertura MQL5, la función

ticket = OrderSend(Symbol(), OP_BUY, 1.0, ask, 10, bid - 3*Point, bid + 3*Point);

asigna a la variable 'ticket' el ticket de la orden que es igual al identificador de la posición (futura) en MQL5 hedge. Esto se puede ver en el código

    return((arrow_color == INT_MAX) ? (MT4ORDERS::NewOrderCheck() ? 0 : -1) :
           ((((int)arrow_color != INT_MIN) || MT4ORDERS::NewOrderCheck()) &&
            MT4ORDERS::OrderSend(MT4ORDERS::LastTradeRequest, MT4ORDERS::LastTradeResult) ?
            (MT4ORDERS::IsHedging ? (long)MT4ORDERS::LastTradeResult.order : // PositionID == Result.order es una característica de MT5-Hedge
             ((MT4ORDERS::LastTradeRequest.action == TRADE_ACTION_DEAL) ?
              (MT4ORDERS::IsTester ? (::PositionSelect(MT4ORDERS::LastTradeRequest.symbol) ? PositionGetInteger(POSITION_TICKET) : 0) :
                                      // HistoryDealSelect en MT4ORDERS::OrderSend
                                      ::HistoryDealGetInteger(MT4ORDERS::LastTradeResult.deal, DEAL_POSITION_ID)) :
              (long)MT4ORDERS::LastTradeResult.order)) : -1));

de la función MT4OrderSend(). Se devuelve lo siguiente:

(long)MT4ORDERS::LastTradeResult.order : // PositionID == Result.order es una característica de MT5-Hedge

Al analizar lo que hace la librería al ejecutar el código

bool res = OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);

Veo que la función SelectByHistoryTicket() se ejecuta con el ticket que tengo almacenado en la variable 'ticket'.

En esta función se llama a la función HistoryOrderSelect(ticket) - con el ticket que es igual al ticket de la orden y el identificador de posición.

Con mi llamada MQL4 OrderSelect() no llamo a HistoryOrderSelect(ticket) yo mismo - está en la librería.

Sólo en mi código de prueba llamo a HistoryOrderSelect(ticket) y HistoryDealSelect(ticket) directamente para ver lo que ocurre dentro de la librería:

/* Lo siguiente es código MQL5 y no MQL4 - sólo para comprobar lo que ocurre dentro de la librería: */
               Print("ORDER_POSITION_ID = ", (string)HistoryOrderGetInteger(ticket, ORDER_POSITION_ID));
               HistoryDealSelect(ticket);
               Print("HistoryDealSelect", (string)HistoryDealSelect(ticket), "   MT4HISTORY::IsMT4Deal", (string)MT4HISTORY::IsMT4Deal(ticket));
               HistoryOrderSelect(ticket);
               Print("HistoryOrderSelect", (string)HistoryOrderSelect(ticket), "   ORDER_POSITION_ID", ::HistoryOrderGetInteger(Ticket, ORDER_POSITION_ID));


Resumiendo: Según el valor de retorno de OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) la librería no emula el sistema de pedidos MQL4 en MQL.

MQL4 en MQL5 correctamente.

 

Sí, sé que se devuelve true cuando se llama a OrderSelect() directamente después de la apertura de la posición.

En este caso tenemos una posición MQL5 abierta y la librería encuentra la posición al llamar a OrderSelect().

Esto se hace en la función interna SelectByExistingTicket() de la librería.


Pero el punto clave es que OrderSelect(ticket) devuelve false cuando la posición MQL5 es cerrada por stop loss o take profit.

Por favor, ejecuta mi código de prueba para verificarlo (si tu broker no acepta SL y TP tan cercanos, por favor, hazlos más amplios para evitar el rechazo del OrderSend()).

Общие принципы - Торговые операции - MetaTrader 5
Общие принципы - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 
winloosewin:

Pero el punto clave es que OrderSelect(ticket) devuelve false cuando la posición MQL5 se cierra por stop loss o take profit.

Leer parte de mi respuesta detallada de nuevo

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

Bibliotecas: MT4Orders

fxsaber, 2018.08.06 14:21

Es correcto. Los detalles están descritos aquí.

Puedes hacer PositionTicket = OrderSend(OP_BUY, 2 lotes) y OrderClose(0,2 lotes) + OrderClose(0,3 lotes). Entonces obtendrá dos "posiciones" cerradas (0.2/0.3 lotes) y una posición abierta (1.5 lotes) con un ticket igual a PositionTicket. Esta es una peculiaridad de MT5. Por lo tanto, es incorrecto seleccionar una posición por su POSITION_ID en el Historial de Operaciones en el modo SELECT_BY_TICKET+MODE_HISTORY.


La memorización de tickets es un mal estilo, aunque es popular. La forma correcta es cuando en cada evento el robot de trading lee todo el entorno desde cero.


ZY Aquí se puede ver aproximadamente la misma situación descrita anteriormente


Los resultados muestran que se abrió una posición con ticket == 2. Luego se cerró dos veces, creando así dos "posiciones" cerradas en el Historial de Operaciones. Sus tickets son diferentes, pero ambas "posiciones" tienen OrderTicketOpen == 2. Es decir, debe darse cuenta de que si cierra una posición en MT5, su ticket histórico no coincide con el de tiempo real.


Fíjate que en MT5 incluso los comentarios al cerrar la misma posición en tiempo real son diferentes:"¡Hola Mundo!" y"tp 1.23614".

Es imposible seleccionar inequívocamente una posición MT4 cerrada por POSITION_ID en MT5, porque puede haber varias posiciones MT4 con el mismo POSITION_ID al mismo tiempo.

 

Quien utilice el archivo mql4_to_mql5.mqh de MT4Orders para la conversión MT4 -> MT5, por favor, elimine este trozo de código del mismo.

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

Probando 'CopyTicks

fxsaber, 2016.10.19 07:59

// Permite, como en MT4, trabajar con series temporales: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// También establece las funciones habituales de MT4: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get( const string Symb, const int TimeFrame, const int iShift )                                  \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos ) const                                                                     \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME NAME;                                                                                           \
                                                                                                              \
  T i##NAME( const string Symb, const int TimeFrame, const int iShift )                                       \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb, TimeFrame, iShift));                                                        \
  }

DEFINE_TIMESERIE(Volume, TickVolume, long)
DEFINE_TIMESERIE(Time, Time, datetime)
DEFINE_TIMESERIE(Open, Open, double)
DEFINE_TIMESERIE(High, High, double)
DEFINE_TIMESERIE(Low, Low, double)
DEFINE_TIMESERIE(Close, Close, double)

oficialmente con MT5 buiild 1860 esta pieza de código no es relevante.

Новая версия платформы MetaTrader 5 build 1860: Функции для работы с барами в MQL5 и улучшения в тестере стратегий
Новая версия платформы MetaTrader 5 build 1860: Функции для работы с барами в MQL5 и улучшения в тестере стратегий
  • 2018.06.14
  • www.mql5.com
Новая версия платформы MetaTrader 5 build 1860: Функции для работы с барами в MQL5 и улучшения в тестере стратегий15 июня 2018 года будет опубликов...
 

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

Bibliotecas: MT4Orders

fxsaber, 2017.06.14 11:30 AM.

// Lista de cambios:
// 14.06.2017:
// Añadir: Añadidos análogos asíncronos de las funciones de trading de MQL4: OrderSendAsync, OrderModifyAsync, OrderCloseAsync, OrderDeleteAsync.
// Devuelve el Result.request_id correspondiente si tiene éxito, en caso contrario 0.

Un buen ejemplo del uso de estas funciones se encuentra en la descripción de otra biblioteca. El enfoque mostrado permite utilizar completamente el estilo MQL4 (incluyendo la capacidad de permanecer en su función On) en modo asíncrono.

TradeTransactions
TradeTransactions
  • www.mql5.com
Асинхронные торговые приказы обладают огромным преимуществом - высокая скорость при массовой отправке. Однако, распространению таких приказов мешает некоторое неудобство - данные о результате приказа возможно увидеть только в OnTradeTransaction. Такое обстоятельство заставляет обывателя строить событийную модель своей ТС, если хочется...