السند سلسلة وعود
السند قرض مقسّم إلى قطع قابلة للتداول. يعد المُصدِر بـقسيمة ثابتة كل فترة والقيمة الاسمية (par) عند الاستحقاق. سند لعشر سنوات قيمته الاسمية 1000 وقسيمته 5% تُدفع مرتين في السنة يعد بـ 25 كل ستة أشهر و1000 إضافية مع الدفعة الأخيرة. وسعره هو قيمة هذه الوعود اليوم: القيمة الحالية للتدفقات مخصومة بـالعائد الذي يطلبه السوق حاليًا لهذه المخاطرة وهذا الاستحقاق.
import numpy as np
def bond_cashflows(face, coupon_rate, years, freq):
n = int(round(years * freq)) # number of payments
times = np.arange(1, n + 1) / freq # in years: 0.5, 1.0, 1.5, ...
flows = np.full(n, face * coupon_rate / freq) # a coupon each time
flows[-1] += face # and the face value with the last one
return times, flows
times, flows = bond_cashflows(1000, 0.05, 2, 2) # a 2-year bond, to keep the output short
print(times.tolist()) # [0.5, 1.0, 1.5, 2.0]
print(flows.tolist()) # [25.0, 25.0, 25.0, 1025.0]السعر والعائد يتحركان في اتجاهين متعاكسين
اخصم كل تدفق عند (1 + ytm / freq) ** (freq * time) واجمعها. حين يساوي العائد معدل القسيمة تساوي قيمة السند قيمته الاسمية تمامًا (يُتداول عند القيمة الاسمية). وإذا ارتفعت عوائد السوق فوق القسيمة تدفع السندات الجديدة أكثر من هذا السند فينخفض سعره دون القيمة الاسمية (خصم)؛ وإذا انخفضت العوائد يُتداول بـعلاوة. إنها الآلية نفسها في الموضوع السابق لكن بتواريخ دفع حقيقية. والعائد الجاري، القسيمة السنوية على السعر، مقياس سريع لكنه ناقص لأنه يتجاهل الربح أو الخسارة عند الاستحقاق.
def bond_price(face, coupon_rate, ytm, years, freq=2):
times, flows = bond_cashflows(face, coupon_rate, years, freq)
return (flows / (1 + ytm / freq) ** (freq * times)).sum()
for ytm in (0.03, 0.05, 0.06, 0.08):
print(ytm, round(bond_price(1000, 0.05, ytm, 10), 2))
# 0.03 1171.69 yield below the coupon: premium
# 0.05 1000.0 yield = coupon: par
# 0.06 925.61 yield above the coupon: discount
# 0.08 796.15
print(round(50 / bond_price(1000, 0.05, 0.06, 10), 5)) # 0.05402 current yield: 5.40%, not the 6% yield to maturityالسندات الأطول تتفاعل أكثر
يعتمد التغير النسبي في السعر لحركة معينة في العائد على الاستحقاق. فالدفعات البعيدة تُخصم بقوة عالية فهي شديدة الحساسية للمعدل. يخسر سند لسنة نحو 1% حين ترتفع العوائد نقطة، ولعشر سنوات نحو 7%، ولثلاثين سنة قرابة 14%. ولهذا يتحدث مستثمرو السندات عن مخاطر سعر الفائدة، ولهذا تبني الموضوعات التالية مقاييس (العائد حتى الاستحقاق والمدة) لقياسها.
for years in (1, 5, 10, 30):
change = bond_price(1000, 0.05, 0.06, years) / 1000 - 1 # the coupon is 5%, the yield rises to 6%
print(years, round(change, 4))
# 1 -0.0096
# 5 -0.0427
# 10 -0.0744
# 30 -0.1384# The same 6% yield with annual, semiannual and monthly coupons: the quoting convention matters a little
for freq in (1, 2, 12):
print(freq, round(bond_price(1000, 0.05, 0.06, 10, freq), 2))
# 1 926.4
# 2 925.61
# 12 924.94freq) بجانب العائد. وللسندات الحقيقية أيضًا فائدة مستحقة بين تواريخ القسائم واصطلاحات احتساب الأيام، وهذا المختبر يتجاهلها بالتسعير في تواريخ القسائم.- السعر = مجموع
flow / (1 + ytm / freq) ** (freq * time)؛ قسيمة كل فترة والقيمة الاسمية مع الأخيرة. - العائد = معدل القسيمة: السعر = القيمة الاسمية؛ العائد فوق القسيمة: خصم؛ تحتها: علاوة. السعر والعائد يتحركان بعكس بعضهما.
- كلما طال الاستحقاق زاد تغير السعر لنفس حركة العائد: وهذه مخاطر سعر الفائدة التي تقيسها المدة لاحقًا.
التالي: العائد حتى الاستحقاق، في الاتجاه المعاكس: من سعر السوق إلى العائد.
المختبر: ما الذي يُقيَّم
- اذكر دفعات السند باستخدام
bond_cashflows25 نقطة - اخصم الدفعات للوصول إلى سعر باستخدام
bond_price25 نقطة - قارن القسيمة بالسعر باستخدام
current_yield25 نقطة - شاهد أثر تحرك العائد باستخدام
price_change25 نقطة