Cette page a été traduite automatiquement. La version anglaise fait référence. Lire en anglais
Aller au contenu principal

SANOS à partir de zéro

1/5

Les modèles paramétriques ont un biais de forme

Tout modèle paramétrique — SVI, SABR, ajustements polynomiaux — commence par choisir une famille de formules. Cette famille détermine les formes possibles avant même de regarder une seule cotation de marché.

SVI possède cinq paramètres. Cela lui donne cinq degrés de liberté pour reproduire le smile du marché. Pour des marchés liquides et bien réguliers, cinq suffisent généralement. Le smile est lisse, vaguement parabolique, et SVI le capture parfaitement.

Mais les marchés ne sont pas toujours réguliers. Une publication de résultats, un exploit de protocole, une annonce réglementaire — cela peut produire des bosses localisées de volatilité implicite à des strikes précis. Une courbe à cinq paramètres ne peut pas développer une bosse à K=90 tout en restant plate ailleurs. Elle devrait déformer toute la courbe pour accommoder une seule caractéristique locale.

SANOS adopte l'approche inverse. Au lieu de choisir une famille de formules, il place une valeur à chaque nœud d'une grille et laisse les données décider de la forme de la surface. Les seules exigences : elle doit être lisse, sans arbitrage, et respecter les cotations bid/ask observées.

SVI, c'est comme ajuster une règle-gabarit flexible à un ensemble de points — la règle peut se courber, mais pas former de cassure. SANOS, c'est comme poser un maillage souple sur les points, où chaque intersection peut bouger indépendamment. Le maillage peut capturer des détails locaux que la règle ne peut pas.

La grille remplace la formule

Dans SANOS, la surface de volatilité est définie par une grille de nœuds : une valeur à chaque intersection (strike, échéance). 9 strikes et 5 échéances donnent 45 variables libres. Passez à 20 strikes et 5 échéances et vous en avez 100.

Chaque nœud contient une valeur de variance totale (ou, de façon équivalente, une volatilité implicite). La surface entre les nœuds est interpolée. La différence clé avec les modèles paramétriques : aucune formule ne relie ces valeurs entre elles. Chaque nœud est une variable libre, contrainte uniquement par l'absence d'arbitrage et le lissage.

Ci-dessous, la grille montre les valeurs de volatilité implicite selon les strikes et les échéances. Notez la bosse localisée près de K=90, T=0.25 — le genre de caractéristique qu'un modèle paramétrique manquerait. Le panneau de droite montre le smile à une échéance sélectionnée, avec le meilleur ajustement SVI superposé pour comparaison.

Grille de nœuds vs ajustement paramétrique
15%
55%Cliquez sur les cellules pour ajuster la vol
Smile à T=0.25y
Nœuds : 45Paramètres SVI : 5

Cliquez sur une cellule pour ajuster sa volatilité. Observez comment le smile SANOS (vert) s'écarte de SVI (jaune pointillé) partout où la grille capture une structure locale. SVI est forcé de rester lisse globalement ; la grille peut suivre les données point par point.

Degrés de liberté
SVI: 5 params per expiry smooth, global shape
SANOS: N_K × N_T nodes local flexibility
Plus de paramètres signifie plus de flexibilité, mais aussi plus de risque de surajustement. SANOS contrôle ce risque par des contraintes de non-arbitrage et des pénalités de lissage, et non en limitant le nombre de paramètres.

Le non-arbitrage sous forme de contraintes linéaires

Avec 100 variables libres, il faut des garde-fous. SANOS les obtient des conditions statiques de non-arbitrage, exprimées comme des inégalités linéaires sur les valeurs de la grille.

Deux contraintes clés :

Contrainte de calendar spread. La variance totale (w = σ^2 × T) doit être non décroissante en T pour chaque strike. Si elle diminuait, vous pourriez vendre une option à échéance courte et acheter une option à échéance plus longue au même strike pour un profit sans risque. Sur la grille, cela signifie que chaque colonne doit croître de haut en bas.

Contrainte de butterfly spread. Les prix des calls doivent être convexes en strike à chaque échéance. De façon équivalente, la différence seconde de la variance totale entre strikes adjacents doit être non négative. Cela empêche une densité de probabilité négative — une impossibilité physique.

Contraintes de non-arbitrage sur une grille 3x3
K=90
K=100
K=110
T=0.25
4.5w=0.045
3.5w=0.035
5.0w=0.050
T=0.5
8.5w=0.085
7.0w=0.070
9.0w=0.090
T=1
16.0w=0.160
13.5w=0.135
17.0w=0.170
Calendrier : la variance totale augmente avec T
Butterfly : convexité en K pour chaque T
Positivité : toutes les valeurs > 0
Les valeurs représentent la variance totale (w = σ^2 × T). Cliquez pour augmenter, clic droit pour diminuer.
Essayez de faire violer une contrainte à une cellule. La grille revient à son état initial car SANOS impose ces conditions comme des inégalités strictes.

Les deux contraintes sont linéaires dans les valeurs de la grille. Calendaire : w(K, T_2) w(K, T_1) for T_2 > T_1. Butterfly: w(K-1, T) - 2·w(K, T) + w(K+1, T) 0. Aucun terme non linéaire, aucun couplage compliqué. Juste des inégalités que vous pouvez confier à un solveur linéaire.

C'est l'avantage profond de travailler en variance totale sur une grille : les conditions de non-arbitrage qui seraient non linéaires en volatilité implicite deviennent linéaires en variance totale. Tout le problème de construction de la surface reste dans le domaine de la programmation linéaire.

La programmation linéaire trouve la réponse

Rassemblez toutes les pièces : les valeurs des nœuds comme inconnues, les bornes bid/ask comme contraintes de boîte, le non-arbitrage comme inégalités linéaires, le lissage comme objectif. Le tout est un programme linéaire.

Un programme linéaire a une propriété cruciale : pas de minima locaux. La région admissible est un polytope convexe, et l'optimum se trouve toujours à un sommet. Contrairement à la calibration SVI (non linéaire, qui peut rester bloquée dans des minima locaux selon l'initialisation), le programme linéaire trouve toujours l'optimum global.

Les cotations bid/ask définissent des contraintes de boîte : à chaque strike observé, la variance totale doit se situer entre les valeurs implicites du bid et de l'ask. Plus le spread est serré, plus la boîte est petite. Plus le spread est large, plus SANOS a de liberté pour trouver une surface lisse et sans arbitrage.

Région admissible du LP
Actives : 0/8
Aucune contrainte pour l'instant. Cliquez sur "+ Ajouter une contrainte" pour réduire la région admissible.

Observez la région admissible (verte) se rétrécir à mesure que les contraintes s'ajoutent. Positivité, calendar, butterfly et bid/ask — chacune élimine des surfaces impossibles. La solution du programme linéaire (point jaune) se trouve à un sommet du polytope final. Ce sommet est garanti être la surface sans arbitrage la plus lisse compatible avec toutes les données.

La formulation en programme linéaire
minimise |second differences| (smoothness)
subject to: bid_i w_i ask_i (data)
w(K, T_2) w(K, T_1) (calendar)
w(K-1) - 2w(K) + w(K+1) 0 (butterfly)
Chaque contrainte est linéaire. L'objectif est linéaire (norme L1 sur les différences secondes). Les solveurs LP standard traitent cela en quelques millisecondes, même pour de grandes grilles.

Quand SANOS gagne et quand il perd

SANOS n'est pas universellement meilleur que les modèles paramétriques. Il a un domaine de prédilection précis, et savoir quand l'utiliser importe plus que savoir comment il fonctionne.

SANOS gagne quand :

Données rares. Quand vous avez 5 cotations et qu'il vous faut une surface complète, les modèles paramétriques peinent car il n'y a pas assez de points pour déterminer les paramètres. SANOS peut construire une surface à partir de données rares car les contraintes de non-arbitrage apportent elles-mêmes de l'information — elles réduisent l'ensemble admissible même sans cotations de marché.

Spreads bid/ask larges. Les ajustements paramétriques sur les prix mid peuvent produire des surfaces sans arbitrage situées hors du bid/ask. SANOS traite le spread comme une information, pas comme du bruit. Plus le spread est large, plus il y a de liberté pour trouver une surface lisse et sans arbitrage.

Caractéristiques locales. Bosses de volatilité liées à des événements, cassures dues à du positionnement concentré, effets propres à une échéance. Toute structure qu'une formule à cinq paramètres ne peut pas exprimer.

Ajustement bid-ask : prix moyen vs SANOS
Spread :12%
Fourchette bid-askAjustement au prix moyenAjustement SANOS

Élargissez le curseur de spread et observez l'ajustement SANOS (vert) s'écarter du mid (orange pointillé). Les deux passent par les barres bid/ask, mais SANOS utilise la liberté supplémentaire pour rester plus lisse. Quand les spreads sont serrés, les deux ajustements convergent.

SANOS perd quand :

Pas d'interprétation dynamique. Les paramètres SVI (a, b, rho, m, sigma) ont des significations économiques : variance globale, ampleur du skew, corrélation, déplacement. Les nœuds SANOS ne sont que des nombres sur une grille. Vous perdez la capacité de dire « le skew a augmenté de 0.02 » — vous ne pouvez que dire « ces 20 nœuds ont bougé ».

Stockage et communication. Une surface SVI, c'est 5 nombres par échéance — trivialement stockable et transmissible. Une surface SANOS, ce sont des centaines de valeurs de nœuds. Pour les bases de données, les caches et les protocoles réseau, cela compte.

Historique éprouvé. SVI est utilisé depuis plus de 20 ans. SANOS est plus récent. Dans les systèmes de production où la fiabilité et la familiarité des équipes comptent, c'est un coût réel.

Le schéma pratique : utilisez SANOS pour l'ajustement et la valorisation (où la précision locale compte), utilisez SVI pour le stockage et la communication (où la compacité compte). Ils se complètent.

Pour aller plus loin :

Paramétrisation SVI — le modèle paramétrique que SANOS est conçu pour compléter

Modèle SABR — un modèle à volatilité stochastique avec interprétation dynamique

La volatilité locale depuis zéro — comment la surface de volatilité locale est extraite de la volatilité implicite

Méthodes d'interpolation — comparaison de toutes les méthodes