Pandas Dataframe Resample OHLC的开盘价格错误

时间:2016-04-12 19:53:37

标签: python pandas

我无法生成"准确"来自使用pandas DataFrame.resample()ver 0.18的tick数据的OHLC数据。 具体来说,我得到了未来的泄漏"在价格持续一段时间的那些酒吧的开盘价。

可再现的例子:

import pandas as pd
import numpy as np

np.random.seed(1234)
size=1000
df = pd.DataFrame(1.26 + np.random.rand(size)/100.0,index=pd.date_range('20160101 09:00:00',periods=size,freq='7s'),columns=['price'])
dfohlc = df.price.resample('1min').ohlc().ffill()

这是一系列随机生成的价格标记:

2016-01-01 09:00:00  1.261915
2016-01-01 09:00:07  1.266221
2016-01-01 09:00:14  1.264377
2016-01-01 09:00:21  1.267854
2016-01-01 09:00:28  1.267800
2016-01-01 09:00:35  1.262726
2016-01-01 09:00:42  1.262765
2016-01-01 09:00:49  1.268019
2016-01-01 09:00:56  1.269581   << this is the market price until 09.01:03
2016-01-01 09:01:03  1.268759   << this price should not be the open price at 09:01
...

resample()生成这些条:

2016-01-01 09:00:00  1.261915  1.269581  1.261915  1.269581
2016-01-01 09:01:00  1.268759  1.268759  1.260138  1.260138
...

第一个OHLC酒吧09:00的开盘价和收盘价是正确的。

然而,09:01:00的第二个OHLC酒吧有错误&#34;开盘价1.268759。直到09:01:03才能看到这个价格。 &#34;正确&#34;开盘价仍为1.269581。

有没有办法让resample()函数生成&#34;更正&#34;开放价格?

1 个答案:

答案 0 :(得分:1)

...有趣

似乎行为是按时分组并将该分组时段中的第一个值视为打开。

我认为使用前一个收盘作为开盘柱是有意义的,除了或许可以为市场开盘。

将先前结算视为开放的简单修复是df['open'] = df['close'].shift()

如果你有一个标志指示市场的开盘,并且你希望使用第一个观察价格作为开盘价,那么这将有效:

df.loc[df['market_open_flag'] == False, 'open'] = df['close'].shift()

如果没有观察到的交易,我不确定默认行为是什么,例如流动性不足的股票。