الحساسية للسهم
يحتاج المتداول الذي يملك خيارات إلى معرفة ما يحدث لحسابه حين يتحرك السهم. دلتا هي الجواب: تغير سعر الخيار لكل حركة بوحدة واحدة في السهم، dC/dS. دلتا الكول بين 0 و1 ودلتا البوت بين -1 و0. وفي نموذج بلاك-شولز دلتا الكول هي ببساطة N(d1) ودلتا البوت N(d1) - 1. وكول لسنة عند النقود دلتاه 0.64 يربح نحو 64 سنتًا حين يرتفع السهم دولارًا. وتُقرأ دلتا أيضًا تقريبًا كاحتمال انتهاء الخيار داخل النقود.
import math
def norm_cdf(x):
return 0.5 * (1 + math.erf(x / math.sqrt(2)))
def d1(spot, strike, rate, sigma, t):
return (math.log(spot / strike) + (rate + 0.5 * sigma ** 2) * t) / (sigma * math.sqrt(t))
def call_delta(spot, strike, rate, sigma, t):
return norm_cdf(d1(spot, strike, rate, sigma, t))
for spot in (80, 90, 100, 110, 120):
delta = call_delta(spot, 100, 0.05, 0.2, 1)
print(spot, round(delta, 4), round(delta - 1, 4)) # the call delta and the put delta
# 80 0.2219 -0.7781
# 90 0.4298 -0.5702
# 100 0.6368 -0.3632
# 110 0.7958 -0.2042
# 120 0.8965 -0.1035 deep in the money: the call moves almost one for one with the stockقياس دلتا بالإزاحة
لا توجد صيغة مغلقة إلا للخيارات البسيطة. ولأي نموذج تسعير يمكنك تقدير دلتا عدديًا: سعّر الخيار والسهم أعلى قليلًا وأدنى قليلًا واقسم على المسافة. والفرق المركزي (f(S + h) - f(S - h)) / (2h) أدق من الفرق أحادي الجانب وهو دقيق تمامًا للقطع المكافئ. والدالة نفسها تصلح لسعر مونت كارلو أو شجرة ثنائية، فهذا «الإزاحة وإعادة التسعير» هو الطريقة العامة للحصول على الحساسيات. اختر h صغيرًا لكن ليس بحيث يطغى ضجيج التقريب (1% من سعر السهم بداية معتادة).
def bs_call(spot, strike, rate, sigma, t):
d_1 = d1(spot, strike, rate, sigma, t)
return spot * norm_cdf(d_1) - strike * math.exp(-rate * t) * norm_cdf(d_1 - sigma * math.sqrt(t))
def numerical_delta(price_function, spot, bump):
return (price_function(spot + bump) - price_function(spot - bump)) / (2 * bump)
price = lambda s: bs_call(s, 100, 0.05, 0.2, 1) # any function of the spot price will do
print(round(numerical_delta(price, 100, 0.01), 6)) # 0.636831
print(round(call_delta(100, 100, 0.05, 0.2, 1), 6)) # 0.636831 the same as the formulaالتحوط بدلتا
تحوّل دلتا مركزًا في الخيارات إلى مركز معادل في الأسهم. عقد كول على 100 سهم بدلتا 0.64 يتصرف كامتلاك 64 سهمًا للحركات الصغيرة. ولإزالة التعرّض خذ المركز المعاكس: مع 10 عقود كول طويلة بِع 10 * 100 * 0.6368 = 637 سهمًا. والدفتر المتحوَّط محايد دلتا: حركة صغيرة في السهم تترك قيمته شبه ثابتة. والتحوط صحيح للسعر الحالي فقط فيجب تعديله مع حركة السهم ودلتا. وتكرار إعادة التوازن مقايضة بين المخاطر وتكاليف التداول.
def hedge_shares(contracts, delta, multiplier=100):
return -contracts * multiplier * delta
delta = call_delta(100, 100, 0.05, 0.2, 1)
print(round(hedge_shares(10, delta), 1)) # -636.8 long 10 call contracts: sell about 637 shares
print(round(hedge_shares(-10, delta), 1)) # 636.8 short 10 call contracts: buy about 637 shares
# After a $1 move the options gain about delta * 1 each and the shares lose about the same
print(round(bs_call(101, 100, 0.05, 0.2, 1) - bs_call(100, 100, 0.05, 0.2, 1), 4)) # 0.6461 close to delta, not exactly# Delta as expiry approaches: at the money it stays near 0.5, in the money it goes to 1, out of the money to 0
for t in (1, 0.25, 0.02):
print(t, [round(call_delta(spot, 100, 0.05, 0.2, t), 4) for spot in (90, 100, 110)])
# 1 [0.4298, 0.6368, 0.7958]
# 0.25 [0.1898, 0.5695, 0.8704]
# 0.02 [0.0001, 0.5197, 0.9997]- دلتا الكول
N(d1)في (0, 1)؛ ودلتا البوتN(d1) - 1في (-1, 0): ما يعادل خيارًا واحدًا بالأسهم. - دلتا العددية
(f(S + h) - f(S - h)) / (2h)تصلح لأي نموذج تسعير؛ أبقِhصغيرًا لكن فوق ضجيج التقريب. - أسهم التحوط =
-contracts * multiplier * deltaتجعل الدفتر محايد دلتا للحركات الصغيرة؛ وأعد التوازن حين تتغير دلتا.
التالي: غاما، حساسية دلتا نفسها، وهي تبيّن سرعة تقادم التحوط.
المختبر: ما الذي يُقيَّم
- قِس حساسية الكول للسهم باستخدام
call_delta25 نقطة - استنتج دلتا البوت باستخدام
put_delta25 نقطة - اقلق السعر لقياس دلتا باستخدام
numerical_delta25 نقطة - اجعل المركز محايدًا باستخدام
hedge_shares25 نقطة