Готовим ценовые данные правильно. Часть 1: ужасы гетероскедастичности.

Автор: Александр Кургузкин (mehanizator).

Когда вы пытаетесь построить некую модель, которая предсказывала бы будущее изменение цены, она обычно выглядит так: на вход подаются какие-то факторы, полученные из ценовых данных, например индикаторы какие-нибудь, а на выходе имеем оценку сдвига цены, ну, например, за день.

Обычно вашей первой мыслью на этом пути будет использовать изменения цен как есть, то есть (Close/Open — 1), например. Особо хитрые могут взять ln(Close/Open), и так правильнее, кстати. Скорее всего большинство входов модели будут представлять собой линейные комбинации вот этих самых изменений цен за прошлые бары.

Думаем дальше — нужно всю эту матрицу “входы х выход” решить методом наименьших квадратов, она нам даст линейную модель для предсказания будущей цены, с которой мы счастливо заживем.

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

Вроде все правильно и логично, да?

Нет!

Засада в том, что изменение цены на протяжении всей истории имеет сильно неоднородную дисперсию. Специально обученные люди называют это гетероскедастичностью. В переводе на русский — волатильность разная на разных участках. В 2008 она была высокой, в 2012 она была низкой.

Абсолютные значения дневных сдвигов SPY:

Если вы будете пытаться построить линейную модель на неоднородных по дисперсии данных, вы получите мусор!

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

В общем, вы просто подгоните модель под кризисные годы с сильной волатильностью. А все остальные года, все данные между кризисами, работать вообще не будут.

Вы хотите зарабатывать каждый год или только в год, подобный 2008? Вы уверены, что следующий эпизод сильной волатильности будет в точности таким, как в 2008 году? Если у вас данные собраны из разнородных кусков, как вообще можно оценить надежность параметров модели? Разные куски данных будут вносить разный вклад в модель, как понять какая реально доля данных создала ваш коэффициент? Без нормальной оценки надежности коэффициента вы получите недооценку рисков.

Модель должна опираться на все данные в равной мере!

Как этого добиться? Мой вариант — нужно нормировать ценовые сдвиги на текущую волатильность. Ее можно оценивать по-разному:

1. средний диапазон бара ln(High/Low) за N баров

2. диапазон цены за N баров — фактически то же самое что 1, только с коэффициентом sqrt(N).

3. среднее абсолютное значение сдвига цены за N баров

4. СКО сдвига цены за N баров.

Я обычно использую первый способ.

В идеале N должно быть небольшим, потому что иначе останется локальная неоднородность данных, опять получаем подряд идущие большие значения которые вносят слишком сильный вклад в модель и сбивают оценку адекватности коэффициентов.

Вычисляем для каждого бара волатильность каким-нибудь из указанных способов, нормируем изменения цены на волатильность, получаем однородные по времени данные. По ним уже можно строить линейную модель, все ряды в матрице будут вносить одинаковый вклад в модель, и можно будет спокойно использовать стандартные формулы для оценки надежности параметров модели.

Нормированные сдвиги цен SPY:

Кстати, если все гоняете тестер систем на каком-нибудь Метастоке и в жизни не слышали про корреляции и линейные модели, не думайте, что это вас не касается. Подгоняя системы в тестере, вы решаете какую-то задачу оптимизации, и ваше решение скорее всего будет не сильно далеко от решения, полученного методом наименьших квадратов. Даже если вы в качестве факторов для системы будете использовать завязанные на волатильность индикаторы вроде боллинджера, RSI, ATR — это решит только часть проблемы. Эквити, которую вы в итоге получаете, будет собрана из ненормированных ценовых сдвигов и основные ее характеристики будут созданы ограниченным числом сильно волатильных фрагментов исторических данных.

Нужно разобрать график цены на ценовые сдвиги, нормировать их на волатильность, и собрать обратно. На этом синтетическом инструменте уже можно что-то тестировать. Пример таких инструментов для S&P и MICEX.

Автор: Александр Кургузкин (aka mehanizator)

Другие статьи по теме:

Готовим ценовые данные правильно. Часть 2: в поисках лучшей нормировки

LowVol своими руками: делаем из SPY фонд низкой волатильности

CAPM и индикатор перетока рисков

Комментарии:

Салимжан Бижанов: спасибо!
пусть остатки в ваших моделях будут гомоскедостичными!

thevlad: еще можно использовать ранковую корреляцию

mehanizator: про ранговую корреляцию будет во второй части.

mehanizator: но без предварительной нормировки ее тоже использовать нет смысла.

ysmolentsev: По последнему абзацу, если тестить на синтетическом инструменте, то события входа-выхода могут сместиться во времени, в результате нарушится вся логика системы, не лучше ли нормировать не график цены, а график эквити?

mehanizator: а откуда возникают события входа и выхода? относительно чего они сместятся?

albert.khamzin: А нас в универе этому не учили, когда рассказывали про всякие модели. Эти все полезные примочки, видимо, не относятся ни к какой формальной модели, описывающей движение цены, а происходят больше из практической плоскости?

mehanizator: в эконометрике это должно рассказываться.

albert.khamzin: Я прослушал «Введение в эконометрику», твм не было. Наверное, это уже адвансед левел. Но идея интересная, надо будет ознакомиться.
А есть какая-нибудь толковая книга по эконометрике, основательная но без доказательств теорем?

mehanizator: не знаю, мне эконометрику в вузе не преподавали 🙂

ysmolentsev: mehanizator: а откуда возникают события входа и выхода? относительно чего они сместятся?
——-
Из соотношений цен, из паттернов. Например, уровни поддержки-сопротивления на обычном и нормированном графиках могут не совпадать. Соответственно, могут не совпадать входы-выходы построенных на них систем. При этом если эти уровни на обычном графике, допустим, дают стат преимущество, то не факт, что оно обнаружится на синтетическом инструменте.

mehanizator: моя статья касается моделей построенных на временных рядах, а не вокруг уровней. если входы считаются от каких-то уровней, то входы вероятно не зависят от волатильности, тогда нормировать надо только выход, результат, т.е. как вы предложили, эквити.

mehanizator: Альберт, я не думаю, что это адвенсед левел, скорее наоборот. То, что любая линейная модель должна строиться на однородных по дисперсии данных это вроде как общее место. Для неоднородных данных есть GARCH модели, вот это уже да, адвенсед левел 🙂

albert.khamzin: Ну вот Марковиц ничего не нормировал, Шарп тоже. Я имею в виду в своих классических работах. Но звучит всё разумно, конечно, я не спорю, что это базовая вещь, просто в первый раз сталкиваюсь.

mehanizator: а если б нормировали, может, и LTCM не случился бы 🙂

mehanizator: и марковиц и шарп предполагали гауссовое распределение сдвигов, а я тут намедни померял эксцесс (curtosis) у SPY, там 18 (у гаусса 0).

Салимжан Бижанов: albert.khamzin: А нас в универе этому не учили, когда рассказывали про всякие модели. Эти все полезные примочки, видимо, не относятся ни к какой формальной модели, описывающей движение цены, а происходят больше из практической плоскости?
__________________________________

про нормирование рассказывают в универе.
Z-преобразование например, когда из исходного ряда вычитают мат.ожидание и делят на среднеквадратическое отклонение.

ysmolentsev: Про уровни, это я для примера. Просто в начале вы пишете про факторы (индикаторы), подающиеся на вход. А в конце получается, что их надо считать не по реальным ценам, а по синтетическому инструменту. Зачем? И что это за индикаторы, можно пример?

mehanizator: так вся статья про то, зачем надо считать не по реальным ценам, а по синтетическому инструменту.

пример — скользящие средние и все, что на них базируется.

mehanizator: в технических универах могут запросто про такие вещи не говорить, потому что нестационарные модели кроме как в экономике мало где встречаются, обычно в технике временные ряды имеют более-менее постоянную дисперсию. а вот экономистам должны про гетероскедастичность рассказывать.

hrenfx: Автор, могли бы вы раскрыть подробнее суть 3-4 абзацев? Не сумел разобраться, что имели в виду.

В своих исследованиях совершенно не использую столь популярные returns. Т.к. не ясны причины их использования и вычисления. Особенно, когда речь идет о внутридневных движениях. Об этом писал у себя…

Раз вы используете одно значение цены, то, видимо, берете данные по ластам. Сам оцениваю два ценовых ряда: Bid и Ask.

Правильно ли понял, что под линейностью в контексте данной статьи имеется в виду ТС без ММ? Т.е. есть своего рода две альтернативы: строить линейную ТС на синтетическом цВР (без учета ребалансировок на реале) или же строить ТС с ММ (ребалансировки учитываются) на оригинальном цВР? Где ММ вычисляется через волатильность.

Т.е. переход к линейности связан с желанием более оптимально использовать вычислительные ресурсы при оптимизациях. А также более простой оценки результатов теста ТС.

Сам использую синтетики, нормирую только цВР, а не их приращения. Ну и построение самих цВР делаю не по дням и квантую не по одинаковым временным интервалам астрономического времени. Тогда получается обойти некоторые неудобности толстохвостости. Короче, писал об этом.

mehanizator: Строим линейную модель зависимости будущих изменений цены от входов (индикаторов). Модель получается решением матрицы входы х выход методом наименьших квадратов.

hrenfx: Можно на пальцах? Не въезжаю что-то.

mehanizator: я не совсем понимаю, какие там могут быть затруднения. линейная регрессия, метод наименьших квадратов.

hrenfx: МНК и ЛР — это все понятно. Не понимаю, как получается матрица, чтобы потом начать ее решать.

Мы имеем вектор входов — индикаторный ВР. Имеем вектор ценовых изменений — returns цВР. Что за матрица входы x выходы? — здесь загвоздка у меня.

hrenfx: Возможен ли пример с МАшкой?

mehanizator: для каждого дня из K дней у вас имеется N значений входов и 1 значение выхода. получается матрица K x (N + 1).

hrenfx: Раз никто не задал подобного вопроса, значит, это типа очевидно для всех.

Побуду идиотом, т.к. про матрицу так и не понял. Попробую тогда зайти с другой стороны. Что же мы хотим определить при линейном подходе?

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

И решение матрицы, составление которой так и не осознал, это как раз и есть решение задачи минимизации расхождений?

mehanizator: задача в том, чтобы найти линейную формулу, которая бы максимально точно описывала связь между входами и выходом.

а1 * вход1 + а2 * вход2 + … = выход

hrenfx: Совсем запутался. Что такое тогда «входы» и «выходы»?

mehanizator: входы — значения индикаторов, описывающих текущее состояние. выход — будущее изменение цены.

hrenfx: Впервые столкнулся с такой терминологией. Спасибо за терпение, теперь понял!

Вот только не ясно, зачем строить подобную линейную модель, когда выходы через ЛР подгоняются под входы.

Видимо, это просто хотелка построить такую модель. Попробую порассуждать вслух.

В качестве решения мы получил вектора из значений a1, a2 и т.д. Решение, видимо, тем лучше, чем меньше СКО этих векторов.

Правильно ли я понимаю, что при нормировки по волатильности СКО соответствующих коэффициентных векторов значительно уменьшается?

mehanizator: при нормировке получается больше смысла в модели, потому что данные становятся значительно однороднее, и их СКО тоже уменьшается.

hrenfx: Следующий логичный шаг не стали делать?

Допустим, взяли МАшку с какими-то фиксированными параметрами. Прогнали ТС по ней — получили результаты.

Затем взяли вектор значений волатильности, что посчитали. И сделали ММ пропорциональным ей.

Каков будет результат ТС с таким ММ?

mehanizator: Статья про то, как готовить данные для последующей работы. ТС и ММ остаются за рамками статьи.

dragonorkhon: Замечательная статья. Буквы знакомые, а смысл не ясен.
Понятно, только, что люди здесь умные собираются. Попробую вбросить свой вопрос, может прокатит?
Возьмем для начала этот пост: «ysmolentsev: По последнему абзацу, если тестить на синтетическом инструменте, то события входа-выхода могут сместиться во времени, в результате нарушится вся логика системы, не лучше ли нормировать не график цены, а график эквити?»
Я бы сказал, что единственное, что нас должно волновать, это именно график эквити. Потому, что это именно он образует нашу прибыль, и именно потому, что мы только им можем управлять. А теперь идея которая меня беспокоит: Поскольку графиком эквити синтетика мы можем управлять, почему бы нам не сформировать из него нечто вроде периодической функции с заданными параметрами — периодом и амплитудой? Предполагаю, что таким синтетическим инструментом, в простейшем случае, может быть инструмент составленный из позиций BUY и SELL одного единственного инструмента, например одной валютной пары. Можно сказать иначе: с помощью балансировки открытых позиций исключить трендовую составляющую и торговать флет, управляя его амплитудой. Стратегии для флета имеются, но они не устойчивы к трендам. По моему, это логичный шаг в сторону от арбитража и парного трейдинга. А что скажут товарищи ученые?

Kent: Это невозможно.
1. Конечно фазы рынка будут накладывать на поведение мтс свой отпечаток и соответственно на эквити. Но желательно такие вещи выявлять и включать в качестве фильтра в мтс.
2. Торговля эквити годам избитая тема, копий сломано много. Мое имхо, тут рыбы нет.
3. Обоснование. Любая мтс генерит последовательность сделок аналогично кривой монете, т.е. последовательность сделок с распределением Бернулли. https://ru.wikipedia.org/wiki/Распределение_Бернулли
В этом случае эквити из себя представляет СБ со сносом. СБ со сносом эквивалентно обычному СБ (случайное блуждание) только повернутому относительно оси Х на угол некоторый.
Есть теорема в теории вероятности, что на СБ невозможны никакие системы игры, т.е. они бессмысленны.

Kent: Если желаете подробнее, то ищите на пауке, там много копий сломано на эту тему. Мой диагноз однозначен — рыбы нет.
Весь манименеджмент в топку.

dobrachev: По-моему, Kent, это слишком громкие фразы, про то что «весь манименеджмент в топку» 🙂
Понятно, что если у нас убыточная МТС никакой ей ММ не поможет. А вот если она и правда прибыльная, какой должен быть максимальный риск на сделку? Ведь всё равно понятно, что имея 1000000 глупо ставить 1 копейку, зная что мат. ожидание действительно положительное. Но точно также откровенное безумие идти вабанк. Значит нужно искать ответ где-то между этими вариантами. Вот ММ как раз про это. Он и говорит сколько следует ставить на кон.
Я не спорю, что разработать прибыльную мтс — это 95% успеха, а простые правила ММ — это просто про то как не слиться даже с прибыльной мтс. И про Бернулли, конечно, всё правильно Вы пишите.
Но ведь дело в том, что весь бизнес форекс-кухонь фактически построен на том, что «буратины» сроду не слышали ни про какие правила ММ, и радостно «инвестируют» 100$ с плечом 1 к 200. Вот это и есть самый яркий пример работы ММ.
А то что не строить вторую мтс по своей эквити, с этим я конечно согласен 🙂

Kent: В таком ключе согласен.
Кому интересно, в таком ключе ММ — конкретный способ — можно найти в логах тут.

Kent: Дам здесь простое правило без тонкостей.
При определении Размера капитала в сделке, закладывайтесь, что вы можете получить 5-10 лоссов подряд и такая ситуация должна вас оставить в игре.

Dserg: Спасибо, интересная статья.
Попробовал нормировать на волатильность CAC и DAX. А потом торговать отношение D/C (Buy and Hold). Максимальная просадка для нормированных индексов снизилась на 40%, средняя — на 25%. Это впечатляет.
Вопрос такой: как торговать синтетическое отношение двух нормированных индексов? Не совсем понятно, как рассчитать размер позиции, что делать если по одному индексу изменится волатильность?

Павел Дуков: спасибо


Подпишитесь на уведомления о новых постах

И получите доступ к специальным материалам сайта