2021-06-23

基于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函数求得资产组合收益的标准差(图像横坐标),资产组合的期望收益(图像纵坐标)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值