Агрегирование / повторная выборка мультииндексного фрейма данных Pandas на многих таймфреймах и прогнозирование ARIMA - PullRequest
1 голос
/ 23 мая 2019

У меня есть несколько таймфреймов, для которых я хочу отслеживать и прогнозировать значения (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-минутного бара.На этом этапе я могу либо удалить строку, либо просто обновить ее новыми значениями по мере поступления данных.

1 Ответ

0 голосов
/ 23 мая 2019

Для вашего первого вопроса, предполагая, что данные проиндексированы 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

Второй вопрос слишком качественный и сильно зависит от ваших данных, а также от окон выборки.

...