Ловимо баги в тестері стратегій МТ4

Нещодавно мою увагу привернули до бага у тестері МТ4. Баг полягає в тому, що при оптимізації спред, який використовує тестер, може відрізнятися від спреду при одиночному прогоні тестера і від того, що користувач виставляє в налаштуваннях тестера. Баг актуальний для поточної версії МТ4 1045

тестері

і, мабуть, присутній у попередніх білдах теж. Давайте переконаємося самі, чи баг, і подумаємо як з ним боротися.

Як дізнатися, який спред радник використовує під час оптимізації? Адже виведення до журналу під час оптимізації не провадиться. За допомогою глобальної змінної. Я написав найпростіший радник, який встановлює глобальну змінну, якій надається значення спреду (можна завантажити наприкінці статті).

тестері

Проганяємо радник у тестері (неважливо, оптимізація чи одиночний прогін), натискаємо F3 і у списку глобальних змінних бачимо величину спреду.

ловимо

Давайте тепер зробимо прогін у тестері з котируванням тиків, отриманим як описано в недавній статті (https://www.argolab.net/o-testirovani.html). Виставляємо спред у тестері, скажімо, 75

робимо одиночний прогін і перевіряємо, що тестер дійсно використав той спред, який ми встановили

стратегій

Добре. А тепер – не змінюючи спред у налаштуваннях тестера – зробимо оптимізацію (у раднику для цієї мети є зовнішня змінна, яка ні на що не впливає – лише дозволяє нам запустити оптимізацію).

І бачимо, що цього разу тестер використав значення спреда 35, хоча в налаштуваннях стоїть 75

оптимізації

Звідки тестер взяв значення 35? З файлу FXT. 35 – це значення спреда, зашите при генерації файлу FXT.

Так, нас не обдурили, це баг.

Виникає він лише при тестуванні з якістю моделювання 99%? Не тільки.

Давайте виконаємо "звичайне тестування", з якістю моделювання 90%. Робимо поодинокий прогін у тестері, перевіряємо спред – все нормально. Робимо оптимізацію, перевіряємо спред – все знову нормально. А тепер, увага! Ми вирішуємо повторити оптимізацію, але з іншим спредом. І тут бачимо баг тестера. Тестер використовує FXT файл, що залишився від попередньої оптимізації, в тому файлі FXT записано старе значення спреда і це старе значення спреда використано в останній оптимізації. Що ми бачимо на малюнку

оптимізації

  1. Якщо ми тестуємо за реальними котируваннями тика, то оптимізації в тестері виконується з тим значенням спреда, який зашитий у FXT файл, а одиночний прогін виконується з тим значенням спреда, який встановлений в налаштуваннях тестера. Спробуйте не заплутатися:).
  2. Якщо ми тестуємо звичайним способом, перед зміною спреда при оптимізації треба стерти старий FXT файл (лежать в tester\history).

Всім удачі та профітів!

Завантажити check spread: