Уточните язык: MQL4 или MQL5?
Потому как из кода, судя по использованию функции SeriesInfoInteger, речь идет об MQL5. Но в таком случае Time[0] не может быть использовано, т. к. такой таймсерии в MQL5 нет.
Если же основываться на том, что таймсерия Time существует, то речь об MQL4. Но тогда использовать SeriesInfoInteger совместно с SERIES_LASTBAR_DATE, не имеет смысла, т. к. для этого есть Time[0] или iTime(NULL, 0, 0).
Если речь об MQL4, то бегом в сервисдеск с этой ошибкой. Разработчики ее уже больше года отлавливают, но воспроизвести не могут.
Уточните язык: MQL4 или MQL5?
Потому как из кода, судя по использованию функции SeriesInfoInteger, речь идет об MQL5. Но в таком случае Time[0] не может быть использовано, т. к. такой таймсерии в MQL5 нет.
Если же основываться на том, что таймсерия Time существует, то речь об MQL4. Но тогда использовать SeriesInfoInteger совместно с SERIES_LASTBAR_DATE, не имеет смысла, т. к. для этого есть Time[0] или iTime(NULL, 0, 0).
Если речь об MQL4, то бегом в сервисдеск с этой ошибкой. Разработчики ее уже больше года отлавливают, но воспроизвести не могут.
Спасибо. MQL4 язык. В справочнике по языку есть эта функция. с ней по крайней мере советник не вылетает. Но в сервисдеск уже бегу ))
Люблю когда люди ищут что то посложнее:)))))))))))
int prev_bars; if(Bars!=prev_bars) { Alert("New bar"); prev_bars=Bars; }
GetLastError() надо проверять, надо дать данным обновиться.
Только смысл такого в чем? Ладно бы МТ5, где только стандартные таймфреймы, а если МТ4, то значит сразу ограничиваем себя стандартными таймфреймами, а ведь могут быть и нестандартные.
Если ограничиться только стандартными таймфреймами, проще вычислить номер бара от начала эпохи используя TimeCurrent().
***
Тем более используется Period() - таймфрейм графика. Тогда уж можно просто Time[0].
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Использую в коде такую схему
bool isNewBarCreated()
{
//--- в статической переменной будем помнить время открытия последнего бара
static datetime last_time=0;
//--- текущее время
datetime lastbar_time;
if(!SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE,lastbar_time))return(false);
//--- если это первый вызов функции
if(last_time==0)
{
//--- установим время и выйдем
last_time=lastbar_time;
return(false);
}
//--- если время отличается
if(last_time!=lastbar_time)
{
//--- запомним время и вернем true
last_time=lastbar_time;
return(true);
}
//--- дошли до этого места - значит бар не новый, вернем false
return(false);
}
Проблема в том, что в журнале появляются сообщения
2016.01.11 14:25:05.376 EURUSD.m,H1: cannot refresh history [4073]
Если я изменяю в этом коде строку
datetime lastbar_time;
if(!SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE,lastbar_time))return(false);
на
datatime lastbar_time = Time[0];
То при появлении нового бара выдает сообщение , что array out of range на этой строке.
Не понимаю где ошибка. Помогите, пожалуйста.