用凯利公式计算最优配置
我们选取三只特定行业的ETF,来看看在它们之间如何进行资本配置,从而获得投资组合的最大增长率。这三只ETF是:OIH(原油服务),RKH(区域银行)和RTH(零售)。每日价格可从推虎财经下载,在epchan.com/book上保存的文件名为OIH.xls、RKH.xls和RTH.As。以下是检索这些文件并计算M、C和F*的MATLAB的MATLAB程序(epchan.com/book/example6_3.m)。
%清除以前定义的变量
clear;
%文件“OIH.xls”,读入MATLAB中
[numl,txtl]=xlsread('OIH');
%第一列(从第二行开始)是交易日期,格式为mm/dd/yyyy
tdayl=txtl(2:end,1);
%将日期格式转化为yyyymmdd.
tdayl=datestr(datenum(tdayl,'mm/dd/yyyy'),'yyyymmdd');
%将日期字符串先转化为单元格数组,然后转化为数值格式
tdayl=str2double(cellstr(tdayl));
%最后一列为调整后的收盘价格
adjclsl=numl(:,end);
%将文件”RKH.xls”读取到MATLAB中
[num2,txt2]=xlsread(’RKH’);
%第一列(从第二行开始)是交易日期,格式为mm/dd/yyyy
tday2=txt2(2:end,1);
%将日期格式转化为yyyymmdd.
tday2=…
estr(datenum(tday2,'mm/dd/yyyy').'yyyymmdd');
%将日期字符串先转化为单元格数组,然后转化为数值格式
tday2=str2double(cellstr(tday2));
adjcls2=num2(:,end);
%将文件”RKH.xls”读取到MATLAB中
[num3.txt3]=xlsread('RTH');
%第一列(从第二行开始)是交易日期,格式为mm/dd/yyyy
tday3=txt3(2:end,1);
%将日期格式转化为yyyymmdd.
tday3=…
datestr(datenum(tday3,'mm/dd/yyyy','yyyymmdd');
%将日期字符串先转化为单元格数组,然后转化为数值格式
tday3=str2double(cellstr(tday3));
adjcls3=num3(:,end);
%合并数据
tday=union(tdayl,tday2);
tday=union(tday.tday3);
adjcls=NaN(length(tday),3);
[fooidxlidx]=intersect(tdayl,tday);
adjcls(idx,1)=adjclsl(idxl);
[fooidx2idx]=intersect(tday2,tday);
adjcls(idx,2)=adjcls2(idx2);
[fooidx3idx]=intersect(tday3,tday);
adjcls(idx,3)=adjcls3(idx3);
ret=(adjcls-lagl(adjcls))./lagl(adjcls):%收益率
%找到收益率值缺失的日期
baddata=find(any(~isfinite(ret),2));
%去掉收益率值缺失的日期
ret(baddata,:)=[];
%超额收益率:假设年无风险利率4%
excessRet=ret一repmat(0.04/252,size(ret));
%写年平均超额收益率
M=252*mean(excessRet,1)’
%M=
%
0.1396
%0.0294
%-0.0073
C=252*cov(excessRet)写年协方差矩阵
%C=
%
%0.11090.02000.0183
%0.02000.03720.0269
%0.01830.02690.0420
F=inv(C)*M%凯利最优杠杆
%F=
%
%1.2919
%1.1723
%-1.4882
注意,RTH的平均超领收益率是负的,因此,凯利公式给出卖空建议也就不足为奇了。
你可能想知道使用这个最优配笠所产生的夏普比率和最大复合增长率是多少。多策咯高斯过程所对应的最大复合增长率为:
g(F')=r+F*TCF*/2
夏普比率为:
下面是计算这两个量的MATLAB程序:
%最大年化复合增长率
g=0.04+F'*C*F/2
%g=
% 0.1529
S=sgrt(F’*C*F)
%投资组合的夏普比率
%S=
%0.4751
注意,投资组合的复合增长率为15.29%,超过任一个单股的最大复合增长率。(经过验征你会发现,单期收益率最高的OIH,其复合增长率为12.78%。)
本文采摘于网络,不代表本站立场,转载联系作者并注明出处