Protocolul Financial Information eXchange (FIX) este un tipar de mesaje utilizat pentru schimbul de informație financiară. A fost creat pentru schimbul de informație în tranzacții și pe piețe, schimb efectuat în timp real.
Când a fost creat inițial, era destinat automatizării comunicării prin telefon. Prima comunicare via FIX s-a realizat între Fidelity Investments și Salomon Brothers. Una din motivațiile din spatele comunicării automate de mașini a fost reducerea numărului de erori cauzate de factorii umani.
Azi, este utilizat intensiv de lumea financiară, de la companiile de brokerage la instituțiile de schimb și vânzări.
Există două tipuri de mesaje FIX:
Mesaje de tip admin. folosite pentru transfer de informație administrativă de bază, precum logins, heartbeats și interogări pentru a trimite mesajele lipsă.
Protocolul FIX este o listă de mesaje predefinite ce conține o serie de câmpuri.
Pentru a înțelege un mesaj FIX, destinatarul trebuie să aibă un dicționar care să decodeze mesajul.
Orice mesaj FIX conține o listă de câmpuri delimitate de caractere SOH (ASCII 01). Fiecare câmp include un tag (o etichetă, un număr întreg pozitiv) și o valoare.
Un mesaj FIX conține trei părți:
Header - conține informație despre versiunea protocolului FIX, lungimea și tipul mesajului. În ultimele versiuni, oferă și informații despre expeditor și destinatar alături de informații opționale.
Body - conține mesajul propriu-zis, sub forma unui set de câmpuri și de valori asociate. Numărul de câmpuri poate varia. Fiecare tip de mesaj are câmpuri obligatorii și câmpuri opționale, informația fiind parte din dicționar.
Să luăm următorul exemplu. În acest exemplu, " | " este folosit în loc de SOH, pentru un grad mai mare de lizibilitate.
8=FIX.4.2 | 9=178 | 35=8 | 49=PHLX | 56=PERS | 52=20071123-05:30:00.000 | 11=ATOMNOCCC9990900 | 20=3 | 150=E | 39=E | 55=MSFT | 167=CS | 54=1 | 38=15 | 40=2 | 44=15 | 58=PHLX EQUITY TESTING | 59=0 | 47=C | 32=0 | 31=0 | 151=15 | 14=0 | 6=0 | 10=128 |
Aici, 8=FIX.4.2
este primul câmp al mesajului și al headerului. Conține tagul 8, ce corespunde lui BeginString și valorii - FIX.4.2, care este versiunea FIX a acestui mesaj.
Există câteva tooluri care ajută la parsarea unui mesaj FIX. Eu utilizez Fix Parser pentru a analiza mesajul.
Headerul este format din primele câmpuri. Acesta este un mesaj trimis de expeditor cu compID PHLX unui destinatar cu compID PERS. Acest mesaj este un raport de execuție pentru confirmarea schimbărilor unei comenzi existente între un expeditor și un destinatar. În acest caz, PENDING REPLACE reprezintă statusul comenzii. Mesajul mai conține și alte informații și, evident, este mai ușor de citit versiunea parsată comparativ cu mesajul FIX. Un astfel de mesaj poate fi tradus cu un dicționar de date. Acest dicționar poate fi un fișier XML care descrie formatul mesajelor. Aici este un fragment dintr-un dicționar utilizat de QuickFix ( implementarea open source a FIX Engine):
<fix type=”FIX” major=”4” minor=”2” servicepack=”0”>
<header>
<field name=”BeginString” required=”Y”/>
<field name=”BodyLength” required=”Y”/>
<field name=”MsgType” required=”Y”/>
<field name=”SenderCompID” required=”Y”/>
<field name=”TargetCompID” required=”Y”/>
</header>
….
<message name=”ExecutionReport” msgtype=”8” msgcat=”app”>
<field name=”OrderID” required=”Y”/>
<field name=”SecondaryOrderID” required=”N”/>
<field name=”ExecID” required=”Y”/>
<field name=”ExecTransType” required=”Y”/>
……
<field name=”ExecRefID” required=”N”/>
<field name=”ExecType” required=”Y”/>
<field name=”OrdStatus” required=”Y”/>
</message>
<trailer>
<field name=”SignatureLength” required=”N”/>
<field name=”Signature” required=”N”/>
<field name=”CheckSum” required=”Y”/>
</trailer>
<fields>
<field number=”1” name=”Account” type=”STRING”/>
<field number=”17” name=”ExecID” type=”STRING”/>
<field number=”20” name=”ExecTransType” type=”CHAR”>
<value enum=”0” description=”NEW”/>
<value enum=”1” description=”CANCEL”/>
<value enum=”2” description=”CORRECT”/>
<value enum=”3” description=”STATUS”/>
</field>
……
</fields>
</fix>
Dicționarul descrie conținutul fiecărui mesaj FIX. Headerul se aplică tuturor mesajelor, și trailerului. Descrierea mesajului conține toate câmpurile ce pot fi utilizate pentru acel tip de mesaj. La finalul dicționarului, există o listă de câmpuri, cu descriere și valori posibile pentru tipurile enum.
Utilizarea dicționarului permite oricărei entități să adauge câmpuri customizate.
Primii pași pentru a ajunge la nivelul de azi, în ceea ce privește standardizarea comunicării în lumea financiară prin intermediul protocolului FIX, au fost efectuați acum 25 de ani, când comunicarea dintre Fidelity Investments și Salomon Brothers a fost transferată spre aceste date citite și interpretate de mașini.
Fiecare nouă versiune a protocolului a introdus noi tipuri de mesaje și câmpuri pentru a veni în întâmpinarea nevoilor unei game largi de utilizatori.
Versiunea 5.0 a adus o schimbare majoră. A introdus paradigma Transport Independence care separă FIX Session Protocol de Application Protocol. Prin aceasta, mesajele de tip aplicație pot fi trimise prin intermediul oricărei tehnologii de transport, FIX Session Protocol fiind una dintre ele.
Numită inițial FIX Protocol Ltd, Fix Trading Community a fost creată în 1998 pentru a ajuta la standardizarea protocolului FIX. De asemenea, aceasta ajută la dezvoltarea protocolului pentru a veni în întâmpinarea nevoilor clienţilor. Comunitatea promovează acest protocol drept un limbaj unificat pentru piețele financiare.
Azi FIX Trading Community este o organizație independentă și neutră care promovează și dezvoltă familia standardelor FIX, aici incluzându-se și protocolul FIX. Comunitatea explorează și alte standard de tip open care nu fac parte din propriul patrimoniu, motiv pentru care și-a schimbat numele în Trading Community.
Este o organizație mondială cu membri de pe șase continente, inclusiv firme comerciale, sedii de comercializare, reglementatori, vânzători și alți asociați din industrie. Este o comunitate ce reunește oameni din lumea financiară, o lume caracterizată de competitivitate.
http://www.fixtradingcommunity.org/FIXimate/FIXimate3.0/?language=en&version=FIX.4.2