Проверка гипотезы о независимости логарифмической доходности за различные интервалы времени при большом, среднем и малом объеме торгов

курсовая работа

Заключение

В результате проведенной работы получилось, что гипотеза о независимости логарифмических доходностей для различных интервалов времени при большом, среднем и малом объеме торгов принимается при 0,01 и 0,05 уровнях значимости практически всегда, однако гистограмма Р-значений не равномерна на отрезке [0,1] , что не дает мне с полной уверенностью сказать, что они независимы и гипотеза принимается в отличие от результатов прошлого года.

Новизна состоит в том, что в работе были использованы новые программы и две альтернативные гипотезы

Литература

1) Браилов А.В. Лекции по математической статистике.-М.: Финакадемия, 2007

2) Гмурман В.Е. - Руководство к решению задач по теории вероятностей и математической статистике: Учеб. Пособие - 12-е изд.,перераб.-М.:Высшее образование, 2006-476 с. (Основы наук)

3) Горяинов Б.В., Павлов И.В., Цветкова Г.М. и др. Математическая статистика: под ред. ЗарубинаВ.С., Крищенко А.П. - М.:Изд-во МГТУ им. Н.Э.Баумана, 2001. - 424 с.(Сер. Математика в техническом университете; Вып. XVII).

4) Ниворожкина Л.И., Морозова З.А. Теория вероятностей и математическая статистика - М.:Эксмо, 2008. - 432 с. - (Техническое образование).

5) Письменный Д. Конспект лекций по теории вероятностей и математической статистике и случайным процессам. - М.: Айрис-пресс, 2008. - 256 с. - (Высшее образование).

6) http://finance.yahoo.com.

7) Аюпов Д. (2013). Проверка гипотезы о независимости логарифмической доходности за различные интервалы времени при большом, среднем и малом объеме торгов Москва: ФГОУ ВПО "Финансовый университет при Правительстве РФ".

8) Безделина Е. (2013). Проверка следствий гипотезы о независимости логарифмической доходности за различные интервалы времени Москва: ФГОУ ВПО "Финансовый университет при Правительстве РФ".

9) Петухова С. (2013). Проверка гипотезы о нормальном распределении дневной логарифмической доходности по модифицированному критерию Пирсона. Москва: ФГОУ ВПО "Финансовый университет при Правительстве РФ".

Приложение 1

Таблица 19. Характеристики компьютера

Тип процессора

Intel Core i5 2450M

Тактовая частота

2.50 GHz

Частота системной шины

99.76 MHz

Объем кэш-памяти второго уровня

512KB

Таблица 20. Список программ, работающих более 10 секунд

Гистограмма Р-значений.mtc

15 c.

Квантили распределения статистики критерия.mtc

2 м. 35 с.

Мощность критерия.mtc

29 с.

Приложение 2

1.Число торговых дней

//источник [7]

//время работы 656 мс

Y=2010:2013;

T=loadtextcol("Tickers.txt","Tickers");

NT=0(#T,#Y);

for (y in Y)

{

d1=date(y,1,1);

d2=date(y,12,31);

for (t in T)

{

X=loaddaily(d1,d2,t+".csv","CLOSE");

NT(t.num,y.num)=sum(X>0);

}

}

F=["год/тикер","2010","2011","2012","2013"];

tiker=[F;T,NT];

savetable(tiker,"Число торговых дней.csv");

3,4.Скачки цен

//источник [7]

//Радостева 2014 г.

//717 мс

Y=2010:2013;

T=loadtextcol("Tickers.txt","Tickers");

NT=0(#T,#Y);

NT1=0(#T,#Y);

for (y in Y)

{

d1=date(y,1,1);

d2=date(y,12,31);

for (t in T)

{

X=loaddaily(d1,d2,t+".csv","CLOSE");

I=select(X,X>0);

I1=I(2:#I);

I=I(1:(#I-1));

NT(t.num,y.num)=max(I1/I);

NT1(t.num,y.num)=min(I1/I);

}

}

F=["год/тикер","2010","2011","2012","2013"];

U=[F;T,NT-1];

savetable(U,"Скачки цен вверх.csv");

U=[F;T,NT1-1];

savetable(U,"Скачки цен вниз.csv");

1,2.Графики со скачками

//источник [7]

//2.8 c

Tickers=loadtextcol("Tickers.txt","Tickers");

Max = 0; MaxTic = super(1);

Min = 1; MinTic = super(1);

d1 = date(2010,1,1);

d2 = date(2013,12,31);

for(i in Tickers)

{

Close = loaddaily (d1,d2,i + ".csv","CLOSE");

I=select(Close,Close>0);

C1=I(2:#I);

C= I(1:(#I-1));

if(max(C1/C) > Max)

{

Max = max(C1/C); MaxTic = i;

}

if(min(C1/C) < Min)

{

Min = min(C1/C); MinTic = i;

}

}

//Построение графиков цен акций с мин. и макс. скачками

for(i in [MaxTic;MinTic])

{

Close = loadnumcol(i + ".csv","CLOSE");

C = select(Close,Close>0);

X = 1:#C;

XX = select(X,Close>0);

wintitle(i);

line(XX,C,blue);

axes();

show();

erase();

}

7. Квантили распределения статистики критерия

//Источник [7] и [8]

//Радостева 2014г.

//2м 35с

timer(0);

//число дней для года, полугодия, квартала,

//которые соответствуют большому, среднему и малому объемам торгов

k=[240;120;60];

//временной лаг

lag=1:8;

m=10000;

St=0(m,#k);

PV=0(m,#k);

//закон геометрического броуновского движения

law L()=exp(sum(nlaw(0,1)(1)));

for(j in 1:#k)

{

for (i in 1:m)

{

//содаем два независимых вектора,показывающих лог доходность

Log=dif(ln(L(k(j))));

for (lg in 1:8)

{

X=Log(1:#Log-lg);

Y=Log(lg+1:#Log);

p=#Y;

maxX=max(X)+1;

maxY=max(Y)+1;

minX=min(X)-1;

minY=min(Y)-1;

rY=elaw(Y).invpg(1/3);

rX=elaw(X).invpg(1/3);

//интервалы для вычисления частот торгов

DX=[minX;-rX;rX;maxX];

DY=[minY;-rY;rY;maxY];

r1=#DX-1;//количество интервалов для X

r2=#DY-1;//то же самое для Y

n=0(r1,r2);

//создаем таблицу частот

for (c in 1:r1)

for (d in 1:r2)

n(c,d)=sum(X>=DX(c)& X<DX(c+1) &

Y>=DY(d) & Y<DY(d+1));

l=(r1-1)*(r2-1);//степень свободы

n1=sum(rows(n));

n2=sum(cols(n));

//создаем таблицу произведения частот

t=n1&*n2;

//проверка условия использования критерия

if (min(t/k(j))>5)

x2=sum((n-t/p)^2/t)*p;//статистика критерия

St(i,j)=x2;

}

}

}

Lew=0.001:0.999:0.001;

qi=[Lew];

for(i in 1:#k)

{

El=elaw(St.c(i));

qi=[qi,El.q(Lew)];

}

savetable(["Квантиль","Год","Полугодие","Квартал";qi],

"Квантили распределния статистики.csv");

3,4,5. Гистограммы Р-значений

//источники [7] и [8]

//Радостева 2014г.

//15 c

timer(0);

q=loadnumcol("Квантили распределения статистики.csv","Квантиль");

y=loadnumcol("Квантили распределния статистики.csv","Год");

hy=loadnumcol("Квантили распределения статистики.csv","Полугодие");

quarter=loadnumcol("Квантили распределения статистики.csv","Квартал");

//эмпирические законы распределения

Qy=elaw(y);

Qhy=elaw(hy);

Qquarter=elaw(quarter);

m=1000;

//объем выборок для года, полугодия, квартала

k=[240;120;60];

//временной лаг

lag=1:8;

PV=0(m,#k);

//закон геометрического броуновского движения

law L()=exp(sum(nlaw(0,1)(1)));

for(j in 1:#k)

{

for (i in 1:m)

{

Log=dif(ln(L(k(j))));

for (lg in lag)

{

//создаём два независимых вектора,

//показывающих лог доходность

X=Log(1:#Log-lg);

Y=Log(1+lg:#Log);

p=#Y;

maxX=max(X)+1;

maxY=max(Y)+1;

minX=min(X)-1;

minY=min(Y)-1;

rY=elaw(Y).invpg(1/3);

rX=elaw(X).invpg(1/3);

//интервалы для вычисления частот

DX=[minX;-rX;rX;maxX];

DY=[minY;-rY;rY;maxY];

r1=#DX-1;//количество интервалов для X

r2=#DY-1;//то же самое для Y

n=0(r1,r2);

//создаем таблицу частот

for (c in 1:r1)

for (d in 1:r2)

n(c,d)=sum(X>=DX(c)& X<DX(c+1) &

Y>=DY(d) & Y<DY(d+1));

n1=sum(rows(n));

n2=sum(cols(n));

//создаем таблицу произведения частот

t=n1&*n2;

if (min(t/k(j))>5)

x2=sum((n-t/p)^2/t)*p;

s=x2;

//находим Р-значение для года, полугодия, квартала

if (j==1) PV(i,j)=Qy.pg(s);

if (j==2) PV(i,j)=Qhy.pg(s);

if (j==3) PV(i,j)=Qquarter.pg(s);

}

}

}

h=0.001;

Pt=0:1:h;

TOF1=PV.c(1).intfrgel(Pt);

TOF2=PV.c(2).intfrgel(Pt);

TOF3=PV.c(3).intfrgel(Pt);

savetable(["PV","Год","Полугодие","Квартал";

[Pt(2:#Pt),PV.c(1),PV.c(2),PV.c(3)]],"Таблица Р-значений.csv");

hist(TOF1,blue);

wintitle("При объеме выборки соответствующему году");

axes();

show();

erase();

hist(TOF2,blue);

wintitle("При объеме выборки соответствующему полугодию");

axes();

show();

erase();

hist(TOF3,blue);

wintitle("При объеме выборки соответствующему кварталу");

axes();

Проверка равномерности распределения по Колмогорову

//Радостева 2014г

//32мс

Yh=loadnumcol("Таблица Р-значений.csv","Год");

Ym=loadnumcol("Таблица Р-значений.csv","Полугодие");

Yl=loadnumcol("Таблица Р-значений.csv","Квартал");

Lteor=ulaw(0,1);

Lnab1=elaw(Yh);Lnab2=elaw(Ym);Lnab3=elaw(Yl);

XX=0:1:0.1;

//Критерий Колмогорова

DD1=max(abs(Lnab1.pl(XX)-Lteor.pl(XX)))*(#Yh)^0.5;

DD2=max(abs(Lnab2.pl(XX)-Lteor.pl(XX)))*(#Ym)^0.5;

DD3=max(abs(Lnab3.pl(XX)-Lteor.pl(XX)))*(#Yl)^0.5;

Z1=pvKolm(DD1);

Z2=pvKolm(DD2);

Z3=pvKolm(DD3);

k1="Не принимается при объеме выборки соответствующему году";

k2="Не принимается при объеме выборки соответствующему полугодию";

k3="Не принимается при объеме выборки соответствующему кварталу";

if (Z1>0.05)

k1="При объеме выборки соответствующему году принимается";

if (Z2>0.05)

k2="При объеме выборки соответствующему полугодию принимается";

if (Z3>0.05)

k3="При объеме выборки соответствующему кварталу принимается";

[k1;k2;k3];

9,10,11. Мощность критерия

//источник [7]

//Радостева 2014г.

//29c

timer(0);

q=loadnumcol("Квантили распределения статистики.csv","Квантиль");

y=loadnumcol("Квантили распределения статистики.csv","Год");

hy=loadnumcol("Квантили распределения статистики.csv","Полугодие");

quarter=loadnumcol("Квантили распределения статистики.csv","Квартал");

S=[240;120;60];

//временной лаг

lag=1:8;

g=0(2,3);

//критические точки для года, полугодия, квартала

Tkr=[elaw(y).q(1-0.05/2);elaw(hy).q(1-0.05/2);elaw(quarter).q(1-0.05/2)];

Count=0(2,3);

m=1000;

//коэффициент корреляции

po=0.7;//0.1,0.45

K=0(2,3);

C=[po;-po];

law L()=exp(sum(nlaw(0,1)(1)));

for(a in 1:#C)

{

for(j in 1:#S)

{

for (i in 1:m)

{

Log=dif(ln(L(S(j))));

for(lg in lag)

{

//создаем зависимые лог доходности

LnX=Log(1:#Log-lg);

LnY=LnX*C(a)+(1-C(a)^2)^0.5*Log(1+lg:#Log);

maxX=max(LnX)+1; maxY=max(LnY)+1;

minX=min(LnX)-1; minY=min(LnY)-1;

rX=elaw(LnX).invpg(1/3); rY=elaw(LnY).invpg(1/3);

D1=[minX;-rX;rX;maxX];

D2=[minY;-rY;rY;maxY];

//количество интервалов

r1=#D1-1;

r2=#D2-1;

k=#LnX;

//создаем таблицу частот частоты

n=0(r1,r2);

for (c in 1:r1)

for (d in 1:r2)

n(c,d)=sum(LnX>=D1(c)&LnX<D2(c+1)&

LnY>=D2(d)&LnY<D2(d+1));

n2=sum(cols(n));

n1=sum(rows(n));

//таблица произведения частот

t=n1&*n2;

if(min(t/k)>5)

{

//сколько раз проверялась гипотеза

g(a,j)=g(a,j)+1;

z=sum((n-t/k)^2/t)*k;

//количество раз, когда гипотеза не выполнялась

if (Tkr(j)<abs(z)) Count(a,j)=Count(a,j)+1;

}

}

}

}

}

Count=Count/g;

savetable([" ","Год","Полугодие","Квартал";["cor="+po;"cor="+(-po)],Count],

"Мощность критерия.csv");

12,13,14,15.Таблица Р-значений для реальных данных

//источник [7] и [8]

//Радостева 2014г.

//2.8с

d1 = date(2010,1,1);

d2 = date(2010,12,31);

Tickers = loadtextcol("Tickers2.txt","Tickers");

Vars = ["LoVol","MidVol","HiVol"];

//временной лаг

lag=[1:5;10:25:5;30:50:10];

//суперматрица, размер которой определяется количеством элементов

//матрицы Tickers и количеством элементов матрицы Vars,

//все элементы которой являются "пустыми" строками символов

TabPV = super(#Tickers,#Vars);

Y=2010:2013;

for (y in Y)

{

d1 = date(2010,1,1);

d2 = date(y,12,31);

for(ticker in Tickers)

{

V0 = loaddaily(d1,d2,ticker + ".csv","Volume");

V = select(V0,V0>0);//отбираются акции только по рабочим дням

LV = elaw(V);//эмпирическое распределение

//эмпирические квантили(определяется объем торгов уровня квантили 1/3)

v1 = LV.invpl(1/3);

//эмпирические квантили(определяется объем торгов уровня квантили 2/3)

v2 = LV.invpl(2/3);

P0 = loaddaily(d1,d2,ticker + ".csv","Adj Close");

P = select(P0,V0>0);

assert(min(P)>0);

for(nv in 1:#Vars)

{

TabPV(ticker.num,nv) ="*";//-1 для построения диаграммы

if(nv==1) C = (V<=v1)(1:#V-1);

if(nv==2) C = (V>v1 & V<v2)(1:#V-1);

if(nv==3) C = (V>=v2)(1:#V-1);

//определяется дневная логдоходность для C

lnR = select(dif(ln(P)), C);

m = #lnR;//число наблюдений

//если число наблюдений меньше 50,

//то прерывается выполнение тела оператора for

// и начинается переход к следующему элементу матрицы

if(m<50) continue;

minR = min(lnR)-1;//нижняя граница

maxR = max(lnR)+1;//верхняя граница

r = elaw(lnR).invpg(1/3);

Q = [-r;r];

D1 = [minR; Q; maxR]; //разбиваем на интервалы

D2 = [minR; Q; maxR]; //разбиваем на интервалы

r1 = #D1-1; //количество интервалов, на которые разбили

r2 = #D2-1;//количество интервалов, на которые разбили

pv=0(#lag);

for (lg in 1:#lag)

{

//случайные величины с учетом временных лагов

lnR1 = lnR(1:m-lag(lg));

lnR2 = lnR(1+lag(lg):m);

n = #lnR1;

//условие использования критерия

if(n<50) continue;

p = 0(r1,r2);

// p - матрица вероятностей попадания доходностей

//в получившиеся интервалы

for (i in 1:r1)

{

for(j in 1:r2)

{

p(i,j) = sum(lnR1>=D1(i)&lnR1<D1(i+1) &

lnR2>=D2(j)&lnR2<D2(j+1))/n;

}

}

//проверка того, что логдоходность попадает вся

//в общий интервал

assert(abs(sum(p)-1) < 0.000001);

k = (r1-1)*(r2-1);// степень свободы критерия

p2 = sum(cols(p));//сумма столбцов матрицы p

p1 = sum(rows(p));//сумма строк матрицы р

t = p1&*p2;

if(min(t*n) > 5)

{

//если выполняется условие, при котором можно

//использовать критерий Пирсона:

//теоритические частоты >=5

z=n*sum((p-t)^2/t);

//сколько раз считался критерий для одного года //и тикера

Count=Count+1;

pv(lg) = x2law(k).pg(z); // P-значение

}

}

//среднее значение

if (Count) TabPV(ticker.num,nv) =sum(pv)/Count;

}

}

H = ["Тикер",Vars];

Out = [H; [Tickers,TabPV]];

savetable(Out,"tab"+y+".csv");

}

6,7,8.Гистограмма Р-значений для реальных данных

//Радостева 2014г.

//1.8с

Y=2011:2013;

//загружаем данные по каждому объему торгов

X1=loadnumcol("tab2010.csv","LoVol");

X2=loadnumcol("tab2010.csv","MidVol");

X3=loadnumcol("tab2010.csv","HiVol");

//убираем данные, где статистика не посчиталась

LoVol=select(X1,X1>0&X2>0&X3>0);

MidVol=select(X2,X1>0&X2>0&X3>0);

HiVol=select(X3,X1>0&X2>0&X3>0);

//строим векторы Р-начений для каждого объема торгов

for (y in Y)

{

LoVol=[LoVol;loadnumcol("tab"+y+".csv","LoVol")];

MidVol=[MidVol;loadnumcol("tab"+y+".csv","MidVol")];

HiVol=[HiVol;loadnumcol("tab"+y+".csv","HiVol")];

}

//выбираем шаг

h=0.01;

Pt=0:1:h;

//разбиваем на интервалы

TOF1=LoVol.intfrgel(Pt);

TOF2=MidVol.intfrgel(Pt);

TOF3=HiVol.intfrgel(Pt);

//рисуем

hist(TOF1,blue);

wintitle("При малом объеме торгов");

axes();

show();

erase();

hist(TOF2,blue);

wintitle("При большом среднем торгов");

axes();

show();

erase();

hist(TOF3,blue);

wintitle("При большом объеме торгов");

axes();

16.Доля проверок, в которых гипотеза проверялась

//источник [7]

//Радостева 2014г.

//5.8c

d1 = date(2010,1,1);

d2 = date(2010,12,31);

Tickers = loadtextcol("Tickers2.txt","Tickers");

Vars = ["LoVol","MidVol","HiVol"];

//временной лаг

lag=[1:5;10:25:5;30:50:10];

TabPV = super(#Tickers,#Vars);

Y=2010:2013;

Res=0(2,3);

Cou=0(2,3);

for (y in Y)

{

d1 = date(2010,1,1);

d2 = date(y,12,31);

for(ticker in Tickers)

{

V0 = loaddaily(d1,d2,ticker + ".csv","Volume");

V = select(V0,V0>0);//отбирабтся акции только по рабочим дням

LV = elaw(V);//эмпирическое распределение

//эмпирические квантили(определяется объем торгов

//уровня квантили 1/3)

v1 = LV.invpl(1/3);

//эмпирические квантили(определяется объем торгов

//уровня квантили 2/3)

v2 = LV.invpl(2/3);

P0 = loaddaily(d1,d2,ticker + ".csv","Adj Close");

P = select(P0,V0>0);

assert(min(P)>0);

for(nv in 1:#Vars)

{

TabPV(ticker.num,nv) ="*";//-1 для построения диаграммы

if(nv==1) C = (V<=v1)(1:#V-1);

if(nv==2) C = (V>v1 & V<v2)(1:#V-1);

if(nv==3) C = (V>=v2)(1:#V-1);

//определяется дневная логдоходность для C

lnR = select(dif(ln(P)), C);

m = #lnR;//число наблюдений

if(m<50) continue;

minR = min(lnR)-1;//нижняя граница

maxR = max(lnR)+1;//верхняя граница

r = elaw(lnR).invpg(1/3);

Q = [-r;r];

D1 = [minR; Q; maxR]; //разбиваем на интервалы

D2 = [minR; Q; maxR]; //разбиваем на интервалы

r1 = #D1-1; //количество интервалов, на которые разбили

r2 = #D2-1;//количество интервалов, на которые разбили

pv=0(#lag);

for (lg in 1:#lag)

{

//случайные величины с учетом временных лагов

lnR1 = lnR(1:m-lag(lg));

lnR2 = lnR(1+lag(lg):m);

n = #lnR1;

if(n<50) continue;

p = 0(r1,r2);

//p - матрица вероятностей попадания доходностей

//в получившиеся интервалы

for (i in 1:r1)

{

for(j in 1:r2)

{

p(i,j) = sum(lnR1>=D1(i)&lnR1<D1(i+1) &

lnR2>=D2(j)&lnR2<D2(j+1))/n;

}

}

//проверка того, что логдоходность попадает вся

//в общий интервал

assert(abs(sum(p)-1) < 0.000001);

k = (r1-1)*(r2-1);// степень свободы критерия

p2 = sum(cols(p));//сумма столбцов матрицы p

p1 = sum(rows(p));//сумма строк матрицы р

t = p1&*p2;

L=x2law(k);

Tkr=[L.q(1-0.01/2);L.q(1-0.05/2)];

if(min(t*n) > 5)

{

//если выполняется условие, при котором

//можно использовать критерий Пирсона:

// теоритические частоты >=5

z=n*sum((p-t)^2/t);

for (kr in 1:#Tkr)

{

Cou(kr,nv)=Cou(kr,nv)+1;

//сколько раз гипотеза выполнялась

if(Tkr(kr)>abs(z))

Res(kr,nv)=Res(kr,nv)+1;

}

}

}

}

}

}

savetable(["Уровень значимости","LoVol","MidVol","HiVol";

[["1%";"5%"],Res/Cou]],

"Доля проверок, в которых гипотеза принималась.csv");

17,18.Медиана Р-значений

//Радостева 2014г

//16мс

Y=2011:2013;

//загружаем таблицу Р-значений при разных объемов торгов

LoVol=loadnumcol("tab2010.csv","LoVol");

MidVol=loadnumcol("tab2010.csv","MidVol");

HiVol=loadnumcol("tab2010.csv","HiVol");

for (y in Y)

{

LoVol=[LoVol,loadnumcol("tab"+y+".csv","LoVol")];

MidVol=[MidVol,loadnumcol("tab"+y+".csv","MidVol")];

HiVol=[HiVol,loadnumcol("tab"+y+".csv","HiVol")];

}

Tickers=loadtextcol("Tickers2.txt","Tickers");

Y=2010:2013;

MedYear=0(#Y,3);

MedTic=0(#Tickers,3);

//медианы по годам

for (y in 1:#Y)

{

X1=LoVol.c(y);X2=MidVol.c(y);X3=HiVol.c(y);

X1=select(X1,X1>0);X2=select(X2,X2>0);X3=select(X3,X3>0);

MedYear(y,1)=median(X1);

MedYear(y,2)=median(X2);

MedYear(y,3)=median(X3);

}

//медианы по тикерам

for (tic in 1:#Tickers)

{

X1=LoVol.r(tic);X2=MidVol.r(tic);X3=HiVol.r(tic);

X1=select(X1,X1>0);X2=select(X2,X2>0);X3=select(X3,X3>0);

MedTic(tic,1)=median(X1);

MedTic(tic,2)=median(X2);

MedTic(tic,3)=median(X3);

}

savetable(["Год","LoVol","MidVol","HiVol";Y,MedYear],

"Медианы Р-значений по годам.csv");

savetable(["Тикер","LoVol","MidVol","HiVol";Tickers,MedTic],

"Медианы Р-значений по тикерам.csv");

Делись добром ;)