Интересный подход к предсказанию направления рынка рассмотрен в статье "Using CART for Stock Market Forecasting". Для того, чтобы предугадать движение цены на недельном отрезке используется техника под названием CART (Classification And Regression Trees) - построение классификационного графа (дерева) с целью предсказать значение целевой характеристики (цены) на основании набора объясняющих переменных. CART находит применение во многих областях науки и техники, но применим и в торговле, так как обладает набором свойств, хорошо подходящими для этой цели:
- может применяться при любом типе статистического распределения
- может применяться как для линейных, так и нелинейных зависимостей
- устойчив к событиям, выходящим за рамки статистических распределений
Для построения дерева автор использует библиотеку языка R , вычисляющую рекурсивное разделение (Recursive Partitioning) rpart.
Исходные данные для тестирования алгоритма взяты следующие : цены наиболее ликвидных американских ETF с января 2000 до декабря 2013 года. Обучающий период (in-sample) - с 2000 по 2010 год, остальной период - проверочный (out-of-sample).
В качестве целевой переменной берется предсказание цены на 1 неделю, которая может принимать два состояния - ВВЕРХ, если цена за неделю выросла, и ВНИЗ, если цена за неделю упала.
В качестве объясняющих переменных взяты следующие показатели, принимающие только два значения:
- Волатильность (VAR1). Высокая волатильность обычно свойственна падающим рынкам, низкая - растущим. Данная переменная основана на значении индикатора ATR в сравнении с его скользящей средней MA с периодом 20 дней. Если ATR>MA, VAR1=1, если ATR<MA, VAR1=-1.
- Короткий ценовой импульс (VAR2). Здесь значение цены актива сравнивается с ее простой скользящей средней SMА с периодом 5 дней. Если цена>SMA, VAR2=1, иначе VAR2=-1.
- Длинный ценовой импульс (VAR3). Для этой переменной период SMA берется равным 50 дням. Если цена>SMA, VAR3=1, иначе VAR3=-1.
- Разворот (VAR4). В данном случае используется значение индикатора CRTDR (Close Relative To Daily Range), который вычисляется так: , где Close - цена закрытия дня, High - максимальная цена дня, Low - минимальная цена дня. Если CRTDR>0.5, VAR4=1, иначе VAR4=-1.
- Режим автокорелляции (VAR5). Рынку свойственны два режима автокорелляции приращений цены. В одном из них автокорелляция положительна, в другом отрицательна. Если автокорелляция приращений за последние 5 дней больше 0, то VAR5=1, иначе VAR5=-1.
В результате работы вышеуказанной программы на языке R автор получает множество деревьев CART, одно из которых показано на рисунке в заглавии поста. Проследим на нем путь к узлу 4 : VAR3>=0 (длинный ценовой импульс больше или равен 0) и VAR4>=0 (индикатор CRTDR>0.5). Красный четырехугольник в конце пути означает предсказание падения цены с вероятностью 58 % (1 - 0.42), или, другими словами, вероятность роста цены в следующую неделю равна 42%. 18% в четырехугольнике означает долю из обучающей выборки, предсказавшую данный исход.
Так как было получено много деревьев, автор составил из них "матрицу правил", сгруппировав ее по предсказаниям ВВЕРХ и ВНИЗ. В связи с тем, что разные правила могли давать разные предсказания на одну и ту же точку (неделю), то была сформирована система баллов по такому принципу: когда правило давало предсказание ВВЕРХ, ему присваивался балл +1, если вниз, то -1, затем баллы складывались. Если в результате сумма была больше 0, то алгоритм входил в длинную позицию, если меньше 0 - в короткую, если равнялась 0 - оставался вне рынка.
В ходе тестирования были получены результаты по самым ликвидным ETF, отображенные на графике ниже, в сравнении с результатами стратегии купил-и-держи (красная линия):
Автор счел такие показатели прибыльности весьма обнадеживающими и предложил способы улучшения качества алгоритма:
- Оптимизация пути. Каждое ветвление в дереве является оптимальным, но оптимальность пути не гарантируется. Возможно придумать такую метрику, которая позволит оценить оптимальность всего пути и тем самым отобрать лучший.
- Подобрать другие переменные. Выбор переменных основан на опыте автора, но это не означает, что нельзя найти другие параметры, улучшающие результат.
- Попробовать другую методологию бэктестинга. Например, использовать не разделение выборок, а метод движущегося окна.
P.S. Более подробные сведения о технике CART, можете найти здесь. О библиотеке языка R rpart - здесь.
Спасибо за очередную отличную статью! При хорошем подборе предикторов методы Machine Learning действительно могут показать очень высокую эффективность при решении таких задач классификации, как предсказание направления движения рынка. Кроме rpart есть еще много других методов. Наиболее полный список методов ML есть в библитеке caret http://topepo.github.io/caret/modelList.html
Спасибо за дополнение!