Блог им. 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 и давайте не будем морочить голову слишком погружаясь в теорию.
Какие пункты я вижу:
1.
Первая задача это достать данные для анализа. Сначала я подумал о твитах. Популярная тема, наверняка много готовых кодов по выкачке, поисковики наверно есть неплохие,  готовых баз на все случаи жизни итп итд. И главное — мы ведь используем железного болвана там где человеческий мозг может утонуть в потоке информации, ну так вот ам и твиттер. Но начав копать, очень скоро обнаружилось что твиттер это такая большая пребольшая куча… эээ… мусора, а не какой то источник информации. Кстати забавно, когда я регился на твиттер, то в качестве рекомендуемых твиттеров мне предлагали исключительно твиттеры так скажем оппозиционные, если это можно так назвать. Та же история кстати в ютубе, я все больше и больше чувствую себя в каком то интернет концлагере, где тебе пихают строго определенные каналы, авторов, видение. Ну да ладно. Твиттер помойка,  так откуда качнуть новости? Есть openblender, оттуда можно что то качнуть более качественное, ну там разворотики WallStreet, а вот тут

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

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

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

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

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