如何防止一系列整数经常具有相同的值

jav*_*red 1 algorithm hft

我有“在线”系列整数,所以每隔几毫秒我就有一个新数字。频率未指定 - 有时我有很多数字,有时我没有数字。

实际上,这些数字就是所谓的股票“真实价格”。我在我的交易应用程序中使用它。

现在我只使用最后一个数字作为“真实价格”,所以我根本不跟踪系列。但是这种方法存在一些问题。我们来看看这个系列:

  1. 98; 最后= 98
  2. 100; 最后= 100
  3. 101; 最后= 101
  4. 100; 最后= 100
  5. 101; 最后= 101
  6. 100; 最后= 100
  7. 101; 最后= 101
  8. 100; 最后= 100
  9. 101; 最后= 101
  10. 100; 最后= 100
  11. 99; 最后= 99
  12. 98; 最后= 98

问题是,在很短的时间内,我的“真实价格”从 100 变为 101 并返回太多次。真实价格的每一次变化都意味着很多工作(重新计算、下订单等),所以我不需要像那样改变真实价格。此更改 (100-101-100-101) 是由于“测量问题”造成的,我需要对其进行过滤。我无法修复“测量”,所以我必须在这里修复它。

其中一种方法是使用“3LastAverage”算法:

  1. 98; 3lastAverage = 98
  2. 100; 3lastAverage = 99
  3. 101; 3lastAverage = 99.67 => 100
  4. 100; 3lastAverage = 100.33 => 100
  5. 101; 3lastAverage = 101
  6. 100; 3lastAverage = 100
  7. 101; 3lastAverage = 101
  8. 100; 3lastAverage = 100
  9. 101; 3lastAverage = 101
  10. 100; 3lastAverage = 100
  11. 99; 3lastAverage = 100
  12. 98; 3lastAverage = 99

正如你所看到的,这种方法并不总是有效,我仍然有 100-101-100 的问题。可能我可以使用更多的数字来计算“平均值”……但由于这样的例子,这种方法对我不起作用:

  1. 99; 3lastAverage = 99(我想要 99)
  2. 100; 3lastAverage = 100(我想要 100)
  3. 101; 3lastAverage = 100(我想要 101)
  4. 102; 3lastAverage = 101(我想要 102)
  5. 103; 3lastAverage = 103(我想要 103)

一般来说,当事情“OK”时,我需要 truePrice 只是最后一个数字!

因此,具有“在线”系列整数,我需要计算该系列的所谓“真实值”,它以这种方式定义:

  • 如果一切正常,那么这只是最后一个数字
  • 如果系列中有太多相同的数字(因为测量问题),那么“真值”不应该经常变化。应该使用最合适的值

我的建议是:

  • 只是禁止“真实值”每秒超过一次相同的价格。

例如:

  1. 0.000 : 98; 真值 = 98
  2. 0.100 : 100; 真值 = 100
  3. 0.200:101;真值 = 101
  4. 0.300 : 100; 真值 = 101(100 已在 0.2 秒前的步骤 2 中使用)
  5. 0.400:98;真值 = 101(98 已在 0.4 秒前的步骤 1 中使用)
  6. 0.500 : 99; 真值 = 99
  7. 0.600 : 100; 真值 = 99(0.5 秒前在第 2 步使用了 100)
  8. 1.500 : 101; 真值 = 101(自使用 101 以来已超过一秒)。

然而,这种方法也有这样的“错误”:

  1. 99 吨 = 99
  2. 100 吨 = 100
  3. 101 吨 = 101
  4. 102 吨 = 102
  5. 103 吨 = 103
  6. 102 吨 = 103
  7. 101 吨 = 103
  8. 100 吨 = 103
  9. 99 吨 = 103
  10. 98 吨 = 98
  11. 97 吨 = 97

这里的问题是“tp”在 103 级“冻结”了太长时间。

这么大的问题我真的很抱歉。但可能有人正在解决密切的问题并且可以分享经验。我的主要问题是我确实需要同时解决两个相反的问题:

  • “真实价格”必须是一般条件下的“最后”值
  • “真实价格”不应该经常更改(所以我需要以一种或另一种方式使用以前的值)
  • 也很难说我们什么时候有“一般”条件,什么时候有“测量问题”

所以我的问题真的很模糊,我只是希望有人试图解决类似的问题。一如既往,应该使用“常识”来解决这个问题。

Gar*_*ees 5

您想对价格的长期(低频)变化做出反应,但忽略小的短期(高频)波动。所以你需要的是一个低通滤波器

有许多不同种类的具有不同特性的低通滤波器。移动平均是一种低通滤波器,但它有一个问题(你观察到)它用平滑换滞后(为了平滑高频波动,你需要在很长的序列上平均,但是然后低频变化需要很长时间才能变得明显)。

因此,您可以尝试其他低通滤波器,例如指数加权移动平均,看看它们是否满足您的要求。

关于此任务的另一件事是,根据与移动平均线最接近的整数进行重新计算的决定是一件坏事,因为当移动平均线接近两个整数的中间时,它会放大小波动. (如果移动平均线从 99.49 到 99.51,舍入操作会将这个小波动放大到从 99 到 100 的大波动。)

您应该做的是使用滞后来避免这种响应。当你做一次重新计算时,记录你的移动平均线a的当前值a 0,并且在移动平均线a移动了至少 ?之前不要再做一次重新计算,即 | 一个 ? 一个0 | ? ?.