Место нейросети в торговой стратегии трейдера
Попытаюсь систематизировать своё представление о том, как и для чего можно использовать нейросети и ML в торговой стратегии.
Начнём от обратного. И сразу уточню — речь необязательно идёт об одной нейросети. Скорее, предполагается ансамбль не обязательно связанных сетей, выполняющих свои специальные задачи.
ЧЕГО НЕ ДОЛЖНА ДЕЛАТЬ НЕЙРОСЕТЬ
Как это ни прозвучит, нейросеть не должна предсказывать конкретные значения цен — ни на следующем баре, ни сколько нибудь в отдалённой в будущее перспективе.
Регрессионные задачи выполняются нейросетями достаточно хорошо, тут они конкурируют с (S)ARIMA. Но в цикличных временных рядах.
Например, ими эффективно можно прогнозировать спрос на товары (и от этого — объём продаж), суточную температуру воздуха за окном, воды в океане, прироста численности населения и т.п.
Всё дело в том, что в этих процессах крайне редко может произвойти то, что происходит с ценой, например, акции на рынке — сильное смещение средней ценны вверх или вниз.
ЧТО ДОЛЖНА ДЕЛАТЬ НЕЙРОСЕТЬ
В идеале, она должна показывать для каждого бара заданного таймфрейма рекомендацию одного из трёх известных действий: купить, продать и не делать ничего (оно же — держать).
Вопрос в том, чем кормить такую нейросеть, но он не в тему темы поста. Об этом — в следующих постах.
Тем не менее, ясно, что такая постановка задачи однозначно определяет как структуру выходных слоёв сети, так и активационную функцию последнего слоя, а именно:
последний слой из 3-х нейронов с активацией softmax и компиляция с функцией потерь categorical_crossentropy.
Так же задачей нейросети может быть определение фазы рынка, которые я бы так же разделил на 4: тренд вверх, вниз, flat и пила. Отличие flat от пилы в моём понимании в том, что на flat можно нормально зарабатывать, а на пиле волатильность такова, что и комиссии отбить не удастся.
Выход этой нейросети (тут тоже очевидно, что последний слой из 4-х нейронов с активацией softmax и компиляция с функцией потерь categorical_crossentropy) можно использовать как подтверждающий сигнал для ТС.
Ещё одна задача уже для ML — это выявление паттернов. Вот эти фсе влаги, треугольники, головы и плечи, в которых я абсолютно не разбираюсь (потому что убеждён, что можно увидеть лицо на обоссаной, извините меня, стене, если долго приглядываться) и то, о чем гуру теханализа даже, вероятно, не догадываются, но что может разглядеть нейросеть. Для этого можно использовать кластеризацию данных и детектировать паттерны, ну, например, sklearn.cluster. Выход отсюда, идентифицирующий паттерн, может поступать как дополнительный и/или подтверждающий сигнал на вход в результирующую нейросеть, которая, собственно, будет рекомендовать трейдеру (или МТС), вероятность какого действия в данный момент наиболее высока. Самое замечательное, что тут нет задачи идентифицировать конкретно, что за паттерн образовала цена — нам ведь это неинтересно. Нам всего лишь нужно понять, что завершение вот такого класса паттернов повышает вероятность успешного long или short. Пусть о деталях знает только сама нейросеть, а нам нужна просто рекомендация по действию.
Так же у меня родилась идея, для этого мира наверняка не новая — использовать НС для предсказаний «хороших» акций на основе финансовых отчётов и ценовых данных за период, следующий за публикацией отчётности. Такая нейросеть может предсказать, например, вероятность того, что будет рост или будет падение цены акций. С отной стороны, эта вероятность может быть подтверждающим сигналом для ТС, или поступать на вход другой нейросети, или просто на основании неё можно сформировать некий топ-лист акций с наибольшей вероятностью роста, и далее уже посмотреть на них глазками и потрогать ручками. Я считаю, что это может быть очень полезно, если трейдеру (например, как квалинвестору) доступно 10K бумаг и хочется сосредоточиться на бронебойных вариантах. Глазами всё отсмотреть — задача нереальная, а вот обучающая выборка на таком объёме смотрится уже довольно неплохо.
Как видно из изложенного, так или иначе, но задачи нейросетей применительно к трейдингу лично мне больше видятся как классификационные, чем предсказательные в человеческом смысле, хотя само отнесение к некоему классу нейросетью по факту мы тоже называем предсказанием. Мои торговые роботы ML ни в каком виде пока не используют, но начнут где-то к июню, если на бэктестах будут волшебные результаты.
В качестве заключения, хочу отметить, что в использовании ML важно, чтобы не получилось, как на картинке ниже.
Источник
Нейросети
Трейдинг на основе нейросетей
Рубрики блога
Использование нейронных сетей в инвестировании и трейдинге
Электронная нейросеть – это сеть, имитирующая работу биологической нейросети, то есть человеческого мозга. Правда, до уровня мозга человека сегодняшним электронным нейросетям ещё невероятно далеко. По своей сложности они с трудом дотягивают до уровня мозга улитки, далеко не самого интеллектуального представителя животного мира.
И в то же время, даже такие нейросети способны быть результативными, во многом превосходя возможности обычных компьютерных программ.
Отличие логической программы от нейросети
Подавляющее большинство программ на любых устройствах являются логическими и работают по чётко определённой формуле. Например, бухгалтерская программа берёт значения каждого дня и суммирует их в показатель месяца, затем берёт значения всех 12 месяцев и вычисляет сумму за год, среднее арифметическое и так далее.
Такие программы очень точны и оперативны, однако они не способны выйти за пределы своего алгоритма и мало пригодны для работы в меняющихся условиях. Например, если бы количество дней в месяце и недель в году было бы ежедневно меняющейся величиной, наша бухгалтерская программа тут же перестала бы корректно работать. А между тем, финансовые рынки как раз и предполагают такие постоянно меняющиеся условия. Поэтому и требуются новые решения, которые не только знают общий алгоритм, но и учитывают изменения. Подобным алгоритмом являются нейросети.
В отличие от стандартной «логической» программы, нейросеть способна учитывать изменения и отклонения от стандартных значений, улавливать тенденции и самообучаться, а самое главное – анализировать множество факторов.
Например: выходя из дома, человек решает, как ему одеться. За основу берётся последнее значение (то, как он одевался вчера). Однако вносятся коррективы с учётом показаний термометра (измеряемая величина), силы ветра, вероятности осадков (субъективно определяемые величины). А если с каждым днём температура падает на градус, нейросеть мозга определяет эту тенденцию, и человек предполагает, что скоро потребуется пальто.
Такие возможности очень привлекают инвесторов и трейдеров. В отличие от стандартного индикатора, нейросеть была бы способна почти полностью заменить трейдера, улавливая тренды, делая выводы и самокорректируясь. Поэтому постоянно предпринимаются попытки для того, чтобы создать такую программу, которая обладала бы возможностями нейросетей и была бы простой в использовании для трейдера.
Строение и обучение нейросетей
Биологическая нейросеть состоит из множества клеток – нейронов, которые соединены синапсами (отростками для передачи сигнала дальше по сети). При этом синапс, в отличие от обычного провода, выполняет не только функцию передачи, но также может усиливать либо ослаблять сигнал, корректируя его значимость для итогового анализа. Биологическая нейросеть может состоять из многих миллионов нейронов и синапсов, что является чрезвычайно сложной структурой.
Электронная нейросеть в целом повторяет структуру биологической. Она состоит из:
• Входных нейронов (поступление информации).
• Одного или несколько слоёв свободных нейронов (обычно не более 3).
• Выходных нейронов (выдача готового результата).
Роль синапсов в электронной нейросети играют так называемые сумматоры. Они придают поступающим значениям нужный коэффициент, который может меняться в обе стороны в процессе работы нейросети. Тот факт, что она сама корректирует значение этого коэффициента, и является сутью её обучения.
Нейросети делятся на простые и сложные (персептроны) в зависимости от количества слоёв нейронов (1 или более). Также они подразделяются на:
Прямые нейросети предполагают, что сигнал идёт от входа до выхода по прямой, как поезд по рельсам. Рекуррентные допускают возможность, что полученное промежуточное значение может снова отсылаться на вход и проходить нейросеть с начала. Биологический мозг – рекуррентная сеть, и это одна из причин, почему понять принцип его работы почти невозможно.
Каждая нейросеть – это система анализа данных, в перспективе очень мощная и точная, но требующая специальной настройки (обучения). Причём, с учётом самообучения нейросети, её настройка не сводится к выставлению конкретных параметров, по которым она будет работать. Принцип обучения совсем иной:
• На вход подаётся некое значение.
• Заранее известно, какое значение должно быть на выходе.
• В случае, если выходное значение отличается от нужного, сеть корректируется, пока разница не станет минимальной.
Звучит нетрудно, но задача усложняется тем, что нейросеть не просто запоминает ответы 2*3=6, 7*10=70. Обучив её верно решать первый пример со значениями 2 и 3, разработчик переходит к обучению со входными данными 7 и 10, при этом в процессе обучения меняются веса (коэффициенты), в том числе, и для значений 2 и 3. Получается, что итоговым результатом должен стать такой набор коэффициентов, чтобы система давала верные результаты для большого количества входных значений с минимальной погрешностью, а это уже нетривиальная задача.
Вторым вариантом обучения нейросети является так называемый метод обратно распространения ошибки, когда полученное на выходе значение, если оно отличается от исходного, передаётся назад по тем же самым нейронам, по которым оно пришло на выход, и в процессе передачи веса этих нейронов увеличиваются или уменьшаются, затем следует новая попытка, и так до тех пор, пока результат не станет оптимальным.
Главным преимуществом, как уже говорилось, является то, что нейросети обучаются самостоятельно. Они способны анализировать множество факторов одновременно (например, при биржевой торговле это будут данные и фундаментального, и технического анализа), прогнозировать ситуации, работать с самыми обширными базами данных, в том числе противоречивых.
Второе важное преимущество – высочайшая скорость анализа и возможность решать задачи, почти недоступные для обычных логических программ.
Главный недостаток – то, что они могут работать только при наличии связей прошлого и будущего, то есть наличия неких циклов и трендов. Впрочем, при их отсутствии любой прогноз невозможен.
Для нейросетей характерны все проблемы статистических методов, потому что они работают на основе статистики. К таким проблемам относится, например, то, что положительный результат в прошлом не гарантирует такого же результата в будущем.
Чем сложнее нейросеть, тем больше она похожа на «чёрный ящик»: подавая что-то на вход, мы не можем предположить, что мы получим на выходе. А получая результат, не имеем никаких данных о том, каким способом он был получен.
Наконец, разработка нейросетей и нейрокомпьютеров стоит дорого, и чем мощнее такое оборудование и ПО, тем дольше и дороже его разработка, тем сложнее использование.
Кроме того, в области нейросетей нет и не может быть готовых коробочных решений по принципу «установил и работай». Каждый случай индивидуален, требует знаний, навыков и длительной настройки.
Нейросеть в трейдинге: перспектива или реальность?
Сами по себе программы, работающие по принципу нейросети, сегодня не редкость. Это, например, NeusoShell, NeuroLab или NeuralWorks. Такое и подобное ПО уже активно используют банки для прогнозирования изменений в экономике, страховые компании, высчитывающие риски. А в Британии был проведён эксперимент, в ходе которого нейросеть на реальных случаях 300 тысяч пациентов просчитывала риск сердечных заболеваний, и результат оказался точнее, чем у врача-человека.
Ещё одна сфера, где нейросети явно лидируют – распознавание лиц. Двухлетний малыш, используя биологическую нейросеть мозга, мгновенно и безошибочно отличает родителей от незнакомых людей, в то время как для логических программ, даже очень мощных, это с трудом решаемая задача.
Активно используют нейросети и поисковые системы Яндекс и Google, для которых самообучаемость программ стоит на самом первом месте.
Однако указанные выше недостатки нейросетей всё же заметно тормозят их развитие.
Что касается конкретно трейдинга, то уже установлено, что электронные нейросети дают очень плохие результаты на краткосрочных масштабах. Однако трейдеров и инвесторов это вряд ли способно удивить, потому что ни один другой алгоритм на малых масштабах тоже не даёт высокой точности. Кстати, точность нейросетевых алгоритмов для трейдинга составляет около 50-60%, но и это вполне привычно, потому что у стандартных индикаторов не выше.
В целом можно сказать, что главная причина, по которой трейдеров и инвесторов привлекают нейросети – это их гигантский потенциал и перспективность. Уже сегодня ничто не мешает воспользоваться подобной программой и попытаться построить модель для анализа рыночных данных, причём такая попытка вполне может оказаться успешной. Но ещё больших изменений можно ждать впереди, когда произойдёт развитие нейросетей и, вполне возможно, именно они станут главным рабочим инструментом трейдера.
Источник
Нейронные сети для трейдеров
Искусственные нейронные сети (ИНС) — это вычислительные системы, основанные на биологических нейронных сетях, составляющих мозг животных.
Искусственная нейронная сеть позволяет моделировать некую нелинейную функцию с входными и выходными данными.
Нейронная сеть имеет:
· Входной слой, куда подаются входные параметры, ассоциирующиеся с состоянием каждого нейрона входного слоя. Например, для финансового аналитика это могут быть различные индикаторы — макроэкономические, фундаментальные, технически.
· Выходной слой, в котором вычисляются выходные параметры, ассоциирующиеся с состоянием каждого нейрона выходного слоя. Сюда поступает информация, которую мы хотели бы предсказать. Например, это может быть будущий возврат рынка в %, волатильность, ликвидность и т.д.
Нейросеть оперирует цифрами, поэтому любая входная и желаемая выходная информация должна быть оцифрована. Например, если это текст (новости), то нужно этот текст представить в виде массива цифр. Или, если мы пытаемся предсказать куда пойдёт рынок, вверх или вниз, то можно закодировать «вниз» нулём, а «вверх» единицей.
Если нейронная сеть имеет дополнительные слои между входным и выходным слоем, то они называются скрытыми, а обучение такой сети — глубоким. Дополнительные скрытые слои могут помочь нейросети определить более сложные закономерности между входными и желаемыми выходными данными.
Каждый слой связан с соседними слоями с помощью весовых коэффициентов и коэффициентов смещения. Распространение данных от предыдущего слоя к следующему осуществляется по следующему правилу: 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. Нейронная сеть, как и любая алгоритмическая стратегия трейдинга, может быть переобучена (переоптимизирована). За этим нужно следить как минимум путём деления данных на тренировочные и тестовые.
Источник