我无法生成"准确"来自使用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;开放价格?
答案 0 :(得分:1)
...有趣
似乎行为是按时分组并将该分组时段中的第一个值视为打开。
我认为使用前一个收盘作为开盘柱是有意义的,除了或许可以为市场开盘。
将先前结算视为开放的简单修复是df['open'] = df['close'].shift()
。
如果你有一个标志指示市场的开盘,并且你希望使用第一个观察价格作为开盘价,那么这将有效:
df.loc[df['market_open_flag'] == False, 'open'] = df['close'].shift()
如果没有观察到的交易,我不确定默认行为是什么,例如流动性不足的股票。