Хващане на бъгове в тестер на стратегии MT4
Наскоро вниманието ми беше привлечено от грешка в тестера на MT4. Грешката е, че по време на оптимизация, разпространението, използвано от тестера, може да се различава от разпространението по време на едно изпълнение на тестера и от това, което е зададено от потребителя в настройките на тестера. Грешката е от значение за текущата версия на MT4 1045

и, очевидно, присъства и в предишни компилации. Нека сами да видим дали има грешка и да помислим как да се справим с нея.
Как да разберете какъв спред използва EA по време на оптимизация? В края на краищата изходът към дневника по време на оптимизацията не се извършва. С глобална променлива. Написах прост EA, който задава глобална променлива, на която е присвоена стойност на разпространение (достъпна за изтегляне в края на статията).

Стартирайте експертния съветник в тестера (няма значение дали е оптимизация или еднократно), натиснете F3 и вижте стойността на спреда в списъка с глобални променливи.

Нека сега направим тестерно изпълнение на тик-кавички, получени, както е описано в скорошна статия (https://www.argolab.net/o-testirovani.html). Задаваме разпространението в тестера, да речем, 75
направете еднократно изпълнение и проверете дали тестерът действително е използвал разпространението, което сме задали

Глоба. И сега, без да променяме разпространението в настройките на тестера, нека направим оптимизацията (EA има външна променлива за тази цел, която не засяга нищо, позволява само да стартираме оптимизацията).
И виждаме, че този път тестерът е използвал стойността на разпространението от 35, въпреки че в настройките е 75

Откъде тестерът взе стойността 35? От FXT файл. 35 е стойността на разпространението, която е била твърдо кодирана при генерирането на FXT файла.
Да, не бяхме измамени, това е грешка.
Възниква ли само при тестване с 99% качество на симулацията? Не само.
Нека направим "рутинно тестване" с 90% качество на симулацията. Правим едно пускане в тестера, проверяваме разпространението - всичко е наред. Правим оптимизация, проверяваме разпространението - всичко отново е наред. А сега внимание! Решаваме да повторим оптимизацията, но с различен спред. И тук виждаме грешка на тестер. Тестерът използва FXT файла, останал от предишната оптимизация, в този FXT файл се записва старата стойност на разпространението и тази стара стойност на разпространението е използвана при последната оптимизация. Това, което виждаме на снимката

- Ако тестваме с помощта на реални котировки на тикове, тогава оптимизацията в тестера се извършва със стойността на спреда, която се съхранява във файла FXT, и се извършва еднократно изпълнение със стойността на спреда, която е зададена в настройките на тестера. Опитайте се да не се объркате :).
- Ако тестваме по обичайния начин, тогава преди да променим спреда по време на оптимизацията, трябва да изтрием стария FXT файл (намиращ се в tester\history).
Успех и печалби на всички!
Изтегляне на разпределение на чека: