Марат
Марат личный блог
08 февраля 2021, 08:34

Как начать изучать сантименты на фондовой бирже

Так вот о сантиментах на фондовой бирже. 
Вот вам лайхак как быстро что то сделать (про качество мы ничего не говорим, просто как вообще начать эту тему). Ну раз так, то начнем с англоязычного сегмента, ибо там информации и готовых скриптов завались. Да, как известно в любой теме можно потонуть, если копать очень глубоко. Но мы же трейдеры нас в общем интересует не программирование, а извлечение профита с помощью программирования. Так что к черту NLP и давайте не будем морочить голову слишком погружаясь в теорию.
Какие пункты я вижу:
1.
Первая задача это достать данные для анализа. Сначала я подумал о твитах. Популярная тема, наверняка много готовых кодов по выкачке, поисковики наверно есть неплохие,  готовых баз на все случаи жизни итп итд. И главное — мы ведь используем железного болвана там где человеческий мозг может утонуть в потоке информации, ну так вот ам и твиттер. Но начав копать, очень скоро обнаружилось что твиттер это такая большая пребольшая куча… эээ… мусора, а не какой то источник информации. Кстати забавно, когда я регился на твиттер, то в качестве рекомендуемых твиттеров мне предлагали исключительно твиттеры так скажем оппозиционные, если это можно так назвать. Та же история кстати в ютубе, я все больше и больше чувствую себя в каком то интернет концлагере, где тебе пихают строго определенные каналы, авторов, видение. Ну да ладно. Твиттер помойка,  так откуда качнуть новости? Есть openblender, оттуда можно что то качнуть более качественное, ну там разворотики WallStreet, а вот тут выложены (не переходите по ссылке, там фигня!) базы данных новостей Reddit, да еще и ранжированное. Спасибо Kaggle! Первые новости от 08.08.08. Ну помните — Цхинвал, миротворцы, стремительное наступление грузин,… затем стремительно отступление, галстук. Понимает насколько не пригодные данные для анализа влияние сантиментов там собраны? Ну вот как эта новость влияла на рынок? Те кто торгует отлично понимают что для рынка такая информация ценности не представляет. Я еще глянул на notebooks по этой базе, понятно дело никто никаких успехов не достиг. И они еще удивляются. Вообще поражает насколько часто люди пытающиеся использовать ML слабо представляют что такое биржа, пытаясь из букв ж, о п, а,  сложить слово «вечность».
Да, еще есть stocktweet, где так называемые «розничные трейдеры» в перерывах своего обогащения, делятся своим виденьем рынке. Тоже куча твитов, тоже сомнительная ценность
Если говорим о более серьезных материалах, это отчеты, которые публичные компании должны предоставлять, это всякие 10-K, 10-Q, 8-Q итд.  На сайте SEC они выложены в свободном доступе и воспользовавшись Edgar + Python (или что то другое по своему желанию) мы спокойно все это можем скачать. Так как нас интересуют сантименты, то нам нужен какой то текстовый блок, где важные директора компании рассуждали о перспективах и о том насколько хороша их компания. Это в отчете 10-К раздел 'Item 7. managements discussion and analysis of financial condition and results of operation'. Осталось только его вытащить, по айтишному — распарсить. Проблема в том что задача не тривиальная, тем более с моим весьма начальным уровнем знаний в этой области. Не тривиальна она, потому что отчеты всех компаний оформлены по разному, где то есть гиперссылки, где то нет, где то пробел, где то 5, где то точка, где то ее нет, одним словом какие регулярные шаблоны не создавай, а всего не учтешь. GeneralMotors вообще сдает этот отчет по своим личным хотелкам, и только где то в конце дает оглавление как требует комиссия. Бардак одним словом и какой то универсальный скрипт который вытаскивал нужный мне раздел для все 500 компаний входящий в индекс SP500 у меня не получилось написать. Но я не сдаюсь, не не.   
Ну допустим с горем пополам нашли мы 100 компаний чей 7 раздел мы можем вытащить. 
2.
Дальше стоит задача получения какие то циферок  характеризующих сантимент. Самый простой способ это использовать библиотеки тональностей Лофрана-Макдональда или Саифа Мохаммада. Техника проста — у вас есть како то csv файлик где собраны слова которые характеризуют те или иные эмоции, и вам нужно в тексте посчитать сколько раз встречалось слово характеризующее к примеру позитив, или удивление или еще чего то там (у Муххамеда 8 эмоций). Как говорится «всего делоф». Ни о каком ML тут понимаете речи вообще не идет. Тут чисто лексический анализ, довольно наивный. Вот например слово debt относится к negative и sadness, хотя ребенку ясно что важен контекст, может там речь о уменьшении debt. Поэтому нет ничего удивительного что полученные мною оценки из года в год и от компании к компании имели примерно одни те же циферки:
{'fear': 0.04884576781532285,
 'anger': 0.03379056540649047,
 'anticip': 0.0,
 'trust': 0.164938106390097,
 'surprise': 0.015724322515891603,
 'positive': 0.29541652726664436,
 'negative': 0.1448645031783205,
 'sadness': 0.08698561391769823,
 'disgust': 0.010036801605888258,
 'joy': 0.07862161257945802,
 'anticipation': 0.12077617932418869}
«На базе позитива в 30% намешаем 15% доверия, подсолим 15% негатива, поперчим печали 10%, каплю страха, и щепотку удивления» — блюдо готово. Думаю все дело в том что из года в год в этих отчетах встречаются все те же шаблонные слова, поэтому и результаты одинаковые. Я специально глянул на 2020 год, ну там Ковид, кризис, все дела. Ну и да, неуверенности добавилось, было условно 5%, стало 5,5%, или если измерять в словах было 200, стало 220.  
Конечно можно по другому сделать, есть word2vec или finBERT, но тут нужны уже размеченные данные. И тут есть некий финт ушами. Все эти приблуды учатся на основе размеченных данных, ну так можно просто взять размеченные данные (размечали их типа крутые фундаменталисты)  и глянуть дают ли они что то для извлечения прибыли, потому что все эти word2vec или finBERT просто заменяют собой аналитиков, и вся их продвинутость это достичь 100% сходства с тем как оценивает текст аналитик — хомосапиенс. А вы пробовали торговать по рекомендациям аналитиков, и как успехи?! Кстати можно по другому сделать — пометить отчеты на основе выросли акции в следующем году, упали или болтались в ноль. Кстати такого подхода не видел, это опять к вопросу что машингленингом на фондовых биржах занимаются не трейдеры-практики, а розовые пони и мечтатели — теоретики. И так мы плавно переходим к 3 пункту
3.
Надо попробовать связать полученные циферки с котировочками. 10-К выходят примерно в феврале-марте, так что можно глянуть на динамику после. И тут можно прикрутить какие то регрессии, но можно и проще — например взять 100 самых позитивных отчета и 100 самых негативных и глянуть выливался ли оптимизм/негатив директоров на динамику фишки. Ну или взять одну компанию и отследить по годам как менялись сантименты.

Итого:
Если кто то хочет научиться парсить, узнать что такое Edgar, XBRL, какой поток инфы бесплатно вы можете получить (хотя по идее за это берут денюжку), или вы какой то фундаменталист торгующий на американских биржах и вам нужно получить какие то циферки по деятельности фирмы, или кто то хочет начать изучать NLP, то вполне можно начать с сантиментов на финансовых рынках. Улучшения для своих торговых систем вы почти наверняка не получите, зато все остальное вполне так. 

10 Комментариев
  • Replikant_mih
    08 февраля 2021, 09:53
    Так и чего?) Самые позитивные ожидания дают лучшие приросты?) Или это был драфт плана исследования, а самого исследования ещё не было?


  • t_aur_us
    08 февраля 2021, 10:50
     Присоединяюсь к вопросу. Как нам, проверенною гармонией алгеброй, ударить по кошелькам глупых нерасторопных буржуев, чтоб на их жирных, тюленьих лицах застыли слезы расставания с деньгами, а на наших, светящихся любовью к знанию, проявлены эмоции обладания богатством новым?
      • t_aur_us
        08 февраля 2021, 11:17
        Марат, исследователь подобен Колумбу! Впереди его ждет неизвестность и конечно же не только золото может быть наградой, но и жестокосердие местных туземцев, не желающих с ним расставаться. Что ж, пусть отважному путнику тщание и усердие принесут заслуженную награду. Ждем новых сообщений по затронутой вами теме. Сам попробую также вспомнить азы программирования и даже, достав гусиное перо,  почеркать им слегка.
      • Replikant_mih
        08 февраля 2021, 12:04
        Марат, Может можно весь отчет векторизовать и эмбеддинги обучить, возможно, какие-то из скрытых признаков будут описывать нужный раздел.
  • CloseToAlgoTrading
    08 февраля 2021, 12:07
    Можно же сразу циферки взять, зачем оценивать текст отчета. Опять же эмоциональный окрас слова без контекста довольно неточная информация. В данном направлении если копать, то уж лучше информационный поток брать, новости и как часто они всплывают. Потом можно попытаться оценить общий информационный фон, и при этом стоит попытаться выделить драйверы движения. 
    А то ведь, что мы видим, в мире ковид, заводы не работают все дела, а рынки потиху прут наверх. Или же, отчет выходит отличный, а акция в моменте падает, ибо отыграла ожидания спекулянтов… далее в долгосрок, она конечно будет расти, если внешние условия не изменятся, ну и тд.. 
    Думаестся мне, что одного сантимента из отчетов будет не достаточно, но как базу анализа текста, можно и использовать. 
    • Replikant_mih
      08 февраля 2021, 12:37
      CloseToAlgoTrading, Ага, интересных вариантов дофига).
      • CloseToAlgoTrading
        08 февраля 2021, 12:55
        Марат, :) Сейчас Маск в фокусе, что бы не написал, толпа начинает скупать… остальные твитеры можно и не смотреть.

        Да, я бы может и присоеденился… но для меня и трайдинг, и нейросети это больше хобби, на которое не слишком много времени остается. От этого я и не вписываюсь во всякие проекты, зачем людей подводить :).

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн