什么是股票的收益率
股票收益率是反映股票收益水平的指标。投资者购买股票或债券最关心的是能获得多少收益,衡量一项证券投资收益大小以收益率来表示。反映股票收益率的高低,一般有三个指标
本期股利收益率。是以现行价格购买股票的预期收益率。
持有期收益率。股票没有到期,投资者持有股票的时间有长有短,股票在持有期间的收益率为持有期收益率。
折股后的持有期收益率。股份公司进行折股后,出现股份增加和股价下降的情况。
因此,折股后股票的价格必须调整,所以计算股票的收益率对于金融来说,非常的重要# 案例使用微软的股票 import numpy as np from pandas_datareader import data as wb import pandas as pd
MSFT = wb.DataReader('MSFT', data_source='iex', start='2015-1-1')#使用iex接口 # 微软 MSFT.head()open high low close volume date 2015-01-02 42.3280 43.0174 42.2191 42.4187 27913852 2015-01-05 42.0649 42.3915 41.9560 42.0241 39673865 2015-01-06 42.0740 42.4087 41.3120 41.4118 36447854 2015-01-07 41.7111 42.1466 41.2666 41.9379 29114061 2015-01-08 42.4096 43.3167 42.3824 43.1716 29645202
MSFT.head()open high low close volume date 2015-01-02 42.3280 43.0174 42.2191 42.4187 27913852 2015-01-05 42.0649 42.3915 41.9560 42.0241 39673865 2015-01-06 42.0740 42.4087 41.3120 41.4118 36447854 2015-01-07 41.7111 42.1466 41.2666 41.9379 29114061 2015-01-08 42.4096 43.3167 42.3824 43.1716 29645202
MSFT.tail()open high low close volume date 2019-05-03 127.36 129.43 127.25 128.90 24911126 2019-05-06 126.39 128.56 126.11 128.15 24239464 2019-05-07 126.46 127.18 124.22 125.52 36017661 2019-05-08 125.44 126.37 124.75 125.51 28418996 2019-05-09 124.29 125.79 123.57 125.50 27235835
计算证券的收益率
简单收益率用上一天的收盘价减去今天的收盘价在除以上一天的收盘价
MSFT['simple_return'] = (MSFT['close'] / MSFT['close'].shift(1)) - 1 MSFT.head()open high low close volume simple_return date 2015-01-02 42.3280 43.0174 42.2191 42.4187 27913852 NaN 2015-01-05 42.0649 42.3915 41.9560 42.0241 39673865 -0.009303 2015-01-06 42.0740 42.4087 41.3120 41.4118 36447854 -0.014570 2015-01-07 41.7111 42.1466 41.2666 41.9379 29114061 0.012704 2015-01-08 42.4096 43.3167 42.3824 43.1716 29645202 0.029417
import matplotlib.pyplot as plt MSFT['simple_return'].plot(figsize=(8, 5)) plt.show()
在这里插入图片描述
# 平均收益率 sim_return_d = MSFT['simple_return'].mean() sim_return_d
0.0011047908541084086
# 对于一天的平均收益率小太的 来计算一年的 # 一年有大约250交易日,去除周末和节假日 sim_return_y = MSFT['log_return'].mean() * 250 print (str(round(sim_return_y, 5) * 100) + ' %')
24.788 %也就是买微软的股票一年可以获利本金的24.788% 对数收益率(除了简单收益率,还有对数收益率)
MSFT['log_return'] = np.log(MSFT['close'] / MSFT['close'].shift(1)) MSFT.head()open high low close volume simple_return log_return date 2015-01-02 42.3280 43.0174 42.2191 42.4187 27913852 NaN NaN 2015-01-05 42.0649 42.3915 41.9560 42.0241 39673865 -0.009303 -0.009346 2015-01-06 42.0740 42.4087 41.3120 41.4118 36447854 -0.014570 -0.014677 2015-01-07 41.7111 42.1466 41.2666 41.9379 29114061 0.012704 0.012624 2015-01-08 42.4096 43.3167 42.3824 43.1716 29645202 0.029417 0.028993
MSFT['log_return'].plot(figsize=(8, 5)) plt.show()
在这里插入图片描述
log_return_d = MSFT['log_return'].mean() log_return_d
0.0009915141278122766
log_return_y = MSFT['log_return'].mean() * 250 log_return_y
0.24787853195306914
print (str(round(log_return_y, 5) * 100) + ' %')
24.788 %
有时这两个收益率比较的接近
对于大多数人不可能只买一只股票,下面来计算多支股票
# 英国石油公司(BP) 福特汽车公司(F) 埃克森美孚公司(XOM) 有限责任公司(LNC)苹果(AAPL) tickers = ['BP', 'F', 'XOM', 'LNC', 'AAPL'] mydata = pd.DataFrame() for t in tickers: mydata[t] = wb.DataReader(t, data_source='iex', start='2015-1-1')['close']
mydata.head()BP F XOM LNC AAPL date 2015-01-02 29.0451 11.7974 77.6966 52.6303 101.1385 2015-01-05 27.5060 11.3366 75.5707 51.0080 98.2893 2015-01-06 27.3003 11.2291 75.1689 49.3764 98.2985 2015-01-07 27.3688 11.5517 75.9306 50.0639 99.6769 2015-01-08 27.9860 11.8435 77.1944 51.2138 103.5067
mydata.iloc[0]
BP 29.0451 F 11.7974 XOM 77.6966 LNC 52.6303 AAPL 101.1385 Name: 2015-01-02, dtype: float64
由于第一行完全不一样,对于有经验的人会将第一行全部变为同一个数
mydata / mydata.iloc[0] * 100 将所有数据除以第一个数据乘以100
(mydata / mydata.iloc[0] * 100).plot(figsize = (15, 6)); plt.show()
个人觉得波动挺大的,果然股票有风险 苹果在2018下半年股票暴跌
投资需谨慎
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did127788