Aggregating/resampling pandas 多个时间范围内的多索引数据框和预测 ARIMA
Aggregating/resampling a pandas multiindex dataframe over many timeframes and forecasting ARIMA
我有多个时间范围我想跟踪和预测值(ARIMA 预测每个时间范围提前 1 个周期),我的算法在最低时间范围内检索数据。注意:每个时间范围都可以(但不一定对称)被较低的时间范围整除。作为重要的旁注,日内时间范围(1H、4H)应从 9:30am(市场开盘时间)开始。
1min, 5min, 15min, 30min, 1H, 4H, 1D, 1W, 1M
首先,该算法执行批量 history
调用并获取给定时间跨度内的所有 1 分钟数据(预热数据)。然后在其运行过程中(永不停止;它是一种交易算法),它每分钟接收一次数据。
第一步(在收到大量历史数据后)是使用越来越小的数据集为每个更高的时间范围聚合它以节省处理时间:
即
1分钟时间范围数据=1分钟数据(历史批量数据)
5 分钟时间范围数据 = 将 1 分钟时间范围数据汇总为 5 分钟
15 分钟时间范围数据 = 聚合 5 分钟时间范围数据到 15 分钟
等...
给定以下示例数据集(并假设可能包含其他符号):
close high low open
symbol time
SPY 2018-05-22 09:31:00 270.245900 270.374166 270.226167 270.305100
2018-05-22 09:32:00 270.344566 270.374166 270.206434 270.245900
2018-05-22 09:33:00 270.374166 270.374166 270.314966 270.344566
2018-05-22 09:34:00 270.275500 270.374166 270.245900 270.374166
2018-05-22 09:35:00 270.413632 270.443232 270.275500 270.275500
2018-05-22 09:36:00 270.502431 270.522165 270.384032 270.413632
2018-05-22 09:37:00 270.541898 270.591231 270.492565 270.502431
Q1:如何聚合多索引 pandas 数据帧,以便按符号聚合时间索引和列?部分未经测试(并且可能无法正常工作)的解决方案说明了我的意图如下:
# Where timeframe.Frequency is a string such as "1H" or "1min"
df.resample(timeframe.Frequency).agg({"open": "first", "close": "last", "low": "min", "high": "max"})
A1: df.groupby(['symbol', pd.Grouper(freq=timeframe.Frequency, level='time')]).agg({'open':'first', 'close':'last', 'high':'max', 'low':'min'})
Q2:鉴于更高的时间帧将部分完成 'bars'(例如,5 分钟时间帧数据将包含 @9:35am 完整柱数据和@上午 9 点 37 分的部分柱数据表示为 @9:40am),在给定时间范围的数据集中 wise 是否有部分数据,或者我应该使用 QuantConnect 的 consolidator在运行时将其添加到数据集之前完成条形图?处理 history
时如何计算此部分条形数据?
A2:重采样时确实创建了部分条。例如,我可能在 6 月 1 日之后有一个 1 分钟的数据点,而我的每月时间框架数据帧将有一个 6 月 30 日的条目,其中包含 1 分钟柱的 OHLC 值。此时,我可以删除该行,也可以在数据进入时用新值继续更新它。
对于您的第一个问题,假设数据由 symbol
和 time
索引:
(df.groupby(['symbol', df.index.get_level_values(1).floor('5T')])
.agg({"open": "first",
"close": "last",
"low": "min",
"high": "max"})
)
给出:
open close low high
symbol time
SPY 2018-05-22 09:30:00 270.305 270.276 270.206 270.374
SPY 2018-05-22 09:35:00 270.276 270.542 270.276 270.591
第二个问题太定性了,很大程度上取决于您的数据和抽样 windows。
我有多个时间范围我想跟踪和预测值(ARIMA 预测每个时间范围提前 1 个周期),我的算法在最低时间范围内检索数据。注意:每个时间范围都可以(但不一定对称)被较低的时间范围整除。作为重要的旁注,日内时间范围(1H、4H)应从 9:30am(市场开盘时间)开始。
1min, 5min, 15min, 30min, 1H, 4H, 1D, 1W, 1M
首先,该算法执行批量 history
调用并获取给定时间跨度内的所有 1 分钟数据(预热数据)。然后在其运行过程中(永不停止;它是一种交易算法),它每分钟接收一次数据。
第一步(在收到大量历史数据后)是使用越来越小的数据集为每个更高的时间范围聚合它以节省处理时间:
即
1分钟时间范围数据=1分钟数据(历史批量数据)
5 分钟时间范围数据 = 将 1 分钟时间范围数据汇总为 5 分钟
15 分钟时间范围数据 = 聚合 5 分钟时间范围数据到 15 分钟
等...
给定以下示例数据集(并假设可能包含其他符号):
close high low open
symbol time
SPY 2018-05-22 09:31:00 270.245900 270.374166 270.226167 270.305100
2018-05-22 09:32:00 270.344566 270.374166 270.206434 270.245900
2018-05-22 09:33:00 270.374166 270.374166 270.314966 270.344566
2018-05-22 09:34:00 270.275500 270.374166 270.245900 270.374166
2018-05-22 09:35:00 270.413632 270.443232 270.275500 270.275500
2018-05-22 09:36:00 270.502431 270.522165 270.384032 270.413632
2018-05-22 09:37:00 270.541898 270.591231 270.492565 270.502431
Q1:如何聚合多索引 pandas 数据帧,以便按符号聚合时间索引和列?部分未经测试(并且可能无法正常工作)的解决方案说明了我的意图如下:
# Where timeframe.Frequency is a string such as "1H" or "1min"
df.resample(timeframe.Frequency).agg({"open": "first", "close": "last", "low": "min", "high": "max"})
A1: df.groupby(['symbol', pd.Grouper(freq=timeframe.Frequency, level='time')]).agg({'open':'first', 'close':'last', 'high':'max', 'low':'min'})
Q2:鉴于更高的时间帧将部分完成 'bars'(例如,5 分钟时间帧数据将包含 @9:35am 完整柱数据和@上午 9 点 37 分的部分柱数据表示为 @9:40am),在给定时间范围的数据集中 wise 是否有部分数据,或者我应该使用 QuantConnect 的 consolidator在运行时将其添加到数据集之前完成条形图?处理 history
时如何计算此部分条形数据?
A2:重采样时确实创建了部分条。例如,我可能在 6 月 1 日之后有一个 1 分钟的数据点,而我的每月时间框架数据帧将有一个 6 月 30 日的条目,其中包含 1 分钟柱的 OHLC 值。此时,我可以删除该行,也可以在数据进入时用新值继续更新它。
对于您的第一个问题,假设数据由 symbol
和 time
索引:
(df.groupby(['symbol', df.index.get_level_values(1).floor('5T')])
.agg({"open": "first",
"close": "last",
"low": "min",
"high": "max"})
)
给出:
open close low high
symbol time
SPY 2018-05-22 09:30:00 270.305 270.276 270.206 270.374
SPY 2018-05-22 09:35:00 270.276 270.542 270.276 270.591
第二个问题太定性了,很大程度上取决于您的数据和抽样 windows。