Что не даёт советнику заработать. - страница 6

 
valenok2003: Рома, не лукавь, в первый раз ты написал
while(OrderSelect(ticket,SELECT_BY_TICKET)==false)

Неверно. Весь цикл такой:

while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                Sleep(100);        

Правда, коммент неверный. Но цикл именно такой: пока ордер не выбран - ждать 100 миллисекунд.

Правда, если ордера с тикетом ticket уже нет (закрыт), Рома войдет в бесконечный цикл. Скорее всего, эта проверка делается раньше.

 
Roman.:

Эта конструкция изначально была в чьем-то посте с вопросом: Как узнать цену ордера? ответ я использовал в этом цикле - см. выше.

Вот тот ответ на этот вопрос:

вот ты и попал, Roman. Иногда тикет возвращается, а ордера тю-тю. И будешь ты висеть как миленький.

К тому же там должно быть

// Если ордер НЕ выбран

PS мы же с тобой эту тему недавно обсуждали.

 

Ну вы блин даете....

Что значит что произойдет ? Вообще не понимаю этого вопроса....

Курим доку - стандартные константы/ошибки исполнения - там все точно и подробно описано...

Если не найдете - ошибка № 4108

 
valenok2003:



Рома, не лукавь, в первый раз ты написал

эта конструкция

while(OrderSelect(ticket,SELECT_BY_TICKET)==false)

является составляющей цикла для работы в он-лайне ее пользую для получения характеристик выбранного ордера

// ------------------------------------------------Ищем наш ордер---------------------------------
   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))     continue;
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера          
          if (ticket>0)                                    // Если позиция открылась
              {
                while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                Sleep(100);                                 
                double OpenPrice=OrderOpenPrice();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера                     
                if (orderType == OP_BUY) 
                   {                
                     
                   }
            
                if (orderType == OP_SELL) 
                   {        
                     
                   }   
                            
               }
             
     // Проверка на предельную просадку      
      double loss = - ((orderProfit * 100.0) / AccountBalance());
      if (loss > MaxLoss)
      {
         Print ("MaxLoss");
         CloseAllOrders(MagicNumber);
         IsExpertFailed = true;
         return (0);
      }  
        
      return (0);
   }
   
 
 

Уже писал, сколько раз, после выбора ордера проверить время закрытия, если !=0 то ордер уже закрыт.

"И эти люди учат меня ковыряться в носу..."

 

И как зависнет у вас в цикле... мама дорогая

Вот эта строка вашше не очем : if (!OrderSelect(orderIndex, SELECT_BY_POS)) continue;

 
FAQ: "И эти люди учат меня ковыряться в носу..."

Вспомнилось:

Сын случайно стал свидетелем секса родителей и думает: "И эти люди еще запрещают мне ковыряться в носу...".

 
Mathemat:

Неверно. Весь цикл такой:

Правда, коммент неверный. Но цикл именно такой: пока ордер не выбран - ждать 100 миллисекунд.
Да в этом посте забыл строку добавить, но в других постах же она есть, где полный ответ по этому вопросу...
 

Блин, ну когда же вы научитесь, не писать составные иФы, лень строку добавить, а как начнешь анализировать, так всю голову ап стену можно разбить.

И кроме того это дольше чем два отдельных

 
FAQ:

Уже писал, сколько раз, после выбора ордера проверить время закрытия, если !=0 то ордер уже закрыт.

"И эти люди учат меня ковыряться в носу..."

Да, кстати, щас вспоминаю...

Если есть рядом в наличии - копипасте плиз... с контролем времени, там что-то типа - если оно не равно/равно нулю... т.к. время закрытия есть только у закрытых ордеров...

Причина обращения: