12. september 2026 · risiko

Fem regler for positionsstørrelse, ét signal: det, der virkelig gør arbejdet i din backtest

Fem regler for positionsstørrelse, ét signal: det, der virkelig gør arbejdet i din backtest

Dit indgangssignal er sandsynligvis det mindst afgørende i din backtest. Jeg kan tage én middelmådig momentumregel, lade alle tidspunkter for ind- og udtræden stå urørte, kun ændre funktionen, der bestemmer, hvor mange kontrakter der skal holdes, og flytte netto-Sharpe fra 0.41 til 0.71 og maksimalt drawdown fra 31% til 13%. De samme handler. De samme fills. En anden strategi.

Den påstand irriterer folk, og det bør den også, for den antyder, at det meste af tiden, der bruges på at finjustere lookbacks og filtertærskler, går til den lille del af ligningen. Så lad mig vise de faktiske kørsler og derefter give kritikerne ret, hvor de har det, for der findes en version af det her argument, som er forkert, og det er værd at vide, hvilken version jeg fremfører.

Ét signal, seks måder at holde positionen på

Signale: ETHUSDT perpetual på Binance USDⓈ-M, 1-times søjler, long når 12-timers EMA ligger over 96-timers EMA, ellers flad, ingen shorts. Juli 2022 til juni 2026. 431 handler tur-retur. Taker-gebyrer på begge sider på 5.0 bps, funding betalt eller modtaget hver ottende time for den faktiske position, slippage modelleret ud fra den bedste ordredybd. Det er et bevidst kedeligt signal — jeg valgte det, fordi ingen ville forsvare det, hvilket giver os et rent testgrundlag.

Alle rækker nedenfor har identiske tidspunkter for ind- og udtræden målt på søjlerne. Den eneste forskel er funktionen for positionsstørrelse.

Regel for positionsstørrelseNetto-SharpeMaks. DDHandlet nominel værdi/år (× gennemsnitlig position)Omkostninger som % af brutto-PnLMaks. gearing
Fast nominel værdi på $10k0.4118.2%246×14%1.0×
Fast andel, 100% af egenkapitalen0.4430.8%251×15%1.0×
Invers 20-dages realiseret volatilitet0.6814.1%690×29%4.4×
20% årligt volatilitetsmål, genbalancering hver time, uden loft0.7112.9%1,180×41%6.3×
20% volatilitetsmål, 20% no-trade-bånd, gearingsloft på 3×0.6615.3%402×19%3.0×
Halv-Kelly baseret på rullende gennemsnit/varians over 60 dage0.5224.6%830×33%8.1×
0.41 → 0.71netto-Sharpe, identiske indgange
41%af brutto-PnL opslugt af genbalancering hver time
6.3×den maksimale gearing, som kørslen med den bedste Sharpe stille og roligt brugte

Se på spændet. Mellem den dårligste og den bedste række er der en relativ forskel på 73% i Sharpe og en faktor på 2.4 i drawdown. Find så et parameter for indgangssignalet i dette datasæt, der flytter Sharpe med 0.30 uden samtidig at være åbenlys overtilpasning. Jeg har prøvet. EMA-parrets længde flytter den med omkring 0.12 på tværs af hele det plausible gitter, og det meste af den bevægelse er støj, der ikke holder i out-of-sample-data.

Hvorfor invers volatilitet ser så godt ud, og hvor meget af det der er reelt

Mekanismen er ikke mystisk. Med fast nominel værdi er din positionsstørrelse ukorreleret med den realiserede volatilitet, hvilket betyder, at din risiko i dollars pr. handel står i forhold til den volatilitet, der nu tilfældigvis er den uge. For ETH i denne periode lå den realiserede volatilitet over 20 dage mellem 31% og 118% annualiseret. Kørslen med fast nominel værdi tog 3.8× mere risiko i dollars i marts 2024 end i juli 2023, ikke fordi signalet var mere overbevist, men fordi markedet var mere larmende. Næsten hele dens drawdown er koncentreret i den øverste volatilitetfemtedel. Positionsstørrelse baseret på invers volatilitet fjerner den kobling, og det forbedrer reelt afkaststrømmens form.

Men en del af Sharpe-forbedringen er en måleartefakt, og hvis du ikke skiller de to ting ad, træffer du dårlige beslutninger bagefter. Sharpe dividerer med afkastets standardafvigelse. Volatilitetsmålretning er per definition en operation, der stabiliserer afkastets standardafvigelse. Du optimerer nævneren direkte. En regel, der skalerer positioner for at ramme en konstant forventet volatilitet, vil forbedre Sharpe på næsten enhver afkaststrøm med klynger af volatilitet, også strømme uden nogen fordel. Det har jeg bekræftet på blandede signaler: randomisér indgangstidspunkterne, behold volatilitetsmålretningen, og Sharpe forbedres stadig med omkring 0.06 i forhold til fast nominel værdi på en grundserie med gennemsnit på nul. Det er lidt, men ikke nul, og skyldes udelukkende mekanikken.

Når jeg derfor sammenligner regler for positionsstørrelse internt, er Sharpe aldrig det eneste tal i arket. Jeg vil have Calmar, netto-PnL pr. enhed af gennemsnitlig indsat nominel værdi og broen fra brutto til netto, for de tre tilsammen er langt sværere at manipulere med et trick med nævneren.

Volatilitetsestimatet er en model, og det lækker ligesom en

Den mest almindelige grund til, at et godt resultat for positionsstørrelse viser sig at være falsk: volatilitetsestimatet bruger information fra den søjle, det fastsætter størrelsen for. Hvis din volatilitetsserie beregnes med et centreret vindue, eller med pandas' standard-`rolling().std()` anvendt efter en resampling, der omfatter den aktuelle, ufuldstændige søjle, eller ud fra en standardisering baseret på hele datasættet, har du lækage. Det er subtilt, fordi volatiliteten er vedvarende, så lækagen er lille på enhver enkelt række, og egenkapitalkurven stadig ser plausibel ud. Den ser bare en smule for jævn ud netop i de uger, der betyder noget.

Vores agenter kontrollerer fire ting ved hver regel for positionsstørrelse, før et resultat rykkes videre til køen for paper trading:

  1. Tilgængelighed på beslutningstidspunktet. Størrelsen, der bruges på søjlen, som åbner kl. 14:00, skal kunne beregnes ud fra data, hvis sluttidspunkt er ≤ 13:59:59.999. Det sikrer vi ved at genberegne størrelsesserien ud fra en afkortet dataramme ved et tilfældigt udvalg på 200 beslutningspunkter og sammenligne forskellene.
  2. Estimatorens lookback er et reelt parameter. Et 20-dages og et 60-dages volatilitetsvindue er to forskellige strategier. Lookback-perioden indgår i walk-forward-gitteret sammen med alt andet, og hvis resultatet kun virker ved én vindueslængde, fortæller det noget om skrøbeligheden.
  3. Gearingens forløb, ikke kun toppunktet. Vis hele fordelingen af brutto-gearing. Kørslen med volatilitetsmål uden loft ovenfor lå over 5× i 4% af timerne, og den slags dukker aldrig op i en oversigtstabel, selvom det fuldstændig afgør, om strategien kan implementeres.
  4. Følsomhed over for positionsstørrelse som robusthedstest. Hvis Sharpe kollapser, når du ændrer volatilitetsmålet fra 20% til 25%, er strategien ikke volatilitetsmålrettet, den er finjusteret efter gearing, og du har fundet din fordel ved at vælge et tal.

Gearingsloftet er ikke pynt til risikostyringen, det er en del af strategiens definition. Binance's ETHUSDT-niveauer sænker den maksimale gearing, når positionens nominelle værdi vokser, og vedligeholdelsesmarginen stiger trinvist med den. En backtest, der lader reglen for volatilitetsmålet nå 6.3× ved en nominel værdi på $400k, beskriver en position, som handelsplatformen ikke tillader med den margin. Rækken med loft i tabellen koster 0.05 Sharpe og er den eneste af de to, der beskriver noget virkeligt.

Det er ved genbalanceringen, pengene forsvinder

Læg mærke til omkostningskolonnen. Genbalancering hver time efter et volatilitetsmål gav den bedste overskrifts-Sharpe og sendte samtidig 41% af brutto-PnL videre til børsen. Det svarer til handlet nominel værdi på 1,180× den gennemsnitlige positionsstørrelse om året ved 5 bps på hver side plus spread og markedspåvirkning. Den oplagte løsning er at genbalancere sjældnere efter en fast tidsplan. En bedre løsning er et no-trade-bånd: justér kun størrelsen, når den aktuelle position afviger mere fra målet end en bestemt tærskel.

Et bånd på 20% reducerede den årligt handlede nominelle værdi fra 1,180× til 402× — et fald på 66% — og kostede 0.05 Sharpe. Jeg har nu kørt dette på otte signaler, og mønstret gentager sig: bånd på mellem 15% og 25% bevarer det meste af risikostyringens fordel med en tredjedel af omsætningen, mens alt under 10% bare betyder gebyrer for kosmetisk præcision i en størrelse, du alligevel estimerer med et 20-dages vindue. Du kan ikke genbalancere med tre decimalers præcision ud fra et tal med en standardfejl på 15%.

Vi havde en kørsel i februar, hvor rapporten fra en agent tilskrev en Sharpe-forbedring på 0.22 til "det forbedrede indgangsfilter". Ændringen var én linje i modulet for positionsstørrelse. Filteret var ikke ændret. Nu får jeg rapporten til at vise hashen for konfigurationen af positionsstørrelsen øverst, for attribuering kræver disciplin, og modeller er lige så glade for at fortælle en pæn historie som alle andre.

Hvad paper trading gør ved din regel for positionsstørrelse

Det er her, forskellen mellem backtest og paper trading bliver størst, og det handler mest om simpel aritmetik. Positionsstørrelse, der følger volatiliteten, svinger med en faktor på 4 til 8 i løbet af datasættet. Begge yderpunkter rammer begrænsninger på handelsplatformen, som backtesten aldrig modellerede.

I den lave ende: skridtstørrelse og minimumsnominel værdi. ETHUSDT perpetual har et mængdeskridt på 0.001 og et minimum på $5. Hvis din størrelse i et regime med lav volatilitet er 0.0004 ETH, beholder backtesten den, mens paper trading slet ikke holder nogen position. Det lyder som et særtilfælde, indtil du indser, at en regel for volatilitetsmålretning giver sine mindste størrelser i de roligste markeder, og det er ofte dér, de gode indgange findes i en trendstrategi. I den store ende: positionsgrænser, marginniveauer og det forhold, at en position på 6× kræver disciplin med isolated margin, som du ikke lavede en likvideringsmodel for i backtesten.

Vi fandt én sag, hvor paper trading-kurven fulgte backtesten inden for 3% i seks uger og derefter afveg kraftigt. Årsagen var afrunding: `int()`-afkortning i stedet for afrunding til nærmeste skridt i ordreberegneren, anvendt på positioner, der i gennemsnit fyldte 1.4 skridt. Backtesten fastsatte størrelsen i et kontinuert rum, mens den live ordreberegner mistede 20-30% af den tilsigtede position på hver lille handel. Ingen eksotiske fill-modeller, ingen historie om latenstid. Afkortning.

Hvor kritikerne har ret

Tre indvendinger holder stik, og jeg vil ikke forsøge at tale udenom dem.

For det første, og vigtigst: Positionsstørrelse fordeler en fordel, den kan ikke skabe den. Hvis signalets bruttoforventning er nul eller negativ efter realistiske gebyrer og funding, taber alle reglerne i tabellen penge — de avancerede regler taber dem bare med en pænere variansprofil. Jeg valgte et signal med en lille, men positiv, nettofordel i denne periode. Kør de samme seks regler på et signal med −1.2 bps netto pr. handel, så bevares rangordningen, mens slutværdien af egenkapitalen er lavere end startværdien for dem alle. Positionsstørrelse er en multiplikator på noget. Du skal stadig have det noget.

For det andet har volatilitetsmålretning en reel og veldokumenteret fejltilstand: Den reducerer gearingen tæt på bunden af et hurtigt kursfald og øger den igen efter et brat opsving. I et skarpt V vinder fast nominel værdi, nogle gange med stor margin. Aktierne i marts 2020 og kryptofaldet i august 2024 straffede begge positionsstørrelser, der fulgte volatiliteten, under genopretningen. Min fireårige ETH-periode indeholder tilfældigvis mere langsom, volatilitetsklumpet handel end V-formede udsving, hvilket får rækkerne med invers volatilitet til at se bedre ud. En anden periode vender noget af rangordningen på hovedet, og hvis jeg var begyndt med en tabel fra 2020, ville jeg fremføre en svagere version af argumentet.

For det tredje kan reglen for positionsstørrelse overtilpasses lige så meget som alt andet. Halv-Kelly baseret på rullende estimater afslører det i min tabel: Den ser sofistikeret ud, har en teoretisk begrundelse og gav det næststørste drawdown, fordi det rullende gennemsnit af en støjfyldt afkastserie er værdiløst, og Kelly er ekstremt følsom over for det. Enhver regel for positionsstørrelse, der bruger et estimat af forventet afkast som input, arver fejlene i estimatet og forstærker dem. Regler, der kun bruger et variansestimat, opfører sig langt bedre, fordi varians er det ene moment, du faktisk kan estimere ud fra fire års data på timebasis.

Det, jeg ville tage med herfra: Når et backtestresultat overrasker dig, så tjek modulet for positionsstørrelse, før du leder efter nye finesser i signalet. Og når du rapporterer en Sharpe, så vis også gearingsforløbet og omkostningsbroen, for et tal, der afhænger så meget af en beslutning om positionsstørrelse, er slet ikke en egenskab ved signalet.

positionsstørrelsevolatilitetsmålretningsharpe-ratiorisikostyringbacktesting
← Alle indlæg