På måndagen hittade vår AI-forskningsagent en kryptofuturesstrategi med Sharpekvoten 4.1. På torsdagen, efter att vi räknat experimenten och slutat låta agenten finjustera mot samma valideringsfönster, var resultatet 0.8. Strategin hade inte förändrats. Vår uppskattning av vad sökningen hade åstadkommit hade gjort det.
Vi förde den här forskningsdagboken i liten skala eftersom ”optimera försiktigt” är lätt att säga men svårt att omsätta i praktiken när en agent kan skriva kod, köra backtester, granska resultatet och försöka igen på några minuter. Här är vad som gick fel, i tur och ordning.
Måndag: Ge agenten en avgränsad fråga
Vi bad agenten testa en enkel trendidé på timbasis på en likvid marknad för eviga futureskontrakt: gå in när ett kort glidande medelvärde korsar ett längre, anpassa positionsstorleken till ett fast volatilitetsmål och stäng positionen vid motsatt signal. Vi angav instrument, datum, avgiftsschema, finansieringshistorik, exekveringsantagande och vilka parameterintervall den fick utforska.
Den historiska perioden sträckte sig från 2021 till 2025. Vi avsatte 2021–2023 för utveckling, 2024 för validering och höll 2025 förseglat som slutlig holdout. Uppdelningen skrevs in i jobbkonfigurationen, så agenten kunde läsa utvecklingsresultat och valideringspoäng men inte hämta avkastningen från holdout-perioden.
Vårt första misstag var att tillåta 300 parameterkombinationer i ett enda jobb utan att dokumentera sökbudgeten som ett forskningsresultat. Agenten returnerade den bästa kandidaten: ett snabbt medelvärde på 9 timmar, ett långsamt på 73 timmar och ett volatilitetsmål på 0.8%. Dess Sharpe på valideringen var 4.1. Vi visste att agenten hade provat många inställningar. Vi hade ännu inte gjort det omöjligt att glömma den saken.
Tisdag: Vinnaren ändrades när vi körde om testet
Vi körde om samma jobb i en ren miljö. Den bästa inställningen ändrades och dess Sharpe sjönk till 2.7. En marknadsdatacache hade levererat en uppdaterad finansieringsserie i den första körningen, medan omkörningen använde en låst ögonblicksbild. Båda jobben uppgav samma datumintervall, men bara det ena hade en reproducerbar dataversion.
Vi slutade jämföra poäng och började dokumentera hela experimentet: kodrevision, dataögonblicksbild, avgifter, finansiering, exekveringsinställningar, parametervärden och varje försök agenten startade. Då blev det tydligt att 4.1 inte var någon mystisk marknadsfördel. Det var resultatet för en enda inställning i en sökning med 300 försök mot samma valideringsår.
Onsdag: Frys sökningen innan holdout-perioden öppnas
Vi körde om experimentet med en låst dataögonblicksbild och ett mindre, förhandsbestämt rutnät: 24 kombinationer. Agenten kunde rangordna dem utifrån utvecklingsperioden 2021–2023. Vi lät den se 2024 en gång, för urvalet, och låste sedan de valda inställningarna och koden.
Den valda strategin fick Sharpe 0.8 på valideringen. På den förseglade holdout-perioden 2025 fick den 0.3 efter taker-avgifter, finansiering och samma exekveringsfördröjning på en bar som användes under hela studien. Det var ett användbart svar. Det var inget belägg för att strategin skulle tjäna pengar på ett livekonto.
En utvikning från den här veckan: vi lade mer tid på att enas om vad ”ett försök” betydde än på att skriva koden för glidande medelvärden. Vi räknade en ändrad parameteruppsättning som ett försök, liksom körningar där signalen eller positionsstorleksregeln ändrades. En ny dataögonblicksbild eller ett nytt exekveringsantagande fick en separat körningspost, eftersom det kunde påverka rangordningen lika mycket.
Torsdag: Det här skulle vi hoppa över nästa gång
Vi skulle hoppa över det öppna första jobbet. En forskningsagent behöver en sökbudget och dokumentation över vad den har provat, särskilt när den kan använda varje resultat för att avgöra vad den ska prova härnäst. Holdout-perioden måste också skyddas från informellt tjuvkikande: så fort någon läser resultatet och ändrar strategin har perioden blivit ännu ett valideringsset.
För en mindre sökning kan en praktisk experimentlogg vara enkel och tydlig:
| Dokumentera | Varför det spelar roll |
|---|---|
| Kod- och dataversioner | Så att en omkörning använder samma indata och logik |
| Varje testad variant | Så att vinnaren förstås i ljuset av sökningen |
| Roller för utveckling, validering och holdout | Så att en slutpoäng inte i smyg används igen för finjustering |
| Avgifter, finansiering och exekveringsantaganden | Så att det rapporterade resultatet beskriver en testbar simulering |
När holdout-perioden har öppnats kan ni återgå till utveckling med en ny forskningsfråga och bevara det gamla resultatet som historiskt belägg. Fortsätt inte att putsa på samma strategi mot en period den redan har sett.
Agenten gjorde sitt jobb: den sökte snabbt och hittade en konfiguration värd att undersöka. Vårt jobb var att göra sökningen begriplig, bevara ett orört test och behandla poängen som ett mått med en historik. Det intressanta resultatet var varken 4.1 eller 0.3. Det var att se exakt hur den första siffran kom till.
← Alla inlägg


