Глобальные переменные терминала и тестер стратегий

 
Хотелось бы обратить внимание разработчиков на следующую неприятную особенность тестера при работе с глобальными переменными терминала.
Во-первых, при тестировании стратегии, которая работает с глобальными переменными терминала, происходит ИЗМЕНЕНИЕ ТЕКУЩИХ РЕАЛЬНЫХ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ ТЕРМИНАЛА, что очень неудобно. А если в этот момент времени работает на реале тот же самый советник, который использует те же самые глобальные переменные, то высока вероятность сбоев в его работе (выставление неправильных ордеров). Я конечно же вовремя это заметил и принял соответствующие меры (больше на рабочем терминале стратегии не тестирую).
Во-вторых, если первую проблему решить нет технической возможности, то уж сделать чтобы глобальные переменные по окончанию (или прекращению) тестирования возвращались в первоначальное значение, которое они имели до момента старта тестера стратегий, уж наверное сделать можно?
Хотелось бы узнать мнение разработчиков на этот счёт.
Билд 195 (liveupdate от 30.06.2006)
 
Для того, чтоб тесты не мешали реальной работе, есть функция IsTesting().
А глобальные переменные - это единственный мостик между тестами и реальностью. Без них было бы сложно реализовать некоторые идеи, связанные с тестированием ;)
 
Мы подумаем над разделением глобальных переменных в тестере.
 
Для того, чтоб тесты не мешали реальной работе, есть функция IsTesting().

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

Мы подумаем над разделением глобальных переменных в тестере.

Будем ждать новых исправлений в грядущих билдах.
 
Можно продублировать второй набор глобальных переменных исключительно для целей бектеста. ТИпа ,
if (IsTesting()) 
{
// работа с одним набором глю переменных
}
else 
{
// работа с другим набором гл. переменных
}


И никаких пересечений. Этот вариант уже предлагался где-то на форуме раньше.

 
А массив может быть глобальным?
 
Нет, но есть обходные пути :)
 
Но глобальные переменные не отключить таким образом.
Почему?

Я их использую исключительно в целях восстановления системы после выключения питания, чтобы система знала расчётные значения например за последние несколько баров без дополнительного (постоянного) пересчёта.
Какое может быть отключение питания при тесте? В МТ 4 ещё нет симулятора уборщицы ;)


Я тоже тспользую гл. п. для восстановления работы эксперта, но при тесте я использую обычные переменные, объявленные на глобальном уровне.
 
Конечно же обходных путей море. И самый лучший из них просто не тестировать советника на рабочем терминале ;o)! Но если разработчики смогут довести тестер так как и для других составляющих типа отдельного экаунта, то это будет в любом случае самым рациональным решением.
 
Rosh: "Нет, но есть обходные пути :)"

И где смотреть про эти пути?
 
MetaQuotes:
Мы подумаем над разделением глобальных переменных в тестере.

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

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