学习一时爽,一直学习一直爽,学完再复习下更爽
Hello,大家好,我是 もうり,一个从无到有的技术 语言小白
学完再复习下更爽
什么是股票的收益率
股票收益率是反映股票收益水平的指标。投资者购买股票或债券最关心的是能获得多少收益,衡量一项证券投资收益大小以收益率来表示。反映股票收益率的高低,一般有三个指标
- 本期股利收益率。是以现行价格购买股票的预期收益率。
- 持有期收益率。股票没有到期,投资者持有股票的时间有长有短,股票在持有期间的收益率为持有期收益率。
- 折股后的持有期收益率。股份公司进行折股后,出现股份增加和股价下降的情况。
因此,折股后股票的价格必须调整,所以计算股票的收益率对于金融来说,非常的重要
代码语言:javascript复制# 案例使用微软的股票
import numpy as np
from pandas_datareader import data as wb
import pandas as pd
代码语言:javascript复制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 |
计算证券的收益率
简单收益率
用上一天的收盘价减去今天的收盘价在除以上一天的收盘价
代码语言:javascript复制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()
在这里插入图片描述
代码语言:javascript复制# 平均收益率
sim_return_d = MSFT['simple_return'].mean()
sim_return_d
代码语言:javascript复制0.0011047908541084086
代码语言:javascript复制# 对于一天的平均收益率小太的 来计算一年的
# 一年有大约250交易日,去除周末和节假日
sim_return_y = MSFT['log_return'].mean() * 250
print (str(round(sim_return_y, 5) * 100) ' %')
代码语言:javascript复制24.788 %
也就是买微软的股票一年可以获利本金的24.788%
对数收益率(除了简单收益率,还有对数收益率)
代码语言:javascript复制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()
在这里插入图片描述
代码语言:javascript复制log_return_d = MSFT['log_return'].mean()
log_return_d
代码语言:javascript复制0.0009915141278122766
代码语言:javascript复制log_return_y = MSFT['log_return'].mean() * 250
log_return_y
代码语言:javascript复制0.24787853195306914
代码语言:javascript复制print (str(round(log_return_y, 5) * 100) ' %')
代码语言:javascript复制24.788 %
有时这两个收益率比较的接近
对于大多数人不可能只买一只股票,下面来计算多支股票
代码语言:javascript复制# 英国石油公司(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']
代码语言:javascript复制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]
代码语言:javascript复制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
代码语言:javascript复制(mydata / mydata.iloc[0] * 100).plot(figsize = (15, 6));
plt.show()
个人觉得波动挺大的,果然股票有风险 苹果在2018下半年股票暴跌