σμ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›الوحدة 3 · الاحتمالات ومحاكاة مونت كارلو›الموضوع 3.3·~45 دمتوسط

الذيول السميكة واختبارات الطبيعية

الموضع في المسارالوحدة 3 من 11 · الموضوع 3 من 12
3.3 الذيول السميكة واختبارات الطبيعية
—درجة المختبر— / 100إجمالي XP—التتابع—

ما يعد به منحنى الجرس

تفترض نماذج مخاطر كثيرة أن العوائد تتبع التوزيع الطبيعي لأنه يجعل كل شيء قابلًا للحساب بمتوسط وانحراف معياري. والتوزيع الطبيعي دقيق جدًا بشأن القيم المتطرفة. احتمال البعد أكثر من k انحرافًا معياريًا عن المتوسط في أي اتجاه هو erfc(k / sqrt(2)): 31.7% لـ 1 و4.55% لـ 2 و0.27% لـ 3 و0.0063% لـ 4. فيقع يوم 4 سيغما مرة كل نحو 15800 يوم تداول، أي مرة كل 63 سنة تقريبًا، ويوم 5 سيغما مرة كل آلاف السنين.

import math
import numpy as np

for k in (1, 2, 3, 4, 5):
    probability = math.erfc(k / math.sqrt(2))      # P(|Z| > k) for a normal variable
    print(k, f"{probability:.2e}")
# 1 3.17e-01
# 2 4.55e-02
# 3 2.70e-03
# 4 6.33e-05
# 5 5.73e-07

print(round(1 / math.erfc(4 / math.sqrt(2))))                  # 15787   trading days between 4-sigma days, if returns were normal
print(round(1 / math.erfc(5 / math.sqrt(2)) / 252))            # 6922    years between 5-sigma days

للأسواق أطراف ثقيلة

تنتج الأسواق الحقيقية أيام 4 و5 سيغما مرات كثيرة خلال مسيرة مهنية، في 1987 و2008 و2020. وتوزيعات عوائدها ذات أطراف ثقيلة: أيام متطرفة أكثر مما يسمح به الجرس (ووسط أعلى وأضيق). وطريقة بسيطة لرؤية ذلك هي نسبة الأطراف: حصة العوائد المرصودة وراء k انحرافًا معياريًا مقسومة على الحصة التي يعطيها التوزيع الطبيعي. نسبة قريبة من 1 تعني أطرافًا طبيعية؛ و5 تعني أن المتطرف أكثر تكرارًا بخمسة أضعاف؛ وفي البيانات اليومية عند k = 4 قد تبلغ المئات. والنماذج التي تفترض الطبيعية تقلّل بالضبط من شأن الأيام الأهم.

returns = np.array([0.010, 0.012, 0.008, 0.011, 0.009, 0.010, 0.012, -0.060, 0.010, 0.009])

def tail_ratio(x, k):
    observed = np.mean(np.abs(x - x.mean()) > k * x.std(ddof=1))     # share beyond k standard deviations
    return observed / math.erfc(k / math.sqrt(2))                    # divided by what a normal would give

print(round(float(tail_ratio(returns, 2)), 2))    # 2.2   the one crash is 2.2 times too frequent at 2 sigma (a tiny sample, though)

اختبار جارك-بيرا

يسأل الاختبار الرسمي: هل يمكن أن تأتي العيّنة بصورة معقولة من توزيع طبيعي؟ يجمع إحصاء جارك-بيرا مقياسي الشكل من الموضوع السابق: JB = n / 6 * (S² + K² / 4) حيث S الالتواء وK التفرطح الزائد. وفي العيّنة الطبيعية يقترب كلاهما من 0 فيكون JB صغيرًا. وتحت فرض الطبيعية يتبع JB توزيع مربع كاي بدرجتي حرية، وله لطرفه صيغة مغلقة exp(-JB / 2): وهي قيمة p. إن كانت أقل من 0.05 رُفضت الطبيعية. والقيمة الحرجة JB = 5.99. وعيّنتنا ذات العشرة أيام وانهيار واحد لها JB = 22.4 وقيمة p تبلغ 0.00001.

x = returns
n = len(x)
deviations = x - x.mean()
m2, m3, m4 = (np.mean(deviations ** k) for k in (2, 3, 4))
skew, kurt = m3 / m2 ** 1.5, m4 / m2 ** 2 - 3

jb = n / 6 * (skew ** 2 + kurt ** 2 / 4)
p_value = math.exp(-jb / 2)
print(round(float(jb), 2), p_value < 0.05)     # 22.37 True   normality rejected
print(f"{p_value:.1e}")                         # 1.4e-05
# The p-value falls fast as the statistic grows: 5.99 is the 5% critical value
for jb in (0, 2, 5.99, 10, 22.37):
    print(jb, round(math.exp(-jb / 2), 5))
# 0 1.0
# 2 0.36788
# 5.99 0.05004
# 10 0.00674
# 22.37 1e-05
رفض الطبيعية ليس النهايةمع مئات العوائد اليومية يرفض الاختبار الطبيعية لجميع الأصول تقريبًا، فالرفض خبر متوقع. المهم هو مقدار اختلاف الأطراف: استخدم نسبة الأطراف لتقدير حجم المشكلة، ثم أجرِ اختبارات إجهاد بانهيارات حقيقية أو بتوزيع أثقل أطرافًا مثل t لستيودنت أو بالمحاكاة التاريخية بدل الوثوق بمنحنى جرس.
  • يبعد المتغير الطبيعي أكثر من k انحرافًا باحتمال erfc(k / sqrt(2)): 4.55% لـ 2 و0.0063% لـ 4.
  • تُظهر نسبة الأطراف، الحصة المرصودة مقسومة على الطبيعية، الأطراف الثقيلة: الأسواق أعلى بكثير من 1 عند 4 سيغما.
  • جارك-بيرا: n / 6 * (S**2 + K**2 / 4)؛ وقيمة p هي exp(-JB / 2)؛ وأقل من 0.05 تُرفض الطبيعية (JB فوق 5.99).

التالي: اختبارات الفرضيات: اختبار t، لتقرير ما إذا كان متوسط العائد يختلف فعلًا عن الصفر.

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

  • قِس بُعد العيّنة عن التوزيع الطبيعي باستخدام jarque_bera25 نقطة
  • حوّل الإحصاء إلى قيمة p باستخدام normality_p_value25 نقطة
  • احسب ما يعد به منحنى الجرس باستخدام normal_tail_probability25 نقطة
  • احسب مقدار ثقل الأطراف مقارنة بالطبيعي باستخدام tail_ratio25 نقطة
المستكشف · lab-56-1
▾ lab-56-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-56-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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