不要把所有的鸡蛋放在同一个篮子里,这是投资界中历久弥新的至理名言。

为了避免风险,投资人往往会将资产分散到不同的金融工具中,比如信托、债券、基金、股票、期货、期权甚至房地产市场等。那么在这么多金融产品中,我们如何选择才能在风险可控的情况下获取尽可能高的收益呢?资产配置就是为了解决这个问题。

那么,如何去衡量不同配置下我们的组合资产的收益率与风险呢?

一、投资组合的收益率计算

投资组合的收益率很容易计算,总得来说就是总收益除以初始投入资本。假如我们一共投资了n种金融产品,则我们的投资组合的收益率为:

R=总收益初始资产=∑i=1nWiRiW0=∑i=1nW0wiRiW0=∑i=1nwiRiR = \frac{总收益}{初始资产} = \frac{\sum^{n}_{i=1}{W_iR_i}}{W_0} = \frac{\sum_{i=1}^{n}{W_0 w_i R_i}}{W_0} = \sum_{i=1}^{n}{w_i R_i}R=初始资产总收益​=W0​∑i=1n​Wi​Ri​​=W0​∑i=1n​W0​wi​Ri​​=i=1∑n​wi​Ri​

W0:投资资产Wi:第i个金融产品的投资额wi:第i个金融产品投资额占总投资资产的比例Ri:第i个金融产品的收益率R:投资组合的收益率\begin{aligned} W_0&:投资资产\\ W_i&:第i个金融产品的投资额\\ w_i&:第i个金融产品投资额占总投资资产的比例\\ R_i&:第i个金融产品的收益率\\ R&:投资组合的收益率 \end{aligned} W0​Wi​wi​Ri​R​:投资资产:第i个金融产品的投资额:第i个金融产品投资额占总投资资产的比例:第i个金融产品的收益率:投资组合的收益率​

投资组合收益率的计算过程,类似于加权平均值的计算。我们将每个金融产品的收益率乘以该产品的投资占比,并对结果求和即可。

需要注意的是,这里计算的收益率是从头到尾的收益率,如果我们要计算一个收益率序列,是不能使用这种方式的。因为在第一期的时候,我们的配置比例是固定的,但是在第一期之后,随着不同产品的不同波动,它们占我们资产配置的比例已经发生了变化,因此需要不断迭代更新我们的比例参数,直接使用原始比例是错误的。

二、投资组合的风险度量

我们仍然以方差来度量我们的投资组合的风险:

σ2(R)=∑i=1nwi2σ2(Ri)+∑i=1nwiwjσ(Ri,Rj)\sigma^2(R) = \sum_{i=1}^{n}{w_i^2\sigma^2(R_i)} + \sum_{i=1}^{n}{w_i w_j \sigma (R_i, R_j)}σ2(R)=i=1∑n​wi2​σ2(Ri​)+i=1∑n​wi​wj​σ(Ri​,Rj​)

观察上式可知,这里既包含了每个金融产品各自的方差与系数的乘积,也包含了两两产品之间的协方差项。也就是说,金融产品之间相关性越高,风险越大。

这里就不推导了,事实上我们完全可以先计算出我们的投资组合收益率的序列,然后再用方差、下行风险等来计算投资组合的风险,这样还能应对不同时期不同金融产品比例发生变化的情况。

三、Python实战:收益率

那么接下来我们就用Python来看一下,不同的投资比例会对我们的收益率和风险带来什么影响。我们以万科A和东方财富两支股票来演示不同配置比例下整体的收益率和风险变化趋势。

import pandas as pd
import tushare as ts
import numpy as np# 获取股票近两年行情数据
pro = ts.pro_api()
wanke = pro.daily(ts_code='000002.SZ', start_date='20170101')
dongcai = pro.daily(ts_code='300059.SZ', start_date='20170101')# 数据清洗,仅保留收益率数据
df = pd.merge(wanke, dongcai, on='trade_date', how='outer')
df.index = pd.to_datetime(df.trade_date)
df = df.sort_index(ascending=True)
df = df[['pct_chg_x', 'pct_chg_y']].fillna(0) / 100
df.columns = ['r_wanke', 'r_dongcai']


1. 先计算各产品的整体收益然后加权平均

那么接下来我们来看收益率情况,我们先用期末各资产收益直接加权平均的方式来计算。

import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
sns.set()
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = 'SimHei'w_wanke = np.linspace(0, 1, 11)
w_dongcai = 1 - w_wanke
r_wanke = (df['r_wanke'] + 1).product() - 1
r_dongcai = (df['r_dongcai'] + 1).product() - 1returns = [r_wanke * w1 + r_dongcai * w2 for w1, w2 in zip(w_wanke, w_dongcai)]plt.figure(figsize=(10, 6))
plt.plot(w_wanke, returns)
plt.xlabel('万科资产占比', fontsize=16)
plt.ylabel('投资组合17年以来收益率', fontsize=16)
plt.title('不同比例下组合投资万科A与东方财富的收益率', fontsize=20);

由于过去两年万科的收益率是高于东方财富的,所以万科的持有比例越高,组合收益率就越高。不过我们还要看一下风险。

2. 先计算投资组合的收益序列,再累乘

前边提到,我们是可以先计算出投资组合的收益序列,然后再计算整体收益率以及风险的。

import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
import numpy as np
sns.set()
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = 'SimHei'# 计算累计毛利率,类似于基金净值,以16年最后一个交易日的收盘价作为成本价
df['worth_wanke'] = (df['r_wanke'] + 1).cumprod()
df['worth_dongcai'] = (df['r_dongcai'] + 1).cumprod()w_wanke = np.linspace(0, 1, 11)
w_dongcai = 1 - w_wankereturns = []
for w1, w2 in zip(w_wanke, w_dongcai):worth_portfolio = np.array(w1 * df['worth_wanke'] + w2 * df['worth_dongcai'])worth_last_day = worth_portfolio.copy()worth_last_day = np.insert(np.delete(worth_last_day, -1, axis=0), 0, 1)r_portfolio = worth_portfolio / worth_last_dayreturns.append(r_portfolio.prod())plt.figure(figsize=(10, 6))
plt.plot(w_wanke, returns)
plt.xlabel('万科资产占比', fontsize=16)
plt.ylabel('投资组合17年以来收益率', fontsize=16)
plt.title('不同比例下组合投资万科A与东方财富的收益率', fontsize=20);

这种方法和上一种方法的计算结果完全一致,但是我们获得了投资组合的收益率序列,后续就可以做更多事情。

四、Python实战:投资组合的风险

一种方法是使用各金融产品的方差及协方差,结合不同金融产品的投资占比,套入公式来计算,这部分留给读者自己探讨,我们接下来看一下另一种方法。

先求投资组合的收益率序列

w_wanke = np.linspace(0, 1, 11)
w_dongcai = 1 - w_wankerisk = []
for w1, w2 in zip(w_wanke, w_dongcai):worth_portfolio = np.array(w1 * df['worth_wanke'] + w2 * df['worth_dongcai'])worth_last_day = worth_portfolio.copy()worth_last_day = np.insert(np.delete(worth_last_day, -1, axis=0), 0, 1)r_portfolio = worth_portfolio / worth_last_day - 1risk.append(r_portfolio.std())plt.figure(figsize=(10, 6))
plt.plot(w_wanke, risk, '-')
plt.xlabel('万科资产占比', fontsize=16)
plt.ylabel('投资组合17年以来收益率方差', fontsize=16)
plt.title('不同比例下组合投资万科A与东方财富的风险', fontsize=20);

可以看到,当万科资产配置比例在0.4-0.5左右的时候,投资风险是最低的。但是前边我们也看到了,投资万科的潜在获利空间也比较高,所以我们要结合自己的风险承受能力以及预期获益水平来调整自己的资产配置比例。

下行风险

我们还记得,使用下行风险可以消除方差度量法的一些问题。那么我们就来计算一下不同配置比例下的下行风险。

w_wanke = np.linspace(0, 1, 11)
w_dongcai = 1 - w_wankerisk = []
for w1, w2 in zip(w_wanke, w_dongcai):worth_portfolio = np.array(w1 * df['worth_wanke'] + w2 * df['worth_dongcai'])worth_last_day = worth_portfolio.copy()worth_last_day = np.insert(np.delete(worth_last_day, -1, axis=0), 0, 1)r_portfolio = worth_portfolio / worth_last_day - 1mean = r_portfolio.mean()_r_tmp = r_portfolio - mean_r_tmp = np.array(list(map(lambda x: x if x < 0 else 0, _r_tmp)))_risk = sum(_r_tmp ** 2)risk.append(_risk)plt.figure(figsize=(10, 6))
plt.plot(w_wanke, risk, '-')
plt.xlabel('万科资产占比', fontsize=16)
plt.ylabel('投资组合收益率的标准差', fontsize=16)
plt.title('不同比例下组合投资万科A与东方财富的风险(2017年以来数据)', fontsize=20);

可以看到,在万科A与东方财富各占一半时,我们投资组合的下行风险最低。这种方法最大的好处就是不会将向上超出预期的收益计算进来,只会考虑低于预期收益的波动,这样与我们主观上的风险更为一致。

还有其他几种风险量化方式,比如风险价值、最大回撤等,聪明如你,可以自己尝试一下哦。

Python量化:评估投资组合的收益率和风险相关推荐

  1. python金融量化风险_Python量化:评估投资组合的收益率和风险

    不要把所有的鸡蛋放在同一个篮子里,这是投资界中历久弥新的至理名言. 为了避免风险,投资人往往会将资产分散到不同的金融工具中,比如信托.债券.基金.股票.期货.期权甚至房地产市场等.那么在这么多金融产品 ...

  2. Python量化投资——投资组合的评价和可视化(上):计算收益率、波动率、最大回撤、阿尔法alpha、贝塔beta、夏普率Sharp等指标【源码+详解】

    投资组合的评价和可视化(上)--评价指标的计算 投资结果评价 本文示例数据下载 投资过程回顾 基于收益的投资组合评价 收益率.年化收益.每日收益率 月度历史收益率 基于风险度量的投资组合评价 Vola ...

  3. 金融理论、投资组合与量化选股_18资产收益率和风险

    1. 书籍和文中所提到的数据会在文末提供百度云下载,所有数据都不会有加密,可以放心下载使用 2. 文中计算的结果与书中不同是由于数据使用的时间段不同 目录 1. 单期与多期简单收益率 2. 年化收益率 ...

  4. Python量化投资——投资组合的评价和可视化(下):使用Matplotlib生成专业的投资回测数据可视化仪表盘【源码+详解】

    使用Matplotlib生成专业的数据可视化仪表盘(下篇) 投资结果的可视化(下篇) 图表的布局规划及格式设定 图表布局 格式设定 表头和回测结果摘要信息 表1:绘制收益率曲线图 1,绘制投资收益率以 ...

  5. Python量化入门:关于收益率的一些概念

    今天我们简单地介绍关于收益率的一些概念,方便大家理解我们后续的量化教程的分享.这些都很简单,但是请有经验的读者理解,毕竟有些读者没有这些基础,后边理解起来可能会有些吃力. 一.收益率简介 在金融领域, ...

  6. Python量化教程:量化风险

    今天,我们将介绍非常重要的一部分:风险的量化.我们会从原理以及Python实战两个角度来学习. 我们开始今天的内容. 一.方差 1952年,Markowitz发表了均值-方差投资组合理论,在这套理论中 ...

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

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

  8. 【Python量化】风险平价策略

    文章目录 一.风险平价策略 二.风险平价组合的构建步骤 第一步,选择底仓. 第二步,计算资产对组合的风险贡献. 第三步,优化组合风险贡献,计算资产权重. 三.风险平价组合的Python实现 3.1 数 ...

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

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

最新文章

  1. Streaming的算法Reservoir Sampling
  2. Win32ASM学习[2]:运算符
  3. 计算机d盘被拒绝访问了怎么办,如果硬盘分区被拒绝访问或无法访问该怎么办?...
  4. 80端口未占用,apache无法启动解决办法
  5. Linux系统实现ICMP ping功能,并计算时延
  6. jni 从c传递map到java_java_jni 本地调用接口DLL的编写样本,涉及数组传递,相关的 和C程序均已包括。 Develop 256万源代码下载- www.pudn.com...
  7. 学习python 基础密码验证
  8. 如何测试前台获得的数据
  9. json获取key对应的值java_java 获取json字符串中key对应的值
  10. linux ping监控脚本,Shell长ping脚本监控网络状态
  11. 服务器虚拟机怎么安装win7系统教程,虚拟机怎么安装win7系统 虚拟机安装win7系统教程...
  12. 奇幻RPG(人物构造 与 Abstract Factory模式)
  13. win10进程太多怎么优化_你应该这样用win10(优化篇)
  14. 苹果截屏快捷键_Mac进阶:掌握这 5 个冷门快捷键,让Mac更好用
  15. html5跳动的心电图,jquery制作心电图跳动特效
  16. Android音乐浮窗播放器
  17. 语音控制Office
  18. 被“投机之王”奉为交易核心的时间要素到底是什么?
  19. 为什么postgresql最大的单表只能是32TB
  20. 高级语言?编译程序?解释程序?目标代码?

热门文章

  1. java数据结构与算法基础(二)-排序
  2. c语言的菜单制作,C语言的菜单制作.ppt
  3. CSS基础班笔记(三)
  4. 08-20210305在WIN10下通过网口给华为海思Hi3516DV300刷机(鸿蒙系统)
  5. 计算机毕设 SSM线上少儿编程系统 在线少儿编程学习系统 少儿编程教育课程平台Java
  6. c#计算标准偏差实现跟excel中一样的STDEVP()
  7. 【S0002】插画大师Laura欧美儿童插画临摹图集363张
  8. poi实现多线程大数据导出
  9. UI设计(用户界面设计)的好处
  10. dev C++遇到endl无法调试的解决方法