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

概述

本文将分享一些我在实际生产中使用风控模型,并结合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
  • Ri:表示标的 i 的单个标的回报率
  • Rm:表示大盘整体回报率
  • F(1,2,3...N) 表示N个因子的权值
  • β :每个因素对应市场(m)的 beta 值
  • e: 表示随机误差项(白噪声)
  • a:表示初始值(截距)

多因子风控模型

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

风险因子

其中风险因子用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
商业使用请联系作者。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容