Блог им. 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.
Ну то есть что то вроде 55% угадывания правильного направления. 
Если конвертировать это в проценты, то получится такое:
Сантименты на американском рынке. Продолжение. 2.
Верхняя таблица это прогноз по каждому твиту, с разбивкой, 1 — прогноз вверх, 0 прогноз вниз, а внизу по дням. Ну вот например вчера было 500 твитов относительно Гугла. На основе обученной модели мы делаем прогноз по каждому твиту. Но это бессмысленно, день торговый то один. 350 твитов допустим сигнализируют что будет рост, а 150 что падение, нам нужно что то среднее, для прогноза на 1 день. И вот нижняя это и есть прогноз не по каждому твиту, а по дням. Циферка 1 означает что все твиты накануне сигнализировали о росте (они не были позитивными, это не Bert и не лексический подход!!! это значит что на трейне, на следующий день после таких твитов акция росла), а циферка 0 что все сигнализировали за падение, ну а остальные что то среднее в долях. И как видим тут мы можем выйти на что то гораздо более интересное чем 2 десятых профита. И кстати самое интересное что лучший рост не когда все твиты сигнализируют о росте, точно также как и не лучший день для шорта когда все твиты сигнализируют о падении. То есть, чтобы рынок рос/падал лучше, не нужно чтобы все было за то что все прекрасно/все плохо, ну нужно чтобы все ваши системы сигналили в одну сторону, надо чтобы 80% сигналов было ха это, а 20% против. Я разбил это по акциям и подчеркнул где прослеживается этот момент. 
Сантименты на американском рынке. Продолжение. 2.
Почему мне это понравилось? Потому что это соответствует моему пониманию рынка, и приятно получить количественное подтверждение своему виденью. 
Ну вот как то так.
И кто хочет глянуть код я его выложил. Мало читаемый прямо скажем, делал его под себя, советую его смотреть в GoogleColab, там есть table of contents, это поможет окончательно не запутаться.

 

★4
5 комментариев
Большой ноутбук, жаль комментариев там маловато. Мне кажется 55% ROC это на самом деле тоже самое что и 50%. 
С отчетами наверное не прокатит вот так в лоб, обычно же торгуются ожидания. Возможно стоит посмотреть на накопительный эфект и динамику, взять это как фичи. У самого руки пока не доходят до такого :). 
А что касается твитов, то тут мне всегда казалось, что либо им стоит давать веса, либо использовать как значение информационного фона. Если растет, то возможно увеличение волатильности в акции Х, ну и тд. 
Честно, это не проверенный факт, но я когда то так гопро торговал :)… правда получил аж -80% убытка по позиции… Информационный фон был ооочень большим, пока акция совсем не увалилась, после чего он сошел почти на нет… И опять, таки сейчас начал возрастать, и акция потихоньку ползет вверх.. 

зы. Не хочу предираться к словам, но прекратите все называть машинным обучением ;))
avatar
CloseToAlgoTrading, Bert, наивный байес это машинное обучение. 55% precision это базовая цифра, интересней средняя профитность на сделку, а ее на тесте я получил польше 0,5% и для шорта и для лонга. Для меня это нечто с чем можно работать.
avatar
Марат, хм… т.е. у вас не тот берт который от гугла (BERT: Pre-training of Deep Bidirectional Transformers)?
В любом случае, хорошее исследование у вас получилось.
avatar
«Почему мне это понравилось? Потому что это соответствует моему пониманию рынка, и приятно получить количественное подтверждение своему виденью.»

Почитайте вот это.
avatar
«мне то же очень нравиться»
Но результат то какой, теска?
avatar

теги блога Марат

....все тэги



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