次> 【QuickFIX】02 ログイン時にPassword(554)を送信
FIXプロトコルのFIX4.4に準拠したプログラムを開発です。
フリーのFIXライブラリ? QuickFIX を利用してみます。
C++からMySQLに接続したり
QuickFIXクライアントからCurrenexのサーバに接続したりして
取引したり口座情報を取得したりしてみます。
##コンパイル環境準備
$ sudo yum install -y \
gcc-c++ \
automake \
autoconf \
libtool \
libxml2 \
libxml2-devel \
mysql-devel \
libxslt \
psmisc \
swatch \
ruby-devel
##QuickFIXを拾ってきて
$ git clone http://github.com/quickfix/quickfix.git
##コンパイル
~]$ cd quickfix/
quickfix]$ ./bootstrap
quickfix]$ ./configure --with-mysql
quickfix]$ make
##データベース準備(DB,ユーザ,権限)
コンパイルが通ったらテストのためのデータベースを準備します
( with-mysql のため )
$ mysql -u root -p
mysql> CREATE DATABASE Quick;
mysql> CREATE USER QuickUSER@localhost IDENTIFIED BY 'QuickPASS';
mysql> GRANT ALL PRIVILEGES on Quick.* to QuickUSER@localhost;
mysql> quit
メモ:MySQL8 の場合は以下
$ mysql -u root -p
mysql> SET GLOBAL validate_password.length=4;
mysql> SET GLOBAL validate_password.mixed_case_count=0;
mysql> SET GLOBAL validate_password.number_count=0;
mysql> SET GLOBAL validate_password.special_char_count=0;
mysql> SET GLOBAL validate_password.policy=LOW;
mysql> show variables like '%validate_password%';
mysql> CREATE DATABASE Quick;
mysql> CREATE USER QuickUSER@localhost IDENTIFIED WITH mysql_native_password BY 'QuickPASS';
mysql> GRANT ALL PRIVILEGES on Quick.* to QuickUSER@localhost;
mysql> select user, host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| QuickUSER | localhost | mysql_native_password |
mysql> quit
##データベース接続確認
$ mysql -u QuickUSER -p Quick
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Quick |
+--------------------+
2 rows in set (0.00 sec)
mysql> quit
##各種テーブルの準備
各ファイルのデータベース名を書き換えて実行します
( quickfix -> Quick )
quickfix]$ cd src/sql/mysql/
mysql]$ vi sessions_table.sql
-USE quickfix;
+USE Quick;
DROP TABLE IF EXISTS sessions;
mysql]$ vi messages_table.sql
-USE quickfix;
+USE Quick;
DROP TABLE IF EXISTS messages;
mysql]$ vi messages_log_table.sql
-USE quickfix;
+USE Quick;
DROP TABLE IF EXISTS messages_log;
mysql]$ vi event_log_table.sql
-USE quickfix;
+USE Quick;
DROP TABLE IF EXISTS event_log;
mysql]$ mysql -u QuickUSER -p < sessions_table.sql
mysql]$ mysql -u QuickUSER -p < messages_table.sql
mysql]$ mysql -u QuickUSER -p < messages_log_table.sql
mysql]$ mysql -u QuickUSER -p < event_log_table.sql
mysql]$ mysql -u QuickUSER -p Quick
mysql> show tables;
+---------------------+
| Tables_in_Quick |
+---------------------+
| event_backup_log |
| event_log |
| messages |
| messages_backup_log |
| messages_log |
| sessions |
+---------------------+
6 rows in set (0.00 sec)
mysql> quit
mysql]$ cd ../../..
エラーなく実行できること
ユーザ名、パスワードは大文字小文字も区別されるので注意すること
##動作確認テスト用設定ファイル更新
quickfix]$ vi ./test/cfg/ut.cfg
[DEFAULT]
MySQLStoreDatabase=Quick
MySQLStoreUser=QuickUSER
MySQLStorePassword=QuickPASS
MySQLStoreHost=localhost
# MySQLStorePort=[port]
##動作確認テスト
quickfix]$ make check
エラーが出たとしても今回はFIX4.4しか使わないので、FIX44以外の場所であれば無視で
エラー箇所を特定する場合は、わかりやすいように着色してみると良いかも
watchfor /fix44.*success/
echo green
watchfor /failure/
echo red
watchfor /.*/
echo
quickfix]$ cd test/
test]$ swatch --config-file=swatchrc --read-pipe=./check.sh
すると赤色行で表示されるので分かりやすいはず
##インストール
quickfix]$ sudo make install
サンプルのコンパイル
quickfix]$ cd examples/tradeclient
tradeclient]$ rm example_tradeclient_vs1?.vcxproj
tradeclient]$ make clean
tradeclient]$ ls
Application.cpp Application.h Makefile Makefile.am Makefile.in tradeclient.cpp
tradeclient]$ make
サンプルの設定ファイル準備
tradeclient]$ cp ../../bin/cfg/tradeclient.cfg .
tradeclient]$ vi tradeclient.cfg
[DEFAULT]
ConnectionType=initiator
ReconnectInterval=60
FileStorePath=store
FileLogPath=log
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=Y
DataDictionary=FIX44.xml
HttpAcceptPort=9911
ValidateUserDefinedFields=N
ResetOnLogout=Y
ResetOnLogon=Y
[SESSION]
BeginString=FIX.4.4
SenderCompID=CLIENT1
TargetCompID=SERVER
SocketConnectHost=127.0.0.1
SocketConnectPort=5001
HeartBtInt=30
##FIX44の設定ファイルをコピー
tradeclient]$ cp ../../spec/FIX44.xml .
とりあえず、ソースを拾ってきて正常にコンパイルできることの確認と
開発を続けていくための設定ファイルの準備が完了です
次> 【QuickFIX】02 ログイン時にPassword(554)を送信
一覧
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