Вопрос. Индикатор на основе пользовательского индикатора.

 

Кто сталкивался, или как можно обойти?

Задача: Пишу заказчику индикатор на основе уже готового (строит объемы). В новом нужно циклом пройтись по выбранным пользователем парам. Соотв-но на каждом OnCalculate я циклом меняю Handle, на новую пару, и копирую в массив. Но вот проблема, когда цикл доходит до пары отличной от той на которой тестируется индикатор, при копировании выдает ошибку 4806 - "Запрошенные данные не найдены". Пробовал "отпускать" индикатор, инициализировать массив, дело не в этом. У тестера нет данных о других валютах кроме той на которой проходит тестирование. Посоветуйте как обойти, или как реализовать задачу по другому?

 

bool iterates()
  {
   for(int i=0;i<ArraySize(pearsNames);i++)
     {
      int Handle=0;
      Handle=iCustom(pearsNames[i],PERIOD_CURRENT,"Volume_factor_v1",InpVCoef,InpMaxBars);
      if(CopyBuffer(Handle,0,0,3,upBuffer)==-1)
        {
         Print(GetLastError());
         break;  // ошибка, завершаем работу функции
         return(false);
        }
      if(CopyBuffer(Handle,1,0,3,dwBuffer)==-1)
        {
         break;  // ошибка, завершаем работу функции
         return(false);
        }
     }
   return(true);
 

создайте все хендлы в OnInit, а в OnCalculate делайте проверку готовности данных, есть специально для этого функция

 SeriesInfoInteger с модификатором 

SERIES_SYNCHRONIZED

Признак синхронизированности данных по символу/периоду на данный момент

bool

 
Alexander Bereznyak:

создайте все хендлы в OnInit, а в OnCalculate делайте проверку готовности данных, есть специально для этого функция

 SeriesInfoInteger с модификатором 

SERIES_SYNCHRONIZED

Признак синхронизированности данных по символу/периоду на данный момент

bool

Хмм... точно, все 10 хендлов и в Init. Буду проверять какие пары пользователь ввел и использовать соответствующее количество хендлов.

 СПС 

 
Eugeny Kotovschikov:
Не помогло(((

История по 2й паре загрузилась, но при копировании буфера индикатора опять ошибка 4806(((

2016.07.09 17:46:33.563 GBPUSD.e,M5: history begins from 2015.01.02 08:00

2016.07.09 17:46:33.514 GBPUSD.e,M5: history cache allocated for 112937 bars and contains 108693 bars from 2015.01.02 08:00 to 2016.06.17 23:55
2016.07.09 17:46:32.992 GBPUSD.e: history synchronized from 2012.01.01 to 2016.07.01
2016.07.09 17:46:32.992 GBPUSD.e: load 31 bytes of history data to synchronize
2016.07.09 17:46:29.780 GBPUSD.e: history synchronization started

 
Eugeny Kotovschikov:

История по 2й паре загрузилась, но при копировании буфера индикатора опять ошибка 4806(((

2016.07.09 17:46:33.563 GBPUSD.e,M5: history begins from 2015.01.02 08:00

2016.07.09 17:46:33.514 GBPUSD.e,M5: history cache allocated for 112937 bars and contains 108693 bars from 2015.01.02 08:00 to 2016.06.17 23:55
2016.07.09 17:46:32.992 GBPUSD.e: history synchronized from 2012.01.01 to 2016.07.01
2016.07.09 17:46:32.992 GBPUSD.e: load 31 bytes of history data to synchronize
2016.07.09 17:46:29.780 GBPUSD.e: history synchronization started

работает без ошибок, только первые 2 раза 4806, но данные из буфера по второй паре приходят пустые((((
Причина обращения: