python计算收益率
import pandas as pd import numpy as np import warnings warnings.filterwarnings("ignore") pd.options.plotting.backend = "plotly" #从csv文件获取数据 data = pd.read_csv('testPandasShit.csv', sep='\s+') pd.set_option('display.max_rows',None) pd.set_option('display.max_columns',None) print("原始数据:\n{0}".format(data['close'])) print("shift(1)后数据\n{0}".format(data['close'].shift(1))) ret = np.log(data["close"]) - np.log(data["close"].shift(1)) print("收益率对数:\n{0}\n".format(ret))
数据:
date open close high low volume money
2022-08-16 4498.0 4498.0 4498.0 4498.0 1.0 6.747000e+04
2022-08-17 4486.0 4500.0 4511.0 4486.0 7.0 4.729950e+05
2022-08-18 4433.0 4391.0 4436.0 4391.0 10.0 6.618900e+05
2022-08-19 4373.0 4352.0 4387.0 4344.0 29.0 1.893450e+06
rolling(2)的 意思是:以当前数据开始,包括当前数字,向前再找2-1=1个数,来组成一个窗口,如果前面没有数据,那么就是NaN,
以上面对数收益率为例:
收益率对数:
0 NaN
1 0.000445
2 -0.024520
3 -0.008921
第0个数,往前找1个,不存在,第1个,往前找一个,是NaN,忽略。 第2个,往前找一个,[0.000445, -0.024520]组成一个大小为2的窗口, 第三个,往前找一个数,组成一个窗口[-0.024520,-0.008921].