Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1680

 
MakarFX #:

Vou tentar anexá-lo, obrigado. Apenas uma questão de como lidar com os pedidos de VENDA

 
EVGENII SHELIPOV #:

Vou tentar anexá-lo, obrigado. Apenas uma questão de como lidar com os pedidos de VENDA

Semonych 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 #:
Semyonych Semyonych...

Makar, por que é tão complicado enfiá-lo em uma única função? Ou há algo que eu não entendo?

 
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;
}
Substituí-lo por == não ajuda. Em ambos os casos, nenhum fio vai para lá (verifiquei com impressão)
 
Nerd Trader #:
Diz no comentário que envia o majic para a matriz de escrita, não deixe que isso seja enganoso, desde que o majic volte para o retorno.

Não entendo bem a lógica geral, tento separar as funções

  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 que é tão complicado enfiá-lo em uma única função? Ou há algo que eu não entendo?

   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, você está sendo um bebê comigo.

Obrigado, Makar. Mudei um pouco a função, e está funcionando.

 
MakarFX #:

Eu realmente não entendo a lógica geral, eu tento separar as funções

Agora a GetMagic deve gerar uma magia única no momento de enviar uma ordem pendente e devolvê-la por retorno. Em sua versão, há apenas um loop, portanto, quando o pedido terminar, outro será executado de qualquer forma, e a magia == OrderMagicNumber() será sempre verdadeira. Eu quero magia != OrderMagicNumber() quando não é verdade, significa que a magia é única e é incrementada por si mesma no primeiro para(;;).
 
Nerd Trader #:

Verifique sua mensagem pessoal.

 
Olá, estou enfrentando o seguinte problema: a EA abriu um pedido pendente, mas o terminal não o rastreia e não está presente no histórico comercial. Favor informar se alguém já enfrentou tal problema.
Razão: