طريقان إلى المكان نفسه
ابنِ محفظتين. أ: اشترِ كولًا وضع في البنك (أو سند خالٍ من المخاطر) القيمة الحالية لسعر التنفيذ K * exp(-rT). ب: اشترِ بوتًا واشترِ السهم. عند الاستحقاق إن انتهى السهم فوق K فالمحفظة أ هي S - K من الكول زائد K من البنك أي S؛ والمحفظة ب هي السهم S وبوت بلا قيمة أي S. وإن انتهى دون K فالمحفظة أ هي K البنك فقط لأن الكول ينتهي بلا قيمة، والمحفظة ب هي K - S من البوت زائد السهم S أي K. وفي الحالتين تتساوى قيمة المحفظتين عند الاستحقاق، فيجب أن تتساوى كلفتهما اليوم.
import math
spot, strike, rate, t = 100, 100, 0.05, 1
pv_strike = strike * math.exp(-rate * t) # what must be put in the bank today to own K at expiry
print(round(pv_strike, 4)) # 95.1229
call = 10.4506 # a call price we observe
put = call - spot + pv_strike # the parity relation
print(round(put, 4)) # 5.5735
print(round(put + spot - pv_strike, 4)) # 10.4506 and back to the callحين ينكسر التكافؤ: المراجحة
إن عرض السوق أسعارًا لا تحقق العلاقة فثمة ربح بلا مخاطر. عرّف الفجوة (C - P) - (S - K e^(-rT)). الفجوة الموجبة تعني أن الكول غالٍ قياسًا إلى البوت: بِع الكول واشترِ البوت واشترِ السهم واقترض القيمة الحالية لسعر التنفيذ. تكلفة المحفظة صفر في البداية ولا تدفع شيئًا عند الاستحقاق مهما فعل السهم، وتجني الفجوة اليوم. والفجوة السالبة تعكس كل ساق. وللأسواق الحقيقية تكاليف وفروق شراء-بيع فلا يمكن تداول الفجوات الصغيرة: وهذا ما يمثله التفاوت.
def parity_gap(call, put, spot, strike, rate, t):
return (call - put) - (spot - strike * math.exp(-rate * t))
print(round(parity_gap(11.0, put, 100, 100, 0.05, 1), 4)) # 0.5494 the call at 11.00 is too expensive: sell it
print(round(parity_gap(call, put, 100, 100, 0.05, 1), 4)) # 0.0 consistent prices: nothing to do
def arbitrage_action(call, put, spot, strike, rate, t, tolerance=0.01):
gap = parity_gap(call, put, spot, strike, rate, t)
if gap > tolerance:
return "sell call, buy put, buy stock"
if gap < -tolerance:
return "buy call, sell put, sell stock"
return "none"
print(arbitrage_action(11.0, put, 100, 100, 0.05, 1)) # sell call, buy put, buy stock# The package of the arbitrage, at today's prices: sell the call at 11, buy the put, buy the stock, borrow the strike's present value
cash_today = 11.0 - put - 100 + 100 * math.exp(-0.05 * 1)
print(round(cash_today, 4)) # 0.5494 you are paid the gap now and owe nothing at expiry# A call minus a put is a synthetic forward: it behaves like the stock bought with borrowed money
print(round(10.4506 - put, 4), round(100 - pv_strike, 4)) # 4.8771 4.8771C + K * exp(-rT) = P + S: كول زائد السند يساوي بوتًا زائد السهم، فـP = C - S + K * exp(-rT).- فجوة
(C - P) - (S - K e^(-rT))موجبة: بِع الكول واشترِ البوت والسهم؛ سالبة: العكس. - التكافؤ لا يعتمد على نموذج، فاستخدمه فحصًا لأي نموذج تسعير؛ ومع الأرباح أو التنفيذ المبكر يصير متباينة.
التالي: صيغة بلاك-شولز، سعر بصيغة مغلقة للكول والبوت.
المختبر: ما الذي يُقيَّم
- استنتج البوت من الكول باستخدام
parity_put_price25 نقطة - استنتج الكول من البوت باستخدام
parity_call_price25 نقطة - قِس بُعد الأسعار عن التكافؤ باستخدام
parity_gap25 نقطة - سمِّ الصفقة الخالية من المخاطر باستخدام
arbitrage_action25 نقطة