1.收益率的定义
收益率几乎是所有投资者都会关注的一个指标,收益率的高低决定了投资策略的赚钱能力,常见关于收益率的指标如下:
-
持有期收益率
持有期收益率 = 期末投资权益 − 期初投资权益 期初投资权益 持有期收益率 = \frac {期末投资权益 - 期初投资权益}{期初投资权益} 持有期收益率=期初投资权益期末投资权益−期初投资权益 -
单利年化收益率(算术收益率)
单利年化收益率 = 持有期收益率 持有期交易天数 ∗ 年交易天数 单利年化收益率 = \frac{持有期收益率}{持有期交易天数} * 年交易天数 单利年化收益率=持有期交易天数持有期收益率∗年交易天数
-
复利年化收益率(几何收益率)
复利年化收益率 = ( 1 + 持有期收益率 ) 年交易天数 持有期交易天数 − 1 复利年化收益率 = (1 + 持有期收益率)^{\frac{年交易天数}{持有期交易天数}} - 1 复利年化收益率=(1+持有期收益率)持有期交易天数年交易天数−1
在实际计算中,一般年交易日天数可以取250
2. 计算收益率
-
获取贵州茅台2018.6.1 ~ 2019.12.31期间的日k数据
import pandas as pd import numpy as np import baostock as bs lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) #### 获取沪深A股历史K线数据 #### # 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。 # 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag # 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg rs = bs.query_history_k_data_plus("sh.600519", "date,code,open,high,low,close,volume", start_date='2018-06-01', end_date='2019-12-31', frequency="d", adjustflag="3") print('query_history_k_data_plus respond error_code:'+ rs.error_code) print('query_history_k_data_plus respond error_msg:'+ rs.error_msg) data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) #### 结果集输出到csv文件 #### result.to_csv("贵州茅台_k_data.csv", index=False) print(result) #### 登出系统 #### bs.logout()
-
读取贵州茅台的数据,并绘制股价走势图
# 读取贵州茅台的日k数据,读入日期和收盘价 data = pd.read_csv("贵州茅台_k_data.csv")[["date", "close"]]; # 画出持有期股价走势图 data.set_index('date', inplace=True) data.plot(figsize=(16, 10), subplots=True)
-
计算单利年化收益率
# 计算累计收益率 total_return = (data.iloc[-1] - data.iloc[0]).close / data.iloc[0].close print("累计收益率:%.2f%%" %(total_return * 100)) >> 累计收益率:58.77% # 计算持有期天数 data_length = len(data.index) # 计算单利年化收益(算术收益率) annual_return1 = (total_return / data_length) * 250 print("单利年化收益:%.2f%%" %(annual_return1 * 100)) >> 单利年化收益:37.87%
-
计算复利年华收益率
# 计算复利年化收益(几何收益率) annual_return2 = pow(1 + total_return, 250 / data_length) - 1 print("复利年化收益:%.2f%%" %(annual_return2 * 100)) >> 复利年化收益:34.70%