计算时间加权移动平均线

时间:2012-04-14 21:35:02

标签: algorithm time-series mean moving-average

我有一个时间序列的股票价格,并希望在十分钟的窗口内计算移动平均线(见下图)。由于价格滴答偶尔发生(即它们是周期性的),计算时间加权移动平均线似乎是最公平的。

Time Series

在图中有四个价格变化:A,B,C和D,后三个发生在窗口内。请注意,因为B只在窗口中出现一段时间(例如3分钟),所以A的值仍然有助于计算。

事实上,据我所知,计算应该完全基于A,B和C( D)的值以及它们与下一个点之间的持续时间(或者A的情况:时间窗口开始和B)之间的持续时间。最初D不会有任何影响,因为它的时间加权将为零。 这是正确的吗?

假设这是正确的,我担心的是移动平均线将比非加权计算“滞后”更多(这将直接解释D的值),但是,非加权计算有其自身的缺点:

  • 尽管超出时间窗口,“A”对结果的影响与其他价格一样多。
  • 一连串快速的价格嘀嗒声会严重偏向移动平均线(虽然这可能是可取的?)

任何人都可以就哪种方法看起来最好,或者是否有值得考虑的替代(或混合)方法提出任何建议?

4 个答案:

答案 0 :(得分:9)

这两个建议来自离散的世界,但你可能会从你的特定情况中找到灵感。

看看exponential smoothing。在这种方法中,您引入了平滑因子(α∈[0; 1]),允许您改变最近元素对“预测”值的影响(旧元素被指定为指数递减权重):

取值<子>吨 =αX<子> T 1 +(1 +α)类<子> T 1 ;小号<子> 1 = X <子> 0

我创建了一个简单的动画,指出指数平滑将如何跟踪具有三个不同α= {0.3,0.6,0.9}的统一时间序列x=[1 1 1 1 3 3 2 2 2 1]

enter image description here

还要看一些强化学习技巧(查看不同的折扣方法),例如TD-learningQ-Learning

答案 1 :(得分:4)

你的推理是正确的。你想用什么平均值呢?不知道提供任何建议很难。

也许另一种方法是考虑你的跑动平均值A,当一个新值V进来时,计算新的平均值A'为(1-c)* A + c * V,其中c在0和0之间这样,最近的蜱虫具有更强的影响力,并且旧蜱虫的效果随着时间的推移而消散。您甚至可以依赖于自上次滴答之后的时间(随着滴答越来越近,c越小)。

在第一个模型(加权)中,平均值每秒都不同(因为旧读数的重量较轻,新读数较高)所以它总是在变化,这可能是不可取的。采用第二种方法,随着新价格的推出以及旧价格从窗口消失,价格突然上涨。

答案 2 :(得分:3)

是的,移动平均线当然会滞后。这是因为它的价值是历史信息:它总结了过去10分钟内的价格样本。这种平均本质上是“滞后”。它有一个内置的五分钟偏移(因为没有偏移的盒子平均值将基于+/- 5分钟,以样本为中心)。如果价格长时间处于A,然后一次改为B,则平均值需要5分钟才能到达(A + B)/ 2。

如果要平滑/平滑函数而不在域中进行任何移位,则权重必须均匀分布在采样点周围。但这对于实时发生的价格是不可能的,因为未来的数据不可用。

如果您希望最近的更改(如D)产生更大的影响,请使用平均值,这会对最近的数据或更短的时间段或两者都给予更大的权重。

平滑数据的一种方法是使用单个累加器(“平滑估计器”)E并定期采样数据SE更新如下:

E = E + K(S - E)

即。当前价格样本S和估计量E之间的差值的分数K(在0和1之间)被添加到E.假设价格已经长时间处于A,因此E处于A,然后突然变化估计器将以指数方式开始向B方向移动(如加热/冷却,电容器的充电/放电等)。首先它会产生一个大的跳跃,然后是越来越小的增量。它移动的速度取决于K.如果K为0,则估计器根本不移动,如果K为1,则它立即移动。使用K,您可以调整估算器与新样本的重量。隐含地给予更近期样本更多权重,并且样本窗口基本上扩展到无穷大:E基于曾经发生的每个值样本。虽然当然很老的几乎没有影响当前的价值。一种非常简单,美观的方法。

答案 3 :(得分:3)

在扩展汤姆的答案时,考虑到蜱之间间距的公式可以正式化(关闭蜱的比例相应较低):

ema n = u * ema n-1 +(v - u)* x n-1 +(1 - v) * x n

其中:

a =(t n - t n-1 )/ T
也就是说,a是到达时间的Δ与平均间隔的比率

u = e -a

v = 1(使用前一点)或
v =(1-u)/ a(线性插值&gt;或
v = u(下一点)

更多信息请参阅“高频金融概论”一书的第59页。

相关问题