Rychlost zpracování je při obchodování důležitá

22. 7. 2012

Sdílet

 Autor: © lucadp - Fotolia.com
Algoritmické obchodování vzniklo přirozeným vývojem stále se zrychlujícího klasického obchodování na burzách. Klade vysoké nároky nejen na obchodníky, ale i na matematiky, fyziky, informatiky, na použitý hardware, síťové technologie i na software.

Obchodníci využívající algoritmické (vysokofrekvenční) obchodování, uskutečňují typicky stovky obchodů za sekundu a za stejnou dobu zpracovávají tisíce příchozích zpráv. Rychlost zpracování je naprosto klíčová a je jí podřízeno síťové, hardwarové i softwarové vybavení. Dokládá to i skutečnost, že je plánováno položení nového podmořského kabelu za 300 milionů dolarů, aby se zkrátila doba cesty paketů mezi New Yorkem a Londýnem o pouhých šest milisekund. Nižší latence snižuje riziko obchodů.

Firmy sice mají své servery umístěny přímo na burzách, ale potřebují koordinovat obchodování i mezi jednotlivými burzami. Existují i výzkumy optimálního rozmístění serverů po celé planetě pro zajištění maximální efektivity obchodování.

Vysokofrekvenční obchodníci vydělávají jak přímým obchodováním akcií a finančních derivátů, tak i jako tvůrci trhu (market makers). To jsou obchodníci, kteří jsou schopni pravidelně a neustále prodávat i nakupovat danou akcii – nakupují za cenu nižší a prodávají za cenu vyšší, než je (odhadovaná) cena trhu, a vydělává na rozpětí (spread) těchto cen. Pokud obchodník navíc zpracovává příkazy k obchodu od svých zákazníků, má povinnost zpracovat všechny příkazy co nejlepším způsobem – musí příkazy agregovat a rozhodnout, jak je nejlépe uskutečnit.

Algoritmické obchodování je založeno na algoritmech schopných reagovat v řádu milisekund, které jsou velmi důkladně a často velmi rigorózně vyvíjeny a testovány na matematických modelech. Vysokofrekvenční obchodování, které dodržuje určitá základní pravidla, pomáhá zpřesňovat cenu akcií a derivátů a také zvyšuje jejich likviditu (příležitost k uskutečnění obchodu), má však i odpůrce, kteří tvrdí, že způsobuje větší volatilitu (nestálost) trhu.

Platforma LMAX
LMAX je nová retailová obchodní platforma – umožňuje komukoliv obchodovat řadu finančních derivátů bez nutnosti dalších prostředníků. Byla založena největší internetovou sázkovou firmou Betfair a je od začátku navržena pro používání miliony uživatelů. Tým vyvíjející LMAX věděl, že tradiční databázový přístup by nefungoval, protože Betfair provozoval jednu z největších instalací databáze Oracle na světě, která dosahovala hranic svého výkonu. Navíc tradiční databázový přístup by neumožnil splnit vysoké požadavky na nízkou latenci.

Různé přístupy k architektuře vysoce paralelní aplikace byly postupně vyloučeny jako nedostatečné: Java EE, architektura SEDA (Staged Event-Driven Architecture), která dobře fungovala pro nízké objemy dat, ale špatně škálovala, podobný problém nastal i s Aktorovým modelem.

Nakonec vývojáři dospěli k vytvoření vlastní softwarové architektury, se kterou v roce 2011 vyhráli ceny za inovaci v oblasti Javy (Duke’s choice award, Oracle) a finančních technologií (FS Tech Award). Základní myšlenkou je zpracování veškeré obchodní logiky jediným vláknem, které dostává úkoly a dává výstupy formou zpráv přes datové struktury zvané „disruptor“.

Celková architektura
LMAX zpracovává veškerou obchodní logiku na jediném vlákně JVM. Benchmarky ukazují, že dokáže zpracovat až šest milionů transakcí za sekundu na čtyřjádrovém 3GHz Nehalem Dell serveru s 32 GB RAM.

LMAX obsahuje tři základní části: procesor obchodní logiky (business logic processor), vstupní disruptor a výstupní disruptor. Vstupní disruptor se stará o příjem zpráv ze sítě, jejich odmaršalování, replikaci a bezpečné uložení do žurnálu. Výstupní disruptor přebírá výstupy od procesoru obchodní logiky, maršaluje je a posílá zpět po síti.

Vstupní disruptor tedy zajišťuje persistenci dat a jejich plně deterministické, lineární zpracování. Pokud dojde k nečekanému výpadku, je možné vzít žurnál a postupně přehrát všechny příchozí zprávy. Takto se procesor obchodní logiky dostane zpět přesně do stavu, ve kterém se nacházel těsně před výpadkem. Tomuto způsobu uchovávání předchozích stavů systému se někdy říká „event sourcing“. Tato vlastnost mimo jiné také velmi usnadňuje ladění chyb.

Je vhodné poznamenat, že většina myšlenek použitých LMAX je známá, nicméně nejspíš neexistují v takové kombinaci a s takto efektivní implementací.

Cit pro stroj
Vývojáři LMAX říkají, že dosáhnout rychlosti zpracování událostí v řádu desítek tisíc transakcí za sekundu je snadné, pokud člověk nedělá vyložené chyby. Dosáhnout stovek tisíc transakcí za vteřinu je o něco těžší, ale stále stačí jen psát jednoduchý krátký kód, se kterým si optimalizace JVM snadno poradí. Dostat se ještě o jeden řád výš už prý vyžaduje „cit pro stroj“.

Citem pro stroj se v tomto případě myslí hlavně znalost fungování cache současných CPU a programování s ohledem na přeplánování procesů (context switche). Současné CPU obsahují poměrně velké cache a jejich využití poskytuje možnost velkého urychlení programu. I z tohoto důvodu je ring buffer alokovaný najednou jako jedno velké pole. CPU si všimne sekvenčního čtení a pole si načte do cache.

Důležité je pak hlídat přeplánování. Pokud by byl jeden proces přeplánován z jednoho jádra na jiné, může tak přijít o již zahřátou cache. Vývojáři LMAX si naprogramovali vlastní datové struktury, které se vůči cache chovají hezky. Disruptor je až 80krát rychlejší než java.util.concurrent.ArrayBlockingQueue.

LMAX zveřejnil disruptor jako open source projekt na Google Code, kde spravují i wiki s množstvím odkazů na blogy a články o LMAX. Zajímavý úvod (se starší terminologií) poskytuje na svých stránkách Martin Fowler, odkud tento článek z velké části čerpá.