Delta ist nicht konstant
Eine Delta-Absicherung ist nur für einen Augenblick exakt. Sobald sich die Aktie bewegt, ändert sich das Delta der Option und die Absicherung stimmt nicht mehr. Gamma ist die Änderungsrate des Deltas mit der Aktie: Gamma = d(Delta)/dS, die zweite Ableitung des Preises. Ein Long-Call oder -Put hat positives Gamma. In Black-Scholes ist es pdf(d1) / (S * sigma * sqrt(T)), für Calls und Puts gleich, wobei pdf die Dichte der Glocke ist. Ein hohes Gamma bedeutet, dass die Absicherung schnell veraltet und oft angepasst werden muss.
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 gamma(spot, strike, rate, sigma, t):
return norm_pdf(d1(spot, strike, rate, sigma, t)) / (spot * sigma * math.sqrt(t))
for spot in (80, 90, 100, 110, 120):
print(spot, round(gamma(spot, 100, 0.05, 0.2, 1), 5))
# 80 0.0186
# 90 0.02182
# 100 0.01876
# 110 0.01289
# 120 0.0075 gamma peaks near the strike and fades far from itGamma wächst vor Verfall
Bei einer At-the-money-Option steigt Gamma vor Verfall stark an: 0,019 mit einem Jahr Restlaufzeit, 0,039 mit drei Monaten, 0,141 mit einer Woche. Kurz vor Verfall ist die Option fast ein Münzwurf zwischen wertlos und dem vollen Wert der Bewegung, sodass Delta in einem winzigen Preisbereich von 0 auf 1 springt. Deshalb schlafen Händler, die kurz vor Verfall Optionen verkauft haben (Short Gamma), schlecht: Die Absicherung braucht ständige Anpassung, und ein Sprung schmerzt. Gamma lässt sich für jedes Modell auch über die zweite Differenz (f(S + h) - 2 f(S) + f(S - h)) / h² schätzen, exakt für eine Parabel.
for t in (1, 0.25, 0.02):
print(t, round(gamma(100, 100, 0.05, 0.2, t), 5))
# 1 0.01876
# 0.25 0.03929
# 0.02 0.14087 a week before expiry the at-the-money gamma is 7 times larger
def numerical_gamma(price_function, spot, bump):
return (price_function(spot + bump) - 2 * price_function(spot) + price_function(spot - bump)) / bump ** 2
price = lambda s: bs_call(s, 100, 0.05, 0.2, 1) # bs_call as in the previous topic
print(round(numerical_gamma(price, 100, 0.5), 5)) # 0.01876 the same as the formulaWas Gamma einbringt
Weil sich Delta mit der Aktie ändert, gewinnt eine Long-Option mehr, als Delta allein vorhersagt, in welche Richtung sich die Aktie auch bewegt. Ein Anstieg um 5 $ hebt Delta von 0,637 auf 0,637 + 0,01876 * 5 = 0,731. Der Gewinn einer Bewegung ist Delta * Bewegung + 0,5 * Gamma * Bewegung²: Der zweite Term ist der Gamma-Gewinn einer Long-Option (ein Verlust bei einer Short-Option). Er wächst mit dem Quadrat der Bewegung, große Bewegungen in beide Richtungen begünstigen also die Long-Gamma-Seite. Dieser Gewinn ist nicht gratis: Der Inhaber bezahlt ihn über die Prämie und den Zeitwertverfall.
g = gamma(100, 100, 0.05, 0.2, 1)
delta = call_delta(100, 100, 0.05, 0.2, 1) # as in the delta topic
print(round(delta, 4), round(delta + g * 5, 4)) # 0.6368 0.7306 the delta after a $5 rise
print(round(call_delta(105, 100, 0.05, 0.2, 1), 4)) # 0.7237 the exact delta at 105 (gamma is a first-order guide)
move = 5
true_gain = bs_call(105, 100, 0.05, 0.2, 1) - bs_call(100, 100, 0.05, 0.2, 1)
print(round(true_gain - delta * move, 4), round(0.5 * g * move ** 2, 4)) # 0.2232 0.2345 what delta missed, and what gamma explains# Dollar gamma: how many dollars of stock the delta hedge changes for a 1% move of the stock at 100
print(round(g * 100 ** 2 / 100, 3)) # 1.876- Gamma =
pdf(d1) / (S * sigma * sqrt(T)), zweite Ableitung des Preises; für Calls und Puts gleich, am größten nahe Strike und Verfall. - Numerisches Gamma
(f(S + h) - 2 f(S) + f(S - h)) / h²; Delta nach einer BewegungDelta + Gamma * Bewegung. - Eine Bewegung bringt
Delta * Bewegung + 0,5 * Gamma * Bewegung²: Eine Long-Option gewinnt bei großen Bewegungen in beide Richtungen und bezahlt das mit Zeitwertverfall.
Als Nächstes: Vega, die Sensitivität zur Volatilität, der Input, den niemand direkt beobachten kann.
Lab: Was bewertet wird
- Mit
gammamessen, wie schnell sich Delta ändert25 Pkt. - Mit
numerical_gammadie Krümmung jedes Preises messen25 Pkt. - Mit
delta_after_movedas Delta nach einer Bewegung aktualisieren25 Pkt. - Mit
gamma_pnlden Nutzen der Krümmung beziffern25 Pkt.