1分钟的股市数据重新取样到超过1小时的输出,在pandas中给出了错误的开始时间。

问题描述 投票:2回答:1

我正试图将1分钟的股市数据下采样到多个日内时间段。

我对所有这些编码和stackoverflow都很陌生,所以请耐心等待。最初,我将1分钟的数据重新采样到5,30和45分钟的增量,没有问题。然后,当我试图下采样到1小时增量时,输出开始于一个时间索引,而这个索引并不在原始的1min数据集中;它会在9:00:00开始,而数据集中最早的索引是9:31:00。经过一番搜索,我发现解决这个问题的方法是在.resample()函数里面加入'base=30'。

示例代码。

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

(侧注:只有当重采样率是以分钟形式输入时,而不是以小时形式输入时,这段代码才会给出正确的输出......'60min'=工作,'1h'=不工作。任何解释为什么会被感激,但这不是我的主要问题)。)

我试了一下,它的工作。

然而,当我尝试对超过'60min'的任何数据进行下采样时,输出是错误的,日期时间指数开始移动到一个不存在于原始1min数据集中的日期时间。我试着使用'base=60'参数,但没有成功。然后我尝试使用'loffset=90',能够成功地让输出在正确的日期时间9:30:00开始,就像我做过的其他重采样一样,但与原始的1min数据集相比,数值(开盘、最高、最低、收盘等)不一致。

作品

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这样的传统交易平台中,截断的数据会显示在一天结束的时候(2h数据从15:30:00开始,16:00:00结束),而不是一天的开始。当我重新取样时,截断的数据以相反的方式显示(2h截断发生在9:30:00和10:00:00之间),即使我使用loffset给出正确的起始日期时间。 我怎样才能解决重采样指数不准确的问题,不仅能下采样到一个2h的时间框架,并在正确的日期时间(9:30:00)开始输出,而且还能在一天结束时显示截断的时间段(对于2h和3h,是15:30:00-16:00:00,对于4h,是13:30:00-16:00:00等等)。我希望能够正确地对任何时间段进行重新采样,而不仅仅是上述的时间段。如果我想做一个33分钟或65分钟或2天或5周的重采样,我想知道如何进行上面描述的理想输出。我强调这一点是因为 "60min,base=30 "的解决方案只适用于1h重采样,而不是任何更大的时间框架。谢谢你的时间和努力。我是新来的,感谢您的帮助。

p.s.我试图从我的数据集中粘贴一天的1分钟数据,以便你们可以使用它来实现所需的结果,但它最终是太多的字符,所以我不得不删除它。如果有访问数据集的权限会有帮助,并且有其他方法在这里分享,请告诉我。

python pandas datetime resampling quantitative-finance
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.