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