hurst指数计算程序(部分)
其余代码以及应用见(一篇关于HUrst指数的报告和sas计算程序)
- *******************hurst指数计算程序*******************************
- **************************20140110********************************;
- /*1、计算周期************************该宏计算周期;
- %macro Husrtindex(index,n,bdate,edate);
- data index;
- set funddata.Explainvar;
- if stockcode in ("&index..SH","&index..SZ") and &bdate<date<&edate;
- ret=100*(log(close)-log(lag(close))); format ret 8.5;
- if _N_=1 then delete;
- if _N_=1 then i=1;else i+1;
- keep date stockcode close ret i;
- run;
- data data1;
- set index;
- j=int(i/%eval(&n))+1;
- run;
- proc means data=data1 std mean noprint;
- var ret;
- by j;
- output out=data2(drop=_type_ _freq_)
- mean=junzhi
- std=bzc;
- run;
- proc sql;
- create table data3 as
- select
- a.*,
- b.junzhi,
- b.bzc
- from data1 a,
- data2 b
- where
- a.j=b.j;
- quit;
- data data3;
- set data3;
- if ret=. then delete;
- run;
-
- data data4;
- set data3;
- retain licha;
- by j;
- if first.j then licha=ret-junzhi; else
- licha=licha+(ret-junzhi);
- retain maxlicha;
- if first.j then maxlicha=licha;else
- if maxlicha<licha then maxlicha=licha;
- retain mixlicha;
- if first.j then mixlicha=licha ;else
- if mixlicha>licha then mixlicha=licha;
- if last.j then R=(maxlicha-mixlicha)/bzc; else
- delete;
- retain SumR;
- if j=1 then SumR=R; else SumR=SumR+R;
- format licha mixlicha maxlicha R SumR 12.5 ;
- *drop close ret junzhi licha mixlicha maxlicha bzc ;
- run;
- proc sort data=data4;
- by descending date;
- run;
- data data5;
- set data4;
- if _N_=1;
- AveR=SumR/j;
- LogAveR=log(SumR/j);
- logn=log(%eval(&n));
- n=%eval(&n);
- *stockcode="&index..SH";
- format logn LogAveR AveR 8.5;
- keep stockcode logn LogAveR n AveR;
- run;
- proc append base=dxdata.hurstdata data=data5 force ;
- run;
- %mend;
- *%Husrtindex(000001,12,'01jan1999'd,'01jan2006'd);
- *%Husrtindex(000001,12,'01jan2006'd,'15apr2010'd);
- *%Husrtindex(000001,12,'16apr2010'd,'10jan2014'd);
- *%Husrtindex(000001,12,'01jan1999'd,'10jan2014'd);