Введение
Увы, одна очень интересная тема, как мне показалось, была обделена вниманием смартлабовцев. В ходе обсуждения этой темы мною была озвучена (в общем-то, очевидная) идея: найти разложение цены на трендовый и средневозвратный процесс, либо на средневозвратный процесс и случайное блуждание; отделённый от остальной динамики средневозвратный процесс может служить источником сигнала для контр-трендовой стратегии.Вашему вниманию предлагается небольшое исследование, в котором будут рассмотрены:
1) Несколько видов случайных процессов:
ABM: арифметическое Броуновское движение без сноса, на котором невозможно заработать;
OU: процесс Орнштейна-Уленбека, являющийся средневозвратным, и на котором можно заработать;
Independent.ABM+OU: сумму арифметического Броуновского движения и процесса Орнштейна-Уленбека с некоррелированными инновациями, которое можно рассматривать как модель цены для построения контр-трендовой стратегии;
Correlated.ABM+OU: сумму арифметического Броуновского движения и процесса Орнштейна-Уленбека с коррелированными инновациями, которая обладает более интересными свойствами;
2) Структурные функции вышеуказанных случайных процессов, теоретические (за исключением случая Correlated.ABM+OU) и эмпирические (во всех случаях);
3) Численный способ оценивания параметров Independent.ABM+OU на основе эмпирической структурной функции, а также немного рассуждений про способы оценивания параметров для случая Correlated.ABM+OU;
4) Использование фильтра Калмана для оценивания каждой из компонент, входящих в процессы Independent.ABM+OU и Correlated.ABM+OU.
В конце статьи вы найдёте ссылку на код на языках R и C++, который использовался для выполнения численных экспериментов.
И, разумеется, в статье будет куча формул. Ещё не поздно закрыть вкладку! :)

Арифметическое Броуновское движение, процесс Орнштейна-Уленбека и их структурные функции
Арифметическое Броуновское движение (ABM) описывается стохастическим дифференциальным уравнением (СДУ) вида







Процесс Орнштейна-Уленбека (OU) описывается СДУ вида






Ниже представлен код для генерации траекторий процессов ABM и OU:

Структурная функция случайного процесса со стационарными приращениями определяется следующим образом:


Структурная функция арифметического Броуновского движения имеет вид




Ниже представлен код, реализующий численный расчёт указанных структурных функций:

Ниже представлены графики структурных функций для арифметического Броуновского движения и процесса Орнштейна-Уленбека. Красными звёздочками изображены эмпирические структурные функции, полученные из неких реализаций соответствующих процессов. Черными линиями изображены теоретические структурные функции для тех же значений параметров, которые использовались для генерации реализаций и вычисления эмпирических структурных функций.


Сумма арифметического Броуновского движения и процесса Орнштейна-Уленбека с некоррелированными приращениями (Independent.ABM+OU)
Рассмотрим случайный процесс Independent.ABM+OU, являющийся суммой арифметического Броуновского движения и процесса Орнштейна-Уленбека, и характеризующегося набором параметров




Численное моделирование процесса можно выполнять моделированием входящих в него компонент с последующим их сложением.
Структурная функция полученного процесса имеет вид



На предыдущем графике:
— красными звездочками изображена эмпирическая структурная функция некоторой реализации процесса Independent.ABM+OU;
— чёрной линией изображена теоретическая структурная функция вида

— зелёной и синей линиями изображены теоретические структурные функции компонент ABM и OU, соответственно.
Построим процедуру численного оценивания параметров процесса Independent.ABM+OU путём подгонки его теоретической структурной функции к эмпирической структурной функции некоторого процесса. В качестве критерия оптимизации будем использовать сумму квадратов ошибок.
Одним из нюансов, которые нужно учесть, является превращение процесса OU в процесс ABM при



Приведём небольшой пример реализации процесса Independent.ABM+OU. Визуальное отличие от исходного ABM процесса, представленного ранее, практически не заметно. Однако статистическая разница присутствует и мы сможем приблизительно разделить процесс на составляющие его компоненты.

Воспользуемся разработанной ранее процедурой для оценивания параметров процесса


В результате получим оценки значений параметров, равные


Использование фильтра Калмана для разделения суммы арифметического Броуновского движения и процесса Орнштейна-Уленбека с некоррелированными приращениями (Independent.ABM+OU) на компоненты
Для дальнейшей работы нам потребуется фильтр Калмана. В репозитории CRAN представлено множество его реализаций: FKF, KFAS, KFKSDS, miscFuncs, RAHRS, dlm, не считая встроенных (?stats::KalmanLike). Пользоваться мы ими, конечно же, не будем.В иллюстративных целях подойдёт примитивная и минимально функциональная реализация (только шаги predict & correct, без оценивания параметров при помощи MLE):


В данной реализации фильтра Калмана используется линейная динамическая система:







Помимо оценки ненаблюдаемого состояния системы


Чтобы построить фильтр Калмана, способный разделять компоненты процесса Independent.ABM+OU, требуется задать матрицы






Диагональ матрицы перехода состояния


Инициализируем фильтр Калмана в соответствии с разработанной динамической системой, а также параметрами, оцененными из эмпирической структурной функции процесса, после чего запустим фильтр, записывая его оценки скрытого состояния динамической системы.

Ниже представлен график реализации процесса Independent.ABM+OU (чёрный), оценки ABM компоненты фильтром Калмана (красный) и истинного значения ABM компоненты (зелёный). На нём видно… что ничего не видно.

Ниже представлен график оценки OU компоненты фильтром Калмана (красный) и истинного значения OU компоненты (зелёный).

Построим scatter plot на основе данных с предыдущего графика:

На представленном графике видно, что между истинным значением средневозвратного процесса OU и оценкой, полученной при помощи фильтра Калмана, имеется существенная корреляция. Разработанную методику можно попробовать применить, чтобы разложить аналогичным образом логарифм цены некоторого инструмента (портфеля инструментов).
Сумма арифметического Броуновского движения и процесса Орнштейна-Уленбека с коррелированными приращениями (Correlated.ABM+OU)
Пусть теперь Винеровские процессы, входящие в









Для генерации такого процесса нам потребуются условные матожидание и ковариация многомерного нормального распределения, из которого будем брать приращения для получения значения процесса в момент


(файл MvOU.cpp)

Код, загружающий необходимые пакеты, а также выполняющий компиляцию C++ кода:

Тогда моделирование многомерного процесса Орнштейна-Уленбека (MvOU) и процесса, являющегося суммой коррелированных арифметического Броуновского движения и одномерного процесса Орнштейна-Уленбека (Correlated.ABM+OU), как частного случая MvOU, выполняется следующим образом:

Ниже представлен график реализаций процесса Correlated.ABM+OU для значений корреляции между инновациями компонент, равных 0 (чёрная), +0.9 (красная) и -0.9 (зелёная):

Видно, что при положительной корреляции за шоками следуют более сильные откаты (процесс становится более антиперсистентным, чем Independent.ABM+OU), а при отрицательной — влияние шоков сглаживается во времени (процесс становится более персистентным, чем Independent.ABM+OU).
Построим эмпирические структурные функции этих реализаций процесса Correlated.ABM+OU, и сравним их с теоретической структурной функцией процесса Independent.ABM+OU, а также теоретическими структурными функциями его компонент:

Возникает подозрение, что на основе анализа эмпирической структурной функции процесс Correlated.ABM+OU легко спутать с обобщённым Броуновским движением (СДУ:





Несмотря на то, что даже в случае нулевой корреляции структурная функция имеет вид

Построим зависимость показателя Хёрста, которому хорошо соответствуют эмпирические структурные функции процесса Correlated.ABM+OU, от корреляции между инновациями компонент процесса:

Что касается оценивания набора параметров

1) Аналитически вычислить структурную функцию многомерного процесса Орнштейна-Уленбека и подогнать её по параметрам под эмпирическую;
2) Составить модель для фильтра Калмана и использовать на ней метод максимального правдоподобия;
3) Численно оптимизировать по параметрам, генерируя для каждого из проверяемых набора параметров реализацию процесса и вычисляя его эмпирическую структурную функцию; в качестве критерия оптимизации использовать сумму квадратов разностей между эмпирической структурной функцией целевого процесса и эмпирической структурной функцией процесса, смоделированного на основе текущих параметров.
Использование фильтра Калмана для разделения суммы арифметического Броуновского движения и процесса Орнштейна-Уленбека с коррелированными приращениями (Correlated.ABM+OU) на компоненты
Составим функцию для инициализации параметров линейной динамической системы в основе фильтра Калмана, исходя из параметров

Как и в прошлый раз, сгенерируем синтетические данные и пройдёмся по ним фильтром Калмана:

Ниже представлен график реализации процесса Correlated.ABM+OU (чёрный), оценки ABM компоненты фильтром Калмана (красный) и истинного значения ABM компоненты (зелёный). И опять на нём ничего не видно.

Ниже представлен график оценки OU компоненты фильтром Калмана (красный) и истинного значения OU компоненты (зелёный).

Построим scatter plot на основе данных с предыдущего графика:

Заложенная в фильтр Калмана модель процесса вновь позволяет отделить средневозвратный процесс (OU) от арифметического Броуновского движения (ABM).
Что дальше

1. Попробовать применить метод разделения Independent.ABM+OU на компоненты к котировкам отдельных инструментов или линейных комбинаций (портфелей) инструментов;
2. Доделать механизм оценивания параметров для процесса Correlated.ABM+OU;
3. Посмотреть на модели с негауссовыми инновациями или модели с более сложной динамикой; использовать UKF/EKF/PF для оценивания компонент процесса;
4. Бросить всё и пойти пить пиво;
5. ???
6. Profit!
Приложения
Это разЭто два