| Постановка задачи для данной МТС звучит так: Пусть у нас есть некая базовая торговая система - БТС. Необходимо спроектировать и обучить нейросеть таким образом, чтобы она могла делать то, на что неспособна БТС. В результате чего должна получиться торговая система из двух комбинированных и взаимнодополняющих друг друга БТС и НС. Или говоря по простонародному, незачем изобретать велосипед, коли он уже давно изобретен. Ведь зачем пытаться научить кого либо быстро бегать, если есть автомобиль или летать, если есть вертолет? Если у нас есть трендовая ТС, то необходимо обучить нейросеть только контртрендовой стратегии. Потому что, система предназначенная для трендов не в состоянии адекватно торговать в трендах боковых, распознавать откаты или развороты. Можно, конечно взять две МТС, одну потрендовую, вторую контртрендовую и поставить торговать на один чарт. Но с другой стороны, также можно и обучить нейронную сеть дополнять какую либо торговую систему. Для этой цели была спроектирована двуслойная нейронная сеть, состоящая из двух перцептронов нижнего слоя и одного перцептрона в слое верхнем. Выход нейросети имеет три состояния: - Вход в рынок длинной позицией
- Вход в рынок короткой позицией
- Неопределенное состояние
Собственно третье состояние - это передача управления БТС, в то время, как в первых двух торговые сигналы выдаются нейросетью. Обучение нейросети разделено на три этапа, на каждом из которых обучается один перцептрон. И на любом этапе обязательно присутствует оптимизированная БТС, чтобы перцептроны знали, на что она способна. Раздельное обучение перцептронов генетическим алгоритмом связано с недостатком этого самого алгоритма, а именно ограничением количества входных параметров, подбираемых с его помощью. Впрочем, каждый этап обучения логически последователен и размер нейросети не слишком велик, поэтому весь процесс оптимизациии проходит за вполне приемлемое время. Но самый первый этап, предваряющий обучение НС, состоит в оптимизации БТС. Чтобы не запутаться, номер этапа заносится во входной параметр МТС c идентификатором - pass. А идентификаторы входных параметров, соответствующих номеру этапа заканчиваются на число равное этому самому номеру. Итак, предварительная подготовка к оптимизации и обучению НС. В в тестере в свойствах эксперта, вкладка "Тестирование" установим начальный депозит $1000000 (так, чтобы не создать искуственного маржинколла во время оптимизации), оптимизируемый параметр "Balance" и включим генетический алгоритм. Переходим во вкладку "Входные параметры" свойств советника. Устанавливаем размер лота открываемых позиций, присвоив идентификатору lots значение 1. Оптимизацию будем проводить по модели: "По ценам открытия (Быстрый метод на сформировавшихся барах, только для советников с явным контролем открытия баров).", поскольку такой контроль в алгоритме МТС присутствует. Первый этап оптимизации. Оптимизация БТС: Входному параметру pass устанавливаем значение 1. Оптимизируем только входные параметры соответствующие первому этапу, все идентификаторы которых заканчиваются единичкой, а следовательно устанавливаем только на них галочки, оптимизации, и удаляем галочки со всех остальных параметров. tp1 - тейкпрофит БТС. Оптимизируется значениями от 10 до 100 с шагом 1 sl1 - стоплосс БТС. Оптимизируется значениями от 10 до 100 с шагом 1 p1 - период осциллятора CCI, который применяется в БТС. Оптимизируется значениями от 3 до 100 с шагом 1 После оптимизации БТС получаем результаты: 

Второй этап. Обучение перцептрона отвечающего за короткие позиции: Входному параметру pass придаем значение 2, т.е. соответствующее номеру этапа. Убираем галочки оптимизации, выставленные на предыдущем этапе. Сохраняем, на всякий случай входные параметры, полученные на предыдущем этапе в файл. Устанавливаем галочки оптимизации для параметров второго этапа, т.е. идентификаторы которых заканчиваются двойкой: x12, x22, x32, x42 - весовые коэффициенты перцептрона, распознающего короткие позиции. Оптимизируются значениями от 0 до 200 с шагом 1. tp2 - тейкпрофит позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1 sl2 - стоплосс позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1 p2 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1. Запустим обучение через оптимизацию ГА. По завершении получаем результаты: 

Третий этап. Обучение перцептрона отвечающего за длинные позиции: Входному параметру pass придаем значение 3, т.е. соответствующее номеру этапа. Убираем галочки оптимизации, выставленные на предыдущем этапе. Сохраняем, на всякий случай входные параметры, полученные на предыдущем этапе в файл. Устанавливаем галочки оптимизации для параметров второго этапа, т.е. идентификаторы которых заканчиваются тройкой: x13, x23, x33, x43 - весовые коэффициенты перцептрона, распознающего длинные позиции. Оптимизируются значениями от 0 до 200 с шагом 1. tp3 - тейкпрофит позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1 sl3 - стоплосс позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1 p3 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1. Запустим обучение через оптимизацию ГА. По завершении получаем результаты: 

Завершающий четвертый этап. Обучение первого слоя, т.е. перцептрона, который находится в верхнем слое: Входному параметру pass придаем значение 4, т.е. соответствующее номеру этапа. Убираем галочки оптимизации, выставленные на предыдущем этапе. Сохраняем, на всякий случай входные параметры, полученные на предыдущем этапе в файл. Устанавливаем галочки оптимизации для параметров второго этапа, т.е. идентификаторы которых заканчиваются четверкой: x14, x24, x34, x44 - весовые коэффициенты перцептрона первого слоя. Оптимизируются значениями от 0 до 200 с шагом 1. p4 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1. Запустим обучение через оптимизацию ГА. По завершении получаем результаты: 

Все, нейронная сеть обучена. У МТС есть еще один неоптимизируемый входной параметр mn - магический номер, т.е. идентификатор позиций, чтобы торговая система не путала свои ордера с ордерами открытыми вручную или другими МТС. Значение магического номера должно быть уникальным и не совпадать с магическими номерами позиций которые не были открыты данным советником. P.S. - Размер начального депозита определяется как абсолютная просадка умноженная на два, т.е. с запасом прочности.
- Советник в исходниках не оптимизирован
- Если возникнет необходимость заменить встроенную БТС , алгоритмом другой торговой системы, то необходимо изменить содержимое функции basicTradingSystem()
- Чтобы не вводить вручную начальные, конечные значения и размеры шагов оптимизации, можно взять готовый файл combo.set и поместив его в папку \tester MT4, загрузить в свойствах советника в тестере.
- Переоптимизация советника выполняется в выходные, т.е. в субботу или (либо) в воскресенье, но только в том случае, если результаты предыдущей недели были убыточными. Наличие убытков говорит, что рынок изменился и необходима переоптимизация. Наличие прибыли, говорит о том, что МТС не нуждается в переоптимизации и достаточно хорошо распознает рыночные паттерны
К сожалению? в начальную, выложенную здесь версию исходников закралась досадная ошибка: одна из закрывающихся фигурных скобок стояла не на месте, из-за чего 4 этап обучался и интерпретировался не корректно. Просьба ко всем, кто скачал файл Combo.mq4 обновиться до версии Combo_Right.
|