Сразу скажу что назвать себя программистом или знатоком машинном обучении у меня язык не поворачивается, скажем так - программирую я лучше 90% трейдеров и разбираюсь в трейдинге лучше 99% программистов и datascientists. Это не к тому что я такой молодец, это скорей к вопросу какая дыра непонимания существует между областями знаний, которую я попытаюсь немножко устранить.
Я веду свой блог на трейдерском сайте, где описываю свои подходы прикрутить ML к трейдингу. При том что я сам весьма начинающий в области ML, прямо скажем я не часто встречаю релевантные отзывы, ибо 90% практикующих трейдеров о нейросетях только слышали и имеют представление о нем как о розовом пони. В равной мере когда я вижу как какой то чистый математик или програмист пробует реализовать свои знания применительно к фондовому рынку, у меня частенько начинает литься кровь из глаз.
Написать свой первый пост на хабре меня сподвигла 2 статьи на хабре на тему прогнозирования активов, одна совсем древняя, другая свежая, я даже ее откаментировал. Так часто бывает когда что то хорошее вызывает желание алаверды. А статья хороша хотя бы тем, что там совершенно верный подход к трейдингу на финансовых рынках: "выдвигаем гипотезу-тестируем на истории". Ничего лучше не придумано (хотя наверно есть гении которые могут познав суть предмета, прогнозировать его дальнейшее состояние, даже такое, которое раньше не существовало в истории). Многие трейдеры вообще этого не понимают, предпочитая торговать по книжкам гуру или избитым техиндикаторам. Можно было бы бомбить эту статью комментариями, но справедливее, помимо критики было бы написать что то полезное для всех ребят из IT ("критикуешь?! А ты предложи что то взамен!"), которые вооружившись инструментарием ML хотят попробовать реализовать свои знания на финансовых рынках. А этот интерес очевидный, так как финансовый рынок как своего рода интеллектуальное казино предоставляет возможность капитализировать свои знания, трудолюбие, талант, осталось дело за малым - создать рабочий алгоритм позволяющий выносить денюжки с рынка. На языке трейдеров называется это алготрейдингом. Но много ли вы слышали о удачном применении ML в трейдинге? Я лично нет, хотя можно самоуспокоиться тем, что удачные реализации никто светить не будет, и все на самом деле работает и пока мы тут пишем и читаем, кто то удачно вооружившись градиентным бустингом или сверточной сетью делает профиты мозолистыми пальцами, холодной головой и горячим сердцем. Но сдается мне не так все просто. Помимо того что фондовый рынок вообще нельзя прогнозировать (ога!), тут есть некоторые проблемы реализации, которые я попытаюсь, путанно, но изложить.
Проблема непонимания сути рынка
Так ли это важно? Да в общем то наверно нет, ведь если все сделать правильно - выбрать правильные критерии оценки модели, взять хороший кусок истории - этак лет в 10 (где будут разные рынки - падающие, растущие, флетовые), не забывать о комиссиях, даже не понимая в рынках ничего, можно получить нечто рабочее, робастное. Я например долго не понимал почему работают один мой алгоритм. Что такое алготрейдинг для меня? Ну это что то вроде "если цена относительно чего то там изменилась на столько то процентов, и при этом обьемы изменились на столько то, то вероятность того что через определенный промежуток времени цена изменится на такой то процент составляет такую то величину, при средней прибыльности на сделку в такой то процент". То есть мы моделируем определенную ситуацию на рынке, которая может случаться для акции и рынка дюжину раза за год. Например, вышли неожиданные данные о макроэкономике, Ковид появился, на заседании ФРС приняли не то решение что ожидались. Заметили я постоянно подчеркиваю неожиданность события. Почему? Да потому что существует теория эффективного рынка, согласно которой вся информация уже учтена в цене актива. Можно конечно предположить что я оценю настоящую цену актива лучше, ну тут сразу три вопроса - реальная цена актива она вообще существует?! Второе - почему конкретный трейдер оценит лучше, чем целый аналитический отдел, который простите собаку сьел на этом и третий - а сколько вы готовы ждать пока рынок не поймет что ваша оценка цены актива истинно верная - год..два...три? Я осмелюсь предположить что этим не стоит заниматься по первой причине, а именно - никакой "справедливой цены акции" просто нет, кто не согласен пусть подумает о втором и третьем вопросе.
А еще вы могли заметить фразу "дюжину раз за год". То есть это не история про том как вы в любое мгновение можете глянув на котировку и хмыкнув указать направление рынка в следующий час. Нет, это история что когда то звезды сходятся и можно с вероятностью больше 50% ожидать что котировочка пойдет в определенную сторону. А могут не сложиться и тогда 50/50. Видите, предполагая определенную природу рынка я уже не стремлюсь искать черную кошку в темной комнате, особенно если ее нет.
Какие конкретные примеры собственной природы рынка я могу назвать? Ну например когда то давно на американских биржах существовало правило, что акции с котировкой ниже 5 баксов не могли входить в лист крупных фондов. Отсюда у меня два вопроса, с точки зрения логики и здравого смысла - что произойдет с ценой если накануне цена нырнула ниже 5 баксов. По моему очевидно. И второй вопрос - если акция котируется на уровне 5 с хвостиком, то она вероятней нырнет ниже 5 или останется торговать выше? Для меня ответ очевиден. Пример для России это наша зависимость от динамики на американских площадок, причины сейчас не важны, просто констатация. Трейдер утром включил монитор и видит что американские биржи закрылись +3%. Что дальше? А американский трейдер ни на кого не ориентируется, вот вам разные модели поведения, вот поэтому в том числе, алгоритмы работающие на российском рынке не работают на американском и наоборот. Прибыльный алгоритм на такой зависимости российской биржи от иностранных площадок работает уже пару десятков лет и бог его знает сколько будет работать еще. Или вот я спрашиваю знакомых - купите акцию которая стоит 10, но которая вчера стоили 15, или которая вчера стоила 5. Большинство хочет ту что вчера стоила 15. Психологически купить нечто подешевевшее видимо проще.
А теперь я расскажу как я представляю рынок. И почему, когда я вижу что то о "справедливой цене акции" я начинаю часто, часто моргать. Вот есть такая игра - мафия, и каждый играющий мамой клянется что он не мафия. При этом он может почесать нос, на основе чего другой может тыкнуть на него пальцем - "вот мол чешешь нос, значит врешь, значит мафия". Я так честно скажу и играл, профессиональные игроки в мафию играют совсем по другому, они считают вероятности. Так вот, говорить о справедливой цене компании это все равно что развесив уши слушать "я не мафия" или думать: "я такой крутой психолог что по блеску его глаз и дыханию определю что он врет". С таким подходом оказавшись на высокоэффективным рынке вы будете чувствовать себя как чувствовал себя я попав со своим детским подходом на стол профессиональных "мафионистов": "ааа?! что?! что черт возьми происходит?! почему они так быстро говорят?! к чему они клонят?!...кто я?! где я?!". Я не к тому что на финансовых рынках сидят кукловоды (очень распространенная легенда в кругу трейдеров), которые постоянно блефуют, рассказывая что плохие акции это хорошие, а хорошие это плохие, нет я о другом - природа рынка это не 1 + 1 = 2, это не арифметика и не математика, это экономика отражающаяся в психологии толпы. Высокоэффективный рынок это игра мафия, где вы по мимике соседа не можете понять блефует он или нет. Информации нет. Тем не менее, даже при этом, те кто играет лучше, чаще побеждает, это не рандом 50/50. Почему? Да потому что все равно остаются некоторые выигрышные позиции - "белые начинают и выигрывают в три хода". В начале игры победа мафии или жителей города 50/50, но если к концу игры остаются 2 гражданина и 2 мафии, то вероятностью под 100% мы можем сказать что победит мафия. Это следует из правил игры. А на фондовых рынках тоже есть "правила" позволяющие извлекать прибыль. Люди не приходят торговать чтобы пожамкать на кнопки в терминале, люди приходят чтобы получать прибыль, это значит уже определенная модель поведения. А еще есть человеческая психология. Человек приходит на фондовый рынок в надежде вместо 10% на депозите в банке сделать 20% на акциях, а что если вместо получения дополнительных +10% он сталкивается с проблемой потерять все свои деньги? Вы когда нибудь думали почему растем медленно, а падаем быстро? А это известный факт. Почему точки разворота внизу это часто свечи с истерическими хвостами вниз? Или например почему распределение return не гауссовское, а фрактальное? Это отражение природы рынка. Рынок имеет свою собственную природу, это не просто зеркало экономических процессов. Фундаменталисты, верующие в справедливую цену актива думают что рынок это отражение реальных экономических процессов, но как минимум рынок отражет реальные экономические процессы по своему, он переворачивает их, растягивает, что то вообще не отражает, а что то отражает увеличивая многократно. Например кризис 2008 года начался на фондовых рынках России гораздо раньше чем кризис в реальной экономике. Когда на фондовых рынках лилась кровь, в реальной экономике безработица была все также на минимумах. А в 2009 году, когда кризис накрыл реальный сектор, фондовый рынок уже бодро рос. Отразил фондовый рынок реальную экономическую ситуацию? Отразил, только вот с опережение, с лагом в несколько месяцев. Почему? Потому что рынок не торгует сегодняшнюю реальность, он торгует ожидания. Акции Теслы растут не потому что компания генерирует шикарную прибыль (она генерирует только убытки), они растут потому что люди верят что завтра она будет стоит еще дороже. Кто то верит в какие то прорывные технологии Теслы, которые позволят человечеству завтра не сыграть в ящик. Надежды, ожидания, вера и много, много маркетинга. И никакой реальности. Или например вышла хорошая новость о компании. А котировки упали. Нелогично? Нет, в высшей степени логично, если понимать что такое рынок. Или факт что всплеск ликвидности приходится на начало и конец сессии. Это какое то отражение реальной экономики, нет, это проявление собственной природы рынка.
Непонимание инфраструктуры рынка
Как выглядит типичная работа начинающего datascientist в области финансовых рынков? Берется куча фичей, причем самые нелепые - обычно широкий набор техиндикаторов, и все это загоняются в нейросеть, градиентный бустинг, случайный лес (нужное подчеркнуть), а в качестве таргетов выступает цена актива. "АААА...и так сойдет!". И потом они еще удивляются почему у них нечего не получается. Впрочем, некоторые делают вид что все у них огого! Они делают прогноз котировки на какой то интервал вперед, сравнивают с фактом и на основе того что графики идут примерно рядом, вещают что то вроде "смарите пацаны, у нас все получилось!". В чем подвох? Их модель по сути предсказывает, что закрытие завтра будет как закрытие сегодня, какова ценность такого прогноза?! Сами понимаете. Ноль. И я не придумываю, сам видел такие статьи в промышленных масштабах, причем авторы были от каких то высших учебных заведений. Вся эта туфта вскрывается просто - надо лишь присмотреться в детали и тогда сразу бросится в глаза расхождение - у авторов прогноз вверх, а рынок идет вниз или наоборот, но в целом дада, "прогноз и цена идут рядом". И смех и грех. Если бы авторы прикрутили к своему графику прибыль, которые они получили применяя свою модель, все сразу бы встало на свои места. Так что мой совет - всегда переводите результаты своего моделирования в профиты, ведь профиты это то ради чего люди и идут на финансовые рынки. Говоря профиты я подразумеваю широкий набор показателей. Критерии могут быть разные, я использую среднюю прибыльность сделки, среднее количество сделок в год, отсутствие убыточных годов, но это мой случай, кому то подойдет коэффициент Шарпа, кому то отношение прибыли к максимальной просадке. В любом случаи это попытка количественного описание своей эквити (динамики счета). Идеальное эквити это нечто растущее постоянно, без резких всплесков вверх и вниз - горизонтальная линия идущая из нижнего левого угла в верхний правый. У автора прочитанной статьи историческая эквити на мой вкус ужасная, но другой она и не могла быть, с учетом инвестиционного стиля работы. Чтобы твоя эквити не повторяла жесткие падения рынка, торговля должна быть более высокачастотной.
Кто то скажет что можно взять 10 профитных алгоритмов наложить друг на дружку и эквити примет человеческий вид, и дисперсия уменьшится, но тут возникает проблема что денюжки на вашем брокерском счете не резиновые, они не могут путешествовать во времени - Фигаро тут, Фигаро там. Вот например нашел я алгоритм, который на истории для 20 акций давал в среднем 150 сделок в год со средней профитностью 0,5%, время удержания позиции - сутки(реальная история). 150*0,5, с барского плеча оцениваем брокерские, биржевые комиссии, проскальзывания в 0,15% на сделку, и получаем что то в районе 50% годовых. Однако оказывается что из 150 сделок только 30 пришлись на разные дни, то есть вместо 150*(0,5-0,15) мы имеем 30*(0,5-0,15), а потому оказывается, что самые профитные сделки кучковались вместе и средняя профитность сделки и средняя профитность дня - это разные вещи и вот мы уже имеем 30*(0,25-0,15) и по сути торговать уже нечего. Такие тонкие моменты которые начинающий прогнозировать на фондовых рынках datascientists может даже не предполагать. Впрочем к "чести" многих, надо сказать что подавляющая часть datascientist до этого даже не доходит, потому что ограничивается попытками спрогнозировать какой то индекс, или котировку Газпрома, или евро/доллар. К проблемам незнания инфраструктуры также можно отнести непонимание наличия всевозможных комиссий и проскальзывание. Если datascientist пробует спрогнозировать что то на год вперед, то вопросов нет - все эти комиссии и проскальзывания совсем не важны, но если вы собираетесь совершать сделки ежедневно, то будьте готовы - не учитывание этого, приведет к уменьшение реального профита по сравнению с теоретическим на половину, а если вы высокочастотник, то вопрос какую вы комиссию выбьете у брокера, по сути будет определять будете ли вы торговать в плюс или минус. Или например наличие планки, или ликвидности. Это когда котировка вроде стоит, но купить или продать на самом деле не возможно.
Дочитавший до этого момента может резонно спросить, а какое собственно отношение текст имеет к заявленному ML, ни одной строчки кода!
Вот вам на примере как знание объектной области финансовых рынков поможет не попасть впросак при использовании ML:
О фичах. Большинство datascients маниакально пробует использовать техиндикаторы в качестве фичей. И веруя в детерминированность рынка, многие datascientes стремятся использовать фичей побольше, мол нейросеть сама разберется. Что на выходе? Хорошо на трейне, да плохо на тесте. А я исходя из своего представления о рынке решаю задачу как с помощью немногих и нетривиальных фичей и главное рабочих, описать редкие событие имеющую распределение отличное от 50/50. Совсем другая постановка задачи.
О таргетах. Если предположить что рынок и правда 80% времени это бессмыслица, рандом, нечто не анализируемое и не прогнозируемое, это одна история, если рынок детерминирован, ну хотя бы стохастически - это другая история. В чем бессмысленность рынка? Трейдер - новичок Коля включает монитор и видит цену Газпрома 250 рублей. "И что? Это много или мало...купить или продать?!". Время остановилось, ничего не происходит, нет информации, нет ничего. Но на бирже такого нет, на бирже постоянно кто то покупает ненужное, а кто то продает ненужное, в надежде что рынок двинется в твою сторону. Через час Коля посмотрит, а там Газпром уже 255. Datascient пометит это как 1. А котировочка могла вполне упасть, это рандом и таргет был бы уже 0. Я сейчас не о флете говорю, флет вполне может быть информативным, я о ситуации когда рынок движется куда то, только потому что на нем постоянно присутствует динамика. Мы хотим научиться разделять кошечек и собачек, а 80% трейндатасета это "котопесы", и ладно был бы такой маркер, но нам говорят что это кошечки и собачки, никаких котопесов мы в глаза не видели. А это уже совсем другая история feature engineering.
Все написанное выше, мало относится к тексту, но кое из того хочется покритиковать вполне конкретно. Во первых горизонт прогнозирования выбран в 2 года, простите, но это не годится никуда. Мы сейчас живем во времена очередного надувания пузыря - свеженапечатанные доллары сразу уходят на рынок, без всякой привязки к реальной экономической ситуации, вспоминается трейдерская шутка - "не стоит путать свою гениальность с сильным трендом вверх". Автор пишет что у него нет данных, так есть сайт sec.gov, а там отчеты 10-К, которые можно распарсить, благо последние 10 лет как минимум, они в специальном формате XBRL. А еще есть сайт financials.morningstar.com, где можно вытащить корпоративные показатели лет за 10. Вот здесь я все это вытащил простецким selenium.webdriver и оценил полезность всего этого.
Во вторых. Спорить о подходе "выдвигаем гипотезу-тестируем на истории" не буду, наоборот поддержу, а вот "о логичности и здравом смысле" порассуждаю и соответственно о выборе фич. В этом тексте автор дает перечень используемых фичей, пишет о благотворном влиянии капитальных вложений на перспективы роста стоимости акций, D/E (Debt to Equity) это показатель загруженности долгами, чем меньше тем лучше, ибо меньше риск банкротства, ROE (Return On Equity) - тоже якобы информативный показатель. Берет это автор видимо из общего здравого смысла и того что написано в книжках. Мне тоже пару месяцев назад заинтересовала ценность корпоративных показателей, и я провел небольшое исследование. И у меня получается что ценность вот этих показателей нулевая или ценность есть, но она не бьется с банальной логикой. Например компании вкладывающие много в капитальные исследования в год T не имеют лучшую динамику котировок в год T+1, по сравнению с теми кто вкладывает меньше. Про загрузку компании долгами все еще острее - лучшая динамика у загруженных долгами компаний, худшая у имеющих слабую загруженность. Нелогично, противоречит здравому смыслу? Ну это смотря как рассуждать, если рассуждать что в этом мире дефицит денег то да, а если в мире дефицит проектов генерирующих прибыль? Тогда высокая долговая загрузка компании свидетельствует о высокой оценки перспектив компании банками - ее кредитуют, а акционеры компании не боятся одалживать, а низкая говорит о том что никто не хочет одалживать ей деньги и/или акционеры не уверенны в перспективах.
Вообще эту тему я долго крутил, пробовал отдельно рассмотреть обанкротившиеся компании, компании вылетевшие из S&P500, но так и не обнаружил что накануне банкротства компании имели показатели долговой нагрузки отличные от других. Похожая история c profitabililty, growth, cashflow, financial health. А вот из интересного: Cash Conversion Cycle, Inventory, NetMargin%. Или вот Accounts Payable - показатель как быстро компания оплачивает счета поставщиков. С точки зрения банальной логики, если оплачивает быстро, то значит у компании есть деньги, а если долги постоянные, то компания банкрот, фуфуфу, значит акции ее покупать не стоит. А по моей логике высокий Accounts Payable - значит компания предпочитает придержать оплату за сырье и услуги. Зачем? Чтобы высвобожденные деньги вложить в свой бизнес и побольше произвести свой популярный товар. Типичное поведение компании нашедшую золотую жилу. Конечно это работает с показателем свидетельствующим что товары на складе не пылится - Inventory. Занявшись комбинаторикой на коленках, рассмотрел некоторые комбинации, которые позволили разбить компании на 3 группы, так что разница в росте котировок между одной и другой третью компаний составляла в среднем более 20% в год.
В приложении к американской бирже я пробовал найти интересное в анализ сантиментов в отчетах 10 - К, 10 - Q, оценивал полезность паттернов, кое что было интересным. И макроэкономические фундаментальные показатели. Индикатор CLI показался интересным, вопрос технический - его доступность.
Надеюсь кто то, что то почерпнул полезное из этого текста.
Sonnenwendekind
>кое что было интересным
Так и что, в итоге получилось что-либо улучшить относительно риска/доходности широкого рынка?