[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 188

 
Pyro:

Привет всем. У меня поиск в истории не возвращает обьем лотов. Это так надо?


возвращает лот 0.1, хотя лоты меняются программой. тикеты отражаются корректно (меняются). баг? фича?


... Не ищите во всём "баги и фичи" - ларчик, порой, открывается просто... :-)

Где цикл по ордерам???

 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)   
             Comment("\n\n\n",OrderLots()," ",OrderTicket());                        
         }
      }
   }
 
Pyro:

Привет всем. У меня поиск в истории не возвращает обьем лотов. Это так надо?


возвращает лот 0.1, хотя лоты меняются программой. тикеты отражаются корректно (меняются). баг? фича?


Смотрите аналог кода, правьте, пробуйте:

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;  
    
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }
 

Roman


Цикл мне не нужен. Мне надо получить ЛОТ последнего ордера, не важно какого, фильтрация мне не нужна. В примере про ЛОТ ничего нет. Я в недоумении.

 
Pyro:

Roman


Цикл мне не нужен. Мне надо получить ЛОТ последнего ордера, не важно какого, фильтрация мне не нужна. В примере про ЛОТ ничего нет. Я в недоумении.


Посмотрите - я внёс правки в предпредыдущий свой пост...
 
Я не понял короче. Цикл нужен когда надо фильтровать по каким-то критериям, как у вас. У меня задача проще - взять последний ордер из истории. Он по определению закрыт и по определению нет открытых позиций в рынке. Отложенные ордера не используются. Тоесть последний номер однозначно будет рыночным. Тикеты возвращаются корректно, лоты - нет.
 
Pyro:
Я не понял короче. Цикл нужен когда надо фильтровать по каким-то критериям, как у вас. У меня задача проще - взять последний ордер из истории. Он по определению закрыт и по определению нет открытых позиций в рынке. Тикеты возвращаются корректно, лоты - нет.

Владейте! Учитесь пользовать поиск! :-)
 
Спасибо разобрался :) Косяк был в другом.
 
MK07:

Спасибо за желание помочь.Поставил if (D_sig==0) { комманда для сигнала ; }."Ступенек" стало меньше,но всё-таки они есть.И не понятно,как образуются.

А MathAbs поставил для того,чтобы был "коридор" для сравнения,ведь вероятность того,что сигнальные линии будут абсолютно равны,ничтожно мала.

Может быть у кого-нибудь есть ещё мысли по моей проблеме?


написал вот так и все отображается D_Sig выводится в комменте

         D_sig=MathAbs(Signal1Buffer[0]-Signa13Buffer[0]);                              // разница между сигнальными линиями 1-ого и 3-ого MACD на
                                                                                        // нулевом баре
if(D_sig==0)  {   D_sig_Last=D_sig; }
      
//       break;          
             
           
              
         
         j++;
         
}             
     
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1, 
               "\n"," Macd1Buffer = ",DoubleToStr(Macd1Buffer[0],4),
               "\n"," Signal1Buffer = ",DoubleToStr(Signal1Buffer[0],4),
               "\n"," Macd3Buffer = ",DoubleToStr(Macd3Buffer[0],4),
               "\n"," Signa13Buffer = ",DoubleToStr(Signa13Buffer[0],4),
               "\n"," D_sig = ",DoubleToStr(D_sig,4));
 
Подскажите "любимый принцип" формирования названия советника -и чтоб принцип действия учитывал и версия итд
 

Привет всем.

Есть функция bool NewBar() .Сделайте, пажалуйства, функцию bool NewZZ() . При появлении нового колена зигзага -> true.

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