今天才发现这个功能啊……太高级了,之前都一直用groupby但是感觉对于处理时间不是很方便
import matplotlib.pyplot as plt
import pandas as pd
from jqdata import *
import talib
from datetime import date, timedelta
daily_revenue = {}
start_time = '2020-01-01'
end_time = '2022-04-30'
# 以下代码在聚宽api下实现
# 获取期货交易的日收益率之后要获取月收益率
for i in ['J','RB','I','SS','SF','SM','CU','AL','NI','AG','SC','RU','FU','MA',
'BU','PF','EG','TA','SA','EB','SP','UR','CF','P','LH','Y','AP','JD','C']:
index = get_future_code(i) # 按照指数计算
# 结算价
sett_price_i = get_extras('futures_sett_price',
index,start_date = start_time ,end_date = end_time)
current_price = sett_price_i[index]
yesterday_price = sett_price_i[index].shift(1)
# 日度收益率
sett_price_i['daily_revenue_rate'] = current_price/yesterday_price - 1
#print(sett_price_i)
daily_revenue[i] = sett_price_i['daily_revenue_rate']
#print(f'指数{index}的统计指标')
revenue_stat = pd.DataFrame()
revenue_stat = sett_price_i['daily_revenue_rate'].describe()
#print(revenue_stat)
# 月度收益率
monthly_revenue = pd.DataFrame()
monthly_revenue[f'{index} monthly_revenue'] =
sett_price_i['daily_revenue_rate'].resample('M').sum()
# print(monthly_revenue)
注意,当我们得到结算价和日度收益率组成的dataframe(sett_price_i)以后,它是一个以日期('YYYY-MM-DD')为index的dataframe
我们只需要对日度收益率那一列进行resample.sum()就可以得到每月度收益率(每一交易日累加,还不确定要不要加权重,待确认~)
resample中参数可以换为'T'(minute),'S'(second),'W'(week)等,前面均可以加数字。
还可以加一列:该日期对应是星期几
sett_price_i['weekday'] = sett_price_i.index.weekday
参考资料