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

 

Дошло, изменил

   uint n=0;

ошибки пропали. Спасибо.

 
Sergey Voytsekhovsky:

Дошло, изменил

ошибки пропали. Спасибо.

Это не ошибки, а предупреждения.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Artyom Trishkin, 2019.05.20 15:16

Какие типы у переменных n и period_find ? Самое важное и не показали...

Так попробуйте:

for(n=0; n<(int)period_find; n++)

А вообще - зачем объявляете переменную цикла на уровне обработчика OnTick() ?

Можно же так:

for(int n=0; n<(int)period_find; n++)

А из OnTick() убрать объявление n - ни к чему оно там.


 
Artyom Trishkin:

Это не ошибки, а предупреждения.


Великолепно, сейчас поправлю.

Не сочтите за наглость, намекните плиз, как в этом моём случае таки получить значения цен, на которых были созданы "Стрелки". Исходя из того, что их индексы у меня уже есть. ???

 

Теперь ругается подругому:

'n' - undeclared identifier Test_iCustom.mq5 82 48

Видимо потому, что n используется за пределами цикла, в качестве найденного индекса ???
 
         for(int n=0; n<(int)period_find; n++)
            {
               if(Buf_Arrow_Buy[n]!=EMPTY_VALUE)break;
            }
         Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
         Last_Arrow_Buy_index  = n;
 
Sergey Voytsekhovsky:

Великолепно, сейчас поправлю.

Не сочтите за наглость, намекните плиз, как в этом моём случае таки получить значения цен, на которых были созданы "Стрелки". Исходя из того, что их индексы у меня уже есть. ???

Либо iOpen(), либо CopyOpen(), или CopyRates(), если получать сразу несколько цен за раз.

По-моему, в индикаторе стрелки ставятся на графике на цены открытия баров.

Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
  • www.mql5.com
Значение цены открытия бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError(). Функция всегда возвращает актуальные данные, для этого она при каждом вызове делает запрос к таймсерии по указанным символу/периоду. Это означает...
 
Artyom Trishkin:

Либо iOpen(), либо CopyOpen(), или CopyRates(), если получать сразу несколько цен за раз.

По-моему, в индикаторе стрелки ставятся на графике на цены открытия баров.

Да, там написано так:

SetArrow(prefix+"ChartArrowUP_"+TimeToString(time[i]),InpColorBullishArrow,time[i],open[i],(char)241,ANCHOR_TOP,InpArrowSize);

Попробую iOpen()

А вместо n тогда добавить другую переменную или можно так:?

   int n=0;
   
   if (CopyBuffer(CrossAD, 1, 0, period_find, Buf_Arrow_Buy) != period_find)
      {  
         Print("НЕ удалось правильно скопировать данные из 1-го буфера индикатора iCrossAD, error code %d",GetLastError());
         return;
      }
         for(n=0; n<(int)period_find; n++)
            {
               if(Buf_Arrow_Buy[n]!=EMPTY_VALUE)break;
            }
         Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
         Last_Arrow_Buy_index  = n;
         Print("Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume,", Last_Arrow_Buy_index = ",Last_Arrow_Buy_index);
 
Sergey Voytsekhovsky:

Область видимости переменной цикла ограничена телом цикла. Перед break присвойте нужные значения:

//+------------------------------------------------------------------+
for(int i=0; i<(int)period_find; i++)
  {
   if(Buf_Arrow_Buy[i]!=EMPTY_VALUE)
     {
      Last_Arrow_Buy_volume = Buf_Arrow_Buy[i];
      Last_Arrow_Buy_index  = i;
      break;
     }
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

Область видимости переменной цикла ограничена телом цикла. Перед break присвойте нужные значения:

Понял, работает и так и так, предупреждений нет. 

Скажите пожалуйста а как кошернее, с расчетами в теле цикла, до break; или расчёты лучше выносить из цикла ???

 
Sergey Voytsekhovsky:

Понял, работает и так и так, предупреждений нет. 

Скажите пожалуйста а как кошернее, с расчетами в теле цикла, до break; или расчёты лучше выносить из цикла ???

Какие расчёты?

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