Progress Apama : Cat de adanca e gaura de iepure a HFT ?

[English version] [MQLmagazine.com in english] [Editia romaneasca]

Luna aceasta, in timp ce asteptam noul Strategy Tester, m-am simtit destul de lipsit de idei. Am realizat ca ce incercam noi sa producem aici “se usuca”. Backtestul este crezul traderului, ceea ce-i da incredere in strategiile de trading pe care le incearca.

Pe la mijlocul lui martie am dat peste doua webinarii inregistrate despre Progress Apama intitulate “Construieste Repede, Executa Repede” (Build Quickly, Run Fast) si “De la concept la profit, imediat” (From Concept to Profit in No Time Flat) . Sigur, obiectul nostru de studiu nu este platforma Progress Apama. Aceasta e o platforma HFT (high frequency trading – trading de viteza inalta) institutionala, pe care n-o sa punem mana niciodata, dar este interesant totusi sa vedem modul lor de abordare a HFT, ca si unele dintre conceptele lor atat despre dezvoltarea sistemelor cat si despre executie. Nici macar marii jucatori de piata nu o folosesc, este pentru o elita foarte mica, la crème de la crème, din moment ce au doar in jur de 120 de clienti la nivel global.

Problema e ca HFT devine mainstream in tradingul institutional. Si cand institutionalii fac ceva, e bine sa-ti deschizi urechile mai larg, pentru ca ei iau intotdeauna banii si probabil au dreptate! Dupa un studiu al Tabb Group, firmele HFT din SUA sunt doar 2% din cele 20.000 de firme de trading, si fac in jur de 73% din volumul total al actiunilor tranzactionate. Se pare ca toata piata de actiuni e sub o “preluare ostila” din partea HFT, si procesul nu se va opri. Din ce in ce mai multe firme de trading isi achizitioneaza tehnologii HFT, sau, daca nu e posibil, cel putin algoritmi in genul HFT care sa ruleze pe platformele proprii, asa ca trendul nu se va opri. Este important ca mediul de retail sa ramana constient de ce se intampla acolo, pentru a nu avea o perceptie asupra pietei alterata de paradigme prea vechi care nu se mai aplica dezvoltarilor din prezent.

Se pare ca, de la inceputul pietelor, traderii s-au luptat intotdeauna pentru latenta, sa fie primii in a avea o anumita tranzactie. Primul exemplu care imi vine in minte e Nathan Rothschild, care a aflat primul ca Napoleon a fost infrant la Waterloo si a facut ca toata piata sa creada ca Napoleon a fost victorios ca sa poata cumpara totul pe nimic. Alt exemplu mai apropiat de zilele noastre e personajul din Reminiscences of a stock operator care isi pierde legatura cu piata si isi reduce latenta folosind noua tehnologie a vremii, telexul. Cu fiecare inovatie majora in comunicatii si computing, un nivel s-a adaugat, si ceea ce era cunoscut in anii dinainte ca piete de nivel II, unde traderii umani cotau si executau tranzactii, e acum domeniul masinilor de trading de frecventa inalta. La inceput, totul a fost despre secunde – asa cum e cazul acum cu userii MetaTrader – apoi a inceput sa se mearga din ce in ce mai adanc, la milisecunde, microsecunde, si chiar nanosecunde, la care se gandesc acum. Asta s-a intamplat pentru tehnologiile HFT s-au adaptat, si au modificat comportamentul pietei la fiecare nivel de timp: cand milisecundele au devenit disponibile, algoritmii ce rulau pe statii bazate pe secunde au inceput sa dea gres, iar acum, cand e vremea microsecundelor, statiile curente bazate pe milisecunde sunt in curs de upgrade, iar maine, statii bazate pe nanosecude le vor inlocui pe cele de la nivelul milisecundelor.

Sa fiu putin sarcastic: o microsecunda e 10^-6 dintr-o secunda, iar o nanosecunda e 10^-9. E un lung drum tehnologic pana la timpul Planck, care pare a fi intervalul minim de timp : 5.4 x 10^-44 s. La rata curenta, ar trebui sa ne asteptam la o reducere a latentei de 2 puteri ale lui 10 pe an, daca ceva nu se intampla ca sa schimbe curbura reducerii latentei.

Ce se intampla cu algoritmii datorita imbunatatirilor aduse in executie si expansiunii birourilor HFT ? Louis Lovas, Chief Architect pentru Progress Apama, explica “ori devin invechite, ori li se descopera mecanismul de functionare, ori spreadurile devin prea mari si nu mai sunt profitabile apoi”.

Dan Hubscher, Principal Product Marketing Manager – Capital Markets pentru Progress Apama citand dintr-o cercetare a AITE Group research, spune ca “si intr-un mediu relativ stabil, durata de viata a unui algoritm poate sa fie chiar si trei luni”. Acesta a fost motivul pentru dezvoltarea Progress Apama Studio, un mediu de dezvoltare rapida a strategiilor. Pentru ca durata de viata a unui algoritm e limitata, e logic ca daca-i reduci timpul de dezvoltare obtii profituri suplimentare ruland acel sistem pentru mai mult timp, timpul extra fiind castigat in timp ce altii se lupta sa-l replice pe platforme cu medii de dezvoltare mai proaste.

Ceea ce urmeaza e un exemplu din demo-ul lor. Strategia e un arbitraj statistic intre doua actiuni. O medie este calculata, impreuna cu Benzi Bollinger la 1.8 deviatii standard. Ecranul urmator arata strategia ruland intr-o instanta selectata (Bank of America vs Citigroup) , iar fereastra Scenario Instances arata ce face algoritmul in fiecare instanta (prima line e Caterpillar vs Chevron, a doua e Bank of America vs Citigroup). E o strategie predefinita, vine ca si template odata cu statia, nu e nimic secret si important in legatura cu ea.

Cateva observatii asupra strategiei
1. Asa cum se poate vedea, numai un singur spread a fost setat sa fie afisat – si veti vedea mai jos, in mod ciudat, au ales spreadul dintre preturile mediene. Daca strategia s-ar baza numai pe executii la piata, ar trebui monitorizate cel putin doua spreaduri, iar criteriul de iesire ar fi opusul celui de intrare; daca strategia s-ar baza pe cotare, ar fi patru spreaduri de monitorizat.
2. Cantitatile sunt predeterminate, ca si parametri, prima e 10, a doua 20. Algoritmul nu pare a le ajusta dupa ratia de hedge.
3. Nu vad niciun contor de ticksi sau perioada folosita pentru calculul Benzilor Bollinger.
4. Campurile de cantitate maxima se folosesc pentru controlul pozitiei. Da, acea pozitie detestata pe care o are si MT5 acum. Daca te uiti in fereastra Scenario Instances, in campurile Current Position, vezi ca valorile nu sunt 10 si 20, nu are numai aceste cantitati la un moment dat, ci pozitiile sunt insumate cu noi si noi ordine de 10 si 20, pana la inchidere sau la atingerea valorii maxime specificate de parametru. Asemenea cumulare a ordinelor poate aparea daca una din Benzile Bollinger se incruciseaza cu piata de mai multe ori, dar fara atingerea celeilalte bare.
5. Campul de timeout pare a avea rolul de depreciere a pozitiei, de a comanda inchiderea pozitiilor dupa 20 de secunde. Nu poate fi un timeout de executie pentru ca acum o secunda e un secol in HFT, iar sa astepti 20 sec pentru o confirmare a unui ordin nu-mi pare a fi HFT deloc. Sau am gresit ue in legatura cu HFT ? Vezi articolul nostru despre MetaTrader, Tick Data & Charting : De ce nu un MetaTrader de Nivel II ? !
6. Priveste scala timpului. Sunt 12 secunde intre timpii etichetati, si sunt intre 3 si 7 executii pe interval. Stii vreun EA care tranzactioneaza asa?

Ce e interesant in Progress Apama e cum sunt construite strategiile. Strategiile pot fi construite chiar fara cod, dar spre deosebire de mediile din alte campuri de activitate care incearca dezvoltare fara cod, Progress Apama reuseste cu un concept complex, dar simplu de folosit. Dupa cum spune Dan Hubscher, “conform AITE Group, timpul necesar dezvoltarii unui nou algoritmul, de la achizitia datelor si analiza, pana la dezvoltarea strategiei si pana in productie e de la 10 la 28 de saptamani”. Deci un mediu de dezvoltare rapida a aplicatiilor a fost o necesitate naturala, pentru ca asta este problema care loveste competitorii directi de pe piata platformelor institutionale, si pune Progress Apama intr-o pozitie mai favorabila. In sistemul lor de dezvoltare, toate variabilele care trebuie urmarite direct sau calculate, isi au originea in ‘blocuri inteligente’ intr-o diagrama de blocuri. Fiecare bloc ia datele ori din piata ori din alt bloc, si le scoate ca si input pentru un alt bloc, generand in acelasi timp variabile interne (care se pot vedea in panoul verde din dreapta).

Strategia e apoi proiectata ca si diagrama de flux, intr-un mod similar diagramelor folosite cand invatam algoritmica. Fiecare bloc contine conditii si comenzi scrise in engleza, toate conditiile, comenzile si varibilele fiind selectabile dintr-un meniu care apare la un clic pe butonul drept.

Dupa cum se vede, are un mediu de dezvoltare aratos, care raspunde rapid ideilor si complexitatii in continua expansiune a algoritmilor de trading, dar adevarata putere a statiei se dezlantuie cand ruleaza strategiile. Asta o face sa fie o platforma de top.

Exemplul cu arbitrajul statistic e destul de simplu, dupa cum urmeaza spreadul ca si conditie. Dar strategiile HFT adevarate sunt mai complicate, fiecare strategie putand urma evenimente asincrone care au loc pe active multiple:

Regula de Trading Algoritmic

CAND
  pretul MSFT se misca in afara mediei mobile cu 2%
URMATA DE (
        Cosul meu creste cu 0.5%
        SI  (
              Pretul HPQ creste cu 5%
              SAU
              Pretul MSFT scade cu 2%
             )
        )
TOATE INTR-O PERIODA
   de 2 minute, oricand

ATUNCI
    Cumpara MSFT
    Vinde HPQ

  • streamuri multiple de date
  • secventiere temporala
  • secvente de evenimente complexe
  • constrangeri in timp real
  • actiuni automate

Cand am avut noi vreodata o asemenea abordare? Cand a a contat vreodata restrictia temporala in care semnalele trebuiau sa vina? Of, am uitat, nici macar nu aveam backtesterul…. O observatie interesanta despre viziunea lor, este CAND. In repetate randuri, Dan Hubscher si Louis Lovas explica cum CAND nu e acelasi lucru ca DACA. Fara comentarii.

Pentru a face acest gen de conditii utilizabile de catre proiectantul strategiei, Progress Apama vine cu o chestie inteligenta numita Procesarea Evenimentelor Complexe:


Procesarea Evenimentelor Complexe:
“Daca un articol de stiri referitor la IBM e urmat de o crestere cu 5% a pretului actiunii pe orice perioada de 10 secunde si e corelata cu o crestere a indicelui de semiconductori (n.tr. simbol SOX) atunci cumpara 1000 de actiuni IBM”

Dan Hubscher defineste Procesarea Evenimentelor Complexe ca “abilitatea de a lega doua sau mai multe evenimente, chiar daca acestea apar intr-un interval de timp, si de a le determina semnificatia din acea relatie imediat, cum ar fi detectia unui semnal de trading, sau a unei oportunitati de genera alfa.”

Dar noi nici macar nu avem OnNews(), asa e?

E clar, cuvantul “imediat” inseamna ca trebuie sa ai cea mai redusa latenta posibila. Eu cred ca CEP poate fi tradusa in MetaTrader, incepand cu implementarile OnChart() si OnTrade() din articolele mele anterioare, si transformarea acestor metode in Procesoare de Evenimente Complexe, care traduc evenimentele de tick si tranzactie in evenimente inteligibile , gen “MSFT peste Banda Bollinger de 10 secunde”, urmate de o stampila temporala, si asezate intr-o coada. Coada poate fi preluata de o alta procedura, care aplica restrictiile temporale, genereaza semnale, si le transmite modulelor decizionale. Cititi articolul nostru Anatomia unui motor CEP simplu.

Totusi, ce face Progress Apama sa fie “masina de un milion de dolari” nu e niciunul dintre aceste lucruri, pentru ca sunt simple unelte, care pot fi folosite si de statiile de retail, daca developerii ar include asemenea facilitati. Sigur, uneltele de dezvoltare rapida conteaza atunci cand e comparata cu competitorii. Ci, este abilitatea de a rula sute de instante, bazandu-se pe infrastructurile multicore, fara a piede din avantajul de latenta. Si aceasta se face de catre Corelator(ii) de Evenimente.


Progress Apama – Facilitati de Scalare

  • Iesire si latenta
    • Hiperarbore si Secventiator de Evenimente Complexe
      • Milioane de reguli rulate concurent prin algoritmi inteligenti
      • Determinism
    • Corelator Paralel
      • Utilizeaza optim structuri multicore
  • Mai multe instante Apama intr-o retea
    • Corelatorii pot fi imbinati in configuratii CEP arbitrare (conducte, ochiuri de retea, grile)
    • Router de evenimente
      • Instalare in medii multiprocesor intinse
    • Monitorizare si management enterprise
      • Configurare grafica printr-o consola de management

In Progress Apama exista si posibilitatea de a programa. Vine cu limbajul MonitorScript, un limbaj similar Java, dar mai simplu, simultan cu o implementare completa Java:


Limbaje de programare in Apama

  • MonitorScript : Apama EPL (Limbaj de Procesare a Evenimentelor)
    • Potrivire declarativa + procesare imperativa
      • “monitoarele” vin cu incapsularea
        • instalate/dezinstalate dinamic
      • “ascultatorii” potrivesc, ruteaza si emit evenimente
        • potrivesc secventele de evenimente incluzand constrangerile temporale
        • sunt setate/eliminate prin expresii de evenimente
      • “contextele” suporta procesarea paralela
  • Suport complet pentru Java
    • Masina virtuala Java incarcata in motorul CEP
    • interoperabila cu MonitorScript prin rutarea de evenimente

Asa cum am zis mai sus, includ aici parti din codul arbitrajului statistic, cele care cred eu ca explica cel mai bine miezul strategiei, gasite in webinar:

Aceasta este actiunea beginTrading(), care arata dulciurile din MonitorScript. Dupa cum se poate vedea,
route in acest caz, preia datele din piata. Dar ce e mai important aici, consta in declaratiile on. AceThis statement defines ascultatorii, cu o sintaxa de tipul:

1
on [all] <expresie de eveniment> <parte de actiune>

Primul on pe care il vezi verifica distrugerea instantei de catre utilizator (intr-o maniera similara lui WM_CLOSE trimis catre WindowProc() ), apoi elimina variabilele si inchide instanta. Al doilea on e mai interesant. Aici, al doilea si al treilea sunt scrise intr-o maniera relativ redundanta, pentru ca prima conditie este un and iar a doua este or. Dupa cum noteaza Louis Lovas in comentariu, sa fim siguri ca avem cel putin un tick de la fiecare inainte de a trece mai departe, ar reiesi ca evenimentul Depth() este declansat de un nou tick, dar se pare ca Depth() este declansat cand structura orderbook se schimba, adica atunci cand cel putin un volum se schimba pe Bid sau pe Ask, nu numai cand vine un nou tick (schimbare a Bid sau Ask). Depth() pare a fi declansat similar cu OnBookEvent() care nu a fost completat inca de MetaQuotes, pe care l-am explicat in alte articole unde am spus ca va declansa mult mai frecvent decat OnTick(). Lasand comparatia la o parte si continuand cu codul, vedem a doua conditie, scrisa de Louis numai ca sa arate cat de flexibila e sintaxa, si ceea ce lanseaza, actiunea processNextSpread().
Un lucru interesant e de remarcat in legatura cu ascultatorii. Uitandu-ne la ascultatori vedem o sintax destul de avansata, mult indepartata de rigiditatea sistemului bazat pe evenimente pe care MetaQuotes se chinuie sa-l faca, si care exista deja in alte statii. Mai intai, ascultatorii se aplica oricarui fel de eveniment care este legat de datele subscrise. Dincolo de asta, descrierea evenimentului apare chiar in corpul ascultatorului, si poate fi oricare. Chiar si daca vrei sa preiei un tick pe un alt instrument, trebuie sa rulezi un expert separat (daca nu cumva va fi posibil prin OnBookEvent() ), pentru ca OnTick() raspunde numai de instrumentul curent. In acelasi timp, fiecare ascultator este o conditie de eveniment – implementare de actiune, instalabil aproape in orice parte a codului, dand un grad ridicat de libertate programatorului, pe cand in sistemul bazat pe evenimente tratarea fiecarui tip de eveniment este restransa la un singur corp de cod, unde analizeaza toate evenimentele de acelasi tip, si care daca ar fi tradus in MonitorScript ar insemna ca toti ascultatorii lucrand cu acelasi tip de eveniment sa se afle intr-un singur corp de cod.

Dupa cum se poate vedea, spreadul e calculat chiar cu preturile de mijloc. Ce e mai important, e ca metoda incapsuleaza toata strategia, si se poate vedea cum trimite ordine, fara sa verifice ordinele precedente, demonstrand inca o data sistemul pozitional.

Se pare ca toata actiunea SubmitOrder() a fost scrisa cu scopul de a face update la variabilele strategiei. Probabil intregul cod ar fi putut sta in processNextSpread(). Ciudat, variabilele de pozitie sunt calculate, prin adaugare sau scadere de volum, in loc sa se foloseasca o functie pentru a pozitia pe fiecare instrument, acolo unde ar fi necesar. Ce nu e clar in cod e unde sunt aplicate constrangerile de pozitie maxima precum si timeout-ul ordinelor.

Ceea ce e esential la Progress Apama e ca poate rula milioane de reguli concurente si face uz de mediile multicore.

Aici se poate vedea o strategie ruland cu date simulate in 500 de instante pe o masina quad core:

Deci, daca Louis Lovas spune ca merge pe o masina quad core, si nu avem niciun motiv sa nu-l credem, inseamna ca Irene Aldridge a avut dreptate, si cerintele din ce in ce mai ridicate ale gamerilor au impins tehnologia pana la punctul la care calculatoare care pot rula HFT se gasesc in fiecare casa ; dar, ce broker iti va da latenta redusa pentru contul tau sarac de retail si cine iti va da o platforma care sa nu risipeasca resursele procesorului ?

Desigur, n-o sa putem niciodata sa facem asa ceva. Userii MetaTrader nici macar nu au bani suficienti pentru cerintele de marja necesare rularii portofoliilor care reconstruiesc indecsi cu greutatile specifice necesare, asa ca tradingul low latency se scoate din discutie. MetaTrader nu va avea niciodata latenta redusa. Totusi, anumite elemente de HFT, cum ar algoritmii sau procesarea evenimentelor complexe pentru cateva strategii cu o scalare redusa, care se intind pe un numar foare limitat de active, pot fi aduse in MetaTrader. Scopul acestui articol a fost de a introduce cititorii in lumea HFT a problemelor specifice ei.

Tags: , , , ,

Leave a Reply