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