Formules

Retour méthodologie

Documentation exhaustive des formules et calculs

Méthodologie quantitative de Kronos TVM

Ce document recense l'intégralité des formules mathématiques et financières utilisées par le moteur de calcul de Kronos TVM. Chaque formule est documentée avec ses variables, sa justification, sa source académique et l'emplacement de son implémentation dans le code source.

41formules documentées
7sections
20+sources académiques
Télécharger en format Word (.docx)

1. Performance & rendement

Mesurer le gain réel d'un actif ou d'un portefeuille, en tenant compte du temps et des devises.

Plus-value absolue

PV = (P_actuel − PRU) × Q

Variables

P_actuel
Prix de marché actuel par unité
PRU
Prix de revient unitaire (coût moyen pondéré d'achat)
Q
Quantité (parts/coins) détenue

Gain ou perte en euros sur une position. Base de tous les calculs de P&L.

Source : AMF — Guide de l'investisseur en bourse.

lib/pnl.ts

Plus-value relative (%)

PV(%) = (P_actuel / PRU − 1) × 100

Variables

P_actuel
Prix de marché actuel
PRU
Prix de revient unitaire

Rendement total réalisé sur la position, indépendant de la taille.

Source : Investopedia — Total Return.

lib/pnl.ts

P&L currency-aware

PV(€) = (P_actuel × FX_actuel − PRU × FX_achat) × Q

Variables

FX_actuel
Taux de change devise native → EUR aujourd'hui
FX_achat
Taux de change au moment de l'achat (PRU)
Q
Quantité

Décompose la performance en effet marché vs effet change. Pour un actif USD acheté quand l'EUR/USD valait 0.95 puis vendu à 0.90, le change apporte un alpha indépendant du prix.

Source : CFA Institute — Currency Management for Investors.

lib/pnl.ts

CAGR (Compound Annual Growth Rate)

CAGR = (V_final / V_initial)^(1/n) − 1

Variables

V_final
Valeur finale du portefeuille
V_initial
Valeur initiale (ou capital investi)
n
Nombre d'années

Taux de croissance annuel équivalent. Lisse la performance multi-années pour pouvoir comparer entre périodes de longueurs différentes.

Source : Bogleheads Wiki — CAGR.

lib/backtest.ts

CAGR DCA (approximation IRR)

CAGR_DCA ≈ (V_final / (Σ V_invested / 2))^(1/n) − 1

Variables

V_final
Valeur finale après n années de DCA
Σ V_invested
Somme totale investie
n
Années de versements

Le CAGR classique sur-estime la performance d'un DCA car il suppose tout le capital investi dès t=0. Pour des versements linéaires, le capital moyen ≈ total/2. C'est une approximation pragmatique de l'IRR.

Source : Pour la vraie IRR : Microsoft Excel XIRR / Newton-Raphson.

lib/backtest.ts

Rendement en dividendes

Yield = (Dividende_annuel / Prix_actuel) × 100

Variables

Dividende_annuel
Dividende versé par action sur 12 mois glissants
Prix_actuel
Cours de l'action

Seul indicateur fiable pour comparer la rémunération entre actions/ETF de prix différents.

Source : AMF — Glossaire boursier.

lib/constants.ts (TYPE_YIELD)

2. Risque

Quantifier la volatilité et l'exposition aux pertes — la moitié manquante du couple rendement/risque.

Volatilité annualisée

σ_ann = σ_quotidien × √252

Variables

σ_quotidien
Écart-type des rendements quotidiens
252
Jours de bourse moyens par an (FR + US)

Standard du marché. Permet de comparer la dispersion attendue entre actifs en base annuelle. Hypothèse : rendements iid (loi normale stationnaire) — réaliste sur horizon ≥ 1 an.

Source : Hull, J. (2018). Options, Futures and Other Derivatives, ch. 15.

lib/constants.ts (TYPE_VOL), lib/backtest.ts

Volatilité de portefeuille (matrice de covariance)

σ_p = √( Σᵢ Σⱼ wᵢ wⱼ σᵢ σⱼ ρᵢⱼ )

Variables

wᵢ, wⱼ
Poids des positions i et j (somme = 1)
σᵢ, σⱼ
Volatilités individuelles annualisées
ρᵢⱼ
Corrélation entre les rendements de i et j

Formule de Markowitz qui prend en compte la diversification réelle. Beaucoup d'apps font la moyenne pondérée naïve (qui assume ρ=1 partout) et sur-estiment le risque de 30 à 50 %.

Source : Markowitz, H. (1952). Portfolio Selection, JoF 7(1).

lib/constants.ts → computePortfolioVol()

Bêta — régression OLS log-returns

β = Cov(r_actif, r_marché) / Var(r_marché)

Variables

r_actif
Log-rendements hebdomadaires de l'actif
r_marché
Log-rendements hebdomadaires du benchmark (MSCI World par défaut)

Mesure la sensibilité de l'actif aux mouvements du marché. β=1 = même volatilité que le marché, β=2 = 2× plus volatil. Utilise les log-returns pour additivité temporelle et meilleure normalité.

Source : Sharpe, W.F. (1964). Capital Asset Prices. JoF 19(3). Fenêtre 52 semaines (standard académique).

lib/computeBeta.ts

R² du bêta

R² = 1 − SSR / SST

Variables

SSR
Somme des résidus au carré (variance non expliquée)
SST
Variance totale de l'actif

Mesure la qualité de la régression β. R²>0.7 = bêta fiable (actif fortement corrélé au marché). R²<0.3 = β peu significatif (actif idiosyncratique, ex : small cap).

Source : Hayashi, F. (2000). Econometrics, ch. 1.

lib/computeBeta.ts → betaQuality()

Alpha de Jensen (annualisé)

α = (r̄_actif − r_f) − β × (r̄_marché − r_f)

Variables

r̄_actif
Rendement moyen annualisé de l'actif
r̄_marché
Rendement moyen annualisé du marché
r_f
Taux sans risque (OAT 10 ans = 3 %)

Surperformance NON expliquée par l'exposition au marché. α > 0 = vraie compétence du gérant (rare).

Source : Jensen, M.C. (1968). The Performance of Mutual Funds.

lib/computeBeta.ts

Ratio de Sharpe

Sharpe = (r̄_p − r_f) / σ_p

Variables

r̄_p
Rendement moyen annualisé du portefeuille
r_f
Taux sans risque (OAT 10Y = 3 %)
σ_p
Volatilité annualisée du portefeuille

Mesure le rendement excédentaire par unité de risque pris. >1 = correct, >2 = excellent, négatif = sous-performe le sans-risque.

Source : Sharpe, W.F. (1966). Mutual Fund Performance. JoB 39(1).

lib/signals.ts, lib/backtest.ts

VaR 95% paramétrique

VaR₉₅ = μ − 1.645 × σ

Variables

μ
Rendement moyen attendu (sur l'horizon)
σ
Volatilité sur l'horizon
1.645
Z-score du quantile 5 % (loi normale)

Perte maximum attendue dans 95 % des cas sur l'horizon choisi. Standard Bâle II/III. Limitation : suppose une loi normale (sous-estime les queues fat tail des crises).

Source : Jorion, P. (2007). Value at Risk, ch. 5.

app/(app)/portfolio/page.tsx (computeMetrics)

Drawdown maximal

DD(t) = (V(t) − Peak(t)) / Peak(t),   MaxDD = min_t DD(t)

Variables

V(t)
Valeur du portefeuille à l'instant t
Peak(t)
Plus haut historique atteint jusqu'à t

Pire perte traversée depuis le plus haut, exprimée en %. Mesure de risque émotionnellement parlante : peut-on tenir un -50 % sans capituler ?

Source : Magdon-Ismail & Atiya (2004). Maximum Drawdown.

lib/backtest.ts

Z-score (mean-reversion)

Z = (P&L_réalisé − μ) / σ_annuelle

Variables

P&L_réalisé
Plus-value % depuis l'achat
μ
Rendement attendu de la classe d'actif
σ_annuelle
Volatilité annualisée de la classe

Exprime la sur/sous-valorisation en unités d'écart-type. Z < -1.5 = actif "bon marché" historiquement (oversold), Z > +1.5 = "cher" (overbought).

Source : Bouchaud, J-P. (2003). Theory of Financial Risk and Derivative Pricing.

lib/signals.ts → computeSignal()

3. Allocation & optimisation

Comment répartir le capital entre actifs pour maximiser le rendement à risque donné.

Frontière efficiente (Markowitz)

min  ½ wᵀ Σ w    s.t.   wᵀ μ = r_cible,   Σw = 1,   w ≥ 0

Variables

w
Vecteur des poids du portefeuille
Σ
Matrice de covariance des rendements
μ
Vecteur des rendements attendus
r_cible
Rendement visé (paramètre)

Pour chaque rendement cible, trouve le portefeuille de variance minimale. L'ensemble forme la frontière efficiente (hyperbole dans le plan risque/rendement).

Source : Markowitz, H. (1952). Portfolio Selection, JoF 7(1).

app/(app)/portfolio/optimisation/page.tsx

Portefeuille tangent (max Sharpe)

argmax_w   (wᵀ μ − r_f) / √(wᵀ Σ w)

Variables

w
Poids cherchés
μ
Rendements attendus
Σ
Covariances
r_f
Taux sans risque

Point de tangence entre la droite issue de r_f et la frontière efficiente. Maximise le ratio de Sharpe — c'est le portefeuille théoriquement optimal pour un investisseur rationnel.

Source : Tobin, J. (1958). Liquidity Preference. RES 25(2).

app/(app)/portfolio/optimisation/page.tsx

Portefeuille à variance minimale

w_MV = Σ⁻¹ · 1 / (1ᵀ Σ⁻¹ 1)

Variables

Σ⁻¹
Inverse de la matrice de covariance
1
Vecteur de 1

Point le plus à gauche de la frontière. Allocation qui minimise la volatilité totale sans contrainte de rendement. Bien quand on cherche juste à dormir tranquille.

Source : Merton, R.C. (1972). An Analytical Derivation of the Efficient Portfolio Frontier.

app/(app)/portfolio/optimisation/page.tsx

HHI — Herfindahl-Hirschman Index (concentration)

HHI = Σᵢ wᵢ²  × 10 000

Variables

wᵢ
Poids de la position i (en fraction, pas en %)

Mesure la concentration. HHI = 10 000 = 1 seule position (mono-actif). HHI < 1500 = portefeuille bien diversifié. Utilisé en antitrust (DOJ US) puis adopté en gestion.

Source : Hirschman, A.O. (1945). Originellement antitrust.

lib/healthScore.ts, app/(app)/page.tsx

CAPM / Security Market Line

E[r_i] = r_f + β_i × (E[r_m] − r_f)

Variables

E[r_i]
Rendement attendu de l'actif i
r_f
Taux sans risque
β_i
Bêta de l'actif vs marché
E[r_m]
Rendement attendu du marché (≈ 8 % long terme)

Modèle d'équilibre : un actif au-dessus de la SML est sous-évalué (rendement > ce que justifie son risque systématique), en-dessous il est sur-évalué.

Source : Sharpe-Lintner (1964-65). CAPM.

app/(app)/portfolio/optimisation/page.tsx (onglet SML)

Corrélation pairwise par classe

ρ(classe_A, classe_B) ∈ TYPE_CORR

Variables

TYPE_CORR
Table de corrélations empiriques 20 ans (ex : ETF–Obligation = -0.10)

Approximation par classe d'actif quand on n'a pas l'historique commun complet. Sources : BCE, Bloomberg PORT, papers académiques sur cross-asset correlations.

Source : Asness, Moskowitz, Pedersen (2013). Value and Momentum Everywhere. JoF 68(3).

lib/constants.ts → TYPE_CORR / getTypePairCorr()

4. Sizing & signaux

Comment dimensionner les positions et déterminer s'il faut renforcer, alléger ou conserver.

½ Kelly (sizing optimal)

f* = ½ × (E[r] − r_f) / σ²

Variables

E[r]
Rendement attendu fondamental de la classe (pas le P&L réalisé)
r_f
Taux sans risque
σ
Volatilité annualisée

Taille de position qui maximise la croissance géométrique du capital long terme. Pleine Kelly = trop volatile, on prend la moitié pour réduire la variance et l'inconfort psychologique. Plafonné à 25 % par position.

Source : Kelly, J.L. (1956). A New Interpretation of Information Rate. Bell System TJ.

lib/signals.ts → computeSignal()

SMA — Simple Moving Average

SMA(n) = (P_{t} + P_{t-1} + … + P_{t-n+1}) / n

Variables

P_t
Prix de clôture à l'instant t
n
Période (typiquement 50 ou 200 jours)

Lisse les fluctuations courtes pour faire émerger une tendance. SMA50 vs SMA200 est LA référence pour identifier les retournements de tendance long terme.

Source : Murphy, J.J. (1999). Technical Analysis of the Financial Markets.

lib/technicalIndicators.ts → sma()

EMA — Exponential Moving Average

EMA(t) = α × P_t + (1−α) × EMA(t−1),   α = 2 / (n+1)

Variables

α
Coefficient de lissage
n
Période

Pondère davantage les prix récents. Plus réactive que la SMA aux retournements — utilisée comme brique de base du MACD.

Source : Appel, G. (2005). Technical Analysis: Power Tools for Active Investors.

lib/technicalIndicators.ts → ema()

RSI — Relative Strength Index (Wilder 1978)

RSI = 100 − 100 / (1 + RS),   RS = moyenne_hausses / moyenne_baisses (sur 14 jours)

Variables

RS
Relative Strength
14
Période standard (Wilder)

Oscillateur borné [0–100]. >70 = suracheté (potentiel pullback), <30 = survendu (potentiel rebond). N'a de sens qu'en marché latéral.

Source : Wilder, J.W. (1978). New Concepts in Technical Trading Systems.

lib/technicalIndicators.ts → rsi()

MACD — Moving Average Convergence Divergence

MACD = EMA(12) − EMA(26),   Signal = EMA(9, MACD),   Histogramme = MACD − Signal

Variables

EMA(n)
EMA sur n jours

Mesure le momentum (différence entre court et moyen terme). Histogramme positif = haussier, croisement à la hausse de la ligne signal = signal d'achat. Inversement à la baisse.

Source : Appel, G. (1979). Création originelle.

lib/technicalIndicators.ts → macd()

Bandes de Bollinger

Bande_haute = SMA(20) + 2σ_20,    Bande_basse = SMA(20) − 2σ_20

Variables

SMA(20)
Moyenne mobile 20 jours
σ_20
Écart-type 20 jours

Enveloppes statistiques. ~95 % des prix restent dedans (loi normale). Cours qui touche la bande haute = sur-extension (potentiel retour à la moyenne), pareil en bas.

Source : Bollinger, J. (1980). Création originelle.

lib/technicalIndicators.ts → bollinger()

Golden Cross / Death Cross

Golden Cross : SMA(50) > SMA(200) ET SMA(50) précédente < SMA(200) précédente

Variables

SMA(50)
Moyenne mobile 50 jours (court terme)
SMA(200)
Moyenne mobile 200 jours (long terme)

Signal de retournement de tendance majeur. Golden Cross = passage en tendance haussière long terme (rare, ~1×/an). Death Cross = inverse, baissier.

Source : Pratique de marché — non académique mais largement suivi.

lib/technicalIndicators.ts → interpret()

Score composite de recommandation

Score = 50 + Sharpe×10 + KellyGap×0.8 + Oversold(+15) + Overbought(−15), bornes [0,100]

Variables

Sharpe
Sharpe réalisé sur la position
KellyGap
Différence entre poids actuel et poids Kelly optimal
Oversold
Bonus si Z < −1.5
Overbought
Malus si Z > +1.5

Score global [0-100] qui agrège momentum (Sharpe), sizing (Kelly) et mean-reversion (Z). 9 verdicts gradués évitent les signaux brutaux ACHETER/VENDRE.

Source : Inspiré des méthodologies CGP françaises (CIF, ACPR).

lib/signals.ts, lib/recommendations.ts

5. Planification patrimoniale

Projections long terme, simulateurs FIRE, immobilier, stress tests.

Intérêts composés avec apports périodiques

V(t) = V₀(1+r)^t + A × [(1+r)^t − 1]/r

Variables

V(t)
Valeur du capital à l'année t
V₀
Capital initial
A
Apport annuel (12 × mensualité)
r
Taux annuel attendu

Formule combinant capitalisation du capital initial + annuité constante. La "8e merveille du monde" selon Einstein.

Source : Mathématiques actuarielles classiques.

lib/financialCalc.ts → computeCompound()

Valeur réelle (corrigée inflation)

V_réelle(t) = V_nominale(t) / (1 + i)^t

Variables

V_nominale
Valeur en € nominaux
i
Taux d'inflation annuel (défaut 2 %)
t
Années écoulées

Le pouvoir d'achat compte plus que le chiffre nominal. 100 k€ dans 30 ans à 2 % d'inflation = ~55 k€ d'aujourd'hui.

Source : BCE — cible 2 % HICP. INSEE — séries longues.

lib/financialCalc.ts

Règle des 4 % (FIRE)

Capital_FIRE = Dépenses_annuelles / 0.04   (= 25 × dépenses)

Variables

Dépenses_annuelles
Train de vie annuel net souhaité
0.04
Safe Withdrawal Rate (Trinity Study)

Capital qui permet de vivre des intérêts indéfiniment avec 96 % de réussite sur 30 ans (étude historique S&P 500 + bonds 1926-1995).

Source : Bengen, W.P. (1994). Trinity Study, JoFP.

lib/financialCalc.ts → computeFire()

Capacité d'emprunt (norme HCSF)

Mensualité_max = 0.35 × Revenus_nets,   Durée_max = 25 ans (27 si neuf)

Variables

0.35
Taux d'effort maximal HCSF (déc. 2021)
Revenus_nets
Salaires + revenus locatifs × 70 %

Norme du Haut Conseil de Stabilité Financière, obligatoire pour les banques françaises depuis janvier 2022 (sauf 20 % de dérogation possible).

Source : HCSF — Décision n° D-HCSF-2021-7.

lib/financialCalc.ts → computeBorrowingCapacity()

Mensualité d'un emprunt amortissable

M = C × t / (1 − (1+t)^(−n))

Variables

C
Capital emprunté
t
Taux mensuel = TAEG/12
n
Nombre de mensualités (durée × 12)

Formule d'annuité constante. Mode amortissable = capital + intérêts dégressifs. Standard en immobilier résidentiel français.

Source : Code de la consommation — Art. R314-1.

lib/financialCalc.ts → computeMortgage()

Simulation DCA mensuelle

unités(t) = unités(t−1) + (A / Close(t)),   Valeur(t) = unités(t) × Close(t)

Variables

A
Apport mensuel constant
Close(t)
Cours de clôture du mois t

Dollar-Cost Averaging : on achète des fractions à intervalle régulier, le PRU effectif lisse les hauts et les bas. Réduit le timing risk mais ne le supprime pas.

Source : Constantinides, G. (1979). A Note on the Suboptimality of DCA.

lib/backtest.ts → simulateDCA()

Stress test historique

V_stressed = Σᵢ Vᵢ × (1 + choc_classe_i)

Variables

Vᵢ
Valeur actuelle de l'actif i
choc_classe_i
Chute observée pour cette classe (ex : actions -39 % en 2008)

Rejoue des chocs historiques (2008, COVID 2020, hausse taux 2022) sur le portefeuille actuel. Simple mais parlant — répond à "Combien je perdrais si X se reproduisait ?"

Source : EBA Stress Test methodology, simplifié.

lib/financialCalc.ts → STRESS_SCENARIOS, computeStressTest()

Score de santé patrimoniale

Score = Σⱼ poidsⱼ × scoreⱼ,   j ∈ { épargne, précaution, dette, diversification, allocation }

Variables

scoreⱼ
Sous-score [0-100] sur chaque dimension
poidsⱼ
Poids normalisé (somme = 1)

Diagnostic global inspiré AMF "Investir en bourse" + Bogleheads. 5 dimensions : taux d'épargne (>15 %), couverture précaution (3-6 mois), ratio dette/revenus (<35 % HCSF), HHI portefeuille, cohérence allocation/horizon.

Source : AMF — Plan d'action pour l'éducation financière 2023.

lib/healthScore.ts → computeHealthScore()

6. Qualité ETF & ESG

Notation des ETF (frais, encours, âge, méthode de réplication) et scoring extra-financier.

Score qualité ETF (composite 0-100)

Q = 30×Score_TER + 25×Score_AUM + 20×Score_âge + 15×Score_repl + 10×Score_tracking

Variables

Score_TER
100 si TER < 0.1 %, dégradé linéaire jusqu'à 0 à TER 1 %
Score_AUM
100 si AUM > 1 Mrd€, 50 si 100M-1 Mrd, 20 si < 100M (risque de fermeture)
Score_âge
100 si > 5 ans, dégradé sinon
Score_repl
Physique=100, swap-based=70
Score_tracking
100 si tracking error < 0.5 %/an

Identifie les ETF "qualité institutionnelle" : faibles frais, AUM solide, ancienneté qui garantit la liquidité. Décourage les ETF récents à faibles encours (risque de fermeture).

Source : Méthodologie inspirée de Morningstar Medalist Rating.

lib/etfQuality.ts → scoreETFQuality()

Score ESG composite (Sustainalytics + SFDR)

Score_ESG = Σ w_i × ESG_i,   w_i = poids de l'actif i dans le portefeuille

Variables

ESG_i
Risk score Sustainalytics (0 = négligeable, 40+ = sévère)
SFDR
Article 6 (pas d'objectif ESG), 8 (promotion ESG), 9 (objectif ESG)

Agrégation pondérée des scores ESG individuels. Permet d'évaluer l'exposition globale aux risques extra-financiers et de classifier le portefeuille selon SFDR.

Source : Sustainalytics ESG Risk Rating + Règlement SFDR (UE) 2019/2088.

lib/esgScore.ts → computePortfolioESG()

7. Devises & FX

Conversion multi-devises et détection automatique de la devise native d'un ticker.

Conversion FX

Montant_EUR = Montant_devise × Taux_devise→EUR

Variables

Taux_devise→EUR
Taux spot Yahoo Finance (EURUSD=X, EURGBP=X, etc.)

Conversion des montants étrangers vers EUR pour totaliser un patrimoine multi-devises. Utilise les taux spot Yahoo, mis en cache 5 min.

Source : Yahoo Finance / fallback BCE Reference Rates.

lib/pnl.ts, app/api/market/fx/route.ts

Détection automatique de la devise

currency = SUFFIX_MAP[ticker.suffix] ?? "USD"

Variables

SUFFIX_MAP
.PA→EUR, .L→GBP, .DE→EUR, .AS→EUR, .MI→EUR, .SW→CHF…

Heuristique sur le suffixe Yahoo pour deviner la devise native d'un ticker sans appel API supplémentaire. Couvre ~95 % des cas européens et US.

Source : Convention Yahoo Finance — Currency by Exchange.

lib/currencyDetect.ts

Aucune information de ce document ne constitue un conseil en investissement (Art. L.541-1 CMF). Données fournies à titre indicatif et pédagogique uniquement.

Aller plus loin

Méthodologie générale du projet (origine, décisions techniques, limites assumées)

Bogleheads Wiki — référence anglophone sur l\'investissement passif

AMF — Espace épargnants — cadre réglementaire français