Источник: расчёты автора
В таблице 2 выведены результаты оценки первичной модели для каждой из объясняемых переменных на указанном периоде. Цветом выделяются значимые коэффициенты. Проблем мультиколлинеарности или гомоскедастичности не наблюдалось. Все гипотезы проверяются на уровне значимости 5%. Как и предполагалось, для 3 из 6 наблюдаемых горизонтов периоды очень низкой волатильности (D1) имеют значимый положительный эффект на будущие доходности. Данная зависимость интерпретируется следующим образом: периоды высокой волатильности преимущественно предшествуют периодам спада на рынке, низкая волатильность - залог стабильности и роста. Так как, хотя периоды высокой волатильности (D19, например) также имеют значимое влияние на доходность, в терминах робастности или простого большинства данная зависимость выглядит относительно слабее (предпочтение отдаётся экстремально высоким/низким значениям индекса волатильности, затруднительно интерпретировать значения, лежащие между границами 90% и 95% перцентилей). Уменьшение скользящего окна для эмпирического распределения до 1 года не дало каких-либо существенных результатов относительно экстремальных значений, что может говорить об эффекте «долгосрочной памяти» игроков рынка: каждое значение является большим или маленьким относительно экстремумов более длительного периода.
В рамках торговых симуляций будет рассматриваться только периоды удержания длинной позиции в 20, 40 и 60 дней. Для сравнительного анализа будет рассмотрено несколько правил для входа (помимо горизонта сравнения по прошлым 100, 200 и 300 дням текущих значений индекса волатильности):
· открытие длинных позиций, если текущее значение индекса волатильности оказалось ниже 5% перцентиля распределения, построенного на соответствующем горизонте исторических данных (соответствие найденной зависимости по дамми-переменной, отвечающей за 5% перцентиль);
· открытие длинных позиций, если текущее значение индекса волатильности оказалось выше 90% перцентиля распределения, построенного на соответствующем горизонте исторических данных (соответствие найденной зависимости по дамми-переменной, отвечающей за интервал 90-95% перцентиль).
В качестве комиссионного сбора будет учитываться 0,01% от объёма сделки согласно текущим тарифам Московский биржи в рамках торговли акциям на фондовом рынке.
После выбора оптимальной ARMA-GARCH моделей для каждого из процессов были сгенерированы 1000 выборок. Для каждой из выборок и оригинальных временных рядов (в целях робастности получаемых результатов) была применена каждая указанная спецификация торгового алгоритма. В таблице 3 представлены результаты применения процедуры.
Таблица 3. Результаты торговых симуляций согласно указанной процедуре и торговой стратегии.
|
Торговая логика |
Скользящее окно для перцентиля |
Период удержания позиции |
Количество сделок |
Бенчмарк |
Результат |
P-value |
|
|
< 5% |
100 |
20 |
19 |
-253.8 |
13.92 |
52% |
|
|
< 5% |
100 |
40 |
13 |
-253.8 |
25.54 |
44% |
|
|
< 5% |
100 |
60 |
10 |
-253.8 |
175.32 |
3% |
|
|
< 5% |
200 |
20 |
20 |
21.25 |
124.12 |
11% |
|
|
< 5% |
200 |
40 |
13 |
21.25 |
-275.59 |
100% |
|
|
< 5% |
200 |
60 |
10 |
21.25 |
75.11 |
22% |
|
|
< 5% |
300 |
20 |
18 |
206.58 |
31.80 |
43% |
|
|
< 5% |
300 |
40 |
12 |
206.58 |
7.33 |
53% |
|
|
< 5% |
300 |
60 |
9 |
206.58 |
120.31 |
9% |
|
|
> 90% |
100 |
20 |
15 |
-253.8 |
260.35 |
0% |
|
|
> 90% |
100 |
40 |
11 |
-253.8 |
445.22 |
0% |
|
|
> 90% |
100 |
60 |
8 |
-253.8 |
48.18 |
33% |
|
|
> 90% |
200 |
20 |
12 |
21.25 |
60.43 |
29% |
|
|
> 90% |
200 |
40 |
7 |
21.25 |
124.61 |
8% |
|
|
> 90% |
200 |
60 |
7 |
21.25 |
136.34 |
5% |
|
|
> 90% |
300 |
20 |
7 |
206.58 |
-182.98 |
99% |
|
|
> 90% |
300 |
40 |
4 |
206.58 |
-218.61 |
99% |
|
|
> 90% |
300 |
60 |
3 |
206.58 |
-265.43 |
100% |
Источник: расчёты автора
Цветом выделены значимые результаты на уровне значимости 10%. Как видно, наиболее значимые результаты показывает второе торговое правило, построенное на основе дамми-переменных D19 и D20. Наиболее значимым горизонтом удержания длинной открытой позиции является 40 дней. Таким образом, основываясь на полученных оценках, наиболее выгодным правилом с точки зрения финансовой выгоды можно считать следующее утверждение: если текущее значение индекса волатильности превысило 90% перцентиль эмпирического распределения, построенного на горизонте 100 или 200 дней, то потенциально это хороший сигнал для входа, так как рынок перепродан. Для такого сигнала оптимальный период сделки - 40 дней. Отдельно стоит заметить, что данные результаты подвержены определённым особенностям. Во-первых, за рассматриваемый период рынок характеризуется сильным бычьим трендом (большая часть периода), что потенциально говорит о периодах высокой волатильности, как о периодах пертурбаций на рынке, установке новой цены. Во-вторых, результат торговых симуляций не учитывает денежный поток с moneymarket, который может увеличить значимость большинства метрик. В-третьих, основной задачей данной процедуры является выделение финансово выгодного вне модельного торгового правила, которое может быть в дальнейшем применено в рамках других торговых стратегий, например, усилить или отсеять торговые сигналы по торговому алгоритму. Таким образом, задачи рискованности и в целом риск-менеджмент является в такой постановке задачей отдельной стратегии, а не торгового правила: есть зависимость на основе первичной модели, торговые симуляции выделяют из них наиболее выгодные с учётом транзакционных и альтернативных издержек - потенциал для применения на практике.
Заключение
С помощью применения устоявшейся методики с использованием эмпирических распределений для оценки текущего уровня значений волатильности была оценена первичная модель с 20 дамми-переменными. Оценка данной модели на целевом периоде с 01.01.2014 по 31.12.2018 для исследования влияния краткосрочной внемодельнойimpliedvolatility (индекс волатильности RVI) на динамику цен активов на российском фондовом рынке (будущие доходности ценового индекса РТС на горизонтах 1, 5, 10, 20, 40 и 60 дней) дала следующие результаты:
· На горизонтах 20, 40 и 60 дней наблюдается статистически значимый положительный эффект периодов низкой волатильности (меньше 5% перцентиля) на доходности активов;
· Менее выраженным, но статистически значимым, является положительный эффект периодов высокой волатильности (больше 90% перцентиля) на доходности активов на горизонтах 40 и 60 дней.
Таким образом, первичная модель дала неоднородные результаты относительно первичных временных рядов. С целью апробации данных оценок были проведены торговые симуляции с оценкой значимости торговых результатов с помощью бутстрап. Для робастности получаемых результатов были включены различные периоды удержания открытых позиций, разнообразные периоды построения эмпирических распределений. Доходность торгового алгоритма рассчитывалась с учётом комиссионных сборов и доходности бенчмарка (стратегия «купи и держи»). Конечный вывод по итогам проведения данной процедуры следующий: периоды высокой волатильности (больше 90% перцентиля, полученного на горизонте 100 или 200 дней) являются статистически значимым сигналом для потенциальных длинных позиций с периодом удержания в 40 дней.
Есть ряд моментов, которые являются векторами дальнейшей разработки данной проблематики влияния агрегированной волатильности на динамику цен финансовых инструментов. Во-первых, выбранный временной ряд (большая часть)является периодом растущего рынка. По аналогии с работами других авторов есть возможность с течением времени выбрать различные рынки, которые можно однозначно охарактеризовать в терминах «растущий - падающий - период затишья». Во-вторых, применённый торговый алгоритм является довольно примитивным с целью отображения наиболее верхнеуровневых явлений. В другой спецификации возможно применить стоп-лосы или тейк-профиты для увеличения практической правдоподобности, учесть доход от moneymarket, попытаться сформировать правила для коротких позиций. В-третьих, продолжить применение инструментов из истории анализа зарубежных рынков (с адаптацией под российский рынок). На данном этапе есть две основные группы таких работ. Первая - использование не только краткосрочной волатильности, но интерполяций краткосрочных оценок или применение методик расчёта для получения долгосрочных показателей, которые потенциально могут иметь более сильный эффект, что было показано в научном экскурсе в проблему. Вторая - работы с использованием факторных моделей (CAPM, FF-3) и перекрёстных данных, что позволит оценить конкретный вклад агрегированной волатильности в качестве риск-фактора в доходность и улучшит робастность получаемых результатов из-за возможности добавления фундаментальных и макроэкономических контрольных переменных.
Список литературы
· Ang, A., Hodrick, R.J., Xing, Y., Zhang, X. (2006), The cross-section of volatility and expected returns, The Journal of Finance, 61 (1): 259-299.
· Barone-Adesi, G., Giannopoulos, K., Vosper, L. (1999), VaRWithout Correlations for Portfolios of Derivative Securities, Journal of Futures Markets, 19 (5): 583-602.
· Dowd, K. Measuring Market Risk / K. Dowd. - John Wiley & Sons, 2005 - 390 p.
· Giot, P. (2005), Relationships between implied volatility indices and stock index returns, Journal of Portfolio Management, 31 (3): 92-100.
· Gujarati, D.N. Basic Econometrics / Gujarati D.N. - The McGraw?Hill Companies, 2004 - 1003 p.
· Jiang, G. J., Tian, Y. S. (2005), The model-free implied volatility and its information content, The Review of Financial Studies, 18 (4): 1305-1342.
· Lubnau, T.M., Todorova, N. (2015), The calm after the storm: implied volatility and future stock index returns, The European Journal of Finance, 21 (15): 1282-1296.
· Sunil, S. P., Pankaj, C., Vineet, A. (2019), Implied volatility and the cross section of stock returns in the UK, Research in International Business and Finance, 48: 271-286.
Приложение №1 - пример реализации процедуры бутстрап на языке Python.
import pandas as pd
importnumpy as np
fromarch.univariate import ARX
fromarch.univariate import GARCH
import random
data = pd.read_excel('sample.xlsx')
data['lr_rtsi']=np.log(data['rtsi'])-np.log(data['rtsi'].shift(1))
data['lr_rvi']=np.log(data['rvi'])-np.log(data['rvi'].shift(1))
data = data.dropna(subset = ['lr_rtsi'])
ar = ARX(data['lr_rtsi'].values, lags=[1], constant = False)
ar.volatility = GARCH(p=1,q=0)
res = ar.fit(update_freq=0, disp='off')
print(res.summary())
st_res = res.resid/np.sqrt(res.conditional_volatility)
rtsi = [1395.91]
drtsi = [data['lr_rtsi'].values[2]]
h = [res.conditional_volatility[2]]
z = [np.sqrt(res.conditional_volatility[2])*st_res[1]]
st = [st_res[2]]
ids =[2]
choose = [i for i in range(1,len(st_res))]
result_ids = pd.DataFrame()
result_prices = pd.DataFrame()
for k in range(0, 1000):
rtsi = [1395.91]
drtsi = [data['lr_rtsi'].values[2]]
h = [res.conditional_volatility[2]]
z = [np.sqrt(res.conditional_volatility[2])*st_res[1]]
st = [st_res[2]]
ids =[2]
for j in range(0, 1254):
h.append(res.params[1]+(z[-1]**2)*res.params[2])
z.append(np.sqrt(h[-1])*st[-1])
ids.append(random.choice(choose))
st.append(st_res[ids[-1]])
rtsi.append(rtsi[-1]+rtsi[-1]*(drtsi[-1]*res.params[0]+z[-1]))
drtsi.append(np.log(rtsi[-1]/rtsi[-2]))
result_ids['id_'+str(k)]=ids
result_prices['price_'+str(k)]=rtsi
ar = ARX(data['lr_rvi'].values, lags=[1], constant = False)
ar.volatility = GARCH(p=1,q=1)
res = ar.fit(update_freq=0, disp='off')
print(res.summary())
st_res = res.resid/np.sqrt(res.conditional_volatility)
rvi = [20.56]
drvi = [data['lr_rvi'].values[2]]
h = [res.conditional_volatility[2]]
z = [np.sqrt(res.conditional_volatility[2])*st_res[1]]
st = [st_res[2]]
result_vol = pd.DataFrame()
for k in range(0, 1000):
rvi = [20.56]
drvi = [data['lr_rvi'].values[2]]
h = [res.conditional_volatility[2]]
z = [np.sqrt(res.conditional_volatility[2])*st_res[1]]
st = [st_res[2]]
ids = list(result_ids['id_'+str(k)])
for j in range(0, 1254):
h.append(res.params[1]+(z[-1]**2)*res.params[2])
z.append(np.sqrt(h[-1])*st[-1])
st.append(st_res[ids[j]])
rvi.append(rvi[-1]+rvi[-1]*(drvi[-1]*res.params[0]+z[-1]))
drvi.append(np.log(rvi[-1]/rvi[-2]))
result_vol['vol_'+str(k)]=rvi
start = [100, 200, 300]
period = [20,40,60]
fee = 0.0001
per = 5
comissions = []
totals = []
periods = []
starts = []
sample = []
trades = []