Так устроит?
int start() { int MyPeriod=PERIOD_M5; int fndHour=8; int fndMin= 0; int H, M; for(int i=0; i<288; i++) { H=TimeHour(iTime(Symbol(),MyPeriod,i)); M=TimeMinute(iTime(Symbol(),MyPeriod,i)); if(H==fndHour && M==fndMin) { Alert("Искомая свеча находится на "+i+" месте"); return(i); } } Alert("Первый бар не найден"); return(-1); }//start()
luka писал(а) >>
А вот в советнике не хочет. То есть в тестере он задает значение -1 и эксперт из-за этого не работает...
В чем засада?
Почти наверняка в тестере (fxt) в том дне нет этого бара.
Мягше надо быть, мягше - поставьте
FALSE - iBarShift возвращает ближайший.
и проверьте.
И сравнение будет осмысленным - не просто -1 "нет бара", а есть ближайший "не подходящий" бар. (TimeHour <> 8 и TimeMinute <> 0)
Да и day_start можно вычислять элегантнее - если Вы уже в интересующем Вас дне (Time[0] и т.п.), то функциями Time*() можно "набрать" интересующее время, а час и минуту вынести во внешние переменные (летнее время и т.п.)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не могу разобраться...
спецификация моего эксперта состоит в том, что он каждый новый день начинает все расчеты от бара на М5, время которого 8:00.
Вот кусок кода, с помощью которого я вычисляю этот бар:
// определяем номер бара на НАЧАЛО ДНЯ
int firstbar = 0;
day_start = D'Day Month Year 8:00';
firstbar=iBarShift(NULL,PERIOD_M5, day_start, true);
Print("Первый бар ",firstbar);
if( firstbar < 0 )
{
Print("Первый бар не найден.");
return(0);
}
В индюке работает нормально, первый бар определяет.
А вот в советнике не хочет. То есть в тестере он задает значение -1 и эксперт из-за этого не работает...
В чем засада?