Walk-forward optimalizace má pověst poctivého způsobu, jak strategii vyladit, a zaslouží si ji — ve srovnání s optimalizací na všech datech a následným obdivováním výsledku. Ta technika ale má tiché způsoby selhání a každý z nich vyprodukuje tentýž artefakt: validační report, který říká „robustní", přišitý ke strategii, která robustní není. Tady jsou tři, proti kterým jsme museli stavět obranu, uspořádané podle trosek, jež po sobě zanechávají.
Selhání první: okna prosakují
Špatný postup: ladit na období leden–červen, validovat na červenci a pak nechat cokoli z července ovlivnit druhý průchod — nové spuštění poté, co jste viděli out-of-sample číslo, „drobnou úpravu" parametrické mřížky, feature normalizovaný přes celou řadu. Každá z těch věcí vypadá nevinně. Dohromady mění out-of-sample okno na in-sample data s časovým zpožděním.
Trosky: out-of-sample Sharpe, který záhadně kopíruje in-sample Sharpe. Skutečné out-of-sample výsledky jsou zašuměné a zklamáním; podezřele hladký vztah mezi IS a OOS znamená, že informace teče zpětně. Ten poměr sledujeme explicitně — in-sample vyšší než 3× out-of-sample běh označí a out-of-sample na nule či pod ní ho zabije bez ohledu na to, jak pěkně in-sample vypadá.
Selhání druhé: nakupování metrik napříč okny
Spustíte tři walk-forward okna, dostanete tři zašuměné výsledky a pak je shrnete: průměrný Sharpe? Medián? Vyhodit nejhorší okno kvůli „změně režimu"? Každá taková volba je stupeň volnosti a odhodlaný optimalizátor (člověk nebo bayesovský) najde souhrn, ve kterém tahle strategie vypadá nejlíp. Sedmdesát pět Optuna trialů na okno je sedmdesát pět příležitostí nafitovat šum, krát tolik souhrnů, kolik jich jste ochotni zvažovat.
Trosky: strategie, která projde validací a pak naživo dodá výkonnost nejhoršího okna, protože nejhorší okno bylo to jediné poctivé. Naše pravidlo: agregace je pevně dána v konfiguraci ještě před během, rozpočet trialů je pevný a analytik čte výsledky po jednotlivých oknech i s uvedeným rozptylem. Strategie, která k úspěchu potřebuje vlídný souhrn, neuspěla.
Selhání třetí: holdout, který jím přestal být
Holdout funguje přesně jednou. Podruhé, kdy je proti němu strategie vyhodnocena — po pošťouchnutí parametru, úpravě signálu, po „jen se na to mrkneme" — už to holdout není; je to pomalá validační množina. Patnáct nedotčených dnů zní jako triviální věc k uchování, dokud nepřijde tlak na iterace a opětovná kontrola nezačne působit neškodně.
Trosky jsou subtilní: výsledky na holdoutu, které se napříč iteracemi téže strategie zlepšují. Čerstvá out-of-sample data nemají důvod odměňovat třetí iteraci víc než první, a když to dělají, byl holdout vytěžen. Jednorázovost vynucujeme mechanicky: holdout se vyhodnocuje jednou za běh pipeline, výsledek se zapíše do záznamu a strategie, která potřebuje další pokus, jde znovu celou tratí — včetně nových oken. Musí si podržet alespoň 70 % walk-forward out-of-sample Sharpe a druhý hod touhle kostkou neexistuje.
Příznak, který přežije všechny tři
Ještě před tím vším jedeme prostý citlivostní sweep: pošťoucháme každý parametr o ±20 % a sledujeme metriky. Skutečná výhoda degraduje pozvolna; náhoda spadne z útesu. Je to nejlevnější test v celé pipeline a vetuje strategie, které by hladce propluly vším výše zmíněným — protože parametrický útes je to, jak přeučení vypadá předtím, než dostane šanci schovat se ve validační mašinerii.
Nic z toho nedělá optimalizaci bezpečnou. Dělá to způsoby selhání hlasitými — a to je maximum, co lze od validačního procesu poctivě žádat.
← Všechny články