Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Использование функции ExpertRemove() для уменьшения времени тестирования - эксперт для MetaTrader 4
- Просмотров:
- 2418
- Рейтинг:
- Опубликован:
- 2023.05.18 14:39
- Обновлен:
- 2023.05.18 15:34
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
При тестировании эксперта тестер в каждой итерации (в каждом наборе параметров) прогоняет весь выбранный диапазон дат от начала до конца, несмотря на то что эксперт в случае неудачной комбинации параметров уже обнулил депозит и дальше не "торгует".
Но, если добавить параметр который ограничивает потери в процессе тестировании эксперта и следить за этим параметром, чтобы в нужный момент вызвать функцию ExpertRemove() - это заставит тестер прервать тестирование данной итерации, но оставит тестеру всю статистику и все результаты тестирования данной итерации. Пример в коде.
В блоке объявления переменных задаем переменную ограничивающую потери эксперта, в данном случае - нижний предел свободных средств на счете (то что называется "Свободная маржа" в окне терминала):
extern int FreeMargin = 90; //Свободные средства (в валюте счета)
Затем, в блоке события OnTick() мы наблюдаем за этими самыми свободными средствами и если их стало меньше нашего предела - вызываем функцию ExpertRemove() и прекращаем тестирование данной итерации (конечно же мы также проверяем что мы находимся в тестере (результат функции IsTesting()), а не в реальном боевом режиме):
void OnTick() { . . . if(IsTesting()&&AccountInfoDouble(ACCOUNT_MARGIN_FREE)<=FreeMargin) ExpertRemove(); . . .
Тестер собирает статистику данной итерации и запускает тестирование следующего набора данных не доходя до конца диапазона дат для данного набора.
Ну в самом деле, зачем продолжать тестирование если данный набор параметров уже провалился - депозит счета не увеличился, а уменьшился :)
Скриншоты.
Начальный депозит
Условие неудачи
Скриншот предполагаемого(расчетного) времени тестирования без этой полезной функции
Скриншот предполагаемого(расчетного) времени тестирования со включенной функцией
На деле разница даже больше чем здесь получается из картинок. Тестирование 1 неудачной итерации без функции занимает примерно 20 секунд, с функцией за 1 секунду тестируются 2-5 (и даже больше) итераций, в зависимости от степени неудачности :)
Абсолютно необязательно использовать "Свободная маржа" в качестве условия выхода из теста, можно использовать любые другие условия подходящие для вас и ваших задач.
Также не обязательно делать отслеживаемый параметр внешним (extern), просто так его удобнее контроллировать без перекомпиляции каждый раз. Можно сделать это extern на этапе тестирования и отладки, а затем в финальной версии просто убрать совсем или как вы захотите :)
Прошу не судить строго, моя первая работа, и первая написанная программа впринципе в жизни. Принцип стратегии по которой сам работаю и можно сказать торгую в плюс: "Паттерн поглощение, правда слегка измененный, при появлении сигнала, советник отправляет сообщение на устройство, в моем случае на телефон, и после я уже сам решаю открывать ордер или нет" Прошу адекватной критики и советов, заранее спасибо
AllAverages v4.9Одна из последний версий этого индикатора на текущий момент. Огромная база разных модификаций средних скользящих, с функцией мультитаймфрейма, отправкой сигналов на почту и push уведомлений.
Замучил мелкий шрифт в терминале? Этот индикатор делает цифры цены видимыми!
Reaper_v2.8.mq4Интересный советник на сигналах индикатора Alligator,ATR и индикатора Moving Averages.