Попытаемся привести ряд к стационарному виду. Для этого рассчитаем приращение цены. То есть разность между текущим и предыдущим барами.
- Код: выделить все
d['delta'] = d['median'].diff(1).fillna(0)
Как видите делается это довольно просто функций diff. Аргумент функции указывает смещение. Функция fillna заполняет значение, которое неопределенно указанным значением. В нашем случае будет неопределённо значение первой строки.
Проверим ряд на стационарность.
- Код: выделить все
statc(d['delta'].values)
Результат:
adf: -25.831260089702525
p-value: 0.0
Critical values: {'1%': -3.4308701300495503, '5%': -2.8617698717258855, '10%': -2.5668923557359618}
единичных корней нет, ряд стационарен
Как видим ряд стационарен. В ряде приращений есть вся информация о цене. А именно направление движения и изменение цены в пунктах.
Теперь наша задача разобраться с распределением. Построим график распределения.
- Код: выделить все
d['delta'].plot.kde()
Очень похоже на нормальное распределение. Нам важно знать является ли распределение нормальным или нет. От этого зависит какие методы статистики мы будем использовать. Есть параметрические и непараметрические методы. Для нормального распределения используются параметрические.
Всё-таки хочется быть уверенным нормальное ли это распределение. Поэтому проведем специальный тест на нормальность распределения.
- Код: выделить все
df=d[8000:]
isnorm(df['delta'].values)
Прежде всего мы выделили около 5 000 строк, так как тест на нормальное распределение работает максимум с 5 000 значений.
Результат:
Statistics= 0.9746578335762024
p-value:= 8.119633978689089e-28
Распределение не соответствует нормальному
Как видим распределение не соответствует нормальному, но график распределения очень похож на нормальное. Чтобы убедиться проведем ещё один графический тест. Построим график q-квантилей.
- Код: выделить все
qqgraf(d['delta'])
Синея, линия — это график значений. Как видим, они сильно отклоняются от прямой. Наклон прямой линии значительно меньше 45 градусов. Всё это свидетельствует, что распределение не является нормальным. Поэтому необходимо использовать непараметрические статистические методы.
Интересен показатель Хёрста для ряда приращений. Он равен 0.0016815081616938215. Что значительно меньше 0.5, а это свидетельствует о не случайности данных. То, что он меньше 0.5 свидетельствует о том, что направление движения цены часто меняется.
Не смотрите на анализ скользящей средней в коде. Это тупиковый ход. Так как возрастает p-value что не есть хорошо.
Продолжение следует.