JP6464348B2 - 理想レイテンシフロア - Google Patents
理想レイテンシフロア Download PDFInfo
- Publication number
- JP6464348B2 JP6464348B2 JP2017525504A JP2017525504A JP6464348B2 JP 6464348 B2 JP6464348 B2 JP 6464348B2 JP 2017525504 A JP2017525504 A JP 2017525504A JP 2017525504 A JP2017525504 A JP 2017525504A JP 6464348 B2 JP6464348 B2 JP 6464348B2
- Authority
- JP
- Japan
- Prior art keywords
- message
- order
- batch
- orders
- messages
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 claims description 87
- 238000012545 processing Methods 0.000 claims description 48
- 230000001960 triggered effect Effects 0.000 claims description 10
- 230000004044 response Effects 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 7
- 230000007246 mechanism Effects 0.000 description 88
- 230000008569 process Effects 0.000 description 41
- 230000008520 organization Effects 0.000 description 18
- 230000002123 temporal effect Effects 0.000 description 13
- 230000008901 benefit Effects 0.000 description 11
- 241000270281 Coluber constrictor Species 0.000 description 9
- 241001522296 Erithacus rubecula Species 0.000 description 9
- OQZCSNDVOWYALR-UHFFFAOYSA-N flurochloridone Chemical compound FC(F)(F)C1=CC=CC(N2C(C(Cl)C(CCl)C2)=O)=C1 OQZCSNDVOWYALR-UHFFFAOYSA-N 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 230000008676 import Effects 0.000 description 8
- 238000003860 storage Methods 0.000 description 8
- 230000003068 static effect Effects 0.000 description 7
- 230000015572 biosynthetic process Effects 0.000 description 6
- 230000000670 limiting effect Effects 0.000 description 6
- 230000003111 delayed effect Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 238000012790 confirmation Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 239000011800 void material Substances 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 210000001072 colon Anatomy 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000009432 framing Methods 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Engineering & Computer Science (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- User Interface Of Digital Computer (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Description
本出願は、2014年7月25日に申請され“An Ideal Latency Floor”と題された米国仮特許出願第62/029,042号と、“Ideal Latency Floor”と題された米国非仮出願第14/533,543号とに対する優先を主張し、上記の内容はその全体を本明細書において参照により援用される。
システム100は、コンピュータシステム104、1つ以上のデータベース132、1つ以上の市場参加者142、電子注文ブック144、及び/又は他のコンポーネントを含み得る。上記及び他の機能を容易にするために、コンピュータシステム104は、1つ以上のコンピューティング装置110を含んでもよい。各コンピューティング装置110は、1つ以上のプロセッサ112、1つ以上の記憶装置114、及び/又は他のコンポーネントを含み得る。プロセッサ112は、1つ以上のコンピュータプログラム命令によりプログラムされることができ、上記コンピュータプログラム命令は、記憶装置114に記憶されることができる。1つ以上のコンピュータプログラム命令は、制限なく、理想レイテンシフロアアプリケーション120を含んでもよい。
1: Qを、所与の商品に対して到来する注文のキューとする;
2: 各注文を、これら注文が所与の商品における市場参加者から受信される時間的順序で、Qの最後の位置に追加する;
3: Cを、所与の商品のためのCLOBとする;
4: Mを、キーとしての[注文サイド,注文価格]のペアと所与の商品のための値としての注文のリストとを有するマップとする
5: Fを、レイテンシフロアの値とする。例えば、F=2ms
6: while (true) {
7: for (Entry E in M) {
8: Orders os = E.getValue();
9: Order o = os.getFirst();
10: if (current_time() >= o.getTimestamp() + F) {
11: shuffleAndProcess (E.getKey(),os,C);
12: M.remove(E.getKey());
13: }
14: }
15: for (int i = Q.size(); i>0; i--) {
16: Order o = Q.removeFirst();
17: Price p = o.getPrice(); //注文の指し値
18: Side s = o.getSide(); //サイドは一般に「買い(buy)」又は「売り(sell)」である
19: if (p >= C.getBestAskPrice() && s is buy) {
20: p = +infinity;
21: } else if (p <= C.getBestBidPrice() && s is sell) {
22: p = -infinity;
23: }
24: Orders os = M.getOrPutEmptyListIfKeyAbsent([s,p]);
25: os.addLast(o);
26: }
27: }
15: for (int i = Q.size(); i>0; i--) {
16: Order o = Q.removeFirst();
17: Price p = o.getPrice(); //注文の指し値
18: Side s = o.getSide(); //サイドは一般に「買い(buy)」又は「売り(sell)」である
19: if (p >= C.getBestAskPrice() && s is buy) {
20: p = +infinity;
21: } else if (p <= C.getBestBidPrice() && s is sell) {
22: p = -infinity;
23: } else {
C.process(o);
continue;
}
24: Orders os = M.getOrPutEmptyListIfKeyAbsent([s,p]);
25: os.addLast (o);
26: }
1: Map<Participant,LinkedList<Order>> m = … //mはバッチ内の参加者の注文を含む
2: LinkedList<Participant> ps = new
LinkedList<Participant> (m.keySet());
3: Collections.shuffle(ps);
4: int remainingOrders;
5: do {
6: remainingOrders = 0;
7: for (Participant p : ps) {
8: LinkedList<Order> os = m.get(p);
9: if (os.size() > 0) {
10: Order o = os.removeFirst();
11: processAgainstClob(o);
12: remainingOrders += os.size();
13: }
14: }
15: } while (remainingOrders > 0);
{A->[a1,a2,a3];B->[b1];C->[c1,c2]}
[c1,a1,b1,c2,a2,a3]
1: Map<Participant,LinkedList<Order>> m = … //mはバッチ内の参加者の注文を含む
2: LinkedList<Participant> ps = new
LinkedList<Participant> (m.keySet());
3: Collections.shuffle(ps);
4: for (Participant p : ps) {
5: for (Order o : m.get(p)) {
6: processAgainstClob(o);
7: }
8: m.get(p).clear();
9: }
{A->[a1,a2,a3];B->[b1];C->[c1,c2]}
[c1,c2,a1,a2,a3,b1]
1: Map<Participant,LinkedList<Order>> m = … //mはバッチ内の参加者の注文を含む
2: LinkedList<Participant> ps = new
LinkedList<Participant>(m.keySet());
3: Collections.shuffle(ps);
4: int remainingOrders;
5: final int splitSize = 1;
6: do {
7: remainingOrders = 0;
8: for (Participant p : ps) {
9: LinkedList<Order> os = m.get(p);
10: if (os.size() > 0) {
11: Order o = os.removeFirst();
12: o.qty -= splitSize;
13: processAgainstClob(new Order(o,splitSize));
14: if (o.qty > 0) {
15: os.addFirst(o);
16: }
17: remainingOrders += os.size();
18: }
19: }
20: } while (remainingOrders > 0);
1: class Order {
2: int qty = 0;
3: Order parent;
4: Order(Order parent, int qty) {
5: this.parent = parent;
6: this.qty = qty;
7: }
8: //… 必要に応じた注文に対する追加メソッド/フィールド
9: }
[b1:1,a1:1,c1:1,b1:1,a1:1,c1:1,a2:1,c1:1,c1:1]
である。
Order processCancel(Msg cxl)
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class IdealLatencyFloor {
public static void main(String[] args) throws Throwable {
//Maker_Races:Boolean
boolean makerRaces = false;
//Taker_Races:Boolean
boolean takerRaces = false;
//Cancels_In_Batching:Boolean
boolean cancelsInBatching = true;
//Cancels_Trigger:Boolean
boolean cancelsTrigger = false;
//Floor_Upper:double
double floorUpper = 2.0;
//Floor_Lower:double
double floorLower = 2.0;
//Maker_At_Once:Boolean
boolean makerAtOnce = false;
//Taker_At_Once:Boolean
boolean takerAtOnce = true;
//これは、商品に対するインバウンドメッセージのキューである
//通常、このキューは、ソケット又は同様のものからのスレッドフレーミング
//メッセージによって埋められることになる
final Queue<Msg> inboundMsgs = new Queue<Msg>();
//これは、現在アクティブであるレースのマップであり、すなわち、
//このマップ内のバッチは、まだシャッフル及び排出されていない
final LinkedHashMap<PriceSide,Batch> activeRaces = new LinkedHashMap<PriceSide,Batch>();
//これは、商品の中央指値注文ブックである
//各商品は、すべてのその形成者注文を記憶するこのオブジェクトの
//1つのインスタンスを有することになる
final CLOB clob = new CLOB();
//市場がオープンしている間、我々はこのループ内でスピンする。「スピンする
//こと」は、行うべき最も効率の良いことではないが、ここでの我々の目的は
//簡素な一実装を伝えることであり、必ずしも最も効率の良いものではない
while (true) {
//システム内のすべてのアクティブなレースにわたり反復する。activeRacesは
//意図的にLinkedHashMapであることが留意され、ゆえに、複数のタイマがすべて
//「一挙に」満了したとき、我々はバッチをその作成日付に基づいて処理する --
//複数が「同時に」満了したとき、より早く作成されたバッチ/レースが、
//より後に作成されたものより前に処理されることになる。
for (Iterator<PriceSide> it = activeRaces.keySet().iterator(); it.hasNext();) {
//これは、レース/バッチを識別するキーである
PriceSide key = it.next();
//これはバッチ自体であり、実装により非ヌルであることを保証される
Batch batch = activeRaces.get(key);
//この式が真である場合、バッチのタイマが満了しており、我々はそのバッチを
//排出しなければならない。前に述べられたとおり、我々がこのforループの
//内側であるとき、複数のバッチが満了していることがあり、その場合、我々は、
//バッチ内の第1の注文/メッセージが受信された時間によって、これらを
//意図的に処理することになる。ゆえに、複数のバッチがすべて「一挙に」
//満了したとき、最も古い注文を含むバッチが最初に処理されることになる。
if ((batch.startTimeMillis + batch.periodMillis) <= System.nanoTime() / 1000000.0) {
//キューを排出する方法について、2つの別個の構成パラメータがある。
//1つは受容者レースに関し、1つは形成者レースに関する。我々は、
//Batch内に記憶されたレースタイプに基づいて、ここで正しい物を選ぶ
boolean drainAtOnce = batch.isTakerRace ? takerAtOnce : makerAtOnce;
//バッチを排出する、すなわち、特定レースタイプにおける注文のランダム化
//を行うロジックが、Batchクラスの内部に存在する。
batch.shuffleAndDrain(clob,drainAtOnce);
//ここに該当した場合、我々はこのバッチからの注文の排出を完了しており、
//このバッチ(及びそのキー)をアクティブレースのリストから削除する。
//ゆえに、我々はそれを再度処理せず、ゆえに、activeRacesマップのサイズを
//小さく保つ
it.remove();
}
}
//特定の商品を扱うソケットからのインバウンドメッセージがある場合、これらを、
//メッセージのすべてを一挙に排出することによって処理する。いかなるインバ
//ウンドメッセージもない場合、このwhileループの反復は、このメソッドが
//ノンブロッキングである、すなわち、空のメッセージリストを返すと仮定する。
//NB: 我々はここで新しいメッセージの待機をブロックすることはできず、
//なぜならば、上記forループ内で、バッチ期間/アクティブレースが満了した/
//報じられたことについて、絶えず確認する必要があるからである。
for (Msg msg : inboundMsgs.drain()) {
//この式が真である場合、メカニズムは全体的に無効にされる。ゆえに我々は
//すべてのメッセージをリアルタイムで、受信されたとおりに処理する
if (!takerRaces && !makerRaces) {
clob.process(msg);
continue;
}
//この式が真である場合、取り消しがバッチメカニズムに含まれず、
//ゆえに、リアルタイムで、受信されたとおりに処理されるべきで
//ある
if (!cancelsInBatching && msg.isCancel()) {
clob.process(msg);
continue;
}
//これは、2つ組としての注文の指し値及びサイドである。
//取り消しメッセージについて、これは、取り消される注文の価格及び
//サイドである。変数priceSideは、activeRacesマップ内のレースを
//識別する「キー」であることになる
PriceSide priceSide = msg.priceSideKey();
//取り消しがメカニズムにより処理されるとき、受容者注文と共にグループ化
//されるため、取り消しのキーは、その価格をヌルに設定される必要がある。
//さらに、ビッドを取り消すレースが、そのビッドに至る売り注文と競争する
//ため、取り消しのサイドが、レースタイプによりグループ化することになる
//とき、反転される。
//こうした「補正物」をこのブロック内における取り消しのキーにする
if (msg.isCancel()) {
priceSide.price = null;
priceSide.isBuy = !priceSide.isBuy;
}
//このコードブロックは、注文メッセージがブックを「横断する」か否か、すな
//わち、注文が「リアルタイム」ブックに対してエントリ上でマッチすることに
//なるか(cf.合成された市場データブック)を決定し、信用を無視する
boolean orderCrossesBook = false;
if (!msg.isCancel()) {
orderCrossesBook = (priceSide.isBuy && priceSide.price >= clob.getAskPrice())
|| (!priceSide.isBuy && priceSide.price <= clob.getBidPrice());
//注文がエントリ上でマッチすることになると思われる場合、2つ組のprice
//フィールドをヌルに設定し、したがって、最終的にすべての受容者注文が、
//価格によってでなく、サイドのみによってバッチにされることになる
if (orderCrossesBook) {
priceSide.price = null;
}
}
//この式が真である場合、メカニズムは受容者レースについて無効にされ、
//我々はすべての取り消し及び受容者注文を、これらが受信される順序において、
//リアルタイムで処理するべきである
if (!takerRaces && (orderCrossesBook || msg.isCancel())) {
clob.process(msg);
continue;
}
//この式が真である場合、メカニズムは形成者レースについて無効にされ、
//我々は、すべての形成者注文をリアルタイムで処理するべきであり、しかし
//ここで、取り消しを処理するべきではなく、なぜならば、取り消しは受容者
//レースに含まれる可能性があるからである
if (!makerRaces && !orderCrossesBook && !msg.isCancel()) {
clob.process(msg);
continue;
}
//ここで、我々は、特定レースインスタンスのための
//メッセージのBatchを取得している
Batch batch = activeRaces.get(priceSide);
//この式が真である場合、このレースは現在アクティブでなく、なぜならば、
//まだトリガされていないからである。このブロックの内側のロジックは、
//レースが実際にトリガされているか否かを決定する。
if (batch == null) {
//この式が真である場合、我々はレースをトリガしておらず、なぜならば構成
//パラメータが、取り消しがレースをトリガできないと指定しているからであ
//る。したがって、取り消しをリアルタイムで、受信されたとおりに処理する
if (!cancelsTrigger && msg.isCancel()) {
clob.process(msg);
continue;
}
//我々は、レースがいつトリガされたか、形成者レースか受容者レースか、
//その実際の遅延期間は何か等、大量の情報を記憶する必要があり、
//バッチオブジェクトのフィールド内に上記のすべてを行う。
batch = new Batch();
if (msg.isCancel()) {
//我々がここに該当した場合、cancelsTriggerと命名された構成パラメータ
//は、真であるべきである。
//cancelsTriggerが真であるときでさえ、我々は、特定の取り消しがブック
//のトップにおける注文についてあったときに限り、レースを開始したい
boolean cancelAtTob = (msg.isBuy() && msg.getPrice() == clob.getBidPrice())
|| (!msg.isBuy() && msg.getPrice() == clob.getAskPrice());
//取り消しが、ブックのトップにおける注文についてでなかった場合、
//それをリアルタイムで、受信されたとおりに処理する
if (!cancelAtTob) {
clob.process(msg);
continue;
}
//我々がここに該当する場合、取り消しは、受容者レースを実際開始して
//いる。
batch.isTakerRace = true;
} else {
//我々は、ここに該当する場合、取り消しメッセージでなく注文メッセージ
//を有することをわかっている。前のロジックから、この注文が受容者又は
//形成者レースについてかを判別できる。さらに、事前にヌル価格を有する
//ようにキーを設定しており、ゆえに、このことを再度行う必要はない
batch.isTakerRace = orderCrossesBook;
}
//これは、我々が注文をシャッフルしCLOBに対して排出する前、バッチの
//タイマが稼働することになる時間の長さを設定する。すべて、double演算に
//注意しながらである。Math.random()のjavadocが、我々に、我々が所望
//する属性 -- [0,1)間における一様の連続的な分布を、与えていることに
//留意する。上記分布を、我々は、floorLowerとfloorUpperとの間で適宜
//スケール変更する。
batch.periodMillis = Math.max(
floorLower,
(Math.random() * (floorUpper-floorLower)) + floorLower
);
//これは、バッチ内の第1の注文が受信された時間を設定し、この時間は、
//タイマを「開始する」のに使用される
batch.startTimeMillis = msg.getReceiveTimestamp();
//このバッチを他のアクティブなレースと共に記憶する。実装が、
//activeRaces.get(priceSide)==nullが真であること、すなわち、我々が
//既存のバッチに上書きしていなことを保証する。この上書きはとてもとても
//悪いことになり、なぜならば、我々がそれをする場合、そのバッチの注文が
//排出されない(CLOBに対して処理されない)ことになるからである
activeRaces.put(priceSide,batch);
}
//我々がここに該当する場合、バッチオブジェクトは作成されているか又は
//既に存在しており、我々はバッチにメッセージを追加する必要がある。
batch.add(msg);
}
}
}
static class CLOB {
//スタブ: このメソッドは、メッセージ(取り消し又は注文)を中央指値注文
//ブックに対して即時処理させる。疑いを避けるために、「CLOBに対して処理する
//こと」は、あり得るマッチについて市場の反対サイドを価格確認すること、
//あり得るマッチについて信用確認すること、ブックに注文を挿入すること、注文を
//マッチングすること、ブックから注文を削除することなどによって、CLOBに
//対してメッセージを適用することを意味する。
void process(Msg msg) {}
//スタブ: このメソッドは、ブックビッド価格のトップを、それがホスト内に
//出現するとき、返すことになる (cf.最後の市場データアップデート)
Double getBidPrice() {return null;}
//スタブ: このメソッドは、ブックアスク価格のトップを、それがホスト内に
//出現するとき、返すことになる (cf.最後の市場データアップデート)
Double getAskPrice() {return null;}
}
static class Queue<T> {
//スタブ: このメソッドは、商品について蓄積したメッセージのリストを返す。
//これはノンブロッキングであり、ゆえに、メッセージが蓄積されていない場合、
//空のリストを返す
List<T> drain() {return null;}
}
static class Msg {
//スタブ: このメソッドは、取り消しについて真を、
//注文について偽を返す
Boolean isCancel() {return null;}
//スタブ: このメソッドは、2つ組の{価格,サイド}を返し、
//これにおいてサイドは、買いについて真、売りについて偽である。
//取り消しメッセージについて、このメソッドは、
//取り消される注文のサイドと価格とを返す
PriceSide priceSideKey() {return null;}
//スタブ: このメソッドは、ホストがメッセージを受信した
//タイムスタンプを、マイクロ秒又はより良好な正確さで返す
Double getReceiveTimestamp() {return null;}
//スタブ: このメソッドは、メッセージを送信した組織
//(別称、参加者/事務所)を表すオブジェクトを返す
Object getOrganization() { return null; }
//スタブ: このメソッドは、注文の価格、又は、
//取り消しメッセージが適用される注文を返す
Double getPrice() {return null;}
//スタブ: このメソッドは、注文のサイド、又は、取り消しメッセージ
//が適用される注文を返す。真が買いに関し、偽が売りに関する。
Boolean isBuy() {return null;}
}
static class Batch {
//バッチに割り当てられることになる次idを記憶する
private static int nextBatchId = 0;
//実際のバッチのid
final int batchId;
//これは、フロアの継続時間である
Double periodMillis;
//これは、レース/バッチ期間の開始時間である
Double startTimeMillis;
//これは、レースが形成者レースか受容者レースかを指定する
boolean isTakerRace;
//このマップは、組織から、そのorgが送信したメッセージのリストにである
final Map<Object,List<Msg>> orgToMsgs = new HashMap<Object,List<Msg>>();
Batch() {
//我々は、レース又はバッチのインスタンスとその中のすべての注文とを
//一意に識別することができる必要がある。ゆえに、バッチオブジェクト
//が作成されるたび、バッチオブジェクトは一意idを割り当てられる。
batchId = nextBatchId++;
}
void add(Msg msg){
//メッセージは、組織単位でグループ化されなければならず、
//それが、下記のコード内で起こっていることである。
//マップのキーは組織であり、マップの値はその組織からの
//注文のリストである。NB: 組織*内における*注文の
//順序付けは、このコードで目的を持って保有される。
List<Msg> msgs = orgToMsgs.get(msg.getOrganization());
if (msgs == null) {
msgs = new LinkedList<Msg>();
orgToMsgs.put(msg.getOrganization(),msgs);
}
//このメソッドは、javadocにより、リストの終わりにmsgを追加し、
//これにより、所与の組織内における時間的順序付けを保有する
msgs.add(msg);
}
void shuffleAndDrain(CLOB clob, boolean drainAtOnce) {
//我々は、このレース内の組織のリストを、再順序付けすることができる
//形式で記憶する必要がある。hashmapの(キー)セットが我々のために
//それをすることはないので、我々はここでコピーを作る。
List<Object> orgs = new ArrayList<Object>(orgToMsgs.keySet());
//次に、我々は、クライアント組織の上記リストをシャッフルし、したがって、
//Collections.shuffle()のjavadocにより、各組織は、リストの各位置に出現
//する等しい確率を有する
Collections.shuffle(orgs);
if (drainAtOnce) {
//我々は、ここに該当する場合、組織のメッセージのすべてを、
//次の組織のメッセージに移る前に、排出する。
//NB 特定の組織のメッセージが排出される順序は、
//その組織がこれらメッセージを送信したのと同じ順序
//である。
for (Object org : orgs) {
for (Msg msg : orgToMsgs.get(org)) {
clob.process(msg);
}
//リストをクリアして、
//2つの排出ストラテジ間における実装の一貫性を保つ
//(この実装と下記の実装)
orgToMsgs.get(org).clear();
}
} else {
//我々は、ここに該当する場合、組織にわたり、‘org’の
//順序付けにおいて、一度に組織から1つのメッセージを
//とって、残りの組織がなくなるまで、繰り返し反復する
//必要がある。再びになるが、所与の組織内における
//メッセージの相対的順序付けは、これらメッセージが
//受信された順序付けと同じである。
while (orgs.size() > 0) {
for (Iterator<Object> it = orgs.iterator(); it.hasNext();) {
Object org = it.next();
List<Msg> msgs = orgToMsgs.get(org);
//この組織のための次の注文を削除し、処理する
clob.process(msgs.remove(0));
if (msgs.size() == 0) {
//我々がここに該当する場合、組織は、排出すべき
//残りの注文を有さない。ゆえに我々は、もはや
//この組織を訪問し続ける必要が無い。
it.remove();
}
}
}
}
}
}
static class PriceSide {
Double price;
boolean isBuy;
//hashCode()及びequals()は実装されていないが、
//双方の価格が等しく、双方のサイドが等しい場合、
//2つのPriceSideオブジェクトは等しくなる
}
}
Claims (12)
- 競争メッセージの公平処理のための方法であって、当該方法はコンピューティング装置により実行され、
第1の時間に商品の第1の送信者に関連付けられた第1のメッセージを受信することと、
前記第1のメッセージの受信に応答して、前記商品に関連付けられた第1の競争枠をトリガすることと、
前記第1のメッセージが受信される前記第1の時間と所定長の時間とに基づいて前記第1の競争枠のバッチ期間を定義することと、
前記バッチ期間内の第2の時間に前記商品の第2の送信者に関連付けられた第2のメッセージを受信することと、
前記第1のメッセージ及び前記第2のメッセージに基づいて、バッチにされたメッセージセットを生成することと、
前記バッチ期間の間に1つ以上のメッセージが受信された送信者のリストを生成することであって、前記送信者のリストは、前記第1の送信者及び前記第2の送信者を少なくとも含む、ことと、
前記送信者のリストをシャッフルして前記送信者のランダムな順序付けを作成することと、
前記バッチ期間の終わりが生じたと決定することと、
前記バッチ期間の終わりが生じたとの前記決定に応答して、前記送信者のランダムな順序付けに基づきさらなる処理のために前記バッチにされたメッセージセットから1つのメッセージを選択することと、
を含む方法。 - 当該方法は、
第3の時間に前記商品の第3の送信者に関連付けられた第3のメッセージを受信することと、
前記第3のメッセージのメッセージタイプに基づき、前記第3のメッセージが前記第1の競争枠とは異なる前記商品に関連付けられた第2の競争枠をトリガすべきであると決定することと、
前記第3のメッセージが前記第2の競争枠をトリガすべきであるとの決定に応答して、前記商品に関連付けられた前記第2の競争枠をトリガすることと、
をさらに含む、請求項1に記載の方法。 - 前記第2の競争枠は、前記第1の競争枠の少なくとも一部分と前記第2の競争枠の少なくとも一部分とが同時にアクティブであるように前記バッチ期間の間にトリガされる、請求項2に記載の方法。
- 前記第1の競争枠は、第1のタイプであり、前記第2の競争枠は、前記第1のタイプとは異なる第2のタイプである、請求項3に記載の方法。
- 当該方法は、
前記バッチ期間の満了まで前記第1のメッセージ又は前記第2のメッセージを記憶すること、
をさらに含む、請求項1に記載の方法。 - 当該方法は、
前記バッチ期間内の第3の時間に前記商品の前記第1の送信者に関連付けられた第3のメッセージを受信することと、
前記第1のメッセージ及び前記第3のメッセージに基づいて第1の送信者からの第1のメッセージセットを生成することと、
前記第2のメッセージに基づいて第2の送信者からの第2のメッセージセットを生成することと、
前記第1のメッセージセット又は前記第2のメッセージセットの中から1つのメッセージをランダムに選択することと、
をさらに含む、請求項1に記載の方法。 - 前記メッセージが前記第1のメッセージセット又は前記第2のメッセージセットの中からランダムに選択されるか否かが、前記第1の競争枠のタイプに基づいて決定される、請求項6に記載の方法。
- 前記第1のメッセージセットは第1の所定条件を満足し、前記第2のメッセージセットは第2の所定条件を満足する、請求項6に記載の方法。
- 前記第2のメッセージは、前記第1の競争枠に関連付けられる、請求項1に記載の方法。
- 競争メッセージの公平処理のためのシステムであって、
コンピューティング装置
を含み、
前記コンピューティング装置は、
第1の時間に商品の第1の送信者に関連付けられた第1のメッセージを受信し、
前記第1のメッセージの受信に応答して、前記商品に関連付けられた第1の競争枠をトリガし、
前記第1のメッセージが受信される前記第1の時間と所定長の時間とに基づいて前記第1の競争枠のバッチ期間を定義し、
前記バッチ期間内の第2の時間に前記商品の第2の送信者に関連付けられた第2のメッセージを受信し、
前記第1のメッセージ及び前記第2のメッセージに基づいて、バッチにされたメッセージセットを生成し、
前記バッチ期間の間に1つ以上のメッセージが受信された送信者のリストを生成することであって、前記送信者のリストは、前記第1の送信者及び前記第2の送信者を少なくとも含み、
前記送信者のリストをシャッフルして前記送信者のランダムな順序付けを作成し、
前記バッチ期間の終わりが生じたと決定し、
前記バッチ期間の終わりが生じたとの前記決定に応答して、前記送信者のランダムな順序付けに基づきさらなる処理のために前記バッチにされたメッセージセットから1つのメッセージを選択する
ように構成される、システム。 - コンピューティング装置に請求項1乃至9のうちいずれか1項に記載の方法を実行させるコンピュータプログラム。
- 競争メッセージの公平処理のための、コンピュータにより実施される方法であって、当該方法は、コンピュータプログラム命令でプログラムされた1つ以上の物理プロセッサを有するコンピューティング装置において実施され、前記コンピュータプログラム命令は、前記1つ以上の物理プロセッサにより実行されるときに、前記コンピューティング装置に請求項1乃至9のうちいずれか1項に記載の方法を実行させる、方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462029042P | 2014-07-25 | 2014-07-25 | |
US62/029,042 | 2014-07-25 | ||
US14/533,543 | 2014-11-05 | ||
US14/533,543 US10325317B2 (en) | 2013-11-05 | 2014-11-05 | Ideal latency floor |
PCT/US2014/072796 WO2016018453A1 (en) | 2014-07-25 | 2014-12-30 | Ideal latency floor |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2017522683A JP2017522683A (ja) | 2017-08-10 |
JP6464348B2 true JP6464348B2 (ja) | 2019-02-06 |
Family
ID=55218158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017525504A Active JP6464348B2 (ja) | 2014-07-25 | 2014-12-30 | 理想レイテンシフロア |
Country Status (7)
Country | Link |
---|---|
EP (1) | EP3186769A4 (ja) |
JP (1) | JP6464348B2 (ja) |
CN (1) | CN106688008B (ja) |
AU (2) | AU2014402295A1 (ja) |
CA (1) | CA2956079C (ja) |
SG (1) | SG11201700613XA (ja) |
WO (1) | WO2016018453A1 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10325317B2 (en) | 2013-11-05 | 2019-06-18 | Refinitiv Us Organization Llc | Ideal latency floor |
US10909621B2 (en) | 2013-11-05 | 2021-02-02 | Refinitiv Us Organization Llc | Systems and methods for quantifying temporal fairness on electronic trading venues |
US11144993B2 (en) | 2013-11-05 | 2021-10-12 | Refinitiv Us Organization Llc | Delay-free matching for deemphasizing effects of speed differentials among price-makers |
CN110691263A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 同步本地与服务器时间的方法、介质、电子设备及系统 |
WO2021126193A1 (en) * | 2019-12-18 | 2021-06-24 | Visa International Service Association | Access management for cancelled requests in a distributed environment |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7430533B1 (en) * | 2000-01-11 | 2008-09-30 | Itg Software Solutions, Inc. | Automated batch auctions in conjunction with continuous financial markets |
JP2003108774A (ja) * | 2001-09-28 | 2003-04-11 | Tokyo Commodity Exchange | 電子的約定締結システム及び約定締結方法 |
US7979339B2 (en) * | 2006-04-04 | 2011-07-12 | Bgc Partners, Inc. | System and method for optimizing execution of trading orders |
US7853499B2 (en) * | 2007-03-29 | 2010-12-14 | Board Of Trade Of The City Of Chicago | System and method of allocating an incoming order to standing orders |
US8170949B2 (en) * | 2008-08-11 | 2012-05-01 | Bgc Partners, Inc. | Products and processes for order distribution |
WO2010085746A1 (en) * | 2009-01-23 | 2010-07-29 | Cfph, Llc | Multicomputer distributed processing techniques to prevent information leakage |
US20110040669A1 (en) * | 2009-08-17 | 2011-02-17 | Darren Lee | Automated spread trading system |
US20120054084A1 (en) * | 2010-08-27 | 2012-03-01 | Wolf Brian M | Delta Neutral Futures Allocation |
US11989779B2 (en) * | 2012-10-04 | 2024-05-21 | Trading Technologies International, Inc. | Configurable order entry, matching, coordination, and market data intervals |
-
2014
- 2014-12-30 SG SG11201700613XA patent/SG11201700613XA/en unknown
- 2014-12-30 JP JP2017525504A patent/JP6464348B2/ja active Active
- 2014-12-30 WO PCT/US2014/072796 patent/WO2016018453A1/en active Application Filing
- 2014-12-30 CA CA2956079A patent/CA2956079C/en active Active
- 2014-12-30 AU AU2014402295A patent/AU2014402295A1/en not_active Abandoned
- 2014-12-30 CN CN201480081840.3A patent/CN106688008B/zh active Active
- 2014-12-30 EP EP14898437.0A patent/EP3186769A4/en not_active Ceased
-
2018
- 2018-08-23 AU AU2018220100A patent/AU2018220100A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
CA2956079C (en) | 2019-07-09 |
CA2956079A1 (en) | 2016-02-04 |
WO2016018453A1 (en) | 2016-02-04 |
EP3186769A1 (en) | 2017-07-05 |
EP3186769A4 (en) | 2018-01-10 |
SG11201700613XA (en) | 2017-02-27 |
AU2014402295A1 (en) | 2017-02-02 |
JP2017522683A (ja) | 2017-08-10 |
CN106688008B (zh) | 2021-03-09 |
CN106688008A (zh) | 2017-05-17 |
AU2018220100A1 (en) | 2018-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11798077B2 (en) | Ideal latency floor | |
JP6464348B2 (ja) | 理想レイテンシフロア | |
US11741542B2 (en) | FPGA circuit for processing electronic messages in a distributed computer system | |
Linton et al. | Implications of high-frequency trading for security markets | |
US20190347628A1 (en) | Cryptocurrency protocol with built-in intervention responsive to a cryptocurrency exchange rate | |
US20180262207A1 (en) | Elimination of electronic data transaction request messages received from a common source | |
CA2572393C (en) | System and method for processing composite trading orders | |
Budish et al. | Will the market fix the market?: A theory of stock exchange competition and innovation | |
JP2008541238A (ja) | 値段が付けられていない注文のオークション及び転送 | |
US11588754B2 (en) | Activity based electrical computer system request processing architecture | |
Bhave et al. | Primary-Market Auctions for Event Tickets: Eliminating the Rents of'Bob the Broker'? | |
US20230350851A1 (en) | Concurrent write operations for use with multi-threaded file logging | |
WO2016187485A1 (en) | Binary options on selected indices | |
US8396787B2 (en) | Simplified quote sharing calculation | |
Critical | Biotechnology in Europe: 2005 comparative study | |
JP4643993B2 (ja) | 指値注文の執行確率算出システム及び執行確率算出プログラム | |
Bowden et al. | Rumours built on quicksand: evidence on the nature and impact of message board postings in modern equity markets | |
CN112070646A (zh) | 用于二级市场代理投注的建议引擎 | |
Le et al. | Dynamic limit order placement strategies: survival analysis with a multiple-spell duration model | |
Tseng et al. | Emergence of scale-free networks in markets | |
Schilizzi et al. | Does tendering conservation contracts with performance payments generate additional benefits? | |
Aquilina et al. | high-frequency trading “arms race” | |
CN116167857A (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
Herman | Trading Dynamics in a Fragmented Market | |
Tseng et al. | Scale-Free Networks Emerged in the Markets: Human Traders versus Zero-Intelligence Traders |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20170316 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20170316 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20180216 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20180313 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20180611 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20181030 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20181129 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20181129 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20181129 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6464348 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |