В режиме тестирования не работают некоторые ф-и?

 
Не помню как раньше, но сейчас когда написал пару советников и индикатор, обнаружил, что в режиме тестирования стратегий такие функции как Ask, Bid - возвращают неверное значение и в экспертах и в индикаторах. Исправлять приходится переписывая везде на iClose(NULL,0,0).

Кроме того, в индикаторах не работают функции TimeHour, TimeMinute и подобные, опять же в режиме тестирования стратегий. Приходится обходить - в советник включать объявление глобальных переменных, хранящих в себе время и дату (которые в советник приходят корректно) и публиковать их в этих глобальных переменных при каждом тике. а индикатор берет уже эти данные из пространства глобальных переменных.

Обращаю внимание, что в руководстве написано - "в режиме тестирования стратегий данные возвращаемые этими функциями моделируются"
 
А как Вы узнали, что Ask и Bid неправильны, они ведь моделируются?
У меня почему-то все временные функции работали как полагается.
 

Да очень просто. создайте индикатор, поместив в него следующий код:


#property indicator_chart_window

int start()
  {    
   Comment(Ask+"   "+iClose(NULL,0,0));
  }



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

Отпишите здесь как попробуете, надо сравнить что у вас получилось с моим.

 
dimonsky :

Да очень просто. создайте индикатор, поместив в него следующий код:

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

Отпишите здесь как попробуете, надо сравнить что у вас получилось с моим.

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

 

Дело в том что я отлаживаю индикатор на исторических данных. И почему тогда iClose работает нормально?? ведь iClose при Вашем объяснении должен тоже возвращать данные реального рынка, а не смоделированные.

Теперь временные функции.

Берем следующий код:

#property indicator_chart_window

int start()
  {    
   Comment(TimeHour(TimeCurrent())+":"+TimeMinute(TimeCurrent())+":"+TimeSeconds(TimeCurrent()));
  }

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

Вот это мне тоже непонятно, почему индикатор обделен?

Или это предусмотрено изначально, чтобы при тестировании стратегий индикаторы вызывались только из тестируемого эксперта? Если так тогда опять есть вопросы. 

Вот код. В нем и Ask и Close[0] - переменные одного класса, если можно так высказаться. Однако результат тот же. Если Ваше объяснение верно, почему close возвращает правильно, а Аsk - нет?

int start()
  {    
   Comment(Ask+"   "+Close[0]);
   //Comment(TimeHour(TimeCurrent())+":"+TimeMinute(TimeCurrent())+":"+TimeSeconds(TimeCurrent()));
  }
 
Если Ваше объяснение верно, почему close возвращает правильно, а Аsk - нет?
Проверил. Close показывает Bid, Ask показывает Ask. Время показывает правильно