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 bslg = 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%