σμ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.1·~40 دمتوسط

متوسط العوائد وتباينها

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

رقمان لتوزيع

يصعب مقارنة عمود من العوائد بآخر. ويلخّص رقمان معظمه: المتوسط يبيّن أين تتمركز العوائد، والتباين يبيّن مدى تبعثرها حول ذلك المركز. لـ n من العوائد المتوسط هو sum(x) / n؛ ومجموع الانحرافات x - mean يساوي صفرًا دائمًا، فلقياس التبعثر تُربَّع أولًا. والتباين العيّني هو مجموع مربعات الانحرافات مقسومًا على n - 1 لا n: فقد قُدِّر المتوسط من البيانات نفسها مما يجعل الانحرافات أصغر قليلًا، والقسمة على n - 1 تصحح ذلك.

variance = sum((x - mean)^2) / (n - 1) std = sqrt(variance)
import numpy as np

returns = np.array([0.004, -0.002, 0.001, 0.003, -0.004, 0.002, 0.006, -0.001])

mean = returns.mean()
deviations = returns - mean
print(round(mean, 5))                         # 0.00113
print(abs(deviations.sum()) < 1e-12)           # True   the deviations always add up to zero

variance = (deviations ** 2).sum() / (len(returns) - 1)
print(round(variance, 8), round(returns.var(ddof=1), 8))   # 1.098e-05 1.098e-05   the same as numpy's var(ddof=1)

الانحراف المعياري والتقلب

غيّر التربيع الوحدات: تباين العوائد بوحدة «نسبة مئوية مربعة». وجذره التربيعي، الانحراف المعياري، يعود إلى وحدة العوائد، ويُسمى في التمويل التقلب. وهو أشيع مقياس للمخاطر. اليوم المعتاد لسهم كبير يتحرك نحو 1 إلى 2%، أي تقلب 0.01 إلى 0.02 يوميًا. ويُقرأ نسبةً إلى المتوسط: مع تقلب 1.2% يوميًا يبعد يوم -3.6% ثلاثة انحرافات معيارية.

std = np.sqrt(variance)
print(round(std, 6), round(returns.std(ddof=1), 6))   # 0.003314 0.003314   daily volatility of these returns

# How many standard deviations is the worst day from the mean?
print(round((returns.min() - mean) / std, 2))          # -1.55

التحويل إلى سنوي ونسبة شارب

الأرقام اليومية صغيرة وقليلة الدلالة، لذا تُذكر سنويًا. ينمو المتوسط خطيًا مع الزمن (252 يوم تداول في السنة: اضرب في 252)، لكن التقلب ينمو مع الجذر التربيعي للزمن: اضرب في sqrt(252) أي نحو 15.9. والسبب أن الحركات اليومية العشوائية يلغي بعضها بعضًا جزئيًا، فتتراكم الريبة أبطأ من المتوسط. وتقسم نسبة شارب متوسط العائد فوق معدل الخالي من المخاطر (العائد الزائد) على التقلب: المكافأة لكل وحدة مخاطرة، مُحوَّلة إلى سنوي بالطريقة نفسها. وتتيح مقارنة استراتيجية هادئة بأخرى جامحة.

periods = 252
print(round(mean * periods, 4))                  # 0.2835   annual mean: 28.35% (a made-up, very lucky sample)
print(round(std * np.sqrt(periods), 4))          # 0.0526   annual volatility: 5.26%

risk_free = 0.0001                               # risk-free return of one day
excess = returns - risk_free
sharpe = excess.mean() / np.sqrt(((excess - excess.mean()) ** 2).sum() / (len(excess) - 1)) * np.sqrt(periods)
print(round(sharpe, 3))                          # 4.91   absurdly good, because 8 lucky days prove nothing
# How precisely do 8 days pin down the mean? The standard error is std / sqrt(n)
standard_error = std / np.sqrt(len(returns))
print(round(float(standard_error), 6))          # 0.001172   larger than the mean itself (0.00113)
الإحصاء يأتي من عيّنةمتوسط 8 أيام تقدير مشوَّش جدًا: خطؤه المعياري نحو std / sqrt(n) أي 0.0012 هنا، وهو أكبر من المتوسط نفسه (0.0011). ونسبة شارب ممتازة على بضعة أسابيع لا تقول الكثير؛ وكلما زادت الملاحظات زادت الثقة بالمتوسط، وأرقام المخاطر أكثر ثباتًا بكثير من متوسطات العوائد.
  • المتوسط: x.mean()؛ التباين العيّني: ((x - mean) ** 2).sum() / (n - 1)؛ والتقلب جذره التربيعي.
  • حوّل المتوسط إلى سنوي بـ * periods والتقلب بـ * sqrt(periods): المخاطر تنمو مع الجذر التربيعي للزمن.
  • شارب = متوسط العائد الزائد / انحرافه المعياري * sqrt(periods): مكافأة لكل وحدة مخاطرة؛ والعينة القصيرة تجعلها غير موثوقة.

التالي: الالتواء والتفرطح، الإحصاءان اللذان يصفان شكل التوزيع إلى جانب مركزه وتشتته.

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

  • قِس تشتت العوائد باستخدام sample_variance25 نقطة
  • عبّر عن التشتت بوحدة العوائد باستخدام sample_std25 نقطة
  • حوّل المتوسط والتقلب إلى سنوي باستخدام annualized_stats25 نقطة
  • قيّم العائد لكل وحدة مخاطرة باستخدام sharpe_ratio25 نقطة
المستكشف · lab-54-1
▾ lab-54-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-54-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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