概述

量化中,我们经常会遇到各种量化指标的计算,对于zipline来说,也会对这部分计算进行处理,由于指标计算的通用性比较强,所以,zipline单独封装了 empyrical 这个模块,可以处理类似的计算,由于这个模块并不依赖其它zipline模块,我们可以在我么的项目中单独使用它。

安装

pip install empyrical

它会依赖安装 numpy, scipy, pandas 等模块

使用

导入

from empyrical import (
    alpha,
    beta,
    alpha_beta_aligned,
    annual_volatility,
    cum_returns,
    annual_return,
    downside_risk,
    information_ratio,
    max_drawdown,
    sharpe_ratio,
    sortino_ratio,
    calmar_ratio,
    omega_ratio,
    tail_ratio
)

初始数据

策略收益率

大多数函数的参数都需要策略的收益率列表,格式为 pandas.Series 结构,如下:

...
2015-07-16    -0.012143
2015-07-17    0.045350
2015-07-20    0.030957
2015-07-21    0.004902
...

索引为一个时间序列, 值为每日的收益率,为一个百分比,并且是非累积的,也就是每天相对于上一个交易日的收益比率。

下面我们构造一个初始数据

import pandas as pd
returns = pd.Series(
    index=pd.date_range('2017-03-10', '2017-03-19'),
    data=(-0.012143, 0.045350, 0.030957, 0.004902, 0.002341, -0.02103, 0.00148, 0.004820, -0.00023, 0.01201)
)
returns
2017-03-10   -0.012143
2017-03-11    0.045350
2017-03-12    0.030957
2017-03-13    0.004902
2017-03-14    0.002341
2017-03-15   -0.021030
2017-03-16    0.001480
2017-03-17    0.004820
2017-03-18   -0.000230
2017-03-19    0.012010
Freq: D, dtype: float64
returns.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f3bd6fecda0>

基准收益率

和策略收益一样,我们可以构造一个模拟的基准收益

benchmark_returns = pd.Series(
    index=pd.date_range('2017-03-10', '2017-03-19'),
    data=(-0.031940, 0.025350, -0.020957, -0.000902, 0.007341, -0.01103, 0.00248, 0.008820, -0.00123, 0.01091)
)

计算累计收益

creturns = cum_returns(returns)
creturns
2017-03-10   -0.012143
2017-03-11    0.032656
2017-03-12    0.064624
2017-03-13    0.069843
2017-03-14    0.072348
2017-03-15    0.049796
2017-03-16    0.051350
2017-03-17    0.056417
2017-03-18    0.056174
2017-03-19    0.068859
Freq: D, dtype: float64
creturns.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f3bd65eb0b8>

计算最大回撤

max_drawdown(returns)
-0.02103000000000009

计算年化收益

annual_return(returns)
4.3554273608590925

年化Volatility (策略波动率)

用来测量策略的风险性,波动越大代表策略风险越高。

annual_volatility(returns, period='daily')
0.3055933840036463

Calmar比率

Calmar比率描述的是收益和最大回撤之间的关系。计算方式为年化收益率与历史最大回撤之间的比率。Calmar比率数值越大,基金的业绩表现越好。反之,基金的业绩表现越差。

calmar_ratio(returns)
207.10543798664165

Omega比率

介绍: Omega函数是用来分析收益分布的一种方法,它是一种天然的业绩指标。基于Omega的分析是在下跌,下偏矩和损益文献的精神上进行的。Omega函数捕捉到在收益分布上的所有高阶矩信息并且影响收益水平的敏感性。

公式意义:Omega越高越好,它是对偏度和峰值的一个调整。

omega_ratio(returns=returns, risk_free=0.0001)
3.0015132184078577

Sharpe比率

核心思想:理性的投资者将选择并持有有效的投资组合.

公式意义:夏普指数代表投资人每多承担一分风险,可以拿到几分收益;若为正值,代表基金收益率高过波动风险;若为负值,代表基金操作风险大过于收益率。每个投资组合都可以计算Sharpe ratio,即投资回报与多冒风险的比例,这个比例越高,投资组合越佳。

sharpe_ratio(returns=returns)
5.6451366106126715

sortino比率

介绍: Sortino ratio是一个能够评价投资资产、组合或者策略收益的指标。它是夏普比率的修正,它只对收益低于某个值的波动性进行衡量,这个值可能是持有者规定的目标收益或者是要求收益,而夏普比率是同时对上涨的和下降的波动进行衡量。尽管这两个比率都衡量的是一个调整后的投资风险,但它们的意义却不同,这导致投资的收益的结果不同。

核心思想: 公式及其解释:R是资产或组合的预期收益,T是投资策略的目标或要求的收益,起源于最小可接受收益。DR是目标方差的平方根。也就是二阶低偏矩。 Sharpe and Omega-Sharpe ratio的一个自然扩展就是由Sortino在1991年提出的,他使用的是downside risk作为分母,downside risk就是二阶下偏矩。 总风险用下降风险所代替,因为投资组合经理不会被上涨的变化而惩罚,但会被低于最小目标收益的变化而惩罚。 用下降标准差而不是总标准差,以区别不利和有利的波动。

sortino_ratio(returns=returns)
14.150708210667487

下降风险

downside_risk(returns=returns)
0.12191025172150209

信息比率(Information Ratio)

信息比率主要是用来衡量某一投资组合优于一个特定指数的风险调整超额报酬,或者说是用来衡量超额风险所带来的超额收益。它表示单位主动风险所带来的超额收益。

Information Ratio = α∕ω (α为组合的超额收益,ω为主动风险)

计算信息比率时,可以将基金报酬率减去同类基金或者是大盘报酬率(剩下的值为超额报酬),再除以该超额报酬的标准差。信息比率越高,该基金表现持续优于大盘的程度越高。

information_ratio(returns=returns, factor_returns=benchmark_returns)
0.43383172638699696

Alpha

投资中面临着系统性风险(即Beta)和非系统性风险(即Alpha),Alpha是投资者获得与市场波动无关的回报。比如投资者获得了15%的回报,其基准获得了10%的回报,那么Alpha或者价值增值的部分就是5%。

alpha(returns=returns, factor_returns=benchmark_returns, risk_free=0.01)
0.7781943501778946

Beta

表示投资的系统性风险,反映了策略对大盘变化的敏感性。例如一个策略的Beta为1.5,则大盘涨1%的时候,策略可能涨1.5%,反之亦然;如果一个策略的Beta为-1.5,说明大盘涨1%的时候,策略可能跌1.5%,反之亦然。

beta(returns=returns, factor_returns=benchmark_returns, risk_free=0.01)
0.56157656832313008

Tail Ratio

tail_ratio(returns=returns)
2.2825137911495892

其他说明

上面很多参数都涉及到年华指标,他们都会涉及到两个可选的参数, periodannualization , 其中,如果设置了 annualization ,则 period会被忽略,

他们是用来设置策略的年化频率的,对于period 设置为一个字符串,可以设置的参数为 'monthly', 'weekly' , 'daily', 后面是默认的值 ,

{'monthly':12
 'weekly': 52
 'daily': 252}

如果需要覆盖默认的值, 则可以通过 annualization 参数来设定。

zipline风险指标计算 (empyrical模块)的更多相关文章

  1. Python科学计算—numpy模块总结(1)

    作为一个本科学数学专业,目前研究非线性物理领域的研究僧.用什么软件进行纯科学计算好,Fortran永远是第一位的:matlab虽然很强大,可以很容易的处理大量的大矩阵,但是求解我们的模型(有时可能是几 ...

  2. Python科学计算包模块的安装(ubuntu)

    Python的科学计算包设计到C语言代码的编译,采用pip的方式安装会出现错误. 一种简单的方式是采用的集成包,具体的步骤参考:https://www.continuum.io/downloads#_ ...

  3. 用于<挣值管理>的各种指标计算

    PV(Planning Value) 含义:计划价值,截至到某个时间计划工作经批准的成本预算. 公式:PV=计划工作数X计划单价. BAC 含义:完工预算,截至到完工时间计划工作经批准的成本预算,即完 ...

  4. 客户端埋点实时OLAP指标计算方案

    背景 产品经理想要实时查询一些指标数据,在新版本的APP上线之后,我们APP的一些质量指标,比如课堂连接掉线率,课堂内崩溃率,APP崩溃率等指标,以此来看APP升级之后上课的体验是否有所提升,上课质量 ...

  5. Python 科学计算涉及模块

    模块1.数据基础 numpy 模块2.数值运算 scipy 模块3.符号运算 sympy 模块4.图形绘制 matplotlib

  6. SQL语句在OLAP的妙用(多维分析与指标计算)

    ================================================================================ BI传统实现原理: 1.涉及维度管理( ...

  7. php关于精准计算的模块 BCMath

    Php: BCMath bc是Binary Calculator的缩写.bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_ope ...

  8. 数据分析计算xgboost模块

    一.安装xgboost方法 摘要:之前为了安装xgboost,少不了进入各种坑,但最终安装成功了!首先, 准备的工作:,下载mingw64,链接https://pan.baidu.com/s/1i5C ...

  9. 云技术:弹性计算ECS

    云计算(Cloud Computing)被业界看作继大型计算机.个人计算机.互联网之后的第四次IT产业革命,正日益成为未来互联网与移动技术相结合的一种新兴计算模式.云计算提供了IT基础设施和平台服务的 ...

随机推荐

  1. 方程式漏洞之复现window2008/win7 远程命令执行漏洞

    前几天就想写的,因为一些缘故就没写.此次是在外网环境下进行的.大家在内网中也一个样. 方法: 使用Eternalblue模块,剑测是否有漏洞然后msf生成一个dll直接反弹shell. PS:win版 ...

  2. lua工具库penlight--01简介

    lua的设计目标是嵌入式语言,所以和其它动态语言(如python.ruby)相比其自带的库缺少很多实用功能. 好在有lua社区有Penlight,为lua提供了许多强大的功能,接下来的几篇博客,我会简 ...

  3. PLSQL 配置连接ORACLE数据库

    http://blog.csdn.net/leather0906/article/details/6456095 PLSQL配置登录用户信息 http://www.2cto.com/database/ ...

  4. Unix网络编程中的五种I/O模型_转

    转自:Unix网络编程中的的五种I/O模型 下面主要是把unp第六章介绍的五种I/O模型. 1. 阻塞I/O模型 例如UDP函数recvfrom的内核到应用层.应用层到内核的调用过程是这样的:首先把描 ...

  5. UML概述

    UML (Unified Modeling Language)统一建模语言,是描述.构造和文档化系统制品的可视化语言,是一种图形表示法. UML用途:UML是一种工具,主要用在我们对软件用面向对象的方 ...

  6. php -- 对象遍历

    对象遍历:foreach,遍历对象的公有属性(将公有属性的值和属性名赋值给对应$value和$key) 遍历某一个属性的数组,实现Iterator接口 接口iterator:类实现Iterator接口 ...

  7. PWA(Progressive Web App)入门系列:(一)PWA简单介绍

    前言 PWA做为一门Google推出的WEB端的新技术,长处不言而喻.但眼下对于相关方面的知识不是非常丰富.这里我推出一下这方面的新手教程系列.提供PWA方面学习. 什么是PWA PWA全称Progr ...

  8. Android SDK代理server解决国内不能更新下载问题

    读者须知:本篇文章中最靠谱的是第三种方式,近期有读者反映第三种方式也不行了,以下提供一点其它途径的开源镜像网站: 国内高校的开源镜像站 中国科学技术大学(debian.ustc.edu.cn) 上海交 ...

  9. mysql_ado的demo

    winform程序 http://pan.baidu.com/s/1nvxm5br

  10. django admin后台css样式丢失

    尼玛 坑爹啊 怎么光秃秃的,跟人家的不一样啊 打开firebug 发现报错,找不到css 通过google找到原因,是因为admin所需的js ,css等静态文件虽然都在django的安装目录内,但是 ...