Part 3 金融理论、投资组合与量化选股
第18章 资产收益率和风险
期末价格 - 期初价格称为资本利得。
其他收益:如房产租金、股票分红、债券利息等。
以上收益率并未考虑交易成本,现实中不同的资产会有不同的交易成本:如中介费(投资房地产)、申购费(认购开放式基金时支付的费用)、买卖股票时的手续费及印花税等。将买卖资产时的交易成本扣除的收益称为净收益。
投资人往往根据预期收益率(Expected Rate of Return)来决定是否要购入某资产。
18.1 单期与多期简单收益率
单期:收益率计算时间间隔为一期。
多期:时间跨度为2期及以上。
18.1.1 单期简单收益率
资产价格时间序列: ,假设投资者于 时刻投入某资产,买入价格为 ,持有一期后卖出,卖出价格为 。假设此期间无其他收益,也不考虑交易成本。则投资者的单期简单收益率(One Period Simple Return) 的计算公式为:
简单毛收益率(Simple Gross Return):
按此方法可以计算出收益率序列:。
18.1.2 多期简单收益率
资产价格时间序列: ,假设投资者于 期投入某资产,买入价格为 ,在第 期卖出,卖出价格为 。假设此期间无其他收益,也不考虑交易成本。则投资者的 期简单收益率 的计算公式为:
import pandas as pd
stock = pd.read_csv('stockszA.csv',index_col='Trddt')
#读取万科公司股票数据,股票代码“000002”,stockszA文件中将其存储为“2”
Vanke = stock[stock.Stkcd==2]
#获取万科股票的收盘价数据
close = Vanke.Clsprc
close.head()
#转化成带日期的格式,即时间序列
close.index = pd.to_datetime(close.index)
close.index.name = 'Date'
close.head()
#将收盘价格滞后一期
lagclose = close.shift(1)
lagclose.head()
#合并close,lagclose这两个收盘价数据
Calclose = pd.DataFrame({'close':close,'lagclose':lagclose})
Calclose.head()
#计算单期简单收益率
simpleret = (close-lagclose)/lagclose
simpleret.name = 'simpleret'
simpleret.head()
calret = pd.merge(Calclose,pd.DataFrame(simpleret),left_index=True
,right_index=True)
calret.head()
#计算2期简单收益率
simpleret2=(close-close.shift(2))/close.shift(2)
simpleret2.name='simpleret2'
calret['simpleret2']=simpleret2
calret.head()
#查看1月9日的数据
calret.iloc[5,:]
ffn.to_returns()函数
#ffn包中的to_returns()函数可以用来计算简单收益率
import ffn
ffnSimpleret=ffn.to_returns(close)
ffnSimpleret.name='ffnSimpleret'
ffnSimpleret.head()