ابتسامة في أربعة أرقام
تُتداول خيارات الفائدة والصرف عبر سعور تنفيذ كثيرة وتحتاج المكاتب إلى طريقة ناعمة واعية بالمراجحة لاستيفاء التقلبات المعلنة واستقرائها. وSABR (هاغان وكومار ولسنيفسكي ووودوارد 2002) هو المعيار في السوق. وهو ينمذج سعرًا آجلًا F بتقلب عشوائي خاص alpha: dF = alpha F^beta dW وd alpha = nu alpha dZ بارتباط rho بين الصدمتين. وتشكّل أربعة معاملات ابتسامة استحقاق واحد: alpha تضبط المستوى العام وbeta كيف يعتمد التقلب على مستوى السعر (0 عادي و1 لوغاريتمي) وrho الميل (الانحياز) وnu الانحناء (مقدار ارتفاع الأطراف).
# The four parameters of one expiry, for a rate forward of 3%
f, t = 0.03, 1.0 # forward rate and expiry in years
alpha, beta, rho, nu = 0.035, 0.5, -0.3, 0.4
print(round(alpha / f ** (1 - beta), 4)) # 0.2021 alpha / f^(1-beta) is roughly the at-the-money volatility (before the correction)صيغة هاغان
يعطي منشور هاغان المقارب التقلب الضمني لبلاك دون محاكاة. عند السعر (K = F) يساوي alpha / F^(1-beta) مضروبًا في تصحيح زمني 1 + (...) * T حيث يجمع القوس ثلاثة أثار: انحناء beta للعمود الفقري وحد الانحياز rho * nu وحد الابتسامة nu^2. وبعيدًا عن السعر يضرب التصحيح نفسه عاملين آخرين: مقام في لوغاريتم السعرية L = ln(F/K) والنسبة z / chi(z) حيث z = (nu/alpha) (FK)^((1-beta)/2) L وchi(z) = ln((sqrt(1 - 2 rho z + z^2) + z - rho) / (1 - rho)). وحين يقترب z من 0 تؤول النسبة إلى 1 فتلتحم الصيغة بقيمة السعر بسلاسة، لكن حساب 0 / 0 مباشرة سيفشل: عامل z الضئيل كنهاية.
# The pieces of Hagan's formula: the time correction, the at-the-money volatility and z / chi(z)
import math
def sabr_correction(f, k, t, alpha, beta, rho, nu):
fk = f * k
return 1 + ((1 - beta) ** 2 / 24 * alpha ** 2 / fk ** (1 - beta) + rho * beta * nu * alpha / (4 * fk ** ((1 - beta) / 2)) + (2 - 3 * rho ** 2) * nu ** 2 / 24) * t
def sabr_atm_vol(f, t, alpha, beta, rho, nu):
return alpha / f ** (1 - beta) * sabr_correction(f, f, t, alpha, beta, rho, nu)
def z_over_chi(z, rho):
if abs(z) < 1e-7:
return 1.0
return z / math.log((math.sqrt(1 - 2 * rho * z + z ** 2) + z - rho) / (1 - rho))
print(round(sabr_atm_vol(0.03, 1.0, 0.035, 0.5, -0.3, 0.4), 6)) # 0.203877 the at-the-money volatility
print(round(z_over_chi(0.5, -0.3), 6), z_over_chi(0.0, -0.3)) # 1.103683 1.0 near 1, and exactly 1.0 at z = 0قراءة الابتسامة ومعايرتها
ارسم التقلب الضمني مقابل سعر التنفيذ وستكون للمعاملات بصمات واضحة. فـrho سالب يرفع السعور المنخفضة ويخفض المرتفعة (انحياز هابط نموذجي للأسهم ولكثير من الفوائد)؛ وrho = 0 يعطي ابتسامة متناظرة. وnu أكبر يرفع الطرفين. وbeta يحرك العمود الفقري: مقدار تغير التقلب عند السعر حين يتحرك الآجل. ويثبّت الممارسون beta اصطلاحًا أو من التاريخ ثم يعايرون الباقي على التقلبات المعلنة لكل استحقاق (الموضوع التالي) وغالبًا يحلّون alpha من سعر عند السعر ليطابقه تمامًا. وتحذيران: الصيغة تقريب يتدهور للاستحقاقات الطويلة والسعور المنخفضة جدًا حيث قد تعني كثافات احتمال سالبة.
# The smile for three values of rho: a negative rho lifts the low strikes (downward skew)
import math
def sabr_vol(f, k, t, alpha, beta, rho, nu):
fk = f * k
log = math.log(f / k)
mid = fk ** ((1 - beta) / 2)
z = nu / alpha * mid * log
ratio = 1.0 if abs(z) < 1e-7 else z / math.log((math.sqrt(1 - 2 * rho * z + z ** 2) + z - rho) / (1 - rho))
denominator = mid * (1 + (1 - beta) ** 2 / 24 * log ** 2 + (1 - beta) ** 4 / 1920 * log ** 4)
bracket = 1 + ((1 - beta) ** 2 / 24 * alpha ** 2 / fk ** (1 - beta) + rho * beta * nu * alpha / (4 * mid) + (2 - 3 * rho ** 2) * nu ** 2 / 24) * t
return alpha / denominator * ratio * bracket
for rho in (-0.5, 0.0, 0.5):
print(rho, [round(sabr_vol(0.03, k, 1.0, 0.035, 0.5, rho, 0.4), 4) for k in (0.02, 0.03, 0.04)])
# one line per rho: the first value (low strike) is the highest when rho is negative and the lowest when rho is positive# A free sanity check: with beta = 1 and nu = 0 SABR is Black-Scholes, so the at-the-money volatility is alpha at every expiry
def atm(f, t, alpha, beta, rho, nu):
fk = f * f
bracket = 1 + ((1 - beta) ** 2 / 24 * alpha ** 2 / fk ** (1 - beta) + rho * beta * nu * alpha / (4 * fk ** ((1 - beta) / 2)) + (2 - 3 * rho ** 2) * nu ** 2 / 24) * t
return alpha / f ** (1 - beta) * bracket
print(atm(100.0, 0.5, 0.2, 1.0, -0.3, 0.0), atm(100.0, 5.0, 0.2, 1.0, -0.3, 0.0)) # 0.2 0.2rho ضمن -1 و1 بصرامة وnu ليست ضخمة) وأعد معايرة كل استحقاق على حدة وبسلاسة عبر الزمن. وللفوائد المنخفضة أو السالبة استعمل النسخة الطبيعية (باشيليه) من الصيغة التي لا تنهار قرب الصفر.- يعطي SABR كل استحقاق ابتسامة من أربعة معاملات: alpha (المستوى) وbeta (العمود الفقري) وrho (الانحياز) وnu (الانحناء).
- صيغة هاغان = عامل أولي ×
z / chi(z)× تصحيح زمني؛ وعند السعر تؤول إلىalpha / F^(1-beta)مضروبًا في التصحيح، وتؤولz / chi(z)إلى 1 حين يؤولzإلى 0. - rho السالب يميل بالابتسامة إلى الأسفل، وnu الأكبر يرفع الطرفين؛ عايِر كل استحقاق على حدة وافحص المراجحة في الأطراف واستعمل النسخة الطبيعية قرب الفوائد الصفرية.
التالي: معايرة النماذج، مواءمة معاملات النموذج مع أسعار السوق.
المختبر: ما الذي يُقيَّم
- أضف تصحيح الزمن باستخدام
sabr_correction25 نقطة - اقرأ نقطة عند السعر باستخدام
sabr_atm_vol25 نقطة - رَوِّض 0 / 0 في
z_over_chi25 نقطة - ارسم الابتسامة باستخدام
sabr_implied_vol25 نقطة