Блог им. Z-Opera

Нейронные сети для трейдеров

Искусственные нейронные сети (ИНС) — это вычислительные системы, основанные на биологических нейронных сетях, составляющих мозг животных.
Нейронные сети для трейдеров

Искусственная нейронная сеть позволяет моделировать некую нелинейную функцию с входными и выходными данными.
Нейронные сети для трейдеров

Нейронная сеть имеет:

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

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

Нейросеть оперирует цифрами, поэтому любая входная и желаемая выходная информация должна быть оцифрована. Например, если это текст (новости), то нужно этот текст представить в виде массива цифр. Или, если мы пытаемся предсказать куда пойдёт рынок, вверх или вниз, то можно закодировать «вниз» нулём, а «вверх» единицей.

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

Каждый слой связан с соседними слоями с помощью весовых коэффициентов и коэффициентов смещения. Распространение данных от предыдущего слоя к следующему осуществляется по следующему правилу: z = Act(Wy + b), где y — вектор данных на предыдущем слое, z — вектор данных на следующем слое, W — матрица весов перехода от предыдущего слоя к следующему, b — вектор коэффициентов смещения. Act — функция активации, необходимая для устранения линейности. Функций активации существует большое количество. Например, это может быть сигмойда:
Нейронные сети для трейдеров

Обучение нейронной сети с учителем означает, что для заданного набора заранее известных входных и выходных данных, необходимо подобрать оптимальные коэффициенты W и b нейросети так, что квадратичная ошибка между точным выходным значением и выходным значением, полученным посредством распространения входных значений через нейронную сеть, стремилась к минимуму:

Нейронные сети для трейдеров

Например, вы хотите научить предсказывать по прошлой динамике цены акции и динамике индикаторов Simple Moving Average (SMA) и Relative Strength Index (RSI) будущее изменение цены этой акции в процентах. Мы формируем данные для обучения — для каждого исторического момента времени берём данные по индикаторам и цене акции. Это будут входные данные X для нейронной сети. И для каждого исторического момента времени берём будущее изменение цены акции (мы его точно знаем, т.к. речь идёт об исторических данных). Это будут выходные данные Y нейронной сети, которые мы хотим, чтобы нейросеть научилась предсказывать. Для этих данных X и Y и будут подбираться коэффициенты W и b.

Поиск оптимальных коэффициентов производится методом градиентного спуска с использованием метода обратного распространения ошибки:
Нейронные сети для трейдеров
где градиент функционала E для W выражается следующим образом:
Нейронные сети для трейдеров
И аналогично для b:
Нейронные сети для трейдеров

Хочу привести такую аналогию обучения нейронной сети для трейдеров. Надеюсь, она будет вам более понятной, если нет понимания математического аппарата. Представьте, что вы придумали стратегию, у которой очень и очень много параметров. Естественно, вам хотелось бы подобрать наиболее оптимальные параметры для стратегии (как коэффициенты W и b в случае нейросети). Что значит оптимальные? Такие, чтобы максимизировали прибыль или минимизировали просадку или максимизировали коэффициент Шарпа — смотря какой критерий выберете. Далее вы начинаете перебирать эти параметры (обучать, в случае нейронной сети). Можно перебирать с помощью «грубой силы» — т.е. перебирать все возможные комбинации параметров. Но если таких параметров очень много, то вам просто не хватит вычислительной мощности вашей машины и перебор займёт много времени. Поэтому придумано достаточно много оптимизационных алгоритмов. Например, метод градиентного спуска и его вариации или генетический алгоритм, чтобы производить поиск оптимальных параметров быстрее, жертвуя точностью.

У нейронной сети могут быть те же проблемы, которые возникают при оптимизации стратегий. Главная из них — переобучение. Когда всё работает очень хорошо на прошлых данных и плохо работает на данных out-of-sample. Про то, как минимизировать риск переобучения и правильно тестировать стратегии, думаю, поговорим в следующей статье.

В качестве примера, я создал полносвязанную нейронную сеть из входного, выходного и двух скрытых слоёв. Во входном слое я сгенерировал 45 нейронов — туда будем подавать дневные изменения цен S&P 500 за последние 15 дней, значение индикатора SMA за последние 15 дней и значение индикатора RSI за последние 15 дней. Выходной слой состоит из 1 нейрона и будет хранить предсказанное процентное изменение S&P 500 на следующий день. Скрытые слои содержат по 512 нейронов. Обучим нейронную сеть на данных с октября 2019 года по июнь 2019 г. и проверим точность обученной нейронной сети на данных с июля 2019 года по сентябрь 2019 г.

У меня получились следующие результаты. На графике ниже показан дневной возврат S&P 500 c октября 2019 года по июнь 2019 г. (тренировочные данные) — синяя кривая. Если кривая выше нуля, то это значит, что S&P 500 в этот день вырос. Если ниже — упал.
Нейронные сети для трейдеров
Также я наложил оранжевую кривую на синюю. Это предсказанный нейросетью возврат рынка. По прошлой динамике S&P 500, SMA и RSI за последние 15 дней для каждого исторического момента. Точность предсказания (вырастет S&P 500 на следующий день или упадёт) составила 93%. Но это тренировочные данные. На тестовых данных с июля 2019 г. по сентябрь 2019 г. результаты получились намного скромнее:
Нейронные сети для трейдеров
Точность предсказания составила лишь 49%. Нейронная сеть явно переобучена. Но, учитывая простоту модели, вряд ли можно было ожидать более приемлемый результат.

ЗАКЛЮЧЕНИЕ:

1. Искусственная нейронная сеть — это «чёрный ящик», который можно обучить по заданным входным данным выдавать нужные нам выходные данные (например, прогноз чего-либо).

2. С точки зрения трейдинга на вход нейронной сети можно подать различные индикаторы — макроэкономические, фундаментальные и технически и обучить её предсказывать будущий возврат рынка, волатильность, ликвидность, состояния и т.д.

3. Нейронная сеть, как и любая алгоритмическая стратегия трейдинга, может быть переобучена (переоптимизирована). За этим нужно следить как минимум путём деления данных на тренировочные и тестовые.

P.S.: Если Вам нравится подобный формат статей, подпишитесь на телеграм каналы
На русском: https://t-do.ru/extreme_trading_ru
На английском: https://t-do.ru/extreme_trading

★23
29 комментариев
Ковырял тему. Пока толку не вышло.
avatar
Я конечно профан в этом деле, но многое зависит от корректности входных данных и методах обучения…
avatar
ivanov petya, от корректности входных данных само собой, но в большей степени от сформированного набора входных данных, которые выбираются, чтобы что-то предсказать. Ну и от структуры построенной нейронной сети. Например, для анализа временных рядов лучше использовать рекуррентные нейронные сети из LSTM-ячеек
avatar
Chief In Quantitative Research, 

В работе Financial Trading as a Game: A Deep Reinforcement Learning Approach предложили модель Марковского процесса принятия решений (MDP), подходящую для задачи финансовой торговли, с современным алгоритмом с глубокой рекуррентной Q-сетью (DRQN).

 Создатели обучили алгоритм торговле валютными парами и получили положительную статистику торгов.

https://arxiv.org/abs/1807.02787

avatar
ivanov petya, спасибо, почитаю, тут обучение с подкреплением используется и нейронная сеть из комбинаций 2-ух полносвязанных и 1-го LSTM-слоя, судя по картинке)
avatar
Chief In Quantitative Research, про корректность-я имел ввиду набор данных, которые действительно влияют на ценообразование, а не перерисовывающие индикаторы)… например глубокое обучение с распознаванием паттернов графических фигур, к этому добавить паттерны ленты сделок, чтение новостных лент… такое можно сделать?? в итоге же получится самоторгующий ИИ… почему это сложно реализовать?? из-за требуемых мощностей для всех операций?
avatar
на основе какого сервиса строилась нейросеть или это собственная разработка?
avatar
Переобучение при этом подходе неизбежно. 
avatar
О хоспади, зачем это старье опять вытащили. Еще с 80-х годов с ними нянчатся, давно бы в форбсе 500 алготрейдеры первые места занимали.
avatar
chizhan, наука не стоит на месте :)
avatar
chizhan, как бы вряд ли одиночки это пишут, а компании в форбс мест не занимают.

Компьютеры в подобных сферах давно головастее людей. В шахматы нет желания меня обыграть? Сам-то я не играю, но знаю несколько движков )
avatar
Бредни.
avatar
прикольный никнейм
avatar
Словосочетание 'точность предсказания' вообще не применимо к тренировочному набору данных.
avatar
Пробовал когда-то играться с MLP... 
Принцип ее прогнозирования — завтра будет тоже, что и вчера.
На трендовых рынках работает :)
avatar
мне в качестве прогнозных моделей больше понравились самоорганизующиеся алгоритмы МГУА (GMDH). в них модель наращивается сама от простой к более сложной, в отличие от нейросетей.  Кстати, в качестве базовой модели МГУА можно использовать нейросети ))
avatar
sis12qw, нейросеть тоже легко наращиваются от простых к ложным. Большинство архитектур могут быть масштабированы как минимум в ширину и в глубину, а многие по степени сложности элементарного блока и степени его параллельности. Можно начать с простого и наращивать при необходимости. Почти всегда так поступают или устраивают байесовскую оптимизацию для поиска оптимальной сложности архитектуры.
avatar
Михаил, на примере рекуррентных сетей — можно менять число слоев, количество ячеек в слое, количество скрытых состояний в ячейке и сложность ячейки (обычная, gru, lstm + односторонняя или двусторонняя). 
avatar

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

Но идея хорошая (если только для роботов).

avatar
Не ясно причём тут 'обучение'. Вычисление оптимальных параметров для прошлого — да, но обучение означает умение предсказывать оптимальные параметры для будущего. По крайней мере выдавать лучшие результаты по сравнению с уже известными методами.
avatar
MS, Термин такой — «машинное обучение», ввёл его не я )
Я пытался показать как это работает на простом примере применительно к алготрейдингу
avatar
MS, идея обучения в том, что мы предполагаем, что сеть найдет в прошлом закономерности и эти закономерности будут работать в будущем. Например мы учим сеть 2+2 4, 3+3 6, 5+8 13 — а потом подаём ей 100 и 200 а она в ответ 300. Хотя мы ей такой пример не показывали. Тогда считаем что ее научили сложению.
avatar
sis12qw, так в статье результат вверх/вниз не получилось предсказывать.
Точность 49% означает, что это равносильно подбрасыванию монетки.
Отсюда и вопрос в чём заключалось обучение.
avatar
MS, понял, речь про конкретный пример — автор уже ответил — такая терминология в нейросетях: процесс настройки весовых коэффициентов нейронов называется «обучение».
avatar
Щас бы на персептронах сетки писать для временных рядов.
avatar
Основная проблема в таких четках — автокорреляция. 
1. «Обучим нейронную сеть на данных с октября 2019 года по июнь 2019 г.»

т.е.обучающая выборка состоит из примерно 200 элементов (200 торговых дней), а количество нейронов в одном только скрытом слое 512 !!!!
сеть тупо запомнила все входные данные и всё…
ну ладно..
с учетом данных индикаторов, пусть обучающее множество состоит из 600 элементо
но это всё равно никак не меняет сути процесса....
для такого количества обучающих примеров количество нейронов в скрытых слоях должно быть всего несколько единиц (2-6 шт. на вскидку)

2. «Во входном слое я сгенерировал 45 нейронов — туда будем подавать дневные изменения цен S&P 500 за последние 15 дней, значение индикатора SMA за последние 15 дней и значение индикатора RSI за последние 15 дней.»

входные данные должны быть линейно независимы !!
иначе НС это быстро вычислит и результат обучения станет оочень грустным
Значения индикаторов — это производные от цен, т.е. значения индикаторов и цены между собой увы линейно зависимы…

теги блога Chief In Quantitative Research

....все тэги



UPDONW
Новый дизайн