Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1680

 
MakarFX #:

Cercherò di allegarlo, grazie. Solo una domanda su come trattare gli ordini SELL

 
EVGENII SHELIPOV #:

Cercherò di farlo, grazie. Solo una domanda su come trattare gli ordini SELL

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, perché è così complicato stiparlo in una sola funzione? O c'è qualcosa che non capisco?

 
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;
}
Sostituirlo con == non aiuta. In entrambi i casi, nessun filo va lì (ho controllato con la stampa)
 
Nerd Trader #:
Nel commento si dice che manda il majic all'array di scrittura, non lasciate che questo sia fuorviante, purché il majic torni al retorn.

Non capisco bene la logica generale, cerco di separare le funzioni

  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, perché è così complicato stiparlo in una sola funzione? O c'è qualcosa che non capisco?

   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, stai facendo il bambino con me.

Grazie Makar, ho cambiato un po' la funzione e funziona.

 
MakarFX #:

Non capisco bene la logica generale, cerco di separare le funzioni

Ora GetMagic dovrebbe generare una magia unica al momento dell'invio di un ordine pendente e restituirla per retorn. Nella tua versione, c'è solo un ciclo, quindi quando l'ordine finisce, else verrà eseguito comunque, e magic == OrderMagicNumber() sarà sempre vero. Voglio che magic != OrderMagicNumber() quando non è vero, significa che magic è unico e viene incrementato da se stesso nel primo for(;;).
 
Nerd Trader #:

Controlla il tuo messaggio personale.

 
Ciao, sto affrontando il seguente problema: l'EA ha aperto un ordine pendente, ma il terminale non lo traccia e non è presente nella cronologia degli scambi. Si prega di avvisare se qualcuno ha affrontato un tale problema.