σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academyالمسارات
Ctrl K
AO
+1.2k متعلّم
تسجيل الدخولانضم ↗
المسارات
AO
+1.2k متعلّم
تسجيل الدخول
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
مسار Python›الوحدة 7 · بحث ألفا والمخاطر›الموضوع 7.1·~55 دمتقدم

نموذج CAPM وبيتا

الموضع في المسارالوحدة 7 من 11 · الموضوع 1 من 9
7.1 نموذج CAPM وبيتا
—درجة المختبر— / 100إجمالي XP—التتابع—

رقم واحد لمخاطر السوق

ترتفع معظم الأسهم حين يرتفع السوق وتهبط حين يهبط. وبيتا الأصل تقيس بكم: بيتا قدرها 1.5 تعني أن حركة السوق بنسبة 1% يصاحبها في المتوسط حركة 1.5% في الأصل. وهي ميل عوائد الأصل مرسومة مقابل عوائد السوق، covariance(asset, market) / variance(market). وبيتا هي جزء المخاطر الذي لا يمكن تنويعه بعيدًا لأن كل أصل في السوق يحمله.

import numpy as np

market = np.array([0.01, -0.02, 0.015, 0.005, -0.01, 0.02])
asset = 1.5 * market + np.array([0.002, -0.001, 0.003, 0.0, -0.002, 0.001])      # moves 1.5x the market, plus noise

market_dev = market - market.mean()
covariance = np.sum((asset - asset.mean()) * market_dev) / (len(market) - 1)
variance = np.sum(market_dev ** 2) / (len(market) - 1)
print(round(float(covariance / variance), 4))                 # 1.5972: about 1.5, the noise moves it a little
print(round(float(np.polyfit(market, asset, 1)[0]), 4))       # the regression slope gives the same number
# Beta does not care about a constant, and scales with the asset
import numpy as np

def beta(asset, market):
    market_dev = market - market.mean()
    return float(np.sum((asset - asset.mean()) * market_dev) / np.sum(market_dev ** 2))

rng = np.random.default_rng(4)
market = rng.normal(0, 0.01, size=100)
print(round(beta(2.5 * market, market), 4))               # 2.5   an asset that moves 2.5x the market
print(round(beta(market + 0.01, market), 4))              # 1.0   adding a constant changes nothing
print(round(beta(-market, market), 4))                    # -1.0  a perfect hedge

نموذج تسعير الأصول الرأسمالية

يحوّل نموذج CAPM ذلك إلى سعر للمخاطر. يُكافأ المستثمرون على تحمل مخاطر السوق وعلى لا شيء غيرها، فالعائد المتوقع للأصل هو المعدل الخالي من المخاطر زائد بيتاه مضروبة في علاوة مخاطر السوق (عائد السوق ناقص المعدل الخالي من المخاطر): E[R] = rf + beta * (E[R_m] - rf). بيتا صفر تربح المعدل الخالي من المخاطر، وبيتا 1 تربح عائد السوق، وبيتا 2 تربح المعدل الخالي من المخاطر زائد ضعفي العلاوة.

def capm_expected_return(rf, beta_value, market_return):
    return rf + beta_value * (market_return - rf)

rf, market_return = 0.01, 0.06
for b in (0.0, 0.5, 1.0, 1.5, 2.0):
    print(b, round(capm_expected_return(rf, b, market_return), 4))     # 0.01, 0.035, 0.06, 0.085, 0.11

ألفا: ما يتبقى

إن كان CAPM صحيحًا فالأصل يربح بالضبط العائد الذي تبرره بيتاه. والفرق بين ما ربحه وما توقعه النموذج هو ألفا جنسن: mean(asset) - (rf + beta * (mean(market) - rf)). وألفا موجبة تعني أنه أدى أفضل مما تفسره مخاطر السوق؛ وهذا ما يبيعه المديرون النشطون وأصعب ما يُعثر عليه. أما الجزء من الحركة الذي لا يفسره السوق فهو المخاطر المتبقية وتقاس بالانحراف المعياري لبواقي الانحدار، ويمكن تنويعها بعيدًا.

# Alpha and residual risk of an asset with a little skill in it
import numpy as np

rng = np.random.default_rng(2)
market = rng.normal(0.0004, 0.01, size=500)
asset = 0.0003 + 1.2 * market + rng.normal(0, 0.005, size=500)       # true alpha 3 bps a day, beta 1.2, residual 0.5%
rf = 0.0001

market_dev = market - market.mean()
b = np.sum((asset - asset.mean()) * market_dev) / np.sum(market_dev ** 2)
alpha = asset.mean() - (rf + b * (market.mean() - rf))
a = asset.mean() - b * market.mean()
residual = asset - (a + b * market)
print(round(float(b), 3), round(float(alpha), 5), round(float(np.sqrt(np.sum(residual ** 2) / (len(asset) - 2))), 4))
بيتا إحصائية لا ثابتبيتا مقدَّرة على 60 يومًا لها هامش خطأ واسع، وتتغير مع نظام السوق واختيار المؤشر. واستخدام العوائد اليومية بدل الشهرية يعطي أرقامًا مختلفة. و CAPM نفسه تبسيط: فقد وجدت أبحاث لاحقة عوامل أخرى تفسر العوائد، وهي موضوع الدرس التالي. تعامل مع بيتا كمُدخل مقيس وغير مؤكد.
  • بيتا = covariance(asset, market) / variance(market)، الميل مقابل السوق؛ وهي الجزء غير القابل للتنويع من المخاطر.
  • CAPM: rf + beta * (market - rf)؛ وألفا جنسن هي متوسط العائد ناقصه، أي المهارة (أو الحظ) بما يتجاوز مخاطر السوق.
  • المخاطر المتبقية هي الانحراف المعياري لـasset - (a + b * market) بقسمة n - 2؛ ويمكن تنويعها؛ وبيتا نفسها مضطربة.

التالي: النماذج متعددة العوامل (فاما-فرينش)، تفسير العوائد بأكثر من السوق.

المختبر: ما الذي يُقيَّم

  • قِس الحساسية للسوق باستخدام beta25 نقطة
  • سعّر المخاطر باستخدام capm_expected_return25 نقطة
  • اعثر على المهارة إن وُجدت باستخدام jensen_alpha25 نقطة
  • قِس المخاطر المتبقية باستخدام residual_vol25 نقطة
المستكشف · lab-93-1
▾ lab-93-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-93-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

هل تريد إعادة ضبط هذا الموضوع؟

سيعود كل ما في lab-93-1 إلى الملفات الابتدائية وستُمسح الطرفية. ستفقد حلّك الحالي ولا يمكن التراجع عن ذلك.

سيُعاد ضبطه
  • main.py ← الشيفرة الابتدائية
  • سجل الطرفية ومخرجات الاختبارات
  • التغييرات غير المُرسلة
سيُحتفظ به
  • أفضل درجة في المختبر
  • نقاط XP والتتابع
  • تقدّم المحاضرة والملاحظات

سجّل الدخول لتشغيل الكود الخاص بك.

قراءة كل المحاضرات مجانية. أنشئ حسابًا أو سجّل الدخول لتشغيل الكود وتنفيذ الاختبارات وتسليم هذا المختبر.

  • بيئة تطوير داخل المتصفح مع طرفية bash — لا حاجة لتثبيت أي شيء
  • تصحيح فوري ونقاط خبرة ومكانك في المسار
إنشاء حسابتسجيل الدخول
أو
المتابعة عبر GitHub