У меня есть несколько таймфреймов, для которых я хочу отслеживать и прогнозировать значения (ARIMA прогнозирует на 1 период вперед на таймфрейме), и мой алгоритм извлекает данные на самом младшем таймфрейме.Примечание: каждый таймфрейм равномерно (но не обязательно симметрично) делится на младшие таймфреймы.Важным примечанием является то, что внутридневные таймфреймы (1H, 4H) должны начинаться в 9:30 (время открытия рынка).
1 мин, 5 мин, 15 мин, 30 мин, 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 : Учитывая, что для старших таймфреймов будут частично заполненные «бары» (например, данные 5-минутного таймфрейма будут содержать данные полного бара @ 9: 35am и данные частичного бара @ 9: 37, представленные так, как если бы это было @ 9: 40am), целесообразно иметь частичные данные в наборе данных заданного периода или я должен использовать консолидатор * QuantConnect , чтобы завершить панель перед добавлением ее в набор данных во время выполнения?Как мне учесть эти данные частичного столбца при обработке history
?
A2 : Частичные столбцы действительно создаются при повторной выборке.Например, у меня может быть одна 1-минутная точка данных после 1 июня, а мой месячный период данных будет иметь 30 июня запись со значениями OHLC 1-минутного бара.На этом этапе я могу либо удалить строку, либо просто обновить ее новыми значениями по мере поступления данных.