Aceasta este întrebarea pe care mi-o adresează cel mai des, într-o formă sau alta, cei care tocmai și-au terminat prima strategie: de câte tranzacții am nevoie ca rezultatul să fie real? De obicei, întrebarea vine cu un număr. „Am 1,200 de tranzacții, e suficient, nu?” Iar răspunsul sincer îi enervează pe toți, pentru că numărul tranzacțiilor nu are, de fapt, nicio legătură.
Iată totul într-o singură formulă; apoi voi explica în restul articolului de ce e greu de acceptat.
Care este eroarea standard a unui raport Sharpe?
Pentru un Sharpe calculat pe baza a n randamente periodice, presupunând că sunt independente și aproximativ normale, eroarea de eșantionare este:
SE(s) ≈ √((1 + s²/2) / n)
unde s este Sharpe-ul măsurat la aceeași frecvență. Dacă anualizăm ambele părți, obținem o formulă simplă. Pentru k observații pe an și T ani, eroarea standard a Sharpe-ului anualizat S este:
SE(S) ≈ √((1 + S²/(2k)) / T)
Uitați-vă la acel 2k din numitor. Pentru randamente zilnice, k = 252, așa că până și un Sharpe de 2 contribuie cu 4/504 ≈ 0.008 la numărător. Întregul termen se simplifică la 1. Eroarea standard a unui Sharpe anualizat este aproximativ 1/√T, unde T reprezintă numărul de ani calendaristici de date. Depinde foarte puțin de valoarea Sharpe-ului, nu depinde de frecvența de eșantionare și cu siguranță nu depinde de numărul tranzacțiilor efectuate.
Așadar:
| Ani de date | SE(Sharpe) | IC 95% dacă ai măsurat 1.5 |
|---|---|---|
| 1 | 1.00 | −0.46 până la 3.46 |
| 2 | 0.71 | 0.11 până la 2.89 |
| 3 | 0.58 | 0.37 până la 2.63 |
| 5 | 0.45 | 0.62 până la 2.38 |
| 10 | 0.32 | 0.88 până la 2.12 |
Un backtest care arată un Sharpe de 1.5 pe baza a doi ani de date nu poate distinge statistic rezultatul de o simplă aruncare cu banul, la un nivel de încredere de 95%. Aceasta este situația de bază în majoritatea cercetărilor crypto, pentru că datele curate, corectate pentru biasul de supraviețuire și cu comisioane exacte încep, pentru cei mai mulți, undeva prin 2022, iar jumătate dintre simbolurile interesante nici nu existau înainte de 2023.
Dar am 40,000 de tranzacții. Asta nu rezolvă problema?
Nu, iar acesta este conceptul greșit pe care vreau cel mai mult să-l demontez.
Numărul tranzacțiilor și lungimea eșantionului sunt mărimi diferite, iar în formulă apare doar una dintre ele. Dacă strategia ta declanșează 40,000 de tranzacții în șase luni, ai T = 0.5 și SE ≈ 1.41. Intervalul de 95% pentru un Sharpe măsurat de 2.0 se întinde de la −0.8 la 4.8. Patruzeci de mii de tranzacții, iar concluzia sinceră este „poate fi bună, poate avea randament negativ”.
Motivul este că aceste 40,000 de tranzacții nu sunt 40,000 de pariuri independente pe 40,000 de stări diferite ale pieței. Sunt 40,000 de eșantioane din aproximativ 180 de zile de comportament al pieței, iar zilele sunt corelate între ele și regimurile sunt corelate în interiorul lor. Un portofoliu de mean reversion de înaltă frecvență, care face bani în fiecare zi timp de patru luni, a pariat de fapt o singură dată — că reversia pe termen scurt se menține în acest regim de lichiditate — și a observat poate doar de câteva ori, în mod independent, deznodământul acelui pariu.
În minte, înlocuiesc numărătoarea astfel: numără regimurile, nu execuțiile. Prin câte condiții de piață cu adevărat diferite a trecut cu succes strategia? O strategie de carry din funding, rulată într-o singură perioadă lungă cu basis pozitiv, a văzut n = 1, indiferent de numărul reechilibrărilor orare înregistrate.
Verificare rapidă: aplică block bootstrap P&L-ului zilnic, cu o lungime a blocului de 20 de zile, și examinează distribuția Sharpe-urilor reeșantionate. Dacă percentila 5 este sub zero, numărul tranzacțiilor nu contează. Sunt necesare aproximativ nouă linii de numpy, iar această verificare m-a făcut să renunț la mai multe strategii decât oricare alta.
Este valabilă formula pentru strategiile reale?
Nu chiar, iar eroarea este în direcția care nu-ți va plăcea. Rezultatul 1/√T presupune randamente IID normale. Randamentele reale ale strategiilor sunt autocorelate și asimetrice, iar asimetria este de obicei negativă pentru orice seamănă cu o strategie de carry, short vol sau mean reversion. Corecția lui Mertens reintroduce acești momente:
SE(s) ≈ √((1 + s²/2 − γ₃·s + (γ₄−3)·s²/4) / n)
unde γ₃ este asimetria, iar γ₄ este curtoza. Asimetria negativă face ca termenul −γ₃·s să fie pozitiv, ceea ce lărgește intervalul. Curtoza excedentară îl lărgește și mai mult. Pentru un P&L tipic de carry crypto, cu asimetrie în jur de −1.2 și curtoză în jur de 9, am văzut că eroarea standard corectată este cu 30–40% mai mare decât cea calculată simplist. Lucrarea lui Lo din 2002 tratează autocorelația, iar efectul are același sens: corelația serială pozitivă a randamentelor umflă Sharpe-ul calculat simplist și micșorează eroarea aparentă, o combinație neplăcută.
Așadar, tratează 1/√T ca limita inferioară a incertitudinii. Acesta este scenariul optimist.
Cât de mare trebuie să fie Sharpe dacă am testat 500 de variante?
Acum ajungem la partea care contează pentru oricine rulează o conductă automatizată de cercetare, situație în care ne aflăm în fiecare zi la Stratmill: agentul de generare nu produce un singur candidat, ci sute.
Valoarea maximă așteptată din M extrageri dintr-o distribuție normală standard este aproximativ √(2 ln M). Înmulțește-o cu eroarea standard și obții Sharpe-ul pe care l-ar afișa cea mai norocoasă dintre M strategii complet inutile.
| Strategii testate | √(2 ln M) | Sharpe-ul maxim rezultat din zgomot, 5 ani (SE 0.45) | Maximul rezultat din zgomot, 2 ani (SE 0.71) |
|---|---|---|---|
| 10 | 2.15 | 0.96 | 1.52 |
| 100 | 3.03 | 1.36 | 2.16 |
| 500 | 3.53 | 1.58 | 2.50 |
| 5,000 | 4.13 | 1.85 | 2.93 |
Citiți penultimul rând. Dacă ai generat 500 de candidați pe baza a doi ani de date, iar câștigătorul arată un Sharpe de 2.4, n-ai găsit absolut nimic. E sub nivelul zgomotului. Sharpe-ul deflatat al lui Bailey și López de Prado formalizează acest lucru folosind varianța Sharpe-urilor din teste în locul aproximării brute √(2 ln M); merită implementat corect, dar varianta brută este suficientă pentru a-ți schimba comportamentul chiar de azi.
Două aspecte fac situația mai gravă decât sugerează tabelul. În primul rând, M nu este numărul strategiilor pe care le-ai salvat, ci numărul celor pe care le-ai evaluat, inclusiv fiecare modificare de parametri, fiecare „hai să încerc totuși o fereastră de 30 de perioade” și fiecare rerulare după o corectare de bug. Nimeni nu le numără cu sinceritate. În al doilea rând, candidații nu sunt extrageri independente, așa că √(2 ln M) supraestimează diversitatea efectivă; totuși, testele corelate înseamnă și că un singur regim norocos ridică împreună un întreg grup de candidați.
Cel mai periculos număr din cercetarea cantitativă este cel pe care nimeni nu l-a înregistrat: de câte ori te-ai uitat la rezultate.
Așadar, ce fac concret?
Cinci lucruri, în ordinea în care le-aș face.
- Înregistrează fiecare evaluare. Un contor care se incrementează la fiecare rulare a unui backtest, cu valoarea salvată și fără să fie resetat vreodată. Dacă nu poți spune cât este M, nu poți spune care este pragul tău. Este investiția de o oră în inginerie cu cea mai mare valoare din toată lista.
- Raportează întotdeauna Sharpe împreună cu intervalul său. Nu afișa niciodată doar o cifră. Rapoartele backtesturilor noastre emit
1.72 ± 0.51 (2.9y, skew-adjusted), iar simbolul ± este obligatoriu. Schimbă felul în care vorbește întreaga echipă despre rezultate. - Stabilește pragul în funcție de M și T înainte să te uiți la rezultate. Extrage numărul din tabelul de mai sus și notează-l. Pragurile stabilite după ce vezi rezultatul îi fac pe toți să se convingă singuri că ajustarea curbei este validă.
- Când ai puține date, preferă diversitatea în locul frecvenței. Nu poți fabrica mai mult timp calendaristic, dar poți rula același semnal pe 40 de simboluri necorelate. Asta chiar crește n efectiv, spre deosebire de creșterea frecvenței tranzacțiilor. Ai grijă totuși la corelații — 40 de contracte perpetue crypto într-o oră cu aversiune la risc sunt un singur instrument.
- Apoi, rulează-l pe un cont demo. Timpul în afara eșantionului se acumulează cu o zi pentru fiecare zi, fără scurtături; tocmai de aceea este singurul eșantion pe care nimeni nu-l poate supraajusta.
Nimic din toate acestea nu face eșantioanele scurte utilizabile. Te ajută să fii sincer cu privire la concluziile pe care le poate susține un eșantion scurt, mult mai modeste decât sugerează majoritatea rapoartelor de backtest. Un Sharpe de 1.5 pe doi ani este o ipoteză care merită testată pe un cont demo. Nu este o constatare.
← Toate articolele
