我有“在线”系列整数,所以每隔几毫秒我就有一个新数字。频率未指定 - 有时我有很多数字,有时我没有数字。
实际上,这些数字就是所谓的股票“真实价格”。我在我的交易应用程序中使用它。
现在我只使用最后一个数字作为“真实价格”,所以我根本不跟踪系列。但是这种方法存在一些问题。我们来看看这个系列:
问题是,在很短的时间内,我的“真实价格”从 100 变为 101 并返回太多次。真实价格的每一次变化都意味着很多工作(重新计算、下订单等),所以我不需要像那样改变真实价格。此更改 (100-101-100-101) 是由于“测量问题”造成的,我需要对其进行过滤。我无法修复“测量”,所以我必须在这里修复它。
其中一种方法是使用“3LastAverage”算法:
正如你所看到的,这种方法并不总是有效,我仍然有 100-101-100 的问题。可能我可以使用更多的数字来计算“平均值”……但由于这样的例子,这种方法对我不起作用:
一般来说,当事情“OK”时,我需要 truePrice 只是最后一个数字!
因此,具有“在线”系列整数,我需要计算该系列的所谓“真实值”,它以这种方式定义:
我的建议是:
例如:
然而,这种方法也有这样的“错误”:
这里的问题是“tp”在 103 级“冻结”了太长时间。
这么大的问题我真的很抱歉。但可能有人正在解决密切的问题并且可以分享经验。我的主要问题是我确实需要同时解决两个相反的问题:
所以我的问题真的很模糊,我只是希望有人试图解决类似的问题。一如既往,应该使用“常识”来解决这个问题。
您想对价格的长期(低频)变化做出反应,但忽略小的短期(高频)波动。所以你需要的是一个低通滤波器。
有许多不同种类的具有不同特性的低通滤波器。移动平均是一种低通滤波器,但它有一个问题(你观察到)它用平滑换滞后(为了平滑高频波动,你需要在很长的序列上平均,但是然后低频变化需要很长时间才能变得明显)。
因此,您可以尝试其他低通滤波器,例如指数加权移动平均,看看它们是否满足您的要求。
关于此任务的另一件事是,根据与移动平均线最接近的整数进行重新计算的决定是一件坏事,因为当移动平均线接近两个整数的中间时,它会放大小波动. (如果移动平均线从 99.49 到 99.51,舍入操作会将这个小波动放大到从 99 到 100 的大波动。)
您应该做的是使用滞后来避免这种响应。当你做一次重新计算时,记录你的移动平均线a的当前值a 0,并且在移动平均线a移动了至少 ?之前不要再做一次重新计算,即 | 一个 ? 一个0 | ? ?.