Semnalul de intrare este probabil elementul cu cele mai mici consecințe din backtestul tău. Pot lua o regulă mediocră de momentum, pot lăsa neschimbat fiecare marcaj temporal de intrare și ieșire, pot schimba doar funcția care decide câte contracte să dețin și pot muta Sharpe net de la 0.41 la 0.71, iar drawdown-ul maxim de la 31% la 13%. Aceleași tranzacții. Aceleași execuții. Strategie diferită.
Afirmația asta îi irită pe oameni, și pe bună dreptate, fiindcă sugerează că mare parte din timpul petrecut reglând perioadele de lookback și pragurile filtrelor se duce pe componenta minoră. Așa că vă voi arăta rulările reale, apoi le voi da dreptate criticilor, fiindcă există o versiune greșită a acestui argument și merită să știți ce versiune susțin.
Un semnal, 6 moduri de a menține poziția
Semnalul: contractul perpetuu ETHUSDT pe Binance USDⓈ-M, bare de 1 oră, poziție long când EMA pe 12 ore este peste EMA pe 96 de ore, fără poziție în rest, fără poziții short. Din iulie 2022 până în iunie 2026. 431 de tranzacții dus-întors. Comisioane taker de 5.0 bps pe ambele sensuri, funding plătit sau încasat la fiecare 8 ore în funcție de poziția efectivă, slippage modelat pe baza adâncimii din topul registrului de ordine. Este un semnal intenționat de banal — l-am ales fiindcă nimeni nu l-ar apăra, ceea ce oferă un teren de test curat.
Fiecare rând de mai jos folosește marcaje temporale identice pentru barele de intrare și ieșire. Singura diferență este funcția de dimensionare.
| Regula de dimensionare | Sharpe net | Drawdown max. | Valoare noțională tranzacționată/an (× poziția medie) | Costuri ca % din PnL brut | Levier maxim |
|---|---|---|---|---|---|
| Valoare noțională fixă de $10k | 0.41 | 18.2% | 246× | 14% | 1.0× |
| Fracție fixă, 100% din capitalul propriu | 0.44 | 30.8% | 251× | 15% | 1.0× |
| Volatilitate realizată inversă pe 20 de zile | 0.68 | 14.1% | 690× | 29% | 4.4× |
| Țintă de volatilitate anualizată de 20%, reechilibrare la fiecare oră, fără plafon | 0.71 | 12.9% | 1,180× | 41% | 6.3× |
| Țintă de volatilitate de 20%, bandă fără tranzacționare de 20%, plafon de levier de 3× | 0.66 | 15.3% | 402× | 19% | 3.0× |
| Half-Kelly pe medie/varianță mobilă pe 60 de zile | 0.52 | 24.6% | 830× | 33% | 8.1× |
Priviți diferențele. Între rândurile cu cel mai slab și cel mai bun rezultat este o diferență relativă de 73% la Sharpe și un factor de 2.4 la drawdown. Acum găsiți-mi un parametru al semnalului de intrare pe acest set de date care să miște Sharpe cu 0.30 fără să pară în mod evident supraajustare. Am căutat. Lungimea perechii EMA îl mișcă cu aproximativ 0.12 pe întreaga grilă plauzibilă, iar cea mai mare parte a mișcării este zgomot pe care nu-l poți păstra în afara eșantionului.
De ce arată atât de bine dimensionarea cu volatilitate inversă și cât din rezultat e real
Mecanismul nu e misterios. Cu o valoare noțională fixă, dimensiunea poziției tale nu este corelată cu volatilitatea realizată, ceea ce înseamnă că riscul în dolari per tranzacție este proporțional cu volatilitatea din săptămâna respectivă. Pentru ETH, în această perioadă, volatilitatea realizată pe 20 de zile a variat între 31% și 118% anualizat. Rularea cu valoare noțională fixă și-a asumat un risc în dolari de 3.8× mai mare în martie 2024 decât în iulie 2023, nu fiindcă semnalul era mai sigur, ci fiindcă piața era mai agitată. Aproape întregul drawdown este concentrat în quintila cu volatilitatea cea mai mare. Dimensionarea cu volatilitate inversă elimină această legătură, iar eliminarea ei îmbunătățește cu adevărat profilul fluxului de randamente.
Dar o parte din câștigul Sharpe este un artefact de măsurare și, dacă nu separi cele două componente, vei lua decizii proaste mai departe. Sharpe împarte randamentele la abaterea lor standard. Țintirea volatilității este, prin definiție, o operațiune care stabilizează abaterea standard a randamentelor. Optimizezi direct numitorul. O regulă care scalează pozițiile pentru a atinge o volatilitate ex ante constantă va îmbunătăți Sharpe pentru aproape orice flux de randamente cu grupare a volatilității, inclusiv pentru fluxuri fără niciun avantaj. Am verificat asta pe semnale amestecate aleatoriu: randomizează marcajele temporale de intrare, păstrează suprapunerea de țintire a volatilității, iar Sharpe tot crește cu aproximativ 0.06 față de valoarea noțională fixă, pe o bază cu medie zero. E puțin, dar nu e zero și ține pur și simplu de mecanică.
De aceea, când compar intern regulile de dimensionare, Sharpe nu este niciodată singurul număr din tabel. Vreau Calmar, vreau PnL net per unitate din valoarea noțională medie utilizată și vreau defalcarea de la brut la net, fiindcă toate trei împreună sunt mult mai greu de manipulat printr-un truc cu numitorul.
Estimarea volatilității este un model și poate scurge informații
Cel mai frecvent motiv pentru care un rezultat bun la dimensionare se dovedește fals: estimarea volatilității folosește informații din bara pe care o dimensionează. Dacă seria volatilității este calculată cu o fereastră centrată, sau cu `rolling().std()` implicit din pandas aplicat după o resincronizare care include bara curentă, încă incompletă, sau cu o standardizare pe întregul eșantion, ai scurgere de informații. E subtilă fiindcă volatilitatea persistă, deci scurgerea e mică pe fiecare rând, iar curba capitalului tot pare plauzibilă. Arată doar puțin prea netedă exact în săptămânile care contează.
Agenții noștri verifică 4 lucruri pentru fiecare regulă de dimensionare înainte ca un rezultat să ajungă în coada de tranzacționare pe hârtie:
- Disponibilitatea la momentul deciziei. Dimensiunea folosită pentru bara care se deschide la 14:00 trebuie să poată fi calculată din date al căror marcaj temporal de închidere este ≤ 13:59:59.999. Verificăm asta recalculând seria de dimensiuni dintr-un cadru trunchiat la un eșantion aleatoriu de 200 de momente de decizie și comparând rezultatele.
- Perioada de lookback a estimatorului este un parametru real. O fereastră de volatilitate de 20 de zile și una de 60 de zile sunt două strategii diferite. Perioada de lookback intră în grila walk-forward împreună cu toți ceilalți parametri, iar dacă rezultatul funcționează doar la o singură lungime a ferestrei, asta ne spune ceva despre fragilitate.
- Traiectoria levierului, nu doar maximul. Afișați distribuția completă a levierului brut. Rularea cu țintă de volatilitate fără plafon din tabelul de mai sus a petrecut 4% din ore peste 5×, genul de detaliu care nu apare niciodată într-un tabel sumar și determină complet dacă strategia poate fi implementată.
- Sensibilitatea dimensionării ca test de robustețe. Dacă Sharpe se prăbușește când schimbi ținta de volatilitate de la 20% la 25%, strategia nu țintește volatilitatea, ci își reglează levierul; ai găsit avantajul alegând un anumit număr.
Plafonul de levier nu este un adaos decorativ pentru gestionarea riscului, ci face parte din definiția strategiei. Treptele Binance pentru ETHUSDT reduc levierul maxim pe măsură ce crește valoarea noțională a poziției, iar rata marjei de menținere crește în trepte odată cu el. Un backtest care lasă regula de țintire a volatilității să ajungă la 6.3× pentru o valoare noțională de $400k descrie o poziție pe care platforma nu te va lăsa să o menții cu marja respectivă. Rândul cu plafon din tabel costă 0.05 Sharpe și este singurul dintre cele două care descrie ceva real.
Aici se duc banii: la reechilibrare
Observați coloana costurilor. Reechilibrarea la fiecare oră pentru a ținti volatilitatea a oferit cel mai bun Sharpe afișat, dar a dat și 41% din PnL-ul brut bursei. Asta înseamnă valoarea noțională medie a poziției tranzacționată de 1,180× pe an, la 5 bps pe sens, plus spread și impact. Soluția naivă este să reechilibrezi mai rar, după un program fix. Soluția mai bună este o bandă fără tranzacționare: ajustezi dimensiunea doar când poziția curentă se abate de la țintă cu mai mult decât un anumit prag.
O bandă de 20% a redus valoarea noțională anuală tranzacționată de la 1,180× la 402× — o reducere de 66% — cu un cost de 0.05 Sharpe. Am testat asta acum pe 8 semnale, iar tiparul se repetă: benzile între 15% și 25% recuperează cea mai mare parte a beneficiului controlului riscului cu o treime din rulaj, iar orice sub 10% înseamnă doar comisioane plătite pentru precizie cosmetică într-o cantitate pe care oricum o estimezi folosind o fereastră de 20 de zile. Nu poți reechilibra la 3 zecimale o valoare cu o eroare standard de 15%.
În februarie am avut o rulare în care raportul scris de un agent a atribuit o îmbunătățire Sharpe de 0.22 „filtrului de intrare îmbunătățit”. Diferența consta într-o singură linie din modulul de dimensionare. Filtrul nu se schimbase. Acum cer ca raportul să afișeze sus hash-ul configurației de dimensionare, fiindcă atribuirea rezultatelor ține de disciplină, iar modelele sunt la fel de dornice ca oricine să spună o poveste ordonată.
Ce face tranzacționarea pe hârtie cu regula ta de dimensionare
Aici se deschide cel mai mult diferența dintre backtest și tranzacționarea pe hârtie, și ține în mare parte de aritmetică. Dimensionarea care răspunde la volatilitate înseamnă că dimensiunea poziției variază de 4 până la 8 ori pe parcursul eșantionului. Ambele capete ale intervalului lovesc limitele platformei pe care backtestul nu le-a modelat.
La capătul mic: pasul de cantitate și valoarea noțională minimă. Contractul perp ETHUSDT are un pas de cantitate de 0.001 și un minim de $5. Dacă dimensiunea în regim de volatilitate scăzută este de 0.0004 ETH, backtestul o menține, iar tranzacționarea pe hârtie nu deține nimic. Pare un caz-limită până când realizezi că o regulă de țintire a volatilității plasează cele mai mici dimensiuni în piețele cele mai liniștite, exact acolo unde, pe un semnal de trend, apar frecvent intrările bune. La capătul mare: limitele poziției, treptele de marjă și faptul că o poziție de 6× cere o disciplină de marjă izolată pentru care nu ai modelat lichidarea în backtest.
Am depistat un caz în care curba capitalului din tranzacționarea pe hârtie a urmărit backtestul cu o abatere de cel mult 3% timp de 6 săptămâni, apoi s-a îndepărtat brusc. Cauza a fost rotunjirea: trunchiere cu `int()` în loc de rotunjire la pasul de tranzacționare, aplicată pozițiilor care aveau în medie 1.4 pași. Backtestul dimensiona în spațiu continuu, iar dimensionarea live pierdea 20-30% din poziția dorită la fiecare tranzacție mică. Nicio sofisticărie a modelului de execuție, nicio poveste despre latență. Trunchiere.
Unde criticii au dreptate
Sunt 3 obiecții valide și nu vreau să le trec sub tăcere.
În primul rând și cel mai important: dimensionarea alocă avantajul, nu îl poate crea. Dacă valoarea așteptată brută a semnalului este zero sau mai mică după comisioane și funding realiste, fiecare regulă din acel tabel pierde bani — cele sofisticate îi pierd doar cu un profil al varianței mai frumos. Am ales un semnal cu un avantaj net mic, dar pozitiv, în această perioadă. Rulează aceleași 6 reguli pe un semnal cu −1.2 bps net per tranzacție, iar clasamentul se păstrează, dar capitalul final în toate cazurile este sub valoarea de pornire. Dimensionarea multiplică ceva. Tot ai nevoie de acel ceva.
În al doilea rând, țintirea volatilității are un mod de eșec real și bine documentat: reduce levierul în partea de jos a unei vânzări rapide și îl mărește din nou după revenirea bruscă. Într-o scădere în V, valoarea noțională fixă câștigă, uneori cu mult. Prăbușirea acțiunilor din martie 2020 și lichidarea cripto din august 2024 au penalizat ambele dimensionarea sensibilă la volatilitate pe segmentul revenirii. Perioada mea de 4 ani pe ETH include din întâmplare mai multe episoade de mișcare lentă cu volatilitate grupată decât oscilații bruște în V, ceea ce avantajează rândurile cu volatilitate inversă. O altă perioadă schimbă o parte din clasament, iar dacă aș fi început cu un tabel din 2020, aș fi susținut o versiune mai slabă a acestui argument.
În al treilea rând, regula de dimensionare se poate supraajusta la fel ca orice altceva. Half-Kelly cu estimări mobile este exemplul grăitor din tabelul meu: pare sofisticat, are o justificare teoretică și a produs al doilea cel mai mare drawdown, fiindcă estimarea mobilă a mediei unei serii de randamente zgomotoase este o prostie, iar Kelly reacționează brutal la ea. Orice regulă de dimensionare care folosește ca intrare o estimare a randamentului așteptat moștenește eroarea din acea estimare, amplificată. Regulile care folosesc doar o estimare a varianței se comportă mult mai bine, fiindcă varianța este singurul moment pe care îl poți estima cu adevărat din 4 ani de date orare.
Ce aș reține din toate acestea: când un rezultat de backtest te surprinde, verifică modulul de dimensionare înainte să cauți ceva ingenios în semnal. Iar când raportezi un Sharpe, afișează lângă el traiectoria levierului și defalcarea costurilor, fiindcă un număr care depinde atât de mult de decizia de dimensionare nu este deloc o proprietate a semnalului.
← Toate articolele
