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

منحنيات العائد والاستيفاء

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

معدل لكل استحقاق

حتى الآن كان عائد واحد يخصم كل دفعات السند. في الواقع يكسب المال المُقرَض لستة أشهر وسنتين وعشر سنوات معدلات مختلفة، والنمط عبر الاستحقاقات هو منحنى العائد. ومعدل الصفر هو المعدل السنوي لدفعة واحدة في تاريخ معين دون قسائم وسيطة. وعادةً يرتفع المنحنى مع الاستحقاق (يطلب المستثمرون أكثر للانتظار أطول) لكنه قد يكون مسطحًا أو مقلوبًا حين تتجاوز المعدلات القصيرة الطويلة، وتقرؤه الأسواق إنذارًا بشأن النمو.

import numpy as np

maturities = np.array([0.5, 1, 2, 5, 10, 30])                      # years where the market quotes a rate
rates = np.array([0.040, 0.042, 0.045, 0.048, 0.050, 0.052])       # an upward-sloping curve

# The rate at 3 years is not quoted: interpolate linearly between 2 years (4.5%) and 5 years (4.8%)
print(float(np.interp(3, maturities, rates)))                        # 0.046
print(np.interp([0.25, 7, 40], maturities, rates).tolist())          # [0.04, 0.0488, 0.052]   flat outside the quoted range

عوامل الخصم والمعدل الآجل

يعطي معدل الصفر r للاستحقاق t عامل الخصم (1 + r) ** -t: قيمة وحدة تُدفع عند t اليوم. ويخبّئ المنحنى توقعات أيضًا. فالإقراض سنتين بـ 4.5% يجب أن يساوي الإقراض سنة بـ 4.2% ثم إقراض سنة أخرى بمعدل متفق عليه f: (1 + 4.5%)² = (1 + 4.2%)(1 + f) فيكون f = 4.80%. وهذا المعدل الآجل هو معدل التعادل للسنة الثانية، مثبّت اليوم. وعمومًا f = ((1 + r2) ** t2 / (1 + r1) ** t1) ** (1 / (t2 - t1)) - 1.

def discount_factor(rate, t):
    return (1 + rate) ** -t

print(round(float(discount_factor(0.045, 2)), 5))                  # 0.91573   one unit paid in 2 years

r1, t1, r2, t2 = 0.042, 1, 0.045, 2
forward = ((1 + r2) ** t2 / (1 + r1) ** t1) ** (1 / (t2 - t1)) - 1
print(round(forward, 5))                                            # 0.04801   the rate for year 2, implied by the curve
print(round((1 + r1) ** t1 * (1 + forward) ** (t2 - t1), 5), round((1 + r2) ** t2, 5))   # 1.09 1.09   both routes agree

التسعير على المنحنى كله

التسعير بعائد واحد يعامل دفعة بعد سنة ودفعة بعد عشر سنوات بالتساوي. ونهج المنحنى أكثر أمانة: لكل دفعة اقرأ معدل الصفر لتاريخها (مع الاستيفاء عند الحاجة) وحوّله إلى عامل خصم واجمع flow * factor. فسندان بالتدفقات نفسها يجب أن يكون سعرهما واحدًا أيًّا كانت عوائدهما المعلنة، وهكذا تقيّم البنوك السندات بسعر السوق. لسند ثلاث سنوات بقسيمة 5% على منحنانا السعر 1011.25 مقابل 1010.98 بمعدل مسطح 4.6%: متقاربان هنا لأن المنحنى هادئ، لكن السندات المختلفة تتفاعل بشكل مختلف حين يلتوي المنحنى.

times = np.array([1.0, 2.0, 3.0])
flows = np.array([50.0, 50.0, 1050.0])                              # a 3-year 5% bond with annual coupons

zero = np.interp(times, maturities, rates)
print(zero.tolist())                                                 # [0.042, 0.045, 0.046]
print((discount_factor(zero, times)).round(5).tolist())              # [0.95969, 0.91573, 0.87379]
print(round(float((flows * discount_factor(zero, times)).sum()), 4))   # 1011.2462   on the curve
print(round(float((flows / 1.046 ** times).sum()), 4))               # 1010.9752   with one flat 4.6% instead
# The forward rates between the quoted maturities, in one array expression
t = np.array([1.0, 2.0, 5.0])
r = np.array([0.042, 0.045, 0.048])
forwards = ((1 + r[1:]) ** t[1:] / (1 + r[:-1]) ** t[:-1]) ** (1 / np.diff(t)) - 1
print(forwards.round(5).tolist())       # [0.04801, 0.05]   year 2 and years 3 to 5: an upward-sloping curve implies rising forwards
الاستيفاء خيار نمذجةالاستيفاء الخطي لمعدلات الصفر هو أبسط قاعدة لكنه ليس الوحيد: يستوفي الممارسون أيضًا لوغاريتمات عوامل الخصم أو يستخدمون الشرائح، ويغيّر الاختيار المعدلات الآجلة والأسعار بين النقاط المعلنة. وبعد آخر استحقاق معلن يُبقي np.interp المعدل ثابتًا، وهذا اصطلاح لا حقيقة. اذكر الطريقة كلما نشرت منحنى.
  • منحنى العائد هو معدل الصفر لكل استحقاق؛ اقرأ الاستحقاقات الناقصة بالاستيفاء (np.interp، ثابت خارج النطاق).
  • عامل الخصم (1 + r) ** -t؛ المعدل الآجل ((1 + r2) ** t2 / (1 + r1) ** t1) ** (1 / (t2 - t1)) - 1.
  • السعر = مجموع flow * عامل الخصم مع كل تدفق بمعدل الصفر لتاريخه؛ واذكر طريقة الاستيفاء.

التالي: عوائد الخيارات، ما يدفعه الكول أو البوت عند الاستحقاق، نقطة انطلاق تسعير الخيارات.

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

  • اقرأ معدلًا بين الاستحقاقات المعلنة باستخدام interpolate_rate25 نقطة
  • حوّل معدلًا إلى عامل خصم باستخدام discount_factor25 نقطة
  • اقرأ المعدل الآجل المخبوء في المنحنى باستخدام forward_rate25 نقطة
  • سعّر سلسلة دفعات على المنحنى كله باستخدام price_on_curve25 نقطة
المستكشف · lab-70-1
▾ lab-70-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-70-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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