1

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

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

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

  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)

一般来说,当事情进展顺利时,我需要 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 级“冻结”了太长时间。

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

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

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

4

1 回答 1

5

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

有许多不同种类的具有不同特性的低通滤波器。移动平均线是一种低通滤波器,但它有一个问题(您观察到),它用平滑换取滞后(为了平滑高频波动,您需要在相当长的序列上进行平均,但随后低频变化需要很长时间才能显现出来)。

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

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

你应该做的是使用滞后来避免这种响应。重新计算时,记录移动平均 a 的当前值 a 0 ,直到移动平均a至少移动了 ε,即 | 一个 - <em>一个0 | ≥ε。

于 2012-12-21T14:52:15.857 回答