Избранное трейдера Prosto_tak
Вариант стратегии, использующей ассиметрию статистического распределения доходности, рассмотрен в блоге blog.johnorford.com.
Напомню, приращение цены какого-либо актива равна разнице между его ценой в конце расчетного периода и ценой начала периода:
Прошлая часть — см. в моем блоге.
В этой части разберем технику улучшения производительности стратегии, использующую множество моделей.
Одним из наиболее мощных методов улучшения прибыльности вашей модели является объединение нескольких алгоритмов в так называемое «множество». Теория состоит в том, что комбинируя разные модели и их предсказания, мы получаем более робастные результаты. Тесты показывают, что даже объединение простых моделей может быть производительнее более сложной, но единственной стратегии.
Существует три основных техники объединения:
Смешивание:
Смешивание основано на создании моделей, прогоняемых на немного различных тренировочных наборах и усреднения их результатов для получения одного предсказания. Тренировочный набор переделывается путем повторения или удаления вхождений данных, в результате чего получается несколько разных наборов. Этот процесс работает хорошо для нестабильных алгоритмов (например, деревья решений) или, если присутствует определенная степень случайности в процессе создания моделей ( как, например, начальные веса в нейронных сетях). Получив усредненное предсказание для коллекции моделей с высоким значением подгонки, мы можем уменьшить результирующую подгонку без увеличения недооценки, что приведет к лучшим результатам.
В цикле статей "Алгоритмы маркетмейкера" в пятой части был размещен мой код на C# для реализации стратегии оптимального управления ордерами. Пользователь сайта Eskalibur обнаружил в нем несколько ошибок, которые значительно влияли на результат, и доработал алгоритм до полного соответствия оригинальной статье. Его код я поместил в конце пятой части цикла статей (см. также комментарии к ней). Прошу всех, кто пробует применять эту стратегию, использовать именно этот листинг.
Хочу выразить благодарность за проделанную работы Eskaliburу и пользователю r0man, который также работает в направлении практического применения алгоритма. Думаю, у них все обязательно получится, и по результатам разместим отдельную статью на сайте.
Основные принципы увеличения прибыльности алгоритмов автоматизированной торговли изложены в блоге Inovancetech. Представляю здесь перевод этой статьи. В ней использованы некоторые алгоритмы и результаты цикла про машинное обучение (часть 1, часть 2).
После построения алгоритма, вам нужно убедиться, что он робастен и будет генерировать прибыльные сигналы при реальной торговле. В данном посте мы представим 3 легких способа увеличить производительность вашей модели.
Прежде чем улучшать модель, вы должны определить базовую производительность стратегии. Самый лучший способ сделать это — протестировать модель на новых исходных данных. Однако, вы всегда владеете довольно ограниченным набором данных, несмотря на их множество, предоставляемое финансовыми институтами. Значит, вы должны тщательно обдумать, как использовать имеющийся набор. По этим причинам, самое лучшее — разделить его на три отдельных части.
Существует класс алгоритмов, основанных на корелляции цен активов на разных рынках. Для того, чтобы исследовать такие корелляции, например, между американским и российским рынком, необходимо иметь доступ к данным в реальном времени с западных бирж, поставку которых предлагают специальные провайдеры за довольно существенную плату.Однако, есть возможность использования вместо платного датафида парсинг данных real-time с сайта Google Finance. На таких данных высокочастотную стратегию, конечно, не построить, но для более медленных стратегий такой способ вполне подойдет. Впрочем, на высоких частотах сильной корелляции с американцами уже давно нет, и HFT алгоритмы с такой идеей не работают, а вот на длинных промежутках времени есть очень широкое поле для исследований. Как осуществить получение данных с Google Finance рассмотрено в блоге
Окончание. Начало см. в блоге и на моем сайте.
В этой, последней части цикла разберем пример вычисления PIN с применением языка R. Кроме библиотеки PIN языка R будем использовать также библиотеку highfrequency.
Для примера автор берет сгенерированные данные, которые соответствуют формату TAQ — стандарт для акций NYSE. Данные состоят из двух наборов — временной ряд ценового котирования (sample_qdata) и сделки (sample_tdata) и предоставляются в открытом доступе вместе с библиотекой highfrequency.
Нужно отметить что используемые данные взяты только за один торговый день. Обычно, для вычисления PIN применяют больший набор данных, не менее, чем за 60 дней, чтобы выборка была достаточной для правильного определения параметров. Наши данные нужны только для демонстрации процесса получения PIN. Библиотека PIN позволяет это сделать для выборки с любой размерностью, что позволяет применять ее и для высокочастотной торговли. Пример, приводимый здесь, может быть легко расширен для вычисления на другом временном горизонте, большим, чем один торговый день.
В прошлой части мы рассмотрели теоретическую модель, лежащую в основе вычисления вероятности присутствия на рынке информированных трейдеров PIN. Продолжим с эмпирической реализации этой модели.
Для уменьшения пространства параметров модели, обычно предполагают, что частоты прихода ордеров на продажу ϵs и на покупку ϵb равны. В день «хорошей новости» вероятность наблюдения последовательности сделок купли и продажи соответствует:
, где B и S — число сделок купли и продажи соответственно.
В нескольких статьях мы рассмотрим использование индикатора PIN, который представляет собой вероятность присутствия на рынке так называемых информированных трейдеров. Статьи основаны на работе Paolo Zagaglia "PIN: Measuring Asymmetric Information in Financial Markets with R". Так как вероятность информированной торговли зависит от сделок купли и продажи в течение рабочего дня, в данном цикле мы рассмотрим весь процесс, от обработки исходных данных и вычисления вероятности информированной торговли, до определения параметров лежащей в основе математической модели. Примеры будут сопровождаться кодом на языке R.
Рост в последние годы алгоритмической и высокочастотной торговли открыл тот факт, что динамика биржевых цен сильно зависит от микроструктуры рынка. В частности, некоторые трейдеры могут иметь доступ к приватной информации о торгах, в то время как другие довольствуются только публичными новостями. Риск того, то неинформированный трейдер может в какой-то момент времени столкнуться в качестве контрагента в сделке с информированным, является одним из параметров, определяющих цену актива. Таким образом, измерение вероятности того, что контрагент владеет ассиметричной информацией, позволяет правильно вычислить цену.
В заглавии поста график прибыли моего робота ( его описание см. здесь) в процентном отношении от начального капитала за май (отделен красной чертой от результатов прошлого месяца). Результаты не впечатляют, прибыль около 1,5% всего за месяц. Май был очень слабо волатилен, Si практически стоял на месте. Пришлось ближе к середине месяца, после просадки, определить самые волатильные часы в течение дня, и затем робот работал только в эти периоды. Это позволило изменить тенденцию, а ближе к концу месяца ликвидность потихоньку стала восстанавливаться, и эквити пошла вверх.
Параллельно разрабатывал высокочастотную стратегию, основанную на одной из моделей, которые представлены или будут:) представлены на моем сайте. Основной каркас программы вновь сделан на основе
После рассмотрения основ машинного обучения в первой части, мы перейдем к примеру использования наивного байесовского классификатора для предсказания направления движения цены акций Apple. Сначала разберем основные принципы работы наивного байесовского классификатора, затем создадим простой пример использования дня недели для предсказания направления цены закрытия — выше или ниже текущей, а в окончании построим более сложную модель, включающую технические индикаторы.
Что представляет собой наивный байесовский классификатор (НБК)?
НБК старается найти вероятность события А при условии, что событие В уже произошло, обзначаемую как Р(А|B) (вероятность А при условии В).
В нашем случае, мы должны спросить: какова вероятность того, что цена возрастет, при условии, что сегодня — среда? НБК берет во внимание обе вероятности — общую вероятность роста цены, то есть число дней, когда цена закрытия была выше цены открытия относительно всех рассматриваемых дней, и вероятность роста цены при условии, что сегодня среда, то есть сколько прошедших сред имело цену закрытия выше цены открытия?