9
Help us understand the problem. What are the problem?

posted at

updated at

【QuickFIX】01 サンプルのコンパイル

次> 【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
ut.cfg
[DEFAULT]
MySQLStoreDatabase=Quick
MySQLStoreUser=QuickUSER
MySQLStorePassword=QuickPASS
MySQLStoreHost=localhost
# MySQLStorePort=[port]

動作確認テスト

quickfix]$ make  check

エラーが出たとしても今回はFIX4.4しか使わないので、FIX44以外の場所であれば無視で
エラー箇所を特定する場合は、わかりやすいように着色してみると良いかも

test/swatchrc
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
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


Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
9
Help us understand the problem. What are the problem?