Технология создания торгового робота EVA на основе нейронной сети или Как у нас получилось то, что получилось, и почему я не выполню обещан

Silentium est aurum.

Молчи, пока ты не в состоянии сказать нечто такое, что полезнее твоего молчания. 

                                                                                      (кто-то умный и известный сказал)

 

 

     В продолжение  «Не нравятся нейронные сети? Вы просто не умеете их готовить. Рецепт. Ингредиенты, специи и прочее» https://smart-lab.ru/blog/327789.php и «Нейронные сети. Послевкусие. Заблуждения, ошибки, косяки. Первые 15 месяцев эксплуатации бота на нейронных сетях»  https://smart-lab.ru/blog/329272.php

 

     Я почему-то решила, что мои слова будут полезнее моего молчания на Смарт-Лабе. Только, когда я представляла эту пользу для себя, я имела в виду возникновение каких-то полезных связей и взаимовыгодного сотрудничества с другими трейдерами, работающими над созданием торговых алгоритмов на основе нейронных сетей. Этого пока по разным причинам не получилось. В качестве «побочного», но весьма приятного эффекта, получилось добавить заинтересованную аудиторию нашему «продажному» проекту – на сайте появилось … новых подписчиков. Хотя может так совпало – невозможно идентифицировать со СЛ эти люди или нет. Во всяком случае, это те, кто имеет желание зарабатывать на бирже, и имеет понимание, что в такой конкурентной среде идет борьба технологий.

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

     Сначала была создана платформа на С++, которая формирует рабочую среду для стратегии (любой, не обязательно нейросетевой). Чтобы можно было подать на вход в платформу тиковые данные, и любая стратегия отработала бы как на реальном рынке. Стратегия стартует, создает свой набор индикаторов, открывает и закрывает сделки. Так можно прогнать любую стратегию на любом интервале времени. 

     Стратегии могут работать в двух режимах: боевой – формирует входы, подает их на НС и на основании ответа НС совершает сделку (этот режим нужен для тестирования готовых нейронок).

    Второй режим – формирование примеров для обучения нейронной сети. Все то же самое, но пишет примеры сделок в файл. Пример состоит из набора  входных данных  (создается в платформе) и правильного ответа  — buy или sell (создается в Матлабе). 

 

 

Входы. Не могу я взять и просто выложить список наших входов. Это предмет долгих поисков. Каждый, кто хочет этим заниматься, должен сам определить свои данные, которые будут подаваться на входы НС. Могу сказать, что используются не абсолютные значения, а относительные (например, не цена, а отклонение от текущей цены).

Далее нормализация – приведение данных к единичному гиперкубу с равномерным распределением значений. Существует несколько способов таких преобразований — мы использовали свой.

     Выгружаем данные входов в Матлаб (файл примеров – входная информация). В Матлаб формируем выходы. Примеры должны быть строго сбалансированными (сигналов buy и sell должно быть приблизительно одинаково), иначе у НС будет склонность к определенным сделкам (перекос).

Запускаем генетический алгоритм (ГА), который производит подбор лучшей архитектуры сети и лучшей комбинации входов. Выходные данные формируются по определенному алгоритму с параметрами, которые позволяют найти оптимальный диапазон и направление движения цены  из каждой точки принятия решения.

Все тайные знания – в деталях. Если Вы будете этим заниматься, найдете свое «золотое сечение», возможно, лучше нашего.

Итак, сформированы варианты правильных ответов для обучения сетей, buy или sell. И создано множество нейронных сетей.

Для генетического алгоритма нейронную сеть описывает хромосома. Предположим, ГА создал 50 хромосом (сетей), для каждой вычисляет фитнесс-функцию,  сравнивает эти хромосомы, выбирает из них лучшие, скрещивает их (или производит другие преобразования) и получает новые 50 сетей с лучшими параметрами. Таких итераций может быть много, например, 100.

Каждый набор параметров (хромосома) оценивается методом кросс-валидации (CV). Для этого по одной хромосоме создается множество сетей, которые обучаются и тестируются на разных периодах. Все это выполняет генетический алгоритм автоматически.

О CV можно почитать, например, здесь https://www.machinelearning.ru/wiki/index.php?title=CV

В результате на выходе ГА получаем популяцию из 50 сетей, из которых выбираем сети по параметрам, которые нам важны (например, фактор восстановления, просадка, равномерность графика профита).

Генетический алгоритм есть в Матлабе (GATool), но у нас – конечно же, свой.

Вообще в Матлабе есть библиотека NNTool, которая использовалась вначале. Она универсальна, но отстает от жизни – новых, необходимых вещей в ней нет, а дорабатывать ее сложно. Поэтому сейчас используется библиотека DeepLearnToolbox https://github.com/rasmusbergpalm/DeepLearnToolbox. Она была взята за основу и также доработана.

 

     Далее сети проверяются в Матлабе на тестовом периоде, который не совпадает с периодом обучения. Для этого тоже написан свой тестер. Ну, Вы уже поняли, что у нас все свое.

     В разных источниках разночтения по названиям периодов – период обучения, период тестирования, период валидации… Слава богу, что нет общепринятой терминологии. А то бы уже все давно понаделали своих сеток и разбогатели…

     Для окончательной проверки готовые к использованию нейронные сети выгружаются из Матлаба и прогоняются на нашей платформе на точных тиковых данных с полной имитацией рыночной торговли.

     Есть еще интересная вещь – мы можем объединять разные сети в портфель. Например, выбрать из генерации 10 сетей с близкими значениями по прибыли и просадке, с минимальной корреляцией времени просадок. Тогда на периоде получаем результат со средним значением прибыли и просадкой, ниже среднего значения по сетям. Это возможность при сохранении выбранного уровня риска в % получить больший доход.

     Мы не останавливаемся, а идем дальше. Запущено тестирование сетей для других инструментов. Рассчитываются новые сети по новым технологиям.  Цель – повышение доходности и уменьшение просадок. Надо же когда-нибудь соответствовать уровню ЛЧИ (это ж показатель, наверное). Хотя, если честно, просто хочется чтобы рутинную и нервную работу на рынке выполнял ИИ.

P.S. Чуть не забыла про картинки – их же все любят так. Смотрите — два предыдущих дня работы робота. Когда многие (и я в том числе) шортили рынок и лонговали доллар… Что она (EVA все-таки девочка) знала о вышках, пэйролзах, госпоже Йеллен? Да ничего. Просто у нее в «голове» на немаленьком сроке обучения было всЁ и всE: протоколы и минутки ФРС, Бернанке с куями, землетрясения и наводнения, военные конфликты и терракты. И она в плюсе. А мы все помним, как двигался рынок в эти моменты? Так зачем нам все это? Пусть работает робот! А мы будем работать над созданием более совершенных роботов!

 Технология  создания  торгового робота EVA  на основе нейронной сети или  Как у нас получилось то, что получилось, и почему я не выполню обещан

 Технология  создания  торгового робота EVA  на основе нейронной сети или  Как у нас получилось то, что получилось, и почему я не выполню обещан

 

 

 

 

A PHP Error was encountered

Severity: Notice

Message: Undefined offset: 1

Filename: main/v_footer.php

Line Number: 25

Backtrace:

File: /home/infoption.ru/www/infoption.ru/application/views/main/v_footer.php
Line: 25
Function: _error_handler

File: /home/infoption.ru/www/infoption.ru/application/controllers/Base.php
Line: 38
Function: view

File: /home/infoption.ru/www/infoption.ru/application/controllers/Blog.php
Line: 229
Function: render_single

File: /home/infoption.ru/www/infoption.ru/index.php
Line: 300
Function: require_once