投资者都期望获取alpha,或称为超额收益。获取超额收益的主要方法之一就是轮动策略,简单而言就是在市场每个阶段都可以持有涨幅最优的资产,长此以往累计收益不可小觑。之前我们介绍《基金组合二八轮动策略回测Matlab源码》,这次接着是行业轮动策略。
何谓行业轮动?
在不同的经济周期,不同的行业盈利能力不一样的。行业通常分为非周期行业与周期行业,非周期行业代表就是食品与医药,这些都是刚性需求;周期行业的代表金融、地产与资源,这些企业的盈利受到价格的影响比较大,而且这些都并非刚性需求,所以在经济不景气的时候,资源的价格都是比较低的。所谓行业轮动,就是在不同的市场周期持有收益最优的行业资产,或许最大的潜在收益。当然,这个也仅仅是愿望,能否实现还靠投资能力与运气成分。
行业轮动策略逻辑?
为简化模拟,我们选取中证全指十个行业作为投资标的,,并假设现金资产收益率为0。数据采用2005-2017年十个行业的价格指数,PS价格指数并未考虑成分股分红情况。
观察前N个交易日十个行业指数的收益率,选取收益排名TOP3的行业作为备选持仓,若收益排名TOP3中有收益率为负,则该行业指数资产使用现金资产代替。持有三个行(或现金资产的)权重均为1/3。
回测结果如下:
(上图为组合累计净值与沪深300、中证500的比较,下图为:组合持仓 0:现金 1:全指能源 2:全指材料 3:全指工业 4:全指可选 5:全指消费 6: 全指医药 7:全指金融 8:全指信息 9:全指电信 10:全指公用)
程序与数据下载方法:,
1.关注“合晶睿智”(右上蓝色字体)
2.分享朋友圈并截图
3.发送截图+“行业轮动策略”(不需要引号)
机器人自动识别并回复您下载链接!
最后的说明:本文目的给大家提供一个行业轮动策略的思路与代码参考,并不代表老郑看好行业轮动或者二八轮动,这些都是为之后《玩赚指数基金》书籍编写提供素材内容。
持续学习是厚积薄发的必要条件:
行业轮动策略:code By ArisZheng
% 选取中证全指行业指数为投资标的(一级行业共十个),
% 投资组合每次持有三个行业(过去N个交易日涨幅最大的)
% 若备选行业收益小于零使用则持有现金资产替代
% 为简化计算假设现金资产收益率为0.0%
% 读取数据
[num,txt]=xlsread('IndexData.xlsx','行业轮动');
IndexData=num;
Date=datenum(txt(3:end,1));
IndexName=txt(2,2:end);
% 假设:N=10 持仓每10个交易日轮动一次
% 初始状态为空仓
N=10;
DataLength=length(IndexData);
%投资组合持仓 0:现金
% 1:全指能源 2:全指材料 3:全指工业 4:全指可选 5:全指消费
% 6: 全指医药 7:全指金融 8:全指信息 9:全指电信 10:全指公用
PortAsset=zeros(DataLength,3);
for i=N:N:DataLength
Return=IndexData(i,:)./IndexData(i-N+1,:)-1;
[val idx]=sort(Return,'descend');
tempPortAsset=zeros(1,3);
for j=1:3
if val(j)>0.0
tempPortAsset(j)=idx(j);
end
end
if i+N
for j=i+1:i+N
PortAsset(j,:)=tempPortAsset;
end
else
for j=i+1:DataLength
PortAsset(j,:)=tempPortAsset;
end
end
end
%根据持仓计算组合收益率
%假设资产收益率为三种资产收益率复合
%并且每三类资产的权重都为1/3
%PS:此处与实际情况不符合,资产权重受到资产价格变化的影响
PortReturn=zeros(DataLength,1);
for i=1:DataLength
PortReturn(i)=0.0;
for j=1:3
if PortAsset(i,j)>0
PortReturn(i)=PortReturn(i)+1/3*...
(IndexData(i,PortAsset(i,j))/IndexData(i-1,PortAsset(i,j))-1);
else
PortReturn(i)=PortReturn(i)+1/3*0.0;
end
end
end
%根据收益率计算净值
PortNav=zeros(DataLength,1);
PortNav(1)=1.00;
for i=2:DataLength
PortNav(i)= PortNav(i-1)*(1+PortReturn(i));
end
%绘制图形
[num,txt]=xlsread('IndexData.xlsx','二八轮动');
HS300=num(:,1);
CSI500=num(:,2);
figure;
subplot(2,1,1)
plot(Date,HS300./1000,'k'); hold on
plot(Date,CSI500./1000,':k');
plot(Date,PortNav,'r');
dateaxis('x',2);
legend('沪深300','中证500','行业轮动')
subplot(2,1,2)
plot(Date,PortAsset(:,1),'b'); hold on
plot(Date,PortAsset(:,2),'r');
plot(Date,PortAsset(:,3),'k');
dateaxis('x',2);
legend('组合持仓 0:现金 1:全指能源 2:全指材料 3:全指工业 4:全指可选 5:全指消费 6: 全指医药 7:全指金融 8:全指信息 9:全指电信 10:全指公用')
勤劳的老郑,最近以码字维生
打赏与购书请点击原文链接!