Как ученый, имеющий опыт работы в области количественных финансов, я всегда был заинтересован в изучении возможностей, связанных с сочетанием двух областей науки. Я думаю, что это интересная область для изучения, и поэтому я хотел бы начать серию статей, описывающих основы количественных финансов.
К концу серии я намерен представить простую стратегию распределения активов и, надеюсь, продемонстрировать, что, используя науку о данных/количественные финансы, можно превзойти базовые эталонные стратегии. Конечно, никто не говорит о построении идеальной модели, точном прогнозировании будущих цен на акции и предоставлении нам - потенциальным инвесторам - возможности зарабатывать миллионы.
Существует теория, объясняющая, почему это невозможно, а именно гипотеза эффективного рынка (EMH). В ней говорится, что цены на активы полностью отражают всю доступную информацию. Это означает, что просто невозможно последовательно побеждать рынок, поскольку рыночные цены реагируют только на новую информацию. Вы можете прочитать больше об этом здесь. Но мы все еще можем поиграть и посмотреть, можно ли, в краткосрочной перспективе, заработать немного денег, по крайней мере, теоретически :)
Прежде чем перейти непосредственно к машинному обучению и построению стратегий распределения активов, я думаю, что крайне важно потратить некоторое время на основы и понять процессы, которые мы пытаемся смоделировать. В этой статье я рассмотрю стилизованные факты доходности активов и покажу, как проверить их существование с помощью Python. Некоторые элементарные знания статистики были бы полезны, но не отчаивайтесь, поскольку я попытаюсь интуитивно объяснить, что происходит.
Доходности и почему мы работаем с ними
Я начну с загрузки исторических цен на акции с помощью библиотеки Python Quandl. Это довольно просто, и вам нужно всего лишь создать бесплатную учетную запись, чтобы получить ключ API.
В этой статье я работаю со скорректированными ценами закрытия, поскольку они учитывают возможные корпоративные действия, такие как дробление акций и т. д.
Я выбираю Microsoft (тикер: MSFT) в качестве примера и загружаю временные ряды в виде фрейма данных pandas. Затем я преобразую цены в логарифмическую доходность для дальнейшего анализа:
где P_t обозначает цену актива в момент времени t, а функция log обозначает натуральный логарифм (иногда его называют ln).
import
quandl
# authentication ----
quandl_key
=
'key'
# paste your own API key here :)
quandl.ApiConfig.api_key
=
quandl_key
df
=
quandl.get(
'WIKI/MSFT'
, start_date
=
"2000-01-01"
, end_date
=
"2017-12-31"
)
df
=
df.loc[:, [
'Adj. Close'
]]
df.columns
=
[
'adj_close'
]
# create simple and log returns, multiplied by 100 for convenience
df[
'simple_rtn'
]
=
100
*
df.adj_close.pct_change()
df[
'log_rtn'
]
=
100
*
(np.log(df.adj_close)
-
np.log(df.adj_close.shift(
1
)))
# dropping NA's in the first row
df.dropna(how
=
'any'
, inplace
=
True
)
df.head()
Есть отличная статья, описывающая разницу между простыми и логарифмическим доходностями, так что там вы можете узнать плюсы и минусы их использования.
Но зачем работать с доходностями, когда у нас уже есть цены? Причина в том, что цены обычно нестационарны, то есть их статистические показатели, такие как среднее значение и дисперсия, изменяется со временем. Это также может означать наличие некоторых тенденций или сезонности в наших ценовых рядах. Работая с доходностями, мы делаем временной ряд стационарным, что является желательным свойством для статистического моделирования. А пока давайте оставим это так.
Разложение временных рядов на трендовые/сезонные составляющие.
Ниже я представляю эволюцию цен и доходностей Microsoft с течением времени.
Одним из важных фактов, которые непосредственно наблюдаются на графиках, является наличие «кластеризации волатильности» - периоды большой доходности чередуются с периодами с небольшой доходностью, что свидетельствует о том, что волатильность не постоянна. Я вернусь к этому позже.
Стилизованные факты - это, вообще говоря, статистические свойства, которые, как представляется, присутствуют во многих эмпирических доходностях от активов (по времени и рынкам). Важно знать о них, потому что при построении моделей, которые должны представлять динамику цен на активы, модели должны иметь возможность собирать/копировать эти свойства.
Факт 1: распределение доходов не является нормальным
Стандартное нормальное (гауссовское) распределение
Было замечено, что доходности имеют:
- Отрицательную асимметрия (третий момент): большие отрицательные доходности возникают чаще, чем большие положительные. Визуально: левый хвост длиннее; масса распределения сосредоточена на правой стороне участка распределения.
- Избыточный эксцесс (четвертый момент): большие (и маленькие) доходности имеют место чаще, чем ожидалось. Визуально: жирные хвосты и острый центр.
Ниже я показываю гистограмму, визуализирующую распределение логарифмической доходности Microsoft, вместе с линией, представляющей кривую плотности нормальной вероятности (со средним и стандартным отклонением, равным среднему для выборки). Мы видим, что доходность демонстрирует более высокий пик, а также больше массы находится в хвостах (чем можно было ожидать для нормального распределения).
Для дальнейшей проверки я также смотрю на график Q-Q Plot. Красная линия представляет стандартное нормальное распределение. В случае, когда доходности следуют за распределением Гаусса, эти две линии будут совпадать. Тем не менее, мы видим, что есть различия, в основном в хвостах. Это еще раз подтверждает вышеупомянутые выводы.
Наконец, я смотрю на описательную статистику рассматриваемой доходности (они представлены в виде ежедневных значений, на практике принято представлять их в годовом исчислении). Тест нормальности Жарка-Бера подтверждает наши подозрения, причем значение p достаточно мало, чтобы отвергнуть нулевую гипотезу о том, что данные соответствуют гауссовскому распределению.
Факт 2: в доходностях нет (или почти нет) существенной автокорреляции
Автокорреляция измеряет степень сходства между заданным временным рядом и запаздывающей версией того же ряда за последовательные промежутки времени. Это аналогично корреляции между двумя временными рядами: первый в исходном виде и второй с отставанием на n периодов.
Пример: когда доходность определенного актива демонстрирует исторически положительную автокорреляцию, и в последние несколько дней цена росла, разумно ожидать дальнейших положительных изменений (конечно, прогнозировать цены на акции не так просто, иначе стать миллионером было бы довольно легкая задача… ).
Факт 3: небольшая и медленно уменьшающаяся автокорреляция в квадратичных и абсолютных значениях доходностей
При моделировании доходности учет волатильности может иметь первостепенное значение в процессе принятия решений (покупка/продажа). Волатильность обычно понимается как стандартное отклонение (квадратный корень дисперсии) доходностей.
Пока вместо доходностей рассмотрим ошибки, то есть фактические значения минус значения, прогнозируемые/объясняемые какой-либо моделью. Дисперсия - это среднее значение квадратов ошибок, а абсолютное отклонение - среднее абсолютных ошибок. Изобразив квадратичные/абсолютные ошибки во времени, мы увидим, постоянна ли дисперсия (или абсолютное отклонение, которое также является показателем волатильности) во времени. В случае доходности активов это не так, и мы можем наблюдать периоды высокой/низкой волатильности. Это называется «кластеризация волатильности» и может наблюдаться на графике временных рядов логарифмических доходностей.
С другой стороны, ожидается, что среднее значение краткосрочной (дневной) доходности в долгосрочной перспективе будет равно нулю (EMH). Вот почему, глядя на квадрат и абсолютную доходность, мы эффективно измеряем отклонение от ожидаемого среднего значения, не глядя на направление ошибки - и квадраты, и модули убирают направление ошибки.
Ниже я представляю графики автокорреляции для логарифмической доходности MSTF вместе с квадратом и абсолютными значениями (с проверкой фактов 2 и 3). Синяя область показывает 95% доверительный интервал, точки за его пределами статистически значимы. Мы видим, что для логарифмических доходностей есть только несколько существенных точек (что соответствует факту 2). Что касается факта 3, мы видим, что корреляции являются значительными, и их уменьшение легче наблюдать для квадратичной доходности, чем в случае абсолютного значения доходности. Подводя итог, это заставляет нас думать, что мы можем попытаться использовать автокорреляционную структуру для моделирования волатильности.
Заключение
В этой статье я представил краткое введение в стилизованные факты доходности активов. Конечно, это едва затрагивает нашу тему. Еще много чего нужно узнать, и различные ресурсы также добавляют дополнительные стилизованные факты. Если вам интересно, я добавлю несколько дополнительных ресурсов в ссылки.
Важно отметить, что нет никакой гарантии, что все факты будут четко прослеживаться в каждой серии доходностей. На это может легко повлиять временной интервал, учитываемый при анализе. Для этого случая я беру данные с 2000 года. Но строгого правила для этого нет. С помощью предоставленного кода вы можете легко исследовать различные временные горизонты и активы.
Сделав введение, в следующей статье я представлю некоторые распространенные методы прогнозирования доходности активов (и, возможно, их волатильности). В заключительной статье я попытаюсь показать, что с помощью (более или менее точных) прогнозов мы можем попытаться выстроить стратегии распределения активов и выяснить, могли бы мы (исторически) заработать немного денег!
Код, используемый для исследования стилизованных фактов, можно найти в GitHub.
Ссылки:
Комментариев нет:
Отправить комментарий