FinanceR 投资理财理财投资

[原]量化投资教程:股票持仓组合优化与多因子风控模型

2016-03-12  本文已影响1110人  FinanceR

概述

本文将分享一些我在实际生产中使用风控模型,并结合R语言代码对模型构建过程一一庖丁解牛。我们在实际构建风控模型时,结合自身业务特点,我们也基于多因子模型实现了一套行之有效的基金运营的风控系统。

风控系统架构

简单分析

风控系统中的简单分析是指针对策略持仓的收益和风险做简单计算,不涉及财务或行业数据。我们也选用了常见的几个简单分析指标:

1. 夏普比率

表示每承受一单位总风险,会产生多少的超额回报酬。具体计算方法为 策略年化收益率−回测起始交易日的无风险利率策略年化收益率−回测起始交易日的无风险利率 / 策略收益波动率 。

calcSharpeRatio <- function(neatMat){

        annualYieldRate <- calcAnnualYieldRate(neatMat)
        annualVolatility <- calcAnnualVolatility(neatMat)

        annualYieldRate / annualVolatility
}

2. 年化波动率

用来测量资产的风险性。具体计算方法为 策略年化收益的标准差x $\sqrt{252}$。波动越大代表投资组合风险越高。(年化波动率的计算时间为252个交易日)

calcAnnualVolatility <- function(neatMat){

        dailyReturn <- neatMat[-1,"compoundReturn"] / neatMat[-nrow(neatMat),"compoundReturn"] - 1

        sd(dailyReturn) * sqrt(252)
}

3. 累计收益率

表示从投资开始的预期收益率。具体计算方式为 截至分析日的资产净值/初值(初值为1)。

calcCompoundYieldReturn <- function(neatMat){

    neatMat[nrow(neatMat),"compoundReturn"] / neatMat[1,"compoundReturn"] - 1

}

4. 最大回撤

描述策略可能出现的最糟糕的情况。具体计算方法为 min(策略当日净值/当日之前账户最高价值-1)

calcMaxDrawbackSeries <- function(neatMat){

        maxDrawback <- matrix(0,nrow(neatMat),ncol=1)

        for(i in 1:nrow(neatMat)){
                if(neatMat[i,2]<max(neatMat[1:i,2])){
                        maxDrawback[i] <- neatMat[i,2] / max(neatMat[1:i,2]) - 1
                }
        }

        data.frame(date=neatMat[,1],maxDrawback=maxDrawback)

}
calcMaxDrawback <- function(neatMat){

        MaxDrawbackSeries <- calcMaxDrawbackSeries(neatMat)
        min(MaxDrawbackSeries$maxDrawback)
}

5. 年化收益率

表示投资期限为一年的预期收益率。具体计算方式为 回测期间策略每日收益率总和 / 回测交易日数量 × 252。

calcAnnualYieldRate <- function(neatMat){

        runTime <- as.numeric(difftime(neatMat[nrow(neatMat),"date"],neatMat[1,"date"]),unit="days")

        compoundYieldRate <- (neatMat[nrow(neatMat),"compoundReturn"]/neatMat[1,"compoundReturn"]) - 1

        compoundYieldRate / runTime * 252

} 

复杂分析

复杂分析主要是采用一些财务数据、行业数据构建一些指标和模型对策略持仓做进一步细致的分析。我们在实际生产中主要分析以下几个方面:

1. 净敞口暴露分析(现金)

净敞口 = (股票多头市值+股指期货多头市值-股指期货空头市值)/总资产。若采用完全对冲策略时,净敞口非常小,一般在5%附近。但是,当股指期货基差较大,或投资管理人采取放开部分敞口策略时,净敞口会较大。

2. 风险因子敞口暴露分析

用10个风险因子描述市场价格波动风险的主要来源,一般的,股票持仓采用与基准对应的股指期货进行对冲,因此相对基准的风险因子敞口越大,风险越高。一般风险因子的敞口用标准差的倍数描述,持仓组合数量较多、控制严格的组合的风险因子敞口通常在0.5个标准差左右。完全无风险对冲会影响整体长期收益,因子投资管理人会根据其对市场的理解对风险因子敞口进行放开限制

3. 股票相对沪深300的行业偏差分析

由于属于同行业的股票的跌涨往往具有一定的一致性,国内股票市场具有行业轮动的特点,因此股票持仓与其对冲使用的基准的行业偏差是影响对冲效果的重要因素。一般的,行业偏差越大,对冲风险越大。

4. 资产配置比例分析

总资产中,现金、股票、期货的资产配比,是资产配置的直观体现。

5. 证券账户收益归因分析

分析股票的超额收益、主动管理收益、行业偏差收益、风险暴露收益、现金配置收益等。

6. 期货账户保证金占用情况分析

由于期货为当日无负债结算、采用保证金制度,一般情况下期货保证金占用比例为期货资金账户的60%~80%,占用过低则资金利用率低,占用过高则可能无法覆盖市场价格波动造成的资金风险。

什么是多因子模型

多因子模型是关于资产定价和风险管理的模型,关于多因子模型的构造也根据不同业务有不同的选择。

多因子模型通常使用下面的公式表示:

Ri = ai + βi(m) Rm + βi(1)F1 + βi(2)F2 +...+βi(N)FN + ei

多因子风控模型

区别于上述模型,我们根据自身点业务特点,通常,我们将因子主要分为风险因子和行业因子两个大类。

风险因子

其中风险因子用10个风险因子描述市场价格波动风险的主要来源,根据市场特点细分为:

1. Beta因子

2. 大小盘因子

3. 中盘因子

4. 估值因子

5. 盈利能力因子

6. 成长性因子

7. 杠杆因子

8. 流动性因子

9. 动量因子

10. 残余波动因子

行业因子

而行业因子则是根据申银万国的一级行业分类构造28个行业的行业因子。这里需要指出的是,由于我们的 Benchmark 选用了沪深300,所以在行业敞口上也由于沪深300在银行和非银金融的比重较大而影响。

综合上诉38个因子,在实际生产中,经过长期检验,该模型能够比较好的反应出基金风控情况。当然,由于模型是根据历史数据来判断风控情况的,所以,它也不可能100%地预测未来值,毕竟模型不是万能的。

股票收益归因

股票收益归因表示通过定量分析总收益反应各种因子对总收益的贡献情况。(选择基准为沪深300)计算公式为:

示例

未完

作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏:https://segmentfault.com/blog/harryprince,如果涉及源代码请注明GitHub地址:https://github.com/harryprince。微信号: harryzhustudio
商业使用请联系作者。

上一篇 下一篇

猜你喜欢

热点阅读