注文を照合する最も効率的な方法


8

2つの2Dアレイを考えます Bj (購入配列)および Sj (sell array)それぞれ th elementは浮動小数点値の配列に関連付けられ、各浮動小数点値は整数の配列に関連付けられます。

例えば

B = [ 
  0001 => [ 32.5 => {10, 15, 20}, 
            45.2 => {48, 16, 19}, 
            ...,
            k1
          ], 
  0002 => [ 35.6 => {17, 35, 89}, 
            68.7 => {18, 43, 74}, 
            ...,
            k2
          ] 
] 

同様に、sell配列についても同様です。

これは、株式/商品取引所の注文関連付けシステムに似ています。

BuyOrderBook = [
                 CompanyName => [
                                 Price1 => [Qty1, Qty2...],
                                 Price2 => [Qty1, Qty2...]
                                ]
                 SecondCompany = [...]
               ]

次の問題を解決するために知られている最速の方法は何ですか?

入力:配列を購入B、アレイの販売 S
問題:あるかどうかを決定するc1p1q1B そして c2p2q2Sq1q2>0 そして p2p1

つまり、取引所の注文を照合するための最も重要な方法は何ですか?

コメントに応じて更新

MSFTには25株@ 60 ドルの販売があり、MSFTの10株に対して61 ドルを提供することをいとわない買い手がいるとします。次に、買い手は60 ドル @ 60を受け取り、買い注文のブックは空になりますが、売り注文のブックは新しい数量で更新されます-15シェア@ 60 ドル

今度は逆のケースを考えてみましょう。MSFTには25株@ 60 ドルが購入されており、MSFTの10株に対して61 ドルを受け取ることをいとわない売り手がいます。その後、売り手は最低$ 61を要求し、買い手は最高$ 60を提供しているため、取引は実行されません。注文は保存され、新しい注文が受信されるまで待機します。

(これは指値注文の原則です。売り手は売りたいと思う最低価格を指定し、買い手は買いたいと思う最高価格を指定します)。

実行後、売り注文帳は(25-10)=15@86.5となり、買い注文帳は空(10-10)= 0になります。


私はよく編集しました。意味が意図したとおりであることを確認してください。「スタック」は本当にここで使用したい言葉ですか?データ構造はスタックではないので、ドメイン式ですか?質問に関しては、あなたが述べた決定問題とすべての一致を見つけることは必ずしも同じくらい難しいというわけではないことに注意してください。特に、マッチングが競合する可能性があります。
ラファエル

@Raphaelに関する問題の記述に小さな変更を加えました q1q2。構造は、新しい注文が注文帳に「プッシュ」されるスタックです。ただし、会社、価格、数量の関係は重要です。必要に応じて構造を変更します。
check123

@Raphael「一致が競合する可能性があります」例?
check123

1)スタックは通常、一番上の要素以外にはアクセスできません。ランダムアクセスが必要ですか?2)2つの買い注文があり、両方とも同じ売り注文にあてはまるが、両方を満たすことはできない場合があります。
ラファエル

@ラファエル1)ああ!はい、可能性があります。アレイの方が適切です。2)一致の競合がある場合、FIFOの原則に基づいて解決されます。古い注文が優先されます(ほとんどの交換はこの原則に従います)
check123

回答:


5

企業の配列として購入注文書を維持します。各会社について、プライオリティキューの価格を保持します(買いの最大値と売りの最小値)。価格ごとに、注文のキューを保持します。

各企業、呼び出しのために、マッチングの注文をチェックするために、find-min()およびfind-max()販売、アレイ内の会社に、最高の売り/買いの価格を見つけるために、配列を買います。max> minの場合は、注文を満たしてみてください。注文を満たすには、価格キューの1つが空になるまで、その会社と価格の購入キューと販売キューから要素を引き出します。価格キューが空の場合は、対応する要素をプライオリティキューから削除し、チェックを再度実行します。

この戦略では、注文ごとに一定の時間がかかり、 Oログp 価格変更ごと、 p 企業の価格の数です

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.