1、“宽系列”产品之QIA第 1 页量化投资策略开发实例第 2 页量化投资策略开发实例 投资者持有一篮子股票组合,为了对冲该股票组合的风险从而锁定目标收益,欲卖空期货进行套期保值时,可使用此策略。v 套期保值的基本原理是某一金融产品的期货与现货受相同因素的制约和影响,因此,他们的变动趋势大体相同。另外,期货价格与现货价格的走势具有收敛性,尤其是当期货合约临近到期日时,期货价格和现货价格将会逐渐趋同。v 本策略通过传统的简单回归(OLS)模型和一般自回归条件异方差(GRACH)模型两种方式,根据最小风险套期保值原理来计算套期保值比。本策略的实证对象为沪深300成分股和IF1305,以2013年4月1
2、8日至2013年5月15日为回验周期,利用过去30天内对数收益率数据作为决策依据,对日频数据交易。第 3 页量化投资策略开发实例第 4 页量化投资策略开发实例第5页量化投资策略开发实例Stkcd.xml配置配置 每个code标签下,ContractMultiplier、Currency、MarginLevel、MaxShare、为实时交易部分配置,历史回验设置无效。ContractMultiplier:合约乘数Currency:货币种类MarginLevel:交易保证金比例MaxShare:当前合约的最大持仓量exchangeType 表示市场类型枚举id:交易标的代码第 6 页市场类型枚举S
3、ZSE深圳证券交易所SSE上海证券交易所HKEX香港联合交易所CFFEX 中国金融期货交易所ZCE郑州期货交易所DCE 大连期货交易所SHFE上海期货交易所%Stkcd.xml名字可更换量化投资策略开发实例StrategyCfg.xml配置配置 第 7 页量化投资策略开发实例StrategyCfg.xml配置配置标签strategyFunction(用途:用户编写的策略函数名称):name填入策略函数名。标签strategyArguments(用途:策略的参数配置):rebalanceCycle:重平衡周期,策略回验时,每过rebalanceCycle根bar将进行一次投资决策,计算目标持仓。
4、Bar的大小取决于returnCalFrequency;returnCalFrequency:计算收益率的频率第 8 页量化投资策略开发实例%StrategyCfg.xml名字可更换StrategyCfg.xml配置配置标签FactorDataCfg(用途:策略的时间及标的配置)dateListType:表示日期类型:Trading,交易日;Working,工作日;localPath:本地Mat缓存文件的存储路径(绝对路径),Matlab中,pwd表示当前的工作空间路径;periodType:交易时间配置信息;tickerList:表示读取的证券代码列表,可以是定义交易标的的xml文件路径名称
5、,也可以是板块,支持的板块列表有:(AllAStock,SHA,SZA,AllBStock,SHB,SZB,HS300)第 9 页量化投资策略开发实例%StrategyCfg.xml名字可更换 标签data(用途:策略决策所需数据配置)策略决策时每需要一种数据,则需要配置一个data标签decisionDataLength:每次策略函数计算目标持仓权重时所需的改数据长度,必须为大于等于1的整数;fieldname:数据的字段名;frequency:数据的频率,有SEC01(1秒),SEC05(5秒),SEC15(15秒),SEC30(30秒),MIN01(1分),MIN05(5分),MIN15
6、(15分),DAY01(1天);第 10 页量化投资策略开发实例StrategyCfg.xml配置配置 第 11 页量化投资策略开发实例第 12 页1、decisionData: 结构体,存储策略决策所需数据; (1) decisionData.time: 策略决策的时间 (2) decisionData.varList: 策略决策所需数据的名称列表; (3) decisionData.factorN_frequency:策略决策所需数据结构体 (4) decisionData.factorN_frequency.data: 策略决策所需数据矩阵; (5) decisionData.facto
7、rN_frequency.timeList:矩阵的列索引,表示矩阵中每列代表的时间点; (6) decisionData.factorN_frequency.tickerList:矩阵的行索引,表示矩阵中每列代表的交易标的; 2、 stateMatrix: 策略函数上次存储的状态信息; 1、 portfolio: 策略函数经过运算后得到的,目标投资组合资金权重序列,维度必须和订阅的交易标的数目相同;量化投资策略开发实例%获取数据获取数据 rtn = tradingData.Rtn_DAY01.data; cp = tradingData.CP_DAY01.data; hs300weight =
8、 tradingData.HS300Weight_DAY01.data(find(tradingData.HS300Weight_DAY01.tickerList = 501000039),:); hs300Rtn = rtn(find(tradingData.Rtn_DAY01.tickerList = 501000039),:); ifRtn = rtn(find(tradingData.Rtn_DAY01.tickerList = 501000039),:); hs300CP = cp(find(tradingData.CP_DAY01.tickerList = 501000039),:
9、); ifCP = cp(find(tradingData.CP_DAY01.tickerList = 501000039),:); ifRtn(isnan(ifRtn) = nanmedian(ifRtn); for i=1:size(hs300Rtn,1) inter = hs300Rtn(i,:); inter(isnan(inter) = nanmedian(inter); hs300Rtn(i,:) = inter; end %策略提供两种估计方法,选择方法策略提供两种估计方法,选择方法 method = 2; %构建沪深构建沪深300组合组合 port=nansum(hs300we
10、ight.*hs300Rtn); 第 13 页量化投资策略开发实例%计算计算OLS下最优套保比率下最优套保比率 yInSamp=port; xInSamp=ones(size(ifRtn), ifRtn; if method=1 b, = regress(yInSamp,xInSamp); h=b(2,1); else %利用利用GARCH回归计算最优套保比回归计算最优套保比 xInSamp=ifRtn; spec=garchset(R,0,M,0,C,0,AR,MA,Regress,0.8,P,1,Q,1,K,0.8,GARCH,0.7,ARCH,0.2,Display,off); Coef
11、f,=garchfit(spec,yInSamp,xInSamp); %计算计算GARCH(1,1)下的最优套保比率下的最优套保比率 h=Coeff.Regress; end %输出权重设置输出权重设置 portfolio = zeros(size( rtn,1),1); portfolio(tradingData.CP_DAY01.tickerList = 501000039) = hs300weight(:,end)*0.5/h; portfolio(tradingData.CP_DAY01.tickerList = 501000039) = -1*0.5*8.33; newStateMa
12、trix=stateMatrix;end 第 14 页量化投资策略开发实例function portfolio, newStateMatrix = optimalRatio( tradingData, stateMatrix )%获取数据获取数据 rtn = tradingData.Rtn_DAY01.data; cp = tradingData.CP_DAY01.data; hs300weight = tradingData.HS300Weight_DAY01.data(find(tradingData.HS300Weight_DAY01.tickerList = 501000039),:)
13、; hs300Rtn = rtn(find(tradingData.Rtn_DAY01.tickerList = 501000039),:); ifRtn = rtn(find(tradingData.Rtn_DAY01.tickerList = 501000039),:); hs300CP = cp(find(tradingData.CP_DAY01.tickerList = 501000039),:); ifCP = cp(find(tradingData.CP_DAY01.tickerList = 501000039),:); ifRtn(isnan(ifRtn) = nanmedian
14、(ifRtn); for i=1:size(hs300Rtn,1) inter = hs300Rtn(i,:); inter(isnan(inter) = nanmedian(inter); hs300Rtn(i,:) = inter; end %策略提供两种估计方法,选择方法策略提供两种估计方法,选择方法 method = 2; %构建沪深构建沪深300组合组合 port=nansum(hs300weight.*hs300Rtn); %计算计算OLS下最优套保比率下最优套保比率 yInSamp=port; xInSamp=ones(size(ifRtn), ifRtn; if method=
15、1 b, = regress(yInSamp,xInSamp); h=b(2,1); else %利用利用GARCH回归计算最优套保比回归计算最优套保比 xInSamp=ifRtn; spec=garchset(R,0,M,0,C,0,AR,MA,Regress,0.8,P,1,Q,1,K,0.8,GARCH,0.7,ARCH,0.2,Display,off); Coeff,=garchfit(spec,yInSamp,xInSamp); %计算计算GARCH(1,1)下的最优套保比率下的最优套保比率 h=Coeff.Regress; end %输出权重设置输出权重设置 portfolio =
16、 zeros(size( rtn,1),1); portfolio(tradingData.CP_DAY01.tickerList = 501000039) = hs300weight(:,end)*0.5/h; portfolio(tradingData.CP_DAY01.tickerList = 501000039) = -1*0.5*8.33; newStateMatrix=stateMatrix;end 第15页量化投资策略开发实例BackTestCfg.xml配置第 16 页量化投资策略开发实例BackTestCfg.xml配置标签backtestArguments(用途:策略回验的
17、参数配置)actionDelay:交易延迟,策略从投资决策到通过交易生成持仓的延迟。必须为非负整数。比如actionDelay为2,returnCalFrequency为1,returnCalFrequency为 TimeIntervals.SEC05,将会以决策时点2*5 = 10秒后的价格成交;orgidMode:由交易代码转为orgid的模式。(注意:对于股票而言,同一交易代码可能由于借壳上市等原因,随着时间区间不同,其意义会发生变化,系统后台会将交易代码转为orgid对股票而言,以公司作为证券关联对象的唯一码。)对股票而言,如果用户输入all,系统将会订阅回验区间内使用过该交易代码的所
18、有行情,通过orgid进行区分,同样,通过orgid区分策略函数返回的持仓权重序列;如果用户输入latest,则系统会订阅最新使用该交易代码的行情,同样通过orgid区分。如果交易代码列表中不存在股票标的,则不用考虑该属性;第 17页量化投资策略开发实例标签backtestArguments(用途:策略回验的参数配置)repoFrequency:债券的回购频率。支持DAY01(每日回购)和DAY07(每七日回购)两个枚举。系统将会据此获取债券的杠杆费用。注意:当交易代码列表不存在债券标的时,则不用考虑该属性;reportDisplay:excel绩效报表展示开关,当设为On的时候,策略回验结束
19、后会显示策略绩效的excel绩效报告;设为其他值时则不会打印;resultSave:excel绩效报表保存开关,当设为On的时候,策略回验结束后会被保存;设为其他值时则不会打印;第 18 页量化投资策略开发实例第 19 页品种的枚举类型securityTypeStockA A股StockBB股Index指数Fund基金Bond债券CommodityFuture商品期货IndexFuture 指数期货标签transactionCost(用途:按品种配置交易费用) 每配置一个品种需要增加一个标签,需要按买入和卖出分别配置交易费用。buy:该品种买入的交易费用比例;securityType:品种的枚
20、举类型;sell:该品种卖出的交易费用比例;量化投资策略开发实例第 20 页标签performanceAnalysisData(用途:策略绩效指标的数据参数配置) 计算绩效指标所需数据目前只支持指数收益率,且策略的简单收益率序列不需要配置,系统会自动传入到每个绩效评价函数中。code:如果评价指标计算需要指数收益率,属性值为指数代码,比如计算特雷诺指数需要沪深300收益率,则填写000300;如果填,认为该标签描述的是评价指标的参数,value的值不能为空;funName:计算绩效指标的函数名称,必须和performanceAnalysisFun标签中的函数名相对应;name:指标名称,绩效评
21、价函数以此作为域名解析数据;value:如果该标签描述的是绩效函数的参数,则code 为,而value不能为空。量化投资策略开发实例 标签performanceAnalysisFun(用途:策略绩效指标)dispName:策略绩效函数显示在excel绩效报告中的名称;funName:策略绩效函数名称,系统将会寻找同名的函数计算策略绩效并生成报表。标签benchmark(用途:excel报表中的基准收益率)code:指数的代码。第 21 页量化投资策略开发实例BackTestCfg.xml配置第 22 页量化投资策略开发实例第 23页量化投资策略开发实例optimalRatio.m2013-2-
22、12013-5-15绩效分析基本指标及盈利能力指标第 24 页量化投资策略开发实例 指标名称英文名称公式基本指标年化收益率 年化夏普比率SharpeRatio最大回撤MaximumDrawdown 日命中率HitRate 日平均收益率AverageSimpleRateOfReturn盈利能力指标一阶上偏矩HigherPartialMoments累积简单收益率CumsumSimpleReturn 第 25 页绩效分析风险水平指标指标名称英文名称公式风险水平指标波动率Volatility市场的相关系数CorrWithMarket二阶下偏矩LowerPartialMomentsBetaBeta在险价
23、值VaR 条件在险价值ConditionalVaR修正的在险价值MVaR日收益率偏度Skewness日收益率峰度Kurtosis量化投资策略开发实例第 26 页绩效分析综合绩效指标指标名称英文名称公式综合绩效指标treynor比率TreynorRatiojensen指数JensenRatiosortino比率SortinoRatiocalmar比率CalmarRatio风险价值上的超额收益ExcessReturnOnVaR条件夏普比率ConditionalSharpRatio修正的夏普比率ModifiedSharpRatio上行空间比率UpsidePotentialRatioOmegaOmegaKappa3Kappa3量化投资策略开发实例绩效分析策略结果第 27 页量化投资策略开发实例第 28 页绩效分析策略结果量化投资策略开发实例