【注意】最后更新于 July 23, 2022,文中内容可能已过时,请谨慎使用。
日常回测的时候有时会遇到只有日线没有周线的情况,这时候就需要将日线合成为周线
本文参考了【邢不行|量化小讲堂系列06-Python量化入门】极简方法将日线数据转为周线、月线或其他周期_xingbuxing_py的博客-CSDN博客
但是将数据格式修改为tushare的格式,并且支持一个文件里存在多个品种
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import pandas as pd
all_stock_data = pd.read_csv('day.csv', parse_dates=[0])
# 设定转换周期period_type 转换为周是'W',月'M',季度线'Q',五分钟'5min',12天'12D'
period_type = 'W'
# 将[date]设定为 index inplace是原地修改,不要创建一个新对象
all_stock_data.set_index('trade_date', inplace=True)
groups = all_stock_data.groupby('ts_code')
all = []
for name, stock_data in groups:
# 进行转换,周线的每个变量都等于那一周中最后一个交易日的变量值
period_stock_data = stock_data.resample(period_type).last()
# 周线的change等于那一周中每日change的连续相乘
period_stock_data['change'] = stock_data['change'].resample(period_type).apply(lambda x: (x + 1.0).prod() - 1.0)
# 周线的open等于那一周中第一个交易日的open
period_stock_data['open'] = stock_data['open'].resample(period_type).first()
# 周线的high等于那一周中的high的最大值
period_stock_data['high'] = stock_data['high'].resample(period_type).max()
# 周线的low等于那一周中的low的最大值
period_stock_data['low'] = stock_data['low'].resample(period_type).min()
# 周线的volume和money等于那一周中volume和money各自的和
period_stock_data['vol'] = stock_data['vol'].resample(period_type).sum()
period_stock_data['amount'] = stock_data['amount'].resample(period_type).sum()
# 股票在有些周一天都没有交易,将这些周去除
period_stock_data = period_stock_data[period_stock_data['ts_code'].notnull()]
period_stock_data.reset_index(inplace=True)
all.append(period_stock_data)
all2 = pd.concat(all, axis=0)
# 导出数据
all2.to_csv('week_stock_data.csv', index=False)
|