clear;clc
tic

%% 择时 配置 选股
%{
选择wind A 为基准因为,包含了全部28个行业
拆分出超额收益, 
择时是净暴露仓位,择时是判断 Pn

超额收益  Rs- Rb 择时体现在beta之中
 alpha + beta 就是超额收益

A 是万德全A收益率 ,Po 是设定的仓位是基准仓位

(情况1 只有多空时)超额利润 
 = Ps*rs - Po*A
 = Ps*rs -Ps*A+ Ps*A- Po*A
 = Ps(rs-A)+(Ps-Po)*a

%(Ps-Po)*a 代表择时能力

rs = Ws*Rs - Wi*Ri

Rs代表行业收益

Wi*Ri 申万 每个行业权重,每个行业收益

Wf*rf - Wi*Ri

(Wf*rf -Wf*Ri)+(  Wf*Ri- Wi*Ri)

Wf*(rf -Ri)+ (Wf - Wi)*Ri

Wf*(rf -Ri)   选股能力
(Wf - Wi)*Ri  配置能力

2.0 用沪深300 为基准 ,则权重,但是可用申万的编制规则,将300 分到申万的28个桶之中,其中 Ri 可以重新计算

3.0 以对冲为主要

Ps*rs - Ph*ri = alpha - beta

= Ps*rs - Ph*ri (-Po*ri1)
= Ph(rs- ri)+Pn*rs(-Po*ri1)
= Ph(Wf*rf - Wi*Ri)+Pn*rs(-Po*ri1)

Ph(Wf*rf - Wi*Ri) %  包含了择时和选股能力

Pn*rs(-Po*ri1)
Pn*rs - Pn*ri1 + Pn*ri1 - Po*ri1
Pn(rs - ri1) + (Pn- Po)*ri1

(Pn- Po)*ri1 体现了择时能力

Pn(rs - ri1)近似为Pn(rs - ri) 如果没有对冲,就看股票的范围。

中证 800 就是中证300 加中证500

重点 (1)万德全 A (2)中证300 (3)支持指数复权

%}

%% 母基金名称
ProName=['("母基金二期")'];%['("母基金二期","母基金三期","母基金四期")']
%% 连接数据库
conn=database('report','uxmc','uxmc-123', 'com.mysql.jdbc.Driver',...
    'jdbc:mysql://report001.mysql.rds.aliyuncs.com/report');
ping(conn);
%% 提取母基金代码
sql=sprintf('select productCode from product where productName in %s order by productCode',ProName);
cursorA=exec(conn,sql);
cursorA=fetch(cursorA);
FOFCode=cursorA.Data;
close(cursorA);
%% 提取母基金的equity值
foc= FOFCode{1,1}; %母基金名称
Index=['tradingday,productCode,equity'];
%sql=sprintf('select %s from account where productCode = %d',Index,foc);
sql=sprintf('select %s from account where productCode = %s order by tradingDay',Index,foc);
cursorA=exec(conn,sql);
cursorA=fetch(cursorA);
FOFequity=cursorA.Data;
close(cursorA);
%% 提取母基金所有股票和期货信息
FundCodeValue=eval(FOFCode{1});%cell转数值为母基金的代码    
Index=['tradingDay,instType,instrumentCode,productCode,marketValue,direction'];
sql=sprintf('select %s from positions_history where left(productCode,5)=%d order by tradingDay',Index,FundCodeValue);
cursorA=exec(conn,sql);
cursorA=fetch(cursorA);
allInst=cursorA.Data;
close(cursorA);
%% 保留‘600’、‘601’、‘603’、‘000’、‘002’和‘300’打头的股票部分
instType=allInst(:,2); 
instrumentCodeAll=allInst(:,3); 
x=find(strncmp(instrumentCodeAll,'600',3)|strncmp(instrumentCodeAll,'601',3)...
       |strncmp(instrumentCodeAll,'603',3)|strncmp(instrumentCodeAll,'000',3)...
       |strncmp(instrumentCodeAll,'002',3)|strncmp(instrumentCodeAll,'300',3)...
       |strcmp(instType,'期货')); %这个是找到x的位置数值
allInst=allInst(x,:);  
%% 排除商品期货部分
instType=allInst(:,2); 
instrumentCodeAll=allInst(:,3); 
x=find(strncmp(instrumentCodeAll,'IC',2)|strncmp(instrumentCodeAll,'IF',2)...
              |strncmp(instrumentCodeAll,'IH',2)|strcmp(instType,'股票'));
allInst=allInst(x,:);  
allInst(:,3)=strrep(allInst(:,3),'CFFEX','CFE');%'CFFEX'替换为'CFE',便于wind查询

%% 提取股票、股指期货的日收益率
instrumentCodeUni=unique(allInst(:,3));  %存储所有不重复的股票代码 
for i=1:1:length(allInst(:,1))
    dayAll{i,1}=allInst{i};              % 日期在第一列
end
dayUni=unique(dayAll);
%% 以上已经将母基金包含的信息全部得到了,下面先求子基金代码,
FundCodeValue=eval(FOFCode{1});%cell转数值为母基金的代码 ,数值转换  
Index=['productCode,accountType,parentProductCode'];
sql=sprintf('select %s from product where parentProductCode=%d ',Index,FundCodeValue);
cursorA=exec(conn,sql);
cursorA=fetch(cursorA);
Fundname=cursorA.Data;
close(cursorA);
%% 子基金运算  提取子基金的equity值
Fund = Fundname{1,1}; %子基金名称,这里仅仅是一个子基金,改行不改列
Index=['tradingday,productCode,equity'];
sql=sprintf('select %s from account where productCode = %s order by tradingDay',Index,Fund);
cursorA=exec(conn,sql);
cursorA=fetch(cursorA);
Fundequity=cursorA.Data;
close(cursorA);
%%
load('data0829/Rate.mat');
%%
%当a10 为 1 时候,基金没有数据,当不等于1时有数据
a10 = length(Fundequity);
%for j=1:168 %因为 rate表只到168 
    j=100;
    xday=Fundequity{j,1};
    Fundday = Fundequity(:,1);
    xf = find(strcmp(Fundday,xday));
    Funddayinfo=Fundequity(xf,:);    %xf 就是占位数目,同收益率 有关
    Fname = allInst(:,4);            %子基金
    xa=find(strncmp(Fname,Fund,10)); %某个子基金下的某日的股票和期货
    dayfdd=0;
    dayfkk=0;
    dayRateSf =0;
    tstockProp =0;
    tfutureProp =0;
    TsRate =0; 
    IIIrate=0;
    if ~isempty(xa)                 %判断是否有股票 期货
        alldayinfo=allInst(xa,:);   %可能里面有重复的
        eday = alldayinfo(:,1);     %全部日期
        xb=find(strcmp(eday,xday));
        onedayinfo02=alldayinfo(xb,:);
        xdx = xf;                   %xdx= find(strcmp(dayUni,xday))  通过dayUni 确定信息在rateTable的第几行 问题在这
%%     判断股票和期货是否存在
%%     股票类,收益率  求收益的时候是取得股票marketValue的总价值 allInst 中求得
        atype = '股票';
        ctype = onedayinfo02(:,2); 
        xc=find(strcmp(ctype,atype));
        dayStockValue =0;
        TsRate = 0;                 %当天的多股票累计收益率  
        if ~isempty(xc)       
            onedaystock=onedayinfo02(xc,:);  %利用这个onedaystock 找到所有当日收益率,列值
            aa= cell2mat(onedaystock(:,5));  % xday 从rateTable 可以找到相应的收益率,然后同股票的相乘 
            dayStockValue= sum(aa(:,1)); %股票就全加一下子,基金判断一下再加   
            for kt=1:length(aa)     %kt =1;%第一只股票
                yd= find(strcmp(instrumentCodeUni,onedaystock{kt,3}));

if ~isempty(yd)     %有些股票不在Rate.mat表中
                    sRate=rateTable(xdx,yd); %ook
                    if ~isnan(sRate) 
                       % TsRate=TsRate+sRate*onedaystock{kt,5}/Funddayinfo{1,3}; %此处是股票总值
                       TsRate=TsRate+sRate*onedaystock{kt,5}/dayStockValue;
                    end
                end % if ~isempty(yd)
            end
        end %length(xc)~=0 
    end

%end

%其中alldayinfo 中包含了 子基金张全部信息,说有所有这些天的
load('index_constituent.mat')
load('C:\Users\lenovo\Desktop\test\picktime\swRate.mat')
load('C:\Users\lenovo\Desktop\test\picktime\datafunda0001.mat')
load('C:\Users\lenovo\Desktop\test\picktime\data0829\Rate.mat')
%%
%多空
% Ps*(RS- A) 
% PS*(WF*RF-WF*RI+WF*RI-WI*RI) WI是计算出来的 RI 是拉取出来的。
%Ps*WF*(RF-RI)  是选股能力 算式是PS1*WF1*(RF1-RI1) 然后进行累加 28行业
%其中 WFI = T/F, 其中T 子基金中在某个行业下全部股票的市值,F 是子基金股票方面的市值
%其中RF1 是个组合收益率R1*A/T+R2*B/T+R3*C/T+....的
% WI 是通过计算得来的,通过index_weight 这个表
%通过index_weight构建一个行业包含表,28行,然后用行业包含的28同每个日股票做一个交集运算,然后计算学会用交集运算

%行业代码
swCode={ '801010.SI','801020.SI','801030.SI','801040.SI','801050.SI','801080.SI','801110.SI','801120.SI','801130.SI',...
    '801140.SI','801150.SI','801160.SI','801170.SI','801180.SI','801200.SI','801210.SI','801230.SI','801710.SI',...
    '801720.SI','801730.SI','801740.SI','801750.SI','801760.SI','801770.SI','801780.SI','801790.SI','801880.SI','801890.SI'};
%用来求得行业的收益率

sw= length(swCode);
newSW=[];
newSW= swCode;

for i=1:sw
    sw01= swCode{i};
    ctype = index_weight(:,5); 
    xc=find(strcmp(ctype,swCode{i}));
    if ~isempty(xc)
        onedaycode=index_weight(xc,:);
        %onedaycode 第二列 很有用,放到一个数组表中
        b = length(onedaycode);
        for j = 1:b
            p=j+1;
            newSW{p,i}= onedaycode{j,2};
        end
    end
end
%其中 newSW 就是股票归属列表。

%[apm,apn]= size(newSW);

% j= 100 ;
t= 4;                                              %第t行业中包含了几只股票
newSW01=cellfun(@isempty,newSW(:,t));
newxv=find(newSW01,'0');
newp = newxv(1);                                          %得出最后一位数目
newS= newp-1;
ap01 = [];
ap01= newSW(1:newS,t);
trade = intersect(ap01,onedaystock(:,3));            %第t行业中包含了几只股票

for i=1:168
i=10;
%index_weight 中包含行业权重和
%end

dataStr= ['300364.SZ',]

[w_wsd_data]=w.wsd('300364.SZ','ev,indexcode_wind','2016-06-21','2016-06-21','industryType=1')

配置 择时 sel stock相关推荐

  1. 择时 配置 选股 2016-9-12 图形正确

    %% %{only hate road when you miss home Ps 股票占比是第二列 Psf 股指期货占比是第三列 Rs 第四列 股票收益 Ri 第五列 指数收益,三个指数 Rsf 第 ...

  2. 择时 配置 选股0909

    clear;clc tic %% 择时 配置 选股 %{ 选择wind A 为基准因为,包含了全部28个行业 拆分出超额收益, 择时是净暴露仓位,择时是判断 Pn 超额收益  Rs- Rb 择时体现在 ...

  3. 量化择时策略入门与实操-笔记(同花顺金融量化实验室python实现)

    文字与代码来源:2022年第三届"大湾区杯"粤港澳金融数学建模竞赛在线讲座-6_哔哩哔哩_bilibili 目录 指数估值择时策略 指数轮动择时策略 基于风险平价模型的仓位管理策略 ...

  4. 还在对着一矩因择时不妨试二矩

    转 还在对着一阶矩做因子择时?不妨试试二阶矩 作者:石川,北京量信投资管理有限公司创始合伙人,清华大学学士.硕士,麻省理工学院博士:精通各种概率模型和统计方法,擅长不确定性随机系统的建模及优化.知乎专 ...

  5. 还在着阶做子择时不试二阶

    转 还在对着一阶矩做因子择时?不妨试试二阶矩 作者:石川,北京量信投资管理有限公司创始合伙人,清华大学学士.硕士,麻省理工学院博士:精通各种概率模型和统计方法,擅长不确定性随机系统的建模及优化.知乎专 ...

  6. quantrader和matlab不匹配,【Matlab量化投资】支持向量机择时策略

    原标题:[Matlab量化投资]支持向量机择时策略 感谢国泰安与本公众号合作 推出[Matlab量化投资系列] 机器学习 所谓机器学习,其实就是根据样本数据寻找规律,然后再利用这些规律来预测未来的数据 ...

  7. 中低频量化交易策略研发04_ 简单的择时策

    4.1 择时策略的基本框架 图 4.3 多分类的基本择时策略框架 4.2 均线趋势策略的简单优化 这里进行的优化,其实就是很简单的将所有参数的可能组合都测试一遍,然后选取整体收益最高的参数组合,这种方 ...

  8. 可转债量化系列之二:估值择时策略初探

    摘要 转债研究以估值为核心,周期波动受股票和债券的双重驱动 可转债的核心点在于研究其估值水平,其估值周期通常会受到正股和自身波动的多重影响,本文对于转债择时的研究从估值维度展开. (1)对于转债指标, ...

  9. 数据分析--布林带策略(择时)

    数据分析--布林带策略(择时) 布林带策略:原理是估计出一段时间(例如30日)的股价范围,超过上限会回落,低于下限会上涨. 布林带/布林线/保利加通道(Bollinger Band): 由三条轨道线组 ...

最新文章

  1. C#实现发送手机短信
  2. Kong 1.3发布,原生gRPC代理、上游TLS交叉认证
  3. 利用spi发送接收信息c语言,SPI接收发送函数程序
  4. PsotgreSQL
  5. 001-开发环境及其基本常识
  6. 项目日志 Log4cpp
  7. UCI数据集介绍(论文常用数据集)
  8. 卸载Microsoft Edge浏览器
  9. baidu.com 百度域名被劫持怎么办 baidu.yxsc33.com
  10. drain open 线与_整理:请教open drain应该怎么理解
  11. 软件测试工程师面试题之数据库
  12. 第3章--Linux内核及内核编程
  13. matlab 可视化界面,[转载]Matlab 的可视化界面设计(上)
  14. 我的世界圈服务器领地显示无效领地,我的世界领地圈地指令大全 Residence领地插件指令...
  15. DELTA台达电源维修DPS-400GB-1A服务器电源维修
  16. java 读取网页 获取内容导入到本地生成word 网页转word
  17. Python爬取游戏英雄皮肤图片 王者+LOL
  18. 警惕!练字时容易遇到的几大心态问题,看看你有哪些?
  19. 《剑指Offer》 二维数组的查找 C语言版本
  20. Java环境下用SM2或者RSA格式生成P10

热门文章

  1. 引发卡塔尔断交潮的“俄罗斯黑客”究竟有多牛?
  2. SQL 根据日期精确计算年龄
  3. 照片OCD问题,滑动窗口分类器,上限分析
  4. Dell R730服务器inter 500系列网卡与光模块不兼容**
  5. 关于部署OOS时出现的证书问题解决
  6. python编程学习笔记(三)
  7. 提高计算机软件速度的方法,提高电脑速度的10个有效方法
  8. winxp下用ssh控制 linux 服务器
  9. 如何批量抠图换背景?这两个方法可以做到
  10. 腾讯2018秋招笔试真题(1)