Mariusz Prowaźnik

o programowaniu w Javie, Scali i Clojure.


Jak software pomaga zarabiać bankom na rynkach finansowych. Na przykładzie systemu THOR.

Już prawie dwa lata programuję systemy do "algorithmic trading" dla finansowej korporacji i zdobyłem nieco wglądu w rynki kapitałowe od strony technologicznej. Długo kusiło mnie, żeby coś na ten temat napisać, ale jako zwykły programista bez wykształcenia ekonomicznego czy finansowego, bałem się, że mogę wprowadzić kogoś w błąd. Niemniej, niektóre komputerowe "maszyny do pieniędzy" oparte są na całkiem prostej do zrozumienia idei i jedną z nich opiszę. Będzie to THOR, który powstał w Royal Bank of Canada.

THOR wysyłał zlecenia kupna, bądź sprzedaży instrumentów finansowych, dodając sztuczne opóźnienia w taki sposób, aby zlecenia docierały na różne rynki w tym samym momencie.

Już tłumaczę, dlaczego jest to ważne. Kupienie dużej ilości akcji, to nie taka prosta sprawa. I to nie jest tylko problem jakichś bardzo bogatych inwestorów, ale też wielu firm z tzw. buy side, które zarządzają kapitałem w jakiś sposób powierzonym im przez ich klientów. Są to np. fundusze inwestycyjne, fundusze emerytalne, ubezpieczyciele... Oni próbują ten kapitał jakoś sensownie ulokować i zbudować portfolio instrumentów finansowych, które w przyszłości może będą warte więcej niż teraz. Wyobraź sobie teraz, że jesteś takim menedżerem funduszu, właśnie skończyłeś grać w Wiedźmina 3 i zdecydowałeś dołożyć do portfela inwestycyjnego akcje CD Projekt za 500 tyś złotych. No ale na giełdzie do kupienia jest:

Ilość   Cena    Wartość
-----------------------
   150  22.40     3360
   300  22.45     6735
  1000  23.10    34100
 15000  24.00   360000
         ...
(dane zmyślone)

Gdyby kupić dużą ilość akcji na jeden raz, cena może dużo podskoczyć. Z pomocą przychodzą brokerzy i dealerzy dla klientów instytucjonalnych. Dealer powie np. "kupię sobie te akcje z rynku, a potem odsprzedam tobie za 23.20 za sztukę". Broker powie np. "kupię je w twoim imieniu najtaniej jak umiem, ale biorę 0.1 % prowizji". Taki dealer lub broker po przyjęciu zlecenia, najprawdopodobniej podzieli je na dużo mniejsze i będzie je wykonywał przez jakiś dłuższy czas, przy okazji kombinując i robiąc zmyłki, żeby inni gracze na rynku nie zorientowali się, że jest ktoś zainteresowany kupnem dużej ilości akcji. Taka informacja jest bardzo cenna. Istnieją brokerzy na zagranicznych rynkach, którzy oferują swoje algorytmy do rozbijania zleceń jako usługę, np Fidelity.

Sprawę komplikuje fakt, że w USA jest kilka giełd, gdzie można handlować akcjami (np. NYSE, BATS, IEX ...) oraz kilka innych wynalazków nie będących giełdami (np. różnego typu ECN, dark pools). Dlatego taki automatyczny system musi jeszcze w jakiś w miarę niegłupi sposób wybrać gdzie jakie zlecenia wysłać. Stąd OR (Order Routing) w nazwie THOR.

Przesyłanie zleceń elektronicznie na różne giełdy zrodziło kolejne komplikacje dla brokerów i dealerów. Powstawały bowiem okazje do arbitrażu, dostępne dla High Frequency Traders, którzy dysponowali szybszą technologią.

Załóżmy, że klient dealera chce akcje XXX za 1 mln USD. Tak się składa, że na rynkach jest tyle do kupienia:

Giełda   Cena     Ilość
-----------------------
A        100.00    100K
B        100.00    300K
C        100.00    200K
D        100.00    500K
(dane zmyślone)

Dealer wysyła zlecenia "po każdej cenie", ale okazuje się, że zrealizowały się nie za 100 USD tylko np. 101 USD. Co się stało?

Jeśli na jedną z giełd zlecenie docierało wcześniej niż na inne, to ktoś inny, dysponujący szybką technologią, mógł zauważyć, że jest zaintresowanie XXX i wykupić je na pozostałych giełdach, zanim dotrą zlecenia od dealera.

THOR był na to odporny, bo wprowadzał sztuczne opóźnienia, które sprawiały, że zlecenia przychodziły na wszystkie giełdy w mniej więcej tym samym momencie. Mała zmiana w działaniu systemu, a duża różnica w efektach.

Źródła

  • "Flash Boys" - Michael Lewis
  • "The Complete Guide to Capital Markets for Quantitative Professionals" - Alex Kuznetsov