cTrader FIX API【FIXエンジンと運用ルール】

はじめに

範囲

本記事は、cTrader FIX Engine Application Programming Interface(API)の実装ガイドとして、ソフトウェア開発に役立つことを目的としています。

FIXバージョン

cTraderはFIXバージョン4.4をサポートしています。このバージョンの詳細については、これらの仕様を参照してください。

ディクショナリー

各コードのディクショナリーはこちらをご参照ください。

接続性

接続タイプ

cTraderのFIXエンジンへの接続は、インターネット、VPNトンネル、または英国にあるSpotWareのデータセンター施設へのクロスコネクト経由でご利用いただけます。

シーケンス番号リセット

すべての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フォーマット     脚注
8BeginStringFIX.4.4String常に暗号化されておらず、メッセージの最初のフィールドでなければならない。
9BodyLength任意の有効な値Integerメッセージ本文の長さ。常に暗号化されておらず、メッセージの2番目のフィールドでなければならない。
35MsgTypeAStringメッセージ・タイプ。常に暗号化されておらず、メッセージの3番目のフィールドでなければならない。
49SenderCompID任意の有効な値String取引参加者の ID を以下のフォーマットで指定します: <Environment>.<BrokerUID>.<Trader Login>ここで、Environmentは、デモまたはライブのようなサーバーの決定であり、BrokerUIDは、cTraderによって提供され、Trader Loginは、トレーダーアカウントの数値識別子。
56TargetCompIDCSERVERStringメッセージ・ターゲット。有効な値は CSERVER。
57TargetSubIDQUOTE or TRADEString追加のセッション修飾子。指定可能な値は QUOTE および TRADE です。
50SenderSubID不要任意の有効な値String特定のメッセージ発信者を識別するために使用される割り当て値。TargetSubID=QUOTE の場合は QUOTE に設定する必要がある。
34MsgSeqNum1Integerメッセージのシーケンス番号。
52SendingTime20131129-15:40:08.155UTCTimestampメッセージの送信時刻は常にUTC(協定世界時、GMTとしても知られる)で表される。

標準トレーラー

各メッセージは、管理用であれアプリケーションであれ、標準的なトレーラで終端されます。トレーラーはメッセージを分離するために使われ、3桁の CheckSum (tag=10) 値を含んでいます。

タグ フィールド名    必須 FIXフォーマット      脚注
10CheckSum54String3バイトの単純なチェックサム。常にメッセージの最後のフィールド(つまりサーブ)で、末尾のがメッセージの区切り文字となる。これは3文字で定義される(常に暗号化されていない)

セッションメッセージ

Heartbeat (MsgType(35)=0)

ハートビートメッセージは、ライブ接続を確認するために cTrader とクライアントアプリケーションの両方から送信されます。

プロバイダのクライアント・アプリケーションは、Logon メッセージの HeartBtInt (tag=108) フィールドによって定義される間隔で、または Test Request メッセージへの応答として、定期的にハートビートを送信します。

タグ フィールド名必須 FIXフォーマット    脚注
Standard Header
112TestReqID不要任意の有効な値Stringハートビートがテスト要求メッセージの結果である場合はTestReqID が必要。
Standard Trailer

Test Request (MsgType(35)=1)

リクエストの受信側からのハートビートを強制します。応答は、TestReqID を含む Heartbeat メッセージとして受信システムから送信されます。

タグ フィールド名必須 FIXフォーマット   脚注
Standard Header
112TestReqID任意の有効な値StringハートビートメッセージID。TestReqIDはインクリメンタルでなければならない。
Standard Trailer

Logon (Bidirectional) (MsgType(35)=A)

cTrader FIX セッションを開始するために、クライアント側アプリケーションからログオンメッセージが送信され、cTrader からクライアント側アプリケーションに応答が送信されます。ログオンが完了すると、そのセッションのライフサイクルの間、気配値と取引のフローを進めることができます。

無効なフィールドを含む無効なログオンメッセージを cTrader が受信した場合、cTrader は応答としてログアウトメッセージを送信します。

タグ フィールド名必須       FIXフォーマット       脚注
Standard Header
98EncryptMethod0Integerメッセージ暗号化スキームを定義する。現在のところ、トランスポート・レベルのセキュリティのみがサポートされている。有効な値は 0 = NONE_OTHER(暗号化は使用しない)。
108HeartBtInt任意の有効な値Integer秒単位のハートビート間隔。この値はSERVER.POLLING.INTERVALとしてconfig.propertiesファイル(クライアント側)に設定される。デフォルトの間隔値は30秒。HeartBtIntを0に設定すると、ハートビート・メッセージは不要になる。
141ResetSeqNumFlag不要YBooleanFIXセッションのすべての側で、シーケンス番号をリセットすべきである。有効な値はY(リセット)である。
553Username不要任意の有効な値String数値のユーザーID。ユーザーはSenderCompID値(ユーザーの組織、tag=49)にリンクされている。
554Password不要任意の有効な値Stringユーザーパスワード。
Standard Trailer

Username(tag=553)フィールドには、数字によるトレーダーログイン値を含める必要があり、 「SenderCompID」(tag=49)フィールドには、環境、BrokerUID、およびドットで区切られたトレーダーログイン(live.theBroker.12345 など)を含める必要があることに注意してください。

以下のログオンメッセージの例を参照してください。

Request

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|

Response (Success)

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|

Response (Failed)

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|

Logout (MsgType(35)=5)

ログアウトメッセージは、cTrader とのセッション終了を要求するためにクライアントアプリケーションから送信され、cTrader からの応答として送信されます。セッションのログアウトは、市場参加者が cTrader にログアウトメッセージを送信したことに応答して発生します。セッションを終了する前に、cTrader は、要求側にまだアクティブにストリーミングされているすべての価格をキャンセルします。無効なフィールドを含み、無効なログオンメッセージを cTrader が受信した場合、cTrader はテキスト (tag=58) フィールドにエラーの詳細を含むログアウトメッセージを応答として送信します。

タグ フィールド名   必須       FIXフォーマット     脚注
Standard Header
58Text不要任意の有効な値 Stringログオン拒否の詳細。無効なログオンメッセージ応答として、cTrader-to-clientメッセージにのみ使用される。
Standard Trailer

以下のログアウトメッセージの例を参照してください。

Request

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|

Response

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|

Resend Request (MsgType(35)=2)

インバウンド/アウトバウンド・メッセージは、メッセージの再送を要求するために使われます。

タグ フィールド名   必須           FIXフォーマット     脚注
Standard Header
7BeginSeqNo任意の有効な値Integer再送される範囲の最初のレコードのメッセージ・シーケンス番号。
16EndSeqNo任意の有効な値Integer再送される範囲内の最後のレコードのメッセージ・シーケンス番号。
Standard Trailer

Reject (Bidirectional) (MsgType(35)=3)

受信したメッセージがセッションレベルのルール違反のために処理できないときに送られます。拒否されたメッセージは記録され、受信シーケンス番号にインクリメントが適用されます。

タグ フィールド名必須        FIXフォーマット       脚注
Standard Header
45RefSeqNum任意の有効な値SeqNum参照されたメッセージのシーケンス番号。
58Text不要任意の有効な値Stringフリーフォーマットのテキスト文字列。
354EncodedTextLen不要任意の有効な値LengthEncodedText(非ASCII文字)フィールドのバイト長。
355EncodedText不要任意の有効な値DataText(tag=58)フィールドの表現。(標準ヘッダーの)MessageEncoding(tag=347)フィー ルドで指定されている書式でエンコードされている。ASCII 表現を使用する場合は、Text(tag=58)フィールドにも指定する。
371RefTagID不要任意の有効な値Integerメッセージ拒否を開始したFIXフィールドのタグ番号。
372RefMsgType不要任意の有効な値String参照される FIX メッセージの MsgType (tag=35).
373SessionRejectReason不要任意の有効な値Integer
リジェクトの原因をコード化したもの。有効な値は以下の通り:
0 = 無効なタグ番号。
1 = 必要なタグがない。
2 = このメッセージ・タイプに定義されたタグがない。
3 = タグが定義されていない。
4 = 指定されたタグの値がない。
5 = このタグの値は範囲外です。
6 = 値のデータ形式が正しくない。
7 = 復号化の問題。
8 = 署名エラー。
9 = CompIDエラー。
10 = SendingTime 精度エラー。
11 = MsgType が無効です。
12 = XML 検証エラー。
13 = タグが繰り返されている。
14 = 指定されたタグの順序が正しくない。
15 = グループ・フィールドの繰り返しが正しい順序ではありません。
16 = 繰り返しグループの NumInGroup カウントが不正です。
17 = 非データ値にフィールド区切り文字(SOH 文字)が含まれています。

Sequence Reset (MsgType(35)=4)

インバウンド/アウトバウンド・メッセージはアプリケーション・レベルでは使用すべきではありません。シーケンス・リセット・メッセージはシーケンス番号を増やすことしかできません。

タグ フィールド名必須      FIXフォーマット     脚注
Standard Header
123GapFillFlag不要Yes or NoStringシーケンス・リセット・メッセージが、再送されない管理メッセージやアプリケーション・メッセージに置き換わっていることを示す。
36NewSeqNo1Integer新しいシーケンス番号。
Standard Trailer

アプリケーションメッセージ

Market Data Request (MsgType(35)=V)

タグ フィールド名必須        FIXフォーマット      脚注
Standard Header
262MDReqID任意の有効な値String一意の見積依頼ID。新規購読のための新しいIDで、以前購読削除のために使用されたものと同じIDです。
263SubscriptionRequestType1 or 2Char1 = スナップショット・プラス・アップデート (購読);
2 = 以前のスナップショットと更新要求を無効にする(購読解除)。
264MarketDepth0 or 1Integerフルブックが提供される。
0 = デプス購読;
1 = スポット購読
265MDUpdateType任意の有効な値Integerインクリメンタルリフレッシュのみサポート。
267NoMDEntryTypes2Integer常に2に設定する(ビッドとアスクの両方が送信される)。
269MDEntryType0 or 1Charこの繰り返しグループには、リクエスタが受信を希望するマーケットデータエントリーの全種類のリストが含まれます。
0 = ビッド;
1 = Offer。
146NoRelatedSym任意の有効な値Integer要求されたシンボルの数。
55Symbol任意の有効な値Long機器の識別はSpotware社が提供している。

以下のマーケットデータリクエストメッセージの例を参照。

スポット

Request

8=FIX.4.4|9=131|35=V|49=live.theBroker.12345|56=CSERVER|34=3|52=20170117-10:26:54|50=QUOTE|262=876316403|263=1|264=1|265=1|146=1|55=1|267=2|269=0|269=1|10=094|

Response

8=FIX.4.4|9=134|35=W|34=2|49=CSERVER|50=QUOTE|52=20170117-10:26:54.630|56=live.theBroker.12345|57=any_string|55=1|268=2|269=0|270=1.06625|269=1|270=1.0663|10=118|

デプス

Request

8=FIX.4.4|9=131|35=V|49=live.theBroker.12345|56=CSERVER|34=2|52=20170117-11:13:44|50=QUOTE|262=876316411|263=1|264=0|265=1|146=1|55=1|267=2|269=0|269=1|10=087|

Responses

8=FIX.4.4|9=310|35=W|34=2|49=CSERVER|50=QUOTE|52=20180925-12:05:28.284|56=live.theBroker.12345|57=Quote|55=1|268=6|269=1|270=1.11132|271=3000000|278=16|269=1|270=1.11134|271=5000000|278=17|269=1|270=1.11133|271=3000000|278=15|269=0|270=1.1112|271=2000000|278=12|269=0|270=1.11121|271=1000000|278=13|269=0|270=1.11122|271=3000000|278=14|10=247|

8=FIX.4.4|9=693|35=X|34=2|49=CSERVER|50=QUOTE|52=20170117-11:13:44.461|56=live.theBroker.12345|57=any_string|268=12|279=0|269=1|278=7475|55=1|270=1.0691|271=2000000|279=0|269=1|278=7476|55=1|270=1.06911|271=3000000|279=0|269=1|278=7484|55=1|270=1.06931|271=34579000|279=0|269=1|278=7485|55=1|270=1.06908|271=1000000|279=0|269=1|278=7483|55=1|270=1.06906|271=500000|279=0|269=1|278=7482|55=1|270=1.06907|271=500000|279=0|269=1|278=7488|55=1|270=1.06909|271=3000000|279=0|269=0|278=7468|55=1|270=1.06898|271=500000|279=0|269=0|278=7467|55=1|270=1.06874|271=32371000|279=0|269=0|278=7457|55=1|270=1.06899|271=1000000|279=0|269=0|278=7478|55=1|270=1.06896|271=7000000|279=0|269=0|278=7477|55=1|270=1.06897|271=1500000|10=111|
8=FIX.4.4|9=376|35=X|34=3|49=CSERVER|50=QUOTE|52=20170117-11:13:44.555|56=live.theBroker.12345|57=any_string|268=8|279=0|269=0|278=7491|55=1|270=1.06897|271=1000000|279=0|269=0|278=7490|55=1|270=1.06898|271=1000000|279=0|269=0|278=7489|55=1|270=1.06874|271=32373000|279=0|269=1|278=7496|55=1|270=1.06931|271=34580000|279=2|278=7477|55=1|279=2|278=7468|55=1|279=2|278=7467|55=1|279=2|278=7484|55=1|10=192|

Market Data Snapshot/Full Refresh (MsgType(35)=W)

タグ フィールド名必須         FIXフォーマット     脚注
Standard Header
262MDReqID不要任意の有効な値String以前に送信されたマーケット・データ・リクエストのID。
55Symbol任意の有効な値Long機器の識別はSpotware社が提供している。
268NoMDEntries任意の有効な値Integer以下のエントリー数。
269MDEntryType不要0 or 1Char有効な値は以下の通り:
0 = 入札;
1 = オファー。
NoMDEntries (tag=268) > 0 のときのみ必要。
299QuoteEntryID不要任意の有効な値StringQuoteSetの一部としての引用を一意に識別するもの。
270MDEntryPx不要1.2345Priceマーケット・データ・エントリーの価格。NoMDEntries (tag=268) > 0 のときのみ必要。
271MDEntrySize不要500000Volumeマーケット・データ・エントリーのボリューム。NoMDEntries (tag=268) > 0 のときのみ必要。
278MDEntryID不要任意の有効な値Stringマーケット・データ・エントリー固有の識別子。

Market Data Incremental Refresh (MsgType(35)=X)

タグ フィールド名必須        FIXフォーマット      脚注
Standard Header
262MDReqID不要任意の有効な値String以前に送信されたマーケット・データ・リクエストのID。
268NoMDEntries任意の有効な値Integer以下のエントリ数。このリピーティンググループには、リクエスターが受信を希望する全てのタイプのマーケットデータエントリーのリストが含まれます。
279MDUpdateAction0 or 2Charマーケットデータ更新アクションのタイプ。有効な値は以下の通り:
0 = 新規;
2 = 削除。
269MDEntryType不要0 or 1Char有効な値は以下の通り:
0 = 入札;
1 = オファー。
278MDEntryID任意の有効な値String市場データエントリーのID。
55Symbol任意の有効な値Long機器の識別はSpotware社が提供している。
270MDEntryPx不要1.2345PriceMDUpdateAction (tag=279) = 0 のときのみ必要。
271MDEntrySize不要10000DoubleMDUpdateAction (tag=279) = 0 のときのみ必要。
Standard Trailer

New Order Single (MsgType(35)=D)

ニューオーダーシングルメッセージは以下のような形式をとります。

タグ フィールド名必須       FIXフォーマット      脚注
Standard Header
11ClOrdID任意の有効な値Stringクライアントから割り当てられた注文の一意の識別子。
55Symbol任意の有効な値Long機器の識別はSpotware社が提供している。
54Side1 or 2Integer1 = 買い
2 = 売り
60TransactTime任意の有効な値Timestampクライアントが生成したリクエスト時間。
38OrderQty任意の有効な値Qty注文株数。株式の場合は株式数、オプション、先物、転換社債などの場合は通常の慣習に基づく契約数を表す。最大精度は0.01。FIX 4.2以前では、このフィールドの型は’Integer’であった。
40OrdType1, 2 or 3Char1 = 成行、注文は即時または取消 (IOC) 方式で処理されます (TimeInForce、tag=59);
2 = 指値、注文はGTC (Good Till Cancel)スキームで処理されます (TimeInForce、tag=59);
3 = ストップ、注文はGTC (Good Till Cancel)スキームで処理されます (TimeInForce、tag=59)。
44Price不要任意の有効な値Priceクライアントが受け入れる最悪のクライアント価格。OrdType (tag=40) = 2の場合のみ必要で、この場合、この価格が満たされない限り、注文は成立しない。
99StopPx不要任意の有効な値Price逆指値注文のトリガーとなる価格。OrdType (tag=40) = 3 の場合のみ必要で、この場合、この価格が満たされない限り、注文は成立しない。
59TimeInForce不要1, 3 or 6String非推奨。この値は無視される。TimeInForce は、OrdType (tag=40) と ExpireTime (tag=126) によって自動的に検出される。
1 = Good Till Cancel (GTC): ExpireTime (tag=126) が定義されていない場合、指値と逆指値注文 (OrdType, tag=40) にのみ使用される。
3 = Immediate or Cancel (IOC): 成行注文 (OrdType、tag=40) にのみ使用される。
6 = Good Till Date (GTD): ExpireTime (tag=126) が定義されている場合のみ、指値と逆指値注文 (OrdType, tag=40) に使用される。
126ExpireTime不要20140215-07:24:55Timestamp有効期限を「YYYYMMDD-HH:MM:SS」形式で指定します。割り当てられている場合、注文はGTDスキーム(TimeInForce: GTD)で処理されます。
721PosMaintRptID不要任意の有効な値Stringこの注文が発注されるべきポジションID。設定されていない場合、新しいポジションが作成され、その ID が約定報告メッセージで返されます。ヘッジされた口座にのみ指定できます。
494Designation不要任意の有効な値Stringカスタムオーダーラベル。

以下のニューオーダーシングルメッセージの例を参照。

新規ポジションへの成行注文

Request

8=FIX.4.4|9=143|35=D|49=live.theBroker.12345|56=CSERVER|34=77|52=20170117-10:02:14|50=any_string|57=TRADE|11=876316397|55=1|54=1|60=20170117-10:02:14|40=1|38=10000|10=010|

Responses

8=FIX.4.4|9=197|35=8|34=77|49=CSERVER|50=TRADE|52=20170117-10:02:14.720|56=live.theBroker.12345|57=any_string|11=876316397|14=0|37=101|38=10000|39=0|40=1|54=1|55=1|59=3|60=20170117-10:02:14.591|150=0|151=10000|721=101|10=149|
8=FIX.4.4|9=206|35=8|34=78|49=CSERVER|50=TRADE|52=20170117-10:02:15.045|56=live.theBroker.12345|57=any_string|6=1.0674|11=876316397|14=10000|32=10000|37=101|38=10000|39=2|40=1|54=1|55=1|59=3|60=20170117-10:02:14.963|150=F|151=0|721=101|10=077|

既存のポジションへの成行注文

Request

8=FIX.4.4|9=151|35=D|49=live.theBroker.12345|56=CSERVER|34=80|52=20170117-10:02:55|50=any_string|57=TRADE|11=876316398|55=1|54=1|60=20170117-10:02:55|40=1|38=10000|721=101|10=120|

Responses

8=FIX.4.4|9=197|35=8|34=80|49=CSERVER|50=TRADE|52=20170117-10:02:56.003|56=live.theBroker.12345|57=any_string|11=876316398|14=0|37=102|38=10000|39=0|40=1|54=1|55=1|59=3|60=20170117-10:02:55.984|150=0|151=10000|721=101|10=156|
8=FIX.4.4|9=207|35=8|34=81|49=CSERVER|50=TRADE|52=20170117-10:02:56.239|56=live.theBroker.12345|57=any_string|6=1.06735|11=876316398|14=10000|32=10000|37=102|38=10000|39=2|40=1|54=1|55=1|59=3|60=20170117-10:02:56.210|150=F|151=0|721=101|10=127|

既存のポジションへの指値注文

Request

8=FIX.4.4|9=162|35=D|49=live.theBroker.12345|56=CSERVER|34=89|52=20170117-10:06:22|50=any_string|57=TRADE|11=876316400|55=1|54=2|60=20170117-10:06:22|40=2|44=1.07162|38=50000|721=101|10=122|

Responses

8=FIX.4.4|9=208|35=8|34=90|49=CSERVER|50=TRADE|52=20170117-10:06:22.466|56=live.theBroker.12345|57=any_string|11=876316400|14=0|37=104|38=50000|39=0|40=2|44=1.07162|54=2|55=1|59=1|60=20170117-10:06:22.436|150=0|151=50000|721=101|10=149|

Order Status Request (MsgType(35)=H)

注文ステータス要求メッセージは、トレーダから注文ステータスメッセージを返信するために、金融機 関によって使用されます。正しい処理には、すべての注文においてクライアント注文識別子(ClOrdID)が不可欠です。

タグ フィールド名必須       FIXフォーマット  脚注
Standard Header
11ClOrdID任意の有効な値Stringクライアントから割り当てられた注文の一意の識別子。
54Side不要1 or 2Integer1 = 買い
2 = 売り
Standard Trailer

以下のOder Status Requestメッセージの例を参照。

Request

8=FIX.4.4|9=98|35=H|49=live.theBroker.12345|56=CSERVER|34=95|52=20170117-10:08:31|50=any_string|57=TRADE|11=876316400|10=191|

Responses

8=FIX.4.4|9=208|35=8|34=95|49=CSERVER|50=TRADE|52=20170117-10:08:31.819|56=live.theBroker.12345|57=any_string|11=876316400|14=0|37=104|38=50000|39=0|40=2|44=1.07162|54=2|55=1|59=1|60=20170117-10:06:22.436|150=0|151=50000|721=101|10=158|

Order Mass Status Request (MsgType(35)=AF)

注文一括ステータス要求メッセージは、要求で指定された条件に合致する注文のステータスを要求します。回答は、複数の約定報告メッセージ(各注文に1つずつ)として返され、注文が見つからない場合はビジネスメッセージ拒否メッセージとして返されます。

タグ フィールド名必須        FIXフォーマット    脚注
Standard Header
584MassStatusReqID任意の有効な値Stringクライアントによって割り当てられたマス・ステータス・リクエストの一意のID。
585MassStatusReqType任意の有効な値Integer7 = すべての注文のステータス。
現在、値7のみがサポートされています。
225IssueDate不要任意の有効な値String設定された場合、レスポンスにはこの日付より前に作成された注文のみが含まれます。
Standard Trailer

以下の Oder Mass Status Request メッセージの例を参照。

Request

8=FIX.4.4|9=117|35=AF|34=3|49=live.theBroker.12345|52=20170404-07:20:55.325|56=CSERVER|57=TRADE|225=20170404-07:20:44.582|584=mZzEY|585=7|10=065|

Responses

8=FIX.4.4|9=199|35=8|34=13|49=CSERVER|50=TRADE|52=20170404-07:20:55.333|56=live.theBroker.12345|14=0|37=635|38=100000|39=0|40=2|44=1.35265|54=2|55=1|59=1|60=20170404-07:20:44.582|150=I|151=100000|584=mZzEY|721=617|911=1|10=152|

Execution Report (MsgType(35)=8)

受理された注文の約定報告メッセージの書式は以下のとおりです。

タグ フィールド名必須       FIXフォーマット       脚注
Standard Header
37OrderID任意の有効な値StringcTraderの注文ID。
11ClOrdID不要任意の有効な値Stringクライアントから割り当てられた注文の一意の識別子。
911TotNumReports不要任意の有効な値Integerオーダー大量ステータス要求メッセージに応答して返されたレポートの総数。
150ExecType任意の有効な値Char0 = 新規;
4 = キャンセル
5 = 交換;
8 = 不採用;
C = 期限切れ;
F = 取引;
I = 注文状況。
39OrdStatus任意の有効な値Char0 = 新規;
1 = 部分的に満たされた;
2 = (完全に)満たされた;
8 = 拒否;
4 = Canceled (オーダーが部分的に満たされた場合、Canceled が返され、(tag=151)、LeavesQty がキャンセルされ、その後満たされないことを意味する);
C = 期限切れ。
55Symbol不要任意の有効な値Long機器の識別はSpotware社が提供している。
54Side不要1 or 2Integer1 = 買い
2 = 売り
60TransactTime不要任意の有効な値Timestamp実行報告メッセージで表されるトランザクションの実行時間(UTC)。
6AvgPx不要任意の有効な値Integer取引が成立した価格。IOCまたはGTD注文の場合、これは満たされた注文の出来高加重平均価格(VWAP)
38OrderQty不要任意の有効な値Qty株式の場合は株数を表し、オプション、先物、転換社債などの場合は通常の慣習に基づく契約数を表す。FIX 4.2 以前では、このフィールドの型は ‘Integer’ でした。
151LeavesQty不要Any valid valueQtyまだ埋まっていない注文の数。可能な値は、0 (完全に埋まった) から OrderQty (部分的に埋まった) の間。
14CumQty不要任意の有効な値Qty完了した注文の総数。
32LastQty不要任意の有効な値Qtyこの(最後の)フィルで満たされた注文の買い/売りの数量。
40OrdType不要1 or 2Char1 = 成行
2 = 指値
44Price不要任意の有効な値PriceNew Order Single メッセージで指定された場合、この Execution Report メッセージでエコーバックされる。
99StopPx不要任意の有効な値PriceNew Order Single メッセージで指定された場合、この Execution Report メッセージでエコーバックされる。
59TimeInForce不要1, 3 or 6String1 = グッド・ティル・キャンセル(GTC);
3 = 即時またはキャンセル(IOC);
6 = グッドティルデート(GTD)。
126ExpireTime不要20140215-07:24:55TimestampNew Order Single メッセージで指定された場合、この Execution Report メッセージでエコーバックされる。
58Text不要任意の有効な値String可能であれば、実行レポートについて説明するメッセージが表示される。
103OrdRejReason不要0Integer0 = OrdRejReason.BROKER_EXCHANGE_OPTION
721PosMaintRptID不要任意の有効な値StringポジションID。
494Designation不要任意の有効な値Stringクライアントのカスタムオーダーラベル。
584MassStatusReqID不要任意の有効な値Stringクライアントによって割り当てられた、大量ステータス要求の一意のID。
1000AbsoluteTP不要任意の有効な値Price利食いがトリガーされる絶対価格。
1001RelativeTP不要任意の有効な値Price利益確定がトリガーされるエントリー価格からの距離。
1002AbsoluteSL不要任意の有効な値Priceストップロスが発動される絶対価格。
1003RelativeSL不要任意の有効な値Priceストップロスがトリガーされるエントリー価格からのpips単位の距離。
1004TrailingSL不要N or YBooleanストップロスがトレイリングであるかどうかを示す。
N = ストップロスはトレイリングしない;
Y = ストップロスがトレイリングしている。
1005TriggerMethodSL不要任意の有効な値Integerストップロスのトリガー方法。
1 = ストップロスは取引側でトリガーされる。
2 = ストップロスは反対側(買いポジションの場合はアスク、売りポジションの場合はビッド)によってトリガーされる。
3 = ストップロスは、取引側によって2ティック連続でトリガーされる。
4 = 反対側の2ティック(買いポジションの場合は2回目のアスクティック、売りポジションの場合は2回目のビッドティック)後にストップロスが発生。
1006GuaranteedSL不要N or YBooleanストップ・ロスが保証されているかどうかを示す。
N = ストップロスは保証されていない。
Y = ストップロスが保証されている。
Standard Trailer

本記事の最後にあるニュー・オーダー・シングルの例を参照。

Business Message Reject (MsgType(35)=j)

このメッセージタイプは、システムがサブスクリプションリクエストを処理できないとき、またはオーダーを実行できないときに送信されます。

タグ フィールド名必須       FIXフォーマット     脚注
Standard Header
45RefSeqNum不要任意の有効な値Integer拒否されたメッセージの MsgSeqNum (tag=34)。
372RefMsgType不要任意の有効な値String参照されているFIXメッセージのMsgType(tag=35)。
379BusinessRejectRefID不要任意の有効な値String参照されるメッセージのビジネス・レベルIDフィールドの値。対応する ID フィールドが指定されていなければ必須。
380BusinessRejectReason0Integerビジネスメッセージ拒否メッセージの理由を識別するためのコード。
0 = その他。
58Text不要任意の有効な値String拒否の理由を説明するメッセージ。
Standard Trailer

以下のビジネスメッセージ拒否メッセージの例を参照。

8=FIX.4.4|9=149|35=j|34=2|49=CSERVER|52=20170105-06:36:00.912|56=live.theBroker.12345|57=any_string|58=Message to explain reason for rejection|379=u4Jr7Rr5t2VS7HSP|380=0|10=123|

Request for Positions (MsgType(35)=AN)

タグ フィールド名必須       FIXフォーマット     脚注
Standard Header
710PosReqID任意の有効な値String一意のリクエストID(クライアントによって設定される)。
721PosMaintRptID不要任意の有効な値StringリクエストするポジションID。設定されていない場合、すべてのオープンポジションが返されます。
Standard Trailer

以下のポジション要求メッセージの例を参照。

Request

8=FIX.4.4|9=100|35=AN|49=live.theBroker.12345|56=CSERVER|34=99|52=20170117-10:09:54|50=any_string|57=TRADE|710=876316401|10=103|

Responses

8=FIX.4.4|9=163|35=AP|34=98|49=CSERVER|50=TRADE|52=20170117-10:09:54.076|56=live.theBroker.12345|57=any_string|55=1|710=876316401|721=101|727=1|728=0|730=1.06671|702=1|704=0|705=30000|10=182|

Position Report (MsgType(35)=AP)

タグ フィールド名必須       FIXフォーマット       脚注
Standard Header
710PosReqID任意の有効な値Stringポジション要求メッセージのID。
721PosMaintRptID不要任意の有効な値StringPosReqResult(tag=728)がVALID_REQUESTでない場合は設定されないポジションID。
727TotalNumPosReports任意の有効な値StringPosReqResult (tag=728) が VALID_REQUEST である場合の、シーケンス内のポジション報告の総カウント。
728PosReqResult0 or 2String0 = 有効なリクエスト;
2 = 条件に一致するオープンポジションが見つかりません。
55Symbol不要任意の有効な値String現在の位置報告が作成されているシンボル。PosReqResult (tag=728) が VALID_REQUEST でない場合は設定されない。
702NoPositions不要1StringPosReqResult (tag=728) が VALID_REQUEST の場合は 1、そうでない場合は設定されない。
704LongQty不要任意の有効な値String買い取引の場合はポジションの建玉数量、売り取引の場合は 0 に等しい。PosReqResult (tag=728) が VALID_REQUEST でない場合は設定されない。
705ShortQty不要任意の有効な値String売り取引の場合はポジションの建玉数量、買い取引の場合は 0 に等しい。PosReqResult (tag=728) が VALID_REQUEST でない場合は設定されない。
730SettlPrice不要任意の有効な値String現在のポジションレポートにおけるオープン済み数量の平均価格。
1000AbsoluteTP不要任意の有効な値Price利食いがトリガーされる絶対価格。
1002AbsoluteSL不要任意の有効な値Priceストップロスが発動される絶対価格。
1004TrailingSL不要任意の有効な値Booleanストップロスがトレイリングであるかどうかを示す。
N = ストップロスはトレイリングしない;
Y = ストップロスがトレイリングしている。
1005TriggerMethodSL不要任意の有効な値Integerストップロスのトリガー方法。
1 = ストップロスは取引側でトリガーされる。
2 = ストップロスは反対側(買いポジションの場合はアスク、売りポジションの場合はビッド)によってトリガーされる。
3 = ストップロスは、取引側によって2ティック連続でトリガーされる。
4 = 反対側(買いポジションの場合は2回目のアスクティック、売りポジションの場合は2回目のビッドティック)により、2ティック連続でストップロスがトリガーされる。
1006GuaranteedSL不要任意の有効な値Booleanストップ・ロスが保証されているかどうかを示す。
N = ストップロスは保証されていない。
Y = ストップロスが保証されている。
Standard Trailer

Order Cancel Request (MsgType(35)=F)

タグ フィールド名必須       FIXフォーマット    脚注
Standard Header
41OrigClOrdID任意の有効な値Stringクライアントによって割り当てられた、キャンセルされる注文の一意の識別子。
37OrderID不要任意の有効な値StringcServerによって返された注文の一意のID。
11ClOrdID任意の有効な値Stringクライアントによって割り当てられたキャンセルリクエストの一意なID。
Standard Trailer

以下のオーダーキャンセルリクエストのメッセージの例を参照。

Request

8=FIX.4.4|9=115|35=F|34=2|49=live.theBroker.12345|50=Trade|52=20170721-13:41:21.694|56=CSERVER|57=TRADE|11=jR8dBPcZEQa9|41=n9Tm8x1AavO5|10=182|

Response (Success)

8=FIX.4.4|9=221|35=8|34=3|49=CSERVER|50=TRADE|52=20170721-13:41:21.784|56=live.theBroker.12345|57=Trade|11=jR8dBPcZEQa9|14=0|37=641|38=100000|39=4|40=2|41=n9Tm8x1AavO5|44=1.499|54=1|55=1|59=1|60=20170721-13:41:21.760|150=4|151=100000|721=624|10=180|

Response (Failed)

8=FIX.4.4|9=174|35=j|34=3|49=CSERVER|50=TRADE|52=20170721-13:41:21.856|56=live.theBroker.12345|57=Trade|58=ORDER_NOT_FOUND:Order with clientOrderId=n9Tm8x1AavO5 not found.|379=jR8dBPcZEQa9|380=0|10=075|

Order Cancel Reject (MsgType(35)=9)

タグ フィールド名必須       FIXフォーマット     脚注
Standard Header
37OrderID任意の有効な値Stringシステムがキャンセルできなかった注文の一意の識別子。
11ClOrdID任意の有効な値Stringオーダーキャンセル依頼の一意の識別子。
41OrigClOrdID不要任意の有効な値Stringクライアントによって割り当てられた、キャンセルされようとした注文の一意の識別子。
39OrdStatus任意の有効な値Char0 = 新規;
1 = 部分的に満たされている;
2 = 満たされた;
8 = 拒否;
4 = キャンセル(オーダーが部分的に満たされた場合、LeavesQty はキャンセルされ、その後に満たされることはない);
C = 期限切れ。
434CxlRejResponseTo1 or 2Char1 = キャンセル注文を拒否する。
2 = 他の端末からの訂正注文を拒否する。
58Text不要任意の有効な値Stringオーダー実行中。
Standard Trailer

以下の注文キャンセル拒否メッセージの例を参照。

Response

8=FIX.4.4|9=156|35=9|34=3|49=CSERVER|50=TRADE|52=20181024-12:35:02.896|56=live.theBroker.12345|57=Trade|11=gBljx7YOg5jY|37=629|39=0|41=FdXLfS0tTyUL|58=Order is under execution|434=1|10=109|

Order Cancel/Replace Request (MsgType(35)=G)

タグ フィールド名必須      FIXフォーマット    脚注
Standard Header
41OrigClOrdID任意の有効な値Stringクライアントによって割り当てられた、訂正される注文の一意の識別子。
37OrderID不要任意の有効な値Stringサーバーが割り当てる、訂正される元の注文の一意のID。使用するのが望ましい。
11ClOrdID任意の有効な値Stringクライアントによって割り当てられた、一意のamendリクエストID。
38OrderQty任意の有効な値Qty古い値を置き換えるための、既存または新たに指定された量。
44Price不要任意の有効な値Price古い値を置き換えるための、既存または新たに指定された指値。指値注文にのみ有効。
99StopPx不要任意の有効な値Price古い値を置き換えるための、既存または新しく指定された逆指値。逆指値注文にのみ有効。
126ExpireTime不要20140215-07:24:55Timestamp既存の有効期限または新たに指定された有効期限。保留中の注文に対してのみ有効。
Standard Trailer

以下の注文キャンセル/リプレイスリクエストのメッセージの例を参照してください。

Request

8=FIX.4.4|9=123|35=G|34=3|49=live.theBroker.12345|50=Trade|52=20170721-13:42:17.680|56=CSERVER|57=TRADE|11=Is03AvsknNYK|38=5000|41=n9Tm8x1AavO5|44=1.1|10=010|

Response (Success)

8=FIX.4.4|9=192|35=8|34=3|49=CSERVER|50=TRADE|52=20170721-13:42:18.784|56=live.theBroker.12345|57=Trade|11=Is03AvsknNYK|14=0|37=629|38=5000|39=0|40=2|44=1.1|54=1|55=1|59=1|60=20170721-13:42:18.760|150=5|151=5000|721=624|10=150|

Response (Failed)

8=FIX.4.4|9=171|35=j|34=3|49=CSERVER|50=TRADE|52=20170721-13:42:18.784|56=live.theBroker.12345|57=Trade|58=ORDER_NOT_FOUND:Order with orderId:4429421711699105367 isn't found|379=NXek3EzJvMme|380=0|10=245|

Market Data Request Reject (MsgType(35)=Y)

タグ フィールド名必須       FIXフォーマット    脚注
Standard Header
262MDReqID任意の有効な値StringリクエストのMDReqID(tag=262)を参照しなければならない。
281MDReqRejReason不要任意の有効な値Integer0 = 不明なシンボル
4 = サポートされていない SubscriptionRequestType (tag=263)
5 = サポートされていない MarketDepth (tag=264).
Standard Trailer

以下のマーケットデータリクエスト拒否メッセージの例を参照。

Request

8=FIX.4.4|9=148|35=V|34=2|49=live.theBroker.12345|50=Quote|52=20170920-09:52:13.032|56=CSERVER|57=QUOTE|262=CS8260:sXlXex|263=1|264=0|265=1|146=1|55=CS8260|267=2|269=0|269=1|10=129|

Reject

8=FIX.4.4|9=164|35=Y|34=2|49=CSERVER|50=QUOTE|52=20170920-09:52:13.036|56=live.theBroker.12345|57=Quote|58=INVALID_REQUEST: Expected numeric symbolId, but got CS8260|262=CS8260:sXlXex|281=0|10=236|

Request

8=FIX.4.4|9=136|35=V|34=6|49=live.theBroker.12345|50=Quote|52=20170920-09:52:13.199|56=CSERVER|57=QUOTE|262=EwOhiWvMdCpc|263=1|264=3|146=1|55=1|267=2|269=0|269=1|10=182|

Reject

8=FIX.4.4|9=157|35=Y|34=6|49=CSERVER|50=QUOTE|52=20170920-09:52:13.201|56=live.theBroker.12345|57=Quote|58=INVALID_REQUEST: MarketDepth should be either 0 or 1|262=EwOhiWvMdCpc|281=5|10=088|

Security List Request (MsgType(35)=x)

タグ フィールド名必須       FIXフォーマット     脚注
Standard Header
320SecurityReqID任意の有効な値Stringセキュリティ定義リクエストの一意のID。
559SecurityListRequestType0Integerセキュリティ・リスト・リクエストのタイプ。0 = 記号(tag=55)のみサポート。
55Symbol不要任意の有効な値Integerシンボル名を解決するためのID。
Standard Trailer

以下のセキュリティ・リスト・リクエスト・メッセージの例を参照。

Request

8=FIX.4.4|9=107|35=x|34=3|49=live.theBroker.12345|50=Trade|52=20180427-12:24:27.106|56=CSERVER|57=TRADE|55=39|320=ILCea0JkdQEm|559=0|10=248|

Responses

8=FIX.4.4|9=158|35=y|34=3|49=CSERVER|50=TRADE|52=20180427-12:24:27.107|56=live.theBroker.12345|57=Trade|320=ILCea0JkdQEm|322=responce:ILCea0JkdQEm|560=0|146=1|55=39|1007=NZDCHF|1008=4|10=088|

Security List (MsgType(35)=y)

タグ フィールド名必須       FIXフォーマット    脚注
Standard Header
320SecurityReqID任意の有効な値Stringセキュリティ定義リクエストの一意のID。
322SecurityResponseID任意の有効な値Stringセキュリティ・リスト・レスポンスの一意のID。
560SecurityRequestResult0IntegerSecurity Requestメッセージに返される結果。有効な値は以下の通り:
0 = 有効なリクエスト
1 = 無効またはサポートされていないリクエスト
2 = 選択条件に一致する計器が見つからない
3 = 測定器データを取得する権限がない
4 = 測定器データが一時的に利用できない
5 = 測定器データの要求がサポートされていない。
146NoRelatedSym不要任意の有効な値Integer繰り返し記号の数を指定する。
55Symbol不要任意の有効な値Integer機器識別はSpotware社が提供。
1007SymbolName不要任意の有効な値Stringシンボル名。
1008SymbolDigits不要任意の有効な値Integer記号の桁数。0から5までの値が可能。
Standard Trailer

以下のセキュリティ・リスト・メッセージの例を参照。

Response

8=FIX.4.4|9=3977|35=y|34=2|49=CSERVER|50=TRADE|52=20180426-12:07:37.816|56=live.theBroker.12345|57=Trade|320=Sxo2Xlb1jzJC|322=responce:Sxo2Xlb1jzJC|560=0|146=143|55=1|1007=EURUSD|1008=5|55=2|1007=GBPUSD|1008=5|55=3|1007=EURJPY|1008=3|55=4|1007=USDJPY|1008=3|55=5|1007=AUDUSD|1008=5|55=6|1007=USDCHF|1008=5|55=7|1007=GBPJPY|1008=3|55=8|1007=USDCAD|1008=5|55=9|1007=EURGBP|1008=5|55=10|1007=EURCHF|1008=5|55=11|1007=AUDJPY|1008=2|55=12|1007=NZDUSD|1008=5|55=13|1007=CHFJPY|1008=2|55=14|1007=EURAUD|1008=4|55=15|1007=CADJPY|1008=2|55=16|1007=GBPAUD|1008=4|55=17|1007=EURCAD|1008=4|55=10001|1007=USDCFDSAX|1008=5|55=18|1007=AUDCAD|1008=4|55=10002|1007=CD3295|1008=5|55=19|1007=GBPCAD|1008=4|55=10003|1007=DU3295|1008=5|55=20|1007=AUDNZD|1008=4|55=10004|1007=CS5965|1008=2|55=21|1007=NZDJPY|1008=2|55=10005|1007=CS6014_3|1008=5|55=22|1007=USDNOK|1008=4|55=10006|1007=DU6014_3|1008=5|55=23|1007=AUDCHF|1008=4|55=10007|1007=CS6014_4|1008=5|55=24|1007=USDMXN|1008=4|55=10008|1007=DU6014_4|1008=5|55=25|1007=GBPNZD|1008=4|55=10009|1007=CS5953|1008=5|55=26|1007=EURNZD|1008=4|55=10010|1007=CS6407_01_EURUSD|1008=5|55=27|1007=CADCHF|1008=4|55=10011|1007=CS6407_01_GBPUSD|1008=5|55=28|1007=USDSGD|1008=5|55=10012|1007=CS6407_02_EURUSD|1008=5|55=29|1007=USDSEK|1008=4|55=10013|1007=CS6407_03_EURUSD|1008=5|55=30|1007=NZDCAD|1008=4|55=31|1007=EURSEK|1008=4|55=10015|1007=CS7847_01_EURUSD|1008=5|55=32|1007=GBPSGD|1008=4|55=10016|1007=CS7847_01_GBPUSD|1008=5|55=33|1007=EURNOK|1008=4|55=10017|1007=CS7847_02_EURUSD|1008=5|55=34|1007=EURHUF|1008=2|55=10018|1007=CS7847_03_EURUSD|1008=5|55=35|1007=USDPLN|1008=4|55=10019|1007=CS7847_04_GBPUSD|1008=5|55=36|1007=USDDKK|1008=4|55=10020|1007=CS9004S|1008=2|10=096|