基于tushare中的数据用matlab绘制可行集
一、可行集是什么?
基于自己所选的股票,将所有可能投资组合的期望收益率和标准差的关系描绘在期望收益率-标准差坐标平面上。封闭曲线边界及其内部区域表示可行集,其边界上或边界内的每一点代表一个投资组合。
tushare ID:435084
二、代码实现
1.获取数据
代码如下(示例):
clear;clc
token = '数据接口';
api = pro_api(token);
start_date='20130101';%'end_date'= ''
mode= pro_bar('000905.SH', api, start_date, '', 'D', 'I');%指数数据,以指数日期为基准,对所选股票的的停牌日期收益率补0
ts_code={'000001.SZ';'000858.SZ';'600809.SH';'600519.SH';'600567.SH'};%这里任选五支股票
G_s=size(ts_code,1);df_daily=cell(1,G_s);%tushare调用出的数据为table类型,这里将数据全放入元胞数组种,方便循环调用
for i=1:G_s
df_daily{i}= api.query('daily', 'ts_code', ts_code{i}, 'start_date', start_date, 'end_date', '');
end
注:首先你需要在tushare中注册一个账号。Tushare大数据社区
2.数据处理
代码如下(示例):
mode1=sortrows([datenum(mode{:,2},'yyyymmdd'),mode{:,6}]);
Tick=cell(1,G_s);RetSeries=cell(1,G_s);RetIntervals=cell(1,G_s);
Method='Simple';
for i=1:G_s
Tick{i}=sortrows([datenum(df_daily{i}{:,2},'yyyymmdd'),df_daily{i}{:,6}]);%拿到时间序列和收盘价序列。考虑到tushare的数据是降序,为了使用tick2ret函数,要先用sortrows函数处理一下
end
for i=1:G_s
[RetSeries{i},RetIntervals{i}]=tick2ret(Tick{i}(:,2),Tick{i}(:,1),Method);%tick2ret将价格序列转换为收益率序列
end
for i=1:G_s
RetSeries{i}=buqi(mode1,[Tick{i}(:,1),[0;RetSeries{i}]]);%停盘收益率补零
end
for i=1:G_s
RetSeries{i}=RetSeries{i}(:,2);
end
R_S=cell2mat(RetSeries);
%停盘收益率补零,以指数数据为依托,把停盘时间收益率补为0
function [B]=buqi(a,b)%a大,b小,且a一定包含b
n=size(a,1);m=size(b,1);
b=[b;zeros(n-m,2)];
for i=1:n
if a(i,1)~=b(i,1)
b=[b(1:i-1,:);[a(i,1),0];b(i:end,:)];
%b=sortrows(b,-1);
end
end
b(n+1:end,:)=[];
B=b;
3.计算期望收益向量,收益率构成的协方差矩阵
ExpRet=mean(R_S);%投资组合中各项资产的期望收益向量
ExpCov=cov(R_S);%各项资产的收益率构成的协方差矩阵
%% 价格循环搞权重
num=100000;
PortRisk=zeros(1,num);PortReturn=zeros(1,num);u_y=zeros(1,num);u_x=zeros(1,num);u_y1=zeros(1,num);
for i=1:num
Wts1=rand(1,G_s);%各项资产权重G_s=5;
Wts2=Wts1./sum(Wts1);%随机数的和不唯一,除以和就为一了
[PortRisk(i),PortReturn(i)]=portstats(ExpRet,ExpCov,Wts2);%[资产组合收益的标准差,资产组合的期望收益]
4.绘制图形
plot(PortRisk,PortReturn,'.');
xlabel('资产组合收益的标准差')
ylabel('资产组合的期望收益')
title('可行集')
注: 可行集的图像会根据所选股票和循环次数有差异。
总结
以上就是绘制股票可行集的内容,本文简单介绍了用MATLAB和tushare中的数据来绘制可行集的方法。大致流程可总结为:求得投资组合中每只股票的期望收益和相应的收益率构成的协方差矩阵,再通过循环分配不同的权重,再结合portstats函数求得资产组合收益的标准差(图像横坐标),资产组合的期望收益(图像纵坐标)。