Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1680

 
MakarFX #:

Макар спасибо попробую прикрутить посмотрю. Только вопрос а с ордерами SELL как быть 

 
EVGENII SHELIPOV #:

Макар спасибо попробую прикрутить посмотрю. Только вопрос а с ордерами SELL как быть 

Семён Семёныч...
   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 #:
Семён Семёныч...

Макар а почему так мудрено в одну функцию запихать не получится. Или есть что то что я не понимаю?

 
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;
}
Если заменить на == не помогает. В обоих случаях туда поток не заходит (проверял принтом)
 
Nerd Trader #:
Там в комментировании написано что отправляется маджик в массив на запись, пусть это не вводит в заблуждение, пока маджик вовзращается обратно по реторну.

Я не совсем понимаю общую логику, я стараюсь разделять функции

  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 #:

Макар а почему так мудрено в одну функцию запихать не получится. Или есть что то что я не понимаю?

   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 #:

Макар ты уж совсем со мной как с маленьким .

Спасибо Макар я маленько поменял функцию прикрутил все работает

 
MakarFX #:

Я не совсем понимаю общую логику, я стараюсь разделять функции

Cейчас GetMagic должен генерировать уникальный маджик в момент отправки отложеннего ордера, и возвращать его по реторну, всё. В твоём варианте только один цикл и когда ордера закончатся - выполнится else в любом случае, причем magic == OrderMagicNumber() будет всегда true. Мне нужно наоборот magic != OrderMagicNumber() когда не true, значит маджик уникальный, а он сам инкременируется в первом for(;;).
 
Nerd Trader #:

Проверь личку.

 
Добрый день! Столкнулся с такой проблемой, а именно, советник открыл отложенный ордер, но терминал не отслеживает его и в истории торговли данного ордера нет. Подскажите может кто сталкивался с такой проблемой?
Причина обращения: