Блог им. afecn19 |Практическое использование нейросетей на рынке 2. На примере трансформеров.

  Таки собрался дописать вторую часть своих результатов применения трансформеров для предсказания на российском фондовом рынке. Может и хорошо что не спешил, так как пафос первой части о трансформерах дающих какие то уникальные результаты по сравнению с другими архитектурами нейросетей, оказался несколько преувеличенным, по крайней мере LSTM дал вполне сравнимый результат с трансформерами. Потом я попробовал градиентный бустинг, дерево решений и вновь получил схожий результат. Так что подавайте в нейросеть правильные признаки и многие модели покажут положительный результат. Тем не менее, раз я начал с трансформерах, и так как их архитектура хорошо отражает рынкок, о них и продолжу. 
  Для любителей вопросов о «таймфреймах, на чем обучал, какие акции, что в качестве таргета, какие параметры, время удержании позиции» итп итд. Акции МосБиржы, из числа наиболее ликвидных. Данные у меня с 2011 до 2021 (и это увы необходимость, так как именно с 2011 года время работы биржи стало 9 часов). Прогнозы строил следующим образом — выкидывал один год (это out-sample), а из оставшихся делал разбивку на train и test. Таким образом получил 10 одногодичных прогнозов. Для меня важно получить доходность на сделку пусть поменьше, но чтобы прибыльность подтверждалась на как можно большем диапазоне, и на всех акциях. Такое чтобы для каждой акции своя модель — для меня неприемлемо. И само собой никаких убыточных годов, как минимум. Знаю многие меняют системы каждые 3 года и для них это нормально, я предпочитаю вылавливать аномалии которые работают десятилетиями. Тут я никого не учу, рынок сам рассудит.    



( Читать дальше )

Блог им. afecn19 |Сантименты на американском рынке. Продолжение. 2.

Cтал потихоньку видеть разницу между американским и российским рынком. Понятие интуитивное и наверно наивное и может даже не верное, так как опыт у меня исключительно внутрироссийский. Успешный трейдинг в Америке — это найти фишку которая выстрелит и сидеть на ней. Все эти неэффективности которые кто то пытается выловить техиндикаторами или линиями или еще чем то еще — давно уже там уничтожены  с точки зрения эффективного трейдинга. Эффективного в смысле дающего заработать на хлеб с маслом. На росбирже торгуется определенное число фишек, никто особо не выстреливает из ниоткуда и не падает в ноль, то есть искать какие то новые компании, которые взлетят, негде, да и незачем (пишу сие на фоне позавчерашнего взлета ТМК хехе), зато в наших 20+ более менее ликвидных фишках есть неэффективности, из которых можно извлекать прибыль. Поэтому мой российский подход для американского не годится (хотя допускаю что для определенной категории акций, не очень проторгованных, какие то хорошие неэффективности и можно найти). Хорошо, как найти это фишку которая выстрелит? А тут уж как вам душа скажет, хотите ковыряйте фундамент, хотите теханализ, хотите читайте отчеты и пытайтесь понять зайдет или нет новая услуга, хотите еще что, благо биржевая инфраструктура в США развита как нигде в мире и вы можете найти любую информацию о любой компании, в структурированной и удобной для анализа форме. И получив эту гору информации, перед вами свободное творчество — запускайте свои нейросетки и ищите, ищите, ищите, нечто что позволит вам выйти на истории, в привлекательную для вас кривую equty, а затем помолясь и перекрестившись пробуйте использовать сие в реальной торговле. И такой подход большой плюс для тех кто хочет побольше изучить всякие методы машинного обучения, то есть для меня. 
Пока я в NLP, это значит берем текст: отчеты, мнения, твиты, итд итп и получаем его количественные оценки, с точки зрения сантиментов например, или схожести одного текста к другому. Ну а дальше по схеме — фичи есть, прикручиваем какой то инструмент машингленинга. И самое  неожиданное, применив даже самый наивный подход оценки сантиментов, я получил положительный результат.  
В последний раз, получив положительный результат для 7 раздела отчета К-10, я решил увеличить выборку, и плюнув, начал прогонять К-10 полностью, увеличив выборку с 2000 отчетов до 4000. Ну и получил примерно такой же, соотносящийся с логикой результат: если в отчете негатива побольше, компании растут поменьше и наоборот. Заодно получил ответ на странную зависимость доходности от размера отчета — в значительной части это обьясняется тем что компании сектора Information Technology или Health Care имеют склонность писать небольшие отчеты, а например сектора Materials или Financials побольше, только вот так получилось что за последние 10 лет первые вырастали в среднем на +20% а последние на +15%. Если учесть секторальную принадлежность, то все равно окажется что компании меньше льющие воду в 7 разделе 10-К, имеют динамику акций лучше, но это будет уже разница не в 7%, а в 2%.
Все это я получил используя National Research Council Canada (NRC) affect lexicon. Напомню такой лексический подход до жути прост, берется текст и считается сколько в нем позитивных слов, негативных, «слов доверия», «слов страха» итп итд Но помимо него есть другие библиотеки слов, Lexicon Loughran and McDonald. Его минус, в том что там в нет словарей по 8 эмоциям, а только по 2 — позитив/негатив (ну почти), а я уже выяснил что ловить по этим признакам нечего. Так что Loughran and McDonald пролетели мимо.
Дальше решил попробовать Bert, очень популярная моделька, которая переписала рекорды в распознавание сантиментов в тексте. Но это уже другой подход, тут уже в чистом виде машинное обучение. Я попробовал и базовый Bert и finBert, получил оценки по шкале позитив/негатив, и на 10К и на 10Q. Не берусь судить насколько точно они оценили сантименты, но не обнаружил что из позитивных отчетов следует позитивная динамика акций, а из негативных -негативные. 
Ну и наконец попробовал третий вариант: представляем текст в векторном виде (превращаем его в цифры), ставим лейблы в зависимости от динамики в течении следующего дня: (Close/Open -1)*100 ну а дальше любой метод из машинного обучения. В чем отличие от finBert? Ведь и там и там мы текст превращаем в цифры мосле чего используем машинное обучение.
Ну вот например у нас есть твит: «Охренеть, завтра Гугл попрет как ракета!». Ожидания написавшего явно позитивные, но рынку в общем то плевать, и мы практикующие трейдеры это отлично знаем. Ну а Bert плевать что там на рынке в реальности, он тупо оценивает сантименты текста. Оценивает умно, с учетом контекста, преодолевая игру слов, сленг итп итд. И обучился Bert оценивать тональность текста на примерах где в качестве лейблов использовались оценки человека — позитивный текст или негативный. Для finBert брались финансовые тексты, где лейблы проставляли видные экономисты, я использовал вариант finBert, которая обучалась на 10К (ну как утверждал ее автор). Так вот, вся разница в лейблах. Я в качестве лейбла взял реакцию рынка, поэтому твит: «Охренеть, завтра Гугл попрет как ракета!», этот сверх позитивный твит, получит отметку негативного,  если на следующий день акции Гугла упадут. И получив на трейне лейбл «негативный», он на тесте будет все схожее с такого рода твитом оценивать как негативное для роста завтра. Вот и вся разница. Ну и плюс в том что Bert очень мощный инструмент, действительно оценивающий контекст, а я взял просто по пролетарски — TFID + sklearnкий MultinomialNB, то бишь наивный Байес. Дешево и сердито. Да тут можно было что то посолидней, типа LSTM, да что угодно, но думаю думаю смысла усложнять не было. По идее можно было даже создать свой «MaratBert», обучив монстра на рыночных лейблах... 
Помимо использования разных подходов я конечно химичил и с разными базами данных. Например решив увеличить выборку, взяв отчеты 10Q, это то же что и 10K но квартальный. Попробовал брать из отчетов только предложения где есть отсылка на ожидания, риски итп итд. Попробовал вместо отчетов SEC взять stocktweets. 
Много что перебирал, но в конечном счете самое интересно получил оценивая stocktweets наивным Байесом. Еще раз подчеркиваю, оценивал не сантименты. Нашел в сети базу stocktweets для 5 фишек. И получил такой вот результат на тесте:
Сантименты на американском рынке. Продолжение. 2.



( Читать дальше )

Блог им. afecn19 |Сантименты на американском рынке. Продолжение.

Делюсь результатами. Напомню что я создал базу американских фишек входящих в SP500, выкачал для них отчеты 10-К с 2010 года, из которых достал 7 пункт «managements discussion and analysis of financial condition and results of operation». По идее должен был получить около 5000 текстов, но в парсинге 7 пункта и заключалась самая большая заковыка. В общем на финишную прямую вырулилось только около 2000 отчетов. 
Для каждого отчета я получил оценку сантиментов, по 10 эмоциям и по каждой из них, разбил свои 2000 отчетов на три ровных группы — с максимальными значениями, минимальными и средними. И для каждой из этой группы глянул на сколько изменилась цена акции через 250 торговых дней, после опубликования отчета. 
Вот корреляционна матрица между эмоциями (+ длина отчета).
Сантименты на американском рынке. Продолжение.


Как видим между позитивными и негативными эмоциями корреляция +0,4. Что может показаться странным, если предположить что они противостоят друг другу. Однако, тут видимо другая логика — есть отчеты где составившие их буквально сыпят эмоциями, и отчеты выдержанные в более строгом стиле. Даже предположу как это получается. Вот допустим много негативного в отчете, что обьекетивно — компания не на высоте, или рыночная ситуация аховая, понятно что по законам маркетинга такое никто не купит, поэтому в лучшем стиле манипулирования, негатив обильно разбавляется позитивными словечками и на выходе потенциальный инвестор получает некую сбалансированную баланду.  Вот вам и положительная корреляция долей позитивных и негативных слов в тексте. 

( Читать дальше )

Блог им. afecn19 |NLP, сантименты, фондовый рынок.

Решил покопаться в парсинге и сантиментах. То бишь пишем код, который цепляется к какому то сайту, выкачивает оттуда новости, а затем на ее основе делаем сантимент анализ и строим какие то прогнозы. Полистал иностранную литературу (на русском ничего не нашел, если у кого есть ссылки — кидайте), и нашел 2 схемы оценки сантиментов для фондовых рынков. Первое это Natural Language Processing, которые на основе ЛИНГВИСТИЧЕСКОГО анализа оценивают текст — позитивный он, негативный, или нейтральный.  Вторая схема — когда ты читаешь новости и вручную ставишь лейблы — позитивные это новости для фондового (или какой то конкретной бумажки) или негативные. А затем векторизация и уже на новых новостях железный болван ставит лейблы сам. Из прочитанного мною, нигде в заключении вроде не писали о каких то позитивных результатах, но чтобы не стоять на месте и узнать что, то новое, разобрать эту тему все равно будет полезно.
Все что я пишу очень сыро и пишу в том числе чтобы самому структурировать для себя эту новую тему и получить отклик от людей которые этим занимались.

( Читать дальше )

Блог им. afecn19 |Мои "значки на танчиках"

Лет 12 назад, когда я впервые ковырял тему нейросетей на фондовой бирже, прочитал как кто то облапошился обучая нейросеть распознавать танчики. Нет, сеть результат показала, но как оказалось на картинке с танчиками был какой то значок, а где танчиков не было, значка не было и нейросеть научилась распознавать не танчики, а наличие отсутствие вот этого значка. Запомнилось мне это наверно, потому что это было единственное, что я тогда понял о нейросетях. 
И вот теперь я поймал свои «значки», когда пытался предсказать динамику, на основе CNN+вейвлетпреобразований. Тут подробней. Нет я не заглядывал в будущее, и не так знак поставил где то. Я не стал нормализовывать цены, ибо считал что для CNN не важно все это, картинки они ведь и в Африке картинки, и вот так выглядит картинка вейвлетпробразования для ВТБ с ее копеечными ценами за акцию и Норникель, с его десятками тысячами рублей за акцию:
Мои "значки на танчиках"

( Читать дальше )

Блог им. afecn19 |CNN+wavelet

Займемся бессмыслицей. Никакого прогнозирования, просто попробуем методами вейвлет преобразований и CNN ответить на вопрос — есть или нет разница в цикличности при росте фишки и падении? Эллиот чертил 3 волны вверх и 2 вниз. Давайте почертим и мы.
Данные я взял недельные, от понедельника до пятницы, но с разбивкой по 15 минуткам, итого ряд в 175 элементов. Судя по прошлым результатам, мизерная длина, и никакой цикличности там нет. Но...«а вдруг?!». Ну а разбивка недельная, в надежде уловить недельную цикличность, все таки понедельник это «день тяжелый», пятница это «тяпницы», четверг это маленькая пятница. В общем каждый день недели уникален и помню какие то корреляции/антикорреляции даже были, вроде пятница и понедельник шли вразрез, а четверг и пятница шли вместе. Впрочем точно не помню.
Каждому ряду в 175 отчетов я присвоил лейбл (1 рост, 0 падение). Ряд прогнал через вейлет преобразование, получив квадратную картинку. Все это добро загнал в CNN и стал ждать чего нейросеть намутит. В теории, после вейвлет преобразования, на полученной картинке, не должно быть никакого намека на то росла фишка или нет. Следы наличия тренда присутствуют, но какого именно не указывается. Хотя это не точно. А вот точно что должны быть следы цикличности, и если при росте и падении цикличность разная то точность классификации должна быть больше 0,5… Хотя это не точно.  Ну нам жалко чтоли, попробовать? Пуская нейросетка крутит колесико. Крутило колесико нейросеть долго....:

CNN+wavelet



( Читать дальше )

Блог им. afecn19 |Еще о торговле по частотам

Прямо скажем как курица лапой, так что строгим ревнителям четких формул лучше дальше не читать. Всем остальным покажу как типа можно применять знание о частотах на рынке.
Посмотрел я еще несколько инструментов и обнаружил что у FRTS одна из самых четких частотных картинок: 

Еще о торговле по частотам
Опять уже привычный период в 220 (годовая периодичность), который тянется до 2500 отчета. Ну если быть точней он меняется, начал с 220, потом опустился ниже, затем вернулся обратно, но мы люди не гордые, упростим ситуацию, будем считать период константой.
Опять накладываем гармонику с годовым циклом и получаем что то вроде:

Еще о торговле по частотам

( Читать дальше )

Блог им. afecn19 |Частоты на фондовой бирже. Часть1.

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

Вот например такой ряд — немножко похожий на котировку застрявшей в боковике акции.
Частоты на фондовой бирже. Часть1.

Опытный трейдерский глаз конечно сразу заметит что на котировку это не очень похоже. Но я сейчас не об этом, я о том что этот внешне беспорядочный ряд раскладывается на 4 гармоники (плюс розоватый в самом низу-шум). 
Частоты на фондовой бирже. Часть1.

( Читать дальше )

Блог им. afecn19 |О тех индикаторах с точки зрения нейросетей.

Что если в качестве лейблов на выход подавать не рост/падение рынка завтра, а срабатывание каких то техиндикаторов? Есть несколько классических правил торговли. Ну например пробой снизу вверх Close BolingerUpperband это к покупке, и сверху вниз BolingerDownperband к шорту. Или дивергенция MACD. Или Close пробивает SMA. Ну а че вы смеетесь? Когда я работал в представительстве Финама, мы предлагали клиентам следовать корпоративной стратегии, а вся стратегия это пробои Болинджеров. Я, как человек который вообще тогда не понимал как это все делается, готовился услышать какую то хитрую систему для зарабатывания денег, от московских экспертов, а когда услышал «тайну», я такой «эээээ....». Или вот дивергенция MACD, открываешь википедию и там прямо «это сильнейший технический индикатор, если дивергенция то вот прям точно точно!». 
Месяц назад я пробовал подать на вход CNN+GramianAngular падение/рост рынка,  без каких то видимых успехов. Может тут проблема в инструменте?  Попробуем спрогнозировать с помощью нейросети срабатывание этих самых техиндикаторов, подав цены накануне. Причем усложним задачу, будем подавать не точное число баров, а фиксированное, скажем 30. То есть нейросетка получает избыточные данные: мы хотим предсказать пересечение Close c SMA(25) а мы ей 30 баров предлагаем. 

( Читать дальше )

....все тэги
UPDONW
Новый дизайн