對數收益率 – 錢如故 http://m.weightcontrolpatches.com 最有價值的基金投資和股票投資理財的財經網站! Wed, 12 Oct 2022 02:03:16 +0000 zh-CN hourly 1 https://wordpress.org/?v=5.4.16 http://m.weightcontrolpatches.com/wp-content/uploads/2021/03/2021030407115910.jpg 對數收益率 – 錢如故 http://m.weightcontrolpatches.com 32 32 百分比收益率和對數收益率,百分比收益率和對數收益率的區(qū)別? http://m.weightcontrolpatches.com/57300.html http://m.weightcontrolpatches.com/57300.html#respond Wed, 02 Nov 2022 08:23:42 +0000 http://m.weightcontrolpatches.com/?p=57300 百分比收益率和對數收益率,百分比收益率和對數收益率的區(qū)別?

本文作為金融量化分析的入門基礎之一,手把手帶領大家使用Python計算股票的收益率,重點展示如何利用Python對日收益率數據向月、年收益率轉換,然后演示個股Alpha和Beta值的計算。關注微信公眾號:Python金融量化,獲取更多干貨。

#先引入后面可能用到的包(package)import pandas as pd import numpy as npfrom scipy import statsimport tushare as ts import matplotlib.pyplot as plt%matplotlib inline #正常顯示畫圖時出現的中文和負號from pylab import mplmpl.rcParams[‘font.sans-serif’]=[‘SimHei’]mpl.rcParams[‘axes.unicode_minus’]=False

收益率轉化

對日期進行處理,分別將日對數收益率轉化為月和年收益率。主要有三個步驟:

(1)估計股票每日對數收益率;

(2)加總對數收益率到每月(年);

(3)將月(年)收益率轉化為百分比收益率

stock=’sh’df=ts.get_k_data(stock,start=’1990-12-20′)

使用tushare中的get_k_data()得到的數據框索引是順序數字,而不是日期序列,因此,為分析方面,需要進行變換,即使用“date”作為索引。

df.index=pd.to_datetime(df.date)#del df[‘date’] #刪掉該列df.tail() #這時候可以看到索引已經是date了

步驟一:計算對數收益率

#計算的時候第一個數成為缺失值,刪掉lograte=np.log(df.close/df.close.shift(1))[1:]

步驟二:加總對數收益率到每月

month=[]index=lograte.indexfor i in range(0,np.size(lograte)): month.append(”.join([index[i].strftime(\”%Y\”),index[i].strftime(\”%m\”)]))y=pd.DataFrame(lograte.values,month,columns=[‘月收益率’]) y.tail()

步驟三:將月(年)收益率轉化為百分比收益率

ret_monthly=y.groupby(y.index).sum()ret_monthly.tail()

#將日收益率轉化為年收益率stock=’601318’df=ts.get_k_data(code=stock, ktype=’D’, autype=’qfq’, start=’2007-3-1′) df.index=pd.to_datetime(df[‘date’])logret=np.log(df.close/df.close.shift(1))[1:]year=[]d0=df.indexfor i in range(0,np.size(logret)): year.append(d0[i].strftime(\”%Y\”))y=pd.DataFrame(logret.values,year,columns=[‘年收益率’])ret_annual=np.exp(y.groupby(y.index).sum())-1ret_annual

計算股票的$\beta$系數和$\alpha值$

這里的beta和alpha系數都來自資本資產定價模型,先來看看CAPM:

E(ri?)=rf+β(E(rm?)?rf?),

其中,E(ri?)是股票i的預期收益率,rf是無風險利率,E(rm?)是市場指數收益率;

β系數是系統性風險,在評估股市波動風險與投資機會的方法中,常用來衡量結構性與系統性風險,可以簡單理解為個股波動相對大盤波動的偏離程度。CAPM的計量模型可以表示為:

ri?=α+βrm+ε,

其中α可以理解為超額收益率,ε是隨機擾動,可以理解為個體風險。

#先定義獲取股票數據和計算收益率的函數def get_return(code,startdate,endate): df=ts.get_k_data(code,ktype=’D’,autype=’qfq’, start=startdate,end=endate) p1=np.array(df.close[1:]) p0=np.array(df.close[:-1]) logret=np.log(p1/p0) rate=pd.DataFrame() rate[code]=logret rate.index=df[‘date’][1:] return rate#定義求beta和alpha的函數def alpha_beta(code,startdate,endate): mkt_ret=get_return(‘sh’,startdate,endate) stock_ret=get_return(code,startdate,endate) df=pd.merge(mkt_ret,stock_ret,left_index=True,right_index=True) x=df.iloc[:,0] y=df.iloc[:,1] beta,alpha,r_value,p_value,std_err=stats.linregress(x,y) return (alpha,beta)#定義求一系列股票在某個時間段的股票def stocks_alpha_beta(stocks,startdate,endate): df=pd.DataFrame() alpha=[] beta=[] for code in stocks.values(): a,b=alpha_beta(code,startdate,endate) alpha.append(float(‘%.4f’%a)) beta.append(float(‘%.2f’%b)) df[‘alpha’]=alpha df[‘beta’]=beta df.index=stocks.keys() return dfstartdate=’2017-01-01’endate=’2018-11-09’stocks={‘中國平安’:’601318′,’格力電器’:’000651′, ‘招商銀行’:’600036′,’恒生電子’:’600570′, ‘中信證券’:’600030′,’貴州茅臺’:’600519′}stocks_alpha_beta(stocks,startdate,endate)

import statsmodels.api as smimport tushare as tsimport pandas as pdimport numpy as npdef get_return(code,d0,d1): df=ts.get_k_data(code,start=d0,end=d1) p1=np.array(df.close[1:]) p0=np.array(df.close[:-1]) logret=np.log(p1/p0) rate=pd.DataFrame() rate[code]=logret rate.index=df[‘date’][1:] return ratedef beta(code,d0,d1): s_ret=get_return(code,d0,d1) sh_ret=get_return(‘sh’,d0,d1) df=pd.merge(s_ret,sh_ret,left_index=True,right_index=True) y=df.iloc[:,0] x=df.iloc[:,1] x=sm.add_constant(x) model=sm.OLS(y,x) results=model.fit() b=results.params[1] return bstocks={‘中國平安’:’601318′,’格力電器’:’000651′,’招商銀行’:’600036′, ‘中信證券’:’600030′,’貴州茅臺’:’600519′}d0=’2018-01-01’d1=’2018-11-13’for stock in stocks.values(): s=list (stocks.keys())[list(stocks.values()).index(stock)] print(s+\”的市場風險beta:%.3f\” % beta(stock,d0,d1))

中國平安的市場風險beta:1.278

格力電器的市場風險beta:1.219

招商銀行的市場風險beta:1.053

中信證券的市場風險beta:1.425

貴州茅臺的市場風險beta:1.145

關于Python金融量化

專注于分享Python在金融量化領域的應用。加入知識星球,可以免費獲取量化投資視頻資料、量化金融相關PDF資料、公眾號文章Python完整源碼、量化投資前沿分析框架,與博主直接交流、結識圈內朋友等。

]]>
http://m.weightcontrolpatches.com/57300.html/feed 0