2

私は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

これらのレコードは 100 万以上存在する可能性があり、リクエストごとにすべてのレコードを反復処理すると、特にその日の後半に時間を見ようとした場合に時間がかかります。ある時間間隔で「スナップショット」を作成し、mpeg 再生のキー フレームのように使用できると思います。自分でコーディングすることもできますが、本の構築/再生は、金融データでパンダを使用する人々にとって非常に一般的なニーズであると思いますこれを行うためのライブラリがすでに存在している可能性があります。

アイデアはありますか、それとも自分でロールバックしますか?

4

1 に答える 1

9

私はこれが古いことを知っていますが、パンダの利点と限界を見ることは有益です

あなたが説明したようなオーダーブックを、あなたが要求したように使用するためにどのように構築できるかを示すために、簡単な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

ただし、書籍の状態を pandas の外部で構築する必要があることに注意してください。また、注文書の状態の pandas.DataFrame は、レベルの優先度または深さ (レベル 3 データ) ごとの注文書のモデルにはあま​​り適していません。オーダーブックをどの程度正確にモデル化するかによって、大きな制限になります。

現実の世界では、注文書と、それらを更新する注文と見積もり (どちらも「要求」という用語に分類されます) は、かなり複雑な相互作用を持っています。これらの相互作用は、それらを管理する取引所の規則によって管理されており、これらの規則は常に変化しています。これらの規則は正しくモデル化するのに時間がかかり、理解する価値のある人はごくわずかであり、古い規則セットは通常、学術的な関心を引くものでさえないため、これらの規則がライブラリに体系化されているのを見つける傾向があるのは、あまり関心のない場所だけです。それらを他の人と共有する際に。

オーダーブックの単純な (「様式化された」) モデルの背後にある理論、そのオーダー、およびその上でのクオートを理解するには、Rama Cont、Sasha Stoikov、Rishi Talreja による論文「A stochastic model for order bookdynamics」を参照してください。

2.1 指値注文書

注文主導の市場で取引される金融資産を考えてみましょう。市場参加者は、2 種類の売買注文を出すことができます。指値注文とは、一定額の証券を特定の価格で取引する注文です。指値注文は電子取引システムに投稿され、未処理の指値注文の状態は、各価格レベルで投稿された数量を示すことで要約できます。これは指値注文帳として知られています。未決の売り指値注文の最低価格はアスク価格と呼ばれ、最高買い価格はビッド価格と呼ばれます。[...より便利な説明]

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 に答える