You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python两个Parkinson波动率计算函数结果不一致如何调整

问题原因

两个函数的核心逻辑差异出在计算顺序和多余的滚动平均步骤:

  • 正确的Parkinson波动率计算逻辑是:先计算每日的对数高低价比平方调整项,对该调整项做窗口为window的滚动平均,将平均值年化(乘以交易天数252)后开平方,得到最终的滚动波动率。
  • 原Parkinson1存在两个错误:
    1. 没有使用滚动平均后的方差项计算年化波动率,而是直接对单日方差项做年化开方
    2. 多做了一次不必要的波动率滚动平均,导致结果被平滑、数值偏低,和正确结果有偏差

修改后的Parkinson1代码

import math
import numpy as np

def Parkinson1(price, window, trading_periods=252, clean=True):
    # 计算每日帕金森方差项
    sigmasqrd = (1.0 / (4.0 * math.log(2.0))) * ((price['High'] / price['Low']).apply(np.log))**2.0
    # 滚动窗口求方差平均值,年化后开方得到波动率
    sigma = (trading_periods * sigmasqrd.rolling(window).mean()) ** 0.5
    # 和Parkinson2对齐,可选去除空值
    if clean:
        return sigma.dropna()
    else:
        return sigma

修改后调用时参数和Parkinson2保持一致,输出结果就会完全匹配,相比用apply实现的Parkinson2,向量化实现的新版本运行效率更高。

内容的提问来源于stack exchange,提问作者Gloria Dalla Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:45:08