python价值算法_第十课-Python金融学基础——夏普比率(Sharpe-ratio)和资产组合价值(portfolio-value)...
前面的課程主要是在研究Pandas的時序分析實現(xiàn),以及利用statsmodel對時序數(shù)據(jù)進行ARIMA以及有權(quán)重的ARIMA模型的建模,并嘗試預(yù)測未來的走向。從這節(jié)課開始,我們正式進入Python金融學(xué)基礎(chǔ),會介紹一些金融學(xué)的概念和實現(xiàn)方法。
本節(jié)課主要以蘋果、亞馬遜、IBM、思科以及沃爾瑪?shù)墓善笔袌鰞r格為原始數(shù)據(jù),分析這幾只股票的資產(chǎn)組合的計算方式和夏普比率的計算,其中會涉及到日收益率、累積收益率的計算等等。
本文主要流程:
一、基本概念
1.1 資產(chǎn)組合
我們的資產(chǎn)往往不是單一的,我們會同時購買好幾支股票或者基金,這樣總資產(chǎn)的收益其實是每個資產(chǎn)的按照比例的權(quán)重加和結(jié)果,并且如果購買的資產(chǎn)之間具有對沖,我們還能夠利用這點來降低風(fēng)險,減少總資產(chǎn)損失的不確定性。比如王婆一個兒子賣傘和一個兒子賣鞋的故事就是這樣,只要天放晴,賣鞋兒子生意好,但是傘賣不出去;同理,天下雨的時候賣傘的兒子生意好,鞋子賣不出去。其實天氣就是波動,或說在這里就是風(fēng)險,但是王婆家兩個兒子賣的東西其實有對沖的作用,也就是不管是天晴天陰,家里都會有生意,因此就降低了風(fēng)險可能帶來的損失。這就是一個資產(chǎn)組合。
1.2 夏普比率
夏普指數(shù)是一個用于計算根據(jù)風(fēng)險調(diào)整過的回報率的測量指標,說白了,就是說我們只要做投資,就肯定會有風(fēng)險,但在相同的回報率下,風(fēng)險有可能不一樣,正常人在這個時候肯定都會選擇風(fēng)險小的,那么我們需要一個指標來評判在相同單位風(fēng)險上,哪個收益大?或者說在收益相同的情況下,哪些風(fēng)險不必要冒?所以夏普比率相當于是用風(fēng)險把收益率給平均化了,放到太陽底下去看看每份相同的風(fēng)險下收益率的大小是多少。
計算公式如下:
Sharpe Ratio=(Mean of portfolio return – Risk-free return) / standard deviation of portfolio return
這個公式Mean of portfolio return就是投資組合的收益率的平均值,risk-free return就是當?shù)貨]有風(fēng)險的回報率,也就是放在銀行當中的回報率,比如美國的銀行利率就接近于0,standard deviation of portfolio return就是投資組合的收益率的標準偏差。
以上是原始的夏普比率的計算方法,實際上對于固定時間內(nèi)的夏普比率還得乘上一個k值。
對于不同采樣頻率的k值情況:
– Daily=sqrt(252)(最小粒度是按天計)
– Weekly=sqrt(52)(最小粒度是按星期計)
– Monthly=sqrt(12)(最小粒度是按月計)
年利率和日利率的轉(zhuǎn)換:
二、讀取數(shù)據(jù)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
aapl=pd.read_csv('AAPL_CLOSE',index_col='Date',parse_dates=True)
cisco=pd.read_csv('CISCO_CLOSE',index_col='Date',parse_dates=True)
ibm=pd.read_csv('IBM_CLOSE',index_col='Date',parse_dates=True)
amzn=pd.read_csv('AMZN_CLOSE',index_col='Date',parse_dates=True)
2.1 歸一化收盤價格
也就是求每天的收盤價格相對于初始第一天的價格的百分率。
for stock in [aapl, cisco, ibm, amzn]:
stock['normalized_price']=stock['Adj. Close']/stock['Adj. Close'].iloc[0]
aapl.head()
2.2 資產(chǎn)分配
現(xiàn)在假定我們四種股票都買了,并且是按照一定的權(quán)重去買,現(xiàn)在我們需要計算一下每天的收益率總和。
– 30% in Apple
– 20% in Google/Alphabet
– 40% in Amazon
– 10% in IBM
做法是把每只股票的收益率乘以對應(yīng)的權(quán)重,把所有經(jīng)過權(quán)重相乘后的收益率之和加起來就是總的收益率。
for stock, weight in zip([aapl, cisco, ibm, amzn],[0.3, 0.2, 0.1, 0.4]):
stock['weighted daily return']=stock['normalized_price']*weight
aapl.head()
大概可以了,然后我們把對應(yīng)的經(jīng)過權(quán)重計算的歸一日回報率全部都整合到一張表當中。
total_stock=pd.concat([aapl['weighted daily return'], cisco['weighted daily return'], ibm['weighted daily return'], amzn['weighted daily return']],axis=1)
total_stock.columns=['aapl', 'cisco', 'ibm', 'amzn']
total_stock.head()
2.2 投資
然后假設(shè)我們投資10000元,那么就在上面回報率的基礎(chǔ)上乘以10000。
total_invest=total_stock*10000
total_invest.head()
total_invest['Total Pos']=total_invest.sum(axis=1)
total_invest.head()
然后我們繪制下每天的總收益.
plt.style.use('ggplot')
total_invest['Total Pos'].plot(label='Total Pos')
plt.legend(loc='best')
plt.title('Total Portfolio Value')
我們繪制一下除了總資產(chǎn)以外的其他單只股票的收益情況
total_invest.drop('Total Pos',axis=1).plot(figsize=(8,4))
三、資產(chǎn)的統(tǒng)計學(xué)值
3.1 日回報率
total_invest['daily return']=total_invest['Total Pos'].pct_change(1)
total_invest['daily return'].head()
3.2 累積回報率
計算方法是最后一天與一開始第一天的變化百分比,相當于是增加了多少百分比。
cumulative_return=total_invest['Total Pos'].iloc[-1]/total_invest['Total Pos'].iloc[0]-1
print cumulative_return
3.3 平均日回報率
也就是對日回報率做平均計算
total_invest['daily return'].mean()
3.4 日回報率的標準差
total_invest['daily return'].std()
total_invest['daily return'].plot(kind='kde')
四、夏普比率
接下來我們計算一下總資產(chǎn)的夏普比率,也就是拿總資產(chǎn)日回報率的均值除以日回報率的標準差。之后由于我們這里的粒度是以天算的,所以要乘以sqrt(252),252代表252天
SR=total_invest['daily return'].mean()/total_invest['daily return'].std()
SR
import numpy as np
ASR=np.sqrt(252)*SR
ASR
最后我們繪制一下各個股票的收盤價分布情況
for stock in [aapl, cisco, ibm, amzn]:
stock['Adj. Close'].pct_change(1).plot(kind='kde')
總結(jié)
以上是生活随笔為你收集整理的python价值算法_第十课-Python金融学基础——夏普比率(Sharpe-ratio)和资产组合价值(portfolio-value)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于 Python 的地理空间绘图指南
- 下一篇: 中国品牌亮相第六届加拿大服装纺织品采购展