Скачать MetaTrader 5

Проверка на коинтеграцию нескольких пар, больше 2х

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Язык MQL5 поддерживает технологию OpenCL. Попробуй сам!
Andy
564
Andy 2013.12.22 20:39 

С двумя парами все относительно просто - написать линейную комбинацию, допустим Xi - C*Yi, пропустить через нее два тестируемых ряда и проверить на стационарность, допустим, Дики-Фуллером.

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

anonymous
369
anonymous 2013.12.22 22:03  

a) Total least squares + любой тест на стационарность (тот же ADF). 

b) Johansen test

Andrey Khatimlianskii
56202
Andrey Khatimlianskii 2013.12.23 02:44  
Recycle2 - MQL4 Code Base
  • www.mql5.com
Recycle2 - MQL4 Code Base: технические индикаторы для МТ4
MetaQuotes
Админ
24952
Renat Fatkhullin 2013.12.23 03:01  
Посмотрите в эту сторону: https://www.mql5.com/ru/code/1146
ALGLIB - библиотека численного анализа
ALGLIB - библиотека численного анализа
  • голосов: 30
  • 2012.10.12
  • www.mql5.com
Библиотека математических функций ALGLIB version 3.5.0, портированная на MQL5.
Andy
564
Andy 2014.01.01 16:39  

Спасибо за ответы ...

1. ALGLIB - полезно, но пока мне рано такое использовать, у меня операций не так много, да и без понимания использовать черный ящик - себе во вред

2. TLS, похоже действительно имеет смысл, а вот тест Йохансена везде описан только теоретически, нет ли у вас случайно под рукой примера его практического применения, там где уже числами оперируют?

3. пока что решил остановится на методе Хренфикса из Recycle, судя по всему - это Метод Главных Компонент (хотя в русской литературе все действительно уныло, поэтому лучше смотреть Principal Components), но почему ковариационная матрица в коде Recycle треугольная, если во всех источниках указывается, что это должна быть матрица с дисперисей на диагонали и ковариацией в остальных ячейках?

Andy
564
Andy 2014.01.01 16:50  
komposter:
Это не из этой темы?
в принципе из этой, но в Recycle много лишнего (думаю, Хренфиксу он был нужен на начальном этапе как тестер) и есть ошибки, поэтому долго не хотел его трогать, но т.к. пока что это наиболее полная демонстрация методов связанных с коинтеграцией сейчас приходится переписывать его на MQL5 ...
anonymous
369
anonymous 2014.01.01 20:17  

2. а вот тест Йохансена везде описан только теоретически, нет ли у вас случайно под рукой примера его практического применения, там где уже числами оперируют?

Google по запросу "Johansen test" выдает уйму примеров. Либо вот вам пример на языке R (из хелпа):

install.packages('urca')
library(urca)
data(denmark)
sjd <- denmark[, c("LRM", "LRY", "IBO", "IDE")]
sjd.vecm <- ca.jo(sjd, ecdet = "const", type="eigen", K=2, spec="longrun",
season=4)
summary(sjd.vecm)

Результат:

Values of test statistic and critical values of test:

          test 10pct  5pct  1pct
r <= 3 |  2.35  7.52  9.24 12.97
r <= 2 |  6.34 13.75 15.67 20.20
r <= 1 | 10.36 19.77 22.00 26.81
r = 0  | 30.09 25.56 28.14 33.24

Итого, 1 вектор коинтеграции. 

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

Также во всех источниках указывается, что матрица ковариации симметрична относительно диагонали ;)

Andy
564
Andy 2014.01.10 13:17  

Переписал Recycle на МТ5, но на методе GetOptimalVector мой мозг сломался, потому что ни в один известный мне алгоритм это не вписывается (предполагаю, что это ноу-хау - уменьшение дисперсии делением матрицы на ее максимальное значение), а бездумно переписывать не хотелось, поэтому написанное у меня, после метода GetCovMatrix - уже импровизация по тому материалу, что прочитал в разных источниках, вдобавок надо еще расчитать портфель на полученных коэффициентах, в принципе Хренфикс приводит формулу синтетика, но опять же, надо будет еще изучить теорию Марковица, а потом еще раз сравнить с велосипедом Хренфикса.

Пока есть такое : https://charts.mql5.com/3/538/eurusd-m15-alpari-limited-temp-file-screenshot-53150-png.png

Вектор был выбран как минимальное собственное значение ковариационной матрицы (eigenvalue), соответствующее минимальной дисперсии цен. Если есть заинтересованные в развитии темы - просьба глянуть код и высказать свое мнение, потому как очень вероятны ошибки ... коэффициенты слегка отличаются, но мне кажутся правильными :)

Вопросы:

1. опять же в нескольких независимых источниках советуют вместо PCA применять SVD (Singular Value Decomposition) как более надежный метод, не использующий ковариационную матрицу и потому требующий меньшего количества вычислений ... может ли кто потвердить или опровергнуть это?

2. Это уже не так важно, но для общего развития ... один метод в индикаторе Хренфикса не дает покоя - GetSign - знает ли кто его назначение? Теоретически могу предположить, что ковариационная матрица формирует элипсоид в декартовой системе координат и данный метод проверяет какие из точек этого элипсоида лежат в положительной, а какие в отрицательной плоскостях ... 

3. Для того, чтобы проверить коэффициенты на стабильность (продолжительность действия) надо расчитать их для опр. интервала времени, а на оставшемся промежутке времени просто применять их без перерасчета, это и будет период Out Of Sample, правильно?

Файлы:
PCA.mq5 13 kb
Andy
564
Andy 2014.01.10 14:17  

Вот, к примеру, самое вменяемое что нашел по тесту Йоханссена, если правильно понял, то :

1. берем первую разность на каждом ряде, сохраняем остаток (трендовая составляющая)

2. по остатку расчитываем какой-то S, судя по формуле это будет дисперсия (хотя дисперсия на тренде звучит странно)

Сразу же вопрос - почему J, K = { 0, 1 }, что такое R' (что означает штрих) ?

3. Получили собтвенные значения для S - что они будут значить, также как и PCA - чем меньше коэффициент и дисперсия, тем вероятней сходимость рядов?

Update : кажется дошло :)

Надо взять на одном ряде первую и вторую разность, вторая - это производная, J и K изменяются от 0 до 1 как раз потому что разницы всего две, дальше стандартная ковариационная матрица на этих данных и solving of eigenproblem ...

Файлы:
ECM.png 38 kb
Nikolay Demko
12465
Nikolay Demko 2014.01.10 14:57  
artemiusgreat:

Вот, к примеру, самое вменяемое что нашел по тесту Йоханссена, если правильно понял, то :

1. берем первую разность на каждом ряде, сохраняем остаток (трендовая составляющая)

2. по остатку расчитываем какой-то S, судя по формуле это будет дисперсия

Сразу же вопрос - почему J, K = { 0, 1 }, что такое R' (что означает штрих) ?

3. Получили собтвенные значения для S - что они будут значить, также как и PCA - чем меньше коэффициент и дисперсия, тем вероятней сходимость рядов?

R регрессия

штрих производная

anonymous
369
anonymous 2014.01.10 16:08  
artemiusgreat:
 

1. опять же в нескольких независимых источниках советуют вместо PCA применять SVD (Singular Value Decomposition) как более надежный метод, не использующий ковариационную матрицу и потому требующий меньшего количества вычислений ... может ли кто потвердить или опровергнуть это?

Точнее, рекомендуют делать PCA на основе SVD разложения. Ковариационная матрица используется в любом случае, количество вычислений не уменьшается. 

Задача оценивания ковариации тоже не так проста, как кажется. Оценка cov(x) = (x-E(x))' (x-E(x)) далеко не лучшая среди известных.

123456
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий