RefreshRates() == false

 

Здравствуйте.

Простой код для подсчета количества итераций между тиками.

 int i,Count;
   for (i=1; i<=5; i++)                      
     {
      Count=0;                               
      while(RefreshRates() == false)         
          {                                   
           Count = Count+1;                   
          }
        Alert("Тик ",i,"циклов =  ",Count);
     }

Если потянуть на  текущей график, запускается.Но на тестере стратегий( для анализа участков истории) не запускается.Ошибку не выдает, просто график замирает на первом тике.

Без анализа на истории не представляется возможным написание задуманного кода.Пожалуйста, в чем ошибка? Как исправить код для запуска на тестере стратегий.

Файлы:
renw6v1ykl.png  56 kb
 
Правильная реакция тестера. RefreshRates() возвращает true, при смене цены, то есть при приходе нового тика.
 

RefreshRates

Возвращает true, если данные обновлены, иначе false.

while(RefreshRates() == false)

Ловите бесконечный цикл в тестере.

Вроде в пример показан, зачем изобретать что-то лишнее.
 
Dmitry FedoseevПравильная реакция тестера. RefreshRates() возвращает true, при смене цены, то есть при приходе нового тика.

Когда true, по коду управление должно переходит оператору for. После for управление вновь последовательно переходит к while для которого уже истина false ...Не могу понять, что мешает тестеру.Полагаю особенности работы тестера.

Как же быть? Как анализировать историю? Пожалуйста, подскажите.

 
Pavel:

Когда true, по коду управление должно переходит оператору for. После for управление вновь последовательно переходит к while для которого уже истина false ...Не могу понять, что мешает тестеру.Полагаю особенности работы тестера.

Как же быть? Как анализировать историю? Пожалуйста, подскажите.

for (int i=1; i<=5; i++)                      
  {
   /* bla-bla-bla */
   //---- обновим ценовые данные
   RefreshRates();
  }

Довольно ясно все показано в примере RefreshRates

Просмто в конце цикла, если есть новые данные обновите их и все. Нету работайте со старыми.

 
Pavel:

Если потянуть на  текущей график, запускается.Но на тестере стратегий( для анализа участков истории) не запускается.

не используйте в тестере стратегий, там все равно всегда актуальные данные котировок, 

bool refreshrates(int count=10)
  {
   if(IsTesting()||IsOptimization())return(true);
   for(int i=0;i<count;i++) if(RefreshRates()) return(true);
   Print("Не удалось обновить RefreshRates()");
   return(false);
  }


замените в своем коде вызовы RefreshRates() на мою refreshrates() и все будет корректно работать

PS: паузу бы поставить, смысла нет обновлять 10 раз за хх мсек, я бы хоть 300-500 паузу использовал, но тут дело вкуса

 
Pavel:

///

Как же быть? Как анализировать историю? Пожалуйста, подскажите.

Какую историю? Тики или бары?

 
Dmitry Fedoseev:

Какую историю? Тики или бары?

Количество итераций между тиками на конкретных участках истории т.е. историю тиков.

 
Igor Makanu:

не используйте в тестере стратегий, там все равно всегда актуальные данные котировок, 


замените в своем коде вызовы RefreshRates() на мою refreshrates() и все будет корректно работать

PS: паузу бы поставить, смысла нет обновлять 10 раз за хх мсек, я бы хоть 300-500 паузу использовал, но тут дело вкуса

Благодарю.
 
Konstantin Nikitin:

Довольно ясно все показано в примере RefreshRates

Просмто в конце цикла, если есть новые данные обновите их и все. Нету работайте со старыми.

Благодарю.
 
Pavel:

Количество итераций между тиками на конкретных участках истории т.е. историю тиков.

Вот таким образом в цикле вообще не стоит ждать. Каждый новый тик запускает функцию OnTick() - собирайте тики в массив.