Аналіз класу нестаціонарних процесів зі стаціонарними приростами на фондових ринках

Мета даної статті — поділитися результатами дослідження по виявленню структури в значеннях цін акцій, які торгуються на Московській Біржі і на NYSE, методом їх перевірки на стаціонарність за допомогою тесту Дікі-Фуллера.

Є невеликий клас акцій, який представляє собою нестаціонарний процес зі стаціонарними приростами і розподіл t-статистики якого веде себе досить цікавим чином, а саме не прагне до стандартного нормального розподілу при збільшенні кількості спостережень. Як такі акції виявляти?

Збір даних

Перша річ, яка нам потрібно — це список токарів, якими реально можна торгувати через одного з брокерів. Тікер — це коротка назва в біржовій інформації котируються інструментів (в даному випадку, акцій). Я почну з російського фондового ринку. У нас найпопулярніша біржа — московська, тому поговоримо про неї.

У якийсь момент свого життя я пішла в офлайн і уклала договір зі Сбербанком брокерського обслуговування. При такому розкладі список токарів можна отримати досить просто. Досить завантажити систему QUIK, замовити потік котирувань для акцій:
image
потім вивести їх на вкладку Торгівля і зберегти таблицю в файл. Всього виходить 296 токарів. Якщо не дуже хочеться влаштовувати собі квест, то список токарів можна знайти у розділі Приклади даних на сайті Московської біржі. Єдине, можливо, цей перелік застарів.

Друга річ, яка нам потрібна, — це дані про ціни акцій. Скільки їх потрібно для складання адекватної картини ринку і за який саме проміжок їх брати — це предмет суперечок. Технічне обмеження, з якими ми зіткнемося далі — це мінімум 10 значень для кожної акції.

Мені захотілося по отриманим раніше тикерам взяти дані про ціни закриття акцій за 2016 рік (252 торгові дні), але можна брати дані і за менший проміжок, можна взагалі проводити дослідження всередині дня. За великим рахунком, нам зараз не так важливо, які саме дані ми візьмемо. Єдине, якщо ми підемо на Московську Біржу і запитаємо у неї архівні дані за 2016 рік, то вона нам скаже, що за все це потрібно заплатити 32 400 рублів (раніше, до речі, дані коштували ще дорожче). Я з шкідливості написала парсер.

Насправді, набагато швидше дістати дані з фінама або з Yahoo Finance, але чомусь це не так весело. Я в свій час навіть зв'язалася з керівником групи інформаційного аудиту і запитала, чи можу я парсити їх сайт для наукових досліджень. Мені дозволили.

[Тут було багато букв і коду про парсер, але я все видалила, бо це, напевно, не дуже цікаво. Якщо я помиляюся, пишіть, — опублікую парсер окремою статтею.]

У мене вийшло зібрати дані для 289 акцій (інших даних не було). Для зручності курси та ціни були збережені в базі даних Microsoft SQL Server. Тепер перейде до математики.

Про стаціонарність

Якщо говорити про стаціонарність без будь-яких формул і складних понять, то сенс в тому, що стаціонарний ряд не змінює з часом свої характеристики, такі як очікування, дисперсії і коваріації.

Ціну акції можна розглядати як авторегрессионный процес близько 1:
y_{t} = \phi y_{t-1}+\varepsilon_{t},
де \phi— параметр моделі, \varepsilon_{t} \sim iid(0,\sigma^2)— білий шум, t=1,...,n. Такий процес є стаціонарним за умови |\phi|<1.

Припустимо, у нас є ціни акції за 252 торгові дні. Як нам за наявними спостереженнями визначити, чи є такий авторегрессионный процес стаціонарним чи ні? Необхідно провести стандартну процедуру тестування гіпотези H_0: \phi = 1(тобто процес не стаціонарний) проти альтернативної гіпотези H_1: \phi < 1(тобто процес стаціонарний).

Про розподіл Дікі-Фуллера

Насправді, з тестуванням гіпотези не все так просто, тому що якщо істинне значення \phi = 1, t-статистика не розподілена за законом Стьюдента та її розподіл не прагне до стандартного нормального при збільшенні кількості спостережень. В такому випадку ми не можемо просто взяти таблиці критичних значень Стьюдента і перевірити по ній гіпотезу.

Під t-статистикою тут розуміється відношення відхилення оцінки параметра авторегрессионной моделі від його істинного значення до стандартної помилки оцінки коефіцієнта:
t = \frac{\hat{\phi} - \phi}{s_{\hat{\phi}}},
де \hat{\phi}— оцінка параметра авторегрессионной моделі (1), s_{\hat{\phi}}— стандартна помилка оцінки \hat{\phi}. Оцінка коефіцієнта \hat{\phi}в альтернативній моделі може виконуватися за допомогою звичайного методу найменших квадратів (МНК).

Вперше про те, що з t-статистикою не все нормально, розпочав у 1976 році говорити Уейн Фуллер. Потім у 1979 році вони разом з Девідом Дікі написали цікаву статтю під назвою «Distribution of the Estimators for Авторегресії Time Series with a Unit Root».

На тверезу голову розібрати її майже неможливо, але саме там вони представили розподіл t-статистики за умови \phi = 1, тобто при t = \frac{\hat{\phi} - 1}{s_{\hat{\phi}}}(яке отримало назву статистики Дікі-Фуллера), для рівняння (1) і двох його модифікацій:
y_{t} = a + \phi y_{t-1}+\varepsilon_{t},
y_{t} = a + \phi y_{t-1}+ct+\varepsilon_{t}.

Для рівняння (1) розподіл Дікі-Фуллера має вигляд:
\lim t_1 = \frac{W^2(1)-1}{2\sqrt{\int_{0}^{1}W^2(s)ds}},
де t_1— t-статистика для процесу (1), W(s)— стандартний винеровский процес.

Критичні значення статистики Дікі-Фуллера наведені в книзі Фуллера «Introduction to Statistical Time Series». Таким чином, для перевірки авторегресивного процесу на стаціонарність необхідно використовувати стандартну процедуру тестування гіпотези з тією відмінністю, що замість таблиці критичних значень для розподілу Стьюдента необхідно використовувати таблицю критичний значень для розподілу Дікі-Фуллера.

Також важливо відзначити, що рівняння (1), (2) і (3) можна переписати у вигляді:
y_{t} - y_{t-1} = \phi y_{t-1} - y_{t-1}+\varepsilon_{t},
\Delta y_{t} = (\phi - 1) y_{t-1} +\varepsilon_{t},
\Delta y_{t} = \beta y_{t-1} +\varepsilon_{t},
y_{t} - y_{t-1} = a + \phi y_{t-1} - y_{t-1}+\varepsilon_{t},
\Delta y_{t} = a + (\phi - 1) y_{t-1} +\varepsilon_{t},
\Delta y_{t} = a + \beta y_{t-1} +\varepsilon_{t},
y_{t} - y_{t-1} = a + \phi y_{t-1} - y_{t-1}+ ct +\varepsilon_{t},
\Delta y_{t} = a + (\phi - 1) y_{t-1}+ ct +\varepsilon_{t},
\Delta y_{t} = a + \beta y_{t-1}+ ct +\varepsilon_{t},
де \Delta y_{t} = y_{t} - y_{t-1}\beta = \phi - 1. Процеси (4), (5) і (6) можуть бути оцінені і протестовані при \beta = 0аналогічно тестування гіпотези при \phi = 1. Отже, статистика Дікі-Фуллера дозволяє здійснювати перевірку на стаціонарність не тільки самого процесу, але і його різниць першого порядку.

Про тест Дікі-Фуллера

Тест Дікі-Фуллера є у всіх стандартних пакетах, тому ми можемо перевірити ціни акцій, отримані на етапі збору даних, на стаціонарність, наприклад, MATLAB. Нижче наведено код, в якому встановлюється з'єднання з базою даних Microsoft SQL Server (де зберігаються значення цін акцій та тікери) і створюються два масиву. Перший — безпосередньо для цін, другий — тільки для тих токарів, для яких є дані про ціни:
conn = database.ODBCConnection('uXXXXXX.mssql.masterhost.ru', 'uXXXXXX', 'XXXXXXXXXX');
curs = exec(conn, 'SELECT ALL PriceId, StockId, Date, Price FROM StockPrices');
curs = fetch(curs);
data = curs.Data
idsArr = unique(cell2mat(data(:,2)));
sqlquery = 'SELECT ALL StockId, ShortName, Code FROM Stocks WHERE StockId IN (';
for i=1:length(idsArr)
if i==length(idsArr)
sqlquery = strcat(sqlquery,int2str(idsArr(i)),')');
else
sqlquery = strcat(sqlquery,int2str(idsArr(i)),',');
end
end
curs = exec(conn, sqlquery);
curs = fetch(curs);
names = curs.Data
close(conn);


Тест Дікі-Фуллера виконується за допомогою функції adftest, який на вхід приймає одномірний часовий ряд, а на виході повертає логічне значення, рівне 1, якщо нульова гіпотеза відкидається на користь альтернативної, і 0 – інакше. Виконаємо тест Дікі-Фуллера при 5%-ному рівні значущості для моделі виду (1):
for i = 1:length(names)
% Indexes with current stock's data
indexes = find(cell2mat(data(:,2)) == cell2mat(names(i,1)));
isStat(i) = adftest(cell2mat(data(indexes,4)));
end
% Indexes with stationary stocks
stat = find(isStat == 1);


Програма 5 раз відкидає нульову гіпотезу на користь альтернативної моделі. Зобразимо ці часові ряди:
for i=1:length(stat)
indexes = find(cell2mat(data(:,2)) == cell2mat(names(stat(i),1)));
figure
plot(datetime(data(indexes,3)), cell2mat(data(indexes,4)))
legend(names(stat(i),3));
end


Подивимося на графік зміни ціни одного з акцій.

Тут видно, що часовий ряд ціни акції не є стаціонарним.

Побудуємо різниці першого порядку для даного тимчасового ряду.

Схоже, різниці першого порядку для тимчасового ряду ціни акції дійсно задовольняють умові стаціонарності.

Результати на NYSE

Ті ж самі дослідження були проведені і для американського фондового ринку, а саме для Нью-Йоркської фондової біржі. Список токарів було взято з сайту NASDAQ. Там на даний момент 2714 адекватних токарів. Дані про ціни були взяті з Yahoo Finance. Знайшлося 2647 токарів, для яких є дані про ціни акцій за 2016 рік, і в результаті тестування на стаціонарність вийшло 26 акцій зі стаціонарними приростами.

Висновки

На фондових ринках існує невелика кількість акцій, для яких зміна ціни є процесом зі стаціонарними приростами першого порядку. Наявність таких процесів дає ґрунт для подальших досліджень і стабільного отримання прибутку, але про це ми поговоримо наступного разу.

Що почитати по темі?

Магнус, Я. Р. Економетрика. Початковий курс / Я. Р. Магнус, П. К. Катишев, А. А. Пересецький. — М: Річ, 2004. — 576 с.

Це дуже хороший підручник з економетрики, нітрохи не гірше ніж буржуйський, і написаний нормально, так що можна розібратися.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.