Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Советники

МTC Сombo - эксперт для MetaTrader 4

Просмотров:
21365
Рейтинг:
(23)
Опубликован:
2008.02.27 08:54
Обновлен:
2016.03.29 11:53
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Постановка задачи для данной МТС звучит так:

Пусть у нас есть некая базовая торговая система - БТС. Необходимо спроектировать и обучить нейросеть таким образом, чтобы она могла делать то, на что неспособна БТС. В результате чего должна получиться торговая система из двух комбинированных и взаимнодополняющих друг друга БТС и НС.

Или говоря по простонародному, незачем изобретать велосипед, коли он уже давно изобретен. Ведь зачем пытаться научить кого либо быстро бегать, если есть автомобиль или летать, если есть вертолет?

Если у нас есть трендовая ТС, то необходимо обучить нейросеть только контртрендовой стратегии. Потому что, система предназначенная для трендов не в состоянии адекватно торговать в трендах боковых, распознавать откаты или развороты. Можно, конечно взять две МТС, одну потрендовую, вторую контртрендовую и поставить торговать на один чарт. Но с другой стороны, также можно и обучить нейронную сеть дополнять какую либо торговую систему.

Для этой цели была спроектирована двуслойная нейронная сеть, состоящая из двух перцептронов нижнего слоя и одного перцептрона в слое верхнем.
Выход нейросети имеет три состояния:

  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, загрузить в свойствах советника в тестере.
  • Переоптимизация советника выполняется в выходные, т.е. в субботу или (либо) в воскресенье, но только в том случае, если результаты предыдущей недели были убыточными. Наличие убытков говорит, что рынок изменился и необходима переоптимизация. Наличие прибыли, говорит о том, что МТС не нуждается в переоптимизации и достаточно хорошо распознает рыночные паттерны
К сожалению, в начальную, выложенную здесь версию исходников закралась досадная ошибка: одна из закрывающихся фигурных скобок стояла не на месте, из-за чего 4 этап обучался и интерпретировался не корректно. Просьба ко всем, кто скачал файл Combo.mq4 обновиться до версии Combo_Right.


    TREND_alexcud TREND_alexcud

    Мультитаймфреймный индикатор. Показывает напраление тренда нескольких временных графиков в отдельном окне.

    FFS_CrossTiming FFS_CrossTiming

    Индикатор FFS CrossTiming. Показывает тренд всех cros'ов, связанных с рассматриваемой парой. Далее см. в код индикатора.

    MTF BB-Squeeze MTF BB-Squeeze

    Индикатор BB-Squeeze. Модифицированная версия. Для работы нужен индикатор bbsqueeze.

    up3x1_premium_v2M up3x1_premium_v2M

    Эта торговая механизированная система предназначена для работы по валютной паре eur/usd на часовом графике. Отличные результаты.