正文说过,如果做多一个证券的同时以正确的比例做空另一个同行业证券,组合(或“差价”)有时是一个平稳序列。平稳的时间序列是均值回归策略的绝佳候选。本例将教你如何从免费下载MATLAB工具包来检脸两个价格序列是否协整,以及如何找到最优的对冲比率(即第二个证券份数与第一个证券份数的比例)。
协整检验的主要方法是ADF检验,对应的函数名为cadf。对这一方法的详细描迷也可在上面说的网站上找到。
下面的程序同样可以从epchan.com/book/example7_2.m下载:
%清除空间已有变量
clear;
%读入“GLD. xls”到MATLAB.
[num.txt]=xlsread('GLD');
%第一列(从第二行开始)是交易日,格式为mm/dd/yyyy
tdayl=txt (2:end, 1);
%将时间格式转化为yyyymmdd
tdayl=…
datestr(datenu m (tdayl,'mm/dd/yyyy'),'yyyymmdd');
%将数据字符串转化为单元型变量,再转化为数值型变量
tdayl=str2double(cellstr(tdayl));
%最后一列是调整后的收盘价
adjclsl=num(:,end);
%读入”GDX.xls”到MATLAB.
[num2,txt2]=xlsread('GDX');
%第一列(从第二行开始)是交易日,格式为mm/dd/yyyy
tday2=txt2 (2:end,1);
%将时间格式转化为yyyymmdd
tday2=…
datestr (datenu m (tday2,'mm/dd/yyyy'),'yyyymmdd');
%将数据字符串转化为单元型变量,再转化为数值型变量
tday2=str2double (cellstr (tday2));
adjcls2=num2(:,end);
%找出GLD或GDX有数据的所有交易日
tday=union (tdayl,tday2);
[foo idx idxl]=intersect (tday, tdayl),
%将两个价格序列放到一起
adjcls=NaN(length Way),2);
adjcls (idx, 1)=adjclsl (idxl);
[foo idx idx2]=intersect (tday. tday2);
adjcls (idx. 2) =adjcls2 (idx2);
%有数据缺失的交易日
baddata=find (any(一 isfinite (adjcls),2));
tday (baddata)=[];
adjels (baddata,:)二[];
vnames=strvcat ('GLD','GDX');
%用ADF检脸执行协整检验
res=cadf (adjcls(:.1).adjcls(:,2).0.1);
prt (res, vnames);
%cadf函数的输出结果:
%两个变量的ADF检验:
%GLD,GDX
%CADF t-statistic #of lags AR (1) estimate
%一3.35698533 1 -0.060892
%
% 1%Crit Value 5%Crit Value 10% Crit Value
% -3.819 -3.343 -3.042
%t-统计蚤为-3.36,在1%临界值-3.819和5%临界值-3.343之间%意味着有两个时间序列是协整的概率超过95%
results=ols (adjcls(:,1),adjcls(:,2));
hedgeRatio=results.beta
z=results.resid;
%对冲比率为1.6766
%即GLD=1.6766,GDX+z,
%其中z是截距项,作为差价GLD-1.67GG * GDX,应该是平稳的
%画出的图同图7-4类似
plot (z);