clear;
clc;
% [ROE_total,Stock_list]=xlsread('roe扣非');
% PE_total=xlsread('PE ttm');
% ROA_total=xlsread('ROA');
% PB_total=xlsread('PB值');
load PE_total;
load PB_total;
load ROA_total;
load ROE_total;
load Stock_list;
w=windmatlab;
%下载交易日数据
[~,~,~,trade_day,~,~]=w.wsd('000001.SZ','close','2005-12-01','2015-12-31','Period=Q','Fill=Previous');
N=length(trade_day);
Retr_simple=zeros(N-1,1);
Retr_weighted=zeros(N-1,1);
for ii=1:N-1;
ii
if ii==1;
date='20060104';
date_previous='20050930';
date_next='20060331';
else
date=datestr(trade_day(ii),'yyyymmdd');
date_previous=datestr(trade_day(ii-1),'yyyymmdd');
date_next=datestr(trade_day(ii+1),'yyyymmdd');
end
%下载股票名单
download_code = strcat('date=',date,';sectorId=a001010100000000;field=wind_code');
[a_share_list,~,~,~,~,~]=w.wset('SectorConstituent',download_code);
%下载基础数据:行业分类,流通股市值
[ev,~,~,~,~,~]=w.wsd(a_share_list,'ev',date,date);
[Industry_code,~,~,~,~,~]=w.wsd(a_share_list,'industry_gicscode',date,date,'industryType=1');
%将股票分为金融股和非金融股
Financial_stock_list={};p=1;
Finacial_stock_ev=[];
Non_financial_stock_list={};q=1;
Non_finacial_stock_ev=[];
N_stock=length(a_share_list);
for i=1:N_stock;
if ~isnan(ev(i))
if strcmp(Industry_code{i},'40');
Financial_stock_list{p,1}=a_share_list{i};
Finacial_stock_ev(p,1)=ev(i);
p=p+1;
else
Non_financial_stock_list{q,1}=a_share_list{i};
Non_finacial_stock_ev(q,1)=ev(i);
q=q+1;
end;
end;
end;
%非金融股ROE及PE下载;
% [ROE,~,~,~,~,~]=w.wsd(Non_financial_stock_list,'roe_exdiluted',date_previous,date_previous,'Period=Q');
% [PE,~,~,~,~,~]=w.wsd(Non_financial_stock_list,'pe_ttm',date,date,'Period=Q');
% %挑选出数据完整的股票
% Effective_code=[];p=1;
% for i=1:length(Non_financial_stock_list);
% if ~isnan(ROE(i)) && ~isnan(PE(i)) && ROE(i)>0 && PE(i)>0 && PE(i)<200;
% Effective_code(p,1)=i;
% p=p+1;
% end;
% end;
% Effective_non_financial_stock_list={};
% for i=1:length(Effective_code);
% Effective_non_financial_stock_list{i,1}=Non_financial_stock_list{Effective_code(i),1};
% end
% ROE=ROE(Effective_code,1);
% PE=PE(Effective_code,1);
% Non_finacial_stock_ev=Non_finacial_stock_ev(Effective_code,1);
Effective_non_financial_stock_list={};
ROE=[];
PE=[];
Effective_non_finacial_stock_ev=[];
pp=1;
N_nonfinancial_stock=length(Non_financial_stock_list);
for i=1:N_nonfinancial_stock;
stock_name=Non_financial_stock_list{i,1};
A=ismember(Stock_list,stock_name);
stock_code=find(A==1);
if ~isempty(stock_code) && ~isnan(ROE_total(stock_code,42-ii)) && ~isnan(PE_total(stock_code,41-ii)) && PE_total(stock_code,41-ii)>0;
ROE(pp,1)=ROE_total(stock_code,42-ii);
PE(pp,1)=PE_total(stock_code,41-ii);
Effective_non_finacial_stock_ev(pp,1)=Non_finacial_stock_ev(i,1);
Effective_non_financial_stock_list{pp,1}=Non_financial_stock_list{i,1};
pp=pp+1;
end;
end;
% 按照ROE以及PE排序
[Ranked_ROE,~]=sort(ROE,'descend');
[Ranked_PE,~]=sort(PE);
rank_ROE=paiming(Ranked_ROE,ROE);
rank_PE=paiming(Ranked_PE,PE);
rank=rank_ROE+rank_PE;
[~,target_code]=sort(rank);
target_code=target_code';
%挑选综合排名前30的股票
target_code=target_code(1:30,1);
Non_financial_target_stock_list={};
Non_financial_target_stock_ev=[];
for i=1:30;
Non_financial_target_stock_list{i,1}=Effective_non_financial_stock_list{target_code(i,1),1};
Non_financial_target_stock_ev(i,1)=Effective_non_finacial_stock_ev(target_code(i,1),1);
end;
% 下载股票价格
[open_price_non_financial,~,~,~,~,~]=w.wsd(Non_financial_target_stock_list,'close',date,date,'Fill=Previous','PriceAdj=F');
[close_price_non_financail,~,~,~,~,~]=w.wsd(Non_financial_target_stock_list,'close',date_next,date_next,'Fill=Previous','PriceAdj=F');
%金融股数据下载
Effective_financial_stock_list={};
ROA=[];
PB=[];
Effective_finacial_stock_ev=[];
qq=1;
N_financial_stock=length(Financial_stock_list);
for i=1:N_financial_stock;
stock_name=Financial_stock_list{i,1};
A=ismember(Stock_list,stock_name);
stock_code=find(A==1);
if ~isempty(stock_code) && ~isnan(ROA_total(stock_code,42-ii)) && ~isnan(PB_total(stock_code,41-ii));
ROA(qq,1)=ROA_total(stock_code,42-ii);
PB(qq,1)=PB_total(stock_code,41-ii);
Effective_finacial_stock_ev(qq,1)=Finacial_stock_ev(i,1);
Effective_financial_stock_list{qq,1}=Financial_stock_list{i,1};
qq=qq+1;
end;
end;
% 按照PB ROA排序
[Ranked_ROA,~]=sort(ROA,'descend');
[Ranked_PB,~]=sort(PB);
rank_ROA=paiming(Ranked_ROA,ROA);
rank_PB=paiming(Ranked_PB,PB);
rank=rank_ROA+rank_PB;
[~,target_code]=sort(rank);
target_code=target_code';
%挑选综合排名前30的股票
target_code=target_code(1:30,1);
Financial_target_stock_list={};
Financial_target_stock_ev=[];
for i=1:30;
Financial_target_stock_list{i,1}=Effective_financial_stock_list{target_code(i,1),1};
Financial_target_stock_ev(i,1)=Effective_finacial_stock_ev(target_code(i,1),1);
end;
% 下载股票价格
[open_price_financial,~,~,~,~,~]=w.wsd(Financial_target_stock_list,'close',date,date,'Fill=Previous','PriceAdj=F');
[close_price_financial,~,~,~,~,~]=w.wsd(Financial_target_stock_list,'close',date_next,date_next,'Fill=Previous','PriceAdj=F');
% 计算return
% 等权
c=0.0003;
retr_non_financial_simple=mean((close_price_non_financail-open_price_non_financial)./open_price_non_financial)-c;
retr_financial_simple=mean((close_price_financial-open_price_financial)./open_price_financial)-c;
retr_simple=(retr_financial_simple+retr_non_financial_simple)/2;
Retr_simple(ii,1)=retr_simple;
%加权
open_price=[open_price_non_financial;open_price_financial];
close_price=[close_price_non_financail;close_price_financial];
Target_ev=[Non_financial_target_stock_ev;Financial_target_stock_ev];
Weight=Target_ev/sum(Target_ev);
stock_number=Weight./open_price;
retr_weighted=stock_number'*close_price-1-c;
Retr_weighted(ii,1)=retr_weighted;
end
%%收益计算:
%净值曲线
% 等权
N=length(Retr_simple);
Net_asset_simple=zeros(N+1,1);
Net_asset_simple(1,1)=1;
for i=2:N+1;
Net_asset_simple(i)=Net_asset_simple(i-1)*(1+Retr_simple(i-1));
end;
plot(Net_asset_simple)
%加权
N=length(Retr_weighted);
Net_asset_weighted=zeros(N+1,1);
Net_asset_weighted(1,1)=1;
for i=2:N+1;
Net_asset_weighted(i)=Net_asset_weighted(i-1)*(1+Retr_weighted(i-1));
end;
plot(Net_asset_weighted)
% Sharpe ratio
Sharpe_simple=mean(Retr_simple)/std(Retr_simple)*2;
Sharpe_weighted=mean(Retr_weighted)/std(Retr_weighted)*2;
%最大回测
[Max_traceback_simple,~,~]=Max_withdraw(Net_asset_simple);
[Max_traceback_weighted,~,~]=Max_withdraw(Net_asset_weighted);
% 年化收益
yield_simple=mean(Retr_simple)*4;
yield_weighted=mean(Retr_weighted)*4;
PITCHING.rar_Matlab 回测_backtesting_回测_股
版权申诉
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
![avatar](https://profile-avatar.csdnimg.cn/a64d28507aff44a1a968cd823e7c3cbe_weixin_42665255.jpg!1)
寒泊
- 粉丝: 76
- 资源: 1万+
最新资源
- TencentVideo_V8.11.01.28562_10124.apk
- 洗衣机VHDL控制器实验报告洗衣机VHDL控制器实验报告
- Redis是一个高性能的键值对数据库,它支持多种数据结构,如字符串、列表、集合、有序集合和哈希表 以下是一些Redis命令的实
- indy10.0.52-d7
- Redis是一个高性能的键值对数据库,它支持多种数据结构,如字符串、列表、集合、有序集合和哈希表 以下是一些Redis命令的实践
- redis命令实践 redis命令实践
- REDIS常用命令操作(带截屏)
- 计算机视觉+图片拼接+图片分割
- 逐飞串口助手-示波器使用
- Verilog实现的智能物流仓储移动机器人芯片(源码+报告)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
评论1