Backtestul nostru a numărat 91 de execuții din 100 de ordine trimise. În paper trading, aceeași strategie a obținut 63. Timpul median de la semnal la confirmarea primirii ordinului a fost de 84 de milisecunde, iar 12 dintre execuțiile paper ratate erau ordine limită pe care backtestul le considera executate de îndată ce prețul le atingea.
Diferența de 28 de puncte părea o problemă a strategiei până când am separat deciziile privind ordinele de deciziile privind execuțiile. Strategia a ales aproape aceeași direcție, dimensiune și același preț în ambele simulări. Procesul de execuție a fost diferit: unele ordine au ajuns cu întârziere, altele au rămas deschise, iar unele au ajuns pe o piață care se mișcase deja.
Ce înseamnă paritatea ordinelor între backtest și paper?
Paritatea înseamnă că backtestul și sistemul paper iau decizii comparabile pe baza acelorași informații disponibile, apoi țin cont explicit de diferențele dintre modelele lor de execuție. Nu înseamnă că fiecare execuție simulată trebuie să corespundă unei execuții paper. Barele istorice nu pot reconstitui poziția în coadă, iar o platformă paper poate folosi un model de potrivire diferit de cel al unei burse live.
Întrebarea utilă este mai precisă: pentru fiecare ordin pe care strategia a intenționat să-l plaseze, poți explica ce s-a întâmplat apoi? Numărul tranzacțiilor și randamentul final ascund prea multe. Păstrează o înregistrare asociată pentru fiecare decizie, cu un ID stabil al deciziei strategiei, transmis mai departe prin evenimentele de semnal, ordin, confirmare, anulare și execuție.
| Comparație | Ce evidențiază | Exemplu |
|---|---|---|
| Momentul și direcția deciziei | Diferențe de date de intrare sau de programare | Semnalul paper apare cu o bară mai târziu |
| Dimensiunea și prețul solicitate | Rotunjiri, reguli de risc sau ale platformei | Backtestul trimite 0.013 BTC; paper rotunjește la 0.01 |
| Tranzițiile de stare ale ordinului | Diferențe la trimitere, respingere și anulare | Backtestul tratează o cerere de anulare ca pe o anulare încheiată |
| Cantitatea și prețul executate | Model de execuție prea optimist sau mișcarea pieței | O limită atinsă primește execuție integrală în backtest, dar nicio execuție paper |
De ce ordinele limită atinse au reprezentat o parte atât de mare din execuțiile ratate?
Backtestul nostru folosea bare de 1 minut. Dacă prețul-limită se afla în intervalul dintre maximul și minimul unei bare, marca ordinul ca executat. Regula arată dacă piața a tranzacționat la acel preț la un moment dat în minutul respectiv. Nu arată dacă ordinul nostru era activ atunci, dacă era primul la coadă sau dacă s-a tranzacționat o cantitate suficientă după sosirea lui.
Jurnalele paper au scos la iveală problema de sincronizare. Strategia a calculat un semnal la 12:03:00.000, dar evenimentul de date de piață a ajuns la procesul de trimitere a ordinelor 31 de milisecunde mai târziu. Verificările de risc au durat încă 22 de milisecunde, iar simulatorul platformei a confirmat ordinul după alte 31 de milisecunde. Într-o mișcare rapidă, o bară istorică poate face un preț să pară accesibil, deși ordinul limită a ajuns după ce piața îl depășise.
A mai fost o problemă: 12 ordine paper erau încă deschise când backtestul trecuse deja mai departe. Simulatorul accepta o cerere de anulare ca și cum ordinul ar fi dispărut imediat. În sistemul paper, confirmarea anulării venea mai târziu; 3 ordine s-au executat în acel interval. Astfel, poziția pe care o vedea următorul semnal s-a schimbat.
Cum măsor diferența fără să mă induc în eroare?
Începe cu un raport simplu de reconciliere, grupat după intenția ordinului. Păstrează vizibil numitorul. „Rata de execuție” poate însemna execuții per ordin trimis, cantitate executată împărțită la cantitatea solicitată sau ordine executate împărțite la ordinele ajunse la platformă. Acestea răspund la întrebări diferite.
- Asociază evenimentele folosind ID-ul deciziei sau ID-ul ordinului clientului, nu o marcă de timp estimată ulterior.
- Compară mai întâi deciziile: momentul semnalului, direcția, cantitatea solicitată, tipul ordinului și prețul-limită.
- Pentru deciziile care corespund, compară întârzierea confirmării, respingerile, timpul cât ordinul a rămas deschis, momentul anulării, cantitatea executată și prețul mediu de execuție ponderat cu volumul.
- Raportează ratele în funcție de tipul ordinului și de condițiile pieței. O rată totală de execuție de 63% poate ascunde 90% pentru ordinele la piață și 35% pentru ordinele limită pasive.
Păstrează categoriile distincte. Un ordin respins nu este un ordin neexecutat; un ordin executat parțial nu este executat integral; iar un ordin anulat după o execuție parțială a modificat deja poziția. Numără atât ordinele, cât și cantitatea solicitată, ca un grup de ordine mici să nu facă rezultatul să pară mai bun decât este.
Ce ar trebui schimbat în backtest?
Folosește o regulă de execuție potrivită rezoluției datelor și comportamentului dorit al ordinului. Cu bare, atingerea prețului-limită indică o posibilă execuție, dar nu o dovedește. Poți modela prudent execuțiile parțiale, poți cere ca prețul să treacă dincolo de nivelul-limită sau poți exclude ordinele pasive a căror poziție în coadă nu poate fi estimată. Fiecare alegere răspunde la o întrebare diferită; documenteaz-o și compară rezultatul folosind mai multe reguli plauzibile.
Modelează și starea ordinului. Un ordin rămâne activ până când sistemul primește un eveniment terminal, iar o cerere de anulare nu șterge expunerea. Dacă strategia poate trimite un al doilea ordin cât timp primul este în așteptare, backtestul trebuie să reprezinte această condiție de cursă sau să o prevină prin proiectare.
Un model de execuție afirmă ce ar fi putut face ordinul tău. Dă-i o regulă pe care o poți explica, apoi verifică acea regulă în raport cu jurnalele paper.
În cazul diferenței noastre de 28 de puncte, surpriza nu a fost că un backtest bazat pe bare de 1 minut a supraestimat execuțiile pasive. Ci că poziția strategiei divergea înaintea următoarei decizii, pentru că momentul anulării fusese omis. După ce am corectat modelul de stare al ordinului și am încetat să considerăm fiecare limită atinsă drept o execuție, comparația cu paper a devenit mai puțin măgulitoare și mai utilă.
Acesta este criteriul practic al parității: fiecare diferență semnificativă dintre comportamentul simulat și cel paper are o cauză consemnată, iar backtestul nu pretinde certitudine acolo unde datele nu o pot oferi.
← Toate articolele


