Käivitasime paberkauplemise strateegia tehingu keskel uuesti ja saime varasemaga võrreldes teistsuguse korralduste jada. Samad turuandmed, sama strateegia versioon, sama kontojääk. Signaali arvutus klappis. Strateegia mälu oma positsiooni ja ootel korralduste kohta aga mitte.
Uurisime lahknevust terve päeva kestnud taasesituse käigus. Kasulik õppetund oli lihtne: taaskäivitamine on sinu tarkvara jaoks turusündmus. Kui sa ei testi, kuidas strateegia oma oleku taastab, võib puhas järeltest varjata paberkauplemise süsteemi, mis unustab, mis talle kuulub.
09:10 — Valisime igava positsiooni
Teststrateegia kauples likviidse perpetuaalse lepinguga: siseneda pikaks, kui lühike libisev keskmine tõuseb üle pikema, ja väljuda vastupidise ristumise korral. Alustasime taasesitust väikese juba avatud positsiooniga ning vähendamiseks turul ootel oleva ainult positsiooni vähendava limiitkorraldusega. Nii tuli taastamisel rekonstrueerida 2 asja: mis meile kuulus ja mida olime kauplemisplatvormil juba teha palunud.
Kontrollpunktis oli kontol 0.04 lepingut. Korraldus oli avatud 0.01 lepingu ulatuses. Strateegia protsess oli mõlemad väärtused mällu vahemällu salvestanud, kuid käivitusrada laadis alla ainult positsiooni. See eeldas, et vahemällu salvestatud korraldust enam pole.
09:25 — Ilmus esimene topeltkorraldus
Taaskäivitamisel nägi strateegia olemasolevat pikka positsiooni, käivitas signaaliloogika ja esitas veel ühe positsiooni 0.01 lepingu võrra vähendava korralduse. Nüüd oli paberkauplemise kauplemiskeskkonnas 2 aktiivset korraldust. Kumbki polnud eraldi võttes halb korraldus. Koos võisid need müüa kavandatust 2 korda suurema koguse, kui mõlemad täidetakse.
Algul süüdistasime signaalitsüklit. Viga polnud tsüklis, vaid mittetäielikus hetktõmmises. Strateegia küsis: „Milline positsioon mul on?”, kuid ei küsinud kunagi: „Millised korraldused on veel aktiivsed?”
| Olek pärast taaskäivitust | Mida protsess uskus | Mis kontol oli |
|---|---|---|
| Positsioon | Pikk 0.04 | Pikk 0.04 |
| Avatud vähendavad korraldused | Puuduvad | 2 korraldust, kumbki 0.01 |
| Kavandatud positsioon pärast 1 täitmist | Pikk 0.03 | Võis muutuda pikaks positsiooniks 0.02 |
10:00 — Parandasime taastamise, seejärel leidsime ajastusega seotud erijuhtumi
Muutsime käivitust nii, et enne uute otsuste tegemise lubamist taastataks olek konto positsioonide ja avatud korralduste põhjal. See kõrvaldas topeltkorralduse. Seejärel muutsime katkestuse keerulisemaks: 1 korraldus täideti strateegia võrguühenduseta oleku ajal ja täitmisteade saabus pärast taasühendumist.
Kontopilt kajastas täitmist juba. Seejärel vähendas hilinenud teade kohalikku positsiooni teist korda. Mõne sekundi vältel uskus strateegia, et tal on 0.02 lepingut, kuigi kontol oli 0.03. Järgmine tasakaalustus põhines näilisel puudujäägil.
Lisasime kooskõlastusreeglid: kasuta lähtepunktina kontopilti, eira sündmuste identifikaatorite abil täitmisi, mis seal juba kajastuvad, ning ära esita korraldusi enne algse sünkroonimise lõppu. Teade võib saabuda hilja või 2 korda. Taastamine peab mõlemaga toime tulema.
13:40 — Taasesitus tabas vaevumärgatava lahknevuse
Taasesitasime sama hinnaliikumise algses käivituses ja taaskäivitatud käivituses. Lõpliku P&L-i võrdlemisel oleks probleem märkamata jäänud: pärast turu pöördumist lõppesid mõlemad versioonid sama positsiooniga. Korraldussündmuste võrdlus tõi selle esile.
Logisime iga otsuse koos loetud olekuga: positsioon, avatud korraldused, viimati töödeldud täitmise identifikaator, signaali väärtus ja strateegia versioon. Esimene lahknev sündmus sai selgituse. Üks käivitus nägi aktiivset korraldust, teine tühja loendit. Hiljem rakendas üks neist täitmise 2 korda.
Sama lõppsaldo ei tõesta, et käitumine oli sama. Võrdle otsuste ja korralduste jada, eriti taastamise piiril.
16:20 — Mida teeksime järgmisel korral teisiti
Kulutasime liiga kaua hinnaliikumise taasesitamisele, enne kui kontrollisime konto oleku üleminekuid. Järgmisel korral lisaksime esmalt rikkestsenaariumid ning hoiaksime turu hinnaliikumise peaaegu muutumatuna. Nii on tarkvaraviga hõlpsasti märgatav ja volatiilne liikumine ei hägusta vea diagnoosimist.
- Taaskäivita süsteem avatud positsiooni ja osaliselt täidetud korraldusega.
- Katkesta ühendus pärast korralduse esitamist ja loo see siis uuesti enne täitmisteate saabumist.
- Saada sama täitmisteade 2 korda ja kontrolli, et see muudab olekut ainult 1 korra.
- Blokeeri uued korraldused, kuni nii positsioonid kui ka avatud korraldused on kooskõlastatud.
- Võrdle katkematute ja taaskäivitatud käivituste otsuste ja korralduste logisid.
Õppisime ka salvestama taastamise hetktõmmise koos strateegia versiooni ja sündmuslogiga. Nii sai vea mõne minutiga korratavaks muuta, selle asemel et loota kellegi mälule täpse taasühendumisjada meenutamisel.
Paberkauplemise strateegia, mis käitub õigesti ainult seni, kuni selle protsess töötab, pole veel täielikku peaproovi läbinud. Taaskäivita see positsiooni keskel, lase täitmistel hilineda ja vaata üle kõik pärast seda saadetud korraldused. Eesmärk pole tõestada, et see kunagi ei tõrgu. Eesmärk on muuta selle taastumine nähtavaks, enne kui paberkauplemise konto peab sama õppetunni ootamatult selgeks õpetama.
← Kõik postitused


