Определение параметров советника
После того, как мы обучили модель, перед ее применением в торговой стратегии, необходимо научиться ее использовать. Прежде всего, нужно научиться понимать ее сигналы. Как вы знаете, после осуществления прямого прохода на выходе наша модель возвращает два значения:
- Вероятное направление движения (абсолютное значение показывает вероятность движения, а знак — направление);
- Ожидаемую силу движения (абсолютное значение показывает силу движения, а знак — направление).
Для каждого параметра нужно найти пороговое значение принятия решения. Слишком большое значение может отсечь большое количество прибыльных сделок или вовсе не дать ни одного сигнала на совершение торговых операций. Слишком маленькое значение может привести к большому количеству ложных сигналов и вовсе сделать торговлю убыточной. Поэтому сейчас очень важно найти оптимальные параметры советника для работы с нашей обученной моделью.
Для выполнения этой работы нам идеально подходит тестер стратегий MetaTrader 5. В терминале нажимаем клавиши Ctrl+R и переходим в тестер. На вкладке Settings в поле Expert выбираем свой советник и выставляем параметры тестирования.
Мы обучали модель на исторических данных EURUSD за 2015–2020 годы на таймфрейме М5. На этих же исторических данных мы и будем определять оптимальные параметры советника. В общем правиле обучения нейронных сетей проверка работоспособности модели проверяется на валидационной выборке. Но в данном случае мы просто определяем оптимальные параметры советника при работе модели на обучающей выборке.
Мы знаем, что наш советник анализирует точки входа только на открытии свечи, поэтом для проверки наличия сигналов от модели можно было бы провести тестирование только по ценам открытия. Но нам также надо понимать качество этих сигналов. При этом хочется провести первый грубый подбор параметров с минимальными затратами времени и ресурсов. Поэтому выберем режим тестирования по контрольным точкам таймфрейма М1.
Нам нужно оптимизировать параметры, поэтому выберем режим оптимизации. Для выбора режима оптимизации желательно понимать количество предстоящих итераций. Их подсчет не требует усилий, так как они автоматически считаются при выборе параметров советника для оптимизации. Перейдем на вкладку параметров и в столбце Value установим начальные значения параметров. Хочу обратить внимание, что такие параметры, как имя файла модели и количество свечей текущего паттерна, не оптимизируются, поскольку они должны соответствовать используемой модели.
![Оптимизация параметров советника Оптимизация параметров советника](/ru/neurobook/img/tester1.png)
Оптимизация параметров советника
На первом этапе мы будем грубо оптимизировать только один параметр — пороговое значение принятия решения TradeLevel. Отметим чек-бокс этого параметра. На выходе нашей модели мы использовали гиперболический тангенс в качестве функции активации. Поэтому значения на выходе нейронов нормализованы в диапазоне от −1 до 1. Знак показывает направление движения. Значит, уровень принятия решения может быть в диапазоне от 0 до 1. Конечно, осуществление сделок с вероятностью получения прибыли менее 50% выглядит по меньшей мере рискованно. Поэтому попробуем выбрать уровень принятия решения в диапазоне от 0,5 до 1,0. Напомню, что это первая и грубая подборка параметра, поэтому мы будем использовать шаг 0,05. Тестер стратегий нам сразу посчитал 11 итераций. Как видите, их довольно мало. Вернемся на вкладку Settings и выберем тип оптимизации Slow complete algorithm (медленная, перебор всех параметров). Также выбираем оптимизацию по максимальному балансу и запускаем процесс оптимизации, нажав на кнопку Start.
![Оптимизация параметров советника Оптимизация параметров советника](/ru/neurobook/img/tester2.png)
Оптимизация параметров советника
На скриншоте ниже показаны результаты оптимизации. Как можно заметить, при уровне принятия решения 0,65 и выше советник не совершает ни одной сделки. Из этого можно сделать вывод, что в процессе обучения наша нейронная сеть не обнаружила паттернов с вероятностью однонаправленного движения равной 65% или более. Не следует пугаться убыточности работы советника на данном этапе, ведь мы провели только первичную грубую оптимизацию с грубым определением уровня принятия решения. Далее нам предстоит оптимизировать еще несколько параметров нашего советника.
![Результаты первой оптимизации Результаты первой оптимизации](/ru/neurobook/img/tester3.png)
Результаты первой оптимизации
![Результаты первой оптимизации Результаты первой оптимизации](/ru/neurobook/img/tester4.png)
Результаты первой оптимизации
Сначала попробуем оптимизировать параметр минимальной силы предстоящего движения MinTarget, чтобы отсеять незначительные колебания. Цель такой итерации — отобрать наиболее сильных движений. Это связано с тем, что вероятность срабатывания таких паттернов на практике выше, а незначительные колебания могут не обладать достаточной силой импульса для достижения цели или вовсе не сработать. К тому же, использование ордеров с низким уровнем доходности снижает соотношение доходности к возможному риску.
Оптимизацию параметра мы будем осуществлять в диапазоне от 50 до 600 пунктов с шагом 50 пунктов. На данной итерации нам потребуется проверить 12 прогонов советника.
![Подбор порогового значения принятия решения Подбор порогового значения принятия решения](/ru/neurobook/img/tester5.png)
Подбор порогового значения принятия решения
По результатам данной оптимизации параметра мы можем заметить появление первых прибыльных проходов с уровнем принятия решения 500 и 600 пунктов. Однако при таком выборе параметров сильно падает количество совершенных торговых операций. Мы же хотим выжать максимум из нашей модели. Наиболее близкими к точке безубыточности и количеством торговых операций более 1000 можно выделить значения параметра принятия решения на уровне 350–400 пунктов. Позволим себе небольшую авантюру и продолжим оптимизацию параметров с указанным диапазоном параметра.
![Результаты оптимизации порогового значения принятия решения Результаты оптимизации порогового значения принятия решения](/ru/neurobook/img/tester6.png)
Результаты оптимизации порогового значения принятия решения
Далее перейдем к оптимизации параметра стоп-лосса, который ограничивает риски на каждую сделку. Данный параметр будем оптимизировать в диапазоне от 50 до 500 пунктов с шагом 50 пунктов.
Как было сказано выше, мы не определили четкое значение параметра MinTarget. Поэтому для текущего процесса оптимизации будем использовать два оптимизируемых параметра. При этом параметр порогового уровня прогнозной силы предстоящего импульса будет принимать только два допустимых значения.
![Результаты оптимизации порогового значения принятия решения Результаты оптимизации порогового значения принятия решения](/ru/neurobook/img/tester7.png)
Результаты оптимизации порогового значения принятия решения
Таким образом, тестер стратегий посчитал 20 проходов текущего процесса оптимизации.
Стоит обратить внимание на еще одно обстоятельство. В предстоящем процессе оптимизации мы собираемся подобрать оптимальный уровень стоп-лосса. Здесь надо сказать, что в процессе реальной торговли уровни стоп-лосса и тейк-профита обрабатываются на стороне брокера на каждом тике. Чтобы при срабатывании стоп-лосса получить значения убытка, максимально приближенные к реальным уровням, необходимо будет проводить оптимизацию с отработкой каждого тика. Поэтому мы переходим на вкладку Settings и изменим режим моделирования на Every tick based on real ticks, что переведет тестер стратегий в режим обработки реальных исторических тиков. Также изменим режим оптимизации на Fast genetic based algorithm. Это позволит тестеру отсеять проходы, результаты которых будут заведомо хуже уже проведенных.
![Оптимизация параметров стоп-лосса Оптимизация параметров стоп-лосса](/ru/neurobook/img/tester8.png)
Оптимизация параметров стоп-лосса
![Оптимизация параметров стоп-лосса Оптимизация параметров стоп-лосса](/ru/neurobook/img/tester9.png)
Оптимизация параметров стоп-лосса
По результатам оптимизации параметров, к сожалению, мы пока не видим прибыльных проходов. Но в то же время видно явное превосходство большего параметра принятия решения на основе силы предстоящего импульса MinTarget. При этом получены довольно близкие результаты для трех уровней стоп-лосса в диапазоне 300–400 пунктов.
Таким образом для последующей оптимизации параметров мы принимаем MinTarget на уровне 400 пунктов, а стоп-лосс продолжим оптимизировать в диапазоне 300–400 пунктов.
![Результаты подбора стоп-лосс Результаты подбора стоп-лосс](/ru/neurobook/img/tester10.png)
Результаты подбора стоп-лосс
![Результаты подбора стоп-лосс Результаты подбора стоп-лосс](/ru/neurobook/img/tester11.png)
Результаты подбора стоп-лосс
Следующий параметр, который мы будем оптимизировать, это коэффициент доверия к прогнозируемой моделью силе ожидаемого импульса. Это тот коэффициент, на который мы будем умножать значение второго параметра, возвращаемого нашей моделью, при расчете тейк-профита открываемой позиции. Вполне логично, что мы не будем завышать ожидаемое значение импульса. Поэтому верхняя граница оптимизации параметра будет равна единице. Нижнюю границу оптимизации мы возьмем на уровне 0,5, что эквивалентно 50% прогнозируемого импульса. С шагом 0,05 получаем 11 проходов оптимизации. Помножим данное количество на 3 варианта стоп-лосса и получим 33 прохода предстоящей оптимизации параметров.
![Оптимизация коэффициента доверия Оптимизация коэффициента доверия](/ru/neurobook/img/tester12.png)
Оптимизация коэффициента доверия
В результате оптимизации мы делаем однозначный выбор параметра стоп-лосса на уровне 400 пунктов и коэффициент доверия на уровне 0,8.
![Результаты оптимизации коэффициента доверия Результаты оптимизации коэффициента доверия](/ru/neurobook/img/tester13.png)
Результаты оптимизации коэффициента доверия
![Результаты оптимизации коэффициента доверия Результаты оптимизации коэффициента доверия](/ru/neurobook/img/tester14.png)
Результаты оптимизации коэффициента доверия
К сожалению, мы должны признать провал нашей авантюры. Мы так и не получили прибыльную комбинацию параметров. Вернемся к параметру порогового значения принятия решения по силе прогнозируемого импульса движения MinTarget. Напомню, что при прошлой оптимизации данного параметра мы получили максимальную прибыль на уровне 500 пунктов. Проведем небольшую повторную оптимизацию данного параметра в диапазоне от 400 до 500 пунктов с шагом в 50 пунктов.
![Повторная оптимизация параметра принятия решения Повторная оптимизация параметра принятия решения](/ru/neurobook/img/tester15.png)
Повторная оптимизация параметра принятия решения
В результате оптимизации мы получаем прибыльную комбинацию параметров на уровне 500 пунктов. Надо сказать, что уровень полученной прибыли практически вдвое больше полученной ранее. При этом количество торговых операций сократилось, а фактора прибыли сохранился на уровне 1,22.
![Результаты оптимизации параметра принятия решения Результаты оптимизации параметра принятия решения](/ru/neurobook/img/tester16.png)
Результаты оптимизации параметра принятия решения
![Оптимизация параметра ограничения доходности Оптимизация параметра ограничения доходности](/ru/neurobook/img/tester17.png)
Оптимизация параметра ограничения доходности
Далее мы проведем оптимизацию параметра ограничения максимального уровня тейк-профита MaxTP. Данный параметр сложит некой блокировкой завышенных ожиданий. Если на новых значениях модель спрогнозирует завышенное ожидаемое движение, советник ограничит уровень тейк-профита данным значением, которое мы определим из статистики обучающей выборки. Значение параметра MaxTP будем оптимизировать в диапазоне от 300 до 900 пунктов с шагом в 100 пунктов.
По результатам оптимизации параметров можно заметить, что при изменении параметра выше 600 результат работы советника не изменяется. Следовательно, на всей обучающей выборке уровень ожидаемого движения не превышает 600 пунктов. Поэтому мы смело можем ограничить максимальный уровень прибыли в 600 пунктов.
![Результаты оптимизации параметра ограничения доходности Результаты оптимизации параметра ограничения доходности](/ru/neurobook/img/tester18.png)
Результаты оптимизации параметра ограничения доходности
![Результаты оптимизации параметра ограничения доходности Результаты оптимизации параметра ограничения доходности](/ru/neurobook/img/tester19.png)
Результаты оптимизации параметра ограничения доходности
![Тонкая настройка параметра принятия решения Тонкая настройка параметра принятия решения](/ru/neurobook/img/tester20.png)
Тонкая настройка параметра принятия решения
Напоследок проведем тонкую оптимизацию параметра принятия решения по уровню вероятности движения TradeLevel. Ранее мы проводили грубую оптимизацию данного параметра с шагом 0,05 и остановились на уровне 0,6. Сейчас мы попробуем провести оптимизацию параметра с шагом 0,01 в окрестностях ранее выбранного уровня. Таким образом, мы проведем оптимизацию параметра в диапазоне 0,56–0,64.
Как ни странно, но проведенная оптимизация лишь подтвердила правильность ранее сделанного выбора значения параметра принятия решения на уровне 0,6. Любое отклонение параметра от данного значения отрицательно сказывается на доходности работы нашего советника.
![Результаты тонкой настройки параметра принятия решения Результаты тонкой настройки параметра принятия решения](/ru/neurobook/img/tester21.png)
Результаты тонкой настройки параметра принятия решения
![Результаты тонкой настройки параметра принятия решения Результаты тонкой настройки параметра принятия решения](/ru/neurobook/img/tester22.png)
Результаты тонкой настройки параметра принятия решения
Итак, в результате проведенной работы по оптимизации, мы получили ниже следующий набор параметров, который позволяет получить прибыль на обучающей выборке.
Надо сказать, что для определения оптимального набора параметров мы провели довольно много итераций по их оптимизации. В то же время тестер стратегий терминала MetaTrader 5 позволяет проводить оптимизацию любого количества параметров за один запуск процесса оптимизации. Но за это придется платить временем и вычислительными ресурсами. Если подсчитать суммарное количество совершенных проходов за все итерации оптимизации, получим порядка 95 проходов. А если мы запустим одновременную оптимизацию всех указанных выше параметров, то совокупное количество возможных вариантов параметров для осуществления проходов превысит 100 000. Можно надеяться на снижение количества проходов благодаря использованию генетических алгоритмов, но все равно их количество значительно превысит проведенные нами. Следовательно, и времени на оптимизацию параметров потребуется значительно больше.
![Набор оптимизированных параметров Набор оптимизированных параметров](/ru/neurobook/img/forward_testing2.png)
Набор оптимизированных параметров
Ну а теперь, после определения оптимального набора параметров, проведем проверку работоспособности модели на новых данных.