Избранное трейдера Александр
В прошлой части мы рассмотрели теоретическую модель, лежащую в основе вычисления вероятности присутствия на рынке информированных трейдеров PIN. Продолжим с эмпирической реализации этой модели.
Для уменьшения пространства параметров модели, обычно предполагают, что частоты прихода ордеров на продажу ϵs и на покупку ϵb равны. В день «хорошей новости» вероятность наблюдения последовательности сделок купли и продажи соответствует:
, где B и S — число сделок купли и продажи соответственно.
В нескольких статьях мы рассмотрим использование индикатора PIN, который представляет собой вероятность присутствия на рынке так называемых информированных трейдеров. Статьи основаны на работе Paolo Zagaglia "PIN: Measuring Asymmetric Information in Financial Markets with R". Так как вероятность информированной торговли зависит от сделок купли и продажи в течение рабочего дня, в данном цикле мы рассмотрим весь процесс, от обработки исходных данных и вычисления вероятности информированной торговли, до определения параметров лежащей в основе математической модели. Примеры будут сопровождаться кодом на языке R.
Рост в последние годы алгоритмической и высокочастотной торговли открыл тот факт, что динамика биржевых цен сильно зависит от микроструктуры рынка. В частности, некоторые трейдеры могут иметь доступ к приватной информации о торгах, в то время как другие довольствуются только публичными новостями. Риск того, то неинформированный трейдер может в какой-то момент времени столкнуться в качестве контрагента в сделке с информированным, является одним из параметров, определяющих цену актива. Таким образом, измерение вероятности того, что контрагент владеет ассиметричной информацией, позволяет правильно вычислить цену.
После рассмотрения основ машинного обучения в первой части, мы перейдем к примеру использования наивного байесовского классификатора для предсказания направления движения цены акций Apple. Сначала разберем основные принципы работы наивного байесовского классификатора, затем создадим простой пример использования дня недели для предсказания направления цены закрытия — выше или ниже текущей, а в окончании построим более сложную модель, включающую технические индикаторы.
Что представляет собой наивный байесовский классификатор (НБК)?
НБК старается найти вероятность события А при условии, что событие В уже произошло, обзначаемую как Р(А|B) (вероятность А при условии В).
В нашем случае, мы должны спросить: какова вероятность того, что цена возрастет, при условии, что сегодня — среда? НБК берет во внимание обе вероятности — общую вероятность роста цены, то есть число дней, когда цена закрытия была выше цены открытия относительно всех рассматриваемых дней, и вероятность роста цены при условии, что сегодня среда, то есть сколько прошедших сред имело цену закрытия выше цены открытия?
Окончание цикла статей. Начало и другие алгоритмы биржевой торговли смотрите в моем блоге и на сайте.
В прошлой части мы продемонстрировали обучение модели Маркова на данных, полученных с помощью симуляции. В данной статье рассмотрим производительность модели на реальных данных. Будем тестировать трендследящую стратегию на индексе S&P500.
В большинстве задач с использованием машинного обучения требуются обучающие данные с разметкой классов (состояний). В нашем случае такой разметки нет, поэтому сначала сгенерируем классы для обучающей выборки.
Мы хотим создать трендследящую стратегию, поэтому должны выбрать участки на выборке цен S&P500, которые соответствуют восходящему и нисходящему трендам ( также можно отметить участки, где тренды отсутствуют). Можно это сделать вручную, а можно применить программу, которая автоматически расставит метки в соответствии с вашими определениями тренда.
В этой части рассмотрим обучение модели скрытых состояний Маркова на языке R. В прошлых статьях мы изучили математическую основу модели, которая воплощена в библиотеке RHmm. Есть два способа распознавания режимов с помощью модели Маркова, первый — использование одной модели, каждое состояние которой отражает режим, в каком находится рынок. Второй способ подразумевает построение нескольких моделей, каждая из которых создана для одного режима, задача состоит в том, чтобы выбрать ту модель, которая генерирует данные, наиболее соответствующие текущему состоянию рынка. Рассмотрим оба эти способа.
Метод первый — одна модель с несколькими состояниями.
Для обучения модели будем использовать исходные данные, полученные симуляцией из нормального статистического распределения N(mu,sigma), где mu — медиана, sigma — среднеквадратичное отклонение. Распознавание будем производить для двух режимов — бычьего (bull) рынка, на котором наблюдается восходящий тренд и медвежьего (bear) рынка, на котором тренд нисходящий. Соответственно, сгенерируем приращение значений из двух нормальных распределений - N (mu.Bull,sigma.Bull) и N(mu.Bear,sigma.Bear). На рисунке показан результат такой генерации на 300 наблюдений, 100 первых из которых получены из бычьего распределения, 100 вторых — из медвежьего и 100 последних — из бычьего с другими параметрами mu и sigma (каждое приращение будем считать дневным):
Так уж сложилось, что из всех видов торговли в трейдинге меня привлекает торговля по потоку ордеров.
Этой теме я посвятил довольно много времени и глубоко её исследовал. Писал свой терминал, собирал сырые данные, анализировал их, исследовал API различных датафидов и терминалов: Rithmic, CQG, Nanex, NYSE API's, NinjaTrader API, Sierrachart API, Takion API и др.
Но помимо сбора данных остро стоит проблема их корректной визуализации. Так вот с этим моментом все обстоит очень плохо. Когда человек говорит «Я читаю ленту» в голове представляется картина с сумасшедшим потоком бегущих цифр перед глазами, успеть рассмотреть и уж тем более как-то проанализировать которые практически невозможно. Большая часть из этого потока просто пролетает мимо. Безусловно с опытом наблюдения что-то начинает получаться, но это в лучшем случае 20-30% обработанной информации из всего потока. А если мы говорим о наблюдении за книгой ордеров (стакан, DOM, Depth of market), то здесь все еще хуже. Большая часть информации при наблюдении за стаканом просто не видна, т.к. частота его обновления в ядре биржи может достигать тысяч событий в секунду, а частота обновления стакана на экране вашего монитора в лучшем случае составит 1 раз в 50 миллисекунд (или 20 раз в секунду). Соответственно между двумя изменениями цифр в стакане на мониторе, могут произойти десятки изменений в реальности.
В предыдущей статье мы говорили об эффективных алгоритмах, необходимых для вычисления вероятностей и стат. распределений модели Маркова, которыми являются форвардный алгоритм и алгоритм Витерби. Форвардный алгоритм вычисляет вероятность соответствия данных наблюдения полученным моделью всем возможным последовательностям состояний. Алгоритм Витерби вычисляет вероятность соответствия данных полученной моделью одной, наиболее вероятной, последовательности.
В этом посте будет много формул, но без этого не обойтись, чтобы создать хорошую стратегию, надо разбираться в математической модели, лежащей в ее основе. Следующие части будут более приближенными к практике.
Форвардный алгоритм.
Форвардный алгоритм позволяет эффективно рассчитать функцию вероятности p(O|λ). Форвардной переменной называется вероятность генерации моделью наблюдений до времени t, и состояние j в момент времени t определяется как:
В данном цикле статей начинаем рассматривать модель Маркова, которая находит применение в задачах классификации состояния рынка и используется во многих биржевых роботах. Статьи основаны на постах, опубликованных в блоге Gekko Quant. Также будет рассмотрены практические алгоритмы на финансовых рынках. Код в цикле приведен на языке R. Вначале будет много теории, ее надо хотя бы попробовать понять, затем разберем практические примеры.
Рабочая среда распознавания основных паттернов.
Рассмотрим набор признаков O, полученный из набора данных d и класс w, обозначающий наиболее подходящий класс для O:
Почитал форум, тема уже поднималась, такой фокус проводит не только БКС. Решения проблемы так и не нашел. Вот в чем суть:
С начала 2015г Торговал Си – получил прибыль 1 млн. Торговал Ри – получил убыток 800 тыщ. Всего на счету было – 1 млн, стало 1млн200тыщ.
По идее прибыль составляет 200 тыщ, НДФЛ = 200тыщ*13% = 26 тыщ, к выводу = 1млн174тыщ руб, Итого чистая прибыль «по идее» = 174тыщ рублей.
Но брокер БКС так не считает, он учитывает прибыль По Си а убыток по Ри с этой прибылью не сальдирует, т.к. доходы по этим инструментам относятся к разным кодам…типа Ри – индексный фьючерс, а Си – валютный фьюч и финансовые результаты торговли по ним не сальдируются.
Короче картинам у брокера такая:
По Си – 1млн прибыль, налог 13%*1млн = 130тыщ руб
По Ри – убыток 800 тыщ, прибыль = 0 тыщ руб
Итого НДФЛ = 130тыщ руб, вместо 26 тыщ В 5 РАЗ БОЛЬШЕ!
К выводу 1млн200тыщ – 130тыщ = 1млн70 тыщ, вместо 1млн 200тыщ.
170 Тыщ рублей, а в данном случае это 17% от начального депо брокер, я так понимаю, берет себе в пользование безвозмездно до конца года. Потом перечисляет их в налоговую и лишь в апреле, а скорее июне 2016 года после самостоятельной подачи налоговой декларации я смогу вернуть эти 170 тыщ из налоговой. Каким будет рубль к тому времени ХЗ?