bpe*_*kes 0 python quantitative-finance pandas
我是python和pandas的新手,我想知道是否有人知道在pandas之上是否有任何python构建库,这将需要一系列具有以下列的时间序列:timestamp,id,price,大小,交换
每条记录按大小调整每个价格和交换的总数,以便为您提供当前视图,即记录可能如下所示:
9:00:25.123, 1, 1.02, 100, N
9:00:25.123, 2, 1.02, -50, N
9:00:25.129, 3, 1.03, 50, X
9:00:25.130, 4, 1.02, 150, X
9:00:25.131, 5, 1.02, -5, X
Run Code Online (Sandbox Code Playgroud)
我希望能够随时了解市场的现状.例如,如果我在9:00:25.130拨打市场电话,我会得到:
1.02, N, 50
1.02, X, 150
1.03, X, 50
Run Code Online (Sandbox Code Playgroud)
查询9:00:25.131将返回
1.02, N, 50
1.02, X, 145
1.03, X, 50
Run Code Online (Sandbox Code Playgroud)
这些记录可能有一百万或更多,迭代所有记录对于每个请求都需要很长时间,特别是如果您在当天晚些时候尝试查看时间.我想有人可以在某个时间间隔创建"快照",并像mpeg播放中的关键帧一样使用它们,我可以自己编写代码,但我认为书籍构建/回放对于使用pandas和财务数据的人来说是如此普遍的需要他们可能已经是那里的图书馆.
任何想法,还是我自己动手?
我知道这是旧的,但看到大熊猫的好处和限制是有益的
我构建了一个简单的jupyter笔记本,以显示如何构建您所描述的订单,以便按照您的要求使用.
核心是一个循环,它更新订单簿的状态并将其保存以便合并到一个pandas Dataframe中:
states = []
current_timestamp = None
current_state = {}
for timestamp, (id_, price, exch, size) in df.iterrows():
if current_timestamp is None:
current_timestamp = timestamp
if current_timestamp != timestamp:
for key in list(current_state):
if current_state[key] == 0.:
del current_state[key]
states.append((current_timestamp, dict(**current_state)))
current_timestamp = timestamp
key = (exch, price)
current_state.setdefault(key, 0.)
current_state[key] += size
states.append((timestamp, dict(**current_state)))
order_book = pd.DataFrame.from_items(states).T
Run Code Online (Sandbox Code Playgroud)
但是:请注意如何在pandas之外构建book状态,并且订单簿状态的pandas.DataFrame不太适合模拟订单簿每级优先级或深度(Level 3数据),这可以取决于您想要为订单簿建模的准确程度,这是一个主要限制.
在现实世界中,订购书籍以及更新它们的订单和报价(两者都归入"请求"一词)具有相当复杂的交互.这些交互受管理它们的交换规则的约束,这些规则一直在变化.由于这些规则需要时间来正确建模,所以很少有人能够理解,旧的规则通常甚至没有太大的学术兴趣,人们倾向于将这些规则编入图书馆的唯一地方是不太感兴趣的地方与他人分享.
为了理解订单簿的简单("程式化")模型背后的理论,其订单和报价,请参阅Rama Cont,Sasha Stoikov,Rishi Talreja,第2部分的文章"订单动态的随机模型":
2.1限制订单簿
考虑在订单驱动的市场中交易的金融资产.市场参与者可以发布两种类型的买入/卖出订单.一个限制定单是一种在给定的价格进行交易一定量的安全性.限价订单会过账到电子交易系统,并且可以通过说明在每个价格水平过账的数量来汇总未结限价订单的状态:这称为限价订单簿.存在未结限制卖单的最低价格称为卖价,最高买入价格称为买入价格.[...更有用的描述]
2.2.订单动态
现在让我们描述如何通过新订单的流入更新限价订单簿.[...]假设所有订单都是单位大小[...],
•价格水平的限价买单p <p_A(t)增加p级的数量:x→x_ {p-1}
•价格水平的限价卖单p> p_B(t)增加p级的数量:x→x_ {p + 1}
•市场买单减少要价的数量:x→x_ {p_A(t)-1}
•市场卖单减少了出价的数量:x→x_ {p_B(t)+1}
•在价格水平p <p_A(t)取消一个限价买单,减少p级的数量:x→x_ {p + 1}
•在价格水平p> p_B(t)取消一个限制卖出订单会减少p级别的数量:x→x_ {p-1}
因此,订单簿的演变是由每个价格水平的市场订单,限价订单和取消流入[...]
您可以看到人们尝试建模或可视化简单限价订单簿的一些库是:


并有一个很好的quant.stackoverflow.com问题和答案在这里.