Вот что я точно заметил, так это то, что на Альпари я протестировал и про оптимизировал советника (не важно какой), а на Екснесс он показал совсем не те результаты и пришлось его оптить заново.
Ещё раз к вопросу о тестировании, точнее, о совпадении результатов тестов на котировках от разных ДЦ :
1. Точного совпадения получить невозможно (хотя бы из-за "расхождения" отдельных баров по разным суткам из-за разницы временных шкал), да к этому и стремиться не нужно: достаточно того, чтобы на разных ДЦ сохранялась
тенденция, т.е. общий вид кривой депозита. Этого достаточно для того, чтобы результаты эксперта считать подтверждёнными.
2. 1-я причина полного расхождения (напрмер, на одном ДЦ - прибыль, а не другом - слив) - это
значность цифр котировок, например: на Alpari - 5, на
большинстве других - 4 (стандартная переменная Digits). Для устранения этого расхождения, в большинстве случаев, нужно "поинтные" переменные (чаще всего это расстояние SL и TP, но и slippage при открытии/закрытии ордеров) значения таких переменных умножить на 10 для 5 знаков, или разделить на 10 для 4-х. Но для этого нужно, чтобы такие параметры были оформлены как настраиваемые параметры советника, а это бывает не всегда ... а для slippage - никогда.
Моё мнение на этот счёт: хорошо написанный советник должен бы сам выяснять ( MarketInfo( Symbol(), MODE_DIGITS ) ) "знаковость" ДЦ, где он запущен и пересчитывать такие "поинтные" переменные сам внутри.
3. 2-я причина (часто очень скрытая) - это
ошибки открытия/закрытия ордеров, которые возникают на одном ДЦ, но нет на другом. Это - внимательно смотрите журнал тестера.
Это тяжёлая ошибка, обычно связана с грубым (нетщательным) вычислением расстояний SL/TP, цен ордеров и их slippage ... Тут поможет только правка (подчистка) кода программы-советника.
4. 3-я - очень интересная причина - это различный
размер стандартного лота ( MarketInfo( Symbol(), MODE_LOTSIZE ) ) на разных ДЦ, например: на
подавляющем большинстве ДЦ это 100000 в котируемой валюте, но на InstaForex - это 10000, т.е. в 10 раз меньше.
Я прикрепил по этому поводу 2 картинки (это короткие тесты, январь-февраль этого года, советника PuriaM, который я здесь где-то приводил) - они как близнецы братья (и из отчёта: и по числу сделок и т.д.). Но! На левом (Alpari) - цифра конечная порядка 1600, а на правом - 1060. И это всего лишь потому, что:
- размер лота в одоих случаях фиксированный, и равен 0.1...
- но вычисляется этот 0.1 от стандартных лотов, соответственно 100000 и 10000...
- и объёмы открываемых ордеров будут соответственно 10000 и 1000, т.е. в 10 раз отличаются...
- и все результаты сделок в точности повторяют друг-друга, но масштабированы в 10 раз...
Вот по поводу п.4 у меня есть неоднозначность, как здесь поступать советнику:
а). никак, т.е. запуская его (не тесте, демо, или реале) мы указываем 0.1, если это Alpari, и 1.0, если это InstaForex.
б). пересчитывать такие "задроченные" лоты как на InstaForex - в нормальные, всё таки изначально и во всех книгах: стандартным лотом считается 100000 "в котируемой валюте".
в). делать как б). но выводить alert(), предупреждающий, что на этом ДЦ размеры лота будут пересчитаны.
г). делать как а). но выводить alert(), предупреждающий, что на этом ДЦиспользуются "задроченные" лоты.
P.S. вообще то, для меня полнейшая загадка, для чего InstaForex сделали этот фокус с размером
стандартного лота?
У меня только одна может быть догадка: специально, чтобы трейдерам мозги задурить.
... никакого другого объяснения я не могу придумать: для работы с малыми суммами недостаточно вам минимального размера ордера 0.001 - так разрешите размер 0.0001.
Прикрепленные изображения