プログラムを起動して、ログイン認証が通るとセッション開始の連絡が届きます
セッション開始の連絡は TradingSessionStatus で届くので、ちゃんと受け取れるようにしときます。
ちなみにこの メッセージを受信するまでは、向こうのサーバが準備できていないってことなのでメッセージ送っちゃだめだそうです。
セッションは取引用とレート用の2セッション張るので、2つとも開始の連絡が来たら活動開始ってことにしときます。
とりあえず、活動開始時には利用可能な通貨ペア情報と口座情報を取得するメッセージを投げることにしてみます。
(中身の実装はまた今度)
Application.h のヘッダーファイル修正
@@ -60,8 +60,7 @@ class Application :
m_sql = MySQLConnect();
m_accountID = getSetting("AccountID");
m_partyID = getSetting("PartyID");
- m_tradeSessionStatus = false;
- m_ratefeedSessionStatus = false;
+ m_tradingSessionStatus = 0;
}
~Application()
@@ -79,8 +78,7 @@ class Application :
std::string m_pass;
std::string m_host;
short m_port;
- bool m_tradeSessionStatus;
- bool m_ratefeedSessionStatus;
+ int m_tradingSessionStatus;
std::map<std::string, std::string> m_senderID;
std::map<std::string, std::string> m_targetID;
std::string m_accountID;
見切りで追加しといたやつを修正です
単なるカウンタにしちゃいます
メッセージ受信時処理 < h > TradingSessionStatus
#include "config.h"
#include "Application.h"
#include "quickfix/Session.h"
#include <iostream>
/* h */
void Application::onMessage(const FIX44::TradingSessionStatus& message, const FIX::SessionID& sessionID )
{
std::cout << "<h> TradingSessionStatus: " << std::endl << message.toXML() << std::endl;
switch( std::stoi(message.getField(FIX::FIELD::TradSesStatus)) )
{
case FIX::TradSesStatus_OPEN :
std::cout << "<h> TradingSessionStatus: OPEN " << std::endl;
if ( ++m_tradingSessionStatus == 2 )
{
/* <x> */ SecurityListRequest();
/* <AN> */ RequestForPositions();
}
break;
case FIX::TradSesStatus_CLOSED :
case FIX::TradSesStatus_PRE_CLOSE :
std::cout << "<h> TradingSessionStatus: CLOSE " << std::endl;
m_tradingSessionStatus--;
break;
default:
std::cout << "<h> TradingSessionStatus: OTHER " << std::endl;
break;
}
}
受信したメッセージのステータスを確認して処理振り分け
OPEN なら、カウンタを増やす
2セッションともOPENなら、活動開始
- 通貨ペア情報取得のために < x > SecurityListRequest を呼び出し
- 口座情報取得のために < AN > RequestForPositions も呼び出し
CLOSE なら、カウンタを減らします
<前 【QuickFIX】06 独自メッセージ仕様
次> 【QuickFIX】08 通貨ペア要求 SecurityListRequest
一覧
01 サンプルのコンパイル
02 ログイン時にPassword(554)を送信
03 送受信ログをMySQLに保存
04 情報保存用にMySQLコネクションを保持..他
05 各種メッセージの枠を作成
06 独自メッセージ仕様
07 セッション開始 TradingSessionStatus
08 通貨ペア要求 SecurityListRequest
09 通貨ペア取得 SecurityList
10 デモ環境サーバへ接続
11 ログ出力設定
12 マーケット情報要求 < V > MarketDataRequest
13 マーケット情報受信 < X > MarketDataIncrementalRefresh
14 口座情報要求 < AN > RequestForPositions
15 口座情報取得 < AZ > CollateralResponse