Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Но сама же идея элементарная.
На каждом начале нового бара сравнить 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 неправильно применяется или еще что-то.