Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1680

 
MakarFX #:

Intentaré hacerlo, gracias. Sólo una pregunta sobre cómo tratar las órdenes de VENTA

 
EVGENII SHELIPOV #:

Intentaré adjuntarlo, gracias. Sólo una pregunta sobre cómo tratar las órdenes de VENTA

Semyon Semyonych...
   double GetBuyOrderSwap()
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
   double GetSellOrderSwap()
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_SELL)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
 
MakarFX #:
Semyon Semyonych...

Makar, ¿por qué es tan complicado meterlo en una función? ¿O hay algo que no entiendo?

 
int GetMagic(Order &order)
{
  int magic = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
    if(OrdersTotal() >= 1)
      for(;;){
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --)
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) != false)
            if(magic != OrderMagicNumber())
              return magic;
            
      }
    else if (OrdersTotal() == 0)
      return (magic + 1);
  return magic;
}
Sustituirlo por == no ayuda. En ambos casos, ningún hilo va allí (lo he comprobado con la impresión)
 
Nerd Trader #:
En el comentario dice que envía el majic al array de escritura, que no te lleve a engaño, siempre que el majic vuelva al retorn.

No entiendo muy bien la lógica general, trato de separar las funciones

  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
  int order_magic = GetMagic(order);

  if(order.is_init == true)
  {
    int order_send = OrderSend(Symbol(), order.cmd, 0.01, order.open_price, 10, 
    order.sl_price, order.tp_price, "", order_magic, 0, order.arrow_color);

    if(order_send == -1){
      Print(order.error_text," | ",GetLastError()," db_last.third ",db_last.third,
        " | db_last.size_open_to_low ",db_last.size_open_to_low," | order.sl_price: ",
        order.sl_price," | order.cmd ",order.cmd);
      ResetLastError();
      return;
    }
  }
   //+---
   int GetMagic(Order &order)
   {
     int magic = 0;
     for(int i = OrdersTotal(); i > 0 ; i --)
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
          if(magic == OrderMagicNumber()) magic+=1;
          else magic=0;
         }
      }
     return (magic);
   }
 
EVGENII SHELIPOV #:

Makar, ¿por qué es tan complicado meterlo en una función? ¿O hay algo que no entiendo?

   double GetOrderSwap(int ot=-1)// 0-Buy; 1-Sell
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
 
MakarFX #:

Makar, estás siendo un bebé conmigo.

Gracias, Makar. He cambiado un poco la función y ya funciona.

 
MakarFX #:

No entiendo muy bien la lógica general, trato de separar las funciones

Ahora GetMagic debe generar una magia única en el momento de enviar una orden pendiente y devolverla por retornada. En su versión, sólo hay un bucle, por lo que cuando la orden termina, else se ejecutará de todos modos, y magic == OrderMagicNumber() siempre será verdadero. Quiero que magic != OrderMagicNumber() cuando no es verdadero, significa que magic es único y se incrementa por sí mismo en el primer for(;;).
 
Nerd Trader #:

Comprueba tu mensaje personal.

 
Hola, me encuentro con el siguiente problema: el EA abrió una orden pendiente, pero el terminal no la rastrea y no está presente en el historial de operaciones. Por favor, avisen si alguien se ha enfrentado a este problema.
Razón de la queja: