通信モデル¶
概要 ¶
FIX APIはセッションベースの通信を使用します。 セッションは、2つの当事者間の通信として定義されます:イニシエーター(クライアント)は通信を開始する当事者、アクセプター(サーバー)はイニシエーターから接続要求を受け取る当事者です。
サーバーはログオンメッセージを使用してクライアントのリクエストを検証します。
FIXセッションプロトコル ¶
各セッションは、クライアントとcTraderサーバー間の双方向メッセージを維持します。 セッションには複数の物理的接続を含むことができ、シーケンス番号を使用して維持されます。
単一セッション内の新しいメッセージごとに、1(1)から始まる一意のシーケンス番号が割り当てられます。 両当事者は、秩序ある通信を維持するためにシーケンス番号に依存します。 欠落したメッセージは、両当事者間の双方向の合意により再送信されます。
典型的なセッションフロー:
- クライアントはログオンメッセージでセッションを開始します。
- クライアントはサーバーとアプリケーションメッセージを交換します。
- セッションはログアウトメッセージで終了します。
cTrader FIXプロトコルメッセージカテゴリ ¶
FIXプロトコルで定義されているように、cTrader FIXサーバーは2つの異なるデータレベルを使用します:システムとアプリケーション。
これは、必要なワークフローをサポートするために必要な最小限のメッセージセットであり、ビジネスニーズとFIX標準の両方が進化するにつれて時間とともに変更される可能性があることに注意してください。
システム(管理)メッセージ ¶
- ハートビート(クライアント ↔ cTrader) – 2つの当事者間の通信リンクを確認するために使用されます。
- テストリクエスト(クライアント ↔ cTrader) – 通信リンクの健全性をテストするために使用されます。
- ログオン(クライアント → cTrader) – クライアント認証メッセージ。
- ログアウト(クライアント → cTrader) – セッションの正常終了。
- 再送リクエスト(クライアント ↔ cTrader) – 特定のアプリケーションメッセージの再送信を要求します。
- リジェクト(クライアント ↔ cTrader) – セッションレベルの検証失敗。
- シーケンスリセット(クライアント ↔ cTrader) – 通信問題が発生した場合、欠落したメッセージが回復されるか、欠落したメッセージを無視するためにシーケンスがリセットされます。
アプリケーションメッセージ ¶
- マーケットデータリクエスト(クライアント → cTrader) – マーケットデータの一般的なリクエスト。
- マーケットデータインクリメンタルリフレッシュ(クライアント ← cTrader) – マーケットデータリクエストメッセージへの応答。
- 新規注文シングル(クライアント → cTrader) – 注文を電子的にブローカーに送信して執行するために使用されます。
- 執行レポート(クライアント ← cTrader) – 確認、約定、および未承諾の変更などの注文ステータス情報をFIXクライアントに送信するために使用されます。
- ビジネスメッセージリジェクト(クライアント ← cTrader) – セッション以外の理由でFIXクライアントのリクエストを拒否するために使用されます。
FIXメッセージ構造 ¶
このセクションでは、FIX APIメッセージがどのように構成されているかを説明し、FIXメッセージフォーマットを説明し、タグと値のペアの概念を理解するのに役立ちます。
各メッセージには3つの部分が含まれている必要があります:
- ヘッダー – 各管理メッセージまたはアプリケーションメッセージの前に標準ヘッダーが付きます。 ヘッダーは、メッセージタイプ、FIXバージョン、メッセージ長、宛先、シーケンス番号、発信元、および時間を識別します。
- 本文 – メッセージの本文の内容は、ヘッダーで定義されたメッセージタイプによって指定されます。
- フッター – 各メッセージ(管理またはアプリケーション)は標準フッターで終了します。 フッターはメッセージを分離するために使用され、
CheckSum <10>値の3桁の文字表現が含まれています。
FIXメッセージフォーマット ¶
FIXメッセージはフィールドの集合です。 各フィールドは{tag}={value}の形式のタグ値ペアです。 例えば、54=2は注文タイプが売りであることを意味します。
タグ ¶
- FIXは事前定義されたタグを使用します。
- 各タグは特定のフィールドを表します。
- 各タグには事前定義された番号が割り当てられています。
- cTrader FIX仕様は、フィールドと対応するタグ番号のリストを提供しています。
値 ¶
- 値は、割り当てられたタグの値を表します。
- 値は、整数、浮動小数点、文字、時間、日付、データ、または文字列のいずれかのデータタイプのみです。
cTrader FIX API内のすべてのメッセージは8=FIX.x.yで始まります。ここでx.yはFIXプロトコルのバージョンです。 すべてのメッセージの最後には10=xyzというフィールドがあるはずです。ここでxyzはメッセージ内のすべてのバイナリ値の合計(チェックサム)を表します。
チェックサムは、受信者がメッセージの一部が欠落しているかどうかを知ることができるため、特にパケット損失などの送信問題を識別するのに役立ちます。
FIXメッセージでcTrader/cServerにSymbol(55)タグを使用する場合は、FIX通貨ペアIDを指定する必要があります。 その値はブローカーによって異なる場合があります。 FIX通貨ペアIDフィールドは、そのブローカーのcTraderアプリケーションの通貨ペア情報ウィンドウで確認できます。
メッセージ例 ¶
8=FIX.4.4|9=126|35=A|34=1|49=theBroker.12345|57=TRADE|50=any_string|52=20170117-08:03:04|56=CSERVER|98=0|108=30|553=12345|554=passw0rd!|10=131|
| タグ # | タグ名 | 値 | 説明 |
|---|---|---|---|
| 8 | BeginString | 4.4 | FIXバージョン |
| 9 | BodyLength | 102 | メッセージ本文の長さは102文字 |
| 35 | MsgType | A | メッセージタイプはログオン |
| 34 | MsgSeqNum | 1 | メッセージシーケンス番号は1 |
| 49 | SenderCompI | D | broker.1047 取引当事者のID。"broker"はcTraderが提供する一意のBrokerUIDで、"1047"は取引口座の数値識別子。 |
| 57 | TargetSubID | TRADE | 追加のセッション修飾子。可能な値は:"QUOTE"、"TRADE"。 |
| 50 | SenderSubID | QUOTE | 設定された値は特定のメッセージ送信者を識別するために使用される |
| 52 | SendingTime | 20131129- 15:40:10.276 | メッセージ送信時間は2013年11月29日(YYYYMMDD)の15:40:10と276ミリ秒 |
| 56 | TargetCompID | CSERVER | メッセージのターゲットはCSERVER。これはcTrader FIX APIで唯一有効な値。 |
| 98 | EncryptMethod | 0 | 現在、唯一の有効な値は"0"(ゼロ)= NONE_OTHER(暗号化は使用されない) |
| 108 | HeartBtInt | 30 | 秒単位のハートビート間隔。値は"config.properties"ファイル(クライアント側)でSERVER.POLLING.INTERVALとして設定される。30秒がデフォルトの間隔値。HeartBtIntが0に設定されている場合、ハートビートメッセージは不要。 |
| 553 | Username | 1047 | 数値ユーザーID |
| 554 | Password | MyPassword1 | ユーザーパスワード |
| 10 | CheckSum | 000 | チェックサムの計算方法は以下の通り:チェックサムフィールド自体を除くメッセージの各バイトを合計し、それを256で割った余りに変換し、"0"を先頭に付けて3桁の数字にする。 |