フォレックスにおける注文APIの仕組み
フォレックスにおける注文APIとはどういう意味ですか
注文API(Order API)とは、取引注文を送信し管理するために使うソフトウェアのインターフェースです。フォレックスでは通常、自動化されたシステムを取引会場またはブローカープラットフォームに接続し、システムが注文を作成し、そのステータスを監視し、約定(fills)やエラーレポートを受け取れるようにします。
これは、コミュニケーションが「2方向」あると考えると分かりやすいです。
- あなたが注文リクエストを送る(何を取引したいか、どう取引したいか)。
- プラットフォームが応答を送る(受理された/拒否された/部分約定された/約定した、など何が起きたか)。
この説明は一般的な仕組みに焦点を当てます。具体的なフィールド名、エンドポイント、正確なステータスコードは提供元によって異なります。
基本モデル:意図(intent)、リクエスト、執行ライフサイクル
実務的な注文APIのワークフローは、通常、次のような一連の流れとしてモデル化されます。
-
注文を作成する クライアントは、会場(venue)が必要とする詳細を含む注文オブジェクトを作成します。一般的な要素には次が含まれます。
- インストゥルメント(通貨ペアまたはフォレックスのシンボル)
- サイド(買いまたは売り)
- 数量またはユニット(ポジションサイズ)
- 注文タイプ(たとえば、市場型に近いもの vs 指値型に近いもの)
- 任意の価格フィールド(注文タイプが必要とする場合)
- 時間制約(注文がアクティブであり続ける期間など)
-
注文リクエストを送信する クライアントはAPIを通じて注文リクエストを送信します。リクエストは、多くの場合、受理されて次の処理に進む前に、フォーマットと完全性についてバリデーションされます。
-
即時のレスポンス(アクノレッジメント)を受け取る APIは、次のような広い結果のいずれかを示すアクノレッジメントを返すことがよくあります。
- 処理のためにAccepted(受理)
- バリデーション、権限、取引制約によりRejected(拒否)
- 内部パイプラインでQueued(キューに入った)またはpending(保留)
-
ステータスの変化を追跡する 受理後は、時間の経過とともにステータス更新が発生し得ます。ステータス遷移の例には「open(未約定)」「partially filled(部分約定)」「filled(約定)」「canceled(取消)」などがあります。
-
約定(fills)を受け取り、会計処理を確定する システムは、実際に取引された内容を表す執行詳細(execution details)を受け取ります(fills)。取引結果は、元のリクエストではなく、これらのfillsから導き出されます。
重要な考え方:APIは何が執行されたかを記録します。一方で、元の注文は**(たとえば、プラットフォームが意図した条件で執行できるという)前提を伴う指示**にすぎません。
入力と出力:通常送るもの、通常受け取るもの
よくある入力
注文APIのクライアントは、一般に次のような構造化データを送ります。
- 注文識別子:クライアントが生成する参照および/または提供元の注文ID
- インストゥルメント詳細:シンボルまたはペアコード
- 取引方向:buy/sell
- サイズ:数量/ユニット、そして場合によっては注文数量タイプ
- 注文タイプと制約:適用される場合の価格上限(price limits)や、time-in-forceルール
- リスクまたはコンプライアンス制約(提供元固有):たとえば最小サイズや許可されるインストゥルメント
以下の例に関する前提:ここでは提供元固有のスキーマが提示されていないため、これらは多くのシステムに含まれ得る概念的なフィールドとして扱います。
よくある出力
APIは通常次を返します。
- 注文の状態/確認:accepted、rejected、canceled、filled など
- fillsに関するexecution reports:約定数量、執行価格(または平均)、およびタイムスタンプ
- 失敗時のエラー情報:理由コードとメッセージ
- 口座または証拠金(margin)関連の利用可能性は、注文が受理されるか拒否されるかを通じて暗黙的に示されることが多いですが、正確な挙動は会場(venue)によって異なります
具体的な例のシーケンス(前提を明示)
ここでは、フォレックスのインストゥルメントを、即時に執行される(市場型に近い)注文タイプ、または指定したリミットで執行される(指値型に近い)注文タイプで取引することを目標とします。概念的には、次のような流れになります。
-
クライアントが次の内容で注文リクエストを作成します。
- インストゥルメント:選択した通貨ペアシンボル
- サイド:buy
- サイズ:選択した数量
- 注文タイプ:limit-like(リミット価格を含む)
- 時間ルール:指定した期間、アクティブであり続ける
-
クライアントがリクエストを送信し、次を受け取ります。
- 注文が accepted(受理) されたというアクノレッジメント
-
時間の経過とともに、プラットフォームが更新します。
- ステータスが open(未約定) に遷移する。
- 条件が許せば、プラットフォームが execution reports を発行する。
-
クライアントはexecution reportsを集計して計算します。
- 合計約定サイズ
- 約定から得られる実効的な取引価格(多くの場合、平均または1回ごとの約定価格を含む)
-
時間ルールが期限切れになるまでに完全に執行されなければ、プラットフォームは canceled/expired(取消/期限切れ) のような最終ステータスを発行し、クライアントは「意図の一部しか約定されなかった」ことを記録します。
重要な制約:ライブの価格データや、特定の提供元の仕組みがない場合、執行価格が要求したリミット価格と一致すると仮定したり、要求した数量のすべてが約定されると仮定したりすることはできません。
期待すべき制限と失敗パターン
注文APIは不確実性をなくしません。正しいコードであっても、いくつかのカテゴリの制限により、執行が意図と異なることがあります。
1) バリデーション段階でのリジェクト
注文は次の理由で拒否されることがあります。
- 必須または無効なフィールド(フォーマット)
- 権限(アクセス権)
- インストゥルメントシンボルの不一致
- 提供元の制約違反(最小サイズ、未対応の注文タイプ)
結果:あなたのシステムは、後続の約定ではなく、即時のリジェクトを受け取る可能性があります。
2) 部分約定と「意図 vs 執行」の不一致
受理されても、注文が部分的にしか約定しないことがあります。理由には次が含まれます。
- 制約下でのマッチング可能性
- 流動性の変化
- 執行の上限(execution limits)
結果:会計処理は、元の要求サイズではなく、fillsに依存すべきです。
3) スリッページと価格の乖離
注文タイプが、意図した価格の近辺で(ただし完全に一致ではなく)執行できる場合、実現した執行価格はリクエストと異なることがあります。これは、クライアントが「想定(expected)」パラメータを提示している場合でも起こり得ます。
結果:要求した条件を、保証された執行結果と同一視しないでください。
4) ネットワーク、レイテンシ、照合(リコンサイル)問題
APIには信頼できる通信が必要です。失敗パターンには次が含まれます。
- タイムアウト
- idempotency が適切に扱われていない場合に重複を引き起こすリトライ
- 遅延した確認(confirmations)
- イベントの順序が入れ替わる(out-of-order)
結果:堅牢なクライアントは注文の状態を追跡し、対応している場合は idempotency keys やクライアント注文参照を使用します。
5) 管轄(jurisdiction)と会場固有のルール
取引の適格性、許可されるインストゥルメント、注文の制約は、会場や規制環境によって異なり得ます。これにより、APIが何を許可し、制約下でどのように振る舞うかが影響を受けます。
結果:挙動は、特定の提供元のドキュメントと口座設定に照らして検証する必要があります。
注文APIの挙動を独立して検証する方法
独立した検証とは、市場の直感から結果を仮定するのではなく、提供元の応答と自分の記録から事実を確認することです。
実務的な検証手順(概念的には)次を含みます。
- 注文を投入した後に受け取る正確なステータス遷移を確認する
- execution reportsからexecutionされた数量を合計して、**fillsと意図を照合(reconcile)**する
- レイテンシの影響を理解するために、リクエストのタイムスタンプと提供元のアクノレッジメントを比較する
- 注文が拒否された理由、または完全に約定されなかった理由を特定するために、エラーレスポンスをログに記録し確認する
提供元を比較したり、複数のシステムを統合したりする場合は、次が一致していることを検証してください。
- 注文の識別(identity)と追跡フィールド
- execution report のフォーマット
- ステータスの意味(たとえば、「filled」状態がいつ発行されるか)