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

MTC Сombo - эксперт для MetaTrader 5

Опубликовал:
Vladimir Karputov
Просмотров:
4082
Рейтинг:
(33)
Опубликован:
2016.11.01 17:23
Обновлен:
2018.06.27 15:56
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Привожу описание от автора с моими мелкими правками, поскольку сейчас на валютных парах уже используется "пятизнак".

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

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

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

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

Выход нейросети имеет три состояния:

  1. Вход в рынок длинной позицией;
  2. Вход в рынок короткой позицией;
  3. Неопределенное состояние.

Собственно, третье состояние — это передача управления БТС, в то время как в первых двух торговые сигналы выдаются нейросетью.

Обучение нейросети разделено на три этапа, на каждом из которых обучается один перцептрон. На любом этапе обязательно присутствует оптимизированная БТС, чтобы перцептроны знали, на что она способна.

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

Но самый первый этап, предваряющий обучение НС, состоит в оптимизации БТС.

Чтобы не запутаться, номер этапа заносится во входной параметр МТС c идентификатором pass. А идентификаторы входных параметров, соответствующих номеру этапа, заканчиваются на число, равное этому самому номеру.


Итак, предварительная подготовка к оптимизации и обучению НС.

В тестере установим начальный депозит $100 (так, чтобы не создать искусственного маржинколла во время оптимизации), оптимизируемый параметр Balance + max Sharpe Ratio, тип оптимизации Fast genetic algorithm.

Переходим во вкладку "Входные параметры" свойств советника. Устанавливаем размер лота открываемых позиций, присвоив идентификатору lots значение 0.01.

Оптимизацию будем проводить по модели: Open prices only. Этот метод выбран за его высокую скорость, а также потому что в алгоритме МТС присутствует контроль новых баров.


Первый этап оптимизации: Оптимизация БТС

Входному параметру pass устанавливаем значение 1.
Оптимизируем только входные параметры, соответствующие первому этапу, все идентификаторы которых заканчиваются единичкой, а следовательно устанавливаем только на них галочки оптимизации, и удаляем галочки со всех остальных параметров.

  • tp1 - тейкпрофит БТС. Оптимизируется значениями от 100 до 1000 с шагом 10;
  • sl1 - стоплосс БТС. Оптимизируется значениями от 100 до 1000 с шагом 10;
  • p1 - период осциллятора CCI, который применяется в БТС. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА.


Второй этап: Обучение перцептрона, отвечающего за короткие позиции

Входному параметру pass придаем значение 2, т.е., соответствующее номеру этапа. Убираем галочки оптимизации, выставленные на предыдущем этапе. Сохраняем на всякий случай входные параметры, полученные на предыдущем этапе, в файл.

Устанавливаем галочки оптимизации для параметров второго этапа, то есть идентификаторы которых заканчиваются двойкой:

  • x12, x22, x32, x42 — весовые коэффициенты перцептрона, распознающего короткие позиции. Оптимизируются значениями от 0 до 200 с шагом 1;
  • tp2 - тейкпрофит позиций, открываемых перцептроном. Оптимизируется значениями от 100 до 1000 с шагом 10;
  • sl2 - стоплосс позиций, открываемых перцептроном. Оптимизируется значениями от 100 до 1000 с шагом 10;
  • p2 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА.


Третий этап. Обучение перцептрона отвечающего за длинные позиции

Входному параметру pass придаем значение 3, т.е. соответствующее номеру этапа. Убираем галочки оптимизации, выставленные на предыдущем этапе. На всякий случай сохраняем входные параметры, полученные на предыдущем этапе, в файл.

Устанавливаем галочки оптимизации для параметров третьего этапа, то есть идентификаторы которых заканчиваются тройкой:

  • x13, x23, x33, x43 - весовые коэффициенты перцептрона, распознающего длинные позиции. Оптимизируются значениями от 0 до 200 с шагом 1;
  • tp3 - тейкпрофит позиций, открываемых перцептроном. Оптимизируется значениями от 100 до 1000 с шагом 10;
  • sl3 - стоплосс позиций, открываемых перцептроном. Оптимизируется значениями от 100 до 1000 с шагом 10;
  • p3 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА.


Завершающий четвертый этап.

Обучение первого слоя, т.е. перцептрона, который находится в верхнем слое:

Входному параметру pass придаем значение 4, т.е. соответствующее номеру этапа. Убираем галочки оптимизации, выставленные на предыдущем этапе. На всякий случай сохраняем входные параметры, полученные на предыдущем этапе, в файл.

Устанавливаем галочки оптимизации для параметров четвертого этапа, то есть идентификаторы которых заканчиваются четверкой:

  • x14, x24, x34, x44 - весовые коэффициенты перцептрона первого слоя. Оптимизируются значениями от 0 до 200 с шагом 1;
  • p4 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА.

Все, нейронная сеть обучена.

У МТС есть еще один неоптимизируемый входной параметр mn - магический номер, т.е. идентификатор позиций, чтобы торговая система не путала свои ордера с ордерами, открытыми вручную или другими МТС. Значение магического номера должно быть уникальным и не совпадать с магическими номерами позиций, которые не были открыты данным советником.


P.S.

  • Размер начального депозита определяется как абсолютная просадка умноженная на два, т.е. с запасом прочности;
  • Советник в исходниках не оптимизирован;
  • Если возникнет необходимость заменить встроенную БТС алгоритмом другой торговой системы, то необходимо изменить содержимое функции basicTradingSystem();
  • Переоптимизация советника выполняется в выходные, т.е. в субботу или (либо) в воскресенье, но только в том случае, если результаты предыдущей недели были убыточными. Наличие убытков говорит, что рынок изменился и необходима переоптимизация. Наличие прибыли говорит о том, что МТС не нуждается в переоптимизации и достаточно хорошо распознает рыночные паттерны.
RobotPowerM5 meta4V12 RobotPowerM5 meta4V12

Анализ индикаторов iBullsPower и iBearsPower на первом баре.

Тиковый индикатор ZoomPrice Тиковый индикатор ZoomPrice

Показывает график цены любого уровня масштабирования.

Artificial Intelligence Artificial Intelligence

Советник с использованием искусственного интеллекта - однослойной нейронной сети. Для распознавания направления движения котировок используется "Perceptron". Используется индикатор iAC, а также вызовы CopyTime.

Exp_GStopLoss Exp_GStopLoss

Советник для закрывания всех позиций в случае, если суммарные убытки по этим позициям превысили фиксированный во входных переменных лимит убытков.