文章目录

  • 一、风险平价策略
  • 二、风险平价组合的构建步骤
    • 第一步,选择底仓。
    • 第二步,计算资产对组合的风险贡献。
    • 第三步,优化组合风险贡献,计算资产权重。
  • 三、风险平价组合的Python实现
    • 3.1 数据概况
    • 3.2 构建风险平价组合

一、风险平价策略

磐安(Pan Agora)基金的首席投资官钱恩平(Edward Qian)博士提出了著名的风险平价(Risk Parity)策略。后来,这一模型被桥水(Bridge Water)基金运用于实际投资中并一度大获成功。

该策略提倡配置风险,而不是配置资产。传统模型希望可以控制整个投资组合的波动性,而风险平价控制的是相对风险,让各资产风险相对平衡。由于组合的风险达到了平衡,所以理论上可以抵御各类风险,也就是所谓的全天候(All Weather)策略。

全天候交易策略

全天候交易策略的理念是:无论在什么市场环境下,投资组合都可以获得较高的风险调整收益。从名字也能看得出来,不管天气是狂风暴雨,还是晴空万里,我自岿然不动,笑看风云。

风险平价投资组合原则是通过分配资金,使每一项资产对整个投资组合风险的 贡献相等来确定资产配置。从根本上说,这一概念反映了经典的 1/n 投资组合,即资 金在所有资产中平均分配。因此,风险均等投资组合有时被称为 ERC 投资组合。

二、风险平价组合的构建步骤

第一步,选择底仓。

钱恩平博士在《Risk Parity Fundamentals》(2016)中指出,资产背后的风险溢价分为三种,权益风险溢价、利率风险溢价和通胀风险溢价。从理论上看,选择相关性较低、资产属性差别较大、流动性较好的资产,有助于完善风险平价的配置图谱。

第二步,计算资产对组合的风险贡献。

定义资产对组合的边际风险贡献为组合波动率对权重的偏导数,资产对总风险的贡献为该资产权重与其边际风险贡献的乘积:
MRCi=∂σp∂wi=cov(ri,rp)σpTRCi=wi∂σp∂wi=wicov(ri,rp)σpMRC_i=\frac{\partial\sigma_p}{\partial w_i}=\frac{cov(r_i,r_p)}{\sigma_p}\\TRC_i=w_i\frac{\partial\sigma_p}{\partial w_i}=w_i\frac{cov(r_i,r_p)}{\sigma_p} MRCi​=∂wi​∂σp​​=σp​cov(ri​,rp​)​TRCi​=wi​∂wi​∂σp​​=wi​σp​cov(ri​,rp​)​
其中,wiw_iwi​表示资产权重,θ\thetaθ表示资产的协方差矩阵,σp=wθwT\sigma_p=\sqrt{w\theta w^T}σp​=wθwT​衡量组合风险。

第三步,优化组合风险贡献,计算资产权重。

对于风险平价组合,资产对总风险的贡献水平相等,即:
TRCi=TRCjTRC_i=TRC_j TRCi​=TRCj​
权重求解本质上是二次优化问题,求资产对组合风险贡献差值的最小值,本文采用 Python中的 minimize 函数求解:
min∑i=1n∑j=1n(TRCi−TRCj)2s.t.∑wi=1,wi∈[0,1]min\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}(TRC_i-TRC_j)^2\\ s.t.\sum w_i=1,w_i\in[0,1] mini=1∑n​j=1∑n​(TRCi​−TRCj​)2s.t.∑wi​=1,wi​∈[0,1]

三、风险平价组合的Python实现

假设有一投资组合,含有5支股票:中国平安(000001)、格力电器(000651)、爱尔眼科(300015)、贵州茅台(600519)、长安汽车(000625),构建风险平价组合。

3.1 数据概况

在计算之前,首先需要获取到5支股票的历史股价数据,这里我们使用 AKShare包。它是一个免费、开源的 Python 财经数据接口包。AKShare返回的绝大部分的数据格式都是 pandas DataFrame 类型,非常便于用 pandas/ NumPy/ Matplotlib 进行数据分析和可视化。

获取历史股价数据后,我们计算其对数收益率,并获得方差协方差矩阵。

import pandas as pd
import numpy as np
import akshare as ak
from scipy.optimize import minimize# 读入5支股票 2015-01-01 到 2021-12-31 日收盘价数据,并计算对数收益率
def get_ret(code):data = ak.stock_zh_a_hist(symbol=code, period="daily", start_date="20150101", end_date='20211231', adjust="")data.index = pd.to_datetime(data['日期'],format='%Y-%m-%d') #设置日期索引close = data['收盘'] #日收盘价close.name = coderet = np.log(close/close.shift(1)) #日收益率return retcodes=['000001','000651','300015','600519','000625']
ret = pd.DataFrame()
for code in codes:ret_ = get_ret(code)ret = pd.concat([ret,ret_],axis=1)
ret = ret.dropna()R_cov = ret.cov() #计算协方差
cov= np.array(R_cov)

3.2 构建风险平价组合

def risk_budget_objective(weights,cov):weights = np.array(weights) #weights为一维数组sigma = np.sqrt(np.dot(weights, np.dot(cov, weights))) #获取组合标准差   #sigma = np.sqrt(weights@cov@weights)MRC = np.dot(cov,weights)/sigma  #MRC = cov@weights/sigma#MRC = np.dot(weights,cov)/sigmaTRC = weights * MRCdelta_TRC = [sum((i - TRC)**2) for i in TRC]return sum(delta_TRC)'''
#若将权重weights转化为二维数组的形式,则编制函数如下:
def risk_budget_objective(weights,cov):weights = np.matrix(weights) #weights为二维数组sigma = np.sqrt(np.dot(weights, np.dot(cov, weights.T))[0,0]) #获取组合标准差   #sigma = np.sqrt((weights@cov@weights.T)[0,0])   MRC = np.dot(cov,weights.T).A1/sigma#MRC = np.dot(weights,cov).A1/sigmaTRC = weights.A1 * MRCdelta_TRC = [sum((i - TRC)**2) for i in TRC]return sum(delta_TRC)
'''def total_weight_constraint(x):return np.sum(x)-1.0x0 = np.ones(cov.shape[0]) / cov.shape[0]
bnds = tuple((0,None) for x in x0)
cons = ({'type': 'eq', 'fun': total_weight_constraint})
#cons = ({'type':'eq', 'fun': lambda x: sum(x) - 1})
options={'disp':False, 'maxiter':1000, 'ftol':1e-20} solution = minimize(risk_budget_objective, x0,args=(cov), bounds=bnds, constraints=cons, method='SLSQP', options=options)# 求解出权重
final_weights = solution.x #权重
for i in range(len(final_weights)):print(f'{final_weights[i]:.1%}投资于{R_cov.columns[i]}')

求解结果为:

24.3%投资于000001
16.7%投资于000651
16.1%投资于300015
24.8%投资于600519
18.1%投资于000625

参考资料:https://thequantmba.wordpress.com/2016/12/14/risk-parityrisk-budgeting-portfolio-in-python/

【Python量化】风险平价策略相关推荐

  1. 【基金量化研究系列】大类资产配置研究(一)——股债二八配置策略与股债风险平价策略

    文章目录 1. 引言 1.1 资产配置简介 1.2 可投标的说明 1.3 市场基本情况与数据库使用的说明 1.4 本文策略基本假设 2. 资产配置策略一--股债二八策略 2.1 策略简介 2.2 基于 ...

  2. 风险平价策略python代码_风险平价组合(risk parity)理论与实践

    本文介绍了风险平价组合的理论与实践:后续文章将对risk parity组合进行更深入探讨以及引入预期收益后的资产配置实战策略. 前言 资产配置是个很广泛的话题,在投资中是一个非常重要的话题 从使用场景 ...

  3. python量化交易alpha策略_【邢不行|量化小讲堂系列11-Python量化入门】如何判断一个策略的好坏?(建议收藏)...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. 个人微信:xingbuxing0807,有问题欢迎 ...

  4. python量化 双均线策略(金叉死叉)

    #小策略,策略逻辑是在金叉时候买进,死叉时候卖出,所谓金叉死叉是两条均线的交叉,当短期均线上穿长期均线为金叉,反之为死叉 #下面是策略代码及结构 # 导入函数库 from jqdata import ...

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

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

  6. 【tushare使用经验分享】等权重模型、均值方差模型、风险平价模型的投资组合配置比较

    id:472745 获取2015.1.1至2021.12.31期间 贵州茅台.美的集团.宁波银行.中国平安.三一重工 五只股票的日度收益数据. 利用2015.1.1-2019.12.31间的数据作为训 ...

  7. python量化交易策略实例_Python进阶量化交易场外篇3——最大回撤评价策略风险...

    新年伊始,很荣幸笔者的<教你用 Python 进阶量化交易>专栏在慕课专栏板块上线了,欢迎大家订阅!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外会陆续推出一些手记来辅助同学们学习 ...

  8. 基于Python量化策略牛市行情下的盈利与风险策略管理

    基于Python量化策略 牛市行情下的盈利与风险策略管理 牛市行情下的盈利策略与风险管理 1 项目背景 2 数据探索 2.1 数据获取 2.2 数据处理与分析 3 盈利策略量化建模与风险管理 3.1 ...

  9. python 完整的海龟策略_9海龟策略_python量化交易_Python视频-51CTO学院

    清华编程高手尹成带你基于算法实践python量化交易 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种"大概率"事件以制定策 ...

最新文章

  1. 35岁程序员大厂Offer接到手软,靠的竟然是...
  2. [转]C#委托的异步调用
  3. 线段树初见——区间询问与改变最大值
  4. nginx post请求超时_nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)
  5. vue mysql webapp_基于Laravel+VueJS实战开发WebAPP
  6. 人工智能产业链深度透析—产业应用医疗篇
  7. Some thoughts on dfs
  8. ANDROID笔记:Activity之间的传值
  9. Golang学习 - sort 包
  10. 瑞萨RX23T开发板一键设置库文件说明
  11. 儿童吹泡泡水简单配方_教你泡泡水的制作方法 自制泡泡水配方大全
  12. 2019配电安规电子版_2018年配电安规.docx
  13. 千瓜小红书直播达人、笔记排行榜
  14. 阿里云免费SSL证书申请
  15. 华为云WeLink端云协同会议是什么?
  16. 笔记本上的小键盘计算机怎样用,电脑怎么调出小键盘打字?电脑调出小键盘打字的方法...
  17. linux pcs 所有命令,BaiduPCS-Go Windows或linux下百度网盘cmd命令行详细使用方法
  18. studio 3T连接不上mongoDB
  19. Centos 由字符界面 init 3 切换图形界面 init 5
  20. 力天创见客流热区图分析

热门文章

  1. 解决打开word时显示microsoft visual basic运行时错误没有注册类的问题
  2. 信息系统项目管理师核心考点(五十四)配置项分类、状态与版本
  3. 腾讯优图实验室招聘计算机视觉研究员和实习生
  4. Docker Engine 安装时遇到的坑
  5. 如何用HBuilderX把uni-app项目运行到微信开发者工具上
  6. 程序员天天写代码,如何拓展社交圈?
  7. 基于51单片机的电子钟万年历LCD1602显示
  8. android串口开发!一年后斩获腾讯T3,附面试题答案
  9. MacBookpro连不上WiFi,网络增加新的位置解决
  10. C++ Primer Plus 第九章答案 内存模型和名称空间