JP2017522683A - 理想レイテンシフロア - Google Patents
理想レイテンシフロア Download PDFInfo
- Publication number
- JP2017522683A JP2017522683A JP2017525504A JP2017525504A JP2017522683A JP 2017522683 A JP2017522683 A JP 2017522683A JP 2017525504 A JP2017525504 A JP 2017525504A JP 2017525504 A JP2017525504 A JP 2017525504A JP 2017522683 A JP2017522683 A JP 2017522683A
- Authority
- JP
- Japan
- Prior art keywords
- order
- market
- race
- batch
- participant
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 88
- 230000004044 response Effects 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 10
- 230000001960 triggered effect Effects 0.000 claims description 10
- 238000007599 discharging Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 abstract description 43
- 238000001514 detection method Methods 0.000 abstract description 6
- 230000007246 mechanism Effects 0.000 description 89
- 230000008569 process Effects 0.000 description 40
- 230000008520 organization Effects 0.000 description 18
- 230000002123 temporal effect Effects 0.000 description 14
- 230000008901 benefit Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 230000008676 import Effects 0.000 description 8
- 230000000670 limiting effect Effects 0.000 description 8
- 238000003860 storage Methods 0.000 description 8
- 230000003068 static effect Effects 0.000 description 7
- 230000003111 delayed effect Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 241001522296 Erithacus rubecula Species 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 239000011800 void material Substances 0.000 description 4
- 230000015572 biosynthetic process Effects 0.000 description 3
- 238000012790 confirmation Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 230000000717 retained effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000000903 blocking effect Effects 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
- 230000006399 behavior Effects 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 210000001072 colon Anatomy 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000001186 cumulative effect Effects 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
- 238000009432 framing Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing 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
- 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)
- Technology Law (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Development Economics (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)
Abstract
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 (20)
- 市場レースにレイテンシフロアを提供する、コンピュータにより実施される方法であって、当該方法は、コンピュータプログラム命令でプログラムされた1つ以上の物理プロセッサを有するコンピュータシステムにおいて実施され、前記コンピュータプログラム命令は、前記1つ以上の物理プロセッサにより実行されるときに、前記コンピュータシステムに当該方法を実行させ、当該方法は、
前記コンピュータシステムにより、第1の時間に金融商品の第1の市場参加者に関連付けられた第1の注文を受信することと、
前記コンピュータシステムにより、前記第1の注文の受信に応答して、前記金融商品に関連付けられた第1の市場レースをトリガすることと、
前記コンピュータシステムにより、前記第1の注文が受信される前記第1の時間と所定長の時間とに基づいて前記第1の市場レースのバッチ期間を定義することと、
前記コンピュータシステムにより、前記バッチ期間内の第2の時間に前記金融商品の第2の市場参加者に関連付けられた第2の注文を受信することと、
前記コンピュータシステムにより、前記第1の注文及び前記第2の注文に基づいて、バッチにされた注文セットを生成することと、
前記コンピュータシステムにより、前記バッチ期間の終わりが生じたと決定することと、
前記コンピュータシステムにより、前記バッチ期間の終わりが生じたとの前記決定に応答して、前記バッチにされた注文セットから注文をランダムに選択することと、
を含む方法。 - 当該方法は、
第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つ以上の注文が受信された市場参加者のリストを生成することであって、前記市場参加者のリストは、前記第1の市場参加者及び前記第2の市場参加者を少なくとも含む、ことと、
前記市場参加者のリストをシャッフルして前記市場参加者のランダムな順序付けを作成することであって、前記注文は、前記ランダムな順序付けに基づいて前記第1の注文セット又は前記第2の注文セットの中からランダムに選択される、ことと、
をさらに含む、請求項1に記載の方法。 - 前記注文が前記第1の注文セット又は前記第2の注文セットの中からランダムに選択される仕方は、前記第1の市場レースのタイプに基づいて決定される、請求項6に記載の方法。
- 前記第1の注文セットは第1の所定条件を満足し、前記第2の注文セットは第2の所定条件を満足する、請求項6に記載の方法。
- 当該方法は、
一度に処理されるべき注文の数量のうちの量を定義する分割サイズを取得することと、
前記ランダムな順序付けに基づいて前記第1の市場参加者を選択することと、
前記分割サイズに基づいて前記第1の注文セットにおける数量のうちの前記量を減分することと、
前記第1の注文セットにおける数量のうちの前記量を排出させることと、
前記ランダムな順序付けに基づいて前記第1の市場参加者の後に前記第2の市場参加者を選択することと、
前記分割サイズに基づいて前記第2の注文セットにおける数量のうちの前記量を減分することと、
前記第2の注文セットにおける前記数量のうちの前記量を排出させることと、
をさらに含む、請求項6に記載の方法。 - 市場レースにレイテンシフロアを提供するシステムであって、当該システムは、
コンピュータプログラム命令によりプログラムされた1つ以上の物理プロセッサを有するコンピュータシステムを含み、前記コンピュータプログラム命令は、前記コンピュータシステムに、
第1の時間に金融商品の第1の市場参加者に関連付けられた第1の注文を受信し、
前記第1の注文の受信に応答して、前記金融商品に関連付けられた第1の市場レースをトリガし、
前記第1の注文が受信される前記第1の時間と所定長の時間とに基づいて前記第1の市場レースのバッチ期間を定義し、
前記バッチ期間内の第2の時間に前記金融商品の第2の市場参加者に関連付けられた第2の注文を受信し、
前記第1の注文及び前記第2の注文に基づいて、バッチにされた注文セットを生成し、
前記バッチ期間の終わりが生じたと決定し、
前記バッチ期間の終わりが生じたとの前記決定に応答して、前記バッチにされた注文セットから注文をランダムに選択する
ことを実行させる、システム。 - 前記コンピュータシステムは、
第3の時間に前記金融商品の第3の市場参加者に関連付けられた第3の注文を受信し、
前記第3の注文が前記第1の市場レースとは異なる前記金融商品に関連付けられた第2の市場レースをトリガすべきであると決定し、
前記第3の注文が前記第2の市場レースをトリガすべきであるとの決定に応答して、前記金融商品に関連付けられた前記第2の市場レースをトリガする
ようにさらにプログラムされる、請求項10に記載のシステム。 - 前記第2の市場レースは、前記第1の市場レースの少なくとも一部分と前記第2の市場レースの少なくとも一部分とが同時に発生するように前記バッチ期間の間にトリガされる、請求項11に記載のシステム。
- 前記第1の市場レースは、第1のタイプの市場レースであり、前記第2の市場レースは、前記第1のタイプとは異なる第2のタイプの市場レースである、請求項12に記載のシステム。
- 前記コンピュータシステムは、
前記バッチ期間の満了まで前記第1の注文又は前記第2の注文を記憶する
ようにさらにプログラムされる、請求項10に記載のシステム。 - 前記コンピュータシステムは、
前記バッチ期間内の第3の時間に前記金融商品の前記第1の市場参加者に関連付けられた第3の注文を受信し、
前記第1の注文及び前記第3の注文に基づいて前記第1の市場参加者からの第1の注文セットを生成し、
前記第2の注文に基づいて前記第2の市場参加者からの第2の注文セットを生成し、
前記バッチ期間の間に1つ以上の注文が受信された市場参加者のリストを生成することであって、前記市場参加者のリストは、前記第1の市場参加者及び前記第2の市場参加者を少なくとも含み、
前記市場参加者のリストをシャッフルして前記市場参加者のランダムな順序付けを作成することであって、前記注文は、前記ランダムな順序付けに基づいて前記第1の注文セット又は前記第2の注文セットの中からランダムに選択される
ようにさらにプログラムされる、請求項10に記載のシステム。 - 前記注文が前記第1の注文セット又は前記第2の注文セットの中からランダムに選択される仕方は、前記第1の市場レースのタイプに基づいて決定される、請求項15に記載のシステム。
- 前記第1の注文セットは第1の所定条件を満足し、前記第2の注文セットは第2の所定条件を満足する、請求項15に記載のシステム。
- 前記コンピュータシステムは、
一度に処理されるべき注文の数量のうちの量を定義する分割サイズを取得し、
前記ランダムな順序付けに基づいて前記第1の市場参加者を選択し、
前記分割サイズに基づいて前記第1の注文セットにおける数量のうちのある量を減分し、
前記第1の注文セットの前記量を排出させ、
前記ランダムな順序付けに基づいて前記第1の市場参加者の後に前記第2の市場参加者を選択し、
前記分割サイズに基づいて前記第2の注文セットにおける数量のうちのある量を減分し、
前記第2の注文セットの前記量を排出させる
ようにさらにプログラムされる、請求項15に記載のシステム。 - 市場レースにレイテンシフロアを提供するコンピュータ命令を記憶したコンピュータ読取可能媒体であって、前記命令は、コンピュータシステムの1つ以上の物理プロセッサにより実行されるときに、前記コンピュータシステムに、
第1の時間に金融商品の第1の市場参加者に関連付けられた第1の注文を受信し、
前記第1の注文の受信に応答して、前記金融商品に関連付けられた第1の市場レースをトリガし、
前記第1の注文が受信される前記第1の時間と所定長の時間とに基づいて前記第1の市場レースのバッチ期間を定義し、
前記バッチ期間内の第2の時間に前記金融商品の第2の市場参加者に関連付けられた第2の注文を受信し、
前記第1の注文及び前記第2の注文に基づいて、バッチにされた注文セットを生成し、
前記バッチ期間の終わりが生じたと決定し、
前記バッチ期間の終わりが生じたとの前記決定に応答して、前記バッチにされた注文セットから注文をランダムに選択する
ことを実行させる、コンピュータ読取可能媒体。 - 市場レースにレイテンシフロアを提供する、コンピュータにより実施される方法であって、当該方法は、コンピュータプログラム命令でプログラムされた1つ以上の物理プロセッサを有するコンピュータシステムにおいて実施され、前記コンピュータプログラム命令は、前記1つ以上の物理プロセッサにより実行されるときに、前記コンピュータシステムに当該方法を実行させ、当該方法は、
前記コンピュータシステムにより、第1の時間に金融商品の第1の市場参加者に関連付けられた第1の注文を受信することであって、前記第1の注文は第1のレースタイプに関連付けられる、ことと、
前記コンピュータシステムにより、前記第1の注文の受信に応答して、前記金融商品に関連付けられた第1の市場レースをトリガすることと、
前記コンピュータシステムにより、前記第1の注文が受信される前記第1の時間と所定長の時間とに基づいて前記第1の市場レースのバッチ期間を定義することと、
前記コンピュータシステムにより、前記バッチ期間内の第2の時間に前記金融商品の第2の市場参加者に関連付けられた第2の注文を受信することと、
前記コンピュータシステムにより、前記第2の注文が前記第1のレースタイプに関連付けられるかを決定することと、
前記コンピュータシステムにより、前記第2の注文が前記第1のレースタイプに関連付けられるとの決定に応答して、前記第1の注文及び前記第2の注文に基づいて、バッチにされた注文セットを生成することと、
前記コンピュータシステムにより、前記バッチ期間の終わりが生じたと決定することと、
前記コンピュータシステムにより、前記バッチ期間の終わりが生じたとの前記決定に応答して、前記バッチにされた注文セットから注文をランダムに選択することであって、前記バッチにされた注文セットの中の注文を提出した所与の市場参加者が、その注文のうち少なくとも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 true JP2017522683A (ja) | 2017-08-10 |
JP6464348B2 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 (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10909621B2 (en) | 2013-11-05 | 2021-02-02 | Refinitiv Us Organization Llc | Systems and methods for quantifying temporal fairness on electronic trading venues |
US10325317B2 (en) | 2013-11-05 | 2019-06-18 | Refinitiv Us Organization Llc | Ideal latency floor |
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 | 武汉斗鱼网络科技有限公司 | 同步本地与服务器时间的方法、介质、电子设备及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003108774A (ja) * | 2001-09-28 | 2003-04-11 | Tokyo Commodity Exchange | 電子的約定締結システム及び約定締結方法 |
JP2003519876A (ja) * | 2000-01-11 | 2003-06-24 | アイティージーソフトウェア インコーポレイテッド | 常設金融市場における自動バッチオークション |
JP2007280394A (ja) * | 2006-04-04 | 2007-10-25 | Espeed Inc | 取引注文の実行を最適化するシステム |
JP2012515991A (ja) * | 2009-01-23 | 2012-07-12 | シーエフピーエイチ, エル.エル.シー. | 情報漏れを回避するマルチコンピュータ分散処理方法 |
WO2014055130A1 (en) * | 2012-10-04 | 2014-04-10 | Trading Technologies International, Inc. | Configurable order entry, matching, coordination, and market data intervals |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
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 |
-
2014
- 2014-12-30 SG SG11201700613XA patent/SG11201700613XA/en unknown
- 2014-12-30 CA CA2956079A patent/CA2956079C/en active Active
- 2014-12-30 JP JP2017525504A patent/JP6464348B2/ja 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 WO PCT/US2014/072796 patent/WO2016018453A1/en active Application Filing
- 2014-12-30 EP EP14898437.0A patent/EP3186769A4/en not_active Ceased
-
2018
- 2018-08-23 AU AU2018220100A patent/AU2018220100A1/en not_active Abandoned
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003519876A (ja) * | 2000-01-11 | 2003-06-24 | アイティージーソフトウェア インコーポレイテッド | 常設金融市場における自動バッチオークション |
JP2003108774A (ja) * | 2001-09-28 | 2003-04-11 | Tokyo Commodity Exchange | 電子的約定締結システム及び約定締結方法 |
JP2007280394A (ja) * | 2006-04-04 | 2007-10-25 | Espeed Inc | 取引注文の実行を最適化するシステム |
JP2012515991A (ja) * | 2009-01-23 | 2012-07-12 | シーエフピーエイチ, エル.エル.シー. | 情報漏れを回避するマルチコンピュータ分散処理方法 |
WO2014055130A1 (en) * | 2012-10-04 | 2014-04-10 | Trading Technologies International, Inc. | Configurable order entry, matching, coordination, and market data intervals |
Also Published As
Publication number | Publication date |
---|---|
AU2014402295A1 (en) | 2017-02-02 |
WO2016018453A1 (en) | 2016-02-04 |
CA2956079C (en) | 2019-07-09 |
CN106688008B (zh) | 2021-03-09 |
CA2956079A1 (en) | 2016-02-04 |
AU2018220100A1 (en) | 2018-09-13 |
SG11201700613XA (en) | 2017-02-27 |
EP3186769A1 (en) | 2017-07-05 |
CN106688008A (zh) | 2017-05-17 |
EP3186769A4 (en) | 2018-01-10 |
JP6464348B2 (ja) | 2019-02-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11798077B2 (en) | Ideal latency floor | |
US11636544B2 (en) | Method and apparatus for order entry in an electronic trading system | |
US20210118053A1 (en) | System and method for using trader lists in an electronic trading system to route a trading order with a reserved size | |
US20190347628A1 (en) | Cryptocurrency protocol with built-in intervention responsive to a cryptocurrency exchange rate | |
Harz et al. | Balance: Dynamic adjustment of cryptocurrency deposits | |
US20110161221A1 (en) | Transaction management device and readable storage medium | |
AU2018220100A1 (en) | Ideal latency floor | |
WO2021000475A1 (zh) | 一种基于二部图的股票协同交易疑点群体检测方法 | |
Fricke et al. | The effects of a financial transaction tax in an artificial financial market | |
EP3742362A1 (en) | Item management method, blockchain analysis method and computer system using the same | |
US8396787B2 (en) | Simplified quote sharing calculation | |
JP2020504370A (ja) | 電子取引システムにおいて完全または部分的表示ダイナミックペグ注文を処理するシステムおよび方法 | |
CN112070646A (zh) | 用于二级市场代理投注的建议引擎 | |
JP4643993B2 (ja) | 指値注文の執行確率算出システム及び執行確率算出プログラム | |
CN116167857A (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
JP2022027957A (ja) | 金融商品取引管理装置、金融商品取引管理システム、プログラム | |
US20190022535A1 (en) | System and methods for creating and managing a team-based fantasy sports contest | |
Schilizzi et al. | Does tendering conservation contracts with performance payments generate additional benefits? | |
JP7264430B2 (ja) | 金融商品取引管理装置、金融商品取引管理システム、プログラム | |
Chakravarty et al. | On institutional trading, behavioral bias, and demand for liquidity | |
Prasada et al. | Rational conflict and pre-commitment to peace | |
Afflitto et al. | Round numbers, clustering and reflective barriers in the stock market | |
Brown et al. | How much is a Dollar Worth? Tipping versus Equilibrium Coexistence on Competing Online Auction Sites! | |
Herman | Trading Dynamics in a Fragmented Market | |
Brandes | Adversarial Input in Games and Markets |
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 |