[Предложение] Исправить страницу 'Организация доступа к данным' в документации

 

https://www.mql5.com/ru/docs/series/timeseries_access

На этой странице сказано, что "Функция CheckLoadHistory() задумана как универсальная, которую могут вызвать из любой программы (эксперт, скрипт или индикатор)".

Это неверно, поскольку функция CheckLoadHistory() использует Sleep() функцию, которая не работает в индикаторах.

Прошу исправить это, или добавить пример индикатора, использующий CheckLoadHistory() функцию (более лучший вариант).

 

Другая ошибка: "Если вдруг начальная дата first_server_date на сервере окажется меньше, чем начальная дата first_date по символу в формате HCC , то в журнал будет выведено соответствующее сообщение."

Должно быть написано не меньше, а больше.

if(first_date>0 && first_date<first_server_date)
 
Andrei Iakovlev:

https://www.mql5.com/ru/docs/series/timeseries_access

На этой странице сказано, что "Функция CheckLoadHistory() задумана как универсальная, которую могут вызвать из любой программы (эксперт, скрипт или индикатор)".

Это неверно, поскольку функция CheckLoadHistory() использует Sleep() функцию, которая не работает в индикаторах.

Прошу исправить это, или добавить пример индикатора, использующий CheckLoadHistory() функцию (более лучший вариант).

Там также написано

Следующая важная проверка — проверка типа программы, из которой вызывается функция. Напомним, что отправка запроса на обновление таймсерии с тем же периодом, что и у индикатора, вызывающего обновление, крайне нежелательна. Нежелательность запроса данных по тому же символу-периоду, что и у индикатора обусловлена тем, что обновление исторических данных производится в том же потоке, в котором работает индикатор. Поэтому велика вероятность клинча. Для проверки используем функцию MQL5InfoInteger() с модификатором MQL5_PROGRAM_TYPE.

   if(MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR && Period()==period && Symbol()==symbol)
      return(-4);
 
Rashid Umarov #:

Там также написано

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

 

Ещё одна неточность в этой фразе: "После операции копирования необходимо проанализировать количество скопированных элементов, если попытка оказалась неудачной, то значение переменной copied будет равно нулю".

В случае неудачи значение переменной copied будет равно, как я понимаю, -1.

 
Andrei Iakovlev #:

Ещё одна неточность в этой фразе: "После операции копирования необходимо проанализировать количество скопированных элементов, если попытка оказалась неудачной, то значение переменной copied будет равно нулю".

В случае неудачи значение переменной copied будет равно, как я понимаю, -1.

Научитесь не просто читать но и понимать прочитанное.

Если в запрошенном периоде нет ничего, то скопированных элементов будет 0. А если при выполнении произошла ошибка то функция вернёт -1.

Andrei Iakovlev #:

Другая ошибка: "Если вдруг начальная дата first_server_date на сервере окажется меньше, чем начальная дата first_date по символу в формате HCC , то в журнал будет выведено соответствующее сообщение."

Должно быть написано не меньше, а больше.

Научитесь не просто читать но и понимать прочитанное.

Если в терминале есть история с 2000го года, а вы запрашиваете только за 2022й год, то это и будет называться «начальная дата first_server_date на сервере окажется меньше, чем начальная дата first_date»

 
Alexey Viktorov #:

Научитесь не просто читать но и понимать прочитанное.

Вам в дополнение к этому надо ещё научиться понимать написанное самим собой.

А если при выполнении произошла ошибка то функция вернёт -1.

Значит copied всё таки может быть равно -1, да? Я про этот случай ошибки (неудачи) и говорю.

Если в запрошенном периоде нет ничего, то скопированных элементов будет 0.

"Нет ничего" - это отсутствующие данные на сервере в нужном интервале? Если да, то функция также вернёт -1.

Alexey Viktorov #:

Если в терминале есть история с 2000го года, а вы запрашиваете только за 2022й год, то это и будет называться «начальная дата first_server_date на сервере окажется меньше, чем начальная дата first_date»

Полная чушь. Причём здесь start_date?

Если в терминале есть история с 2000 года (SERIES_TERMINAL_FIRSTDATE), а start_date = D'2022.01.01', то почему first_server_date (SERIES_SERVER_FIRSTDATE) окажется меньше, чем SERIES_TERMINAL_FIRSTDATE в этом случае? 

По какой причине? Где связь между этими тремя значениями?

Я специально скопировал код из примера, вот эта часть хорошо сейчас видна:

first_date < first_server_date

?

Если в терминале есть история с 2000 года и если SERIES_SERVER_FIRSTDATE окажется больше, скажем, равной 2001 году, то в журнал будет выведено соответствующее сообщение.

 

Ещё одна ошибка, теперь в коде.

"Если вдруг начальная дата first_server_date на сервере окажется меньше, чем начальная дата first_date по символу в формате HCC"

if(first_date>0 && first_date<first_server_date)

До этой строчки выше в последний раз first_date принимает значение из SERIES_FIRSTDATE, а не из SERIES_TERMINAL_FIRSTDATE, в этом блоке кода ниже:

if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
     {
      //--- there is loaded data to build timeseries
      if(first_date>0)
        {
         //--- force timeseries build
         CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
         //--- check date
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(2);
        }
     }
Причина обращения: