Backtesta trading-robotar — och lögnen om den perfekta kurvan
Varför ett vackert backtest är det enklaste i världen att bygga, vad curve fitting verkligen är, och varför en robot som ser felfri ut på historik i tysthet slutar fungera i live-marknader.
- Trading
- Backtesting
- Curve fitting
Jag har byggt hundratals trading-robotar. Den svåraste delen var aldrig att få ett backtest att se bra ut — det är trivialt. Det svåra är att få ett att fortsätta fungera efter att du slår på det med riktiga pengar. Det är två helt olika problem, och gapet mellan dem har ett namn: curve fitting.
Här är bilden varje backtest i hemlighet försöker sälja till dig.
Titta på det chartet. Varje svängtopp är såld, varje svängbotten köpt. Equity-kurvan går bara upp. Om en robot visade dig det här skulle du finansiera den i morgon. Och det är precis fällan, för att träffa varje topp och varje botten är inte skicklighet — det är facit i hand. Priset har redan hänt. Att anpassa en strategi till det är som att satsa på ett hästlopp efter att du sett repriserna.
Vad curve fitting faktiskt är
De flesta strategier har en handfull rattar — kalla det x parametrar. En längd på ett glidande medelvärde här, ett stop-loss-avstånd där, ett RSI-tröskelvärde, ett filter för tid på dygnet, en regel för positionsstorlek. Kanske fem av dem. Kanske tjugo.
Nu riktar du den strategin mot historisk prisdata och börjar vrida på rattarna. Höj glidande medelvärdet från 20 till 23 — backtestet förbättras. Dra åt stoppen med 4 ticks — förbättras igen. Lägg till ett filter som hoppar över måndagar för att måndagar råkade vara dåliga i ditt urval — ännu bättre. Du upprepar detta, medvetet eller med en optimerare som kör tusentals kombinationer, tills kurvan är perfekt för den tidsperioden.
Och det fungerar. Det är den förföriska delen. En curve-fittad robot kan gå vackert i veckor, ibland månader. Jag har haft några som höll i över ett år. Men det du faktiskt byggt är inte en modell av hur marknaden beter sig — det är en modell av vad marknaden gjorde, brus och allt.
Marknadsdata är inte samma sak som marknadsbeteende. Data är beteende plus slumpmässigt brus. När du optimerar tillräckligt hårt slutar du anpassa beteendet och börjar anpassa bruset — och brus, per definition, upprepas inte.
Den skillnaden är hela spelet. Riktiga edges är sällsynta och breda: de dyker upp över många parametervärden, många instrument, många år. En curve-fittad edge är smal och skör: den lever vid en specifik inställning, på en specifik bit historik, och den dör i samma stund världen slutar upprepa sig själv.
Varför det alltid går sönder till slut
Marknader är inte ett fast system. De driver ständigt — likviditet flyttar, volatilitetsregimer skiftar, en konkurrents algo ändrar hur en nivå reagerar, centralbankspolitik vänder, de dominerande aktörerna roterar. Inget av detta är dramatiskt en enskild dag. De är små. Men dina finjusterade parametrar balanserades på den exakta formen av den gamla regimen, och små förändringar räcker för att knuffa dem ur balans.
Så roboten som köpte varje dipp börjar köpa dippar som fortsätter falla. Filtret som hoppade över de dåliga dagarna hoppar nu över de bra. Edgen försämras — ibland långsamt, ibland utför ett stup. Det här är det ärliga mönstret nästan ingen delar: skickligheten är inte bara att hitta en edge, det är att känna igen när edgen har slutat vara en och stänga av grejen. Det är beslutet jag tagit för varje robot jag kört, inklusive de som tjänade bra pengar först.
Hur jag försöker att inte lura mig själv
Du kan inte eliminera curve fitting, men du kan bekämpa det. Principerna nedan är konsensus i det praktiker- och forskningsarbete som länkas längst ner:
- Håll det enkelt. Färre parametrar betyder färre frihetsgrader att överanpassa. Varje ratt du lägger till är ytterligare ett sätt att memorera det förflutna.
- Out-of-sample, alltid. Trimma på en bit historik, testa sedan på en bit strategin aldrig sett. Om det faller isär där anpassade du brus.
- Föredra platta parameterplatåer, inte skarpa toppar. Om strategin bara fungerar vid längd = 23 och kollapsar vid 21 eller 25 är det en spik på en brusyta, inte en edge. Du vill ha ett brett område där närliggande inställningar alla fungerar.
- Gå framåt (walk forward). Återanpassa på ett rullande fönster och trada nästa fönster, om och om igen, så som du faktiskt skulle tvingas leva det.
- Inkubera den. Kör den framåt på färsk data (papper eller pyttesmå storlekar) innan du litar på den. Marknaden bryr sig inte om ditt backtest; den röstar bara i realtid.
- Räkna dina försök. Om du testade 5 000 konfigurationer och behöll den bästa är "bästa" troligen tur. Det här är problemet med multipel testning, och det finns nu riktig matematik — Probability of Backtest Overfitting — för att sätta en siffra på det.
Inget av detta ger dig chartet längst upp i den här artikeln. Det chartet är en fantasi. Vad en bra process ger dig är en strategi med fler förluster i backtestet men en verklig chans att överleva kontakt med en marknad som aldrig slutar förändras.
Ett vackert backtest kostar ingenting. En strategi som fortfarande fungerar nästa kvartal är det enda värt att ha.
Vidare läsning
- Bailey, Borwein, López de Prado & Zhu — The Probability of Backtest Overfitting (Journal of Computational Finance, 2015). Det grundläggande ramverket för att mäta hur sannolikt ett backtest är överanpassat.
- Bailey, Borwein, López de Prado & Zhu — Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance (Notices of the AMS, 2014). Den mer lättillgängliga följeslagaren som visar hur enkelt backtester tillverkas.
- Man Group — Overfitting and Its Impact on the Investor (intervju med prof. Campbell Harvey). En institutionell syn på varför data mining blåser upp backtester.
- QuantifiedStrategies — Curve Fitting In Trading: What Is It?. En praktikers fördjupning i skillnaden mellan att anpassa marknadsbeteende och att anpassa brus.