σμ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.9·~45 دمتوسط

دلتا

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

الحساسية للسهم

يحتاج المتداول الذي يملك خيارات إلى معرفة ما يحدث لحسابه حين يتحرك السهم. دلتا هي الجواب: تغير سعر الخيار لكل حركة بوحدة واحدة في السهم، dC/dS. دلتا الكول بين 0 و1 ودلتا البوت بين -1 و0. وفي نموذج بلاك-شولز دلتا الكول هي ببساطة N(d1) ودلتا البوت N(d1) - 1. وكول لسنة عند النقود دلتاه 0.64 يربح نحو 64 سنتًا حين يرتفع السهم دولارًا. وتُقرأ دلتا أيضًا تقريبًا كاحتمال انتهاء الخيار داخل النقود.

import math

def norm_cdf(x):
    return 0.5 * (1 + math.erf(x / math.sqrt(2)))

def d1(spot, strike, rate, sigma, t):
    return (math.log(spot / strike) + (rate + 0.5 * sigma ** 2) * t) / (sigma * math.sqrt(t))

def call_delta(spot, strike, rate, sigma, t):
    return norm_cdf(d1(spot, strike, rate, sigma, t))

for spot in (80, 90, 100, 110, 120):
    delta = call_delta(spot, 100, 0.05, 0.2, 1)
    print(spot, round(delta, 4), round(delta - 1, 4))      # the call delta and the put delta
# 80 0.2219 -0.7781
# 90 0.4298 -0.5702
# 100 0.6368 -0.3632
# 110 0.7958 -0.2042
# 120 0.8965 -0.1035     deep in the money: the call moves almost one for one with the stock

قياس دلتا بالإزاحة

لا توجد صيغة مغلقة إلا للخيارات البسيطة. ولأي نموذج تسعير يمكنك تقدير دلتا عدديًا: سعّر الخيار والسهم أعلى قليلًا وأدنى قليلًا واقسم على المسافة. والفرق المركزي (f(S + h) - f(S - h)) / (2h) أدق من الفرق أحادي الجانب وهو دقيق تمامًا للقطع المكافئ. والدالة نفسها تصلح لسعر مونت كارلو أو شجرة ثنائية، فهذا «الإزاحة وإعادة التسعير» هو الطريقة العامة للحصول على الحساسيات. اختر h صغيرًا لكن ليس بحيث يطغى ضجيج التقريب (1% من سعر السهم بداية معتادة).

def bs_call(spot, strike, rate, sigma, t):
    d_1 = d1(spot, strike, rate, sigma, t)
    return spot * norm_cdf(d_1) - strike * math.exp(-rate * t) * norm_cdf(d_1 - sigma * math.sqrt(t))

def numerical_delta(price_function, spot, bump):
    return (price_function(spot + bump) - price_function(spot - bump)) / (2 * bump)

price = lambda s: bs_call(s, 100, 0.05, 0.2, 1)          # any function of the spot price will do
print(round(numerical_delta(price, 100, 0.01), 6))        # 0.636831
print(round(call_delta(100, 100, 0.05, 0.2, 1), 6))       # 0.636831   the same as the formula

التحوط بدلتا

تحوّل دلتا مركزًا في الخيارات إلى مركز معادل في الأسهم. عقد كول على 100 سهم بدلتا 0.64 يتصرف كامتلاك 64 سهمًا للحركات الصغيرة. ولإزالة التعرّض خذ المركز المعاكس: مع 10 عقود كول طويلة بِع 10 * 100 * 0.6368 = 637 سهمًا. والدفتر المتحوَّط محايد دلتا: حركة صغيرة في السهم تترك قيمته شبه ثابتة. والتحوط صحيح للسعر الحالي فقط فيجب تعديله مع حركة السهم ودلتا. وتكرار إعادة التوازن مقايضة بين المخاطر وتكاليف التداول.

def hedge_shares(contracts, delta, multiplier=100):
    return -contracts * multiplier * delta

delta = call_delta(100, 100, 0.05, 0.2, 1)
print(round(hedge_shares(10, delta), 1))            # -636.8   long 10 call contracts: sell about 637 shares
print(round(hedge_shares(-10, delta), 1))           # 636.8    short 10 call contracts: buy about 637 shares

# After a $1 move the options gain about delta * 1 each and the shares lose about the same
print(round(bs_call(101, 100, 0.05, 0.2, 1) - bs_call(100, 100, 0.05, 0.2, 1), 4))    # 0.6461   close to delta, not exactly
# Delta as expiry approaches: at the money it stays near 0.5, in the money it goes to 1, out of the money to 0
for t in (1, 0.25, 0.02):
    print(t, [round(call_delta(spot, 100, 0.05, 0.2, t), 4) for spot in (90, 100, 110)])
# 1 [0.4298, 0.6368, 0.7958]
# 0.25 [0.1898, 0.5695, 0.8704]
# 0.02 [0.0001, 0.5197, 0.9997]
دلتا تتغير والتحوط يتآكلدلتا هي الأثر من الدرجة الأولى فقط. فالكول الذي كانت دلتاه 0.64 عند 100 دلتاه 0.80 عند 110 و0.43 عند 90، فالتحوط المضبوط عند 100 خاطئ بعد حركة كبيرة، وتنجرف دلتا أيضًا مع الزمن (تذوب دلتا خيار خارج النقود نحو 0 قرب الاستحقاق). وسرعة تغير دلتا هي الحساسية التالية: غاما.
  • دلتا الكول N(d1) في (0, 1)؛ ودلتا البوت N(d1) - 1 في (-1, 0): ما يعادل خيارًا واحدًا بالأسهم.
  • دلتا العددية (f(S + h) - f(S - h)) / (2h) تصلح لأي نموذج تسعير؛ أبقِ h صغيرًا لكن فوق ضجيج التقريب.
  • أسهم التحوط = -contracts * multiplier * delta تجعل الدفتر محايد دلتا للحركات الصغيرة؛ وأعد التوازن حين تتغير دلتا.

التالي: غاما، حساسية دلتا نفسها، وهي تبيّن سرعة تقادم التحوط.

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

  • قِس حساسية الكول للسهم باستخدام call_delta25 نقطة
  • استنتج دلتا البوت باستخدام put_delta25 نقطة
  • اقلق السعر لقياس دلتا باستخدام numerical_delta25 نقطة
  • اجعل المركز محايدًا باستخدام hedge_shares25 نقطة
المستكشف · lab-74-1
▾ lab-74-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-74-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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