广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python使用pyfinance包进行证券收益分析
  • 431
分享到

Python使用pyfinance包进行证券收益分析

2024-04-02 19:04:59 431人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录pyfinance简介returns模块应用实例收益率计算CAPM模型相关指标风险指标基准比较指标风险调整收益指标综合业绩评价指标分析实例结语技术交流pyfinance简介 da

pyfinance简介

datasets.py :金融数据下载(基于request进行数据爬虫,有些数据由于外网受限已经无法下载);

general.py:通用财务计算,例如主动份额计算,收益分配近似值和跟踪误差优化

ols.py:回归分析,支持pandas滚动窗口回归;

options.py:期权衍生品计算和策略分析;

returns.py:通过CAPM框架对财务时间序列进行统计分析,旨在模拟FactSet Research Systems和Zephyr等软件的功能,并提高了速度和灵活性;

utils.py:基础架构

图片

本文主要围绕returns模块,介绍pyfinance在证券投资分析中的应用,后续将逐步介绍datasets、options、ols等模块。

returns模块应用实例

pyfinance的安装比较简单,直接在cmd(或anaconda prompt)上输入"pip install pyfinance"即可。returns模块主要以TSeries类为主体(暂不支持dataframe),相当于对pandas的Series进行类扩展,使其实现更多功能,支持证券投资分析中基于CAMP(资本资产定价模型)框架的业绩评价指标计算。引用returns模块时,直接使用"from pyfinance import TSeries"即可。

图片

下面以tushare为数据接口,先定义一个数据获取函数,在函数里对收益率数据使用TSeries进行转换,之后便可以直接使用TSeries类的相关函数。


import pandas as pd  
import numpy as np
from pyfinance import TSeries
import tushare as ts
def get_data(code,start='2011-01-01',end=''):
    df=ts.get_k_data(code,start,end)
    df.index=pd.to_datetime(df.date)
    ret=df.close/df.close.shift(1)-1
    #返回TSeries序列
    return TSeries(ret.dropna())

#获取中国平安数据
tss=get_data('601318')
#tss.head()

收益率计算

pyfinance的returns提供了年化收益率(anlzd_ret)、累计收益率(cuml_ret)和周期收益率(rollup)等,下面以平安银行股票为例,计算收益率指标。


#年化收益率
anl_ret=tss.anlzd_ret()
#累计收益率
cum_ret=tss.cuml_ret()
#计算周期收益率
q_ret=tss.rollup('Q')
a_ret=tss.rollup('A')

print(f'年化收益率:{anl_ret*100:.2f}%')
print(f'累计收益率:{cum_ret*100:.2f}%')
#print(f'季度收益率:{q_ret.tail().round(4)}')
#print(f'历年收益率:{a_ret.round(4)}')

输出结果:

累计收益率:205.79%

年化收益率:12.24%


#可视化每个季度(年)收益率
from pyecharts import Bar
attr=q_ret.index.strftime('%Y%m')
v1=(q_ret*100).round(2).values
bar=Bar('中国平安各季度收益率%')bar.add('',attr,v1,)
bar

图片


from pyecharts import Bar
attr=a_ret.index.strftime('%Y')
v1=(a_ret*100).round(2).values
bar=Bar('中国平安历年收益率%')
bar.add('',attr,v1,is_label_show=True,
       is_splitline_show=False)
bar

CAPM模型相关指标

基于CAPM模型计算alpha、beta、回归决定系数R2、t统计量和残差项等。实际上主要使用了ols回归,因此如果要获得这些动态的alpha和beta值,可以进一步借助ols模块的滚动回归函数(PandasRollinGoLS)了,这将在后续推文介绍其应用。


#以沪深300指数为基准
#为保证二者长度一致,以中国平安的索引为准
benchmark=get_data('hs300')
benchmark=benchmark.loc[tss.index]

alpha,beta,rsq=tss.alpha(benchmark),tss.beta(benchmark),tss.rsq(benchmark)
tstat_a,tstat_b=tss.tstat_alpha(benchmark),tss.tstat_beta(benchmark)
print(f'alpha:{alpha:.4f},t统计量:{tstat_a:.2f}')
print(f'beta :{beta:.4f},t统计量:{tstat_b:.2f}')
print(f'回归决定系数R2:{tss.rsq(benchmark):.3f}')

alpha:0.0004,t统计量:1.55
beta :1.0634,t统计量:60.09
回归决定系数R2:0.606

风险指标

风险指标主要包括标准差和最大回撤。在计算标准差时,注意需要修改默认参数,打开pyfinance安装包所在路径,如果是安装了Anaconda,进入以下路径:

c:\Anaconda3\Lib\site-packages\pyfinance,打开returns源文件,找到anlzd_stdev和semi_stdev函数,将freq默认None改成250(一年的交易天数)。


#年化标准差
a_std=tss.anlzd_stdev()
#下行标准差
s_std=tss.semi_stdev()
#最大回撤
md=tss.max_drawdown()
print(f'年化标准差:{a_std*100:.2f}%')
print(f'下偏标准差:{s_std*100:.2f}%')
print(f'最大回撤差:{md*100:.2f}%')

年化标准差:31.37%
下偏标准差:0.43%
最大回撤差:-45.76%

下偏标准差主要是为解决收益率分布的不对称问题,当收益率函数分布左偏的情况下,使用正态分布会低估风险,因此使用传统夏普比率分母使用全样本标准差进行估计不太合适,应使用收益对无风险投资收益的偏离。

基准比较指标

基准比较指标是需要指定一个基准(benchmark),如将沪深300指数作为中国平安个股的基准进行比较分析。


bat=tss.batting_avg(benchmark)
uc=tss.up_capture(benchmark)
dc=tss.down_capture(benchmark)
tc=uc/dc
pct_neg=tss.pct_negative()
pct_pos=tss.pct_positive()
print(f'比基准收益高的时间占比:{bat*100:.2f}%')
print(f'上行期与基准收益比:{uc*100:.2f}%')
print(f'下行期与基准收益比:{dc*100:.2f}%')
print(f'上行期与下行期比:{tc*100:.2f}%')
print(f'个股下行(收益负)时间占比:{pct_neg*100:.2f}%')
print(f'个股上行(收益正)时间占比:{pct_pos*100:.2f}%')

比基准收益高的时间占比:47.83%
上行期与基准收益比:111.70%
下行期与基准收益比:105.32%
上行期与下行期比:106.06%
个股下行(收益负)时间占比:48.94%
个股上行(收益正)时间占比:50.00%

此外,信息比率和特雷诺指数是两个常用的基准比较评价指标,特别是用于对基金产品或投资组合的业绩进行量化评价。

信息比率(infORMation ratio):以马克维茨的均值方差模型为基础,衡量超额风险所带来的超额收益,表示单位主动风险所带来的超额收益。IR=α ∕ ω (α为组合的超额收益,ω为主动风险),分子α为真实预期收益率与定价模型所计算出的收益率的差,分母为残差风险即残差项的标准差。

特雷诺指数(Treynor ratio):衡量单位风险的超额收益,计算公式为:TR=(Rp―Rf)/βp,其中:TR表示特雷诺业绩指数,Rp表示某投资组合平均收益率,Rf为平均无风险利率,βp表示某投资组合的系统风险。


ir=tss.info_ratio(benchmark)
tr=tss.treynor_ratio(benchmark)
print(f'信息比率:{ir:.3f}')
print(f'特雷诺指数:{tr:.3f}')

信息比率:0.433
特雷诺指数:0.096

风险调整收益指标

风险调整收益率指标比较常用的有夏普比率(sharpe ratio)、索提诺比率(sortino ratio)和卡玛比率(calmar ratio),这三个指标都是风险调整后收益比率,因此分子都是收益指标,分母都是风险指标。

  • 夏普比率(Sharpe Ratio):风险调整后的收益率,计算公式:=[E(Rp)-Rf]/σp,其中E(Rp):投资组合预期报酬率,Rf:无风险利率,σp:投资组合的标准差。计算投资组合每承受一单位总风险,会产生多少的超额报酬。
  • 索提诺比率(Sortino Ratio):与夏普比率思路一致,核心在于分母应用了下行波动率概念(Downside Risk),计算标准差的时候,不采用均值,而是一个设定的可接受最小收益率(r_min),收益率序列中,超出这个最小收益率的收益距离按照0计算,低于这个收益率的平方距离累积,这样标准差就变成了半个下行标准差。对应的,索提诺比率的分子也采用策略收益超出最低收益的部分。与夏普比率相比,索提诺比率更看重对(左)尾部的预期损失分析,而夏普比率则是对全体样本进行分析。
  • Calmar比率(Calmar Ratio) :描述收益和最大回撤之间的关系,计算方式为年化收益率与历史最大回撤之间的比率。Calmar比率数值越大,投资组合业绩表现越好。

sr=tss.sharpe_ratio()
sor=tss.sortino_ratio(freq=250)
cr=tss.calmar_ratio()
print(f'夏普比率:{sr:.2f}')
print(f'索提诺比率:{sor:.2f}')
print(f'卡玛比率:{cr:.2f}')

夏普比率:0.33
索提诺比率:28.35
卡玛比率:0.27

综合业绩评价指标分析实例

下面将上述常用指标进行综合,并获取多只个股进行比较分析。


def performance(code,start='2011-01-01',end=''):
    tss=get_data(code,start,end)
    benchmark=get_data('hs300',start,end).loc[tss.index]
    dd={}
    #收益率
    #年化收益率
    dd['年化收益率']=tss.anlzd_ret()
    #累积收益率
    dd['累计收益率']=tss.cuml_ret()
    #alpha和beta
    dd['alpha']=tss.alpha(benchmark)
    dd['beta']=tss.beta(benchmark)
    #风险指标
    #年化标准差
    dd['年化标准差']=tss.anlzd_stdev()
    #下行标准差
    dd['下行标准差']=tss.semi_stdev()
    #最大回撤
    dd['最大回撤']=tss.max_drawdown()
    #信息比率和特雷诺指数
    dd['信息比率']=tss.info_ratio(benchmark)
    dd['特雷纳指数']=tss.treynor_ratio(benchmark)
    #风险调整收益率
    dd['夏普比率']=tss.sharpe_ratio()
    dd['索提诺比率']=tss.sortino_ratio(freq=250)
    dd['calmar比率']=tss.calmar_ratio()
    df=pd.DataFrame(dd.values(),index=dd.keys()).round(4)
    return df

获取多只个股(也构建投资组合)数据,对比评估业绩评价指标:


#获取多只股票数据

df=pd.DataFrame(index=performance('601318').index)
stocks={'中国平安':'601318','贵州茅台':'600519',\
        '海天味业':'603288','格力电器':'000651',\
        '万科A':'00002','比亚迪':'002594',\
        '云南白药':'000538','双汇发展':'000895',\
        '海尔智家':'600690','青岛啤酒':'600600'}
for name,code in stocks.items():
    try:
        df[name]=performance(code).values
    except:
        continue

d

图片

结语

pyfinance主要为证券投资管理和绩效评价指标而设计的python包,对于考CFA和FRM的读者相当实用。实际上,pyfinance的returns模块是对pandas的Series类进行了扩展,从而支持证券投资收益分析和绩效评价。Python是建立在各种轮子上(module)的“胶水”语言,因此善于借用已有的包进行计算和编程,可以提高效率,减少自己“造轮子”的时间和精力。本文主要介绍了pyfinance中returns模块的应用,其他模块的应用将在后续推文中进行介绍。

技术交流

欢迎转载、收藏、有所收获点赞支持一下!

在这里插入图片描述

到此这篇关于Python使用pyfinance包进行证券收益分析的文章就介绍到这了,更多相关Python pyfinance包内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python使用pyfinance包进行证券收益分析

本文链接: https://www.lsjlt.com/news/157765.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python使用pyfinance包进行证券收益分析
    目录pyfinance简介returns模块应用实例收益率计算CAPM模型相关指标风险指标基准比较指标风险调整收益指标综合业绩评价指标分析实例结语技术交流pyfinance简介 da...
    99+
    2022-11-12
  • python数据可视化使用pyfinance分析证券收益示例详解
    目录pyfinance简介pyfinance包含六个模块returns模块应用实例收益率计算CAPM模型相关指标风险指标基准比较指标风险调整收益指标综合业绩评价指标分析实例结语pyf...
    99+
    2022-11-12
  • 使用Python进行数据分析——方差分析
    大家好,方差分析可以用来判断几组观察到的数据或者处理的结果是否存在显著差异。本文介绍的方差分析(Analysis of Variance,简称ANOVA)就是用于检验两组或者两组以上样本的均值是否具备显著性差异的一种数理统计方法。 根据影...
    99+
    2023-09-12
    数据分析 数据挖掘 信息可视化 Powered by 金山文档
  • 使用Python进行数据分析——线性回归分析
    大家好,线性回归是确定两种或两种以上变量之间互相依赖的定量关系的一种统计分析方法。根据自变量的个数,可以将线性回归分为一元线性回归和多元线性回归分析。 一元线性回归:就是只包含一个自变量,且该自变量与因变量之间的关系是线性关系。例如通过广...
    99+
    2023-10-04
    python 数据分析 Powered by 金山文档
  • 使用 python 进行微信好友分析
    使用 python 进行微信好友分析 1. 使用到的库 ① wxpy:初始化微信机器人 ② openpyxl:保存微信好友数据为Excel表格 ③ pyecharts:生成可视化的地图 ④ wordcloud、matplotlib、jie...
    99+
    2023-01-31
    好友 python
  • 使用Python进行同期群分析(CohortAnalysis)
    同期群分析 同期群分析概念 同期群(Cohort)的字面意思(有共同特点或举止类同的)一群人,比如不同性别,不同年龄。 在《精益数据分析》中的第2章 创业的记分牌 中介绍了三种分析方...
    99+
    2023-03-24
    Python 实现同期群分析 同期群分析Python实战
  • 怎么使用Python进行数据分析
    使用Python进行数据分析可以通过以下几个步骤:1. 安装Python和相关库:首先需要安装Python解释器,推荐使用Anaco...
    99+
    2023-08-23
    Python
  • Python怎么使用Pandas进行数据分析
    首先,确保您已经安装了Pandas库。如果没有,请使用以下命令安装:pip install pandas一. 导入Pandas库import pandas as pd二. 读取数据使用Pandas,可以方便地读取多种数据格式,包括CSV、E...
    99+
    2023-05-16
    Python Pandas
  • 怎么使用Python进行同期群分析
    本篇内容主要讲解“怎么使用Python进行同期群分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python进行同期群分析”吧!同期群分析同期群分析概念同期群(Cohort)的字面意思...
    99+
    2023-07-05
  • 使用Python怎么对Syslog信息进行分析
    本篇文章给大家分享的是有关使用Python怎么对Syslog信息进行分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实验目的:对设备Syslong信息进行分析记录,并写入sq...
    99+
    2023-06-14
  • Python实践之使用Pandas进行数据分析
    目录一. 导入Pandas库二. 读取数据三. 查看数据四. 选择数据五. 数据清洗六. 数据分析七. 数据可视化八. 导出数据九. 实战案例总结在数据分析领域,Python的Pan...
    99+
    2023-05-18
    Python Pandas数据分析 Pandas数据分析 Python Pandas
  • Android中使用tcpdump、wireshark进行抓包并分析技术介绍
    本文主要介绍如何使用tcpdump和wireshark对Android应用程序进行抓包并分析,需要说明的是在抓包之前,你的Android设备必须root过了,另外你的电脑必须有...
    99+
    2022-06-06
    wireshark 抓包 tcpdump Android
  • 使用Python对零售商品进行数据分析
    目录一、主要内容:二、使用工具三、数据来源四、字段含义五、数据清洗1、查看总体数据特征2、修改列名3、检验缺失数据4、查看并转换数据类型5、查看异常值并删除六、数据分析1、总体销量数...
    99+
    2022-11-11
  • 如何使用Python进行社交媒体情感分析
    这篇文章给大家介绍如何使用Python进行社交媒体情感分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。学习自然语言处理的基础知识并探索两个有用的 Python 包。自然语言处理(NLP)是机器学习的一种,它解决了口语...
    99+
    2023-06-16
  • 使用python进行Oracle数据库性能趋势分析
    一、   概述 ...
    99+
    2022-10-18
  • python如何使用cProfile针对回测进行性能分析
    这篇文章主要讲解了“python如何使用cProfile针对回测进行性能分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python如何使用cProfile针对回测进行性能分析”吧!安装不...
    99+
    2023-06-02
  • 使用Python编程语言进行实践的示例分析
    这篇文章将为大家详细讲解有关使用Python编程语言进行实践的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。其实Python真的挺有意思的,用Python用做过不少有趣好玩的事儿,这...
    99+
    2023-06-02
  • 使用Python进行交易策略和投资组合分析
    我们将在本文中衡量交易策略的表现。并将开发一个简单的动量交易策略,它将使用四种资产类别:债券、股票和房地产。这些资产类别的相关性很低,这使得它们成为了极佳的风险平衡选择。动量交易策略这个策略是基于动量的的,因为交易者和投资者早就意识到动量的...
    99+
    2023-05-18
    Python 投资组合 交易策略
  • 怎么使用Python+ChatGPT进行游戏运营数据分析
    本篇内容介绍了“怎么使用Python+ChatGPT进行游戏运营数据分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据您的团队已经为您提...
    99+
    2023-07-05
  • 如何在 Linux 上使用 Python IDE 进行大数据分析?
    在Linux上使用Python IDE进行大数据分析是一项非常有用的技能。Python是一种易于学习且功能强大的编程语言,同时也具有大量的数据分析库和工具。Python IDE是一种能够提供代码编辑、调试和运行等功能的集成开发环境,能够大大...
    99+
    2023-07-28
    ide linux 大数据
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作