1. november 2026 · uuring

Kuidas soojendada backtesti, ilma et lookback läheks sooritusena kirja?

Kuidas soojendada backtesti, ilma et lookback läheks sooritusena kirja?

20-päevane Donchian tundub spetsifikatsioonis kahjutu. Agent kirjutab 20-barise veereva maksimumi, backtest algab parquet-faili esimeselt realt ja esimese 2 nädala jooksul on „20-päevane kõrgeim“ lihtsalt olemasolevate baride jooksev maksimum. 4. päeval on see 4-päevane kõrgeim. Strateegia, mida arvasid testivat, ei ole see, mis tootis esimesed tosin täitmist.

Mul on notebook ETHUSDT päevastel baridel, kus koguvalimi Sharpe on 1.4. Lõika esimesed 20 sessiooni ära ja see langeb 0.6-le. Jäta need 20 alles ja viska ülejäänud esimene aasta välja, ja see trükib 3.1. Keegi ei lekkunud homset. Strateegia kasutas minevikku, lihtsalt mitte piisavalt seda, ja aruanne pidas neid pooleldi vormunud tehinguid tõendiks.

1.4koguvalimi Sharpe, lõpetamata aken kaasa arvatud
0.6sama kood pärast 20 lõpetatud sessiooni
3.1Sharpe, kui jätad alles ainult sissesõidu tehingud

Lase aknal kaubelda, kuni see veel täitub

Tavaline rusuhunnik on min_periods=1. Pandas arvutab veereva keskmise kasvõi ühe bariga, kui sa seda lubad. Agendid teevad seda pidevalt, sest NaN frame'i ülaosas tundub veana ja selle täitmine teeb unit testi roheliseks.

20-päevane realized-vol siht 2 tootluse vaatlusega on positsioonimahu plahvatus. 2 arvu dispersioon on mündivise, sa pöörad selle ümber ja esimene positsioon on mitu korda suurem kui kavandatud risk. z-score peaaegu nullilise standardhälbe vastu teeb sama triki märgiga: strateegia näib omavat habemenuga-sisenemist, mis ausa akna korral enam kunagi ei ilmu.

Läbimurded on hullemad, sest nad näevad välja nagu päris reegel. 20-barine kanal 6. baril on 6-barine kanal. Saad tehingute kuhja kohe alguses, sageli vaikses lõigus, mis ei oleks valmis indikaatorit käivitanud. Vaiksed turud triivivad natuke. Kitsas kanal tulistab. Equity-kõver saab stardieelise, mida ükski hilisem aasta ei korda.

Zero-fill ja forward-fill leiutavad teistsuguse vale. RSI väärtusel 0 loetakse ülemüüdud. Puuduv ATR väärtusel 0 paisutab ühiku suuruse lõhki ja backtest ostab kohusetundlikult lao täis. Eelistan, et NaN tapaks orderi, kui et 0 leiutaks ühe.

Taban end ikka joonistamast reast 0, sest tühi kuu graafiku vasakul serval näib lõpetamata. Tühi kuu on aus osa.

Kärbi equity-kõver, jäta positsioon alles

See pääseb koodiülevaatusest läbi. Arvutad 20-päevased feature'id korralikult, viskad joonistatud kõveralt esimesed 20 rida välja ja avaldad 21. jaanuarist. Positsioon 21. jaanuaril avati 14. jaanuaril. Trailing stopi high-water, püramiidi loendur, raha pärast neid sissesõite: kõik see kõndis „puhtasse“ valimisse.

Rusuhunnik on paberstrateegia, mida ei saa alustada kirjatüki kuupäeval. Taaskäivita tühjalt positsioonilt raporteeritud alguskuupäeval ja esimese nädala orderid ei klapi. Mõnikord on backtest juba tehingus, millesse pabersüsteemil pole põhjust siseneda. Mõnikord siseneb pabersüsteem, sest tema lookback on külm, ja backtest istub kõrval, sest tema varjatud kuu võttis läbimurde juba ära. 2 avaraamatut, 1 avaldatud alguskuupäev.

Walk-forward voldid teevad seda vaikselt. Igal testaknal on lookbacki saba, mida sa ei joonista. Jäta see saba simuleerimata ja esimesed testitehingud on taas lõpetamata akna tehingud. Simuleeri seda ja raporteeri ainult testipäevad, ja testipäeva positsioon sõltub täitmistest, mida sa ei näita. See teine versioon võib olla legitiimne uurimisvalik. Voldi esimese hommiku nimetamine külmaks stardiks, samal ajal kui trailing stop on sabast juba elus, on viis, kuidas 2 uurijat saavad 1 konfiguratsioonist 2 Sharpe'i.

Kui tühjalt positsioonilt taaskäivitamine avaldatud alguskuupäeval muudab P&L-i, on soojendus tulemuste kirjes. Lookbacki andmed võivad olla olemas. Lookbacki tehingud ei tohi.

Soojenda kalendripäevades, kui feature ei ole päev

„Anna talle 30 päeva“ jätab feature'i alamääratletuks. 30 kalendripäeva 5-minutilise Donchiani peal on tuhandeid bare üle 20-perioodilise lookbacki. 30 päeva päevasel feature'il, mis vajab 20 sessiooni, on kas paks või õhuke, olenevalt nädalavahetustest ja aukudest.

Funding-rate z-score ühel meie perp-platvormidest sai 30-päevase soojenduse, sest spets ütles 30 perioodi ja keegi tõlkis perioodid kalendriks. Funding trükib seal iga 8 tunni järel. 30 päeva on umbes 90 arveldust. 30 perioodi on 10 päeva. Need 2 kuud lisasissesõitu sattusid sisaldama depeg-nädalat. Selle väljaviskamine pani live-akna paistma rahulikumana kui strateegia tegelik ajalugu. Inimesed süüdistasid alguskuupäeva tundlikkust. Soojendus oli režiimi ära söönud.

Ja krüpto versus aktsiad annab samale arvule teise tähenduse ilma, et keegi parameetrit muudaks. 20 „päeva“ ETH-d sisaldab laupäevi. 20 aktsiasessiooni on peaaegu kalendrikuu. Kopeeri 20-päevane lookback aktsiate notebookist tunnistele perpetual-küünaldele ja sul on 20-tunnine kanal 20-päevase nimega. Esimene kehtiv bar on siis kas 20 tunni pärast või 20 päeva pärast, kui mõni hilisem funktsioon resample'ib, ja ma olen näinud mõlemat samas agendi difis.

Löö paika esimene kaubeldav ajatempel

Soojendus on andmenõue, mitte boonusvalim. Iga feature nimetab lõpetatud vaatluste arvu, mida ta vajab, ühikutes, milles teda arvutatakse. Esimene kaubeldav ajatempel on esimene bar, kus kõik need on tõesed ja tasane konto oleks tohtinud orderi saata.

TunnusMida spets tavaliselt ütlebMis tegelikult peab olemas olemaVaikne asendus
20-päevane Donchian20 päevast kõrgeimat20 lõpetatud sessiooniJooksev maksimum min_periods=1-ga
30-päevane realized vol30-päevane aken30 close-to-close tootlust2-päevane dispersioon, pööratud suuruseks
20-prindiline funding z-score20 päeva20 fundingi arveldust20 kalendripäeva (~90 printi) või 20 bari valest ajaraamist
14-perioodiline RSI 5m peal14 perioodi14 suletud 5-minutilist bari14 päeva või 14 bari, mille lüngad on forward-fillitud

P&L enne seda ajatemplit jääb tulemuste kirjest välja. Olek enne seda ajatemplit võib siiski vajada simuleerimist, nii et trailing stop või jahtumisaeg on päris, kui kell jõuab esimese kaubeldava barini, aga need täitmised ei lähe Sharpe'i, tehingute arvu ega mahutavuse arvutusse. Siis jooksuta kole kontroll: taaskäivita tühjalt positsioonilt sellel ajatempelil, lookback saadaval ainult andmetena. Kui orderid muutuvad, vedasid varjatud tehinguid.

Paberkauplemine algab sama reegli järgi. Nii ka iga walk-forward testaken. Kui graafik näib kuu võrra puudulik, jäta see puudulikuks.

backtestingandmeinseneeriawalk-forwardAI-agendidpaberkauplemine
← Kõik postitused