专栏名称: 合晶睿智
FOF 金融产品 量化投资
目录
相关文章推荐
第一财经  ·  跌跌跌...... ·  17 小时前  
第一财经  ·  涨涨涨!今日情绪指数来了 ·  昨天  
51好读  ›  专栏  ›  合晶睿智

行业轮动策略回测Matlab程序源码

合晶睿智  · 公众号  · 财经  · 2017-04-12 07:38

正文

投资者都期望获取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:全指公用')


勤劳的老郑,最近以码字维生

打赏与购书请点击原文链接!