Вопрос по MQL4 - страница 3

 
Скрипт весьма глючный. Сама метода создания баров такая. Из-за этого постоянные глюки. То бары пропадают то удваиваются все бары. Если бросить на дневку то включаются выходные. Вобщем не подходит.

Но сама же идея элементарная.
На каждом начале нового бара сравнить High (Low) предыдущего бара со значанием переменной в которой хранится абсолютный High (Low). Если превысило - записать в эту переменную новое значение.
Если прошло 3 часа (или 12) записать значения этих переменных в массивы и обнулить их. Все.
 
Но сама же идея элементарная.
На каждом начале нового бара сравнить High (Low) предыдущего бара со значанием переменной в которой хранится абсолютный High (Low). Если превысило - записать в эту переменную новое значение.
Если прошло 3 часа (или 12) записать значения этих переменных в массивы и обнулить их. Все.

Элементарная, но недоделанная.
Вот моя идея (исправил вычисление времени). Только что-то не работает. Где-то есть ошибка наверно.
void h3tf()
{
   j=iBars(Val,PERIOD_H1);
   k=0;
   TimeH3[k]=iTime(Val,PERIOD_H1,j)-TimeHour(iTime(Val,PERIOD_H1,j))*3600
               +TimeHour(iTime(Val,PERIOD_H1,j))/3*3600;
   OpenH3[k]=iOpen(Val,PERIOD_H1,j);
   HighH3[k]=iHigh(Val,PERIOD_H1,j);
   LowH3[k]=iLow(Val,PERIOD_H1,j);
   CloseH3[k]=iClose(Val,PERIOD_H1,j);
   for (j=iBars(Val,PERIOD_H1)-1;j>0;j--)
   {
      if (TimeDay(iTime(Val,PERIOD_H1,j))==TimeDay(iTime(Val,PERIOD_H1,j+1)) &&
            TimeHour(iTime(Val,PERIOD_H1,j))/3==TimeHour(iTime(Val,PERIOD_H1,j+1))/3)
      {
         HighH3[k]=MathMax(iHigh(Val,PERIOD_H1,j),iHigh(Val,PERIOD_H1,j+1));
         LowH3[k]=MathMin(iLow(Val,PERIOD_H1,j),iLow(Val,PERIOD_H1,j+1));
         CloseH3[k]=iClose(Val,PERIOD_H1,j);
      }
      if (TimeDay(iTime(Val,PERIOD_H1,j))==TimeDay(iTime(Val,PERIOD_H1,j+1)) ||
            TimeHour(iTime(Val,PERIOD_H1,j))/3==TimeHour(iTime(Val,PERIOD_H1,j+1))/3)
      {
         k++;
         TimeH3[k]=iTime(Val,PERIOD_H1,j)-TimeHour(iTime(Val,PERIOD_H1,j))*3600
               +TimeHour(iTime(Val,PERIOD_H1,j))/3*3600;
         OpenH3[k]=iOpen(Val,PERIOD_H1,j);
         HighH3[k]=MathMax(iHigh(Val,PERIOD_H1,j),iHigh(Val,PERIOD_H1,j+1));
         LowH3[k]=MathMin(iLow(Val,PERIOD_H1,j),iLow(Val,PERIOD_H1,j+1));
         CloseH3[k]=iClose(Val,PERIOD_H1,j);
      }
   }
   ArraySetAsSeries(TimeH3,true);
   ArraySetAsSeries(OpenH3,true);
   ArraySetAsSeries(HighH3,true);
   ArraySetAsSeries(LowH3,true);
   ArraySetAsSeries(CloseH3,true);
   for (k=ArraySize(OpenH3)-1;k>=0;k--)
   {
      RVIH3[k]=(CloseH3[k]-OpenH3[k])/(HighH3[k]-LowH3[k]);
   }
   for (k=ArraySize(RVIH3)-1-rvi_per;k>=0;k--)
   {
      j=1;
      while (j<=rvi_per)
      {
         RVIH3[k]=RVIH3[k]+RVIH3[k+j];
         j++;
      }
   }
}


 
Может и ошибка. А может сама идея неверна.
Дело в том, однако, что поиск ошибок в чужом коде занятие весьма неблагодарное.
Если хотите научиться программировать на MQL, свои ошибки находите всегда сами.
Если не хотите учиться программировать - наймите специалиста.
 
Может и ошибка. А может сама идея неверна.
Дело в том, однако, что поиск ошибок в чужом коде занятие весьма неблагодарное.
Если хотите научиться программировать на MQL, свои ошибки находите всегда сами.
Если не хотите учиться программировать - наймите специалиста.

А вопросы задавать запрещено?
Пока ищу. Тут кода то. Если вы специалист - вам должно быть сразу видно.
Может ArraySetAsSeries неправильно применяется или еще что-то.
 
Я не специалист. Так, пишу для себя понемногу. Просто опыта чуть больше, чем у вас.