ABONAMENTE VIDEO TESTE REDACȚIA
RO
EN
×
▼ LISTĂ EDIȚII ▼
Numărul 61
Abonament PDF

Algorithmic Trading și Machine Learning. O vedere de ansamblu (I)

Ioan Moldovan
Software Engineer @ TORA
PROGRAMARE

Tranzacțiile datorate tradingului automat au crescut semnificativ în ultimii ani, ajungând să fie majoritare pe toate bursele importante. De exemplu, pe Tokyo Stock Exchange volumul de tranzacții generate din co-location (sisteme prezente fizic în proximitatea bursei) a crescut de la 10% în 2010 la peste 50% în 2016. Apare natural întrebarea de ce există atât de mult trading automat?

Un prim răspuns ar putea fi "optimismul investitorilor". Bursa este un zero-sum game și strategiile speculative sfârșesc de cele mai multe ori să schimbe câștigurile și pierderile între ele. În fiecare an există un "cel mai de succes" fond de investiții, însă în același timp există și mulți care pierd. Chiar și titanii tranzacționării automate, Getco (acum KCG Holding), D.E. Shaw sau Citadel trec prin cicluri de câștiguri și pierderi, cu excepția notabilă numită Renaissance Technologies, care continuă să fie un miracol (poate de PR) și un secret bine ascuns. Un al doilea factor e prezența investitorilor "retail", investitorii amatori, care sunt o resursă reînnoibilă odată cu maturizarea noilor generații și care, de cele mai multe ori, sunt o sursă de profit pentru algoritmii de trading. Alt factor care contribuie la succesul tranzacționării automate este existența unor șabloane în evoluția prețurilor după apariția unor evenimente speciale, când, deși evenimentele în sine sunt impredictibile, activitatea imediat următoare poate fi exploatată. Sau prezența algoritmilor de trading în sistemul dinamic cu auto-feedback numit bursă, care lasă inevitabil o urmă prin acțiunile lor, devenind ei înșiși producători de informație. Astfel, apar noi oportunități de strategii de exploatare a patternurilor lor de activitate sau de "momire" cu scopul de a produce reacții predictibile, într-o meta-algoritmizare ce poate continua la infinit. Un ultim factor sunt investitorii pe termen lung, pe care nu i-am menționat până acum și care sunt cei mai importanți actori pe piață, aceștia putând genera prin volumele și direcționalitatea tranzacțiilor, trenduri care pot fi exploatate de algoritmi.

Deși fondurile speculative se canibalizează între ele și generează un volum mare de tranzacții, schimbările la nivel macro nu vin din cauza algoritmilor, influența lor asupra prețurilor sau capitalizării pe burse fiind minoră. Desigur, există cazuri excepționale, cum ar fi falimentul Knight Capital din 2012, când influența unui algoritm automat, respectiv a unui deploy defectuos, este mare pe termen scurt, însă pe termen lung nu contează decât localizat pentru firma în cauză. În cele din urmă, algorithmic trading nu este "motorul burselor de valori", ci un facilitator al procesului de schimb de resurse (rolul lor pozitiv fiind de arbitraj și furnizori de lichiditate), iar producătorii de "real flow" (în mare parte fonduri mutuale sau de pensii și banci), care urmăresc investiții pe orizont de timp îndelungat, sunt cei care "dau tonul". Acești actori coexistă cu fondurile speculative și produc o dinamică pradă-prădător ca în orice alt mediu în care avem variație, selecție și o cantitate limitată de resurse, existând o proporție între "real flow" și cel speculativ care se auto-ajustează. Orice algoritm de trading, oricât ar fi de performant și sofisticat, este constrâns de faptul că informația accesibilă este o resursă limitată ce dispare rapid sub presiunea competitorilor și că dispersarea câștigurilor poate fi atât de mare între jucători încât să ajungă sub nivelul costurilor de tranzacționare și menținere a infrastructurii. În plus, dacă algoritmii de trading speculativi ar deveni predominanți, flowul real s-ar muta în altă parte sau piața ar fi reglementată pentru a le limita efectele.

În cele ce urmează, vom încerca să vedem cum iau algoritmii decizii, să trecem în revistă ce subset din universul Machine Learning se folosește în tranzacționarea automată (cu câteva "tips & tricks" practice) și să vedem cum validăm un astfel de algoritm. Tema e complexă și articolul va fi dens ca informație, dar sperăm că prezintă interes celor care lucrează în domeniu sau celor care pur și simplu sunt interesați de ML, chiar și folosit doar ca o listă cu termeni de explorat.

Tipuri de strategii

Când lumea spune "algorithmic trading" de obicei se gândește la strategii de High Frequency Trading, dar e bine de știut că acestea sunt doar o parte din sistem, chiar și pentru fondurile speculative. O listă incompletă de astfel de strategii implementate automat ar putea fi:

Modurile de funcționare ale bursei ar putea fi clasificate astfel: așa-zisele perioade de "normalitate", în care nu există salturi dramatice în preț, evenimente speciale neașteptate (cum ar fi cutremurul din Japonia din 2011) și evenimente speciale așteptate, fie ca rezultat, fie ca moment al producerii (de exemplu, anunțurile dobânzii de referință de către băncile centrale). Distincția între evenimentele așteptate și neașteptate este importantă, deoarece majoritatea algoritmilor speculativi sunt destinați să funcționeze în perioadele de normalitate sau cu știri anunțate, și atunci scopul celor care construiesc algoritmul este să optimizeze comportamentul "în general" și să găsească un mecanism prin care să lichideze poziția curentă și să minimizeaze pierderile în cazul evenimentelor neașteptate. Există și algoritmi centrați pe evenimentele anunțate sau periodice, care vor analiza și exploata fie comportamentul de după eveniment, fie chiar momentul evenimentului. De obicei, evenimentele se concretizează printr-o diminuare a activității pe piață ("liniștea dinaintea furtunii"), provocarea fiind nu doar detectarea direcției post-eveniment și reacționarea cu viteză, ci și apărarea în fața vânătorilor de algoritmi, care pot face "probing" generând tranzacții înainte ca știrea reală să apară. Legat de această temă, randomizarea activității pe piață a propriului algoritm este necesară pentru a nu lăsa o urmă ușor detectabilă de către competitori nu doar pentru ca algoritmul să nu fie "reversed engineered" și implementat de alții (lucru care ar duce la împărțirea profiturilor din strategie), ci și pentru a nu fi vânat. În fine, avem și cazul algoritmilor centrați pe exploatarea cazurilor excepționale. Acestea fiind rare și impredictibile, un astfel de algoritm stă cel mai mult "ascultând marketul" fără a face nimic și urmărește realizarea de profit exploatând comportamentul celorlalți actori imediat după eveniment (acest tip de trading fiind mai profitabil, dar cu riscuri mai mari decât în cazurile de normalitate).

Fig. 1. a) Timpi de răspuns după un salt de preț b) Knight Capital event

Exemplificăm în Fig.1, a) activitatea algoritmilor pe market urmărind timpul de răspuns al tuturor participanților după evenimentele de tip salt de preț pe parcursul unei zile. Putem vedea în grafic împărțirea actorilor: activitatea la 1 milisecundă distanță de la eveniment e cel mai probabil parte din ce a generat salturile, apoi la 4-6ms sunt cei aflați în imediata proximitate a exchange-ului, și care au un avantaj semnificativ față de ceilalți, restul actorilor începând să aibă latențe începând din intervalul 10-15ms până la sute de milisecunde. Observăm și algoritmii care acționează pe bază de timp și care par a fi activi la fiecare 50ms. Comparativ, viteza de reacție umană are un vârf al distribuției undeva în zona 250-300ms. În Fig. 1.b) putem vedea un eveniment special neașteptat (meltdown datorat unui algoritm de trading) cu efecte mari pe termen scurt, dar care la finalul zilei deja devine nesemnificativ ca impact.

Cum reușesc strategiile de trading automat să ia decizii?

În construirea strategiilor se urmărește obținerea de informații și monetizarea lor, iar cum cantitatea de informație disponibilă e limitată, profitul depinde de viteza cu care se fructifică oportunitatea și de capacitatea algoritmului de a detecta și acționa doar în cazurile care aduc profit. Într-un fel fraza anterioară e o tautologie, însă descrie că întotdeauna va trebui să existe un compromis între viteză și complexitate. Toate strategiile se bazează pe date: fie pe informație din exterior (știri, analize, cunoștințe despre evoluții economice sau sociale), fie pe informație luată din exchange (analizând istoricul prețurilor/volumelor sau din intențiile de tranzacționare, ce pot fi detectate din așa-numitul orderbook, o listă de prețuri și cantități prezente pe bursă). Cea mai mare parte a strategiilor automate sunt speculative, și majoritatea lor se bazează pe informație din interiorul sistemului. Datorită dezvoltării tehnologice, vitezele de răspuns sunt tot mai mici, iar cu cât reacția algoritmilor este mai promptă, cu atât mai repede dispare "informația" care a dus la decizia de trading. Acest lucru ne duce mai aproape de Efficient Market Hypothesis (EMH), care stipulează că informația existentă se va reflecta instantaneu în preț, făcând mișcarea prețului un "random walk", deci imposibil de prezis. De remarcat că tot această cursă pentru viteză poate duce și la evenimente nedorite din cauza influenței deciziilor algoritmilor care introduc zgomot într-un sistem cu auto-feedback: un algoritm luând o decizie pseudo-aleatorie poate induce o decizie în aceeași direcție altor algoritmi, producând un "self-fulfilling prophecy" și făcând prețul să sară brusc (și exponențial) într-un anumit sens.

Care sunt datele folosite ca input pentru algoritmi? Alegerea lor depinde deseori de constrângerile fizice și data feedurile disponibile. Departe de a fi un domeniu în care se fac doar lucruri "cool", în algorithmic trading un efort disproporționat de mare merge în adunarea datelor, curățarea și sincronizarea lor, deseori mici erori la procesare producând discrepanțe uriașe între analizele teoretice și ce se întâmplă pe market. Pe lângă datele eronate ("garbage in, garbage out"), o mare atenție trebuie acordată timestampurilor datelor, sincronizării timpului între mașini, datelor lipsă, acelor outliers datorați unor probleme tehnice, precum și erorilor de cod. Un simplu "off by one" index într-un vector poate duce la erori de tip "look into the future" cu rezultate dezastruoase asupra corectitudinii rezultatelor produse de algoritmii de machine learning.

Nu este scopul articolului de față să descrie metrici în detaliu (și deseori industria ține sub secret aceste aspecte, deși toată lumea folosește cam aceleași lucruri), însă vom exemplifica foarte pe scurt câteva. Folosirea doar a metricilor primare (cum ar fi prețul) în algoritmii de machine learning este contraproductivă, pentru că, pe lângă sarcina de clasificare sau regresie, algoritmul are și sarcina de a extrage structură din datele de intrare, lucru care de multe ori este imposibil datorită limitărilor algoritmilor sau datelor. Orice insight sau informație adusă din exterior prin construirea de metrici derivate sau compozite este foarte prețioasă. Suntem departe de un AI care să aducă intuiții spectaculoase, mai ales din datele de la bursă care au un "signal to noise ratio" mic, de aceea gândirea omului nu este substituită de puterea de procesare sau complexitatea algoritmilor de machine learning. Am amintit deja că mișcarea prețurilor este, teoretic, aleatorie. E important că mișcarea urmează un random walk, iar nu prețul. Mișcarea prețului se modelează cel mai ușor ca "return", adică diferența procentuală între preț la două momente de timp, iar acest return are proprietăți care îl fac să se comporte bine ca feature de intrare pentru algoritmii de machine learning: deseori are medie 0 și, în general, o distribuție apropiată de cea normală. De ce return-urile sunt normal distribuite? La fiecare moment T există atât de mulți factori independenți care intră în joc, fiecare afectând prețul, încât modificarea la momentul T+1, și care este suma modificărilor generate de factorii individuali, e o variabilă aleatorie normal distribuită. Făcând o paralelă cu aruncatul zarurilor, presupunând că avem trei factori și fiecare poate contribui cu un număr de la 1 la 6, pentru 3 zaruri aruncate deodată probabilitatea ca suma lor să iasă 1+1+1=3 sau 6+6+6=18 e mică, existând într-o singură configurație a zarurilor, dar pentru suma 11 există o multitudine de combinații, 1+1+9, 1+2+8, etc. . Bineînțeles, în cazul prețurilor situația diferă puțin: factorii nu sunt întotdeauna independenți, modificările datorate unui factor nu au un minim sau maxim, iar informația este deseori "descoperită în timp", și nu instantanee, de aceea distribuția nu va fi chiar normală.

Fig. 2. a) Prețuri și returns, b) Distribuție de returns

O altă metrică foarte importantă este așa-numitul volum imbalance, care reprezintă o diferență instantanee între intențiile de vânzare și de cumpărare centrată în jurul celui mai bun preț de ofertă (best ask) și celui mai bun preț de cerere (best bid). Acest imbalance se poate calcula în multe feluri, în funcție de numărul de nivele incluse în calcul, de modul de ponderare a lor sau de funcția folosită. Evident, ca orice metrică, analizarea pe ferestre scurte, medii sau lungi de timp, precum și verificarea trendurilor metricii sau a punctelor de inflexiune poate aduce extra-informație despre activitatea unui instrument, iar transformarea în valori agnostice la unitatea de măsură ușurează analizele cross-market.

În fine, din multitudinea de indicatori posibili, mai amintim metricile de viteză și accelerație ale tranzacționării și metricile de flow, care sunt foarte importante și se calculează din urmărirea modului în care au loc tranzacțiile și dinamica orderbookului la nivelele superioare. Flowurile sunt strâns legate de preț și au impact asupra lui. Amintim, de exemplu, faptul că, scăzând 1 dacă o tranzacție are loc pe cerere și adunând 1 dacă e pe ofertă, putem reconstrui mișcarea prețului. Acest fapt, deși e doar o corelație, este un lucru extraordinar în sine, unind universul volumelor cu cel al prețurilor printr-un simplu counter. Există o dinamică subtilă la nivel de volume imbalance, market impact, volume tranzacționate și volatilitate care pot fi transformate în metrici folosite ca date de intrare pentru algoritmi. Ideea cu care trebuie să rămânem este că există o activitate la nivel de market microstructure care conține informație și aceasta este folosită de algoritmii de trading, respectiv machine learning dacă e cazul.

Ce algoritmi de Machine Learning se folosesc?

Cantitățile de date provenite de pe exchange-uri sunt într-o creștere continuă, iar un lucru foarte important care îl aduc frameworkurile noi de machine learning și big data e ușurința folosirii seturilor de date mari. Apoi aceste biblioteci vin cu acces foarte ușor la algoritmi complecși de algebră liniară, de clustering, de clasificare sau regresie, cu o metodologie clară de aplicare și validare a rezultatelor, precum și cu biblioteci performante de vizualizare. Domeniul este foarte complex și fiecare tip de strategie de trading presupune abordări și cunoștințe specifice, însă algoritmii de machine learning vin ca un ajutor în faza de analiză, iar uneori și în faza de tranzacționare.

Trăsătura de bază a AI-ului este adaptabilitatea la condiții variabile, iar algoritmii de trading au nevoie de viteză, de aceea este foarte comună folosirea online learningului în trading, adică algoritmi adaptativi care fac predicții la fiecare pas dar și învață cu fiecare nou sample pe care îl văd (o bibliotecă ce merita atenția este Vowpal Wabbit). Chiar și înainte de popularizarea cuvintelor cheie machine learning și AI, algoritmii de trading erau adaptativi, schimbând praguri fixe de activare în funcție de market regimes (detectate de obicei pe bază de trends, spikes și volatilitate), sau calculându-le dinamic în funcție de activitatea recentă pe bursă. Prin online learning se trece la alt nivel, la care se poate ajusta modelul de predicție în sine, nu doar praguri.

... continuarea în următorul număr al Today Software Magazine

Sponsori

  • Endava
  • 3PillarGlobal
  • Gemini Solutions
  • Betfair
  • Accenture
  • Telenav
  • Siemens
  • Bosch
  • ntt data
  • FlowTraders
  • Crossover
  • Colors in projects
  • Ullink

IT Days