Я рассчитал распределение изменений цены акций (дифф). Имеются ввиду мультипликативны изменения (diff), во сколько раз меняется цена акции за каждый день, d(t) = p(t) / p(t-1)
Насколько я знаю, распределение должно выглядеть как распределение по Power law (распределение Парето). С CDF, являющейся линией на графике log-log.
Но CDF который я получил не похож на линию на графике log-log. Почему?
Mожет ли это быть вызвано тем, что распределение имеет два хвоста вместо одного? Поскольку имеются два редких событий: редкие огромные ежедневные падения цен с d <0,7 и редкие огромные ежедневные повышения цен d > 1,4
Насколько мне известно, линейный тест распределения парето на логлог графике используется для распределений с одним хвостом. Как например распределение богатства у людей. Можно ли его также использовать для распределения с двумя хвостами?
Ежедневные цены на 4 акции за пару лет, нормированные на 1 за первый день.
Для анализа будем использовать данные ETF c базовой валютой USD: FXCN, FXRL, FXIT, FXUS и FXRU. Временной ряд рассмотрим за три года с 2018 по 2020 года. Само исследование проведем в Google Colaboratory.
Как обычно в начале импортируем все необходимые библиотеки для дальнейшей работы.
import pandas as pd import numpy as np import matplotlib.pyplot as plt from google.colab import files import warnings warnings.filterwarnings("ignore")Сначала необходимо получить данные. Есть несколько способов. Мы воспользовались — взяли их с Finam в формате csv. Дальше написал функцию для обработки полученных данных и при помощи concat свел их в один датафрейм.
def changeDF(df): df['date'] = pd.to_datetime(df['<DATE>'].astype(str), dayfirst=True) name =[x for x in globals() if globals()[x] is df][0] df = df.drop(['<DATE>','<TIME>', '<OPEN>', '<HIGH>', '<LOW>'], axis=1) df = df.set_index(['date']) df.columns = [name+'_cl', name + '_vol'] return df fxgd_change = changeDF(fxgd) fxrl_change = changeDF(fxrl) fxit_change = changeDF(fxit) fxus_change = changeDF(fxus) fxru_change = changeDF(fxru) fxcn_change = changeDF(fxcn) etf = pd.concat([fxgd_change, fxrl_change, fxit_change, fxus_change, fxru_change, fxcn_change], axis=1) etf.head()В результате получили: