バフェット・コードのブログ

企業分析やプロダクト開発にまつわる記事を配信中

FIXプロトコル

こんにちは。kosappiです。バフェットコードでは主にRails関連の開発を担当しております。

最近の楽しみはもっぱら月に1度のブルースセッションです。近所のライブハウスに遊びに行っています。知らない人と演奏してうまくいくと良い気分になります。

FIX

今日日、電子取引以外の手段で株式を売買することは稀だと思います。 この電子取引ですが、どのようなプロトコルで会話が成立しているか気になったことはないでしょうか?

Financial Information eXchange(通称FIX)プロトコルは、電子取引の標準化を目的としたプロトコルで、現在では株取引に限らずFXでも通信プロトコルのスタンダードになっています。

この記事ではさわりだけを簡単に説明します。 きちんとした説明は書籍を読んでみて欲しいです。2008年出版で、プロトコルのバージョンも古いですが、基本的な仕様はあまり変わっていないので、問題ないと思います。 https://amzn.asia/d/06JrbCrV

また、普段使いのリファレンスとしてはFIXimateというウェブサイトが便利です。各フィールドの仕様について、バージョンも考慮して参照できます。 https://fiximate.fixtrading.org/

概要

TCP上で定義されるプロトコルです。(HTTPと同じ階層にいる)

登場人物は2人いて、これらがいわゆるクライアントとサーバーになります。FIXではAcceptorとInitiatorと呼ばれます。

この2者の間でどのような会話をするかが定義されています。

基本的にはTCPのコネクションが確立されたあと、自由にメッセージを送信します。(HTTPのように必ずレスポンスがあるわけではない)

会話の流れ

InitiatorがAcceptorへ認証を依頼し、セッションが確立した後、発注を行います。 下記はInitiatorから見た会話の流れです。

  1. 認証
  2. 発注する
  3. 結果を受け取る
  4. 2-3を繰り返す
  5. ログアウト

具体的なメッセージ

メッセージはフィールドが並んだものです。 フィールドの間には区切り文字として"\u0001"が挿入されます。(サンプルではわかりやすいように縦棒|を挿入しています) フィールドはkey=valueの形になっています。

たとえば、認証する場合は下記のようなメッセージをInitiatorがAcceptorに向けて送信します。 ここで、フィールド35の値がAにあっていますが、これがLogonを示しています。

8=FIX.4.2|9=74|35=A|34=978|49=TESTSELL3|52=20190206-16:29:19.208|56=TESTBUY3|98=0|108=60|10=137|

また、注文をする際は下記のようなメッセージを送ります。 フィールド35の値がDですが、これはNewOrderSingleを示しています。

8=FIX.4.2|9=163|35=D|34=972|49=TESTBUY3|52=20190206-16:25:10.403|56=TESTSELL3|11=141636850670842269979|21=2|38=100|40=1|54=1|55=AAPL|60=20190206-16:25:08.968|207=TO|6000=TEST1234|10=106|

注文が受け入れらたり、約定がついたりすると、Acceptorから結果が返ってきます。 これはExecutionReportと呼ばれています。

8=FIX.4.2|9=271|35=8|34=974|49=TESTSELL3|52=20190206-16:26:09.059|56=TESTBUY3|6=174.51|11=141636850670842269979|14=100.0000000000|17=3636850671684357979|20=0|21=2|31=174.51|32=100.0000000000|37=1005448|38=100|39=2|40=1|54=1|55=AAPL|60=20190206-16:26:08.435|150=2|151=0.0000000000|10=194|

他にもいろいろな機能があるので、興味がある方はぜひリファレンスを見たり、書籍を読んでみてください。

最後に

バフェットコードでは株取引に興味があるエンジニアを募集しています! (なお、バフェットコードでは実際の取引は提供していません)

career.buffett-code.com