欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python數(shù)據(jù)可視化使用pyfinance分析證券收益示例詳解

 更新時間:2021年11月19日 15:49:53   作者:Python學習與數(shù)據(jù)挖掘  
這篇文章主要為大家介紹了python數(shù)據(jù)可視化使用pyfinance分析證券收益的示例詳解及pyfinance中returns模塊的應用,有需要的朋友可以借鑒參考下,希望能夠有所幫助

pyfinance簡介

在查找如何使用Python實現(xiàn)滾動回歸時,發(fā)現(xiàn)一個很有用的量化金融包——pyfinance。顧名思義,pyfinance是為投資管理和證券收益分析而構建的Python分析包,主要是對面向定量金融的現(xiàn)有包進行補充,如pyfolio和pandas等。

pyfinance包含六個模塊

datasets.py :金融數(shù)據(jù)下載(基于request進行數(shù)據(jù)爬蟲,有些數(shù)據(jù)由于外網(wǎng)受限已經(jīng)無法下載);

general.py:通用財務計算,例如主動份額計算,收益分配近似值和跟蹤誤差優(yōu)化;

ols.py:回歸分析,支持pandas滾動窗口回歸;

options.py:期權衍生品計算和策略分析;

returns.py:通過CAPM框架對財務時間序列進行統(tǒng)計分析,旨在模擬FactSet Research Systems和Zephyr等軟件的功能,并提高了速度和靈活性;

utils.py:基礎架構。

圖片

本文主要圍繞returns模塊,介紹pyfinance在證券投資分析中的應用,后續(xù)將逐步介紹datasets、options、ols等模塊。

returns模塊應用實例

pyfinance的安裝比較簡單,直接在cmd(或anaconda prompt)上輸入"pip install pyfinance"即可。returns模塊主要以TSeries類為主體(暫不支持dataframe),相當于對pandas的Series進行類擴展,使其實現(xiàn)更多功能,支持證券投資分析中基于CAMP(資本資產(chǎn)定價模型)框架的業(yè)績評價指標計算。引用returns模塊時,直接使用"from pyfinance import TSeries"即可。

圖片

下面以tushare為數(shù)據(jù)接口,先定義一個數(shù)據(jù)獲取函數(shù),在函數(shù)里對收益率數(shù)據(jù)使用TSeries進行轉(zhuǎn)換,之后便可以直接使用TSeries類的相關函數(shù)。

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())
#獲取中國平安數(shù)據(jù)
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、回歸決定系數(shù)R2、t統(tǒng)計量和殘差項等。實際上主要使用了ols回歸,因此如果要獲得這些動態(tài)的alpha和beta值,可以進一步借助ols模塊的滾動回歸函數(shù)(PandasRollingOLS)了,這將在后續(xù)推文介紹其應用。

#以滬深300指數(shù)為基準
#為保證二者長度一致,以中國平安的索引為準
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統(tǒng)計量:{tstat_a:.2f}')
print(f'beta :{beta:.4f},t統(tǒng)計量:{tstat_b:.2f}')
print(f'回歸決定系數(shù)R2:{tss.rsq(benchmark):.3f}')

alpha:0.0004,t統(tǒng)計量:1.55
beta :1.0634,t統(tǒng)計量:60.09
回歸決定系數(shù)R2:0.606

風險指標

風險指標主要包括標準差和最大回撤。在計算標準差時,注意需要修改默認參數(shù),打開pyfinance安裝包所在路徑,如果是安裝了Anaconda,進入以下路徑:

c:\Anaconda3\Lib\site-packages\pyfinance,打開returns源文件,找到anlzd_stdev和semi_stdev函數(shù),將freq默認None改成250(一年的交易天數(shù))。

#年化標準差
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%

下偏標準差主要是為解決收益率分布的不對稱問題,當收益率函數(shù)分布左偏的情況下,使用正態(tài)分布會低估風險,因此使用傳統(tǒng)夏普比率分母使用全樣本標準差進行估計不太合適,應使用收益對無風險投資收益的偏離。

基準比較指標

基準比較指標是需要指定一個基準(benchmark),如將滬深300指數(shù)作為中國平安個股的基準進行比較分析。

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%

此外,信息比率和特雷諾指數(shù)是兩個常用的基準比較評價指標,特別是用于對基金產(chǎn)品或投資組合的業(yè)績進行量化評價。

信息比率(information ratio):以馬克維茨的均值方差模型為基礎,衡量超額風險所帶來的超額收益,表示單位主動風險所帶來的超額收益。IR=α ∕ ω (α為組合的超額收益,ω為主動風險),分子α為真實預期收益率與定價模型所計算出的收益率的差,分母為殘差風險即殘差項的標準差。

特雷諾指數(shù)(Treynor ratio):衡量單位風險的超額收益,計算公式為:TR=(Rp―Rf)/βp,其中:TR表示特雷諾業(yè)績指數(shù),Rp表示某投資組合平均收益率,Rf為平均無風險利率,βp表示某投資組合的系統(tǒng)風險。

ir=tss.info_ratio(benchmark)
tr=tss.treynor_ratio(benchmark)
print(f'信息比率:{ir:.3f}')
print(f'特雷諾指數(shù):{tr:.3f}')
信息比率:0.433
特雷諾指數(shù):0.096

風險調(diào)整收益指標

風險調(diào)整收益率指標比較常用的有夏普比率(sharpe ratio)、索提諾比率(sortino ratio)和卡瑪比率(calmar ratio),這三個指標都是風險調(diào)整后收益比率,因此分子都是收益指標,分母都是風險指標。

  • 夏普比率(Sharpe Ratio):風險調(diào)整后的收益率,計算公式:=[E(Rp)-Rf]/σp,其中E(Rp):投資組合預期報酬率,Rf:無風險利率,σp:投資組合的標準差。計算投資組合每承受一單位總風險,會產(chǎn)生多少的超額報酬。
  • 索提諾比率(Sortino Ratio):與夏普比率思路一致,核心在于分母應用了下行波動率概念(Downside Risk),計算標準差的時候,不采用均值,而是一個設定的可接受最小收益率(r_min),收益率序列中,超出這個最小收益率的收益距離按照0計算,低于這個收益率的平方距離累積,這樣標準差就變成了半個下行標準差。對應的,索提諾比率的分子也采用策略收益超出最低收益的部分。與夏普比率相比,索提諾比率更看重對(左)尾部的預期損失分析,而夏普比率則是對全體樣本進行分析。
  • Calmar比率(Calmar Ratio) :描述收益和最大回撤之間的關系,計算方式為年化收益率與歷史最大回撤之間的比率。Calmar比率數(shù)值越大,投資組合業(yè)績表現(xiàn)越好。
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

綜合業(yè)績評價指標分析實例

下面將上述常用指標進行綜合,并獲取多只個股進行比較分析。

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()
    #信息比率和特雷諾指數(shù)
    dd['信息比率']=tss.info_ratio(benchmark)
    dd['特雷納指數(shù)']=tss.treynor_ratio(benchmark)
    #風險調(diào)整收益率
    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

獲取多只個股(也構建投資組合)數(shù)據(jù),對比評估業(yè)績評價指標:

#獲取多只股票數(shù)據(jù)
df=pd.DataFrame(index=performance('601318').index)
stocks={'中國平安':'601318','貴州茅臺':'600519',\
        '海天味業(yè)':'603288','格力電器':'000651',\
        '萬科A':'00002','比亞迪':'002594',\
        '云南白藥':'000538','雙匯發(fā)展':'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)的“膠水”語言,因此善于借用已有的包進行計算和編程,可以提高效率,減少自己“造輪子”的時間和精力。

以上就是python數(shù)據(jù)可視化使用pyfinance分析證券收益示例詳解的詳細內(nèi)容,更多關于pyfinance分析證券收益的資料請關注腳本之家其它相關文章!

相關文章

  • 在jupyter notebook 添加 conda 環(huán)境的操作詳解

    在jupyter notebook 添加 conda 環(huán)境的操作詳解

    這篇文章主要介紹了在jupyter notebook 添加 conda 環(huán)境的操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python日志模塊loguru詳解

    python日志模塊loguru詳解

    大家好,本篇文章主要講的是python日志模塊loguru詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • django 自定義用戶user模型的三種方法

    django 自定義用戶user模型的三種方法

    這篇文章主要介紹了django 自定義用戶user模型的三種方法,需要的朋友可以參考下
    2014-11-11
  • 用pandas按列合并兩個文件的實例

    用pandas按列合并兩個文件的實例

    下面小編就為大家分享一篇用pandas按列合并兩個文件的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python 修改列表中的元素方法

    Python 修改列表中的元素方法

    今天小編就為大家分享一篇Python 修改列表中的元素方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python中的sorted函數(shù)使用解析

    Python中的sorted函數(shù)使用解析

    這篇文章主要介紹了Python中的sorted函數(shù)使用解析,sorted()函數(shù)可以對可迭代對象進行排序,并且可以人為指定排序的依據(jù)以及方式,本文提供了解決與部分實現(xiàn)代碼,需要的朋友可以參考下
    2023-10-10
  • Python字符串str超詳細詳解(適合新手!)

    Python字符串str超詳細詳解(適合新手!)

    str函數(shù)是Python的內(nèi)置函數(shù),它將參數(shù)轉(zhuǎn)換成字符串類型,即人適合閱讀的形式,下面這篇文章主要給大家介紹了關于Python字符串str超詳細詳解的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Python實現(xiàn)文件復制刪除

    Python實現(xiàn)文件復制刪除

    本文通過2個具體的實例,給大家展示了如何使用Python實現(xiàn)文件的復制與刪除,非常的簡單實用,有需要的小伙伴可以參考下
    2016-04-04
  • python 一個figure上顯示多個圖像的實例

    python 一個figure上顯示多個圖像的實例

    今天小編就為大家分享一篇python 一個figure上顯示多個圖像的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • pytorch 中forward 的用法與解釋說明

    pytorch 中forward 的用法與解釋說明

    這篇文章主要介紹了pytorch 中forward 的用法與解釋說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論