我正在处理 Pandas 中的盘中时间和报价数据,并努力寻找一种计算加权中间价的好方法。我目前将数据表示为四个数据帧(bid_price、bid_quantity、ask_price、ask_quantity),每个数据帧的列是单独的工具,索引是时间戳。(因此可以将单个投标价格引用为:
bid_price['AAPL'][datetime(2013,1,1,9,30,0,0)]
我希望应用的中点公式取决于工具的买卖差价。如果当前价差大于最小刻度增量,则中点将是当时买入价和卖出价的简单平均值。如果点差等于最小值,则根据买卖数量对中点进行加权。
这是当前代码:
def get_midprice(bid_price, bid_quantity, ask_price, ask_quantity, tick_increment=0.01):
if (ask_price - bid_price) > tick_increment:
return (ask_price + bid_price) / 2
else:
return ((bid_price * ask_quantity) + (ask_price * bid_quantity)) / (bid_quantity + ask_quantity)
这适用于单个数据点,并且在以前版本的 pandas 上,它在传递 4 个 DataFrame 时也有效。现在,4 个数据帧引发了异常:
raise ValueError("Cannot call bool() on DataFrame.")
ValueError: Cannot call bool() on DataFrame.
我相信这是由于这种变化:https ://github.com/pydata/pandas/pull/1073
这个问题显然可以通过循环来解决,但是在大型数据集上,这非常慢。有没有更好的办法?