【问题标题】:How can I measure volatility?如何衡量波动率?
【发布时间】:2009-08-26 19:01:27
【问题描述】:
我正在尝试确定排名的波动性。
更具体地说,在 X 个数据点上排名可以从 1 到 16(数据点的数量变化最大为 30)。
我希望能够测量这种波动性,然后以某种方式将其映射到百分比。
我不是数学极客,所以请不要对我吐出复杂的公式:)
我只想以最简单的方式编写代码。
【问题讨论】:
标签:
math
statistics
formula
measure
volatility
【解决方案3】:
鉴于您有一个小样本集(您说最多 30 个数据点)并且标准差很容易受到异常值的影响,我建议使用 interquartile range 作为波动率的度量。这是一个简单的计算,可以对分布在您的小样本集中的数据进行有意义的表示。
【解决方案4】:
如果您想要一些非常简单的东西,您可以将连续排名之间的绝对差异的平均值作为波动率。这具有递归的额外好处。使用这个进行初始化:
double sum=0;
for (int i=1; i<N; i++)
{
sum += abs(ranks[i]-ranks[i-1]);
}
double volatility = sum/N;
然后,如果在时间 N+1 有可用的新排名,则为了更新波动率,您引入参数 K,其中 K 确定波动率测量适应波动率变化的速度。较高的 K 意味着较慢的适应,因此 K 可以被视为“衰减时间”或类似的东西:
double K=14 //higher = slower change in volatility over time.
double newvolatility;
newvolatility = (oldvolatility * (K-1) + abs(rank[N+1] - rank[N]))/K;
这也称为moving average(在这种情况下是排名的绝对差异)。