Ni-restart namin ang isang paper strategy sa kalagitnaan ng trade at iba ang naging pagkakasunod-sunod ng mga order kumpara sa inilabas nito bago mag-restart. Parehong market data, parehong bersyon ng strategy, parehong balanse ng account. Tugma ang kalkulasyon ng signal. Hindi tugma ang naaalala ng strategy tungkol sa posisyon at mga nakabinbing order nito.
Sinubaybayan namin ang hindi pagtutugmang ito sa maghapong pag-replay. Simple ang aral: isa ring market event para sa software mo ang pag-restart. Kung hindi mo susubukan kung paano muling binubuo ng strategy ang estado nito, maaaring itago ng malinis na backtest na nakakalimot ang paper system sa mga hawak nito.
09:10 — Pumili kami ng karaniwang posisyon
Isang likidong perpetual ang itinrade ng test strategy: magbukas ng long kapag umakyat ang maikling moving average sa ibabaw ng mas mahabang moving average, saka lumabas kapag nagkaroon ng salungat na crossover. Sinimulan namin ang replay na may maliit nang bukas na posisyon at reduce-only na limit order na nakapila para bahagyang bawasan ito. Dalawang bagay ang kailangang buuin muli sa recovery: kung ano ang hawak namin at kung ano na ang ipinagawa namin sa venue.
Sa checkpoint, may hawak ang account na 0.04 contract. Bukas ang order para sa 0.01. Naka-cache sa memorya ang dalawang halagang ito ng proseso ng strategy, pero posisyon lang ang kinukuha nito sa pagsisimula. Itinuring nitong wala na ang naka-cache na order.
09:25 — Lumitaw ang unang dobleng order
Pagkatapos mag-restart, nakita ng strategy ang umiiral na long, pinatakbo ang signal logic nito at nagsumite ng isa pang 0.01 trim order. Dalawa na ang aktibong order sa paper venue. Walang masama sa alinman sa mga order kung nag-iisa ito. Pero kapag kapwa napunan, maaari silang makapagbenta ng doble sa nilalayong halaga.
Noong una, sinisi namin ang signal loop. Hindi ang loop ang problema; kulang ang snapshot. Itinanong ng strategy, “Anong posisyon ang hawak ko?” pero hindi nito itinanong, “Aling mga order ang pinoproseso pa?”
| Estado pagkatapos mag-restart | Ayon sa paniniwala ng proseso | Aktuwal na hawak ng account |
|---|---|---|
| Posisyon | Long 0.04 | Long 0.04 |
| Mga bukas na trim order | Wala | Dalawa, tig-0.01 |
| Nilalayong exposure kapag napunan ang isa | Long 0.03 | Maaaring maging long 0.02 |
10:00 — Inayos namin ang recovery, saka nakakita ng problema sa tiyempo
Binago namin ang pagsisimula para buuing muli ang estado mula sa mga posisyon at bukas na order ng account bago payagang gumawa ng mga bagong desisyon. Naalis nito ang dobleng order. Pagkatapos, ginawa naming mas magulo ang pagkakadiskonekta: napunan ang isang order habang offline ang strategy, at pagkatapos lamang muling kumonekta dumating ang abiso ng fill.
Nasa snapshot na ng account ang epekto ng fill. Pagdating ng naantalang abiso, muli nitong binawasan ang lokal na posisyon. Sa loob ng ilang segundo, inakala ng strategy na may hawak itong 0.02 contract kahit 0.03 ang nasa account. Nakasalalay sa maling kakulangang ito ang susunod nitong rebalance.
Nagdagdag kami ng mga tuntunin sa reconciliation: ituring na panimulang punto ang snapshot ng account, gumamit ng mga event identifier para balewalain ang mga fill na kasama na roon, at huwag magsumite ng order hangga't hindi tapos ang unang sync. Maaaring mahuli o maulit ang isang abiso. Kailangang kayanin ng recovery ang dalawang sitwasyon.
13:40 — Nahuli ng replay ang isang hindi kapansin-pansing mismatch
Ni-replay namin ang parehong galaw ng presyo para sa orihinal at ni-restart na takbo. Hindi sana mahahalata ang problema kung pinal na P&L lang ang inihambing namin: nagtapos ang dalawang bersyon sa parehong posisyon matapos bumaligtad ang merkado. Lumitaw ito nang ihambing namin ang mga order event.
Itinala namin ang bawat desisyon kasama ang estadong ginamit nito: posisyon, mga bukas na order, huling naprosesong fill identifier, halaga ng signal at bersyon ng strategy. Naipaliwanag agad ang unang magkaibang event. Nakakita ng gumaganang order ang isang takbo; walang laman ang listahan sa isa. Kalaunan, dalawang beses namang nailapat ng isa ang isang fill.
Hindi patunay ng magkaparehong kilos ang magkaparehong panghuling balanse. Ihambing ang pagkakasunod-sunod ng mga desisyon at order, lalo na sa mga puntong bumabawi ang system.
16:20 — Ano ang babaguhin namin sa susunod
Masyado kaming nagtagal sa pag-replay ng datos ng presyo bago sinuri ang mga pagbabago sa estado ng account. Sa susunod, uunahin naming magpasok ng mga sitwasyong pumapalya at pananatilihing halos patag ang galaw ng merkado. Mas madaling makita ang error sa software nang hindi ginugulo ng pabagu-bagong galaw ang pagsusuri.
- Mag-restart habang may posisyon at bahagyang napunang order.
- Mag-disconnect pagkatapos magsumite, saka muling kumonekta bago dumating ang abiso ng fill.
- Ihatid nang dalawang beses ang parehong fill event at tiyaking isang beses lang nito binabago ang estado.
- Harangin ang mga bagong order hangga't hindi parehong naka-reconcile ang mga posisyon at bukas na order.
- Ihambing ang mga log ng desisyon at order sa tuloy-tuloy at ni-restart na takbo.
Natutuhan din naming mag-save ng recovery snapshot kasama ng bersyon ng strategy at event log. Dahil dito, ilang minuto na lang ang kailangan para maulit ang problema, sa halip na umasa sa alaala ng isang tao tungkol sa eksaktong pagkakasunod-sunod ng muling pagkonekta.
Hindi pa ganap na nasubok ang paper strategy na tama lang ang kilos habang buhay ang proseso nito. I-restart ito habang may bukas na posisyon, hayaang mahuli ang dating ng mga fill, at suriin ang bawat order na ipapadala nito pagkatapos. Hindi layuning patunayang hindi ito kailanman pumapalya. Layunin nitong makita kung paano ito bumabawi bago ka muling mabigla at maturuan ng paper account sa parehong paraan.
← Lahat ng post


