Блог им. 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

9.6К | ★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 дней.»

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

Читайте на SMART-LAB:
Фото
📊 Представляем предварительные итоги деятельности Positive Technologies за 2025 го
• Мы вернулись к целевым темпам роста бизнеса, вдвое превышающим динамику рынка кибербезопасности в России. • Исходя из текущих управленческих...
Фото
📅 Как начался новый инвестиционный год
В январе наши клиенты перекладывали часть средств в облигации — это говорит о сохранении консервативного тренда и желании получать...
🔍Тенденции на рынке жилья и ипотеки в России — 2025—2026
Аналитический центр ДОМ.РФ подвел итоги жилищной сферы в 2025 году и дал прогноз на 2026-ой. ❓Каким был 2025 г. 1. Выросла доля сделок...
Фото
РУСАГРО: выкупить акции и спасти Мошковича - могут ли акции вырасти на 100% от текущих ценах, подробный разбор 
Начинаем покрытие компании РУСАГРО этим постом, надеюсь удастся под микроскопом разглядеть инвестиционную привлекательность или хотя бы сделать...

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

....все тэги



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