2014年11月にOANDAでAPIを申請したものの、その後の記事は全くありませんでした。
原因は、クライアントの作成に挫折していたからです (T^T)

一番の原因は、接続できない原因の切り分けでつまづいたことでした。
接続できない原因が、SSLの問題なのか、FIX設定の問題なのかが、うまく切り分けできませんでした。
QuickFIX/J標準機能、stunnelどちらも試してみましたが、どちらも上手くいかず。
2週間くらい(土日)悪戦苦闘していたものの、そのうちに飽きてきました・・・(必須のものではなかったし)

そうこうしているうちに、OANDA JapanでREST APIがサポートされました。
もともとFIXを使おうとした理由が、「JForexのストラテジーが生成したシグナルから、日本の口座に発注する」ことでした。
なので、REST APIの登場でFIXの必要性がぐんとさがり、かつMT4経由の口も作ったので、FIXは忘却の彼方へ行ってしまいました。

このたびC-NEXにFIX口座を開いたことにより、夏休みを使い再度FIXアプリ作成にチャレンジしてみました。

まずは、肝心のFIX engineの選定から。

前回時にはFIX Trading Commuityのengine開発メンバページで色々探してみました。
条件としては、無償(どこまでFIX使えるか不明のため)/ 登録不要(得体のしれない会社に晒したくない)ことから、以下の2つに絞っていました。

今回も前回から引き続き、以下2つから選択することにします。(評価は個人的感想です)

名称 QuickFIX/J Fix8
 URL http://www.quickfixj.org/ http://www.fix8.org/
 言語 Java C++
 プラットフォーム  any(Javaが動けばOK) Windows 32/64, OSX, Linux on IA32, x86-64
 ドキュメント  少
APIとスタートガイド
 中
左記に加えて専用フォーラムあり
 性能  不明  High performanceを謳っている
 ユーザ数  不明(少?)
ググるとQuickFIX(C++版)の英語情報は若干でてくるが・・・
 不明(少?)
ググっても他の物しかでてきませんw
 開発元  不明
Githubによるオープン開発
Fix8 Market Tech
FIX Trading Communityに登録あり
 結論  採用  不採用

選択のポイントは

  • 言語:どちらもあまり知識はないが、Javaの方がまだマシ
    GUIも考えると、Fix8はC#も必要となりそう。
  • プラットフォーム:Windows(desktp)/Linux(AWS)の両方で稼働させたい
  • 性能:個人クライアントだし問わない
  • 開発元:Fix8、QuickFIX/Jともに継続開発されているし、どちらでも問題なさそう

ということでQuickFIX/Jを選択しました。

サンプルのBanzaiをベースに開発しましたが、初心者のdummytopが引っかかったポイントは・・・

  1. 前回同様、うまく接続できない!!
    今回は夏休みで纏まった時間が取れたので、順を追って解消していきました。

    • SSL接続:wiresharkにより、鍵交換までうまくいっていることを確認!
      (表示上はtcpですが、decode asでSSLデコードすることで、TLSとして表示される)
      結果として、configに”SocketUseSSL=Y”とするだけで、SSL接続はOKでした。
    • ログイン情報:出力されたログを見てもどこが悪いのかがわかりません。
      そもそも、OANDAサーバから無応答なので、本当にログイン送信できているかも不安です。
      そこで、試しにC-NEXに接続してみると「フィールドが足り無いゾ」との応答が・・・( ゜_゜;)
      ログイン認証に失敗したときの対応が全く別でした。
      ・OANDA:無応答(セキュリティ対策のため)
      ・C-NEX:エラー応答
      C-NEXのおかげで原因がワカッタョ!!(なんとパスワードが入っていなかったwww)
      ※)OANDAはわかりにくいですが、”Webログインする際のIDとパスワード”となります。
  2. ログイン情報にパスワードが設定されない
    サンプルアプリ、APIを調べたりググったりしましたが、設定されない原因がわかりません。
    そもそも、サンプルのBanzaiにはパスワードの概念がなさそう。
    ということで、キレイではないですが、toAdmin()の中で自力で設定しました。
  3. 送信時のセション指定ってどうやるの?
    標準では、rateとorderは別セションとなります。
    オーダー送信時にはORDERに対して送信しますが、簡単に指定できないものか・・・

    Session.sendToTarget(message, “SenderCompID”, “OANDA/ORDER”);

    で上手くいきました。

  4. GUIの更新がデキネー!!
    せっかくなのでJavaFXでGUIを作ったのですが、バックグラウンドのFIXスレッドから更新しようとすると”FXのスレッドでないからダメ”と怒られてしまいます。
    これがいくらググっても対策がわかりませんでした。(この土日ずっとやってたかも)
    ・コントローラーをFIXクラスのstatic変数にbind:static変数更新時に実行時エラー
    ・FXクラスにstaticメソッドを作成して、メソッド内でstatic変数を更新:同じく実行時エラー
    色々苦戦したあげく、上手くいったのは
    ・FXクラスにstaticメソッドを作成し、この中でコントローラを更新する
    ・そのまま実行するとエラーとなるので、staticメソッドをPlatform.runLater()で実装する

     public static void setPrice(String s){
    Platform.runLater(new Runnable(){
    @Override
    public void run(){ price.set(s);   }
    });
    }

    こうすることで、ようやくFIXで受信したレートをGUI上に表示することができました。

過去に仕事上扱ってきたのが、サーバアプリ(主にC)だったので、Javaはともかく、クライアントのGUIプログラムには構造を含め非常に苦労しました。

以上により、ようやくFIXアプリ(の骨格)が完成しました。
とりあえず、Market Data Incremental RefreshとNew Order Singleができるようになったので、細かい注文やエラー処理は今後少しずつ作りこんでいく予定です。

テスト口座でですが、FIXで注文したポジションは「MT4で表示され、かつクローズできる」ことも確認できたので、万が一アプリがトチ狂っても問題なさそうです。

もともとFIXはJForexから国内口座に発注するための手段として考えていました。
しかし、今回C-NEXの開設により、JForexを介さずにCurrenexダイレクトでストラテジーを動かすことを最終目標にしようと考えています。
(SWFXと比較しても、tick数やボリュームで引けをとっていませんでしたし、スキャルピングのストラテジーだと、やはり他社のレートを基に動作するのは変ですしね)

ちなみに、OANDAとC-NEXではサポートしているメッセージがずいぶん異なっていました。(C-NEXの方が多かった)
最終的にはC-NEXで稼働させるのが目標です (^_^)v

最後に
前回からFIXアプリ開発に関して、いくらググってもほとんど情報がでてきませんでした。(特に日本語の情報)

日本でも、OANDA / C-NEX(YJFX!) / サクソバンクFX証券 等、個人ユーザが 直接FIX接続できる業者が増えています。
今後FIXユーザも増えていくことでしょうから、日本語の情報も増えていくことを期待しています。
dummytopも、拙いながらも情報発信していく予定です。

日本FIXユーザ会 みたいなのがあるといいですねぇ・・・ヾ(@^▽^@)ノ


“FIXアプリ ようやく完成(骨格のみ・・・)” への3件のフィードバック

  1. はじめまして
    ブログ拝見させていただいております。
    ありがとうございます。
    さて、C-NEX CurrenexにてFIXAPI接続を目指しております。
    しかし、プログラム超初心者(CとJAVAを独学中)で
    まずCーNEXのAPI口座開設のための
    FIXでの接続やメッセージ等の確認を行うための「コンファマーステスト」
    でわからなくて、何からどうしていいかという状態です。はずかしながら
    もしよろしければご教授頂けないでしょうか?
    いきなりで大変申し訳ありません。。。

    • tobbykkkさん、コメントありがとうございます。
      私が申請したときには”コンファーマーテスト?”が無かったので、お力になれそうにありません。
      ただし、私の経験上「クライアントアプリを1から作るのはすごく大変」だけど、「FIX接続してメッセージをやりとりするだけなら以外と簡単」だと言えます。
      YJFXは情報を殆ど公開してないので、同じFIX提供のオアンダの情報を参照するのも手だと思います。
      http://developer.oanda.com/fix-live/development-guide/
      また、FIX接続関連でしたら、例えばgitにライブラリが公開されています。
      https://github.com/search?utf8=%E2%9C%93&q=py+fix&type=
      これらを参考にされてはいかがでしょうか?

      • dummytop様

        お世話になります
        お忙しい所ご返信頂き誠にありがとうございます。
        そして、アドバイスまでいただき本当にありがとうございます。参考にさせて頂きます。
        本当にありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です