百分比收益率和對數(shù)收益率,百分比收益率和對數(shù)收益率的區(qū)別?
本文作為金融量化分析的入門基礎之一,手把手帶領大家使用Python計算股票的收益率,重點展示如何利用Python對日收益率數(shù)據(jù)向月、年收益率轉(zhuǎn)換,然后演示個股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 #正常顯示畫圖時出現(xiàn)的中文和負號from pylab import mplmpl.rcParams[‘font.sans-serif’]=[‘SimHei’]mpl.rcParams[‘axes.unicode_minus’]=False
收益率轉(zhuǎn)化
對日期進行處理,分別將日對數(shù)收益率轉(zhuǎn)化為月和年收益率。主要有三個步驟:
(1)估計股票每日對數(shù)收益率;
(2)加總對數(shù)收益率到每月(年);
(3)將月(年)收益率轉(zhuǎn)化為百分比收益率
stock=’sh’df=ts.get_k_data(stock,start=’1990-12-20′)
使用tushare中的get_k_data()得到的數(shù)據(jù)框索引是順序數(shù)字,而不是日期序列,因此,為分析方面,需要進行變換,即使用“date”作為索引。
df.index=pd.to_datetime(df.date)#del df[‘date’] #刪掉該列df.tail() #這時候可以看到索引已經(jīng)是date了
步驟一:計算對數(shù)收益率
#計算的時候第一個數(shù)成為缺失值,刪掉lograte=np.log(df.close/df.close.shift(1))[1:]
步驟二:加總對數(shù)收益率到每月
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()
步驟三:將月(年)收益率轉(zhuǎn)化為百分比收益率
ret_monthly=y.groupby(y.index).sum()ret_monthly.tail()
#將日收益率轉(zhuǎn)化為年收益率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$系數(shù)和$\alpha值$
這里的beta和alpha系數(shù)都來自資本資產(chǎn)定價模型,先來看看CAPM:
E(ri?)=rf+β(E(rm?)?rf?),
其中,E(ri?)是股票i的預期收益率,rf是無風險利率,E(rm?)是市場指數(shù)收益率;
β系數(shù)是系統(tǒng)性風險,在評估股市波動風險與投資機會的方法中,常用來衡量結(jié)構(gòu)性與系統(tǒng)性風險,可以簡單理解為個股波動相對大盤波動的偏離程度。CAPM的計量模型可以表示為:
ri?=α+βrm+ε,
其中α可以理解為超額收益率,ε是隨機擾動,可以理解為個體風險。
#先定義獲取股票數(shù)據(jù)和計算收益率的函數(shù)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的函數(shù)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完整源碼、量化投資前沿分析框架,與博主直接交流、結(jié)識圈內(nèi)朋友等。
好了,這篇文章就和大家分享到這里,希望可以幫助到大家。另外,想要實現(xiàn)投資穩(wěn)定盈利,建議大家可以多學習一些相關的課程內(nèi)容,這里給大家推薦一個知識平臺——愛雅微課:https://ke.iya88.com/,里面提供了全網(wǎng)最全最實戰(zhàn)的課程,很多大佬都是該網(wǎng)站的會員,抓緊收藏起來吧!
本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內(nèi)容,請發(fā)送郵件至 [email protected] 進行舉報,一經(jīng)查實,本站將立刻刪除。如若轉(zhuǎn)載,請注明出處:http://m.weightcontrolpatches.com/57300.html