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].

 

posted @ 2023-06-04 21:42  justinzhang  阅读(585)  评论(0编辑  收藏  举报