Постановка задачи для
данной МТС звучит так:
Пусть у нас есть некая базовая торговая
система - БТС. Необходимо спроектировать и обучить нейросеть таким образом,
чтобы она могла делать то, на что неспособна БТС. В результате чего должна
получиться торговая система из двух комбинированных и взаимнодополняющих друг
друга БТС и НС.
Или говоря по простонародному, незачем
изобретать велосипед, коли он уже давно изобретен. Ведь зачем пытаться научить
кого либо быстро бегать, если есть автомобиль или летать, если есть вертолет?
Если у нас есть трендовая ТС, то необходимо
обучить нейросеть только контртрендовой стратегии. Потому что, система
предназначенная для трендов не в состоянии адекватно торговать в трендах
боковых, распознавать откаты или развороты. Можно, конечно взять две МТС, одну
потрендовую, вторую контртрендовую и поставить торговать на один чарт. Но с
другой стороны, также можно и обучить нейронную сеть дополнять какую либо
торговую систему.
Для этой цели была спроектирована двуслойная
нейронная сеть, состоящая из двух перцептронов нижнего слоя и одного
перцептрона в слое верхнем.
Выход нейросети имеет три
состояния:
1. Вход в рынок длинной позицией
2. Вход в рынок короткой позицией
3. Неопределенное состояние
Собственно третье состояние - это передача
управления БТС, в то время, как в первых двух торговые сигналы выдаются
нейросетью.
Обучение нейросети разделено на три этапа, на
каждом из которых обучается один перцептрон. И на любом этапе обязательно
присутствует оптимизированная БТС, чтобы перцептроны знали, на что она
способна.
Раздельное обучение перцептронов генетическим
алгоритмом связано с недостатком этого самого алгоритма, а именно ограничением
количества входных параметров, подбираемых с его помощью. Впрочем, каждый этап
обучения логически последователен и размер нейросети не слишком велик, поэтому
весь процесс оптимизациии проходит за вполне приемлемое время.
Но самый первый этап, предваряющий обучение
НС, состоит в оптимизации БТС.
Чтобы не запутаться, номер этапа заносится во
входной параметр МТС 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, загрузить в свойствах советника в тестере.
Переоптимизация советника выполняется в
выходные, т.е. в субботу или (либо) в воскресенье, но только в том случае, если
результаты предыдущей недели были убыточными. Наличие убытков говорит, что
рынок изменился и необходима переоптимизация. Наличие прибыли, говорит о том,
что МТС не нуждается в переоптимизации и достаточно хорошо распознает рыночные
паттерны
|