رقم واحد لمخاطر السوق
ترتفع معظم الأسهم حين يرتفع السوق وتهبط حين يهبط. وبيتا الأصل تقيس بكم: بيتا قدرها 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))- بيتا =
covariance(asset, market) / variance(market)، الميل مقابل السوق؛ وهي الجزء غير القابل للتنويع من المخاطر. - CAPM:
rf + beta * (market - rf)؛ وألفا جنسن هي متوسط العائد ناقصه، أي المهارة (أو الحظ) بما يتجاوز مخاطر السوق. - المخاطر المتبقية هي الانحراف المعياري لـ
asset - (a + b * market)بقسمةn - 2؛ ويمكن تنويعها؛ وبيتا نفسها مضطربة.
التالي: النماذج متعددة العوامل (فاما-فرينش)، تفسير العوائد بأكثر من السوق.
المختبر: ما الذي يُقيَّم
- قِس الحساسية للسوق باستخدام
beta25 نقطة - سعّر المخاطر باستخدام
capm_expected_return25 نقطة - اعثر على المهارة إن وُجدت باستخدام
jensen_alpha25 نقطة - قِس المخاطر المتبقية باستخدام
residual_vol25 نقطة