イントロダクション
範囲
この仕様書は、cTrader FIXエンジンアプリケーションプログラミングインターフェース(API)の実装ガイドとしてソフトウェア開発者を対象としています。
FIXバージョン
cTraderはFIXバージョン4.4をサポートしています。このバージョンの詳細については、これらの仕様書を参照してください。
接続性
接続タイプ
cTraderのFIXエンジンへの接続は、インターネット、VPNトンネル、または英国のデータセンター施設へのクロス接続を介して利用できます。詳細についてはお問い合わせください。
シーケンス番号リセット
FIXセッションを確立する際、FIXセッションのすべての側面でシーケンス番号をリセットする必要があります。ログオンメッセージを参照してください。
メッセージ
FIXプロトコルで定義されているように、cTrader FIXサーバーはシステムレベルとアプリケーションレベルの2つの異なるデータレベルを使用しています。これは必要なワークフローをサポートするために必要な最低限のメッセージセットであることに注意してください。ビジネスニーズやFIX標準の進化に伴い、時間とともに変更される可能性があります。
cTrader FIXエンジン
システムメッセージ
- ハートビート (クライアント ↔ cTrader)
- テストリクエスト (クライアント ↔ cTrader)
- ログオン (クライアント → cTrader)
- ログアウト (クライアント → cTrader)
- 再送信リクエスト (クライアント ↔ cTrader)
- リジェクト (クライアント ↔ cTrader)
- シーケンスリセット (クライアント ↔ cTrader)
アプリケーションメッセージ
- マーケットデータリクエスト (クライアント → cTrader)
- マーケットデータスナップショット/フルリフレッシュ (クライアント ← cTrader)
- マーケットデータインクリメンタルリフレッシュ (クライアント ← cTrader)
- 新規注文シングル (クライアント → cTrader)
- 注文ステータスリクエスト (クライアント → cTrader)
- 注文マスステータスリクエスト (クライアント → cTrader)
- 実行レポート (クライアント ← cTrader)
- ビジネスメッセージリジェクト (クライアント ← cTrader)
- ポジションリクエスト (クライアント → cTrader)
- ポジションレポート (クライアント ← cTrader)
- 注文キャンセルリクエスト (クライアント → cTrader)
- 注文キャンセルリジェクト (クライアント ← cTrader)
- 注文キャンセル/リプレースリクエスト (クライアント → cTrader)
- セキュリティリストリクエスト (クライアント → cTrader)
- セキュリティリスト (クライアント ← cTrader)
標準ヘッダー
各管理メッセージまたはアプリケーションメッセージの前には標準ヘッダーが付けられます。ヘッダーはメッセージタイプ、長さ、宛先、シーケンス番号、発信ポイント、および時間を識別します。
cTraderに送信されるすべてのメッセージには、以下のフィールドを含む標準ヘッダーが必要です:
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
8 | BeginString | はい | FIX.4.4 | 文字列 | 常に暗号化されていない、メッセージの最初のフィールドである必要があります。 |
9 | BodyLength | はい | 任意の有効な値 | 整数 | メッセージボディの長さ。常に暗号化されていない、メッセージの2番目のフィールドである必要があります。 |
35 | MsgType | はい | A | 文字列 | メッセージタイプ。常に暗号化されていない、メッセージの3番目のフィールドである必要があります。 |
49 | SenderCompID | はい | 任意の有効な値 | 文字列 | トレーディングパーティのID。形式は次の通りです: <Environment>.<BrokerUID>.<Trader Login> 。Environment はサーバーの判定(デモまたはライブ)を示し、BrokerUID はcTraderが提供し、Trader Login はトレーダーアカウントの数値識別子です。 |
56 | TargetCompID | はい | CSERVER | 文字列 | メッセージのターゲット。有効な値はCSERVER です。 |
57 | TargetSubID | はい | QUOTE またはTRADE | 文字列 | 追加のセッション修飾子。可能な値はQUOTE およびTRADE です。 |
50 | SenderSubID | いいえ | 任意の有効な値 | 文字列 | 特定のメッセージ発信元を識別するために使用される割り当てられた値。TargetSubID=QUOTE の場合、QUOTE に設定する必要があります。 |
34 | MsgSeqNum | はい | 1 | 整数 | メッセージのシーケンス番号。 |
52 | SendingTime | はい | 20131129-15:40:08.155 | UTCTimestamp | メッセージ送信時間は常にUTC(協定世界時、別名GMT)で表されます。 |
標準トレーラー
各メッセージ(管理メッセージまたはアプリケーションメッセージ)は標準トレーラーで終了します。トレーラーはメッセージを区切るために使用され、CheckSum
(タグ=10)値の3桁の表現を含みます。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
10 | CheckSum | はい | 054 | 文字列 | 3バイトの単純なチェックサム。常にメッセージの最後のフィールドであり、終了メッセージ区切り文字としての<SOH> を含みます。常に暗号化されていない3文字として定義されます。 |
セッションメッセージ
ハートビート (MsgType(35)=0)
ハートビートメッセージは、cTraderおよびクライアントアプリケーションの両方によって送信され、生きた接続を確認します。
プロバイダーのクライアントアプリケーションは、ログオンメッセージのHeartBtInt
(タグ=108)フィールドで定義された間隔で定期的なハートビートを送信するか、テストリクエストメッセージに応答します。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
標準ヘッダー | はい | ||||
112 | TestReqID | いいえ | 任意の有効な値 | 文字列 | ハートビートがテストリクエストメッセージの結果である場合、TestReqID が必要です。 |
標準トレーラー | はい |
テストリクエスト (MsgType(35)=1)
リクエストの受信者からのハートビートを強制します。応答は、TestReqID
を含むハートビートメッセージとして送信されます。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
標準ヘッダー | はい | ||||
112 | TestReqID | はい | 任意の有効な値 | 文字列 | ハートビートメッセージID。TestReqID は増分である必要があります。 |
標準トレーラー | はい |
ログオン (双方向) (MsgType(35)=A)
ログオンメッセージは、cTrader FIXセッションを開始するためにクライアント側のアプリケーションから送信され、cTraderからクライアント側のアプリケーションに応答が送信されます。ログオンが完了すると、セッションのライフサイクルにわたって見積もりおよび取引フローが進行できます。
cTraderが無効なログオンメッセージ(無効なフィールドを含む)を受信した場合、cTraderは応答としてログアウトメッセージを送信します。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
標準ヘッダー | はい | ||||
98 | EncryptMethod | はい | 0 | 整数 | メッセージ暗号化方式を定義します。現在、トランスポートレベルのセキュリティのみがサポートされています。有効な値は0 =NONE_OTHER (暗号化は使用されていません)。 |
108 | HeartBtInt | はい | 任意の有効な値 | 整数 | ハートビート間隔(秒)。この値はconfig.properties ファイル(クライアント側)にSERVER.POLLING.INTERVAL として設定されます。デフォルトの間隔値は30秒です。HeartBtInt が0 に設定されている場合、ハートビートメッセージは不要です。 |
141 | ResetSeqNumFlag | いいえ | Y | ブール値 | FIXセッションのすべての側面でシーケンス番号をリセットする必要があります。有効な値はY (リセット)です。 |
553 | Username | いいえ | 任意の有効な値 | 文字列 | 数値のユーザーID。ユーザーはSenderCompID 値(ユーザーの組織、タグ=49)にリンクされています。 |
554 | Password | いいえ | 任意の有効な値 | 文字列 | ユーザーパスワード。 |
標準トレーラー | はい |
フィールドUsername
(タグ=553)には数値のトレーダーログイン値を含める必要があり、SenderCompID
(タグ=49)には環境、BrokerUID
、およびドットで区切られたトレーダーログイン(例:live.theBroker.12345
)が含まれている必要があります。
以下にログオンメッセージの例を示します。
リクエスト
8=FIX.4.4|9=126|35=A|49=live.theBroker.12345|56=CSERVER|34=1|52=20170117-08:03:04|57=TRADE|50=any_string|98=0|108=30|141=Y|553=12345|554=passw0rd!|10=131|
応答(成功)
8=FIX.4.4|9=106|35=A|34=1|49=CSERVER|50=TRADE|52=20170117-08:03:04.509|56=live.theBroker.12345|57=any_string|98=0|108=30|141=Y|10=066|
応答(失敗)
8=FIX.4.4|9=109|35=5|34=1|49=CSERVER|50=TRADE|52=20170117-08:03:04.509|56=live.theBroker.12345|58=InternalError: RET_INVALID_DATA|10=033|
ログアウト (MsgType(35)=5)
ログアウトメッセージは、クライアントアプリケーションからセッション終了を要求するためにcTraderに送信され、cTraderからの応答として送信されます。マーケット参加者がcTraderにログアウトメッセージを送信すると、セッションのログアウトが発生します。セッションを終了する前に、cTraderはリクエストパーティーにストリーミング中のすべての価格をキャンセルします。cTraderが無効なログオンメッセージ(無効なフィールドを含む)を受信した場合、cTraderは応答としてエラーディテールが含まれたログアウトメッセージを送信します。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
標準ヘッダー | はい | ||||
58 | Text | いいえ | 任意の有効な値 | 文字列 | ログオン拒否の詳細。無効なログオンメッセージの応答としてのみ使用されます。 |
標準トレーラー | はい |
以下にログアウトメッセージの例を示します。
リクエスト
8=FIX.4.4|9=86|35=5|49=live.theBroker.12345|56=CSERVER|34=161|52=20170117-09:22:33|57=TRADE|50=any_string|10=102|
応答
8=FIX.4.4|9=90|35=5|34=160|49=CSERVER|50=TRADE|52=20170117-09:22:33.077|56=live.theBroker.12345|57=any_string|10=044|
再送リクエスト (MsgType(35)=2)
シーケンス番号のギャップが検出されたときにメッセージの再送を要求するために使用されるインバウンド/アウトバウンドメッセージ。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
標準ヘッダー | はい | ||||
7 | BeginSeqNo | はい | 任意の有効な値 | 整数 | 再送する範囲内の最初のレコードのメッセージシーケンス番号。 |
16 | EndSeqNo | はい | 任意の有効な値 | 整数 | 再送する範囲内の最後のレコードのメッセージシーケンス番号。 |
標準トレーラー | はい |
拒否 (双方向) (MsgType(35)=3)
セッションレベルのルール違反により処理できないメッセージを受信した場合に送信されます。拒否されたメッセージは記録され、受信シーケンス番号に増分が適用される必要があります。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
標準ヘッダー | はい | ||||
45 | RefSeqNum | はい | 任意の有効な値 | シーケンス番号 | 参照されるメッセージのシーケンス番号。 |
58 | Text | いいえ | 任意の有効な値 | 文字列 | 自由形式のテキスト文字列。 |
354 | EncodedTextLen | いいえ | 任意の有効な値 | 長さ | バイト単位のEncodedText (非ASCII文字)フィールドの長さ。 |
355 | EncodedText | いいえ | 任意の有効な値 | データ | Text (タグ=58)フィールドの表現。MessageEncoding (標準ヘッダーのタグ=347)フィールドで指定された形式を使用してエンコードされています。ASCII表現が使用される場合、Text (タグ=58)フィールドにも指定する必要があります。 |
371 | RefTagID | いいえ | 任意の有効な値 | 整数 | メッセージ拒否を引き起こしたFIXフィールドのタグ番号。 |
372 | RefMsgType | いいえ | 任意の有効な値 | 文字列 | 参照されるFIXメッセージのメッセージタイプ。 |
373 | SessionRejectReason | いいえ | 任意の有効な値 | 整数 | セッションリジェクト理由。 |
標準トレーラー | はい |
シーケンスリセット (双方向) (MsgType(35)=4)
メッセージシーケンス番号をリセットするためにcTraderまたはプロバイダーアプリケーションが送信するインバウンド/アウトバウンドメッセージ。シーケンス番号の同期を維持するために送信されます。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
標準ヘッダー | はい | ||||
123 | GapFillFlag | いいえ | 任意の有効な値 | ブール値 | 再送要求に対してシーケンス番号のギャップを埋めるために送信されるシーケンスリセットメッセージの場合、GapFillFlag が含まれている必要があります。ギャップを埋める場合はY 、新しいシーケンス番号をリセットする場合はN です。 |
36 | NewSeqNo | はい | 任意の有効な値 | 整数 | 新しいシーケンス番号。 |
標準トレーラー | はい |
マーケットデータリクエスト (MsgType(35)=V)
マーケットデータリクエストは、cTraderのマーケットデータサーバーに送信され、リクエストされたシンボルの価格ストリームが開始されます。マーケットデータリクエストは、クライアントアプリケーションが開始します。
プロバイダーのクライアントアプリケーションがマーケットデータリクエストメッセージを送信すると、cTraderは定期的なマーケットデータインクリメンタルリフレッシュまたはマーケットデータスナップショット/フルリフレッシュメッセージを送信します。
マーケットデータリクエストメッセージは、ストリーミングを停止するリクエストメッセージの送信によりキャンセルされます。
クライアントアプリケーションは、cTraderからのマーケットデータのリクエストをキャンセルする場合、同じマーケットデータリクエストIDを含むマーケットデータリクエストメッセージをSubscriptionRequestType
フィールドで指定された値とともに送信する必要があります。
以下のテーブルは、マーケットデータリクエストメッセージの必須フィールドを示しています。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
標準ヘッダー | はい | ||||
262 | MDReqID | はい | 任意の有効な値 | 文字列 | マーケットデータリクエストを一意に識別するために使用されます。 |
263 | SubscriptionRequestType | はい | 0 、1 、または2 | 文字列 | 値は0 =新規登録、1 =ストリーミングキャンセル、2 =スナップショット。 |
264 | MarketDepth | はい | 1 | 整数 | リクエストされたマーケットデータの深さ。 |
267 | NoMDEntryTypes | はい | 1 | 整数 | リクエストするエントリの数。 |
269 | MDEntryType | はい | 0または1 | 文字列 | マーケットデータエントリのタイプ。値は0 =BID 、1 =OFFER 。 |
146 | NoRelatedSym | はい | 任意の有効な値 | 整数 | リクエストするシンボルの数。 |
55 | Symbol | はい | 任意の有効な値 | 文字列 | リクエストするシンボル。 |
207 | SecurityExchange | はい | FX | 文字列 | 対象市場。常にFX を設定します。 |
標準トレーラー | はい |
以下にマーケットデータリクエストメッセージの例を示します。
リクエスト
8=FIX.4.4|9=112|35=V|49=live.theBroker.12345|56=CSERVER|34=161|52=20170117-09:22:33|57=TRADE|50=any_string|262=any_string|263=1|264=1|267=1|269=0|146=1|55=EURUSD|207=FX|10=131|
応答
8=FIX.4.4|9=94|35=W|34=1|49=CSERVER|50=TRADE|52=20170117-09:22:33.077|56=live.theBroker.12345|57=any_string|262=any_string|269=0|270=1.07300|271=1000000|10=222|
マーケットデータスナップショット/フルリフレッシュ (MsgType(35)=W)
マーケットデータスナップショット/フルリフレッシュメッセージは、マーケットデータサーバーによってクライアントアプリケーションに送信され、指定されたシンボルのマーケットデータのスナップショットが提供されます。
タグ | フィールド名 | 必須 | 値 | FIX形式 | コメント |
---|---|---|---|---|---|
標準ヘッダー | はい | ||||
262 | MDReqID | はい | 任意の有効な値 | 文字列 | マーケットデータリクエストを一意に識別するために使用されます。 |
55 | Symbol | はい | 任意の有効な値 | 文字列 | リクエストされたシンボル。 |
207 | SecurityExchange | はい | FX | 文字列 | 対象市場。常にFX を設定します。 |
268 | NoMDEntries | はい | 任意の有効な値 | 整数 | リクエストされたシンボルのマーケットデータエントリの数。 |
269 | MDEntryType | はい | 0または1 | 文字列 | マーケットデータエントリのタイプ。値は0 =BID 、1 =OFFER 。 |
270 | MDEntryPx | はい | 任意の有効な値 | 価格 | マーケットデータエントリの価格。 |
271 | MDEntrySize | はい | 任意の有効な値 | 数量 | マーケットデータエントリのサイズ。 |
272 | MDEntryDate | いいえ | 任意の有効な値 | 日付 | マーケットデータエントリの日付。 |
273 | MDEntryTime | いいえ | 任意の有効な値 | 時刻 | マーケットデータエントリの時刻。 |
274 | TickDirection | いいえ | 0、1、2、または3 | 整数 | ティック方向。値は0 =プラスティック、1 =マイナスティック、2 =0ティック、3 =不明。 |
275 | MDMkt | いいえ | 任意の有効な値 | 文字列 | マーケットデータのマーケット。 |
336 | TradingSessionID | いいえ | 任意の有効な値 | 文字列 | 取引セッションID。 |
346 | NumberOfOrders | いいえ | 任意の有効な値 | 整数 | オーダー数。 |
15 | Currency | いいえ | 任意の有効な値 | 通貨 | 取引通貨。 |
271 | OrderQty | いいえ | 任意の有効な値 | 整数 | 注文数量。 |
276 | QuoteCondition | いいえ | 0、1、2、3、4、5、6、7、8、9、10、11、または12 | 整数 | 引用条件。値は0 =通常、1 =交換停止中、2 =遅延、3 =未承認取引、4 =トレーディングハルト、5 =スロー状態、6 =価格設定停止、7 =クローズド、8 =ファーム、9 =ファームと遅延、10 =トレーディングハルトと遅延、11 =スロー状態と遅延、12 =価格設定停止と遅延。 |
277 | TradeCondition | いいえ | 0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27、28、または29 | 整数 | 取引条件。値は0 =通常、1 =ノーカンセル、2 =ナットシン、3 =オープン、4 =クローズ、5 =ザ・クロス、6 =売り、7 =買い、8 =オークション、9 =内々、10 =スペシャル、11 =クロースクロス、12 =オープンクロス、13 =ステップ、14 =ピボット、15 =ストラドル、16 =バスケット、17 =サイズ、18 =コンティニュエーション、19 =リプレースメント、20 =アジャストメント、21 =アジャストクロス、22 =バット、23 =バットストラドル、24 =バットピボット、25 =オルタネート、26 =オルタネートクロス、27 =プログラム、28 =プログラムクロス、29 =その他。 |
278 | MDEntryID | いいえ | 任意の有効な値 | 文字列 | マーケットデータエントリID。 |
279 | MDUpdateAction | いいえ | 0、1、または2 | 整数 | マーケットデータ更新アクション。値は0 =新規、1 =変更、2 =削除。 |
286 | OpenCloseSettleFlag | いいえ | 0、1、2、または3 | 整数 | オープンクローズフラグ。値は0 =オープン、1 =クローズ、2 =未知、3 =解決。 |
299 | QuoteEntryID | いいえ | 任意の有効な値 | 文字列 | クオートエントリID。 |
300 | QuoteStatus | いいえ | 0、1、2、3、4、5、6、7、8、または9 | 整数 | 引用ステータス。値は0 =承認済み、1 =拒否済み、2 =取り消し済み、3 =遅延、4 =クロース、5 =ストップ、6 =解除、7 =ホールド、8 =オープン、9 =スロー。 |
301 | QuoteRequestID | いいえ | 任意の有効な値 | 文字列 | 引用リクエストID。 |
302 | QuoteType | いいえ | 0、1、または2 | 整数 | 引用タイプ。値は0 =ファーム、1 =ナット、2 =インディケーション。 |
303 | QuoteRejectReason | いいえ |