FIX 接続の流量制限と再接続── 切断のあとに注文を二重に出さない設計
流量の上限、切断時の自動取消、再接続での番号の合わせ方、重複の見分け方は、FIX の規格ではなく対向ごとの仕様で決まります。公開仕様を例に、設計で先に決めることを整理します。

Trading Technologies(TT)のプラットフォームに接続する処理は、REST API と FIX の 2 本立てになることが多くあります。照会や設定は REST、発注と約定の受け取りは FIX、という分け方です。この 2 本は、上限の決まり方も、切れたときの戻り方もまったく違います。片方の感覚でもう片方を組むと、REST は日中に上限で止まり、FIX は再接続のたびに同じ約定を二重に計上します。
本稿では、TT が公開している資料をもとに、REST API の流量の上限とトークンの扱い、FIX のセッションのリセットと再接続時の回復、切断時の自動取消の扱いを整理します。REST API のサービス構成は前稿で、FIX の再接続の一般論は別稿で扱っています。
TT REST API の流量の上限は、アプリケーションキーごとに契約する利用プランで決まります。2025 年 1 月に発効した TT の料金表の脚注には、次の上限が示されています。
設計で効くのは、上限が毎秒と 1 日の 2 本立てで、単位がアプリケーションキーだという点です。毎秒の上限だけを見て並列度を決めると、1 日の上限に先に当たります。Low のプランで毎秒 5 件を休まず送り続ければ、1 時間足らずで 1 日分の 15,000 件を使い切ります。
対策は 3 つです。
なお、料金表には上限を超えたときの応答の形は書かれていません。超過時の応答は検証環境で確かめ、どの応答でも送信を一時的に止めて待つ、という扱いにしておきます。
REST のリクエストには、ヘッダにアプリケーションキー(x-api-key)を付け、多くの口では Authorization に Bearer と取得したトークンを付けます。トークンは、アプリケーションキーとシークレットを /token に送って取得し、応答の seconds_until_expiry が有効期間です。TT の説明は、期限が切れる前に新しいトークンを取得するよう求めています。期限切れの応答を受けてから取り直す作りは、その間の照会がすべて失敗に数えられます。
リスク・モニター・台帳(Risk、Monitor、Ledger)の口には、クエリパラメータの requestId が必須で、無いリクエストは拒否されます。形式は アプリ名-会社名-GUID で、GUID はリクエストごとに一意にします。空白や特殊文字は失敗の原因になるとされ、パラメータ名の大文字小文字も requestId のとおりに合わせます。
アプリケーションキーは、検証環境(UAT)と本番で別々に発行する必要があります。キーは、作成したログインの権限とデータへのアクセス範囲を引き継ぎます。強い権限を持つ管理者のログインでキーを作ると、そのキーも同じ範囲に届きます。用途に合った権限のログインで作成します。
TT の FIX の発注セッション(Order Routing)は、既定では接続を切っても状態が続く作りで、毎週土曜日 22:00(UTC)にリセットされます。日本時間では日曜日の朝 7 時です。管理画面(Setup)でセッションを設定するときに、毎日のリセット時刻を指定することもできます。リセットの時刻に接続したままだと、TT の FIX エンジンから Logout が送られてきます。
この Logout は障害ではなく予定された動作です。週末にも動かす処理や、暗号資産のように土日も取引がある市場へ発注する処理では、リセットの時刻に一度切られる前提で、再接続を自動にしておきます。逆に、リセットの時刻に監視が「切断」を障害として通知すると、毎週同じ時刻に誤報が出ます。予定された切断は、監視の側で時刻を指定して除外しておきます。
シーケンス番号は、このリセットで 1 に戻ります。任意の時点で戻したいときは、Logon で MsgSeqNum(34)=1 と ResetSeqNumFlag(141)=Y を送ります。
注文 ID の ClOrdID(11) は、前回のリセット以降に出した注文と、それより前のセッションから生きている GTC・期日指定の注文の範囲で、一意であることが求められます。リセットをまたいでも、生きている注文の ID とは重ねられないということです。日付を ID に含めて採番を日ごとに戻す作りは、長く生きる注文があると衝突します。

TT の FIX で特徴的なのは、切断からの回復を TT 側が担う点です。再接続すると、TT の FIX エンジンはクラウド上の注文台帳を照会し、届けていなかった約定の通知を、切断前から続く番号で送ってきます。回復が終わったことは News(35=B)メッセージで知らされます。Logon で番号を 1 に戻した場合も、この回復は行われ、取りこぼした約定は続きの番号で届きます。
標準の再送要求(Resend Request)にも応じます。番号を戻したあとで再送要求が出せない場合は、REST API で約定を取得する方法が案内されています。
この動作を前提にすると、再接続後の手順は次のようになります。
35=B)を受け取るまで新規の発注判断を止める。回復中に届く約定は切断中に起きたもので、これを反映する前の建玉で判断すると誤るFIX の接続が切れたとき、取引所に出ている注文が取り消されるかどうかは、TT ではなく取引所ごとの扱いで決まります。TT は取引所ごとの対応を一覧で公開しています。
このほか、自動取消に対応していない取引所もあります。同じ TT の接続でも、取引所によって切断後に板に残る注文が違うということです。複数の取引所に発注する処理では、取引所ごとの扱いを台帳にまとめ、再接続後の照合でどの注文が残っているはずかを判断する材料にします。
TT REST API の上限は、アプリケーションキーごとの利用プランで毎秒と 1 日の 2 本立てで決まり、Low なら毎秒 5 件・1 日 15,000 件です。送信の制御はキーごとに 1 か所に置き、1 日の消費を数え、用途ごとにキーを分けます。トークンは期限の前に取り直し、requestId を毎回付けます。FIX のセッションは毎週土曜 22:00(UTC)にリセットされ、再接続すると未送信の約定が続きの番号で届き、News(35=B)で回復の完了が分かります。回復が終わるまで新規の判断を止め、約定の取り込みは重複に強くします。切断時の自動取消は取引所ごとに違うので、台帳で管理します。
金融テクノロジー総合研究所では、発注・執行基盤の設計と実装を受託しています。TT の REST と FIX を組み合わせた構成の設計や、既存の接続の切断時の挙動の点検からご相談いただけます。Trading Technologies API 対応の詳細もあわせてご覧ください。ご相談はお問い合わせよりご連絡ください。
seconds_until_expiry、requestId の形式、UAT と本番のキー)ClOrdID の一意性の範囲、回復の流れ)FTL の技術スタックと受託開発の進め方は FTLの技術とは? にまとめています。