ДО и ПОСЛЕ CopyBuffer(..)

 

Какие проверки, условия, или задержки надо внести ДО и ПОСЛЕ CopyBuffer(), для того, чтоб, ГАРАНТИРОВАННО получить те 400(0) значений индикатора, которые необходимы сейчас(!), на семи(десяти) инструментах в максимально скоростных условиях(в цикле)?

А так же необходимые условия для других Copy.. 

Предлагаю обсудить. Я уже перегрелся...

 

Перед копированием, надо получить ответ на вопрос: а на всём ли диапазоне рассчитан индикатор? Ведь для этого надо какое-то время, и если расчёт не закончен копировать рано! Я использую вот такую конструкцию:

   while(BarsCalculated(handle)<count){}
   CopyBuffer(handle,0,0,count,arr);
 
DC2008:

Перед копированием, надо получить ответ на вопрос: а на всём ли диапазоне рассчитан индикатор? Ведь для этого надо какое-то время, и если расчёт не закончен копировать рано! Я использую вот такую конструкцию:

Для начала я думаю стоит проверить хендлы на инвалидность, а то в блоке инициализации может такой проверки и не быть... :)
 
DC2008:

Перед копированием, надо получить ответ на вопрос: а на всём ли диапазоне рассчитан индикатор? Ведь для этого надо какое-то время, и если расчёт не закончен копировать рано! Я использую вот такую конструкцию:

и что, помогает такая конструкция?

Да и  с проверкой валидности у меня что-то не всегда работает... Бывает что хэндл =14, например, а возвращает CopyBuffer(..)=-1, Error=4807

2010.08.26 23:36:43 ME-V-v001 (EURUSD,M1) CSignals::Level CopyBuffer(EURCHF)=14, Copied=-1 Error 4807

 

 
pronych:

и что, помогает такая конструкция?

А Вы попробуйте.
 
DC2008:
А Вы попробуйте.
Попробовал, пока без ошибок. Благодарю за помощь. Надеюсь этого будет достаточно. Хотя бы для начала.
 

Я слегка модифицировал вашу идею, а то она частенько переходит в бесконечный цикл!

Кажется так будет лучше


 for (int retry = 0; retry < 5; retry++)
 {
    if (BarsCalculated(handle) < count)
    {
      Sleep (1000);
      continue;
    }
    else
    {
      break;
    }

 }

и дальше копируем

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