Прогнозирование динамики валютного курса доллар/рубль на основе его декомпозиции на несколько случайных процессов
Предсказание курса рубля к доллару как одна из наиболее актуальных тем на сегодняшний день. Знакомство с особенностями и проблемами прогнозирования динамики валютного курса доллар/рубль на основе его декомпозиции на несколько случайных процессов.
Рубрика | Экономика и экономическая теория |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 17.07.2020 |
Размер файла | 3,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Прогнозирование динамики валютного курса доллар/рубль на основе его декомпозиции на несколько случайных процессов
Введение
Данная работа посвящена задаче применения алгоритма SSA в задаче прогнозирования курса валютной пары доллар/рубль. В ней рассматривается, какие параметры и какая спецификация алгоритма наиболее подходит для максимально точного предсказания цены валюты в краткосрочном периоде, а также тестируется подход традиционных моделей машинного обучения к задаче предсказания временного ряда. Проведенное исследование показало, что при основательном анализе и правильно подобранной конфигурации SSA алгоритма возможно более точно предсказать курс валюты в ближайшем будущем. Это позволяет, в частности, получить бульшую прибыль в процессе торговли валютой на бирже. Полученные результаты могут быть использованы как для извлечения выгоды одним лицом, так и для улучшения финансовых показателей какой-либо фирмы в целом при планировании будущего.
В последнее время появляется все больше новых исследований, посвященных изучению динамики курса валют. Это вполне объяснимо - цена национальной валюты отражает конкурентоспособность государства в целом и, как следствие, благосостояние экономических агентов по отдельности. Вдобавок к этому, в последнее десятилетие значительное развитие наблюдается в области различных методов анализа данных и предсказательных моделей. В пример можно привести работы по теме предсказания стоимости продуктов [1] и [2]. Поэтому сейчас каждый агент, имеющий дело с предсказанием финансовых показателей, обязан идти в ногу со временем, ведь чем точнее расчеты, тем более актуальной является модель и тем больше пользы она принесет ее владельцу и обществу в целом.
Предсказание курса рубля к доллару, в свою очередь, является неоспоримо актуальной темой на сегодняшний день, поскольку за последние 25 лет эта величина изменилась более, чем в десять раз, причем не в лучшую для россиян сторону, что свидетельствует о важности умения предсказывать финансовое состояние государства с целью выбора наилучшей макроэкономической политики.
Как было сказано ранее, на тему предсказания стоимости валюты и предсказания стоимости ресурсов и товаров уже существуют работы. Тем не менее, мое исследование обладает новизной, которая заключается в следующем: во-первых, мое исследование посвящено именно цене доллара в рублях, в то время как в других работах были другие объекты исследования. Во-вторых, в работе предпринята попытка заменить традиционные модели, предназначенные для работы с временными рядами, на модели работы с обычными данными, не привязанными ко времени.
Целью моей работы стояло построение модели на основе разложения временного ряда, отражающего цену доллара в рублях, на сумму нескольких составляющих, которая бы точнее предсказывала будущие значения.
В частности, чтобы достигнуть цели, были поставлены следующие задачи:
1) Исследовать данные и выбрать временной промежуток, максимально удовлетворяющий условиям, при которых можно было бы проводить дальнейшую работу;
2) Преобразовать данные в такой вид, где применение метода будет наиболее эффективным;
3) Применить алгоритм Single Spectrum Analysis для декомпозиции ряда на несколько процессов;
4) Сравнить метрики качества базовой модели и модели, построенной с учетом разложения процесса;
5) Определить торговую стратегию, которая принесет наибольшую прибыль для каждой из моделей и сравнить получившийся результат.
Для решения задач и реализации задуманного был использован язык программирования Python, а сама работа выполнена в Jupyter Notebook. Несмотря на то, что в работах по данной тематике широко распространен язык R, мой выбор пал именно на Python по нескольким причинам: во-первых, среда программирования Jupyter Notebook более удобна для работы с базами и таблицами данных, коих в моей работе достаточно. Во-вторых, в данном языке программирования спектр предсказательных моделей гораздо шире, так как большинство пакетов были разработаны именно для Python. В-третьих, упомянутая выше среда программирования представляется наиболее удобной с точки зрения наглядности представления данных в виде графиков, диаграмм, таблиц и т.д. Вдобавок к этому, у меня уже есть опыт работы в данной среде, что сокращает долю времени и усилий, потраченных на технические аспекты реализации идей, и позволяет сосредоточиться на основных задачах.
Работа состоит из пяти глав: в первой главе разбирается теоретическая часть алгоритма SSA, во второй главе идет описание данных, на которых ведется исследование, в третьей и четвертой главах описаны проведенные эксперименты и оценка качества моделей, а в последней главе описана эмпирическая проверка моделей, построенных ранее, с помощью алгоритма торговли при реальных ценах.
курс динамика прогнозирование
1.SSA-Algorithm
Single Spectrum Analysis -- метод анализа временных рядов, смысл которого -- разложить начальный ряд в сумму нескольких временных рядов, каждый из которых бы имел бы собственную структуру, более определенную и интуитивно понятную. Таким образом, каждый из получившихся рядов можно анализировать по отдельности, соответственно, анализ начального ряда заметно упрощается. Фундаментальной работой по методу SSA можно считать книгу Golyandina, et al [3], в которой определяется алгоритм со всеми его вариациями и показывается его практичность.
Сам алгоритм состоит из четырех шагов:
1) Взять начальный ряд , выбрать параметр , называемый длиной окна, присвоить и трансформировать ряд в матрицу с столбцами и строками, где столбец . Матрица будет ганкелевой, то есть элементы на побочных диагоналях будут равны, и будет выглядеть следующим образом:
2) Теперь необходимо построить SVD разложение получившейся матрицы : .[4] Пусть , , …, - собственные числа матрицы , упорядоченные по убыванию, а , , …, - система собственных векторов, соответствующих им. Определяем . Обозначим . Тогда получим, что , где - количество собственных значений. Тройку () называют сингулярной тройкой, и каждая такая тройка соответствует одной компоненте. При этом важно отметить следующие свойства: во-первых, все векторы ортогональны, во-вторых, собственные числа этих троек положительны по построению матрицы , а, в-третьих, их величины отражают «вклад» данной компоненты в начальный временной ряд: чем больше значение , тем меньше разница между начальным рядом и данной компонентой. [5]
3) Теперь необходимо сгруппировать матрицы таким образом, чтобы в одной группе находились «похожие» друг на друга матрицы, то есть имели максимальную корреляцию между собой или относились к одной группе - например, восходящий тренд или период определенной длины. Нюансы группировки матриц будут подробнее рассмотрены после описания шагов алгоритма. В итоге получатся матриц, сумма которых по-прежнему равна начальной.
4) После этого необходимо усреднить элементы на побочных диагоналях каждой из получившихся матриц. Усреднение происходит следующим образом: необходимо взять каждую побочную диагональ, взять среднее арифметическое элементов на ней и заменить все начальные значения на среднее арифметическое. Такая матрица будет ближайшей ганкелевой матрицей к начальной по квадратичной матричной норме. [6] Наконец, необходимо сделать преобразование, обратное к первому пункту, то есть превратить каждую из матриц в ряд, тогда сумма рядов будет очень близка к начальному ряду. Получится, что у нас есть ряд, который представлен в виде суммы нескольких рядов, каждый из которых имеет свое устройство.
Следует сказать, что алгоритм определен неоднозначно: во-первых, длину окна можно выбирать любую, в зависимости от потребностей задачи и интуиции, стоящей за разложением. В некоторых работах советуют выбирать примерно равным , где -- длина начального ряда. Во-вторых, алгоритм группировки, описанный в третьем пункте, тоже не может трактоваться единственным образом. Чем меньше разделимы две матрицы, тем больше смысла в их группировке в одно слагаемое, однако мерой разделимости могут служить различные метрики: взвешенная корреляция, косинусное расстояние и т.д. Еще один метод -- сравнить собственные значения соответствующих компонент. Если они находятся относительно близко друг к другу (или, по крайней мере, имеют один порядок), то вполне допустима группировка соответствующих членов. Возможна ситуация, когда , и тогда стадию группировки можно вообще пропустить. Заранее не угадаешь, какие должны быть параметры, чтобы модель дала наилучший результат, поэтому в своей работе я пробовал различные конфигурации данного алгоритма и по результатам предсказательной точности отбирал наилучшую. Также стоит отметить, что размер окна почти всегда совпадает с количеством собственных значений и, соответственно, компонент, что верно и для рассматриваемых далее данных. Как уже понятно из устройства алгоритма, он тесно связан с методом главных компонент: в каком-то смысле выделение тренда можно сравнить с выделением главной компоненты. Отличие состоит в том, что в методе главных компонент наши данные имеют высокую размерность, а в нашем случае данные в каком-то смысле уже является проекцией в одномерное пространство. [7]
Одна из работ Hassani [6] как раз изучает применение алгоритма SSA для разложения временного ряда на слагаемые и предсказания следующих членов ряда. Автор взял данные по случайным смертям в США в 1973 - 1978 гг. по месяцам и применил алгоритм SSA для его разложения на составляющие. После разложения, автор анализировал различные способы группировки слагаемых, в числе которых был анализ собственных значений, взаимные корреляции, а также графический анализ получившихся рядов. В конечном счете исследователь пришел к выводу, что наиболее верным решением будет сгруппировать полученные в результате разложения компоненты в три итоговых: тренд, периодическую составляющую и шум, предсказывать который бессмысленно. Далее автор построил предсказательную модель в предположении, что каждый следующий член ряда можно оценить как линейную комбинацию предыдущих с некоторыми коэффициентами, и результаты его предсказания на следующий год оказались точнее, чем результаты базовых моделей временных рядов.
2.Описание данных
Мне необходимо было получить данные о динамике курса валют, для этого я воспользовался сайтом, который предоставляет информацию о курсе доллар/рубль с заданной частотой. Для своих исследований было первоначально скачано 3 различных вида данных: ежеминутный, ежечасовой и ежедневный курсы. Данные выглядели следующим образом: в каждой строке находилась информация о времени начала периода, времени конца периода, цене на момент начала периода, цене на момент конца периода, максимальной цене в течение периода, минимальной цене в течение периода. Данные выглядели следующим образом:
Рисунок 2.1, начальный вид полученных данных
Для того, чтобы временной промежуток между соседними точками был одинаковый, составляем временной ряд из точек, соответствующих цене на начало периода.
Начальные исследования показали, что наиболее подходящими к моей задаче являлись данные по часовым изменениям. Данные по минутам не совсем подходят для работы, потому что они очень волатильны и шумны, имеют низкую автокорреляцию, и, как следствие, предсказательная точность оказывается низкой. Данные по дням пришлось отбросить, так как для того, чтобы собрать базу адекватного размера, пришлось скачать данные за несколько лет. Это плохо потому, что за такой промежуток произошло большое количество событий, которые повлияли на курс извне, соответственно, анализ самого временного ряда отошел на второй план из-за черных лебедей. Поэтому дальнейшие исследования я проводил на данных по часам. Однако я столкнулся со следующей проблемой: на выходных торги не проводятся, соответственно, между некоторыми соседними точками разница по времени составляет не 1 час, а почти 2 дня. Во избежание проблемы я сделал следующее: взял данные за 20 недель и разбил этот период на 20 частей, каждая из которых - это данные 120 точек, отражающие изменение цены на протяжении пятидневной недели, с понедельника по пятницу. Несмотря на то, что я старался избегать ситуаций, когда данные с разных недель попадают в один рассматриваемый период, для проверки торговой модели пришлось все же пренебречь тем фактом, что между некоторыми точками временной интервал был больше, чем между остальными.
Изначально были получены данные по самому курсу валюты, но я также работал с почасовыми доходностями, которые вычисляются следующим образом: обозначим рассматриваемый ряд . Чтобы получить доходность в точке , необходимо вычислить величину , она будет отражать то, насколько подорожала или подешевела валюта в процентной величине относительно текущего момента. Эта величина имеет смысл, так как на основе предсказаний доходности проще построить торговую стратегию, а переход к разностям позволяет избавиться от нестационарности. Далее мною было рассмотрено, как выглядит временной ряд в целом и описательные статистики и значения автокорреляций и частных автокорреляций в частности. Графики приведены ниже:
Рисунок 2.2, временной ряд курса доллар/рубль в рассматриваемом периоде
Рисунок 2.3, автокорреляция и частная автокорреляция временного ряда цены доллара в рублях
Рисунок 2.4, автокорреляция и частная автокорреляция временного ряда доходностей
Как можно видеть из приведенных графиков, в целом наблюдается нисходящий тренд, но это не должно быть помехой для работы алгоритма. А вот графики автокорреляций говорят о том, что все члены дальше первого уже не значимы, да и первый коэффициент очень близок к нулю. Это наводит на мысль о том, что выделить какой-то простой тренд или даже приблизить ряд авторегрессионной моделью будет сложно.
3.Применение алгоритма на начальных данных
В первую очередь, мной был реализован в Python алгоритм SSA, который по данному ряду и заданной длине окна строит его разложение в сумму рядов, пока без алгоритма группировки (в используемых выше терминах, если , соответственно, на втором шаге алгоритма ряд раскладывается сразу на нужные компоненты). Затем введен массив , содержащий числа, кратные 30, от 0 до 2370 включительно (0, 30, 60, …, 2370), а также варьируемый параметр , который для начала положен равным 29. Числа были выбраны именно таким образом, чтобы измерения, принадлежащие разным неделям, оказались в разных частях выборки, и не возникало случаев, когда мы предсказываем значение по данным с предыдущей недели. Для каждого числа из был взят ряд, начинающийся с этого числа длины , и проанализирован следующим образом: была предпринята попытка разложить его с помощью написанного алгоритма на 3 составляющие, которые, по моему предположению, соответствовали бы тренду, периоду и шуму, как в вышеописанной работе. Получилось всего 80 рядов, каждый из которых был разложен на 3 слагаемых.
Далее, для каждого ряда было сделано следующее: взята обычная модель , обучена на данных обычного ряда, то есть временном ряде длиной 29, а затем спрогнозирован тридцатый член. Такие же три модели были обучены на трех рядах - слагаемых, полученных в результате применения к ряду алгоритма SSA. Спецификация модели была выбрана в соответствии с анализом автокорреляционной и частной автокорреляционной функций. Затем для каждого из трех рядов были получены предсказания тридцатого члена и сложены. В результате получилось предсказание для их суммы, то есть для начального ряда. После выполнения данной операции было посчитано среднеквадратическое отклонение для прогноза по модели для начального ряда и по разложению. Получились примерно одинаковые величины.
Однако оказалось, что если в случае разложения брать сумму не всех трех предсказаний, а первых двух, то результат становится лучше. Это соответствует предположению о наличии непрогнозируемого шума в данных, который ушел в третью компоненту. После этого была поставлена под сомнение практичность выделения периодической части. Если в случае со смертями наличие периода было интуитивно связано с месяцами в году, то в случае с курсом валюты предпосылки этого были не так очевидны. Пример трех компонент для разложения одного из периодов длиной 60 приведен ниже:
Рисунок 3.1, пример разложения ряда на 3 компоненты
Заметно, что вторая компонента, которая должна отвечать за тренд, совсем на него не похожа. Для того, чтобы хоть как-то отследить данный момент, была рассмотрена средняя доходность в каждый из 24 часов суток. Оказалось, что данных недостаточно, чтобы отвергнуть гипотезу о том, что все эти числа имеют одинаковое распределение. После этого была повторена процедура сравнения предсказаний, только в случае разложения было уже две компоненты, соответствующие тренду и шуму, а в качестве предсказания взят лишь прогноз по тренду. И такой метод разложения действительно дал результат лучше. Если же в качестве предсказания брать прогноз суммы предсказаний тренда и шума, то результат получается почти такой же, как при предсказании без разложения. Таблица сравнения результатов по двум метрикам приведена ниже:
Таблица 1, сравнение методов прогнозирования временного ряда
Следующим шагом было написание алгоритма с шагом группировки. Однако, как уже было упомянуто, группировка не задается однозначно, даже если известно конечное число компонент, которое мы должны получить. Алгоритм был изменен таким образом, что стало возможным отдельно задавать длину окна и финальное количество компонент. Было реализовано два детерминированных алгоритма, которые позволяют осуществить стадию группировки:
Первый алгоритм основан на взаимной корреляции. Пусть после второго шага метода SSA получилось матриц, которые суммируются в исходную. Теперь, если применить диагональное усреднение к каждой матрице и «свернуть» ее в ряд, получится какой-то вектор (. После этого подсчитывается матричная корреляция между каждой парой векторов ( и ( по следующей формуле, которая, к слову, была использована и в других работах по данной тематике. Положим . Определим следующим образом:
Взвешенная корреляция между двумя матрицами определяется по формуле:
Соответственно, чем ближе данная величина к единице, тем менее разделимы два ряда, а если она близка к нулю, значит, ряды почти ортогональны и с большой вероятностью представляют разные компоненты.
После подсчета всех корреляций можно задать порог, по которому нужно группировать получившиеся матрицы, то есть если корреляция у пары выше порога, то мы эти две матрицы складываем и превращаем в одну, а если ниже, то оставляем все как есть. Данный подход плох тем, что по одному и тому же порогу для разных рядов матрицы сгруппируются в различное количество компонент. Поскольку моей целью было выделить именно две компоненты, алгоритм был немного модифицирован: после подсчета корреляций мы берем пару, имеющую наивысший коэффициент, и группируем их в одну матрицу, таким образом слагаемых становится на 1 меньше. Далее снова считаем попарные корреляции уже для нового ряда и снова группируем ту пару, где коэффициент оказался наибольшим. Эту процедуру повторяем, пока не остается ровно 2 компоненты, первая из которых представляет собой тренд, а вторая - шум.
Например, пусть изначально ряд был разложен на 12 компонент и получилась следующая таблица корреляции:
Рисунок 3.2, пример таблицы корреляций различных компонент
В таком случае необходимо объединить 7 и 8 компоненту, то есть заменить их на сумму. Затем снова построить таблицу корреляций и повторить процедуру.
Второй алгоритм основан на близости собственных значений. Согласно работе Alexandrov [8], наиболее практичный способ выделения тренда - это объединение компонент с наибольшими собственными значениями. Чтобы однозначно определить алгоритм, значения были упорядочены по убыванию, а затем выделено, между какой парой собственных значений разность логарифмов наибольшая. В этом месте необходимо провести черту и все компоненты с большими собственными числами отнести к тренду, а с меньшими -- к шуму.
В итоге оказалось 3 разных конфигурации алгоритма SSA - один без шага группировки и два с группировкой. Далее была повторена процедура прогнозирования для новых двух алгоритмов, причем с разными параметрами длины окна - от трех до двенадцати. Однако каждая из модификаций метода SSA с шагом группировки давала предсказательную точность хуже, чем без него при всевозможных значениях длины окна. На мой взгляд, падение качества может быть связано с тем, что в результате группировки тренд и шум каким-то образом перемешиваются, соответственно, алгоритму становится сложнее отделять их друг от друга. Следовательно, можно заключить, что с наилучшей стороны показал себя алгоритм SSA без группировки и с разложением на два слагаемых.
4.Применение алгоритма на ряде доходностей
После анализа начального ряда я перешел к работе с доходностями. Чтобы получить ряд доходностей, из начального ряда был вычтен ряд, сдвинутый на единицу влево, а получившаяся разность поделена на сдвинутый ряд. Сначала была предпринята попытка применить все те же алгоритмы предсказания, которые описаны в предыдущей главе. Тем не менее, в случае доходностей применение алгоритма никак не улучшало предсказательную точность модели. Тогда было решено провести анализ, схожий с анализом в работе моего руководителя [9]. Для этого я взял ряд, начинающийся в самой первой точке длины 50, а затем сдвигал его вправо на единицу и наблюдал за тем, как меняется разложение на две компоненты и соответствующие им собственные значения, параллельно визуализируя все преобразования. Сдвинув ряд на 100 единиц вправо, были проанализированы происходящие изменения, в частности, рассмотрены следующие параметры, введенные в работе Garashchuk [9]:
1) Среднее абсолютное смещение первой компоненты. Для периода и номера компоненты она определяется следующим образом:
2)
где - значение компоненты в период в точке ;
3) Разница собственных чисел, соответствующих первой и второй компоненте;
4) Корреляция Пирсона первой и второй компоненты (каждая компонента представлена вектором из 50 чисел).
Первые два параметра были нормированы от нуля до единицы, чтоб можно было построить график:
График 4.1, связь собственных значений, смещения и корреляции
Из графика видно, что эти три параметра связаны между собой. Например, корреляция высока там же, где высоко смещение, а в моменты, когда приходящие величины относительно малы по модулю, все три показателя ведут себя одинаково и почти не меняются. Рассмотрев пиковые точки графика, я обнаружил, что в этом месте две компоненты «меняются местами», что также совпадает с тем фактом, что пришедшее число -- большое по модулю относительно других точек. Наглядно это видно на графике разложения в переходе из 90-го периода в 91-ый:
Рисунок 4.1, разложение рядов на две компоненты в периоды 90-91
В периодах 12 - 15 тоже происходит смена компонент, и это тоже сопровождается прибытием большого по модулю члена, который, грубо говоря, нарушает текущий тренд. Однако в этом случае компоненты не сразу меняются местами, а делают это постепенно: сначала сближаются, а уже потом принимают иные значения.
Рисунок 4.2, разложение рядов на две компоненты в периоды 12-15
В целом, из графиков разложения визуально возникает впечатление, что из этих двух компонент нет одной доминирующей -- у обеих компонент порядок значений одинаковый. Это подтверждает тот факт, что собственные числа, соответствующие обеим компонентам, тоже отличаются не так сильно. Также при рассмотрении обеих компонент едва ли в голову приходит мысль, что одна из них по своему устройству проще другой или проще начального ряда. Тем не менее, есть и вещи, которые могут говорить о пользе разложения. Например, заметно, что в двух пиках абсолютного смещения, которые соответствуют появлению большого по модулю члена, собственные значения начинают меняться заранее.
По этой причине я все же попытался применить получившиеся величины для составления модели и сравнения качества предсказания с разложением и без него. Для этого был применен метод, схожий с методом авторов статьи Wang [10]. Были обучены две модели: в первой единственным регрессором являлось предыдущее число в ряду, а во второй добавлены три регрессора, описанные выше -- разность собственных значений, абсолютное смещение и корреляция двух компонент за предыдущий период. Обучив линейные регрессии и простое решающее дерево, был сделан вывод, что результаты в двух случаях не отличаются в случае регрессии, а в случае разрешающего дерева вторая модель еще и переобучается. Более сложные конструкции не были использованы в силу слишком маленькой выборки.
Из получившихся результатов можно сделать вывод о том, что SSA алгоритм не так эффективен, если мы имеем дело с рядом, где значения автокорреляций низкие, и зависимость каждого нового члена от предыдущего очень слабая, так как в этом случае тренда нет в целом, и весь ряд по своей структуре больше походит на шум.
5.Торговая стратегия
После изучения метода в целом и его сильных и слабых сторон в частности, я решил приступить к его проверке на практике, ведь если алгоритм хорош лишь на бумаге, то, значит, не так уж он и хорош. Для этого была использована симуляция торгов на бирже по предсказаниям алгоритма и сравнение результата со случаем торгов по модели без применения алгоритма, а также с базовой рыночной стратегией «купи и держи». Торги были воспроизведены следующим образом: рассмотрен начальный ряд курса доллар/рубль, начинающийся с первого члена длиной 50. Затем на первых 49 точках обучена модель , а последняя точка предсказана с ее помощью. После этого были проделаны аналогичные действия, но ряд из 50 элементов был предварительно разложен с помощью алгоритма SSA, и предсказана была лишь трендовая составляющая. Наконец, я сохранил три точки - предсказание с методом SSA, предсказание без него и реальное значение. Сдвинув ряд на единицу вправо, я повторил все то же самое и сохранил три новых значения.
Сдвиг был проделан 2000 раз, и получилась достаточная для оценки результатов выборка. После этого было необходимо сравнить некоторые метрики для получившихся предсказаний - среднеквадратическая ошибка и среднее абсолютное отклонение. Затем я перешел к доходностям, заменив все величины в датасете на процентный прирост относительно предыдущей точки, чтобы было удобно видеть величину ожидаемой доходности от сделки в данный период. Важно отметить, что рассмотренные торговые стратегии заключаются в том, чтобы получить прибыль в течение одного временного периода - иными словами, сделка заключается в текущий момент, а на следующей временной отсечке закрывается, вне зависимости от того, в какую сторону изменился курс. Никакие торги в долгосрочной перспективе не предполагаются, так как задача о предсказании следующих точек гораздо сложнее как в терминах сравнения алгоритмов, так и в терминах построения торговой модели.
Несомненно, в случае, когда мы хотим принять решение о том, покупать или продавать валюту, недостаточно оценивать лишь абсолютные отклонения, важным критерием является то, насколько хорошо мы угадываем знак числа: лучше предсказать , чем , если реальное значение равно , так как мы угадаем знак и будем торговать в нужную сторону, несмотря на то, что абсолютная ошибка будет больше. Поэтому была рассмотрена та часть выборки, где прирост ненулевой, чтобы можно было выделить два класса - положительная доходность и отрицательная. После этого были рассмотрены еще две метрики - и , которые отражают то, насколько хорошо модель классифицирует знак величины доходности. Результаты сравнения предсказаний доходности обычной модели и модели с разложением на тренд и шум приведены в таблице ниже:
Таблица 5.1, сравнение качества моделей с применением SSA и без
Несмотря на то, что ошибки самой регрессии у двух моделей отличаются не так сильно, видно, что метрики классификации все-таки выставляют модель с SSA в лучшем свете относительно базовой модели.
Закончив работать с абсолютными величинами, я обратился к ряду доходностей и по такому же принципу обучал две модели - с разложением и без - а затем оценивал получившиеся результаты на той же выборке. Единственное отличие от предыдущего случая заключается в том, что для модели с разложением на два ряда предсказание подсчитывалось как сумма предсказаний по двум компонентам, а не по одной, так как в случае доходностей алгоритм не выделяет тренд и шум явно, а просто раскладывает ряд на две составляющие. Теперь появилась возможность сравнить предыдущие результаты с моделью, примененной к доходностям:
Таблица 5.2, сравнение качества моделей на доходностях и на абсолютных величинах
Несмотря на то, что ошибки регрессии у базовой модели на доходностях меньше, классифицирует она хуже, чем обе модели на абсолютных величинах. Модель на доходностях с SSA проявила себя хуже всего, метрики классификации оказались даже ниже .
После оценки качества моделей встал вопрос о составлении наиболее оптимальной торговой стратегии. Главный критерий успешности модели - это высокая прибыль, но не стоит забывать, что при одинаковой прибыли лучше та модель, которая имеет наименьший разброс, то есть, где меньше сделок и меньше возможная просадка. Были отдельно рассмотрены модели для торговли «вверх», то есть покупки валюты, и для торговли «вниз», то есть для ее продажи. Считается, что в любой момент мы располагаем достаточным капиталом для сделки как в одну, так и в другую сторону, а прибыль от сделки совпадает с величиной доходности в данный период для сделок покупки и противоположна величине доходности для сделок продажи.
В работе приведены две базовых концепции, которые задают торговое правило. Первая из них заключается в том, чтобы заключать сделку каждый раз, когда предсказание доходности не равно нулю. Если предсказание положительно, то необходимо покупать валюту, а если отрицательно - продавать. Это торговое правило легко интерпретируемо и не требует дополнительных расчетов - можно сразу посчитать и изобразить полученную прибыль как для стратегии торговли «вверх», так и для стратегии торговли «вниз». Сначала посмотрим на результаты всех торговых стратегий при торговле «вверх». Стратегия «купи и держи» в данном случае интерпретируется так: в самом начале периода покупается и больше не продается до конца периода. Каждый раз баланс меняется на ту величину, какой была доходность в тот период. Важно подчеркнуть, что полученное значение не равно реальной доходности за весь период, так как каждый раз доходности складываются, а не перемножаются величины вида , где - доходность в -тый период, что является точным выражением для подсчета прибыли, но поскольку все доходности являются бесконечно малыми величинами, то и отличием финального результата можно пренебречь. Вот как выглядят накопленные доходности в данном случае:
График 5.1, результаты торговли "вверх" по предсказаниям четырех различных моделей без порогов
Наилучший результат, как и ожидалось, показала стратегия, основанная на предсказаниях модели на начальных величинах с разложением и предсказанием тренда, а оставшиеся три модели показали примерно одинаковый результат, который, к слову, все же оказался лучше дефолтной стратегии, но оно и не удивительно - в целом за весь период курс доллара падал. Также интересно, что стратегия, основанная на предсказаниях по доходностям с методом SSA, несмотря на значение метрик классификации ниже , не только принесла прибыль, но и показала результат лучше, чем без SSA.
Теперь посмотрим на такой же график при торговле «вниз»:
График 5.2, результаты торговли "вниз" по предсказаниям четырех различных моделей без порогов
Снова наилучшим образом показала себя стратегия, основанная на предсказаниях тренда после разложения начального ряда с алгоритмом SSA, и, как ни странно, снова стратегия, основанная на предсказании суммы после разложения доходностей, показала достойный результат.
Таблица 5.3, сравнение суммарной прибыли при торговле по предсказаниям четырех различных моделей
Модель |
Прибыль при торговле вверх |
Прибыль при торговле вниз |
Суммарная прибыль |
|
Базовая модель (абсолютные величины) |
||||
Модель с SSA (абсолютные величины) |
||||
Базовая модель (доходности) |
||||
Модель с SSA (доходности) |
Далее описан второй подход, придуманный мной -- он заключается в оптимизации некоторого параметра на одной части выборки и оценке результатов на другой части. Для начала введем определение максимальной просадки: пусть мы имеем ряд, где каждый член отображает нашу прибыль в каждый из периодов и, соответственно, либо положителен, либо отрицателен, в зависимости от того, угадали мы направление торгов или нет. Рассмотрим всевозможные периоды внутри этого ряда, то есть, всевозможные такие подпоследовательности , где , где -- длина всего рассматриваемого периода. Из всех таких периодов выберем тот, где суммарная прибыль минимальна. Модуль величины этой прибыли и будем называть максимальной просадкой. Поскольку необходимо каким-то образом оптимизировать как прибыль алгоритма, так и его стабильность, была введена величина «рациональность» [стратегии], которая равна отношению прибыли к максимальной просадке в течение всего периода торгов. Дробь прямо пропорциональна суммарной прибыли -- это соответствует здравому смыслу. Обратная пропорциональность просадке объясняется так: чем больше величина возможной просадки, тем меньшим количеством денег, меньшей частью от начального капитала мы можем рисковать, совершая сделки. Теперь торговое правило составлено так, что не нужно совершать сделку каждый раз, когда предсказанное число не равно нулю: для торговли «вверх» есть определенный порог - положительное число, смысл которого в следующем: если модель предсказала прибыльность выше этого порога, значит она достаточно уверена в том, что доходность будет положительная, и можно совершать сделку. Если же значение положительно, но ниже порога, то оставляем все как есть. Цель моего разбиения в том, чтоб на одной части подобрать порог, который максимизирует показатель рациональности, а на второй посмотреть на получившуюся прибыль. Весь период был разбит на две равных части - по 1000 точек в каждой. Затем составлен список различных порогов от нуля до 0.0002 с шагом 10^-6. Перебором по порогам был выбран тот, при котором на данной выборке показатель рациональности наилучший. Затем на второй части выборки была симулирована торговая стратегия «вверх», при которой сделка заключается, если предсказание больше отобранного порога. Эта процедура была проделана для четырех вышеописанных моделей и получились следующие результаты:
График 5.3, результаты торговли "вверх" по предсказаниям четырех различных моделей с порогами
Снова в лидерах по прибыли оказалась все та же модель, что и в прошлые разы, а вот метод применение метода SSA к ряду доходностей себя не оправдало.
Вот что получается при аналогичном подборе порога для торговли «вниз» на первой части и торговли на второй:
График 5.4, результаты торговли "вниз" по предсказаниям четырех различных моделей с порогами
Здесь по прибыли две стратегии сравнялись, но не стоит забывать, что оптимизация велась по параметру рациональности стратегии. Даже на графике видно, что черная линия шла резко вниз примерно с двухсотого по четырехсотый периоды. Рациональности стратегий получились следующими:
Таблица 5.4, сравнение рациональностей четырех различных торговых стратегий
Можно заключить, что снова лучше всего себя проявила торговая стратегия, основанная на предсказаниях модели по абсолютным величинам. Но необходимо подчеркнуть один недостаток этого метода: результат сильно зависит от разбиения. Из графика 2 видно, что модель на доходностях, примененная к разложенному ряду, гораздо лучше демонстрирует себя на первой части всего периода, чем на второй.
Возможно, если бы, наоборот, пороги подбирались на второй части, а симуляция проходила на первой, результат бы сильно изменился. Поэтому, на мой взгляд, вернее будет считать результаты первой конфигурации торговой стратегии индикатором успешности.
Подводя итог, имеет смысл обозначить, что преимущество метода SSA оказалось, пожалуй, еще сильнее, чем ожидалось после первичного анализа и сравнения метрик качества: в обоих конфигурациях применение алгоритма к начальному временному ряду дало потрясающий результат: при обычной торговле по знаку предсказания прибыль оказалась в два раза выше, чем у остальных стратегий.
Не стал открытием и тот факт, что при работе с доходностями метод оказался менее эффективен и результаты торговли не сильно отличались от результатов при традиционном анализе временного ряда.
Заключение
В результате своей работы мне удалось изучить теоретические свойства SSA алгоритма, после чего приступить к его применению на практике. Мной была проведена работа с данными по курсу доллар/рубль и тщательно проанализировано применение алгоритма к данным и выделение наиболее удачной спецификации для каждого случая. При работе с начальными данными было успешно получено разложение ряда на тренд и шум, при работе с рядом доходностей были выявлены нюансы разложения ряда на две компоненты, а также выделена взаимосвязь величин, фигурирующих в процессе разложения. Было продемонстрировано, что метод наиболее эффективен в случае начальных величин, что полностью соответствует теоретическим представлениям.
После этого была проведена эмпирическая проверка моделей и построены несколько торговых стратегий, позволяющие значительно увеличить доход от торговых операций путем устранения шума и более точному определению знака доходности и ее величины в целом. Конечно, созданные модели недостаточно сильны для того, чтобы прямо сейчас начинать их использование на торговых площадках, так как из-за комиссионных сборов прибыль упадет, но, на мой взгляд, для такого вида данных, которые были в распоряжении, полученные результаты смело можно назвать успешными.
Таким образом, все поставленные задачи были выполнены и основная цель работы достигнута. Хочется отметить, что выбор языка и среды программирования благоприятно повлиял на достижение результата: удалось избежать технических проблем и наглядно визуализировать все, что было необходимо.
Дальнейшее развитие может идти в сторону улучшения предсказательной точности, а именно предсказания не одного члена ряда, а нескольких, так как в своей работе я ставил целью как можно точнее сделать прогноз именно в краткосрочном периоде. В случае же предсказания сразу нескольких точек, при построении торговых стратегий можно учитывать комиссионный сбор и пытаться заключать сделки, которые ориентированы на прибыль в долгосрочном периоде.
Список литературы
1.Aguiar-Conraria L., Soares M. J. Oil and the macroeconomy: using wavelets to analyze old issues //Empirical Economics. - 2011. - Т. 40. - №. 3. - С. 645-655
2.He K. et al. Multivariate EMD-based modeling and forecasting of crude oil price //Sustainability. - 2016. - Т. 8. - №. 4. - С. 387.
3.Golyandina N., Nekrutkin V., Zhigljavsky A. A. Analysis of time series structure: SSA and related techniques. - CRC press, 2001.
4.Gantmakher F. R. The theory of matrices. - American Mathematical Soc., 1959. - Т. 131.
5.Claessen D., Groth A. A beginner's guide to SSA //CERES, Ecole Normale Supйrieure: Paris, France. - 2002.”
6.Hassani H. Singular spectrum analysis: methodology and comparison. - 2007.
7.Vitanov N. K., Sakai K., Dimitrova Z. I. SSA, PCA, TDPSC, ACFA: Useful combination of methods for analysis of short and nonstationary time series //Chaos, Solitons & Fractals. - 2008. - Т. 37. - №. 1. - С. 187-202.
8.Alexandrov T. A method of trend extraction using singular spectrum analysis //arXiv preprint arXiv:0804.3367. - 2008.
9.Garashchuk G. Forecasting Euro-Dollar Exchange Rate Using its Decomposition into Coupled Stochastic Flows //Modern Econometric Tools and Applications. - 2017. (unpublished)
10.Wang J., Li X. A combined neural network model for commodity price forecasting with SSA //Soft Computing. - 2018. - Т. 22. - №. 16. - С. 5323-5333.
Размещено на Allbest.ru
Подобные документы
Определение курса рубль-доллар, при условии, что инфляция доллара и рубля идет одновременно. Анализ эволюций курсов рубля за последние 11 лет. Задачи стабилизации финансовой системы России после дефолта и сопровождающего его падения курса рубль-доллар.
статья [195,5 K], добавлен 16.04.2015Влияние снижения курса рубля на реальный сектор экономики. Девальвация национальной валюты как способ борьбы с волатильностью потоков капитала. Факторы, влияющие на изменение курса рубля. Прогноз отношения рубля к евро и доллару, оценка влияния Олимпиады.
контрольная работа [15,4 K], добавлен 18.02.2014Теоретические основы формирования валютного курса. Сущность валютного курса как экономической категории. Факторы, влияющие на формирование валютного курса. Режим валютного курса, его эволюция в России. Методы государственного валютного регулирования.
курсовая работа [1,3 M], добавлен 06.12.2010Понятие и формы валютного курса, факторы, его определяющие, роль в развитии экономики. Специфика российской политики валютного курса. Обзор состояния внутреннего рынка. Спрос физических лиц на наличную иностранную валюту. Пропорции обмена денежных единиц.
курсовая работа [1,2 M], добавлен 08.04.2014Понятие валюты и валютных операций. Классификация валют. Понятие валютного курса. Классификация видов валютных курсов. Факторы, определяющие динамику валютного курса и механизм их влияния. Макроэкономические последствия колебаний валютного курса.
контрольная работа [38,9 K], добавлен 04.01.2009История валютной пары евро-доллар. Спектральный анализ: сущность, цели, задачи. Спектральный анализ динамики кросс-курса EUR/USD с применением экспоненциального сглаживания в пакете Statistica 6.1. Построение гистограммы значений спектральной плотности.
курсовая работа [1,9 M], добавлен 28.12.2012Понятие и основные причины изменения валютного курса, влияние конъюнктурных и структурных (долгосрочных) факторов на его динамику. Политика валютного регулирования в период валютно-финансового кризиса в Украине. Негативные последствия валютного коридора.
контрольная работа [27,0 K], добавлен 17.10.2012Национальная валюта как главный элемент валютной системы страны, используемая система обменного курса. Виды валютного курса и понятие обменного курса. Валютная политика и государственное регулирование валютного курса, его динамика в Республике Беларусь.
курсовая работа [647,0 K], добавлен 25.03.2012Международный денежный товар. Валюта. Виды валют. Валютный курс. Определение и классификация. Факторы, влияющие на величину валютного курса. Регулирование величины валютного курса. Валютные рынки и валютные операции.
курсовая работа [87,0 K], добавлен 31.05.2007Валютный курс рубля как важнейший показатель экономического развития Российской Федерации. Исследование современного состояния и тенденций развития валютного рынка. Анализ динамики курса национальной валюты по отношению к валютам стран мировых партнеров.
реферат [408,2 K], добавлен 19.12.2014