Вопрос по подкачке истории

 

Читаю здесь.

Там написано, что мол:

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

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

На мой взгляд это крайне не верно. Хочется услышать мнение со стороны. Я так понял, что если этот код вызовется одновременного из индикатора и торгового эксперта, что соответственно, вызовет скачивание котировок, одновременно, из индикатора произойдёт касяк какой-то (конкретики там не написано). Так вот, оно то понятно, но в тоже самое время, пример странный. Ведь иногда, пусть даже теоритически может возникнуть необходимость подгрузить котировку прямо из индикатора. И что для этого в эпоху объектно-ориентированного программирования нужно писать отдельные методы что-ли? Не проще ли реализовать это иначе. Типа через некий флаг. Если индикатор или робот используется его сейчас, то он в ТРУ, а когда прекратил использование в ФЭЛС перешёл. И не нужно таких лишних проверок.

И ещё один момент:

SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date); 
   if(first_date>0 && first_date<=start_date) return(1);


Что такое first_date понятно из кода. Но эта проверка для меня загадочна:

first_date>0

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

 
hoz:

Читаю здесь.

Там написано, что мол:

На мой взгляд это крайне не верно. Хочется услышать мнение со стороны. Я так понял, что если этот код вызовется одновременного из индикатора и торгового эксперта, что соответственно, вызовет скачивание котировок, одновременно, из индикатора произойдёт касяк какой-то (конкретики там не написано). Так вот, оно то понятно, но в тоже самое время, пример странный. Ведь иногда, пусть даже теоритически может возникнуть необходимость подгрузить котировку прямо из индикатора. И что для этого в эпоху объектно-ориентированного программирования нужно писать отдельные методы что-ли? Не проще ли реализовать это иначе. Типа через некий флаг. Если индикатор или робот используется его сейчас, то он в ТРУ, а когда прекратил использование в ФЭЛС перешёл. И не нужно таких лишних проверок.

И ещё один момент:

SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date); 
   if(first_date>0 && first_date<=start_date) return(1);


Что такое first_date понятно из кода. Но эта проверка для меня загадочна:

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

С темой подгрузки истории вообще есть большие вопросы. Вот тут тоже поднимал вопрос.