σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academyالمسارات
Ctrl K
AO
+1.2k متعلّم
تسجيل الدخولانضم ↗
المسارات
AO
+1.2k متعلّم
تسجيل الدخول
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
مسار Python›الوحدة 4 · تسعير الدخل الثابت والخيارات›الموضوع 4.11·~45 دمتوسط

فيغا

الموضع في المسارالوحدة 4 من 11 · الموضوع 11 من 16
4.11 فيغا
—درجة المختبر— / 100إجمالي XP—التتابع—

المُدخل الذي لا يمكن ملاحظته

في صيغة بلاك-شولز السعر الفوري وسعر التنفيذ والمعدل والزمن معلومة. أما التقلب فلا: إنه توقع السوق للحركة المستقبلية، ويتغير كل يوم. فيعتمد سعر الخيار كثيرًا على رقم يجب تخمينه، والحساسية له، فيغا، dC/dsigma، كثيرًا ما تكون أكبر مخاطر دفتر الخيارات. وفي بلاك-شولز تساوي S * pdf(d1) * sqrt(T)، وهي نفسها للكول والبوت، وموجبة: زيادة التقلب تزيد قيمة الخيار دائمًا.

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%

أين تكون فيغا أكبر

تبلغ فيغا أقصاها للخيارات عند النقود حيث النتيجة أكثر ريبة والتقلب الإضافي يغيّر أكثر، وتتلاشى للخيارات العميقة داخل النقود أو خارجها (سعر التنفيذ 80: 23.8 و100: 37.5 و120: 21.6). وبخلاف غاما تكبر فيغا مع الزمن حتى الاستحقاق: 19.6 لثلاثة أشهر و37.5 لسنة و62.5 لأربع سنوات، لأن العمر الأطول يمنح التقلب وقتًا أكثر ليؤثر. فالخيارات بعيدة الأجل أشد تعرّضًا لتغيرات التقلب، بينما الخيارات قريبة الأجل أشد تعرّضًا لغاما.

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 expiry

قياسها واستخدامها

يُعلَن التقلب بنقاط مئوية، لذا تذكر غرف المخاطر فيغا لكل نقطة: vega / 100، أي تغير السعر حين ينتقل التقلب من 20% إلى 21%. وقفزة بعشر نقاط في التقلب، كما في ذعر السوق، تحرّك الخيار عند النقود بنحو 0.375 * 10 = 3.75 أي قرابة 36% من سعره. وكما مع دلتا وغاما يمكنك قياس فيغا لأي نموذج بالإزاحة: سعّر بـ sigma + h وsigma - h وخذ الفرق المركزي. والتقدير الخطي يخطئ قليلًا للحركات الكبيرة لأن السعر منحنٍ في التقلب أيضًا.

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
فيغا سبب إعلان التقلب الضمنيلأن التقلب هو المُدخل الوحيد غير الملحوظ والسعر شديد الحساسية له، يشغّل المتداولون الصيغة معكوسة: من سعر السوق لخيار يحلّون التقلب الذي يعيد إنتاجه. وهذا الرقم، التقلب الضمني، هو ما تُعلَن به الخيارات وتُقارَن عبر أسعار التنفيذ والتواريخ، وتبيّن فيغا إلى أي حد يتحول خطأ السعر إلى خطأ في التقلب: وهذا بالضبط ما تبنيه الموضوعات التالية.
  • فيغا = S * pdf(d1) * sqrt(T): موجبة ومتماثلة للكول والبوت، وأكبر ما تكون عند النقود وتنمو مع الزمن.
  • اذكرها لكل نقطة تقلب (vega / 100)؛ وعدديًا يصلح (f(sigma + h) - f(sigma - h)) / (2h) لأي نموذج.
  • تغير السعر ~ vega_per_point * النقاط: قفزة التقلب تهم قدر حركة السهم؛ والتقلب الضمني هو سعر السوق المعلن.

التالي: ثيتا ورو، الحساسيتان للزمن ولأسعار الفائدة.

المختبر: ما الذي يُقيَّم

  • قِس الحساسية للتقلب باستخدام vega25 نقطة
  • اذكر فيغا لكل نقطة تقلب باستخدام vega_per_point25 نقطة
  • اقلق التقلب باستخدام numerical_vega25 نقطة
  • تنبأ بأثر تحرك التقلب باستخدام price_change_from_vol25 نقطة
المستكشف · lab-76-1
▾ lab-76-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-76-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

هل تريد إعادة ضبط هذا الموضوع؟

سيعود كل ما في lab-76-1 إلى الملفات الابتدائية وستُمسح الطرفية. ستفقد حلّك الحالي ولا يمكن التراجع عن ذلك.

سيُعاد ضبطه
  • main.py ← الشيفرة الابتدائية
  • سجل الطرفية ومخرجات الاختبارات
  • التغييرات غير المُرسلة
سيُحتفظ به
  • أفضل درجة في المختبر
  • نقاط XP والتتابع
  • تقدّم المحاضرة والملاحظات

سجّل الدخول لتشغيل الكود الخاص بك.

قراءة كل المحاضرات مجانية. أنشئ حسابًا أو سجّل الدخول لتشغيل الكود وتنفيذ الاختبارات وتسليم هذا المختبر.

  • بيئة تطوير داخل المتصفح مع طرفية bash — لا حاجة لتثبيت أي شيء
  • تصحيح فوري ونقاط خبرة ومكانك في المسار
إنشاء حسابتسجيل الدخول
أو
المتابعة عبر GitHub