アグリゲーション用の仮想通貨取引所APIへの接続:WebSockets、レート制限、および注文ブック同期

暗号通貨のアービトラージでは、2つの取引所の価格ギャップは通常、数百ミリ秒から数秒の間で変動します。あなたの戦略は賢明に立てられ、資金は準備が整い、手数料も交渉可能な水準まで下げられます。取引所との接続が遅い、同期が取れていない、レート制限がかかるなど、注文が実行される前にギャップは解消されます。クロス取引所ボットの場合、, API接続が戦略である. その他はすべてその上に置かれている。.

このガイドは、ほとんどのアービトラージチュートリアルが省略している、配管に関する内容を網羅しています。つまり、どのインターフェースをどの目的のために使うべきか、取引所に対応したローカル注文簿を保持する方法、レート制限内で取引を続ける方法、APIキーをロックダウンする方法、24時間365日の接続を維持する方法です。このガイドは、複数の取引所でアービトラージボットを運営している、または運営する予定のトレーダー向けに書かれています。まだ戦略を選択していない場合は、まず当社の記事をご覧ください。 クロス取引の暗号資産相場アグリゲーションボットガイド そして、配線作業の時が来たらここに戻ってきてください。.

アビュランス API 接続の解剖学

ワークフローのクロス取引所設定は1つの接続ではなく、複数の接続です。各接続にはそれぞれ独自の役割があります。取引する各取引所で、通常以下のものをお持ちになります:

  • 公共市場のデータストリーム (WebSocket)は注文簿の更新をプッシュし、取引が起こった瞬間に取引を処理します。.
  • 注文入力チャネル (REST、またはWebSocket/FIXオーダーAPIで取引所が1つを提供する場合)注文の入出金を行う。.
  • 個人ユーザーデータストリーム (WebSocket)により、ユーザーが問い合わせる必要なく、フィル、注文ステータスの変化、バランスの更新に関する情報を得ることができます。.
  • 時折のリクエストされた REST コール 高速処理の必要のないものには:注文書のスナップショット、取引情報(ティックサイズ、ロットステップ)、調整用の手数料レベルと残高。.
エクスチェンジA マッチングエンジン (例:東京でホスト) エクスチェンジ B マッチングエンジン (例:東京でホスト) アビュラッジ・ボット(両方の近くにあるVPS) ローカルブック A ローカルブック B シグナル:入札額 B – 請求額 A > 手数料 + バッファ リスク + 在庫 + レート制限予算 1. 市場データ(WSプッシュ) 2. 注文(REST / WS) 3. フィルズ(プライベートWS) 取引所ごとに3つのチャネル:市場データ入力、注文出入、在庫補充
各取引所には3つのチャネルが必要です。マーケットデータストリーム、注文チャネル、プライベートフィリングストリームです。ボットは各注文簿の独自のコピーを保持します。.

初心者はここでの操作で2つのミスをよく犯します。まず一つ目は、ストリームに加入する代わりにRESTを使ってレートを調べることです。もう一つは、プライベートストリームを聴く代わりにレートを調べることで注文状況を確認することです。どちらも料金制限の予算を無駄にし、決して元に戻らない数百ミリ秒の遅延をもたらします。.

REST vs WebSocket vs FIX:どのインターフェースがどの用途に適しているか

主要な取引所の大半はREST APIとWebSocketストリームを提供しています。また、より小さな規模の大型取引所ではFIXや、より低遅延のオーダー入力API(通常はより高い料金レベルまたは機関口座向け)も提供しています。それぞれが異なる分野に長けています:

インターフェース最適弱さそれを利用して、アグリビュートで
RESTリクエスト/レスポンスタスク、スナップショット、アカウントデータリクエストごとに1往復。1回の通話につき料金制限の対象となる最大件数分が請求されます。注文書のスナップショット、取引情報、残高、そして注文の入力が、これより高速なものはありません。
パブリック WebSocket投票なしのストリーミング料金シーケンス番号、再接続、再同期の管理は自分でしなければなりません。ライブ注文簿と取引:あらゆるシグナルの入力データ
プライベートWebSocket自分の注文と残高に関するプッシュ更新リスニングキーまたはサインインキーが必要です。有効期限が切れると自動的に無効になります。フィルおよび注文状況:第2回のヘッジのトリガー
WebSocketオーダーAPIオープン接続での注文すべての取引所で適用されるわけではなく、レート制限の対象となります。レイテンシの低い注文入力:注文ごとに新しいHTTPSリクエストなし
修正機関の注文入力とコピーの削除限定の供給、オンボーディング、最小限のティアそれをサポートする会場での大規模なイベント

シンプルなルール: データはストリームで送られてくる。決定はローカルで行われ、注文は取引所が提供する最速のチャネルで発信される。. REST はセットアップと調整用であり、ホットパス上の何ものにも使用されるわけではありません。もしあなたが外国為替取引の経験から来ているなら、そのトレードオフは、 FIX API と MT4 間のブリッジこのプロトコルはレイテンシの最低値を設定します。.

実際のところ正しい現地注文簿を維持すること

これは、ほとんどの自家製ボットが静かに失敗する場所です。取引所は、アップデートごとに注文書全体を送信しません。取引所は、 変更点「ask側の価格レベル64,210.5は現在0.82 BTCです」。あなた自身がブック全体を保持します。もし単一の変更を逃すと、あなたのブックは現実から逸脱します。その場合、ボットは存在しないスプレッドを「認識」し、かつて存在しなかった価格で注文を発動します。.

ほとんどの大規模な取引所によってさまざまな形式で文書化されている標準的なパターンは、次のようになっています。

  1. まず diff ストリームを購読してください そして、受信メッセージをバッファリングします。.
  2. REST スナップショットを取得する 注文簿のデータです。シーケンスまたは更新IDが記載されています。.
  3. スナップショットよりも古いバッファード更新を削除する, それから、残りの部分を順番に適用します。.
  4. すべてのメッセージの継続性を確認する。. 各アップデートの最初のシーケンス番号は、適用した最後のバージョンから始まる必要があります。.
  5. いざというときには本を捨て、再同期してください。 ステップ1から。既知のギャップのある本は決してパッチしない。.
スナップショット + シーケンス化された差分 = あなたを信頼できる本 REST スナップショット lastUpdateId = 1000 diff 990-999 drop(古い) 1001-1004 適用する 1005-1009 適用する 1013-1016 GAP! (1010-1012) 本を捨てろ ステップ1からの再同期 既知のギャップのある書籍で取引は決してしないでください。 また、次の場合に取引を停止します:X秒間メッセージがない(サイレントストリーム)、ブックが越えられた(BIDがAskより大きい)、, あるいは、そのような情報を公開する取引所でチェックサムの不一致が発生した場合。古い本は、本が全くないよりも危険です。.
ローカルブックは、シーケンス番号が空白なしで実行されている限り有効です。空白、沈黙、またはブックが間違っている場合、停止して再同期する必要があります。.

さらに2つの健全性チェックを追加しておきましょう。まず、 恒常性タイマーもし液体ペアが2秒間も何も送っていない場合、その本は信頼できないものとして扱うべきです。なぜなら、そのストリームは閉じられていないにもかかわらず、半分死んでいる可能性があるからです。第二に、 クロスブックチェック一つの会場での最高入札額が最高入札額より少し高い場合、それはほとんどの場合、あなたの本が売れずにいることを意味します。つまり、あなたはその無料資金を見つけなかったということではありません。一部の取引所では、上位レベルのチェックサムも公開しています。もしあなたの取引所でもそうであれば、それと比較してみてください。.

レート制限:各注文の裏にある予算

各取引所は、そのAPIへのアクセスを制限します。詳細には違いがありますが、ほとんどは複数の層を組み合わせています:

  • 1分あたりの重量の要求, 通常はIP単位でカウントされます。ディープオーダーブックのスナップショットのような重いエンドポイントは、ライトエンドポイントよりも多くのポイントを占めます。.
  • 注文件数制限 秒単位および1日単位で計算されますが、通常はIP単位ではなくアカウント単位で計算されます。.
  • WebSocketの制限事項1 秒あたりのメッセージ数、IP 単位での接続数、および接続単位でのストリーム数。.

上限を越えることは単なるエラーメッセージではありません。繰り返し違反すると一時的なIP禁止措置が強化され、最初の違反は数分程度で、再犯者はさらに長い期間のIP禁止措置を受けることがあります。これによりボットがオープンポジションの途中で停止してしまう可能性があります。ですから、上限を管理する際は慎重にしてください。 予算 あなたは先を見通すのです、壁を打ち破って発見するのではなく。.

1分あたりの目安の重量予算(上限:100%) 100% 件の制限 投票ボット ~127% – IP禁止のリスク ストリーミングボット ~30% – バースト時の余裕 書籍・価格のご要望 注文 + キャンセル ステータス投票
例示的な数値。ポリーティングからストリームへと価格や注文ステータスの移動により、実際に収益を生むリクエスト(注文とキャンセル)の予算の大半が解放されます。.

予算内で過ごせる実用的なルール:

  • 制限ヘッダーを読みます。. 多くの取引所では、すべてのレスポンスヘッダーに使用済み重量が返されます。それを追跡し、上限に達する前に減速しましょう。.
  • キャンセル時の備蓄を保管してください。. レート制限を適用する最悪のタイミングは、古い注文をキャンセルしたり、満タンのレッグをヘッジしたりする必要があるときです。そのために予算の少なくとも20~30%を確保しておく必要があります。.
  • ステータスのためにプライベートストリームを使用してください。. 「ご注文は完了しましたか?」という質問をループで繰り返すことは絶対にしないでください。.
  • IPの切り替えや追加のアカウントを使って制限を超えてはいけません。. 通常、その取引所の利用規約に違反し、すべてのアカウントを対象に禁止措置が取られる可能性があります。取引所により高い上限額やより優れたレベルのサービスを提供するよう求めることは、正当な方法です。.

認証、クロック同期、APIキーのセキュリティ

プライベートエンドポイントは通常、HMACで署名されています(一部の取引所ではEd25519またはRSAキーもサポートされています)。この署名はタイムスタンプを含み、取引所はタイムスタンプが短いウィンドウ(多くの場合数秒)の外にあるリクエストを拒否します。その結果、 クロック同期 あなたの取引インフラの一部:サーバー上でNTPまたはchronyを実行し、オフセットを監視してください。時計がずれていると、市場が混み合っていてサーバーが負荷を抱えているまさにその時に、「recvWindow外のタイムスタンプ」という拒否が急増します。.

API キーはあなたの資本の鍵なので、それらをしっかりと守っておくこと。

  • 取引のみ、引き出しはなし。. アビュランス・ボットは取引キーに引き出し許可を必要としません。取引所間で資金を手動で移動するか、別の厳格に管理されたプロセスを利用してください。.
  • IP許可リスト。. すべてのキーをサーバーの静的IPに紐付けます。VPSからしか動作しない漏洩されたキーの方がはるかに危険です。.
  • 1つのキーはボットごとに、1つの取引所ごとに、理想的にはサブアカウントごとに使用してください。. もし何か問題が生じた場合、すべてを停止することなく、1つのキーを解除することができます。.
  • コードやログから得られる秘密。. 環境変数やシークレットマネージャーを使用し、エラーログが完全なキーまたは署名を含めないようにしてください。.
  • スケジュールに従って回転させる そして、スタッフの入れ替えや疑わしい漏洩があった直後にも。.

レイテンシー:実際にはミリ秒がどのくらいかかります

2 つの取引所では、総反応時間はおおよそ次のようになります。取引所Aからのマーケットデータ配信 + 処理 + 取引所のBへの注文移動 + マッチング。自宅のインターネット接続では、大陸を横断する往復の処理は簡単に 150~250 ミ秒になります。同じクラウドリージョンのVPSでは、マッチングエンジンと同じネットワーク部分が数ミリ秒にまで低下します。.

そのため、サーバーの場所はコードのコツよりも重要です。多くの大型仮想通貨取引所はマッチングエンジンを主要なクラウド地域で運用しており(東京がよく使われる例)、一部はホスティング地域を公開しています。また、候補のデータセンターからのpingテストで他の場所を見つけることも可能です。候補となる場所は近くにあるものを選びましょう。 両方 メインペアの会場です。もし彼らが異なる大陸にいる場合、どちらの方法でも1つの足でギャップを支払う必要があります。そして、あなたの戦略はそのことを考慮に入れておくべきです。 低遅延のVPSセットアップガイド レイテンシーの測定とデータセンターの選択を詳細にカバーしています。この手法は仮想通貨取引所でも同様に適用できます。.

お客様のプロセスでは、主な利点は、大量の割り当てなしにメッセージを解析し、変更された価格レベルのみを更新し、注文署名キーと接続を常に最新の状態に保つことによるものです。TCP_NODELAYのようなトリックは活用する価値があります。正しい書籍と短いネットワークパスははるかに価値があります。.

24時間年中無休の接続性

仮想通貨は決して閉鎖されることはありませんが、接続はそうなるのです。稀な例外ではなく、通常の状況に備えましょう:

  • 予定された切断。. 一部の取引所では、WebSocket接続は一定期間(通常は24時間)経過すると自動的に終了します。古い接続の有効期限が切れる前に新しい接続を開き、スムーズに切り替えてください。.
  • 心拍数。. ping フレームの応答を送信し、交換側が期待するタイミングで自身の ping を送信します。プライベートストリームのリスニングキーでは、間隔を空けると keep-alive コールが必要になることがよくあります。.
  • メンテナンスウィンドウおよびAPIのアップグレード。. 各取引所のAPIに関する発表を購読してください。エンドポイントは廃止され、ウェイトが変更され、新しいバージョンが古いものに置き換えられます。.
  • 一部の停電が発生しました。. 取引所では価格のストリーミングが継続される一方で、注文の入力が失敗する場合があります。注文がタイムアウトした場合、注文が拒否されたと考えるべきではありません。再試行前にプライベートストリームまたはステータスクエリーを確認してください。そうしないと、2つのポジションが同時に成立する可能性があります。.

最も安全な設計は キルスイッチ状態マシンの例. 紛失したストリーム、古いブック、または同期が取れていないクロックは、ボットを「新規ポジションなし」の状態に移行させます。オープン中のものはフラット化またはヘッジされ、その後きちんと再構築されます。.

複数の取引を1つのビューに統合

各取引所は同じ市場を異なる表現で表現します。一つはBTCUSDT、もう一つはBTC-USDT、そして第三はXBT/USDTです。ティックサイズ、最小元本価値、ロットステップ、手数料のスケジュールも異なります。ボットが複数の取引所での価格比較を行うには、通常の正規化層が必要です:

  • 各取引所のシンボルを1つの内部の機器IDにマップします。;
  • 各会場のティックサイズと数量をロットステップに合わせたラウンド価格設定により、保守的な姿勢を維持します。;
  • 最小注文サイズをチェックするため、2回目のアービトラージは小さすぎるという理由で拒否されることはありません。;
  • 適用されます あなたの 会場ごとに実際のメーカー/取り引き手数料。重要なのは手数料後のスプレッドです。詳細は弊社の詳細分析をご覧ください。 暗号資産の主なアグリゲーションのタイプ.

起動時に各取引所の情報エンドポイントからこのリファレンスデータを読み込み、数時間ごとに更新してください。一覧表示やティックサイズ、制限は、思っているほど頻繁に変更されることはありません。.

ステップバイステップ:新しい取引所をあなたのアビュランス設定に接続する

  1. 専用サブアカウントとAPIキーを作成する 取引許可のみあり、出金は無効で、サーバーのIPアドレスは許可リストに載っています。.
  2. 遅延を測定する 候補者のVPSから取引所のRESTおよびWebSocketエンドポイントまで接続し、サーバーをマッチングエンジンに近い場所に配置します。.
  3. 時計を同期する (NTP/chrony)を有効にして、オフセットが取引所のシグネチャウィンドウ内で十分な範囲にとどまることを確認します。.
  4. ロード交換情報シンボル、チェックサイズ、ロットステップ、最小仮定額、および手数料ティア。それらを正規化レイヤーにマップします。.
  5. ローカルオーダーブックの構築 スナップショット + ディファルメソッド、ギャップ検出、スタレネスタイマー、クロスブックチェックを備えています。.
  6. プライベートユーザーデータストリームを接続する フィリングとバランスの処理、キープアライブ機能と自動再接続機能付き。.
  7. 料金制限予算を設定する, キャンセルおよびヘッジ用の予約済みシェアを備え、重量ヘッダーを追跡します。.
  8. 最小サイズでのテスト, ローカルブックと取引所のUIを比較し、その後のみポジションサイズを上げる。.

もし自分でこれらを構築して維持する必要がない場合は、既製のプラットフォームが交換セッション、書籍、注文のルーティングをすべて処理します。 仮想通貨取引所セッションの追加に関するガイド HFT アビュラージ プラットフォームでのその様子を示しています。このプラットフォームでは、API キーを入力するだけで残りはプラットフォームが処理します。.

よくある質問

暗号資産取引にWebSocketsが必要ですか?それともRESTで十分ですか?

速度に依存するあらゆるアグリゲートには、マーケットデータにWebSocketが必要です。REST経由での価格ポーリングは遅く、レート制限の予算を使い果たし、投票間隔の変化を逃します。RESTはスナップショットやアカウントデータ、一部の取引所で注文入力にはまだ役立ちます。.

アビージョブボットにはどのようなAPI権限が必要ですか?

取引のみに限定して読み込み。ボットが使用するすべてのキーで引き出し機能を無効にし、キーをサーバーのIPアドレスに紐付け、各ボットと取引所ごとに別のキー(理想的には別のサブアカウント)を使用すること。.

なぜ私のボットは本物のアビュランスの機会を見落としているのですか?

通常は、ローカルの注文ブックが同期していないことが原因です。更新が間に合わなかった、ストリームが停止した、またはスナップショットが間違った順序で適用されたことが原因です。シーケンスギャップ検出、スタレネスタイマー、クロスブックチェックを追加し、いずれかがトリップした際に再同期します。また、実際の料金が変化しても、スプレッドがまだ維持されていることを確認してください。.

取引所の API のレート制限を超えた場合、どうなりますか?

まず、通常 HTTP 429 や同様のエラーコードで拒否リクエストを受け取ります。上限を超えてしまうと、多くの取引所では一時的なIP禁止措置が取られます。これはヘッジの余地がある場合には危険なことなので、キャンセルやヘッジの準備を十分にとっておきましょう。.

暗号通貨取引アグリゲーションを行うには、サーバーはどこに設置すべきでしょうか?

取引する取引所のマッチングエンジンに近い場所(通常は同じクラウド領域)に接続します。候補の場所からのpingを測定するのではなく、その場所に近い場所にサーバーを配置します。2つの場所の距離が離れている場合は、戦略上最も速度が重要となる場所の近くにサーバーを配置します。.

複数のAPIキーやIPを使い、より多くのリクエストを取得することは許可されていますか?

取引所は故意にレート制限を設定しており、それらを回避するために追加のIPやアカウントを使用することは通常、利用規約に違反し、アカウントの停止につながります。より高いスループットが必要な場合は、取引所により高い制限、VIPレベル、または機関向けAPIについて問い合わせてください。.

著者について

Comments
0 Comments
Comments will be displayed after approval by the administrator