ライブのレコード(Databento 風)¶
brisk live は、そのフィードをこのコンピューター上の他のプログラムにも、クラウド API が返すのと同じレコードとして配信します。briskapi.Live は Databento のライブクライアントと同じ形で、キーもサインインも要りません。証券会社にサインインするのはフィードだけです。
import briskapi
live = briskapi.Live() # このコンピューターで動いているフィードを見つける
live.subscribe(dataset="XTKS.BRISK", schema="imbalance", symbols=["7203", "6758"])
live.subscribe(dataset="XTKS.BRISK", schema="trades", symbols=["7203"], start=0) # その日のここまで、続けてライブ
live.subscribe(dataset="XTKS.BRISK", schema="ohlcv-1m", symbols=["7203"]) # 1分ごとのバーを、その1分が終わりしだい
for record in live: # または live.add_callback(fn); live.start(); live.block_for_close()
print(record.schema, record.symbol, record.ts_event)
- スキーマ:
trades、mbp-10、imbalance、definition、brisk-quotes、OHLCV バーのohlcv-1s〜ohlcv-1d。同じセッションならHistoricalが返すのと同じ列・同じ値です。Liveは受け取った約定から、クラウドと同じ規則でバーを作ります。 - バーは、その区間がフィードの時計で終わりしだい届きます。終わりより後の時刻のバッチが届いたとき、またはこのコンピューターの時計から、BRiSK からこのセッションまでに測った遅延(直近10秒の最大値)を引いた時刻が終わりを過ぎたときです。自分のバーが終わったあとに届いた約定は、まだ終わっていない次のバーに入ります(クラウドでは約定自身の時刻のバーに入ります)。どの約定も数えられ、バーは順に届きます。バーは、セッションがその取引時間内の全期間を見ている場合にだけ渡します。
startを指定すればフィードの開始から、指定しなければ購読より後に始まるバーです。 - セッションの始まり: その日の銘柄定義、続いて届いた更新を順に受け取ります。
start(時刻、日付、UTC ナノ秒、またはフィードが持つすべてを表す 0)を指定すると、まずフィードのその取引日をその時点から再生します。フィードが持っているのは、起動してからの分と、スナップショットが復元したその日の約定です。snapshot=Trueを指定すると、mbp-10、imbalance、brisk-quotesを各銘柄の現在の気配から始めます(flagsは 32)。 - レコードは辞書で、属性としても読めます(
record.price)。スキーマはrecord.schemaです。フィードがバッチを受け取った順に届き、バッチ内はHistoricalと同じ順です。add_callback(fn, exception_callback)とadd_stream(path)(JSON Lines。Databento では DBN)でも受け取れます。block_for_close(timeout)はセッションの終わりを待ち、stop()は終わらせます。購読はstart()の前でも後でもかまいません。後からの購読にもそれぞれの再生やスナップショットがあり、その銘柄はその時点から届きます。1つのセッションの購読は同じデータセットを共有します。symbology_mapはinstrument_idから銘柄コードへの対応です。 - 高速レーン: 証券会社のフィードは全銘柄を記録するため、遅めのコンピューターでは寄付でストリームから数秒遅れることがあります。
startを付けずに銘柄を指定したセッションは高速レーンで受け取ります。フレームが届くたびに読み、記録より先に、同じレコードを届けます。高速レーンが扱えるのはそのワーカー1つにつき約 500 銘柄です(フィードのワーカーの4分の1)。ALL_SYMBOLS、startによる再生、扱える数を超える銘柄は、記録と同じ速さで届きます。後の購読で収まらなくなったセッションは、レコードを欠かすことも重複させることもなく、そちらに移ります。 - このコンピューターだけ: フィードは 127.0.0.1 でのみ待ち受け、所有者だけが読めるファイル(
~/.config/brisk/gateway/XTKS.BRISK.json)にポート番号とともに保存したキーを持つセッションだけを受け入れます。Live()はこのファイルを読みます。配信する内容がこのコンピューターの外に出ることはありません。1 GB を超えて遅れたセッションは、フィードやその記録を遅らせる代わりに切断されます。 - 配信:
brisk liveは--no-gatewayを指定しない限り配信します。1つのデータセットを配信できるフィードは同時に1つです。Python ではbriskapi.connect()にgateway=Trueを渡します。