Приложстше 2
ВЬРШСЛЕНИЕ E(R/S)
Данная программа вычисляет ожидаемое значение R/S для гауссовых приращений, используя методологию, описанную в Главе 5. В начале есть стартовое значение для числа наблюдений п и конечное значение е. Подобно программе для вычисления R/S, эта программа вычисляет E(R/S) для всех четных приращений между п и е. На пракгаке я проюжу R/S на фактических данных, а затем выполняю эту программу для E(R/S), изменяя е на общее число наблюдений, используемых для R/S, давая, таким образом, эквивалентные значения. Это можно изменить, и характерные значения в Таблице А2.1, которая следует за этим приложением, были рассчитаны также с помощью этой программы.
Результат содержится в файле ASCII, который называется ern.asc. Он содержит два столбца, E(R/S) и число наблюдений п. На этот раз логарифмы не берутся, хотя программу можно легко изменить, чтобы она это делала. В вычислении мы используем уравнение (5.4) до тех пор, пока п меньше 335. В этой точке большинство ПК не выдерживает достаточного количества разрядов для гамма-функций, и профамма переходит к уравнению (5.5), которое использует приближение Стерлинга.
п=9; е=1(Х30; ©beginning and ending observation numbers® do while n<e; n=n+l;
i = floor (e/n); num=(e/n); if i<num; goto repeat; endif; ifn< 335;
g = gamma (.5*(n-l))/(gamma(.5*n)*sqrt(pi));
else; g=((.5*n)(-.5))/sqrt(pi);
endif;
Ы); sum=0; do while r<n-l; n=r+l;
sum=sum+sqrt((n-r)/r); ©empirical correction® endo;
em = g*sum; ©calculation of E(R/S) using empirical correction @ output file ern.asc on;
p = n ~ em; print p; repeat: endo;
ВЬИИСЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОГО СТАНДАРТНОГО ОТКЛОНЕНИЯ И СРЕДНЕГО
Программа, которая вычисляет последовательное стандартное отклонение и среднее - просто разновидность той программы, которая вычисляет нормированный размах. Данные непрерывно переформатируются в матрицу п X i, но приращение теперь представляет собой фиксированный шаг длиной г. Вместо нормированного размаха рассчитываются только сигма и среднее. Эга программа использует только первый столбец; она не выводит среднее по всем приращениям длиной i. Наконец, она не берет АК(1>разности, которые являются излишними для этого вида анализа. Результат - последовательное среднее и сигма, так же как и число наблюдений х.
©open ех = djal.dat; р = seekr(ex,l); sret = readr(ex,27000);
datx = sret[.,l]; obv = rows (datx);© ©GAUSS dataset input
REMс out©
load sret[] = prices.prn; datx=sret[., 1]; obv = rows[datx];
datr = ln(datx[2:obv]./datx [l:obv-l]); ©log returns© obv = rows (datr);
r = 1; x=19; ©incronents of one observation, start with 20
observations©
do while x<obv-r;
X = X + r; n = floor(obv/x);
xl = reshape (datr,n,x) ; ©reformat data into n by x matrix©
s = xl[.,l]; V = stdc(s); m = meanc (s); ©calculate sequential sigma and mean©
©print to file©
format 1 8; output file = seqvar.asc on; print x - V - m; endo;
ВЫЧИСЛЕНИЕ ВРЕМЕННОЙ СТРУКТУРЫ ВОЛАТИЛЬНОСТИ
Как и в программе для последовательного среднего и стандартного отклонения, программа вычисления временной структуры юлатильности испольет большую часть профаммы R/S-анализа, переформатируя данные как матрицу п X i, где п -временной интервал процента. В этом случае мы начинаем с ежедневных данных, строим вектор цен 27 002 X 1 и вычисляем стандартное отклонение изменений AR(1)-разностей. Затем мы переходим к 2-дневным данным и создаем матрицу цен 13 502 X 2. Столбец 1 теперь содержит цену каждые два дня. Затем мы вычисляем стандартное отклонение изменений AR(l)-paзнocтeй столбца 1. Мы продолжаем делать это до тех пор, пока у нас не закончатся данные.
В этом случае мы еще раз используем AR(l)-pa3H0CTH, потому что мы не хотим, чтобы стандартное отклонение более длительных периодов смещалось инфляционным ростом. В более коротких интервалах это не имеет большого значения.
©This section reads а GAUSS dataset as input. It has been REMd out® ©open ex = djal.dat; p=seekr(ex,1); sret = readr(ex,27002); datr=sret[.,1];@
©This section reads an ASCII file as input®
load sret [] = prices.prn;
datx=sret[.,]];
obv=((int(rows(datx)/100))*100)+2; ©set observations to even 100, +2 for
AR(1) calc®
datn = datx [2:obv]./datx[1 :obv]; ©Calculate log returns© obv = rows (datn);