ФОРТС Прошу помощи - страница 8

 
MigVRN:

так всегда было

Он тик эксперта не работает. Да и всё остальное на чате. Таймер и пользовательские события правда не проверял.

Тоже из справки

... Служебные файлы в формате HCC исполняют роль источника данных для построения ценовых данных по запрошенным таймфреймам в формате HC. Данные в формате HC являются таймсериями, максимально подготовленными для быстрого доступа. Они создаются только по запросу графика или mql5-программы в объеме, не превышающем значения параметра "Max bars in charts", и сохраняются для дальнейшего использования в файлах с расширением hc.

Для экономии ресурсов данные по таймфрейму загружаются и хранятся в оперативной памяти только по необходимости, при длительном отсутствии обращений к данным происходит выгрузка их из оперативной памяти с сохранением в файл. Для каждого таймфрейма данные подготавливаются независимо от наличия уже готовых данных для других таймфреймов. Правила формирования и доступности данных одинаковы для всех таймфреймов. Т.е. не смотря на то, что единицей хранения данных в формате HCC является минутный бар, наличие данных в формате HCC не означает наличие и доступность в том же объеме данных таймфрейма М1 в формате HC.

:)

Так кто-же их загрузит в память, как не  SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date)

Другой-то функции нет!!!! 

Зачем лезть на сервер, если данные ЕСТЬ в терминале???? 

 
Mikalas:

:)

Так кто-же их загрузит в память, как не  SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date)

Другой-то функции нет!!!! 

Зачем лезть на сервер, если данные ЕСТЬ в терминале???? 

Всё правильно - она и загружает подготавливает то что есть. Но из-за того что любое промедление в индикаторе тормозит чат со всем что на нем висит - в индикаторах сделали так, что если серия к моменту вызова не готова - функция вернет ошибку и ИНИЦИАЛИЗИРУЕТ подготовку данных. Через какое-то время она уже не будет возвращать ошибку. Это у Вас в логах и происходит.
 
MigVRN:
Потому что именно она ПЕРВЫЙ раз обращается конкретно к этой серии.

Я делал цикл:

long first_date = 0;
    datetime times[1];
    int fail_cnt = 0;
//---
    while ( fail_cnt < 1000 )
    {
      ResetLastError();  
      if ( SeriesInfoInteger( symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE, first_date ) )
      {
        if ( first_date > 0 )
        {
//--- force timeseries build
          CopyTime( symbol, period, datetime( first_date ) + PeriodSeconds( period ), 1, times );
//--- check date
          if ( SeriesInfoInteger( symbol, period, SERIES_FIRSTDATE, first_date ) )
//---        
          if ( first_date > 0 && first_date <= long( start_date ) )
          {
            return( Bars( symbol, period, start_date, end_date ) );
          } 
        }
      }
      fail_cnt++;
    }

 

 Угадайте какой результат?

 
MigVRN:
Всё правильно - она и загружает подготавливает то что есть. Но из-за того что любое промедление в индикаторе тормозит чат со всем что на нем висит - в индикаторах сделали так, что если серия к моменту вызова не готова - функция вернет ошибку и ИНИЦИАЛИЗИРУЕТ подготовку данных. Через какое-то время она уже не будет возвращать ошибку. Это у Вас в логах и происходит.
Это время может занимать или несколько вызовов OnCalculate() или даже несколько секунд. Так работает машинка для зарабатывания денег. Именно поэтому вызывать, что-либо связанное с получением данных из OnInit() индикатора - неправильно.
 
Mikalas:

Я делал цикл:

 

 Угадайте какой результат?

barabashkakvn:
Это время может занимать или несколько вызовов OnCalculate() или даже несколько секунд. Так работает машинка для зарабатывания денег. Именно поэтому вызывать, что-либо связанное с получением данных из OnInit() индикатора - неправильно.

Все правильно - цикл ОЧЕНЬ быстрый. не успевает подготовиться... Я понимаю что с точки зрения разработчика (нас) это АДСКИЙ АД :) , но к нему придется привыкнуть...

Кстати Sleep() в индикаторах не работает

:) 

 
MigVRN:

Все правильно - цикл ОЧЕНЬ быстрый. не успевает подготовиться... Я понимаю что с точки зрения разработчика (нас) это АДСКИЙ АД :) , но к нему придется привыкнуть...

Кстати Sleep() в индикаторах не работает

:) 

Спасибо, Андрей!

Вопрос не к Вам, а риторический:

А для чего тогда

SeriesInfoInteger( symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE, first_date ) ????

 Не получив ответа, я должен обращаться на сервер (данных-то в терминале действительно может не быть) !

Всем спасибо. До чукчи дошло....

... и "респект" MQ! 

P/S Больше не буду читать справку... 

 
Mikalas:

komposter!

Когда Вы что-то не понимаете или заблуждаетесь, то Вас никто не называет чукчей.

С чего бы это? 

Когда я не понимаю, я стараюсь слышать, что мне говорят.

А вы упорно игнорировали опыт многих людей, которые сталкивались с подобной проблемой и решили ее.

Это я и назвал "чукча писатель". 

 
Mikalas:

А для чего тогда

SeriesInfoInteger( symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE, first_date ) ????

 Не получив ответа, я должен обращаться на сервер (данных-то в терминале действительно может не быть) !

Чтоб получить данные, если они готовы, или инициировать подготовку, если запрос происходит впервые.
 
MigVRN:

Все правильно - цикл ОЧЕНЬ быстрый. не успевает подготовиться... Я понимаю что с точки зрения разработчика (нас) это АДСКИЙ АД :) , но к нему придется привыкнуть...

Кстати Sleep() в индикаторах не работает

:) 

Кстати, а то мешало разработчикам, при идентификаторе  SERIES_TERMINAL_FIRSTDATE

возвращать:

-1 - данных нет

0 - данные есть, но не готовы

> 0 - сама дата 

 
Mikalas:

Кстати, а то мешало разработчикам, при идентификаторе  SERIES_TERMINAL_FIRSTDATE

возвращать:

-1 - данных нет

0 - данные есть, но не готовы

> 0 - сама дата 

А какая разница между "нет" и "не готовы" для программы (и программиста)?

Если данные не готовы, будет ошибка.

 

А может эта информация тоже не доступна моментально, поэтому ее и не показывают.

Причина обращения: