صيغة لخيار
في عام 1973 بيّن بلاك وشولز أنه إذا اتبع السهم النموذج اللوغاريتمي الطبيعي بتقلب ثابت أمكن تكرار الخيار بتداول السهم وسند، فلا يعتمد سعره على مدى ترجيح المستثمرين للارتفاع. وسعر الكول الأوروبي هو S * N(d1) - K * exp(-rT) * N(d2): السهم الذي تتلقاه إن انتهى الخيار داخل النقود مرجّحًا برقم يشبه الاحتمال، ناقص سعر التنفيذ المخصوم الذي تدفعه مرجّحًا بالاحتمال المحايد للمخاطر N(d2) للتنفيذ. ويأتي البوت من التكافؤ.
import math
def norm_cdf(x):
return 0.5 * (1 + math.erf(x / math.sqrt(2))) # N(x): the probability that a standard normal is below x
print(round(norm_cdf(0.0), 4), round(norm_cdf(1.96), 4)) # 0.5 0.975
def d1_d2(spot, strike, rate, sigma, t):
d1 = (math.log(spot / strike) + (rate + 0.5 * sigma ** 2) * t) / (sigma * math.sqrt(t))
return d1, d1 - sigma * math.sqrt(t)
d1, d2 = d1_d2(100, 100, 0.05, 0.2, 1)
print(round(d1, 4), round(d2, 4)) # 0.35 0.15الكول والبوت
N هي دالة التوزيع الطبيعي المعياري التي تعطيها math.erf في بايثون بالصيغة 0.5 * (1 + erf(x / sqrt(2))). يجمع d1 وd2 بين الموقع ln(S/K) والانجراف والتقلب على عمر الخيار. وبهما: الكول = S * N(d1) - K * exp(-rT) * N(d2) والبوت = K * exp(-rT) * N(-d2) - S * N(-d1). لسعر فوري 100 وسعر تنفيذ 100 ومعدل 5% وتقلب 20% وسنة واحدة يكلّف الكول 10.45 والبوت 5.57، والفرق 4.88 هو بالضبط قيمة التكافؤ S - K * exp(-rT).
def bs_call(spot, strike, rate, sigma, t):
d1, d2 = d1_d2(spot, strike, rate, sigma, t)
return spot * norm_cdf(d1) - strike * math.exp(-rate * t) * norm_cdf(d2)
def bs_put(spot, strike, rate, sigma, t):
d1, d2 = d1_d2(spot, strike, rate, sigma, t)
return strike * math.exp(-rate * t) * norm_cdf(-d2) - spot * norm_cdf(-d1)
call, put = bs_call(100, 100, 0.05, 0.2, 1), bs_put(100, 100, 0.05, 0.2, 1)
print(round(call, 4), round(put, 4)) # 10.4506 5.5735
print(round(call - put, 4), round(100 - 100 * math.exp(-0.05), 4)) # 4.8771 4.8771 put-call parity holdsما الذي يحرّك السعر
خمسة مدخلات تحدد السعر. سعر تنفيذ أعلى يجعل الكول أرخص (80: 24.59 و100: 10.45 و120: 3.25). وتقلب أعلى يجعل الخيارين أغلى لأن زيادة الريبة تضيف صعودًا فقط لحامل الخيار (10%: 6.81 و20%: 10.45 و40%: 18.02). وزمن أطول حتى الاستحقاق يرفع السعر أيضًا (3 أشهر: 4.62 وسنة: 10.45 و4 سنوات: 25.21). لاحظ أن العائد المتوقع للسهم لا يظهر في الصيغة إطلاقًا: لا يلزم تقدير إلا التقلب، ولهذا كثيرًا ما تُعرض أسعار الخيارات المعلنة بصيغة تقلب.
for strike in (80, 100, 120):
print("strike", strike, round(bs_call(100, strike, 0.05, 0.2, 1), 4)) # 24.5888, 10.4506, 3.2475
for sigma in (0.1, 0.2, 0.4):
print("sigma", sigma, round(bs_call(100, 100, 0.05, sigma, 1), 4)) # 6.805, 10.4506, 18.023
for t in (0.25, 1, 4):
print("t", t, round(bs_call(100, 100, 0.05, 0.2, t), 4)) # 4.615, 10.4506, 25.2133# Time value: the call is worth more than its intrinsic value (what it would pay if it expired today)
intrinsic = max(100 - 100 * math.exp(-0.05), 0)
print(round(intrinsic, 4), round(bs_call(100, 100, 0.05, 0.2, 1) - intrinsic, 4)) # 4.8771 5.5735 intrinsic value and time valueN(x) = 0.5 * (1 + erf(x / sqrt(2)))وd1 = (ln(S/K) + (r + sigma²/2) T) / (sigma sqrt(T))وd2 = d1 - sigma sqrt(T).- الكول =
S N(d1) - K e^(-rT) N(d2)؛ البوت =K e^(-rT) N(-d2) - S N(-d1)؛ وفرقهما قيمة التكافؤS - K e^(-rT). - ترتفع الأسعار مع التقلب والزمن وتنخفض مع سعر تنفيذ الكول؛ والعائد المتوقع للسهم غائب، يكفي التقلب.
التالي: دلتا، كم يتحرك سعر الخيار حين يتحرك السهم دولارًا واحدًا.
المختبر: ما الذي يُقيَّم
- ابنِ الاحتمال التراكمي للجرس باستخدام
norm_cdf25 نقطة - احسب كميتَي بلاك-شولز باستخدام
d1_d225 نقطة - سعّر كولًا باستخدام
bs_call25 نقطة - سعّر بوتًا باستخدام
bs_put25 نقطة