




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何运用QIA开发量化投资策略
——回归法多因子策略国泰安信息技术有限公司
研究与创新中心“宽系列”产品之QIA目录策略背景13绩效分析4策略开发2第1页量化投资策略开发实例历史回验策略背景——策略原理回归法多因子策略就是用过去的股票的收益率对多因子进行回归,得到一个回归方程,然后把最新的因子值代入回归方程得到一个对未来股票收益的预判,最后以此为依据进行选股。回归法的优点是能够比较及时地调整股票对各因子的敏感性,而且不同的股票对不同的因子的敏感性也可以不同。回归法的缺点是容易受到极端值的影响,在股票对因子敏感度变化较大的市场情况下效果也比较差。本策略的实证对象为所有沪深300成分股,以2013年2月22日至2013年5月20日为回验周期,利用过去22天内所有风险因子和收益率作为决策依据,根据预期收益率大小对前50组最大的做多,后50组最小的做空。第2页量化投资策略开发实例策略背景——策略原理
因子回报计算采取横截面回归(Cross-SectionalRegression)的方法:
y——股票的超额收益率X——回归系数
f——因子回报——残差注:
1)为了区别大市值股票和小市值股票,对原来的样本进行加权,权重由流通市值来决定。2)为了消除异常值的影响,采取稳健回归的方法。第页多因子模型的优点反应迅速:多因子模型可以对股票的特征变化快速进行反应。股票因子取值的变化很快就能反映在其估计的波动率上。模型稳健:多因子风险控制模型稳健、可解释性强。因子间的关系相对于股票间关系更加稳定估计误差小:多因子模型通过将股票的收益进行分解,减少了参数,估计相对稳定,所需历史数据较短,更能反映投资组合当前的风险状况。如:N只股票k个因子,仅需估计k(k+1)/2+N个参数。如,500只股票34个因子,初等模型需估计125250个参数,多因子模型仅需估计1078个参数。可扩展性强:可以推广至多个地区(大陆、美国等)、多个品种(股票、债券、期货等)第页策略背景——策略流程第3页量化投资策略开发实例策略开发策略配置StrategyCfg.xmlStkcd.xml编写主程序factors.m回验配置BackTestCfg.xml绩效分析对策略函数的名称、参数、时间、交易标的及所需数据的配置策略流程的实现对策略回验参数、交易品种交易费用、绩效指标的数据参数的配置第4页量化投资策略开发实例命令窗口运行界面工具运行Stkcd.xml配置<?xmlversion="1.0"encoding="utf-8"?><Strategy><codeContractMultiplier=""Currency="CNY"MarginLevel="1"MaxShare=""exchangeType=""id="HS300"name="沪深300成分股"/></Strategy>
每个code标签下,ContractMultiplier、Currency、MarginLevel、MaxShare、为实时交易部分配置,历史回验设置无效。ContractMultiplier:合约乘数Currency:货币种类MarginLevel:交易保证金比例MaxShare:当前合约的最大持仓量exchangeType表示市场类型枚举id:交易标的代码第5页市场类型枚举SZSE深圳证券交易所SSE上海证券交易所HKEX香港联合交易所CFFEX中国金融期货交易所ZCE郑州期货交易所DCE大连期货交易所SHFE上海期货交易所策略开发——交易标的配置%Stkcd.xml名字可更换量化投资策略开发实例StrategyCfg.xml配置<?xmlversion="1.0"encoding="utf-8"?><Strategy><strategyFunctionname="Factors"/><strategyArguments
rebalanceCycle="1"returnCalFrequency="TimeIntervals.DAY01"/><FactorDataCfg
dateListType="DateListType.Trading"localPath=“pwd\cacheData"periodType="PeriodType.StockTradingPeriod"tickerList="stkcd.xml"/><data
decisionDataLength="22"fieldname="QF_MonthlyReturnWNCDR"frequency="TimeIntervals.DAY01"/>……
<data
decisionDataLength="22"fieldname="QF_EPSF"frequency="TimeIntervals.DAY01"/><data
decisionDataLength="22"fieldname="Rtn"frequency="TimeIntervals.DAY01"/></Strategy>第6页策略开发——策略运行配置全景展示量化投资策略开发实例策略开发——函数名称及调仓配置StrategyCfg.xml配置<?xmlversion="1.0"encoding="utf-8"?><Strategy><strategyFunctionname=“factors"/><strategyArguments
rebalanceCycle="1"returnCalFrequency="TimeIntervals.DAY01"/>标签strategyFunction(用途:用户编写的策略函数名称):name填入策略函数名。标签strategyArguments(用途:策略的参数配置):rebalanceCycle:重平衡周期,策略回验时,每过rebalanceCycle根bar将进行一次投资决策,计算目标目标持仓。Bar的大小取决于returnCalFrequency;returnCalFrequency:计算收益率的频率第7页量化投资策略开发实例%StrategyCfg.xml名字可更换策略开发——策略数据及缓存配置StrategyCfg.xml配置<FactorDataCfg
dateListType="DateListType.Trading"localPath=“localPath"periodType="PeriodType.StockTradingPeriod"tickerList="stkcd.xml"/>标签FactorDataCfg(用途:策略的时间及标的配置)dateListType:表示日期类型:Trading,交易日;Working,工作日;localPath:本地Mat缓存文件的存储路径(绝对路径),Matlab中,pwd表示当前的工作空间路径;periodType:交易时间配置信息;tickerList:表示读取的证券代码列表,可以是定义交易标的的xml文件路径名称,也可以是板块,支持的板块列表有:(’AllAStock,’SHA’,’SZA’,’AllBStock’,’SHB’,’SZB’,’HS300’)第8页量化投资策略开发实例%StrategyCfg.xml名字可更换<data
decisionDataLength="22"fieldname="QF_MonthlyReturnWNCDR"frequency="TimeIntervals.DAY01"/>……<data
decisionDataLength="22"fieldname="QF_EPSF"frequency="TimeIntervals.DAY01"/><data
decisionDataLength="22"fieldname="Rtn"frequency="TimeIntervals.DAY01"/></Strategy>标签data(用途:策略决策所需数据配置)策略决策时每需要一种数据,则需要配置一个data标签decisionDataLength:每次策略函数计算目标持仓权重时所需的改数据长度,必须为大于等于1的整数;fieldname:数据的字段名;frequency:数据的频率,有SEC01(1秒),SEC05(5秒),SEC15(15秒),SEC30(30秒),MIN01(1分),MIN05(5分),MIN15(15分),DAY01(1天);第9页策略开发——策略数据配置量化投资策略开发实例StrategyCfg.xml配置<?xmlversion="1.0"encoding="utf-8"?><Strategy><strategyFunctionname="Factors"/><strategyArguments
rebalanceCycle="1"returnCalFrequency="TimeIntervals.DAY01"/><FactorDataCfg
dateListType="DateListType.Trading"localPath=“localPath"periodType="PeriodType.StockTradingPeriod"tickerList="stkcd.xml"/><data
decisionDataLength="22"fieldname="QF_MonthlyReturnWNCDR"frequency="TimeIntervals.DAY01"/>……<data
decisionDataLength="22"fieldname="QF_EPSF"frequency="TimeIntervals.DAY01"/><data
decisionDataLength="22"fieldname="Rtn"frequency="TimeIntervals.DAY01"/></Strategy>第10页策略开发——策略运行配置全景展示量化投资策略开发实例策略开发——主程序第11页function[portfolio,newStateMatrix]=factors(tradingData,stateMatrix)输入:
1、decisionData:结构体,存储策略决策所需数据;
(1)decisionData.time:策略决策的时间(2)decisionData.varList:策略决策所需数据的名称列表;
(3)decisionData.factorN_frequency:策略决策所需数据结构体
(4)decisionData.factorN_frequency.data:策略决策所需数据矩阵;
(5)decisionData.factorN_frequency.timeList:矩阵的列索引,表示矩阵中每列代表的时间点;
(6)decisionData.factorN_frequency.tickerList:矩阵的行索引,表示矩阵中每列代表的交易标的;2、stateMatrix:策略函数上次存储的状态信息;输出:1、portfolio:策略函数经过运算后得到的,目标投资组合资金权重序列,维度必须和订阅的交易标的数目相同;量化投资策略开发实例策略开发——数据提取%变量赋值
fori=1:size(tradingData.varList,1)eval([tradingData.varList{i},'=','tradingData.',tradingData.varList{i},'.data;']);
end
%初始化处理
portfolio=zeros(size(tradingData.(tradingData.varList{1}).data,1),1);
%回归数据处理,Y为沪深300成分股前一天的收益率数据,X为之前第22天的因子数据
%利用上月末的因子与本月末的收益率进行横截面回归得到因子回报系数;Y=Rtn_DAY01(:,end-1);
));%300*16矩阵,16个因子
X=NaN(size(Rtn_DAY01,1),(size(tradingData.varList,1)-2;
i=1;
forj=1:(size(tradingData.varList,1))
ifstrcmp(tradingData.varList{j},'CP_DAY01')~=1&&strcmp(tradingData.varList{j},'Rtn_DAY01')~=1x=eval(tradingData.varList{j});X(:,i)=x(:,1);i=i+1;
end
end第12页量化投资策略开发实例策略开发——建立开平仓依据stats=regstats(Y,X);%横截面回归,忽略空置b=stats.beta;b=b(2:end);b_order=find(abs(b)<2);%若因子回报系数绝对值大于2则认为是极端值,剔除该因子;R=X(:,b_order)*b(b_order);%回归系数乘月末因子的值得到预期收益率[~,R_s]=sort(R);portfolio(R_s(end-50+1:end))=1/50;%大的50组做多portfolio(R_s(1:50))=-1/50;%小的50组做空
%状态矩阵重新赋值newStateMatrix=stateMatrix;end第13页量化投资策略开发实例策略开发——主程序整体展示function[portfolio,newStateMatrix]=factors(tradingData,stateMatrix)%%%回归法多因子策略(实例3.2.3)%变量赋值
fori=1:size(tradingData.varList,1)eval([tradingData.varList{i},'=','tradingData.',tradingData.varList{i},'.data;']);
end
%初始化处理portfolio=zeros(size(tradingData.(tradingData.varList{1}).data,1),1);
%回归数据处理,Y为沪深300成分股前一天的收益率数据,X为之前第22天的因子数据
%利用上月末的因子与本月末的收益率进行横截面回归得到因子回报系数;Y=Rtn_DAY01(:,end-1);X=NaN(size(Rtn_DAY01,1),(size(tradingData.varList,1)-2));%300*16矩阵,16个因子i=1;
forj=1:(size(tradingData.varList,1))if
strcmp(tradingData.varList{j},'CP_DAY01')~=1&&strcmp(tradingData.varList{j},'Rtn_DAY01')~=1x=eval(tradingData.varList{j});X(:,i)=x(:,1);i=i+1;
end
end
stats=regstats(Y,X);%横截面回归,忽略空置b=stats.beta;b=b(2:end);b_order=find(abs(b)<2);%若因子回报系数绝对值大于2则认为是极端值,剔除该因子;R=X(:,b_order)*b(b_order);%回归系数乘月末因子的预期收益率[~,R_s]=sort(R);portfolio(R_s(end-50+1:end))=1/50;%大的50组做多portfolio(R_s(1:50))=-1/50;%小的50组做空
%状态矩阵重新赋值newStateMatrix=stateMatrix;end第14页量化投资策略开发实例策略开发——回验配置全景展示BackTestCfg.xml配置<?xmlversion="1.0"encoding="utf-8"?><BackTest><backtestArgumentsactionDelay="1"orgidMode="all"repoFrequency="DAY01"reportDisplay="On"resultSave="On"/>
<transactionCostbuy="0.00005"securityType="SecurityType.StockA"sell="0.00005"/><transactionCostbuy="0.00005"securityType="SecurityType.StockB"sell="0.00005"/>……<performanceAnalysisDatacode=""funName="modifiedSharpRatio"name="alpha"value="0.05"/><performanceAnalysisDatacode="000300"funName="CorrWithMarket"name="CSI300Rtn"value=""/><performanceAnalysisFundispName="日平均收益率"funName="averageSimpleRateOfReturn"/><performanceAnalysisFundispName="累积简单收益率"funName="cumsumSimpleReturn"/>……<performanceAnalysisFundispName="修正的夏普比率"funName="modifiedSharpRatio"/><benchmarkcode="000300"name="benchmark"/></BackTest>第15页量化投资策略开发实例策略开发——回验配置BackTestCfg.xml配置<?xmlversion="1.0"encoding="utf-8"?><BackTest><backtestArguments
actionDelay="1"orgidMode="all"repoFrequency="DAY01"reportDisplay="On"resultSave="On"/>标签backtestArguments(用途:策略回验的参数配置)actionDelay:交易延迟,策略从投资决策到通过交易生成持仓的延迟。必须为非负整数。比如actionDelay为2,returnCalFrequency为1,returnCalFrequency为TimeIntervals.SEC05,将会以决策时点2*5=10秒后的价格成交;orgidMode:由交易代码转为orgid的模式。(注意:对于股票而言,同一交易代码可能由于借壳上市等原因,随着时间区间不同,其意义会发生变化,系统后台会将交易代码转为orgid——对股票而言,以公司作为证券关联对象的唯一码。)对股票而言,如果用户输入all,系统将会订阅回验区间内使用过该交易代码的所有行情,通过orgid进行区分,同样,通过orgid区分策略函数返回的持仓权重序列;如果用户输入latest,则系统会订阅最新使用该交易代码的行情,同样通过orgid区分。如果交易代码列表中不存在股票标的,则不用考虑该属性;第16页量化投资策略开发实例策略开发——回验配置<?xmlversion="1.0"encoding="utf-8"?><BackTest><backtestArgumentsactionDelay="1"orgidMode="all"repoFrequency="DAY01"reportDisplay="On"resultSave="On"/>标签backtestArguments(用途:策略回验的参数配置)repoFrequency:债券的回购频率。支持DAY01(每日回购)和DAY07(每七日回购)两个枚举。系统将会据此获取债券的杠杆费用。注意:当交易代码列表不存在债券标的时,则不用考虑该属性;reportDisplay:excel绩效报表展示开关,当设为On的时候,策略回验结束后会显示策略绩效的excel绩效报告;设为其他值时则不会打印;resultSave:excel绩效报表保存开关,当设为On的时候,策略回验结束后会被保存;设为其他值时则不会打印;第17页量化投资策略开发实例
<transactionCost
buy="0.00005"securityType="SecurityType.StockA"sell="0.00005"/><transactionCostbuy="0.00005"securityType="SecurityType.StockB"sell="0.00005"/>第18页品种的枚举类型securityTypeStockAA股StockBB股Index指数Fund基金Bond债券CommodityFuture商品期货IndexFuture
指数期货标签transactionCost(用途:按品种配置交易费用)
每配置一个品种需要增加一个标签,需要按买入和卖出分别配置交易费用。buy:该品种买入的交易费用比例;securityType:品种的枚举类型;sell:该品种卖出的交易费用比例;策略开发——回验配置量化投资策略开发实例
<performanceAnalysisDatacode=""funName="modifiedSharpRatio"name="alpha"value="0.05"/><performanceAnalysisDatacode="000300"funName="CorrWithMarket"name="CSI300Rtn"value=""/>第19页标签performanceAnalysisData(用途:策略绩效指标的数据参数配置)
计算绩效指标所需数据目前只支持指数收益率,且策略的简单收益率序列不需要配置,系统会自动传入到每个绩效评价函数中。code:如果评价指标计算需要指数收益率,属性值为指数代码,比如计算特雷诺指数需要沪深300收益率,则填写000300;如果填’’,认为该标签描述的是评价指标的参数,value的值不能为空;funName:计算绩效指标的函数名称,必须和performanceAnalysisFun标签中的函数名相对应;name:指标名称,绩效评价函数以此作为域名解析数据;value:如果该标签描述的是绩效函数的参数,则code为’’,而value不能为空。策略开发——回验配置量化投资策略开发实例
<performanceAnalysisFundispName="日平均收益率"funName="averageSimpleRateOfReturn"/><performanceAnalysisFundispName="累积简单收益率"funName="cumsumSimpleReturn"/>……<performanceAnalysisFundispName="修正的夏普比率"funName="modifiedSharpRatio"/><benchmarkcode="000300"name="benchmark"/></BackTest>标签performanceAnalysisFun(用途:策略绩效指标)dispName:策略绩效函数显示在excel绩效报告中的名称;funName:策略绩效函数名称,系统将会寻找同名的函数计算策略绩效并生成报表。标签benchmark(用途:excel报表中的基准收益率)code:指数的代码。第20页策略开发——回验配置量化投资策略开发实例策略开发——回验配置全景展示BackTestCfg.xml配置<?xmlversion="1.0"encoding="utf-8"?><BackTest><backtestArgumentsactionDelay="1"orgidMode="all"repoFrequency="DAY01"reportDisplay="On"resultSave="On"/>
<transactionCostbuy="0.00005"securityType="SecurityType.StockA"sell="0.00005"/><transactionCostbuy="0.00005"securityType="SecurityType.StockB"sell="0.00005"/>……<performanceAnalysisDatacode=""
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论