![](https://habrastorage.org/webt/dl/vr/tj/dlvrtjqqk_am65076owdlhopoc4.jpeg)
在本系列文章中,我们将创建一个用于进行测试交换和消息传递的环境,我们将了解基本的交换术语并在实践中巩固知识。
UPD:这一系列文章的主要目标是作为FIX协议工作的一部分,全面考虑交易所的结构和基本概念(交易,期货等)。不会绑定到任何特定的交易所,我们将使用现成的服务器示例(交易所模拟器),并且将来我们将实现可修改的客户端,以与您感兴趣的真实交易所进行交互。
要配置所需的一切,您只需要基本的编程知识和使用Git的能力。
要测试消息,我们需要:
- 实施 FIX协议:例如,QuickFix的是C中的开放实现++(也有在的QuickFix Java(注册的QuickFix / J),C#(QuickFix的/ N),并转到(QuickFix的/ GO));
- , ( Open Source Java – QuikFIX/J);
- ( , , MiniFIX).
FIX, . FIX 4.2.
FIXFIX , . , . FIX 4.2. FIX- / , .
FIX-: ( tag=value) XML.
FIX- , , , ASCII- SOH (0x01). , , Market 10000 Microsoft ( SOH ):
8=FIX.4.2 9=103 35=D 34=3 49=BANZAI 52=20121105-23:24:42 56=EXEC 11=1352157882577 21=1 38=10000 40=1 54=1 55=MSFT 59=0 10=062.
FIX-: (Message Header), (Message Body) (Message Trailer).
– <8>BeginString, FIX- (8=FIX.4.2). <9> BodyLength <35> MsgType. , D (35=D), — V (35=V).
, :
- <49> SenderCompID – (, );
- <56> TargetCompID – ;
- <56> SendingTime – UTC- ( YYYYMMDD-HH:MM:SS YYYYMMDD-HH:MM:SS.sss);
- <34> MsgSeqNum – ( 1 ).
MsgSeqNum 1, .
, : , , .. , .
FIX-. , .
– (<10> CheckSum), . . , .
FIX initiator executor/acceptor . , QuikFIX/J quickfixj-examples: quickfix.examples.executor .
:
![](https://habrastorage.org/webt/fn/pj/xh/fnpjxh5yrk7cnqaytvglumxzrek.png)
resources/quickfix/examples/executor/executor.cfg, :
[default]
ConnectionType=acceptor // ,
SenderCompID=EXEC //
TargetCompID=BANZAI //
[session]
BeginString=FIX.4.2 // - FIX4.2
SocketAcceptPort=9878 //
MINIFIX_CLIENT ( ).
MiniFIX . Session :
![](https://habrastorage.org/getpro/habr/post_images/330/781/03f/33078103faa46afc673e397a4c0cd978.png)
ID – MINIFIX_CLIENT – EXEC. (FIX 4.2) .
- : , , ; , , ;
- : Logon (MsgType = A) ; .
Connect . 4.2 9878, , localhost:9878:
![](https://habrastorage.org/getpro/habr/post_images/8a1/1f0/ba6/8a11f0ba63e30dbe8c2672064eaf7112.png)
, localhost IP- .
Logon- Logon-:
![](https://habrastorage.org/getpro/habr/post_images/626/f24/4c7/626f244c7b797362131e5fafc2a3f393.png)
“ ”, , :
![](https://habrastorage.org/webt/dg/ci/0y/dgci0yyph1vjp2qwigocn8hslkm.png)
MiniFIX Transactions , ( , New):
![](https://habrastorage.org/webt/0s/ul/pq/0sulpq6z9pefdxzzbyum-z0ic6e.png)
( — , — ).
– New Order Single (35=D).
, MiniFIX , , , New, Edit, Delete. , 38=1000 . 200:
![](https://habrastorage.org/getpro/habr/post_images/78c/708/260/78c7082601dce0aaf0b1f6f1a48c9039.png)
Send, , :
![](https://habrastorage.org/getpro/habr/post_images/3cd/cc2/b34/3cdcc2b343d74080e5c3682f136b855f.png)
- – SocketConnectPort;
- – , SenderCompID TargetCompID ;
- – ;
- – ; Reset Sequence MiniFIX, ;
- (, ); <3> Reject 58:
![](https://habrastorage.org/getpro/habr/post_images/a0a/4bc/72f/a0a4bc72f689692eabe0a3991bbaa658.png)
- MiniFIX: ” – , “” ;
- MiniFIX: Logon- – , , Logon.
现在您可以使用MiniFIX测试各种消息的发送。当然,要直接与真实交易所合作,最好编写自己的客户端实现(例如,使用Java或Go)或使用交易终端。但是,为了了解消息的规范并了解如何正确编写消息,这样的工作环境就足够了。在下一部分中,我将告诉您在证券交易所上交易哪些金融工具以及如何在下达交易订单时正确指定这些工具的参数。对于那些对技术细节感兴趣并编写自己的客户的人,我计划写一篇单独的文章。