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

 
PolarSeaman:

Возможно так:

А где здесь условие на прошлый день? Получается после первого ордера в 0-8 период, степ же будет уже 10. А нужно что он был 5. И только после 8 часов стал 10. Затем в 0 вернуть step =5 если нет открытых ордеров с прошлого дня. А если серия продолжается, то до её закрытия чтобы step =10
 
PolarSeaman:

В том что если задать интервал времени как в советнике

, то индикатор просто не будет работать в это время, а мне нужно в истории исключить, свечки находящиеся в интервале, из расчётов.

В индикаторе вы работаете в цикле. Так зачем return'ом выходить из цикла?

Вы не знаете как в цикле пропустить итерацию?

continue

 
Tigerfreerun:
А где здесь условие на прошлый день? Получается после первого ордера в 0-8 период, степ же будет уже 10. А нужно что он был 5. И только после 8 часов стал 10. Затем в 0 вернуть step =5 если нет открытых ордеров с прошлого дня. А если серия продолжается, то до её закрытия чтобы step =10

Функция должна вернуть тру, если есть ордер открытый вчера

   OP_TO(int mn)
     {
     int i, k=OrdersTotal();
      for(i=0; i<k; i++) 
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
           {
            if(OrderSymbol()==Symbol()) 
              {
               if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
                 {
                  if(OrderMagicNumber()==mn) 
                    {
                     if(TimeDay(OrderOpenTime())==(Day()-1)
                      &&  TimeMonth(OrderOpenTime())==Month()
                      &&  TimeYear (OrderOpenTime())==Year()) return(True);
                    }
                 }
              }
           }
        }

      return(False);
     }
if(Hour()>=0&&Hour()<=8&&!OP_TO(mag_n))step = 5; else step =10;
 
Artyom Trishkin:

В индикаторе вы работаете в цикле. Так зачем return'ом выходить из цикла?

Вы не знаете как в цикле пропустить итерацию?

continue

Спасибо. Не пойму, ограничил время, а на принт выводится время и 19:30 и 23:00 и 5:50 что не так?

   for(int i=limit-2; i>0; i--) 
     {
     if(Hour()>=17&&Hour()<=11)continue;
      if(i%2==0) 
        {
         if(open[i]<close[i] && open[i+1]>close[i+1]) 
           {
            k1++;
           // if(k1>max) {max=k1; dat_max=time[i];}
            if(k1>=4)Print("Num: ",k1,"dat_max ",time[i]);
            SetText("Obj_"+(string)time[i],(string)k1,time[i],high[i],Arr);
           }
         else k1=0;
         
           } else {
         if(open[i]<close[i] && open[i+1]>close[i+1]) 
           {
            k2++;
            //if(k2>max){ max=k2; dat_max=time[i];}
            if(k2>=4)Print("Num: ",k2,"dat_max ",time[i]);
            SetText("Obj_"+(string)time[i],(string)k2,time[i],high[i],Arr);
           }
         else k2=0;
         
        }
      
     }
 
PolarSeaman:

Спасибо. Не пойму, на принт выводится время и 19:30 и 23:00 и 5:50 что не так?

Что возвращает функция Hour() ?
 
PolarSeaman:

Функция должна вернуть тру, если есть ордер открытый вчера

Сложновато для меня. Вы могли бы объяснить в какую именно часть кода добавить и что значит это mn и mag_n?   куда мне тут свой меджик советника вписать?




 
Господа программисты помогите понять в чём ошибка. minPrice = NormalizeDouble (GetMinPrice(),Digits); Ошибка: 'minPrice' - semicolon expected.
 
KRIKS:
Господа программисты помогите понять в чём ошибка. minPrice = NormalizeDouble (GetMinPrice(),Digits); Ошибка: 'minPrice' - semicolon expected.

Смотрите на код, который перед minPrice. Там нет знака ; (точка с запятой)

 
Ihor Herasko:

Смотрите на код, который перед minPrice. Там нет знака ; (точка с запятой)

int start()

  

  

 { 

  minPrice = NormalizeDouble (GetMinPrice()Digits);

  maxPrice = NormalizeDouble(GetMaxPrice()Digits);  Разве после int start можно ставить (;) ?

 
KRIKS:

int start()

  

  

 { 

  minPrice = NormalizeDouble (GetMinPrice()Digits);

  maxPrice = NormalizeDouble(GetMaxPrice()Digits);  Разве после int start можно ставить (;) ?

 { 

  minPrice = NormalizeDouble (GetMinPrice(),Digits);

  maxPrice = NormalizeDouble(GetMaxPrice(),Digits);  

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