1-минутная повторная выборка данных фондового рынка с более чем 1 часом с выходом, дающим неверное время начала в пандах - PullRequest
1 голос
/ 05 октября 2019

Я пытаюсь уменьшить выборку 1-минутных данных фондового рынка до нескольких внутридневных таймфреймов.

Я новичок во всем этом кодировании и стеке потока, поэтому, пожалуйста, потерпите меня. Первоначально я без проблем пересчитал данные за 1 мин с шагом 5, 30 и 45 мин. Затем, когда я попытался уменьшить частоту до 1 ч, выходной сигнал начинался с индекса времени, которого не было в исходном наборе данных 1 мин;это началось бы в 9:00:00, когда самый ранний индекс в наборе данных - 9:31:00. После некоторых поисков я обнаружил, что решение этой проблемы заключается в том, чтобы включить функцию base = 30 в функцию .resample ().

Пример кода:

newDf = df.resample('60min', closed='right', base=30 ).agg(dict(open='first', high='max', low='min', close='last', volume='sum', vwap='mean'))

(Примечание стороны: этокод дает правильный вывод ТОЛЬКО, если частота повторной выборки вводится в минутной форме, а не ежечасно ... '60min' = работает, '1h' = не работает. Любое объяснение того, почему будет оценено, но это не моеглавный вопрос.)

Я попробовал, и это сработало.

Однако, когда я пытаюсь уменьшить частоту дискретизации в течение «60 минут», выходные данные получаются неправильными, и начало индекса dateime возвращается к дате и времени, которые не существуют в исходном наборе данных 1min. Я пытался играть с параметром «base = 60», и он не работал. Затем я попытался использовать 'loffset = 90' и смог успешно запустить вывод в правильное время даты 9:30:00, как и другие повторные выборки, которые я сделал, но значения (открытый, высокий, низкий, закрытый и т. Д.)) были несовместимы при сравнении с исходным набором данных за 1 мин.

работы

new5minDf = df.resample('5t', closed='right').agg(dict(open='first', high='max', low='min', close='last', volume='sum', vwap='mean'))

работы

new45minDf = df.resample('45min', closed='right', base=30 ).agg(dict(open='first', high='max', low='min', close='last', volume='sum', vwap='mean'))

работы

new60minDf = df.resample('60min', closed='right', base=30 ).agg(dict(open='first', high='max', low='min', close='last', volume='sum', vwap='mean'))

НЕ ДЕЛАЕТРАБОТА

new60minDf = df.resample('1h', closed='right', base=30 ).agg(dict(open='first', high='max', low='min', close='last', volume='sum', vwap='mean'))

НЕ РАБОТАЕТ

new120minDf = df.resample('2h', closed='right', base=30 ).agg(dict(open='first', high='max', low='min', close='last', volume='sum', vwap='mean'))

НЕ РАБОТАЕТ

new120minDf = df.resample('120t', closed='right', base=30 ).agg(dict(open='first', high='max', low='min', close='last', volume='sum', vwap='mean'))

Насколько я знаю, я полагаю, что при повторной выборке используется первыйчасть дня для вывода усеченных пересэмплированных данных. Другими словами, если я попытаюсь выполнить повторную выборку за 2 часа или 120 минут, для каждого отдельного дня будет указываться одно местоположение индекса, которое содержит только 30 минут данных. Это связано с тем, что продолжительность обычной торговой сессии фондового рынка составляет 6,5 часа. 6.5h или 390min не делится поровну на 2h или 120min, поэтому будет один индекс, который на самом деле короче в точках данных, чем другие индексы для каждого отдельного дня.

В традиционных торговых платформах, таких как tradingview.com,усеченные данные будут отображаться в конце дня (данные за 2 часа начинаются в 15:30:00 и заканчиваются в 16:00:00), а не в начале дня. Когда я делаю повторную выборку, усеченные данные отображаются противоположным образом (усечение в 2 часа происходит между 9:30:00 и 10:00:00), даже если я использую loffset, чтобы дать правильную начальную дату и время. Как я могу исправить неточность индекса повторной выборки, чтобы не только уменьшить частоту дискретизации во 2-часовой период времени с выходными данными, начинающимися в правильное время даты (9:30:00), но также и усеченный период, отображаемый в конце дня (в течение 2-х часов и3 ч. Будет 15: 30: 00-16: 00: 00, в 4 ч. Будет 13: 30: 00-16: 00: 00 и т. Д.). Я хочу, чтобы можно было корректно пересчитывать любой таймфрейм, а не только упомянутые. Если бы я хотел сделать повторную выборку за 33 минуты, или 65 минут, или за 2 дня, или за 5 недель, я хотел бы знать, как действовать, учитывая желаемый результат, описанный выше. Я подчеркиваю это, потому что решение «60 минут, база = 30» работало только для 1-го повторного отсчета, а не для больших временных периодов. Спасибо за ваше время и усилия. Я новичок во всем этом, и я признателен за помощь.

ps Я пытался вставить данные из моего набора данных за 1 мин, чтобы вы, ребята, могли использовать их для достижения желаемых результатов, но это закончилосьслишком много символов, поэтому мне пришлось удалить его. Если доступ к набору данных поможет, и есть еще один способ поделиться им здесь, просто дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...