Un backtest îți poate executa ordinul limită chiar și atunci când nu a existat nicio oportunitate tranzacționabilă. Dacă minimul unei lumânări a coborât sub prețul tău limită de cumpărare, multe motoare înregistrează o execuție. Însă minimul îți spune doar că a avut loc cel puțin o tranzacție raportată la acel preț sau mai jos. Nu îți spune cât s-a tranzacționat, ce volum era în coadă înaintea ta sau dacă ordinul tău fusese deja activ.
Distincția contează mai ales când avantajul strategiei depinde de execuții pasive frecvente. Un model care tratează fiecare atingere a prețului ca pe o execuție integrală poate transforma o intrare răbdătoare într-o sursă imaginară de alfa.
Dacă o lumânare atinge prețul meu limită, înseamnă că ordinul s-a executat?
Nu. Înseamnă că intervalul de preț înregistrat pentru lumânare a inclus prețul tău limită. Posibilitatea executării ordinului depinde de registrul de ordine al pieței, fluxul tranzacțiilor, poziția ta în coadă și momentul în care a ajuns ordinul.
Să presupunem că ai un ordin limită de cumpărare la $100.00. Lumânarea se deschide la $100.20, coboară până la $99.98 și se închide la $100.10. Este posibil să se fi înregistrat o tranzacție cu doi cenți sub prețul tău, dar dacă la $100.00 era un volum mare în coadă înaintea ta și acolo s-a tranzacționat doar un volum mic, ordinul tău poate să fi rămas neatins. Doar pe baza OHLCV nu poți vedea coada.
Mai există o complicație: o lumânare agregă evenimentele desfășurate în timp. Dacă semnalul tău se calculează la închiderea lumânării, nu poți presupune că ordinul tău era deja în registru la începutul lumânării, când s-a format minimul. Lumânarea comprimă succesiunea evenimentelor care ți-ar da răspunsul.
Ce îmi pot spune, de fapt, datele OHLCV despre executarea unui ordin limită?
OHLCV poate exclude unele execuții și le poate face pe altele plauzibile. Nu poate stabili prioritatea în coadă și nici garanta volumul disponibil pentru ordinul tău.
| Observație | Ce susține | Ce nu poate dovedi |
|---|---|---|
| Minimul lumânării a rămas peste un ordin limită de cumpărare | Nicio tranzacție raportată nu a ajuns la acel preț în timpul lumânării | Că ordinul s-ar fi executat |
| Minimul lumânării a atins prețul ordinului limită de cumpărare | Prețul a fost raportat la nivelul limitei | Că s-a tranzacționat vreun volum după ce a ajuns ordinul tău |
| Minimul lumânării a coborât sub prețul ordinului limită de cumpărare | Au avut loc tranzacții la acel preț sau mai jos | Că un volum suficient a ajuns până la poziția ta în coadă |
| Volumul total al lumânării a depășit mărimea ordinului tău | Că piața a tranzacționat cel puțin atât undeva în timpul formării lumânării | Că volumul s-a tranzacționat la prețul tău, după sosirea ordinului |
Prin urmare, un motor bazat pe lumânări are nevoie de o ipoteză privind execuția. Tratează această ipoteză ca pe un model cu o limitare cunoscută, nu ca pe un fapt extras din lumânare.
Cum ar trebui să modelez executarea ordinelor limită într-un backtest?
Începe cu momentul plasării ordinului. Stabilește când devine disponibil semnalul, când ajunge ordinul la platformă și ce evenimente ulterioare ale pieței pot interacționa cu el. Pentru un semnal cunoscut la închiderea lumânării, o regulă conservatoare bazată pe lumânări este ca ordinul să devină eligibil abia de la lumânarea următoare.
Apoi separă eligibilitatea prețului de volumul executat. Faptul că un ordin limită devine eligibil pentru tranzacționare nu înseamnă că se execută integral. Dacă ai înregistrări ale tranzacțiilor, dar nu și istoricul registrului de ordine, poți cere ca volumul tranzacționat la prețul limită sau la unul mai bun să depășească un multiplu al mărimii ordinului tău. Acest multiplu este o aproximare a volumului din coadă, nu o constantă universală. Testează mai multe valori și raportează cum se schimbă rezultatul.
De exemplu, să presupunem că strategia plasează un ordin limită de cumpărare de 2 BTC, iar la prețul ales se tranzacționează 3 BTC după ce ordinul devine eligibil. Un model care cere 5 BTC de volum eligibil nu ar executa ordinul; un model care folosește un multiplu de volum de 1.0 l-ar executa. Niciunul dintre rezultate nu reconstruiește coada. Comparația arată cât de mult depinde strategia de o ipoteză pe care nu o poți observa.
Păstrează ordinele neexecutate în simulare. Anulează-le când le-ar anula strategia și lasă tranzacția ratată să rămână ratată. Dacă execuți un ordin de fiecare dată când prețul lui limită este atins, ignorând ordinele care expiră fără să fie atinse, introduci o distorsiune atât în execuție, cât și în numărul oportunităților.
Când am nevoie de date despre registrul de ordine?
Folosește actualizări ale registrului de ordine și tranzacții atunci când poziția în coadă sau execuțiile parțiale sunt esențiale pentru strategie: market making, cotații pasive cu durată scurtă sau intrări care depind de poziționarea aproape de începutul unei cozi aglomerate la un anumit nivel de preț. Chiar și atunci, datele istorice publice s-ar putea să nu dezvăluie poziția ta exactă în coadă. Trebuie să modelezi sosirea ordinului, anulările din fața ta, regulile de potrivire și propriul impact asupra pieței.
Pentru strategiile mai lente, registrele detaliate pot adăuga complexitate fără să clarifice incertitudinea principală. Un studiu bazat pe lumânări poate compara în continuare o limită superioară cu execuție la atingerea prețului cu scenarii mai stricte, condiționate de volum. Dacă avantajul aparent dispare de îndată ce ceri execuții plauzibile, aceasta este o informație valoroasă pentru cercetare.
Cum îmi dau seama dacă rezultatul depinde de execuții optimiste?
Rulează aceeași strategie cu un set restrâns de reguli explicite de execuție și compară mai mult decât randamentul final. Urmărește numărul ordinelor executate, rata execuțiilor parțiale, timpul petrecut în registru, volumul anulat, mișcările ratate după neexecutarea ordinelor și rulajul. O strategie își poate păstra randamentul principal bazându-se totuși pe un număr mult mai mic de tranzacții, alese convenabil.
Următoarea verificare utilă este tranzacționarea pe un cont paper: trimite logica efectivă a ordinelor și înregistrează confirmările, execuțiile și anulările. Execuțiile paper depind în continuare de regulile platformei sau simulatorului, dar verifică aspecte legate de sincronizare și gestionarea ordinelor pe care o lumânare nu le poate arăta.
O limită atinsă oferă dovezi despre preț. O execuție afirmă că ordinul a fost executat. Backtestul tău ar trebui să facă vizibilă diferența dintre aceste afirmații.
← Toate articolele


