σμ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.2·~40分钟中级

偏度与峰度

路线进度模块 3/11 · 主题 2/12
3.2 偏度与峰度
—实验得分— / 100总 XP—连续天数—

超越均值与方差

两个收益率序列可以有相同的均值和波动率,持有起来却大不相同。一个缓慢上涨,偶尔一天暴跌 6%;另一个对称而平静。均值和方差是分布的前两个矩。k 阶中心矩是 (x - mean) ** k 的平均值。3 阶和 4 阶矩描述形状:偏度说明哪一侧尾部更长,峰度说明尾部有多厚。

m_k = mean((x - mean)^k) skewness = m3 / m2^1.5 excess kurtosis = m4 / m2^2 - 3
import numpy as np

def central_moment(x, k):
    return float(np.mean((x - x.mean()) ** k))

# Calm days of about +1%, and one crash of -6%
returns = np.array([0.010, 0.012, 0.008, 0.011, 0.009, 0.010, 0.012, -0.060, 0.010, 0.009])

print(round(central_moment(returns, 2), 8))     # 0.00044389   the variance with ddof=0
print(round(central_moment(returns, 3), 10))    # -2.47823e-05   odd powers keep the sign: the crash dominates
print(round(central_moment(returns, 4), 12))    # 1.587946e-06   even powers are always positive

偏度:哪一侧尾部更长

立方保留每个偏差的符号,并让大偏差的权重大得多,所以三阶矩由最极端的值主导。除以 m2 ** 1.5 消去量纲,得到偏度:对称分布为 0;长尾在左侧(罕见的大亏损)时为负,长尾在右侧(罕见的大盈利)时为正。股票指数通常是负偏:缓慢上涨、突然下跌。10 万个正态样本的偏度约为 0。

m2 = central_moment(returns, 2)
m3 = central_moment(returns, 3)
print(round(m3 / m2 ** 1.5, 3))     # -2.65   strongly negative: one big loss among calm gains

mirror = -returns                    # flip every return: the long tail moves to the right
print(round(central_moment(mirror, 3) / central_moment(mirror, 2) ** 1.5, 3))   # 2.65

峰度:尾部有多厚

四次方让极端值的权重极大,所以 m4 / m2 ** 2 随尾部变厚而增大。正态分布的这个值是 3,因此我们报告超额峰度 m4 / m2 ** 2 - 3:正态分布为 0,厚尾为正(极端日出现得比钟形预测的更频繁),薄尾为负(最薄的情形,即两个相等的尖峰,得 -2)。大多数资产的日收益率超额峰度明显为正,常常达到 5 以上。这两个统计量在收益率缩放或平移后都不变,因此只描述形状。

m4 = central_moment(returns, 4)
print(round(m4 / m2 ** 2 - 3, 3))   # 5.059   fat tails: one crash dominates the fourth moment

calm = np.array([-0.02, -0.01, -0.005, 0.0, 0.005, 0.01, 0.02, -0.015, 0.015, 0.0])
c2, c3, c4 = (central_moment(calm, k) for k in (2, 3, 4))
print(round(c3 / c2 ** 1.5, 3), round(c4 / c2 ** 2 - 3, 3))   # 0.0 -1.033   symmetric, slightly thin tails
# Shape does not depend on scale or shift: multiply the returns by 3 and add 1
rescaled = returns * 3 + 1
print(round(central_moment(rescaled, 3) / central_moment(rescaled, 2) ** 1.5, 3))   # -2.65
print(round(central_moment(rescaled, 4) / central_moment(rescaled, 2) ** 2 - 3, 3))  # 5.059   the same two numbers
一次暴跌就能改变一切偏度和峰度由少数最极端的值决定,因此远不如均值或波动率稳定:增加或删除一天,它们就会大幅跳动。请用足够多的数据(至少数百天)计算,并在相信某个数字之前也看看直方图。
  • k 阶中心矩是 mean((x - mean) ** k):2、3、4 阶矩分别给出方差、偏度、峰度。
  • 偏度 m3 / m2 ** 1.5:负值表示左侧长尾(罕见的大亏损);超额峰度 m4 / m2 ** 2 - 3 对正态分布为 0。
  • 超额峰度为正表示厚尾;两个统计量都由少数极端日决定,需要大量数据。

下一节:厚尾与正态性检验,正式检验收益率是否服从钟形曲线。

实验:评分内容

  • 用 central_moment 计算基础构件25 分
  • 用 skewness 衡量哪一侧尾部更长25 分
  • 用 excess_kurtosis 衡量尾部有多厚25 分
  • 用 shape_label 给形状命名25 分
资源管理器 · lab-55-1
▾ lab-55-1
…
bash · 浏览器内
learner@quantcraft:~/lab-55-1$
Python 尚未加载PythonLn 1, Col 1Spaces: 4UTF-8

要重置此主题吗?

lab-55-1 中的所有内容将恢复为初始文件,终端也会被清空。你当前的解答将丢失,且无法撤销。

将被重置
  • main.py → 初始代码
  • 终端历史与测试输出
  • 未提交的更改
将被保留
  • 实验最高得分
  • 你的 XP 与连续天数
  • 讲解进度与笔记

登录后即可运行你的代码。

所有讲解均可免费阅读。创建账户或登录后,即可运行代码、运行测试并提交此实验。

  • 浏览器内 IDE 与 bash 终端,无需安装
  • 即时评分、XP 以及你在学习路线中的位置
创建账户登录
或
使用 GitHub 继续