Naudingas atgalinio testavimo patikrinimas nėra susijęs su geresnio parametro paieška: sustabdykite procesą įpusėjus, atkurkite jį ir užbaikite tą patį atkūrimą. Esant identiškoms įvestims ir kontroliuojamam vykdymo simuliatoriui, sprendimai, pavedimai ir nuosavas kapitalas turėtų sutapti su nepertrauktu paleidimu.
Jei nesutampa, radote būsenos valdymo problemą. Strategija priklauso nuo kažko, ko neišsaugojote arba negalėjote atkurti. Ši priklausomybė svarbi, kai tęsiami tyrimų paleidimai, pakeičiami vykdomieji procesai arba popierinės prekybos paslauga įdiegia naują kodą.
Man patinka šis testas, nes teisingas atsakymas neįprastai aiškus. Nėra ginčo, ar pasikeitė rinka. Abiem paleidimams pateikiama ta pati rinka.
Štai 3 netinkami būdai paleisti iš naujo. Skaičiai pateikti iliustracijai; kiekviena klaida gali pasitaikyti sistemoje, kuri kitais atžvilgiais yra deterministinė.
1. Įkelkite kelias žvakes ir laikykite, kad indikatorių istorijos pakanka
Tarkime, strategija naudoja 100 periodų eksponentinį slankųjį vidurkį. Jis atnaujinamas taip:
alpha = 2 / 101
ema_next = alpha * close + (1 - alpha) * ema_previous
Nepertrauktai veikiantis procesas išsaugo sukauptą EMA reikšmę. Iš naujo paleistas procesas gauna 100 žvakių, inicijuoja EMA pirmojo uždarymo kaina ir daro prielaidą, kad 100 periodų indikatoriui reikia 100 stebėjimų.
Ši prielaida supainioja indikatoriaus glodinimo parametrą su ribotu atminties langu. EMA išlaiko mažėjančią pradinės būsenos įtaką. Jei dviejų versijų EMA pradžioje skiriasi 10 kainos vienetų, o vėlesnės kainos sutampa, skirtumas mažėja taip:
| Atnaujinimų nuo inicijavimo | Likęs skirtumas | Pradinės paklaidos dalis |
|---|---|---|
| 100 | 1.353 | 13.53% |
| 250 | 0.0674 | 0.674% |
| 500 | 0.000454 | 0.00454% |
Skaičiavimas yra 10 * (99 / 101)^k. Įkėlus 100 žvakių turėsite tik 99 atnaujinimus, jei pirmasis stebėjimas naudojamas kaip pradinė reikšmė.
Pasekmės dažniausiai išryškėja ties sprendimo riba. Vieno paleidimo metu kaina viršija EMA, kito – yra žemiau. Nedidelis skaitinis skirtumas lemia visą papildomą sandorį. Tada gali išsiskirti ir atvėsimo laikotarpiai, laisvos lėšos bei vėlesni sprendimai.
Išsaugokite rekursinę indikatoriaus būseną, jo inicijavimo būseną ir paskutinį apdorotą įvykį. Kitas variantas – atkurti įvykius nuo žinomos pradinės būsenos. Ilgesnis apšilimas gali duoti priimtiną apytikslį rezultatą, bet jo trukmę rinkitės pagal aiškiai nustatytą paklaidos toleranciją ir patikrinkite, ar tokia paklaida gali pakeisti sprendimus. „5 kartus daugiau nei periodas“ tėra susitarimas, o ne įrodymas.
Be to, indikatoriai nėra visa istorija. Slenkančiajam procentiliui reikia jo lango. Internetiniam modeliui gali reikėti optimizatoriaus būsenos. Taisyklė, kuri po nuostolio laukia 3 žvakes, turi prisiminti nuostolį ir skaitiklį.
2. Išsaugokite pozicijas ir pamirškite vykdomus pavedimus
Tikslinė pozicija – 10 vienetų. Pirkimo pavedimas 10 vienetų jau įvykdytas iš dalies: nupirkti 4, dar 6 laukia įvykdymo. Kontroliniame taške išsaugote poziciją kaip 4, paleidžiate procesą iš naujo ir pateikiate naują pirkimo pavedimą trūkstamiems 6 vienetams.
Jei įvykdomi ir pradinis likutis, ir naujas pavedimas, jūsų pozicija bus 16 vienetų.
Atgaliniame teste ši klaida dažnai lieka nepastebėta, nes iš naujo paleidus įvykdymo variklį aktyvūs pavedimai tyliai ištrinami. Popierinėje prekyboje simuliatorius arba išorinė paslauga gali juos išsaugoti. Tuomet tas pats atkūrimo kodas sukuria skirtingą poziciją, priklausomai nuo to, kuris komponentas išliko.
| Paleidimo iš naujo metu | Tikroji būsena | Ką mato atkūrimas pagal poziciją |
|---|---|---|
| Tikslinė pozicija | 10 | 10 |
| Įvykdyta pozicija | 4 | 4 |
| Laukiantis pirkimo kiekis | 6 | 0 |
| Papildomai reikalingas kiekis | 0 | 6 |
Pasekmė – iškart po atkūrimo netikėtai pateikiama daug pavedimų. Kartais pozicija padvigubėja. Kartais uždaroma pozicija, nors apsauginis pavedimas vis dar aktyvus ir vėliau gali atidaryti naują poziciją.
Kontroliniame taške kartu su pozicijomis reikia išsaugoti pavedimų identifikatorius ir jų gyvavimo ciklo būseną. Prieš generuojant naujus veiksmus, atkūrimo metu šiuos įrašus reikia sutikrinti su vykdymo sistema. Nežinomo rezultato pavedimą reikia ištirti; prielaida, kad „neišsaugotas patvirtinimas“ reiškia „pavedimas niekada nepateiktas“, ir lemia dubliuotus pavedimus.
Stabilūs kliento pavedimų identifikatoriai padeda sužinoti, kas įvyko. Jie apsaugo nuo dublikatų tik tada, kai priimanti sistema iš tiesų taiko reikalaujamas unikalumo arba idempotentiškumo taisykles. Išsaugokite ir apdorotų įvykdymų identifikatorius, kad pakartotinai gautas įvykdymas nepadidintų pozicijos antrą kartą.
Man prie širdies nuobodokas pavedimų būsenos ekranas. Paleidimo iš naujo dieną jo mažos eilutės staiga tampa įdomiausia sąsaja visame biure.
3. Atkurkite poziciją ir pradėkite naują P&L apskaitą
Panagrinėkime svertu nepadidintos neatidėliotinos prekybos pavyzdį be mokesčių. Pradėkite turėdami 10,000 $ grynųjų, nusipirkite 10 vienetų po 100 $ ir sukurkite kontrolinį tašką, kai vertinimo kaina pasiekia 110 $.
Teisinga būsena: 9,000 $ grynųjų ir pozicija, kurios vertė 1,100 $; nuosavas kapitalas – 10,100 $. Jei atkūrimo metu grąžinama 10 vienetų pozicija, bet grynieji nustatomi į pradinius 10,000 $, nurodoma 11,100 $. Paleidę procesą iš naujo, sukūrėte 1,000 $ iš niekur.
Kitos šios klaidos versijos mažiau įspūdingos. Atkūrimo metu nuosavas kapitalas išlieka nepakitęs, bet įsigijimo kaina nustatoma į 110 $. Bendra nuosavo kapitalo vertė gali likti teisinga, nors pasikeičia realizuoto ir nerealizuoto pelno bei nuostolio paskirstymas. Jei stopas arba išėjimo sąlyga priklauso nuo įsigijimo kainos, toks apskaitos trumpinys pakeičia prekybos elgseną.
Arba sistema pamiršta ankstesnę nuosavo kapitalo aukščiausią reikšmę. Tarkime, nuosavas kapitalas buvo pasiekęs 10,600 $, o vėliau nukrito iki 10,100 $. Jo nuosmukis siekia apie 4.72%. Atkūrimo metu iš naujo nustačius aukščiausią reikšmę, strategija staiga mano, kad nuosmukio nėra. Bet kuri nuo nuosmukio priklausanti rizikos kontrolė ką tik buvo neteisėtai atstatyta.
Taigi pasekmė gali būti nuosavo kapitalo šuolis, įtartinai pagerėjęs nuosmukio rodiklis arba po kodo įdiegimo nustojanti veikti rizikos taisyklė. Išsaugokite apskaitos knygą ir su apskaita susijusią strategijos būseną: grynųjų pinigų judėjimą, pozicijas, taikomą savikainą, sukauptus mokesčius ir rizikos kontrolės atmintį. Atkurtą nuosavą kapitalą sutikrinkite su apskaitos knyga pagal tą patį vertinimo laiką.
Kontroliniam taškui reikia nuoseklios ribos. Jei po įvykdymo išsaugomi grynieji, bet pozicijos kiekis – dar prieš įvykdymą, gaunama būsena, kurios niekada nebuvo. Kartu įrašykite susijusią būseną arba išsaugokite patvarią įvykių seką, pagal kurią ją galima atkurti. Kartu su būsena išsaugokite įvykių žymeklį, kad atkuriant nebūtų praleistas pavedimo įvykdymas ir jis nebūtų pritaikytas du kartus.
Tyrimų sistemoje palikčiau testą, kuris paleidžia nepertrauktą atskaitos atkūrimą, o tada antrą paleidimą iš naujo pradeda tyčia nepatogiais momentais: inicijuojant indikatorių, po dalinio įvykdymo ir esant aktyviam rizikos limitui. Naudokite tą pačią įvykių tvarką ir išsaugokite bet kokią simuliatoriaus atsitiktinę būseną. Palyginkite pirmą sprendimą po atkūrimo, pavedimų ir įvykdymų įrašus bei nuosavo kapitalo kitimą. Sutampantis galutinis likutis gali paslėpti viena kitą kompensuojančias klaidas.
Jei procesas sugenda po pavedimo pateikimo, bet prieš patvirtinimą, testavimo sistema taip pat turi atskirai išsaugoti vykdymo paslaugos būseną. Priešingu atveju ištrinsite būtent tą neapibrėžtumą, kurį bandote patikrinti.
Strategijos specifikacijoje nurodyta ir tai, ką ji prisimena. Aiškiai aprašykite šią atmintį, kad galėtumėte sustabdyti procesą įpusėjus atkūrimui ir tiksliai parodyti, kaip strategija vėl pradeda veikti.
← Visi įrašai


