mql4 - SeriesInfoInteger

 

Проблемы с функцией SeriesInfoInteger в мт4. - Не могу получить данные с другого символа. Для демонстрации сделал индикатор который показывает проблему:

#property strict
#property indicator_chart_window

input    string   sm="";

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   string smb=sm;
   if (sm=="") smb=Symbol();
   long brs=0;
   ResetLastError();
   if (!SeriesInfoInteger(smb,Period(),SERIES_BARS_COUNT,brs)){Print("Ошибка: "+(string)GetLastError());}
   Comment("Доступно баров: "+(string)brs);
   return(rates_total);
  }

 Я хочу узнать сколько баров доступно по другому символу. Когда запускаю по текущему символу всё работает ,если же указываю в инпуте другой символ то получаю 0. Ошибки тоже при этом нет. Другой символ в обзоре рынка присутствует и история по нему есть. Подскажите где я что неправильно понимаю и в чём ошибка ?

 
Alexey Oreshkin:

Проблемы с функцией SeriesInfoInteger в мт4. - Не могу получить данные с другого символа. Для демонстрации сделал индикатор который показывает проблему:

 Я хочу узнать сколько баров доступно по другому символу. Когда запускаю по текущему символу всё работает ,если же указываю в инпуте другой символ то получаю 0. Ошибки тоже при этом нет. Другой символ в обзоре рынка присутствует и история по нему есть. Подскажите где я что неправильно понимаю и в чём ошибка ?

А точно есть история и есть подготовленная история? (Организация доступа к данным)
 
Karputov Vladimir:
А точно есть история и есть подготовленная история? (Организация доступа к данным)
точно есть. Перешёл на iBars. там всё работает.
 
Alexey Oreshkin:
точно есть. Перешёл на iBars. там всё работает.
Я не вижу в Вашем коде подтверждения наличия подготовленной истории.
 
Karputov Vladimir:
Я не вижу в Вашем коде подтверждения наличия подготовленной истории.

я говорю об мкл4 если что, а не про мкл5

И ещё, я не загружаю историю, а пытаюсь получить количество доступных баров по инструменту который есть в обзоре рынка, но по которому не открыт график. По этой паре приходят тики,это видно, но нет ни одной свечки ??? какая то фантастика. 

 
Alexey Oreshkin:

я говорю об мкл4 если что, а не про мкл5

И ещё, я не загружаю историю, а пытаюсь получить количество доступных баров по инструменту который есть в обзоре рынка, но по которому не открыт график. По этой паре приходят тики,это видно, но нет ни одной свечки ??? какая то фантастика. 

Вы точно прочли: Организация доступа к данным? Не нравиться мт5 (или если не хочется открыть справку в MetaEditore) - вот ссылка на справку mql4: Организация доступа к данным
Организация доступа к данным - Документация на MQL4
  • docs.mql4.com
Организация доступа к данным - Документация на MQL4
 
Karputov Vladimir:
Вы точно прочли: Организация доступа к данным?
точно, и даже именно этим скриптом я и закачиваю историю при необходимости, но опять же на мкл5. На мкл4 попытка обратиться к бару большему чем хранится в переменной SeriesInfoInteger(Symbol(),Period(),SERIES_BARS_COUNT) сразу приводит к ошибке, и это не смотря на то, что на сервере данные ещё есть.
 
Alexey Oreshkin:
точно, и даже именно этим скриптом я и закачиваю историю при необходимости, но опять же на мкл5. На мкл4 попытка обратиться к бару большему чем хранится в переменной SeriesInfoInteger(Symbol(),Period(),SERIES_BARS_COUNT) сразу приводит к ошибке, и это не смотря на то, что на сервере данные ещё есть.

На сервере и подготовленные данные в терминале - это две большие разницы. И вообще обращение к другому инструменту и другому таймфрейму целесообразно делать в советнике, а не через индикатор. В советнике скрипт из (Организация доступа к данным) сможет корректно отработать.

 
Karputov Vladimir:

На сервере и подготовленные данные в терминале - это две большие разницы. И вообще обращение к другому инструменту и другому таймфрейму целесообразно делать в советнике, а не через индикатор. В советнике скрипт из (Организация доступа к данным) сможет корректно отработать.

Хорошо. вот тот же код в советнике: 
#property strict

input    string   sm="";

void OnTick()
  {
   string smb=sm;
   string txt="";
   if (sm=="") smb=Symbol();
   long brs=0;
   ResetLastError();
   if (!SeriesInfoInteger(smb,Period(),SERIES_BARS_COUNT,brs)){Print("Ошибка: "+(string)GetLastError());}
   txt="Доступно баров: "+(string)brs;
   Comment(txt);
  }
Разницы никакой. При этом iBars нормально работает. Обращение итак идёт у меня из советника. 
Индикатор использовал только для проверки, чтобы удобнее было смотреть как меняются данные при смене смивола. чисто для удобства.
 

При чём вот такой код работает вообще без проблем, и при чём показывает количество свечей даже по тем инструментам которые отсутствуют в обзоре рынка.

#property strict

input    string   sm="";

void OnTick()
  {
   string smb=sm;
   string txt="";
   if (sm=="") smb=Symbol();
   int brs=0;
   brs=iBars(smb,Period());
   txt=txt+"\nДоступно баров: "+(string)brs;
   Comment(txt);
  }

 Вот я поэтому и хочу понять функцию SeriesInfoInteger. Что я не так понимаю что она у меня не работает

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