Características del lenguaje mql5, sutilezas y técnicas - página 155

 
Nikolai Semko:

Encontré un interesante estudio de hace dos años en el que se comparaba la eficacia de diferentes idiomas

https://greenlab.di.uminho.pt/wp-content/uploads/2017/09/paperSLE.pdf



¡Oh, Dios!

¡Ada está realmente viva y creciendo! Si no me equivoco, el primer OOP. Lo estudié a principios de los 80. No había oído nada al respecto hasta ahora, pensaba que el lenguaje estaba tan muerto como Modula. Ambos son actualizaciones profundas de Pascal. No tenía un compilador de Ada, y tenía Modula - un siete pases en DWK, si alguien lo recuerda.

 

Para evitar errores de ejecución en el probador, envíe órdenes de mercado apropiadas en caso de que un pendiente o SL/TP deba ser colocadoal precio actual:

  • Colocar una orden pendiente al precio actual - añadirla después de la orden de mercado OrderSend.
  • Colocar la posición SL/TP al precio actual - añadir después de la posición OrderClose.
 
fxsaber:

Para evitar errores de ejecución en el probador, envíe órdenes de mercado apropiadas en caso de que una orden pendiente o SL/TP deba ser colocada al precio actual:

  • Colocar una orden pendiente al precio actual - añadirla después de la orden de mercado OrderSend.
  • Colocar la posición SL/TP al precio actual - añadirla después de la posición OrderClose.

¿Podemos hablar de esto con más detalle? No está muy claro:

  • para colocar una orden pendiente al precio actual, hay que añadir algo después de enviar una solicitud de apertura de posición (?????????)
  • para colocar una orden de stop (¿a qué?) al precio actual, hay que añadir algo después de enviar una solicitud de cierre de posición (?????????)
Estas son las preguntas que surgen después de intentar descifrar lo que has escrito...
 
Artyom Trishkin:

¿Podría ser más específico? No está muy claro:

  • para colocar una orden pendiente al precio actual, hay que añadir algo después de enviar una solicitud de apertura de posición (?????????)
  • para colocar una orden de stop (¿a qué?) al precio actual, hay que añadir algo después de enviar una solicitud de cierre de posición (?????????)
Estas preguntas aparecen después de intentar descifrar lo que has escrito...

El problema se muestra aquí. Solución.

// Делает более точными MT4/5-тестеры.
TICKET_TYPE MyOrderSend( const string Symb, int Type, const double dVolume, const double Price, const int SlipPage, const double SL, const double TP,
                         const string comment = NULL, const MAGIC_TYPE magic = 0, const datetime dExpiration = 0, color arrow_color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  MqlTick Tick = {0};  
  
  bool Res = IsTester && SymbolInfoTick(Symb, Tick);
  
  if (Res && (Type > OP_SELL))
  {
    if ((Type == OP_BUYLIMIT) || (Type == OP_BUYSTOP))
    {
      if (Price == Tick.ask)
        Type = OP_BUY;
    }
    else if (Price == Tick.bid)
      Type = OP_SELL;
  }
  
  const TICKET_TYPE Ticket = OrderSend(Symb, Type, dVolume, Price, SlipPage, SL, TP, comment, magic, dExpiration, arrow_color);
  
  Res = Res && (Type <= OP_SELL) && (Ticket != -1) &&
        (Type ? (SL == Tick.ask) || (TP == Tick.ask) : (SL == Tick.bid) || (TP == Tick.bid)) &&
        OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);
  
  return(Ticket);
}

// Делает более точными MT4/5-тестеры.
bool MyOrderModify( const long Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
{
  static const bool IsTester = MQLInfoInteger(MQL_TESTER);
  
  bool Res = false;
  
  if (IsTester && OrderSelect(Ticket, SELECT_BY_TICKET) && !OrderCloseTime())
  {
    if (OrderType() <= OP_SELL)
    {
      Res = (OrderClosePrice() == SL) || (OrderClosePrice() == TP);
      Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color) && (!Res || OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0, Arrow_Color));
    }
    else if (OrderClosePrice())    
      Res = ((OrderClosePrice() == Price) &&
             (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                          OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
            OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
    else
    {
      MqlTick Tick = {0};
      
      if (SymbolInfoTick(OrderSymbol(), Tick))
        Res = (((bool)(OrderType() & 1) ? (Price == Tick.bid) : (Price == Tick.ask)) &&
               (MyOrderSend(OrderSymbol(), OrderType() & 1, OrderLots(), Price, 0, SL, TP,
                            OrderComment(), OrderMagicNumber(), OrderExpiration(), Arrow_Color) != -1) && OrderDelete(Ticket)) ||
               OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);
      else
        Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color);                     
    }
  }
  else
    Res = OrderModify(Ticket, Price, SL, TP, Expiration, Arrow_Color); 
  
  return(Res);
}

#define OrderSend MyOrderSend
#define  OrderModify MyOrderModify
 
fxsaber:

El problema se muestra aquí. Solución.

Esto no aclara para qué sirve ni qué hay que hacer. Al fin y al cabo, mucha gente necesita entender lo que está escrito sobre la razón de escribir una solución antes de empezar a leer el código para hacer la suya propia o utilizar una ya hecha.

Pedí una explicación más detallada de esto:

El foro sobre el comercio, los sistemas de comercio automatizados y la comprobación de las estrategias de comercio

Características del lenguaje mql5, complejidades y técnicas

fxsaber, 2019.12.18 12:45

Para evitar errores de ejecución en el Probador, envíe órdenes de mercado apropiadas en caso de que necesite colocar un pendiente o un SL/TP al precio actual:

  • Colocar una orden pendiente al precio actual - añadir después de OrdenEnviar orden de mercado.
  • Colocar la posición SL/TP al precio actual - añadirla después de la posición OrderClose.

Y mostró un ejemplo de cómo es percibido por mí, o tal vez por alguien más:

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Peculiaridades de mql5, consejos y trucos

Artyom Trishkin, 2019.12.18 12:53 pm

¿Es posible explicarlo con más detalle? No entiendo nada:

  • para colocar una orden pendiente al precio actual, es necesario añadir algo después de enviar una solicitud de apertura de posición (?????????)
  • para colocar una orden de stop (¿a qué?) al precio actual, hay que añadir algo después de enviar una solicitud de cierre de posición (?????????)
Estas son las preguntas que aparecen después de intentar descifrar lo que has escrito...

En fin...

 
Artyom Trishkin:

Te pedí que fueras más específico

La colocación de una orden pendiente y SL/TP al precio actual no acepta la ejecución en el tick actual en el MT5-Tester.

 

Hola a todos.

¿Puede usted aconsejar pls qué herramientas están disponibles en MT5 para mostrar los gráficos de garrapatas?

En MT4 había una opción "abrir sin conexión". Era conveniente trabajar con garrapatas creando mis propios archivos hst de la historia.

En MT5 no existe la opción de "abrir autónomo". Aunque las herramientas de software para trabajar con garrapatas son excelentes.

No puede ser que no haya posibilidad de mostrarlos en un gráfico

 
fxsaber:

El problema se muestra aquí. Solución.

  const TICKET_TYPE Ticket = OrderSend();
  ...
  OrderClose(Ticket, dVolume, Type ? Tick.ask : Tick.bid, SlipPage, arrow_color);

¡Qué mierda! ¿Por qué abrir con SL/TP al precio actual?

Pues bien, el cierre colocando el SL/TP al precio actual, si es que se hace, se hace intencionadamente. Tampoco es necesario emular la activación.

 
Andrey Khatimlianskii:

¡Qué mierda! ¿Por qué abrir con SL/TP al precio actual?

Pues bien, el cierre colocando el SL/TP al precio actual, si es que se hace, se hace intencionadamente. No es necesario emular la activación.

De este modo, se puede conseguir fácilmente un disparador en decenas de minutos u horas.

Imagina que necesitas cerrar por TP que se calcula de alguna manera. Y ahora es igual al precio actual.

 
fxsaber:

necesitan cerrar en el TP, que se calcula de alguna manera. Y ahora se ha igualado al precio actual.

En este caso, siempre compruebo si este TP no debería haberse disparado ya (el precio lo ha cruzado), y cierro según el mercado.

O, si es necesario salir con un límite, lo saco detrás del precio, hasta que se llene.

Razón de la queja: