Mi-ai spus că procesul tău de tranzacționare paper s-a blocat peste noapte. L-ai repornit înainte de următoarea decizie, nu ai văzut nicio eroare și ai presupus că a reluat activitatea de unde se oprise. Apoi a trimis un ordin de cumpărare pentru un activ pe care îl dețineai deja. Vrei să știi dacă strategia are un bug.
E posibil. Dar mai întâi verifică dacă procesul repornit știe aceleași lucruri ca și contul paper. Repornirea este o problemă de recuperare a stării: pozițiile, numerarul, ordinele deschise și orice informație memorată de strategie care influențează următoarea decizie trebuie să fie în concordanță. Să pornești din nou codul este partea ușoară.
Ce credea strategia înainte să se blocheze?
Notează ultima decizie luată de proces înainte să se oprească. Pentru fiecare instrument tranzacționat, consemnează poziția vizată, poziția efectivă din cont, ordinele restante și starea semnalului care va influența următoarea acțiune. Dacă aceste informații nu există, nu poți ști dacă repornirea a restabilit starea sau doar a inițializat o strategie nouă.
Să zicem că strategia ta orară cumpără o unitate când semnalul de trend devine pozitiv, apoi păstrează poziția până când semnalul devine negativ. Procesul trimite ordinul de cumpărare la 14:00, dar se blochează înainte să înregistreze acceptarea ordinului. Platforma paper îl execută. La repornire, strategia nu găsește nicio poziție înregistrată, iar semnalul este încă pozitiv, așa că trimite încă un ordin de cumpărare. Semnalul se comportă consecvent. Memoria strategiei despre activele din cont este învechită.
De aceea, poziția curentă din cont trebuie reconciliată cu starea persistentă a strategiei înainte de a permite ordine noi. O copie locală a stării poate fi utilă, dar contul sau platforma este sursa autoritară pentru ce s-a executat efectiv.
Ce stare trebuie păstrată după o repornire?
Începe cu starea care poate schimba următorul ordin. Păstrează o înregistrare durabilă, cu marcaj temporal și versiune pentru fiecare actualizare; fă o copie înainte să modifici logica de recuperare, ca să poți reproduce ulterior incidentul.
| Stare | De ce contează | Verificare la recuperare |
|---|---|---|
| Poziții și numerar | Determină expunerea și puterea de cumpărare disponibilă | Compară valorile persistate cu cele din contul paper |
| Ordine deschise | Un ordin poate fi executat cât timp procesul este oprit | Interoghează starea ordinului și reconciliază executările parțiale |
| Memoria semnalului | Trecerile de prag, perioadele de pauză și perioadele de deținere se pot întinde pe mai multe decizii | Restabilește ultimele date de intrare ale deciziei confirmate |
| Ultimul eveniment procesat | Stabilește de unde reia strategia citirea datelor | Redă evenimentele ulterioare fără să le aplici de două ori |
Memoria semnalului este ușor de trecut cu vederea. O strategie care tranzacționează pe baza unei intersecții poate stoca valoarea indicatorului din ziua precedentă pentru a detecta o intersecție nouă. Dacă pornește cu o valoare goală, poate interpreta o condiție deja existentă ca pe un eveniment nou. Cronometrul unei perioade de pauză are aceeași problemă: repornirea nu trebuie să reseteze pe ascuns o regulă care trebuia să persiste.
Cum poți face recuperarea repetabilă?
Atribuie fiecărui ordin un ID de client stabil, derivat din rularea strategiei și decizia care l-a generat. Dacă procesul reîncearcă după un timeout, poate verifica dacă decizia respectivă a creat deja un ordin, în loc să plaseze un duplicat. Înregistrează modificările de stare doar după ce confirmi evenimentul corespunzător din cont și păstrează ID-urile ordinelor și ale executărilor care explică modificarea.
Apoi testează momentul care a provocat incidentul. Rulează strategia până la o decizie, salvează starea, oprește procesul și restabilește-l folosind pozițiile și istoricul ordinelor din contul paper. Compară următoarea decizie și ordinele rezultate cu cele dintr-o rulare neîntreruptă. Repetă scenariul cu un ordin executat parțial și cu o cădere între trimiterea ordinului și confirmarea primirii lui. Rularea reluată nu ar trebui să inventeze o poziție nouă sau să repete o acțiune deja încheiată.
Păstrează un jurnal de recuperare: ultimul eveniment procesat, ora instantaneului contului, stările ordinelor deschise, versiunea strategiei restabilite și prima decizie de după repornire. Astfel, „a pornit din nou” devine ceva ce poți audita.
În ce ar trebui să ai încredere după repornire?
Ai încredere în proces doar după ce starea contului și cea a strategiei sunt reconciliate, ordinele în așteptare au stări cunoscute, iar următoarea decizie corespunde cu cea pe care ai aștepta-o într-o rulare continuă. Dacă nu poți explica o neconcordanță, suspendă trimiterea ordinelor paper și verifică istoricul evenimentelor. Faptul că procesul rulează nu dovedește că strategia și-a recuperat starea.
Ai descoperit deja partea utilă a blocării: a scos la iveală o presupunere pe care rularea obișnuită nu te-a obligat niciodată să o verifici. Transformă repornirea într-un scenariu repetabil și vei ști ce își amintește strategia înainte să-i ceri să tranzacționeze din nou.
← Toate articolele


