计算时间加权移动平均线
Posted
技术标签:
【中文标题】计算时间加权移动平均线【英文标题】:Computing time-weighted moving average 【发布时间】:2012-04-26 19:18:23 【问题描述】:我有一个股票价格的时间序列,并希望计算十分钟窗口内的移动平均线(见下图)。由于价格变动是零星发生的(即它们不是周期性的),因此似乎是最公平的。
图中有四个价格变化:A、B、C 和 D,后三个发生在窗口内。请注意,因为 B 只出现在窗口中的某个时间(比如 3 分钟),所以 A 的值仍然有助于计算。
事实上,据我所知,计算应该完全基于 A、B 和 C 的值(不是 D)以及它们与下一个点之间的持续时间(或A的情况:时间窗口开始和B)之间的持续时间。最初 D 不会有任何影响,因为它的时间权重为零。 这是正确的吗?
假设这是正确的,我担心移动平均线会比非加权计算“滞后”更多(这将立即解释 D 的值),但是,非加权计算有其自身的缺点:
“A”对结果的影响与其他价格一样大,尽管超出了时间窗口。 突然出现一连串的快速价格变动会严重偏向移动平均线(尽管这也许是可取的?)任何人都可以就哪种方法似乎最好提供任何建议,或者是否有值得考虑的替代(或混合)方法?
【问题讨论】:
【参考方案1】:这两个建议来自离散世界,但您可能会为您的特定案例找到灵感。
看看exponential smoothing。在这种方法中,您引入了平滑因子 (α ∈ [0;1]),它允许您改变最近元素对“预测”值的影响(较旧的元素被分配以指数方式递减的权重):
st=αxt-1+(1+α)st-1; s1=x0
我创建了一个简单的动画,说明指数平滑如何跟踪具有三个不同 α=0.3、0.6、0.9 的统一时间序列 x=[1 1 1 1 3 3 2 2 2 1]
:
还可以查看一些强化学习技术(查看不同的折扣方法),例如 TD-learning 和 Q-Learning。
【讨论】:
【参考方案2】:你的推理是正确的。你想用平均值做什么?不知道很难给出任何建议。
也许另一种方法是考虑您的运行平均值 A,当出现新值 V 时,计算新平均值 A' 为 (1-c)*A+c*V,其中 c 介于 0 和1. 这样,较新的刻度具有更强的影响,而旧刻度的影响会随着时间的推移而消散。您甚至可以让 c 取决于自上一个滴答声以来的时间(随着滴答声越来越近,c 变得更小)。
在第一个模型(加权)中,平均值每秒都会有所不同(因为旧读数的权重较低,而新读数的权重较高)所以它总是在变化,这可能是不可取的。使用第二种方法时,随着新价格的推出和旧价格从窗口中消失,价格会突然上涨。
【讨论】:
谢谢;根据自上次滴答以来的时间调整 c 是一个好主意。这意味着我可以考虑时间权重,而无需维护很多额外的状态。 该公式称为Brown's simple exponential smoothing。我现在正在 Wikipedia 上读到它,所以我只是想插话。【参考方案3】:在扩展汤姆的答案时,考虑刻度之间的间距的公式可以形式化(关闭刻度的权重相应地较低):
eman = u * eman-1 + (v - u) * xn-1 + (1 - v) * xn
地点:
a = ( tn - tn-1) / T 也就是说,a是到达时间增量与平均间隔的比值
和
u = e-a
和
v = 1(使用前一点),或 v = (1 - u) / a(线性插值>,或 v = u(下一点)
更多信息请参见《高频金融概论》一书的第 59 页。
【讨论】:
【参考方案4】:是的,移动平均线当然会滞后。这是因为它的价值是历史信息:它总结了过去 10 分钟的价格样本。这种平均值本质上是“滞后的”。它有一个内置的五分钟偏移量(因为没有偏移量的框平均值将基于 +/- 5 分钟,以样本为中心)。如果价格长期处于A,然后变化一次到B,平均需要5分钟才能达到(A+B)/2。
如果您想对一个函数进行平均/平滑而不在域中发生任何变化,则权重必须均匀分布在样本点周围。但这对于实时发生的价格是不可能的,因为未来的数据不可用。
如果您希望最近的更改(如 D)产生更大的影响,请使用对最近数据或更短时间段赋予更大权重的平均值,或两者兼而有之。
平滑数据的一种方法是简单地使用单个累加器(“平滑估计器”)E
并定期对数据采样S
。 E
更新如下:
E = E + K(S - E)
即将当前价格样本 S 与估计量 E 之间的差值 K(介于 0 和 1 之间)加到 E 中。假设价格长时间处于 A 位置,使得 E 处于 A 位置,然后突然变化到 B。估计器将以指数方式开始向 B 移动(如加热/冷却、电容器的充电/放电等)。一开始它会跳得很大,然后增量越来越小。它移动的速度取决于 K。如果 K 为 0,则估计器根本不移动,如果 K 为 1,它会立即移动。使用 K,您可以调整对估计器与新样本的权重。更多的权重被隐式地赋予最近的样本,样本窗口基本上延伸到无穷大:E 基于曾经出现的每个值样本。当然,非常旧的那些对当前值几乎没有影响。一个非常简单,漂亮的方法。
【讨论】:
这和汤姆的回答一样。他的估计器新值的公式是(1 - K)E + KS
,在代数上与E + K(S - E)
相同:它是当前估计器E
和新样本S
之间的“线性混合函数”,其中的值K
[0, 1] 控制混合。以这种方式编写它既好又有用。如果 K 为 0.7,我们取 S 的 70% 和 E 的 30%,这与将 E 和 S 之间的差值的 70% 加回 E 相同。以上是关于计算时间加权移动平均线的主要内容,如果未能解决你的问题,请参考以下文章