Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

次> 【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)を送信

nobu-maple
元Oracleマスター/いまは普通のシステム屋/JavascriptやPHPからCやC++まで言語はなんでも/中学でMSXのBASICプログラムをはじめてからいく年月/最近はUiPathでRPAなことも楽しい
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした