6 octombrie 2026 · cercetare

De ce a executat backtestul meu o tranzacție la un preț pe care piața nu l-a afișat niciodată?

De ce a executat backtestul meu o tranzacție la un preț pe care piața nu l-a afișat niciodată?

Un backtest poate raporta o execuție la un preț pe care piața nu l-a afișat niciodată. De obicei, simulatorul a dedus o execuție plauzibilă la prima vedere pornind de la date incomplete: maximul și minimul unei bare, un preț median sau un preț limită atins de o singură tranzacție. Astfel, jurnalul tranzacțiilor poate părea precis, deși ascunde ce a oferit de fapt piața.

Începe prin a întreba cu ce preț ar fi putut interacționa ordinul tău. O bară bazată pe ultima tranzacție arată la ce prețuri s-a tranzacționat într-un interval. Nu îți spune care erau bid-ul și ask-ul când a sosit ordinul, ce cantitate era disponibilă la acele prețuri sau dacă ordinul tău putea ajunge în fața cozii.

De ce afișează backtestul meu o execuție în afara prețului pieței?

Mai întâi, precizează ce înseamnă „în afara”. O execuție de cumpărare sub minimul barei sau una de vânzare peste maximul ei indică o eroare evidentă de contabilizare sau de temporizare. Chiar și o execuție în intervalul dintre maxim și minim poate fi fictivă: este posibil ca tranzacția la acel preț să fi avut loc înainte ca ordinul să existe, pe partea opusă a spread-ului sau într-o cantitate prea mică pentru a executa ordinul tău.

Să luăm o bară de un minut cu deschiderea la 100.00, minimul la 99.80 și închiderea la 100.10. Strategia ta vede bara completă, trimite un ordin de cumpărare, iar simulatorul îl execută la 99.80. Este posibil ca minimul să fi fost atins chiar la începutul minutului, cu cincizeci de secunde înainte de semnal. Bara nu oferă nicio dovadă că prețul de 99.80 era disponibil după luarea deciziei.

Date disponibileCe indicăCe nu pot indica
Bară OHLCVIntervalul prețurilor tranzacționate și volumul observat într-un intervalSuccesiunea prețurilor, bid-ul și ask-ul sau disponibilitatea la sosirea ordinului
Tranzacții raportateExecuții raportate, cu marcaje temporale și prețuriLichiditatea pasivă sau poziția ta în coadă
Cotații de top-of-bookCel mai bun bid și ask afișate la momentele eșantionateAdâncimea dincolo de cel mai bun nivel sau persistența unei cotații între eșantioane
Evenimente din registrul de ordineModificări ale adâncimii afișate și evenimente din coadă, în limitele acoperirii fluxului de dateLichiditatea ascunsă, accesul la platformă sau prioritatea garantată

O altă cauză frecventă este confundarea prețurilor mediane cu cele executabile. Dacă cotația este bid 99.99 și ask 100.01, o cumpărare la prețul median de 100.00 arată îngrijit într-un raport. În general, o cumpărare marketable se execută la ask, la care se adaugă impactul ordinului în funcție de mărimea lui. Tratarea prețului median ca preț de execuție elimină pe ascuns jumătate din spread.

Se poate executa un ordin limită doar pentru că piața a atins prețul lui?

Faptul că piața a atins prețul este o dovadă că s-a înregistrat o tranzacție la acel preț limită. Nu dovedește că ordinul tău pasiv s-ar fi executat. Dacă alte ordine erau înaintea ta, volumul tranzacționat la acel preț poate să fi fost prea mic pentru a ajunge la poziția ta în coadă. De asemenea, tranzacția raportată poate să fi avut loc pe o altă platformă, în timp ce ordinul tău era plasat în altă parte.

Să presupunem că ordinul tău limită de cumpărare este la 50.00, iar după plasarea lui piața tranzacționează 200 de acțiuni la acel preț. Un simulator care execută la simpla atingere a prețului îți execută toate cele 500 de acțiuni. Un model mai prudent verifică cât s-a tranzacționat la sau sub 50.00 după sosirea ordinului, apoi ține cont de volumul estimat aflat înaintea ta în coadă. Fără date despre registrul de ordine la nivel de ordin, poziția în coadă rămâne o ipoteză. Ea ar trebui să fie vizibilă în rezultate, nu strecurată ca și cum ar fi o certitudine.

Pentru un sistem de cercetare de mici dimensiuni, aș prefera să precizez această ipoteză și să testez un interval de valori, în loc să pretind că datele de tip candle dezvăluie prioritatea în coadă. Intervalul potrivit depinde de platformă, mărimea ordinului și frecvența tranzacțiilor strategiei. O acțiune liniștită la deschiderea pieței și un contract crypto cu lichiditate redusă la 03:00 UTC implică probleme de execuție diferite.

Cum aleg un model de execuție pentru datele de tip bară?

Adaptează modelul atât la date, cât și la afirmația strategiei. Un backtest bazat pe bare poate fi util și pentru strategiile lente, dar execuțiile simulate trebuie să respecte ce dezvăluie efectiv barele.

  1. Stabilește momentele deciziei și sosirii. Dacă un semnal folosește prețul de închidere al barei, trimite ordinul după închiderea ei. Simulează execuția folosind următorul interval sau următoarea cotație disponibilă, nu minimul anterior al barei deja încheiate.
  2. Folosește partea corectă a spread-ului. Pentru cumpărări marketable, pornește de la ask; pentru vânzări, de la bid. Dacă ai doar bare cu tranzacții, estimează spread-ul dintr-o sursă separată sau menționează că modelul nu îl include.
  3. Limitează execuțiile la lichiditate plauzibilă. Aplică o limită de participare la volumul observat și include comisioanele și impactul asupra pieței. Volumul total al unei bare nu înseamnă că tot acest volum era disponibil la prețul ales.
  4. Testează rezistența ipotezelor. Compară execuțiile la deschiderea următoarei bare cu un slippage prudent și verifică dacă rezultatul rezistă unor condiții de execuție mai nefavorabile. Nu ajusta modelul de execuție până când strategia devine profitabilă.

Acestea sunt alegeri de modelare, nu o rețetă pentru a recupera singurul preț de execuție real din date incomplete. Dacă strategia depinde de captarea a câtorva puncte de bază, este posibil ca datele de tip bară să nu ofere suficiente dovezi pentru această afirmație.

Cum pot afla în ce etapă a backtestului a apărut execuția imposibilă?

Urmărește o tranzacție suspectă de la semnal până în registru. Păstrează în câmpuri separate marcajul temporal al deciziei, momentul trimiterii ordinului, sosirea simulată, observația de piață selectată, prețul execuției, cantitatea executată și comisionul. Apoi verifică, în ordine:

Dacă nu poți răspunde la aceste întrebări din registrul tranzacției, backtestului îi lipsesc dovezile privind execuția. Adaugă câmpurile, reia manual câteva tranzacții folosind datele brute și verifică dacă execuția raportată ar fi fost posibilă conform modelului dorit. O curbă de capital fără anomalii nu va detecta un preț care a existat doar în simulator.

backtestingdate de piațăexecuțieingineria datelor
← Toate articolele