pyfinance简介
在查找如何使用Python实现滚动回归时 , 发现一个很有用的量化金融包——pyfinance 。顾名思义,pyfinance是为投资管理和证券收益分析而构建的Python分析包 , 主要是对面向定量金融的现有包进行补充,如pyfolio和pandas等 。pyfinance包含六个模块 ,
- datasets.py :金融数据下载;
- general.py:通用财务计算 , 例如主动份额计算 , 收益分配近似值和跟踪误差优化;
- ols.py:回归分析 , 支持pandas滚动窗口回归;
- options.py:期权衍生品计算和策略分析;
- returns.py:通过CAPM框架对财务时间序列进行统计分析 , 旨在模拟FactSet Research Systems和Zephyr等软件的功能,并提高了速度和灵活性;
- utils.py:基础架构 。
本文主要围绕returns模块,介绍pyfinance在证券投资分析中的应用,后续将逐步介绍datasets、options、ols等模块 。
returns模块应用实例
pyfinance的安装比较简单,直接在cmd上输入&34;即可 。returns模块主要以TSeries类为主体,相当于对pandas的Series进行类扩展,使其实现更多功能 , 支持证券投资分析中基于CAMP框架的业绩评价指标计算 。引用returns模块时,直接使用&34;即可 。
下面以tushare为数据接口 , 先定义一个数据获取函数,在函数里对收益率数据使用TSeries进行转换,之后便可以直接使用TSeries类的相关函数 。
importpandasaspd
importnumpyasnp
frompyfinanceimportTSeries
importtushareasts
defget_data(code,start=&39;,end=&39;):
df=ts.get_k_data(code,start,end)
df.index=pd.to_datetime(df.date)
ret=df.close/df.close.shift(1)-1
获取中国平安数据
tss=get_data(&39;)
年化收益率
anl_ret=tss.anlzd_ret()
计算周期收益率
q_ret=tss.rollup(&39;)
a_ret=tss.rollup(&39;)
print(f&39;)
print(f&39;)
39;季度收益率:{q_ret.tail().round(4)}&print(f&39;)
【「手把手教你」使用pyfinance进行证券收益分析】输出结果:
累计收益率:205.79%
年化收益率:12.24%
可视化每个季度收益率frompyechartsimportBar
attr=q_ret.index.strftime(&39;)
v1=(q_ret*100).round(2).values
bar=Bar(&39;)
bar.add(&39;,attr,v1,)
bar
frompyechartsimportBar
attr=a_ret.index.strftime(&39;)
v1=(a_ret*100).round(2).values
bar=Bar(&39;)
bar.add(&39;,attr,v1,is_label_show=True,
is_splitline_show=False)
bar
02CAPM模型相关指标
基于CAPM模型计算alpha、beta、回归决定系数R2、t统计量和残差项等 。实际上主要使用了ols回归,因此如果要获得这些动态的alpha和beta值 , 可以进一步借助ols模块的滚动回归函数了,这将在后续推文介绍其应用 。
为保证二者长度一致,以中国平安的索引为准
benchmark=get_data(&39;)
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&39;)
print(f&39;)
print(f&39;)
alpha:0.0004,t统计量:1.55
beta:1.0634 , t统计量:60.09
回归决定系数R2:0.606
03风险指标
风险指标主要包括标准差和最大回撤 。在计算标准差时,注意需要修改默认参数,打开pyfinance安装包所在路径,如果是安装了Anaconda,进入以下路径:
c:\\Anaconda3\\Lib\\site-packages\\pyfinance,打开returns源文件,找到anlzd_stdev和semi_stdev函数 , 将freq默认None改成250 。
下行标准差
s_std=tss.semi_stdev()
39;年化标准差:{a_std*100:.2f}%&39;下偏标准差:{s_std*100:.2f}%&39;最大回撤差:{md*100:.2f}%&39;比基准收益高的时间占比:{bat*100:.2f}%&39;上行期与基准收益比:{uc*100:.2f}%&39;下行期与基准收益比:{dc*100:.2f}%&39;上行期与下行期比:{tc*100:.2f}%&39;个股下行时间占比:{pct_neg*100:.2f}%&39;个股上行时间占比:{pct_pos*100:.2f}%&39;信息比率:{ir:.3f}&39;特雷诺指数:{tr:.3f}&39;夏普比率:{sr:.2f}&39;索提诺比率:{sor:.2f}&39;卡玛比率:{cr:.2f}&39;2011-01-01&39;&39;hs300&收益率
39;年化收益率&累积收益率
dd[&39;]=tss.cuml_ret()
39;alpha&39;beta&风险指标
39;年化标准差&下行标准差
dd[&39;]=tss.semi_stdev()
39;最大回撤&信息比率和特雷诺指数
dd[&39;]=tss.info_ratio(benchmark)
dd[&39;]=tss.treynor_ratio(benchmark)
39;夏普比率&39;索提诺比率&39;calmar比率&获取多只股票数据
df=pd.DataFrame(index=performance(&39;).index)stocks={&39;:&39;,&39;:&39;,\\&39;:&39;,&39;:&39;,\\&39;:&39;,&39;:&39;,\\&39;:&39;,&39;:&39;,\\&39;:&39;,&39;:&39;}for name,code in stocks.items():try:df[name]=performance(code).valuesexcept:continue
df
以上就是朝夕生活(www.30zx.com)关于“「手把手教你」使用pyfinance进行证券收益分析”的详细内容,希望对大家有所帮助!
猜你喜欢
- 金融从业第一关——证券从业资格考试
- 在家偷看“不良网站”,以为能瞒天过海?手机上这3痕迹出卖你!
- 优先股概念概念股龙头有哪些?2023优先股概念概念股龙头一览
- B8 合肥2013款奥迪A4L烧机油不远千里来浙江,不辱使命终搞定
- 黄庭民:试论美国金融帝国主义的腐朽性与寄生性
- 一 【手把手教你】入门量化回测最强神器backtrader
- 网贷协商还款后平台不认账如何办?协商还款会爆通信录吗?
- “金融大咖”直播荐股,“致富”的是谁?
- 2023年首套房按揭贷利率降息开始了,按揭贷利率进入“3.8%”时期