طريقتان أخريان يتحرك بهما السعر
تغطي دلتا وغاما وفيغا السهم وتقلبه. ويبقى مُدخلان في صيغة بلاك-شولز: الزمن حتى الانتهاء وسعر الفائدة. ثيتا هي تغير قيمة الخيار مع مرور الوقت (يتقلص t في الصيغة كل يوم)، ورو هي التغير عند تحرك أسعار الفائدة. وثيتا هي التي يشعر بها المتداول يوميًا: فالخيار الطويل أصل يتآكل، والعلاوة التي يفقدها كل يوم هي ثمن امتلاك التحدب.
import math
def norm_cdf(x):
return 0.5 * (1 + math.erf(x / math.sqrt(2)))
def norm_pdf(x):
return math.exp(-0.5 * x * x) / math.sqrt(2 * math.pi)
def d1(spot, strike, rate, sigma, t):
return (math.log(spot / strike) + (rate + 0.5 * sigma ** 2) * t) / (sigma * math.sqrt(t))
def d2(spot, strike, rate, sigma, t):
return d1(spot, strike, rate, sigma, t) - sigma * math.sqrt(t)
def call_theta(spot, strike, rate, sigma, t):
decay = -spot * norm_pdf(d1(spot, strike, rate, sigma, t)) * sigma / (2 * math.sqrt(t))
carry = -rate * strike * math.exp(-rate * t) * norm_cdf(d2(spot, strike, rate, sigma, t))
return decay + carry
theta = call_theta(100, 100, 0.05, 0.2, 1)
print(round(theta, 4)) # -6.414 per year
print(round(theta / 365, 4)) # -0.0176 per calendar dayثيتا: لماذا يضر الزمن
الحد الأول من ثيتا، -S * pdf(d1) * sigma / (2 * sqrt(T))، هو تآكل *قيمة الخيار*: مع زمن أقل تقل فرصة الحركة الكبيرة. والثاني، -r * K * exp(-rT) * N(d2)، هو فائدة سعر التنفيذ الذي لا يجب دفعه بعد، ويربحها مشتري الكول. كلاهما سالب للكول فثيتا سالبة، والخسارة ليست منتظمة: تتسارع كلما اقترب الانتهاء، وأسرع ما تكون للخيارات عند السعر. ويعلنها المتداولون لكل يوم تقويمي، theta / 365.
# Theta per day for the same option as expiry approaches: the decay speeds up
import math
def norm_cdf(x):
return 0.5 * (1 + math.erf(x / math.sqrt(2)))
def norm_pdf(x):
return math.exp(-0.5 * x * x) / math.sqrt(2 * math.pi)
def call_theta(spot, strike, rate, sigma, t):
d_1 = (math.log(spot / strike) + (rate + 0.5 * sigma ** 2) * t) / (sigma * math.sqrt(t))
d_2 = d_1 - sigma * math.sqrt(t)
return -spot * norm_pdf(d_1) * sigma / (2 * math.sqrt(t)) - rate * strike * math.exp(-rate * t) * norm_cdf(d_2)
for days in (360, 90, 30, 7):
per_day = call_theta(100, 100, 0.05, 0.2, days / 365) / 365
print(days, "days left:", round(per_day, 4)) # 360: -0.0177, 90: -0.0288, 30: -0.045, 7: -0.0858رو: سعر الفائدة
رو تساوي K * T * exp(-rT) * N(d2): موجبة للكول لأن ارتفاع المعدل يخفض القيمة الحالية لسعر التنفيذ الذي ستدفعه. وللبوت إشارة معاكسة. وهي أصغر الحروف اليونانية في الخيارات القصيرة الأجل وتهم الطويلة (LEAPS والوارنتات الطويلة). تُعلن لكل نقطة مئوية من المعدل، rho / 100، كما تُعلن فيغا لكل نقطة تقلب.
# Rho of the one-year call at several rates: it grows with the rate and with the time left
import math
def norm_cdf(x):
return 0.5 * (1 + math.erf(x / math.sqrt(2)))
def call_rho(spot, strike, rate, sigma, t):
d_1 = (math.log(spot / strike) + (rate + 0.5 * sigma ** 2) * t) / (sigma * math.sqrt(t))
return strike * t * math.exp(-rate * t) * norm_cdf(d_1 - sigma * math.sqrt(t))
for rate in (0.0, 0.05, 0.10):
print("rate", rate, "rho per point:", round(call_rho(100, 100, rate, 0.2, 1) / 100, 4)) # 0.0: 0.4602, 0.05: 0.5323, 0.1: 0.5931
print("two years, 5%:", round(call_rho(100, 100, 0.05, 0.2, 2) / 100, 4)) # 1.0568# Check theta and rho by bumping the inputs: they are slopes of the price
import math
def norm_cdf(x):
return 0.5 * (1 + math.erf(x / math.sqrt(2)))
def bs_call(spot, strike, rate, sigma, t):
d_1 = (math.log(spot / strike) + (rate + 0.5 * sigma ** 2) * t) / (sigma * math.sqrt(t))
return spot * norm_cdf(d_1) - strike * math.exp(-rate * t) * norm_cdf(d_1 - sigma * math.sqrt(t))
h = 1e-5
theta = -(bs_call(100, 100, 0.05, 0.2, 1 + h) - bs_call(100, 100, 0.05, 0.2, 1 - h)) / (2 * h)
rho = (bs_call(100, 100, 0.05 + h, 0.2, 1) - bs_call(100, 100, 0.05 - h, 0.2, 1)) / (2 * h)
print(round(theta, 4), round(rho, 4)) # -6.414 53.2325theta ~ -0.5 * sigma^2 * S^2 * gamma (عند معدل صفر). لذلك فالمتداول الطويل في غاما يراهن عمليًا على أن السهم سيتحرك أكثر من التقلب المسعَّر أصلًا.- ثيتا هي القيمة المفقودة مع الزمن: سالبة للكول الطويل، وأسرع قرب الانتهاء وعند السعر؛ وتُعلن
theta / 365لكل يوم. - رو هي الحساسية لسعر الفائدة: موجبة للكول وسالبة للبوت، وأكبر ما تكون للآجال الطويلة؛ وتُعلن
rho / 100لكل نقطة. - كلاهما ميل للسعر، فإزعاج صغير لـ
tأوrateيتحقق من أي صيغة.
التالي: التقلب الضمني، أي تشغيل الصيغة بالعكس لقراءة تقلب السوق من سعر الخيار.
المختبر: ما الذي يُقيَّم
- سعّر مرور الزمن باستخدام
call_theta25 نقطة - اذكر التآكل اليومي باستخدام
theta_per_day25 نقطة - قِس الحساسية لأسعار الفائدة باستخدام
call_rho25 نقطة - اذكر رو لكل نقطة مئوية باستخدام
rho_per_point25 نقطة