ABONAMENTE VIDEO REDACȚIA
RO
EN
Numărul 153
NOU
Numărul 152
Numărul 151 Numărul 150 Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 153
Abonamente

Arbitraj – adevăr și provocare

Andrei Draga
Senior Software Engineer @ Betfair Romania Development



PROGRAMARE

În cadrul piețelor dinamice unde prețurile activelor variază și fiecare decizie contează, soluțiile tehnice de arbitraj promit o cale fină de a ajunge la echilibru. Cum funcționează? Ce provocări ridică? Și mai ales ce oportunități aduc? Explorăm mecanismele din spatele automatizării arbitrajului și al impactului lor real.

Ce este arbitrajul?

Arbitrajul este o strategie financiară prin care un trader profită de diferențele de preț între două sau mai multe piețe, cumpărând la un preț mai mic de pe niște piețe și vânzând la preț mai mare pe alte piețe.

Oportunitățile sunt limitate și apar când există niște dezechilibre temporare ale pieței, când prețurile nu sunt bine aliniate din cauza diferențelor de lichiditate, viteză de execuție sau acces la informații.

Arbitrajul în piețele de criptomonede

Deși arbitrajul se poate aplica pe multiple tipuri de piețe, incluzând piețele financiare tradiționale (burse de valori, piețe de obligațiuni, piețe de mărfuri, forex), piețele fizice sau pariurile sportive, în continuare ne vom focusa doar pe piețele de criptomonede de tip spot pentru a exemplifica funcționarea unui bot de arbitraj.

Putem încadra piețele de criptomonede spot în următoarele mari categorii:

Când este arbitrajul profitabil?

Formal, definim profitul ca:

Profit=preț de vânzare - preț de cumpărare - costuri asociate

unde costurile asociate pot include comisioane de tranzacționare, costuri de transfer (în rețea sau între rețele), taxe și impozite (în funcție de jurisdicție) sau costuri tehnologice.

Un set minim de precondiții trebuie îndeplinit ca boții de arbitraj să genereze profit:

Arhitectura generală a unui bot de arbitraj crypto

Un bot de arbitraj trebuie să fie rapid, fiabil și modular, pentru a permite extinderea și adaptarea la noi exchange-uri, noi criptomonede și noi strategii.

Putem împărți arhitectura în mai multe module cu următoarele responsabilități:

Precondiții

Pentru ca un bot să poată interacționa cu exchange-urile în vederea executării unor ordere, este nevoie de niște precondiții în funcție de tipul exchange-ului.

În cazul CEX-urilor, putem exemplifica pașii necesari pentru Binance, cel mai mare exchange centralizat:

  1. Utilizatorul botului de arbitraj își creează un cont care implică și trecerea printr-un proces de KYC.

  2. Pentru interacțiunea cu un API există două variante dintre care putem alege:

    1. System generated: prin API keys și secret keys (HMAC - criptare simetrică)

      1. Se pot genera cel mult 30 API keys / cont.

      2. Utilizatorul va confirma crearea cheilor prin introducerea unui OTP (One-Time Password) și va avea acces la API key-ul și API secret-ul generate.
    2. Self-generated: private keys - public keys (Ed25519 sau RSA pentru criptare asimetrică).
  3. Din motive de securitate, se recomandă restricționări la nivel de IP-uri care pot să interacționeze cu API-ul, iar periodic cheile pot fi invalidate.

  4. Pentru fiecare API key, utilizatorul poate să activeze multiple restricții API, cele mai de interes fiind:

    1. Enable Reading;

    2. Enable Spot & Margin Trading;

    3. Enable withdrawals.
  5. Cheile și secretul API trebuie stocate în siguranță, deoarece vor fi folosite ulterior de către bot pentru interacțiunea cu exchange-ul.

În cazul DEX-urilor, utilizatorul trebuie să:

  1. Își creeze un wallet (portofel) propriu.

  2. Stocheze cheia privată a walletului în siguranță.

  3. Aibă acces la un nod de tip observer (în cazul Uniswap de pe Ethereum - printr-un provider de genul Infura/Alchemy).

Autentificare și autorizare

Asigură legitimitatea accesării funcționalităților oferite de exchange-uri.

Modul în care se realizează autentificarea și autorizarea depinde dacă vorbim de CEX-uri sau DEX-uri.

CEX-uri

Pentru interacțiunea cu un exchange centralizat, vom exemplifica pașii necesari pentru a interacționa cu Binance.

Partea de REST API se poate folosi și pentru a prelua prețuri și ordinele plasate din piața, dar se pretează mai ales pentru obținerea balanței și pentru a plasa ordere:

  1. API key & API secret pot fi folosite de către bot pentru interacțiunea cu exchange-ul.

    1. API key - nu este secret în sine, fiind mai degrabă un identificator unic prin care Binance poate face identificarea. Totuși, e bine să evităm expunerea lui, fiindcă împreună cu Secret Key ar putea fi folosit pentru acces neautorizat. Fiind inclus într-un header al fiecărui request către API (ex: în câmpul X-MBX-APIKEY), acesta este vizibil în interacțiunea cu serverele Binance.

    2. API Secret - este complet secret, folosit pentru a genera semnătura cererilor. Este stocat doar local și utilizat de bot pentru a semna cererile. Semnătura se generează pe bază de parametri de cerere și timestamp, apoi este inclusă în body-ul cererii, nu pe URL din motive de securitate. Binance foloseste formatul standard x-www-form-urlencoded, dar alte exchange-uri pot folosi și varianta JSON.
  2. Botul va face un request HTTP de tip POST care ar arăta de forma:

    1. Method: POST

    2. URL: https://api.binance.com/api/v3/order

    3. Headers:

      1. Content-Type: application/x-www-form-urlencoded

      2. X-MBX-APIKEY:
    4. Request payload:

      1. mbol=BTCUSDT&side=BUY&type=MARKET&
        quantity=0.001×tamp=1710576000000&
        signature=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u2v3w3x4y5z6

Pentru stream-urile publice (ex: orderbook) nu este nevoie de autentificare, deci pot fi accesate fără API Key sau Secret Key. În cazul în care exchange-ul oferă și o variantă premium pentru accesul la date, este posibil să fie necesară și autentificare, folosind un listenKey ce trebuie împrospătat periodic printr-un apel REST API

DEX-uri

O cheie privată este un cod criptografic care permite accesul la fondurile dintr-un portofel digital și este folosită pentru a semna tranzacții. În contextul unui DEX (Decentralized Exchange), cheia privată este esențială pentru autentificarea utilizatorului și pentru autorizarea tranzacțiilor.

În timpul unui swap, cheia privată este utilizată programatic pentru a semna tranzacția care inițiază schimbul de criptomonede.

Este important să menționăm că această cheie privată nu trebuie să fie expusă sau partajată cu nimeni, deoarece compromiterea ei poate duce la pierderea fondurilor.

Data Collector

Colectează date de preț, orderele dintr-un order book și volumele în timp real de la mai multe exchange-uri. De asemenea, preia balanța userului pentru diverse criptomonede.

Componente:

În cazul CEX-ului Binance, când avem nevoie de prețul curent pentru o pereche de criptomonede sau toate orderele plasate pentru acea pereche, folosim web sockets în fața REST API-ului din motive de performanță, pentru a evita interogarea continuă:

  1. Se identifică stream-ul corect. De exemplu, pentru BTCUSDT avem variantele:

    1. btcusdt@depth - implicită, pentru actualizări la nivel de secundă,

    2. btcusdt@depth@100ms - pentru actualizări la fiecare 100ms,

    3. btcusdt@depth10 - pentru top 10 bid-uri și ask-uri.
  2. Endpoint-ul pentru stream-urile publice este: wss://stream.binance.com:9443/ws , iar pentru a ne abona la date despre order book-ul BTCUSDT, ne putem conecta la wss://stream.binance.com:9443/ws/btcusdt@depth. Putem să o facem manual sau prin intermediul unei biblioteci puse la dispoziție de exchange care gestionează și cazurile de reconectare, backoff exponențial, etc.

  3. Dacă pe endpoint-ul web socket-ului se primesc doar actualizările de preț, va trebui să păstrăm local un snapshot al orderbook-ului (cerut inițial prin REST API) pe care să îl ținem actualizat pe baza actualizărilor primite.

Însă când preluăm balanța userului din exchange-ul centralizat, vom face o cerere cu API key și secret key cum a fost descris în secțiunea despre autentificare și autorizare.

În cazul DEX-ului Uniswap, după ce preluăm datele prin API (prin conectare la un nod Ethereum care ne permite să citim datele din blockchain sau folosind The Graph - printr-un query rapid de GraphQL) sau WebSockets (pentru a primi notificări despre evenimentele de pe rețea, cum ar fi cele de Swap), va trebui să efectuăm calcule pentru a stabili prețul token-ului de interes. Putem folosi API sau WebSocket. Uniswap nu are un server propriu care să ne ofere aceste funcționalități, fiind doar un protocol (smart contracts) de pe blockchain-ul Ethereum, iar pentru a prelua date de pe blockchain este nevoie de un nod dedicat ce necesită costuri ridicate. De aceea, se pot folosi soluții ca Infura sau Alchemy care oferă acces instant la un nod Ethereum, expunând și funcționalitate API peste HTTPS, dar și WSS, request-urile făcându-se pe bază de API key.

Logica

Analizează datele și identifică oportunitățile de arbitraj.

Componente:

Execuția

Plasează ordinele pe exchange-uri pentru a exploata oportunitățile detectate.

Componente:

Pentru interacțiunea cu un exchange descentralizat, vom exemplifica pașii necesari pentru Uniswap, un DEX important de tip AMM, bazat pe liquidity pools, de pe blockchainul Ethereum. Prețurile sunt calculate în timp real pe baza raportului dintre activele aflate în poolul de lichiditate și nu necesită existența unor ordere ca în cazul exchange-urilor centralizate.

Pașii pentru o tranzacție de swap sunt următorii:

  1. Conectare la un provider Ethereum.

  2. Definirea tokenilor implicați în swap.

  3. Preluarea datelor despre perechea de tokeni.

  4. Configurarea tranzacției dorite (ruta de schimb și parametrii trade-ului: cantitatea de tokeni de intrare, tipul tranzacției)

  5. Calcularea cantității minime a tokenilor primiți - pe bază de slippage.

  6. Generarea parametrilor swapului - necesari apelării Smart Contract-ului.

  7. Semnarea și trimiterea tranzacției.

    1. Pe lângă datele prepregătite anterior, se stabilește și gas-ul necesar.

    2. Semnarea se face folosind cheia privată a walletului.

    3. Tranzacția semnată este trimisă către rețea spre procesare.

Risk Management

Protejează botul de pierderi.

Componente:

Storage & reporting

Salvează istoricul tranzacțiilor și al oportunităților și oferă utilizatorului un dashboard personalizat.

Orchestrator

Gestionează setările și legătura dintre module.

Componente:

Concluzii

Deoarece pe exchange-urile mari, pe criptomonedele cunoscute există deja o multitudine de boți de arbitraj foarte performanți și bine optimizați, oportunitățile reale de arbitraj rămân în cazul tokenilor mai puțin cunoscuți sau a exchange-urilor mai mici.

Conferință TSM

NUMĂRUL 150 - Technologiile SAP ABAP

Sponsori

  • BT Code Crafters
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • GlobalLogic
  • Colors in projects