现在的位置: 首页 > 综合 > 正文

套利组合收益的节假日统计

2018年10月20日 ⁄ 综合 ⁄ 共 4901字 ⁄ 字号 评论关闭

需求:统计节假日效应:节前一周内开仓和节后一周内开仓的收益情况
其中,套利组合在开平仓信号内,按照周一-周五分别开仓。

解决步骤:
1.数据处理
1.1导入周一-周五组合的市值数据,组合数据包含开仓时间(start),平仓时间(end),
   开仓市值(open),平仓市值(close),平仓沪深300市值(hs_close)。
PROC IMPORT OUT= WORK.e
            DATAFILE= "C:\Documents and Settings\Administrator\My Docume
nts\My SAS Files\9.2\汇总表.xls"
            DBMS=EXCEL REPLACE;
     RANGE="周五$";
     GETNAMES=YES;
     MIXED=NO;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;
RUN;
data e;*e为周五组合数据,类似可以得到周四(d)周三(c)周二(b)周一(a)数据;
   set e;
   ret=(close-hs_close)/open;*ret为组合收益;
run;
......................
1.2导入沪深300指数日线数据并计算涨幅
PROC IMPORT OUT= WORK.hs
            DATAFILE= "C:\Documents and Settings\Administrator\My Docume
nts\My SAS Files\9.2\汇总表.xls"
            DBMS=EXCEL REPLACE;
     RANGE="sheet1$";
     GETNAMES=YES;
     MIXED=NO;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;
RUN;
data hs;
   set hs;
   ret1=dif(close_hs)/lag(close_hs);*ret为涨幅;
   date=input(compress(start),yymmdd10.);
   format date date9.;
   drop start;
 run;

1.3将沪深300指数数据与组合收益数据合并为一张表
%macro zhangfu(datafile);
proc sql noprint;
   create table hs_&datafile as
   select *
      from &datafile
   left join hs
      on &datafile..start=hs.date ;
quit;
%mend;
%zhangfu(a);%zhangfu(b);%zhangfu(c);%zhangfu(d);%zhangfu(e);

1.4利用2010年至今数据统计节假日收益情况,首先需要明确2010-2012期间的
   法定节假日情况,然后进行筛选出节假日前后开平仓的组合收益(节前7天内)
%macro holiday(datafiles);
data holiday_&datafiles ;
   set &datafiles;
  
   h_1 = '01jan2010'd ; 
   h_2 = '03jan2010'd ; 
   h_3 = '13feb2010'd ;
   h_4 = '19feb2010'd ;
   h_5 = '03apr2010'd ;
   h_6 = '05apr2010'd ;
   h_7 = '01may2010'd ;
   h_8 = '03may2010'd ;
   h_9 = '14jun2010'd ;
   h_10= '16jun2010'd;
   h_11= '22sep2010'd;
   h_12= '24sep2010'd;
   h_13= '01oct2010'd;
   h_14= '07oct2010'd;

   h_15= '01jan2011'd;
   h_16= '03jan2011'd;
   h_17= '02feb2011'd;
   h_18= '08feb2011'd;
   h_19= '03apr2011'd;
   h_20= '05apr2011'd;
   h_21= '30apr2011'd;
   h_22= '02may2011'd;
   h_23= '04jun2011'd;
   h_24= '06jun2011'd;
   h_25= '10sep2011'd;
   h_26= '12sep2011'd;
   h_27= '01oct2011'd;
   h_28= '07oct2011'd;

   h_29= '01jan2012'd;
   h_30= '03jan2012'd;
   h_31= '22jan2012'd;
   h_32= '28jan2012'd;
   h_33= '02apr2012'd;
   h_34= '02apr2012'd;
   h_35= '29apr2012'd;
   h_36= '01may2012'd;
   h_37= '22jun2012'd;
   h_38= '24jun2012'd;
   h_39= '30sep2012'd;
   h_40= '07oct2012'd;
  
   format h_: date9. ret percentn10.2;
  
 
   select ;
   when (abs(start - h_1) <7 )  output;
   when (abs(start - h_2) <7 ) output;
   when (abs(start - h_3) <7 ) output;
   when (abs(start - h_4) <7 ) output;
   when (abs(start - h_5) <7 ) output;
   when (abs(start - h_6) <7 ) output;
   when (abs(start - h_7) <7 ) output;
   when (abs(start - h_8) <7 ) output;
   when (abs(start - h_9) <7 ) output;
   when (abs(start - h_10) <7 ) output;
   when (abs(start - h_11) <7 ) output;
   when (abs(start - h_12) <7 ) output;
   when (abs(start - h_13) <7 ) output;
   when (abs(start - h_14) <7 ) output;

   when (abs(start - h_15) <7 ) output;
   when (abs(start - h_16) <7 ) output;
   when (abs(start - h_17) <7 ) output;
   when (abs(start - h_18) <7 ) output;
   when (abs(start - h_19) <7 ) output;
   when (abs(start - h_20) <7 ) output;
   when (abs(start - h_21) <7 ) output;
   when (abs(start - h_22) <7 ) output;
   when (abs(start - h_23) <7 ) output;
   when (abs(start - h_24) <7 ) output;
   when (abs(start - h_25) <7 ) output;
   when (abs(start - h_26) <7 ) output;
   when (abs(start - h_27) <7 ) output;
   when (abs(start - h_28) <7 ) output;

   when (abs(start - h_29) <7 ) output;
   when (abs(start - h_30) <7 ) output;
   when (abs(start - h_31) <7 ) output;
   when (abs(start - h_32) <7 ) output;
   when (abs(start - h_33) <7 ) output;
   when (abs(start - h_34) <7 ) output;
   when (abs(start - h_35) <7 ) output;
   when (abs(start - h_36) <7 ) output;
   when (abs(start - h_37) <7 ) output;
   when (abs(start - h_38) <7 ) output;
   when (abs(start - h_39) <7 ) output;
   when (abs(start - h_40) <7 ) output;
  
   otherwise delete;
   end;

   keep start end ret ret1;  
run;

%mend;
%holiday(hs_a);%holiday(hs_b);%holiday(hs_c);%holiday(hs_d);%holiday(hs_e);

1.4剔除节前节后的组合另存为新的数据
%macro noholiday(dataset1=,dataset2=);
proc sql noprint;
   create table noholiday_&dataset1 as
   select *
      from &dataset1
      where start not in
         (select start from &dataset2);
quit;
%mend;
%noholiday(dataset1=hs_a,dataset2=holiday_hs_a);
%noholiday(dataset1=hs_b,dataset2=holiday_hs_b);
%noholiday(dataset1=hs_c,dataset2=holiday_hs_c);
%noholiday(dataset1=hs_d,dataset2=holiday_hs_d);
%noholiday(dataset1=hs_e,dataset2=holiday_hs_e);

1.5将周一、周二、周三、周四、周五的数据合并为一张表,下面是对节假日数据的合并 

 ,noholiday(去节假日数据)hs_abcd(完整的数据)合并方法类似。
data holiday;*holiday系所有节前节后数据;
   set holiday_hs_a(in=a)
       holiday_hs_b(in=b)
       holiday_hs_c(in=c)
       holiday_hs_d(in=d)
       holiday_hs_e(in=e)
   ;
   if a=1 then group='周一';
   if b=1 then group='周二';
   if c=1 then group='周三';
   if d=1 then group='周四';
   if e=1 then group='周五';
run;

2.进行收益的描述性统计计算。
2.1proc means计算出常规统计,下面统计了节假日前后一周开仓的组合收益情况,其他 

 情况可以将holiday替换。
proc means data=holiday sum mean std max min;
   by group notsorted;
   var ret;
   class flag; 
   output out=holiday1;
run;

2.2统计组合收益分布比例情况
data test;
   set holiday;
   by end notsorted;
   if first.end then  cnt=1;
   else  cnt+1;
run;
proc format;
   value ret
            low - -0.05   =  '< -5%     '
            -0.05 - -0.02 =  '-5% ~ -2%'
     -0.02 - 0     =  '-2% ~ 0% '
     0 - 0.02      =  ' 0% ~ 2% '
     0.02 - 0.05   =  ' 2% ~5%  '
     0.05 - 0.10   =  ' 5% ~10% '
     other= ' >10% '
;
proc freq data=test;
   tables cnt*ret  ;
   format ret ret.;  
   ods output   CrossTabFreqs=need;

run;

抱歉!评论已关闭.