2026. november 1. · kutatás

Hogyan melegítsünk be egy backtestet anélkül, hogy a lookbackot teljesítménynek számolnánk?

Hogyan melegítsünk be egy backtestet anélkül, hogy a lookbackot teljesítménynek számolnánk?

Egy 20 napos Donchian a specben ártalmatlannak tűnik. Az agent egy 20 báros gördülő maximumot ír, a backtest a parquet fájl első során indul, és az első két hétben a „20 napos maximum” csupán a létező bárok futó maximuma. A negyedik napon ez egy négynapos maximum. Az a stratégia, amelyről azt hitted, hogy teszteled, nem az, amelyik az első tucat fillt hozta.

Van egy notebookom ETHUSDT napi bárokon, ahol a teljes mintás Sharpe 1.4. Vágd le az első 20 kereskedési napot, és 0.6-ra esik. Tartsd meg ezt a 20-at, és dobd el az első év maradékát, és 3.1-et ír ki. Senki nem szivárogtatta ki a holnapot. A stratégia a múltat használta, csak nem eleget belőle, és a riport ezeket a félig kialakult trade-eket bizonyítékként kezelte.

1.4teljes mintás Sharpe, befejezetlen ablakkal együtt
0.6ugyanaz a kód 20 befejezett kereskedési nap után
3.1Sharpe, ha csak a burn-in trade-eket tartod meg

Hagyd, hogy az ablak kereskedjen, amíg még töltődik

A szokásos károkozó a min_periods=1. A Pandas egyetlen báron is kiszámol egy gördülő átlagot, ha hagyod. Az agentek ezt folyamatosan csinálják, mert egy NaN a frame tetején hibának tűnik, és ha kitöltöd, a unit teszt zöldre vált.

Egy 20 napos realized-vol cél két hozammegfigyeléssel pozícióméret-robbanás. Két szám varianciája egy érmefeldobás, invertálod, és az első pozíció a szándékolt kockázat többszöröse. Egy z-score a majdnem nulla szórásra ugyanazt a trükköt hozza előjellel: a stratégiának borotvaéles belépője van, amely soha többé nem jelenik meg, amint az ablak őszinte.

A kitörések rosszabbak, mert úgy néznek ki, mint az igazi szabály. Egy 20 báros csatorna a hatodik báron egy hatbáros csatorna. Rögtön az elején egy trade-csoportot kapsz, gyakran egy csendes szakaszban, amely a kész indikátort nem indította volna el. A csendes piacok kicsit sodródnak. Egy szűk csatorna elsül. Az equity görbe előnyt kap, amelyet egy későbbi év sem ismétel meg.

A zero-fill és a forward-fill másfajta hazugságot talál ki. A 0-n álló RSI túlértékesítettnek számít. Egy hiányzó, 0 értékű ATR felrobbantja az egységméretet, és a backtest kötelességtudóan megvesz egy raktárnyit. Inkább ölje meg egy NaN az ordert, mint hogy egy 0 találjon ki egyet.

Még mindig rajtakapom magam, hogy a 0. sortól rajzolok, mert a grafikon bal szélén egy üres hónap befejezetlennek tűnik. Az üres hónap az őszinte rész.

Vágd le az equity görbét, tartsd meg a pozíciót

Ez túléli a code review-t. A 20 napos jellemzőket rendesen kiszámolod, eldobod az első 20 sort a kirajzolt görbéről, és január 21-től publikálsz. A január 21-i pozíciót január 14-én nyitották. A trailing stop high-waterje, a piramisszám, a cash a burnök után: mindez besétált a „tiszta” mintába.

A romhalmaz egy paper stratégia, amelyet a cikkben szereplő dátumon nem lehet elindítani. Indítsd újra flatről a jelentett starton, és az első hét orderjei nem egyeznek. Néha a backtest már egy olyan trade-ben van, amelybe a paper rendszernek nincs oka belépni. Néha a paper rendszer belép, mert a lookbackja hideg, és a backtest kimarad, mert a rejtett hónapja már elvitte a kitörést. Két nyitókönyv, egy publikált startdátum.

A walk-forward foldok ezt csendben csinálják. Minden tesztablaknak van egy lookback farka, amelyet nem rajzolsz ki. Hagyd ki annak a faroknak a szimulációját, és az első teszt-trade-ek megint befejezetlen ablakú trade-ek. Szimuláld, és csak a tesztnapokat jelentsd, és a tesztnapi pozíció olyan filleken múlik, amelyeket nem mutatsz. Ez a második változat lehet legitim kutatási választás. A fold első reggelét hideg startnak nevezni, miközben egy trailing stop már él a farokról, így kap két kutató két Sharpe-ot egy configból.

Ha a publikált startdátumon flatről újraindítva megváltozik a P&L, a bemelegítés benne van a track recordban. A lookback adat jelen lehet. A lookback trade-ek nem.

Naptári napokban melegíts be, amikor a jellemző nem nap

„Adj neki 30 napot” alulspecifikálja a jellemzőt. Harminc naptári nap egy 5 perces Donchianon több ezer bárral van túl egy 20 periódusos lookbackon. Harminc nap egy napi jellemzőn, amelynek 20 kereskedési napra van szüksége, vagy kövér, vagy vékony, a hétvégéktől és a lyukaktól függően.

Egy funding-rate z-score az egyik perp tőzsdénkön 30 napos bemelegítést kapott, mert a spec 30 periódust mondott, és valaki a periódusokat naptári napokra fordította. A funding ott nyolc óránként printel. Harminc nap körülbelül 90 elszámolás. Harminc periódus tíz nap. A plusz két hónap burn-in véletlenül tartalmazott egy depeg hetet. Ha eldobtuk, az élő ablak nyugodtabbnak tűnt, mint a stratégia valódi története. Az emberek a startdátum-érzékenységet hibáztatták. A bemelegítés megette a rezsimet.

És a kripto versus equity ugyanannak a számnak a jelentését változtatja meg anélkül, hogy bárki paramétert szerkesztene. Az ETH húsz „napja” tartalmazza a szombatokat. Húsz equity kereskedési nap majdnem egy naptári hónap. Másolj át egy 20 napos lookbackot egy részvénynotebookból órás perpetual gyertyákra, és egy 20 órás csatornád van 20 napos névvel. Az első érvényes bár ezután vagy 20 óra múlva van, vagy 20 nap múlva, ha valamelyik későbbi függvény újramintavételez, és mindkettőt láttam ugyanabban az agent diffben.

Rögzítsd az első kereskedhető időbélyeget

A bemelegítés adatkövetelmény, nem bónuszminta. Minden jellemző megnevezi a kész megfigyelések számát, amelyekre szüksége van, abban az egységben, amelyben számolják. Az első kereskedhető időbélyeg az első bár, ahol ezek mind igazak, és egy flat számla küldhetett volna ordert.

JellemzőAmit a spec általában mondAminek valójában léteznie kellCsendes helyettesítő
20 napos Donchian20 napi maximum20 befejezett kereskedési napFutó maximum min_periods=1 mellett
30 napos realized vol30 napos ablak30 close-to-close hozamKétnapos variancia, méretbe invertálva
20 printes funding z-score20 nap20 funding elszámolás20 naptári nap (~90 print), vagy 20 bár a rossz timeframe-en
14 periódusos RSI 5m-en14 periódus14 lezárt ötperces bár14 nap, vagy 14 bár lyukakkal, forward-filllel

A P&L az időbélyeg előtt kimarad a track recordból. Az állapotot az időbélyeg előtt még szimulálni kellhet, így egy trailing stop vagy egy cooldown valós, amikor az óra eléri az első kereskedhető bárt, de ezek a fillek nem mennek bele a Sharpe-ba, a trade-számba vagy a kapacitásszámításba. Aztán futtasd a csúnya ellenőrzést: indítsd újra flatről azon az időbélyegen, a lookback csak adatként elérhető. Ha az orderek megváltoznak, rejtett trade-eket szállítottál.

A paper trading ugyanazon a szerződésen indul. Minden walk-forward tesztablak is. Ha a grafikon úgy néz ki, mintha hiányozna egy hónap, hagyd hiányozni.

backtestingadatmérnökségwalk-forwardAI-agentekpaper trading
← Összes bejegyzés