Monte Carlo FIRE pe volatilitatea reala a pietei romanesti: BET-TR, EUR-RON si failure rate
O simulare monte carlo fire volatilitate Romania BET corectă pleacă de la o observație pe care majoritatea calculatoarelor FIRE o ignoră: parametrii stochastici impliciți (μ ≈ 7%, σ ≈ 15%, drawdown de tip 2008) sunt calibrați pe S&P 500 în USD, nu pe un portofoliu denominat în lei și expus la BET-TR, titluri de stat RON și cuplajul EUR-RON. Dacă rulezi un plan de retragere de 35-45 de ani cu σ greșit, eroarea de failure rate nu e cosmetică: la 4% retragere, o subestimare de 3-4 puncte de volatilitate poate muta rata de eșec de la 6% la 18%.
Acest material îți dă scheletul complet al unui model de tip simulare stochastica fire RON EUR: cum extragi parametri reali piata romana fire dintr-o serie BET de ~28 de ani și o serie BET-TR (total return) începută în septembrie 2014, cum modelezi volatilitate BET-TR fire correlation cu cursul EUR-RON administrat de BNR, și cum calculezi failure rate fire 10000 iteratii printr-un block bootstrap care păstrează autocorelația și fat tails. Vom face și backtesting monte carlo fire împotriva istoricului real, ca să nu confunzi un model frumos cu unul corect. Presupun că stăpânești deja regula 4%, sequence of returns risk și logica unui SWR variabil — aici mergem direct în calibrare și cod conceptual.
Atenție la o capcană de date pe care o vei întâlni imediat: BET-TR (indicele cu randament total, care reinvestește dividendele) există abia din 22 septembrie 2014. Orice istoric „BET-TR pe 20 de ani” este reconstruit sintetic, nu observat. Tratăm asta corect mai jos.
De ce parametrii S&P 500 produc un failure rate fals pe un portofoliu în lei
Un calculator FIRE generic simulează un proces lognormal cu drift și difuzie constante: R_t = μ·dt + σ·√dt·Z, cu Z ~ N(0,1). Problema nu e modelul, ci cei doi parametri și o ipoteză ascunsă — gaussianitatea. Pentru un rentier român, trei lucruri sparg transferul direct al parametrilor americani:
- Volatilitatea de bază e mai mare. BET, ca piață frontieră/emergentă mică și concentrată (top 5 emitenți depășesc constant 50-60% din capitalizarea indicelui), are σ anualizat istoric net peste S&P 500. Pe seria lungă, abaterea standard a randamentelor lunare BET implică σ_anual frecvent în zona 22-30%, față de ~15-18% pentru S&P 500.
- Distribuția e mai grasă la cozi. Kurtoza randamentelor lunare BET e semnificativ peste 3 (excess kurtosis pozitiv), iar asimetria e negativă: crash-urile sunt mai abrupte decât revenirile. Un model gaussian subestimează exact evenimentul care te omoară în anul 1 de FIRE.
- Există un al doilea factor de risc: cursul. Dacă o parte din portofoliu e în active globale (VWCE, IWDA, CSPX) denominate în EUR/USD dar cheltuielile tale sunt în lei, randamentul tău real în RON e
R_RON ≈ R_activ + ΔFX. Trebuie modelat explicit cuplajul EUR-RON.
Concluzia operațională: nu poți importa σ = 15%. Trebuie să-l reconstruiești din date românești, pe componente, și apoi să-l agregi la nivel de portofoliu cu matricea de covarianță corectă.
Pasul 1 — Calibrarea μ și σ pe seria BET / BET-TR reală
Lucrezi pe randamente logaritmice lunare (r = ln(P_t/P_{t-1})), nu aritmetice, fiindcă se compun aditiv și se anualizează curat. Sursa de date: cotațiile oficiale BVB pentru BET (din 1997, deci ~28 ani de istoric de preț) și BET-TR (din 2014, pentru componenta de dividende reinvestite).
Reconstrucția unei serii total-return lungi
Fiindcă BET-TR e scurt, construiești o serie sintetică BET-TR pe toată istoria astfel: pentru perioada ≥ sept. 2014 folosești BET-TR observat; pentru perioada < 2014 aproximezi randamentul total adăugând la randamentul de preț BET un dividend yield istoric mediu al pieței (în România, randamentul dividendelor a fost ridicat datorită SIF-urilor și energiei — frecvent 4-7% anual, cu vârfuri peste 8% în anii cu dividende speciale Romgaz/OMV Petrom/bănci). Marchezi clar această componentă ca estimată, nu observată, fiindcă introduce incertitudine de parametru.
Estimatorii pe care îi extragi
- Drift μ: media randamentelor log lunare × 12. Pe seria lungă BET-TR sintetică, μ_log real (peste inflație) este modest și foarte sensibil la fereastra aleasă — exact de aceea nu te bazezi pe o singură valoare punctuală, ci pe bootstrap.
- Volatilitate σ: abaterea standard a randamentelor log lunare × √12.
- Asimetrie și kurtoză: momentele 3 și 4, ca să decizi dacă ai nevoie de un model fat-tailed (t-Student) sau de bootstrap nonparametric.
Regula de igienă cantitativă: raportează întotdeauna estimatorii cu interval de încredere (de ex. prin bootstrap pe medie/σ), fiindcă pe 28 de ani ai doar ~28 de observații anuale efective — eroarea standard a lui μ_anual este de ordinul σ/√n ≈ 25%/√28 ≈ 4,7%. Cu alte cuvinte, μ-ul tău „adevărat” are o bandă de ±4-5 puncte. Asta e parameter uncertainty și trebuie injectată în simulare, altfel raportezi un failure rate fals de precis.
Pasul 2 — Modelarea cuplajului EUR-RON (BNR managed float)
Leul nu flotează liber. BNR practică un managed float cu intervenții pe piața valutară, ceea ce face ca EUR-RON să aibă o dinamică foarte particulară pentru un simulator: volatilitate zilnică mică, dar deprecieri în trepte și un drift structural ascendent. În 2026, EUR-RON se tranzacționează în zona ~5,24, după ce a stat administrat ani de zile, cu deprecieri controlate care urmează diferențialul de inflație și dobândă.
Pentru modelare, NU folosi un random walk gaussian simetric — ar genera și aprecieri puternice ale leului, care empiric nu apar. În iunie 2026, EUR-RON se tranzacționează în zona ~5,24 (cursul de referință BNR a oscilat în ultimele luni între ~5,09 și ~5,27), după ani de depreciere controlată în trepte care urmează diferențialul de inflație și dobândă. Două abordări corecte:
- Drift + jump:
ΔFX_t = δ·dt + σ_fx·√dt·Z + J_t, unde δ este un drift mic pozitiv (depreciere structurală anuală a leului, calibrabil pe diferențialul de inflație RO vs zona euro, istoric ~2-4%/an), σ_fx este foarte mic (volatilitatea zilnică EUR-RON e o fracțiune din cea a unei perechi liber flotante), iar J_t este un proces Poisson rar de salt care modelează deprecierile abrupte (ex. martie 2020, momentele de stres pe leu). - Regime-switching: un model cu două regimuri — „calm administrat” (σ_fx aproape zero, drift mic) și „repricing” (salt + volatilitate ridicată) — cu o probabilitate mică de tranziție lunară.
Esența pentru FIRE: EUR-RON nu te ajută aproape niciodată și te lovește ocazional în trepte. Dacă cheltuiești în lei și investești global, deprecierea leului îți crește valoarea în RON a activelor externe — un hedge natural parțial împotriva crizelor locale. Acesta e exact cuplajul pe care un calculator S&P-only îl ratează complet.
Pasul 3 — Matricea de covarianță și agregarea portofoliului
Un portofoliu FIRE realist al unui român nu e 100% BET. Modelezi cel puțin patru active corelate:
- BET-TR (acțiuni RO) — μ_RO, σ_RO ridicat;
- Acțiuni globale în EUR/USD (VWCE/IWDA) — μ_glob, σ_glob ~15%, plus expunere FX;
- Titluri de stat / Fidelis / Tezaur RON — μ_bond apropiat de dobânda nominală, σ mic;
- Componenta FX EUR-RON ca factor separat aplicat pe activele externe.
Cheia e matricea de corelație, estimată pe randamentele istorice aliniate temporal. Empiric, în crize, corelația BET cu piețele globale crește (corelația „se duce spre 1” exact când ai nevoie de diversificare) — deci nu folosi corelația din vremuri calme. Trebuie să simulezi corelație condiționată de regim: una în calm (ex. 0,3-0,5 între BET și MSCI World), alta în criză (0,7-0,9). Altfel supraestimezi grosolan beneficiul diversificării și raportezi un failure rate prea optimist.
Tehnic, generezi șocurile corelate prin descompunere Cholesky a matricei de covarianță Σ: r = μ + L·Z, unde L·Lᵀ = Σ și Z e vector de normale independente. Pentru fat tails, înlocuiești Z cu un vector t-Student multivariat (copulă t), care păstrează corelația cozilor — esențial pentru sequence risk.
Pasul 4 — Block bootstrap: alternativa care nu inventează distribuția
Modelul parametric (Cholesky + copulă t) e elegant dar presupune că ai ghicit corect forma distribuției. Pentru un dataset românesc scurt, abordarea mai robustă pentru backtesting monte carlo fire este stationary block bootstrap (Politis-Romano):
- Iei seria istorică reală de randamente lunare ale portofoliului (deja agregate în RON, cu FX inclus).
- În loc să tragi o lună aleatoare independentă, tragi blocuri contigue de lungime aleatoare (medie ~6-12 luni), pe care le concatenezi până umpli orizontul de 35-45 ani.
- Repeți de 10.000 de ori.
De ce blocuri: păstrează automat autocorelația (momentum și mean-reversion), clusterele de volatilitate și — crucial — secvențele reale de criză (un bloc poate conține exact 2008 sau 2020 cu coada lor de revenire). Nu presupui normalitate, nu presupui σ constant. Costul: nu poți simula crize mai mari decât cele din istoric. De aceea rulezi ambele metode și compari: dacă parametric (cu fat tails) și bootstrap dau failure rate apropiat, ai încredere; dacă diverg mult, ai un risc de model pe care trebuie să-l raportezi onest.
Pasul 5 — Bucla de simulare și definiția failure rate
Structura algoritmului pe care îl rulezi pentru failure rate fire 10000 iteratii:
- Input: capital inițial W₀ (lei), retragere reală anuală C (în lei de azi), orizont T (luni), vector de alocare, matrice Σ sau seria pentru bootstrap, regim de retragere (fix 4% vs variabil/guardrails), inflație IPC modelată ca proces propriu (corelată negativ cu randamentele reale).
- Per iterație: pentru fiecare lună t — generezi randamentul de portofoliu, aplici
W_t = W_{t-1}·(1+R_t) − C_t, unde C_t e indexat la inflația simulată. Dacă W_t ≤ 0 înainte de T → iterația e marcată „eșec”. - Output:
failure_rate = (nr. iterații eșuate) / 10.000, plus distribuția capitalului final, plus percentilele drawdown-ului maxim și anul median de ruină în scenariile eșuate.
Rafinări de specialist care schimbă rezultatul:
- Retrageri lunare, nu anuale. Retragerea la început de an în luna unui crash supraestimează eșecul; retragerea lunară e mai realistă și mai blândă.
- Parameter uncertainty per iterație. La fiecare din cele 10.000 de rulări, trage întâi μ și σ din distribuția lor de incertitudine (ex. μ ~ N(μ̂, σ/√n)), apoi simulează. Asta îți dă un failure rate mai onest, de obicei mai mare cu câteva puncte.
- Guardrails Guyton-Klinger. Modelează regula reală: dacă rata curentă de retragere depășește un prag, tai cheltuiala cu 10%; dacă scade mult, o crești. Un SWR rigid și unul cu guardrails pot da failure rate diferit cu 5-10 puncte la aceeași alocare.
Exemplu numeric concret: două planuri în lei
Capital W₀ = 2.000.000 lei, retragere reală C = 80.000 lei/an (deci SWR nominal 4%), orizont 40 de ani, inflație modelată cu medie ~4% (ținta BNR e 2,5% ±1pp, dar IPC RO a depășit-o sistematic). Alocare A: 60% BET-TR / 40% titluri de stat RON. Alocare B: 40% BET-TR / 35% acțiuni globale (cu hedge FX natural) / 25% titluri de stat.
Logica rezultatelor (calibrată pe σ_RO ridicat și fat tails — rulează tu cifrele exacte pe datele tale):
- Alocarea A are σ de portofoliu mai mare și e expusă 100% riscului local. Failure rate-ul tinde să fie mai mare exact din cauza concentrării pe BET și a corelației interne dintre emitenții grei (bănci + energie). Sequence risk-ul lovește brutal dacă crash-ul local vine în primii 3 ani.
- Alocarea B, prin componenta globală denominată în valută, beneficiază de cuplajul EUR-RON: într-o criză locală cu depreciere a leului, valoarea în RON a activelor externe urcă, atenuând drawdown-ul total. Failure rate-ul tinde să fie mai mic chiar dacă μ brut e similar, fiindcă diversificarea pe factorul FX reduce varianța în RON.
Lecția cantitativă: pe piața românească, componenta valutară a unui portofoliu global nu e un risc, ci un stabilizator pentru un rentier care cheltuiește în lei — invers față de intuiția standard. Iar un calculator FIRE care nu modelează FX nu poate vedea acest efect deloc.
Pasul 6 — Validarea: backtesting împotriva istoriei reale
Un model nevalidat e ficțiune frumoasă. Fă trei teste:
- Historical SWR (rolling cohorts). Rulează planul pe ferestre istorice reale suprapuse (cohorta care iese la FIRE în 2000, 2007, 2008, 2020 etc.) și vezi câte ar fi supraviețuit efectiv. Aici descoperi că cohorta de FIRE din vârful 2007 a luat un −70% pe BET în 2008 — testul suprem de sequence risk pe date românești adevărate.
- Coerența metodelor. Compară failure rate parametric (Cholesky + t) vs block bootstrap. Diferența = riscul tău de model.
- Sensibilitate (tornado). Variază pe rând σ_RO, corelația de criză, driftul FX, inflația, rata de retragere — și vezi care parametru mișcă cel mai mult failure rate-ul. Aproape întotdeauna câștigătorii sunt: rata de retragere și corelația condiționată de criză. Acolo îți concentrezi marja de siguranță.
Edge-cases pe care un model naiv le ratează
- Impozitarea retragerilor. În RO 2026, câștigurile de capital realizate prin broker rezident (reținute la sursă) se impozitează cu 3% pentru deținere > 1 an și 6% pentru deținere < 1 an; prin broker străin (fără reținere la sursă) cota este 16% pe câștigul net anual, autodeclarat în Declarația Unică; dividendele au impozit propriu de 16% (2026). La acestea se adaugă CASS 10% calculat pe trepte (6/12/24 salarii minime — la salariu minim 4.050 lei, plafoanele sunt 24.300 / 48.600 / 97.200 lei/an). Retragerea ta brută necesară e mai mare decât cea netă cheltuită — injectează cota fiscală efectivă (impozit + CASS marginal) în C_t, altfel subestimezi presiunea pe portofoliu.
- Lichiditatea BET. În stres, spread-urile pe emitenții mici BVB se lărgesc; vânzarea forțată într-un crash are slippage real, neglijat de orice model de preț de închidere.
- Riscul de concentrare al indicelui. BET nu e „piața” într-un sens larg — e câțiva emitenți grei. Un șoc idiosincratic pe o bancă majoră sau pe energie mută indicele mai mult decât ar sugera σ agregat.
- Inflația corelată negativ cu randamentele reale. Dacă modelezi inflația independent de piață, ratezi cel mai toxic scenariu: inflație mare + piață în scădere simultan (stagflație), care mănâncă portofoliul din ambele capete.
Checklist de implementare — de la zero la failure rate raportabil
- 1. Adună seria BET (1997+) și BET-TR (2014+) din datele BVB; calculează randamente log lunare.
- 2. Reconstruiește total-return pre-2014 adăugând dividend yield istoric, marcat ca estimat.
- 3. Estimează μ, σ, asimetria, kurtoza — cu interval de încredere prin bootstrap.
- 4. Modelează EUR-RON ca drift + jump (sau regime-switching), NU random walk simetric.
- 5. Construiește matricea de covarianță multi-activ cu corelație condiționată de regim (calm vs criză).
- 6. Implementează DOUĂ motoare: parametric (Cholesky + copulă t) și stationary block bootstrap.
- 7. Rulează 10.000 de iterații cu retrageri lunare, inflație simulată corelată și parameter uncertainty per rulare.
- 8. Adaugă regula de retragere reală (guardrails), nu doar 4% rigid.
- 9. Validează prin rolling historical cohorts (inclusiv ieșirea din 2007) și prin coerența celor două motoare.
- 10. Raportează failure rate cu bandă de incertitudine + tornado de sensibilitate, nu un singur procent „precis”.
Dacă faci toți cei zece pași, ai trecut de la un calculator FIRE de import — care îți minte cu volatilitatea altei piețe — la un model calibrat pe realitatea ta în lei: BET concentrat și volatil, leu administrat care se depreciază în trepte, și o componentă globală care, prin cursul EUR-RON, devine paradoxal cel mai bun stabilizator al planului tău de independență financiară.