L'entrée que personne ne peut observer
Dans la formule de Black–Scholes, le spot, le prix d'exercice, le taux et le temps sont connus. La volatilité ne l'est pas : c'est l'anticipation du marché sur les mouvements futurs, et elle change chaque jour. Le prix d'une option dépend donc fortement d'un nombre qu'il faut deviner, et la sensibilité à celui-ci, le véga, dC/dsigma, est souvent le plus grand risque d'un livre d'options. Dans Black–Scholes, il vaut S * pdf(d1) * sqrt(T), identique pour les calls et les puts, et positif : plus de volatilité rend toujours une option plus précieuse.
import math
def norm_pdf(x):
return math.exp(-0.5 * x * x) / math.sqrt(2 * math.pi)
def d1(spot, strike, rate, sigma, t):
return (math.log(spot / strike) + (rate + 0.5 * sigma ** 2) * t) / (sigma * math.sqrt(t))
def vega(spot, strike, rate, sigma, t):
return spot * norm_pdf(d1(spot, strike, rate, sigma, t)) * math.sqrt(t)
print(round(vega(100, 100, 0.05, 0.2, 1), 4)) # 37.524 per change of 1.00 in sigma (100 volatility points)
print(round(vega(100, 100, 0.05, 0.2, 1) / 100, 4)) # 0.3752 per volatility point: sigma from 20% to 21%Où le véga est maximal
Le véga est maximal pour les options à la monnaie, où le résultat est le plus incertain et où un surcroît de volatilité change le plus, et il s'estompe pour les options très dans ou hors de la monnaie (prix d'exercice 80 : 23,8 ; 100 : 37,5 ; 120 : 21,6). Contrairement au gamma, le véga croît avec la durée jusqu'à l'échéance : 19,6 à trois mois, 37,5 à un an, 62,5 à quatre ans, car une vie plus longue laisse plus de temps à la volatilité pour compter. Les options à longue échéance sont donc les plus exposées aux variations de volatilité, alors que les options à courte échéance le sont au gamma.
for strike in (80, 100, 120):
print("strike", strike, round(vega(100, strike, 0.05, 0.2, 1), 3))
# strike 80 23.806
# strike 100 37.524
# strike 120 21.601
for t in (0.25, 1, 4):
print("t", t, round(vega(100, 100, 0.05, 0.2, t), 3))
# t 0.25 19.644
# t 1 37.524
# t 4 62.451 vega grows with time to expiryLa mesurer, et l'utiliser
La volatilité se cote en points de pourcentage, donc les salles de risque citent le véga par point : vega / 100, la variation de prix quand la volatilité passe de 20 % à 21 %. Un saut de 10 points de volatilité, comme dans une panique de marché, déplace l'option à la monnaie d'environ 0,375 * 10 = 3,75, soit presque 36 % de son prix. Comme pour le delta et le gamma, on peut mesurer le véga de tout modèle en perturbant : valoriser avec sigma + h et sigma - h et prendre la différence centrée. L'estimation linéaire est légèrement fausse pour de grands mouvements, car le prix est aussi courbe en volatilité.
def bs_call(spot, strike, rate, sigma, t):
d_1 = d1(spot, strike, rate, sigma, t)
return spot * 0.5 * (1 + math.erf(d_1 / math.sqrt(2))) - strike * math.exp(-rate * t) * 0.5 * (1 + math.erf((d_1 - sigma * math.sqrt(t)) / math.sqrt(2)))
def numerical_vega(price_function, sigma, bump):
return (price_function(sigma + bump) - price_function(sigma - bump)) / (2 * bump)
price = lambda s: bs_call(100, 100, 0.05, s, 1)
print(round(numerical_vega(price, 0.2, 1e-4), 4)) # 37.524 the same as the formula
per_point = vega(100, 100, 0.05, 0.2, 1) / 100
print(round(per_point * 10, 3), round(price(0.30) - price(0.20), 3)) # 3.752 3.781 linear estimate vs exact, for +10 points# Vega of a put equals vega of a call: build the put price from parity and bump the volatility
put_price = lambda s: bs_call(100, 100, 0.05, s, 1) - 100 + 100 * math.exp(-0.05)
print(round(numerical_vega(put_price, 0.2, 1e-4), 4)) # 37.524 the same number as for the call- Véga =
S * pdf(d1) * sqrt(T): positif, identique pour calls et puts, maximal à la monnaie et croissant avec la durée. - Cotez-le par point de volatilité (
vega / 100) ; numériquement,(f(sigma + h) - f(sigma - h)) / (2h)marche pour tout modèle. - Variation du prix ~
vega_par_point * points: un saut de volatilité compte autant qu'un mouvement de l'action ; la volatilité implicite est la cotation du marché.
À suivre : thêta et rho, les sensibilités au temps et aux taux d'intérêt.
Lab : ce qui est noté
- Mesurer la sensibilité à la volatilité avec
vega25 pts - Exprimer le véga par point de volatilité avec
vega_per_point25 pts - Perturber la volatilité avec
numerical_vega25 pts - Prévoir l'effet d'un mouvement de volatilité avec
price_change_from_vol25 pts