2

我对python和pandas还很陌生,我想知道是否有人知道是否有任何python库建立在pandas之上,这将需要一个时间序列的订单,其中包含以下列:时间戳,id,价格,大小,交换

每条记录都会根据大小调整每个价格和交易所的总和,以便为您提供当前视图,即记录可能如下所示:

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

我希望能够随时了解市场的最新情况。例如,如果我在 9:00:25.130 做市价,我会得到:

1.02, N,  50
1.02, X, 150
1.03, X,  50

9:00:25.131 的查询将返回

1.02, N,  50
1.02, X, 145
1.03, X,  50

这些记录可能有一百万个或更多,迭代每个请求的所有记录将需要很长时间,特别是如果您试图在当天晚些时候查看时间。我想人们可以在某个时间间隔内创建“快照”并将它们用作 mpeg 播放中的关键帧,我可以自己编写代码,但我认为书籍构建/播放对于使用带有财务数据的 pandas 的人们来说是一种常见的需求他们可能已经有图书馆可以做到这一点。

有什么想法,还是我自己动手?

4

1 回答 1

9

我知道这是旧的,但看到熊猫的好处和局限性是有启发性的

我构建了一个简单的 jupyter notebook来展示如何构建像您描述的订单簿以按照您的要求使用。

核心是一个循环,用于更新订单簿的状态并将其保存以合并到 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

但是:请注意如何在 pandas 之外建立账本状态,并且订单状态的 pandas.DataFrame 不太适合按级别优先级或深度(级别 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 问题和答案。

于 2016-01-16T06:44:38.863 回答