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

 

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

1. Во-первых, необходимо нормализовать ценовые колебания относительно какого-то значения. Поясню на примере. Возьмем акции Apple, в начале 2000 года они торговались в районе 6$ сейчас в районе 200$. Сравнение колеблемости 2000 года с 2010 будет не корректно. Поэтому лучше рассчитывать колеблемость не на основе ценового приращения, а на основе процентного приращения. Например если за неделю акции Apple упали с 6 до 4$ в 2000 году, то это означает падение на 33%, то же самое произойдет в 2010 году если Apple упадет с 200 до 134$. Далее я рассчитал процентное приращение закрытие недели по отношению к закрытию предыдущей недели и записал все эти результаты в массив. На графике массив этих приращений получился следующим:

 

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

2. Как видно, этот график обладает экстремальными выбросами как в положительную так и в отрицательную сторону. Эти выбросы могут исказить общий результат поэтому их необходимо отфильтровать. Для этого я рассчитал величину одного стандартного квадратичного отклонение для генеральной совокупности, затем умножил его на два. Полученная величина стала означать потолок возможных значений. Затем я срезал все величины превышающие эту величину по модулю до размера этой самой величины (все что выше красной линии). Таким образом я отфильтровал экстремальные значения по двум сигмам. Почему по двум, а не по трем? Дело в том, что даже для нормального распределения вероятность пересечения третей сигмы крайне мала и составляет около 0.2%. Поэтому фильтрация по двум сигмам думаю является оптимальной:

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

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

 

3. После этого необходимо было рассчитать сезонную компоненту на этом графике. Я почитал несколько учебников статистики, и понял что все  в этом случае сводится к трем вещам. Расчет тенденции, невелирование случайных приращений например на основе средних, расчет собственно сезонной компоненты. Так как мы оперируем недельными барами а случайные колебания и выбросы находятся внутри них можно сказать что мы загладили влияние случайной компоненты. Однако можно делать расчеты не на основе Закрытие – Предыдущее закрытие, а на основе Средняя цена за неделю – Средняя цена за предыдущую неделю (визуально график практически не меняется).

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

 

 

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

Обратите внимание, что функция линейного тренда расчитанная в моей программе (красная линия) идентична функции линейного тренда рассчитанной в Exel (черная пунктирная линия). Смысл в том, что все что превышает или не достигает общей функции – есть сезонная колеблемость.  Теперь выравниваем эту колеблемость по линии тренда, получаем такую вот картинку:

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

Затем я написал советник, рассчитывающий сезонную колеблемость предыдущих лет, и затем продающий на падениях этой колеблемости и покупающий на росте. Важно отметить, что во первых, советник покупает и продают только на основе этого индекса, не пользуясь данными по текущим ценам, а во-вторых, он рассчитывает значения на уже известных данных прошлых лет. Например, если я запускаю его в 2000 году он рассчитает 15-летний индекс на основе данных 1985-1999 года включительно и будет торговать на этой основе до конца 2000 года. С наступлением 2001 года он пересчитает сезонный индекс с 1986 по 2000 год включительно и будет руководствоваться уже им.

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

 

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

 

 

если вас еще интересует результат, то имеется инструмент для получения обьктивных линейнo независимых составляющих временного ряда (Specto):

https://www.mql5.com/ru/forum/120198/page6#211845

сумма составляющих дает ряд.

 
Если честно, я не много не понимаю, что делает этот инструмент и как его можно приспособить для этой задачи? В моей модели сезонности есть фактически только две составляющие: общая тенденция и сезонная компонента. При этом общая тенденция в моей модели рассматривается как  случайное явление. Размер сезонной компоненты велик. Все - что не общая тенденция есть сезонная компонента. Так как из года в год поведение цены в одни и те же промежутки времени может меняться, сезонная компонента будет сглаживаться или стремится к нулю. Например ценовой взлет в январе 2000 года будет нивелироваться ценовым  падением в январе 2001 года. В результате сезонная компонента выровняет сама себя. Останутся только закономерности хотя и слабые. Как видно на графике золота от сезонности остается только 1,5 - 2,0% от движения цены.
 
Фирма Apple, если я правильно понял, это какая то сельскохозяйственная или фруктовая фирма. В производственном цикле этой компании есть сезонные компоненты, весенняя посевная и осенняя жатва, правильно ли я понял?
 
C-4:
Если честно, я не много не понимаю, что делает этот инструмент и как его можно приспособить для этой задачи? В моей модели сезонности есть фактически только две составляющие: общая тенденция и сезонная компонента. При этом общая тенденция в моей модели рассматривается как случайное явление. Размер сезонной компоненты велик. Все - что не общая тенденция есть сезонная компонента. Так как из года в год поведение цены в одни и те же промежутки времени может меняться, сезонная компонента будет сглаживаться или стремится к нулю. Например ценовой взлет в январе 2000 года будет нивелироваться ценовым падением в январе 2001 года. В результате сезонная компонента выровняет сама себя. Останутся только закономерности хотя и слабые. Как видно на графике золота от сезонности остается только 1,5 - 2,0% от движения цены.

Инструмент сам выделяет обьективные линейно декоррелированные составляющие. Если у вас все есть, то и хорошо. Я не навязываю и не продаю ничего. :)
 
HideYourRichess:
Фирма Apple, если я правильно понял, это какая то сельскохозяйственная или фруктовая фирма. В производственном цикле этой компании есть сезонные компоненты, весенняя посевная и осенняя жатва, правильно ли я понял?

Или такие сезоны: Стив Джобс есть. Стива Джобса нету.
 

На графике, одном из них, я насчитал штук 13-14 "шишок", то есть примерно одна "шишка" в год. Пики этих "шишок" приходятся на первый квартал года, примерно. Так что, моя теория состоит в том, что эта "сезонность" скорее всего связана с окончанием финансового года, выплатой дивидендов и т.д.

Но, это так, в самом первом приближении.

 
HideYourRichess:
Фирма Apple, если я правильно понял, это какая то сельскохозяйственная или фруктовая фирма. В производственном цикле этой компании есть сезонные компоненты, весенняя посевная и осенняя жатва, правильно ли я понял?
Да, Вы совершенно правы. Apple - это сельскохозяйственная компания, которая занимается производством и реализацией яблок (такие сорта как Джонатан Ред, Киддс Оранж Ред, Ранетка пурпуровая). Как и у любой сельскохозяйственной компании, ее акции поднимаются в цене, если урожай яблок хороший, и падают - если плохой. Это фундаментальная закономерность. С этим не поспоришь!
 
Если серьезно, то не стоит под сезонностью понимать лишь сельскохозяйственные циклы. Есть как Вы правильно заметили выплаты дивидентов, ежеквартальные налоговые отчисления, колебания ликвидности, например перед периодом выплаты налогов может увеличиваться спрос на деньги (ликвидность возрастает), акции банковского сектора могут опосредовано учитывать это. Пример для акций Apple я привел для универсальности, автомату все равно что расчитывать, есть только цены.
 
HideYourRichess:

На графике, одном из них, я насчитал штук 13-14 "шишок", то есть примерно одна "шишка" в год. Пики этих "шишок" приходятся на первый квартал года, примерно. Так что, моя теория состоит в том, что эта "сезонность" скорее всего связана с окончанием финансового года, выплатой дивидендов и т.д.

Но, это так, в самом первом приближении.



В реальности шишок и впадин больше чем 13 или 14. В среднем за десять лет получается по 110-120 сделок. Все это на основе недельных данных. Если Подсчитать сезонную компоненту на основе дневных данных, сделок будет гораздо больше. К тому же сезонность можно рассчитать для квартала или даже месяца а не года, сделок в этом случае будет еще больше. Такой Гуру как Ларри Вильямс расчитывает сезонность даже для одной недели. Его концепция TDW - это и есть сезонный фактор  рассчитанные для недели.
 
Тогда это не сезонность, а периодичность. Она есть даже внутри недель на валютах. Там то же всё фундаментально.
Причина обращения: