Помогите с ошибкой в функции! - страница 2

 
Oleksii Chepurnyi:

Как понять?

 
Разобрался в чем дело! У меня значение переменной TimeFrame = 1, то есть минутный график, а тестирую я на М5. Запустил тест на М1, все заработало. Но все же, в чем дело? ведь таймфрейм прописан в 
size+=(iHigh(Symbol(),TimeFrame,i)-iLow(Symbol(),TimeFrame,i))/Point;
 
Nikolay Bosuy:

Как понять?

Каждую минуту новое значение. Среднее по 10 барам.

 
Если не ошибаюсь, это болячка терминала - обновляет значения только открытого ТФ.
 
Nikolay Bosuy:
Разобрался в чем дело! У меня значение переменной TimeFrame = 1, то есть минутный график, а тестирую я на М5. Запустил тест на М1, все заработало. Но все же, в чем дело? ведь таймфрейм прописан в 
size+=(iHigh(Symbol(),TimeFrame,i)-iLow(Symbol(),TimeFrame,i))/Point;
size+=iHigh(Symbol(),Period(),i)-iLow(Symbol(),Period(),i);

Так верней будет. И ошибка не здесь, а там где вызываете. Если в индикаторе, то через сравнение загруженных и посчитанных баров отмечать появление нового и вызывать расчетную функцию, если в советнике, то через сравнение времени открытия нулевого бара фиксить появление нового бара и вызывать Вашу функцию.

Типа такого для любого периода

bool FlagNewBarF(int prd, datetime &ArgBarTime,bool &FlagNbar) // prd - период и аргументы времени открытия бара и возвращаемого флага
  {
   FlagNbar=false;
   if(ArgBarTime!=iTime(NULL,prd,0))
     {
      ArgBarTime=iTime(NULL,prd,0);
      FlagNbar=true;
     }

   return(FlagNbar);
  }
//вызов типа такого
if(FlagNewBarF(1, BarTime1,FlagNewBar1))
     {
      Alert("FlagNbar1 ",FlagNewBar1,"BarTime1 ",TimeToStr(BarTime1,TIME_DATE|TIME_SECONDS));
     }

или для текущего периода в теле советника

FlagNewBar=false;
   if(BarTime!=Time[0])
     {
      BarTime=Time[0];
      FlagNewBar=true;
     }



 

 
Valeriy Yastremskiy:

Так верней будет. И ошибка не здесь, а там где вызываете. Если в индикаторе, то через сравнение загруженных и посчитанных баров отмечать появление нового и вызывать расчетную функцию, если в советнике, то через сравнение времени открытия нулевого бара фиксить появление нового бара и вызывать Вашу функцию.

Типа такого для любого периода

или для текущего периода в теле советника



 

Спасибо! Для советника делаю. Вызов это уже вторая задача. Вопрос был в работоспособности. Беда теперь в том, что не могу заставить брать данные с М1 при работе на М5 или выше

 
Nikolay Bosuy:

Спасибо! Для советника делаю. Вызов это уже вторая задача. Вопрос был в работоспособности. Беда теперь в том, что не могу заставить брать данные с М1 при работе на М5 или выше

все Вы можете))) надо только документацию правильно понять.) 

//======== Средняя величина бара в пипсах ================
double AverageBar(int countCandles, TimeFrameF)// сделайте период входным параметров функции и 
                                              //вызывайте ее с появлением свечи соответствующего периода
{
double size=0;
double returnSize=0;
for(int i=1; i<countCandles; i++) 
{
size+=iHigh(Symbol(),TimeFrameF,i)-iLow(Symbol(),TimeFrameF,i);
returnSize=size/countCandles;
}
return(returnSize/Point);
}
 
Valeriy Yastremskiy:

все Вы можете))) надо только документацию правильно понять.) 

Спасибо!