Aprendendo a negociar na bolsa. Parte um: configurando um ambiente de teste


Nesta série de artigos, criaremos um ambiente para trabalhar com uma troca de testes e enviar mensagens com ela, entenderemos os termos básicos da troca e consolidaremos o conhecimento na prática.


UPD : O principal objetivo desta série de artigos é considerar de maneira abrangente a estrutura da troca e os conceitos básicos (transações, futuros, etc.) como parte do trabalho com o protocolo FIX . Não haverá vinculação a nenhuma troca específica, usaremos um exemplo de servidor pronto (simulador de troca) e, no futuro, implementaremos um cliente que pode ser modificado para interagir com uma troca real interessante para você.


Para configurar tudo o que você precisa, você precisará apenas de conhecimentos básicos de programação e da capacidade de usar o Git.


Para testar as mensagens, precisamos:


  • implementação do protocolo FIX: por exemplo, o QuickFix é uma implementação aberta em C ++ (também existe o QuickFix em Java (QuickFix / J), C # (QuickFix / N) e Go (QuickFix / Go));
  • , ( Open Source Java – QuikFIX/J);
  • ( , , MiniFIX).

FIX, . FIX 4.2.


FIX

FIX , . , . 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 .


:



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 :



ID – MINIFIX_CLIENTEXEC. (FIX 4.2) .


  • : , , ; , , ;
  • : Logon (MsgType = A) ; .

Connect . 4.2 9878, , localhost:9878:



, localhost IP- .

Logon- Logon-:



“ ”, , :


MiniFIX Transactions , ( , New):



( — , — ).


New Order Single (35=D).

, MiniFIX , , , New, Edit, Delete. , 38=1000 . 200:



Send, , :



  • SocketConnectPort;
  • – , SenderCompID TargetCompID ;
  • – ;
  • – ; Reset Sequence MiniFIX, ;
  • (, ); <3> Reject 58:


  • MiniFIX: ” – , “” ;
  • MiniFIX: Logon- – , , Logon.

Agora você pode testar o envio de vários tipos de mensagens usando o MiniFIX. Obviamente, para trabalhar diretamente com uma troca real, é melhor escrever sua própria implementação de cliente (por exemplo, em Java ou Go) ou usar um terminal de negociação. Mas, para entender a especificação das mensagens e entender como compor essas mensagens corretamente, esse ambiente de trabalho é suficiente. Na próxima parte, mostrarei quais instrumentos financeiros são negociados na bolsa de valores e como especificar corretamente os parâmetros para esses instrumentos ao fazer uma ordem de negociação. Para quem estiver interessado em detalhes técnicos e em escrever seu próprio cliente, pretendo escrever um artigo separado.


All Articles