我有“在线”系列整数,所以每隔几毫秒我就有一个新数字。没有指定频率 - 有时我有很多数字,有时我没有数字。
实际上,这个数字就是所谓的股票“真实价格”。我在我的交易应用程序中使用它。
现在我只使用最后一个数字作为“真实价格”,所以我根本不跟踪系列。但是这种方法存在一些问题。让我们看看这个系列:
- 98; 最后 = 98
- 100; 最后 = 100
- 101; 最后 = 101
- 100; 最后 = 100
- 101; 最后 = 101
- 100; 最后 = 100
- 101; 最后 = 101
- 100; 最后 = 100
- 101; 最后 = 101
- 100; 最后 = 100
- 99; 最后 = 99
- 98; 最后 = 98
问题是在很短的时间内我的“真实价格”从 100 变为 101 并返回太多次。真实价格的每一次变化都意味着大量的工作(重新计算、下订单等),所以我不需要像那样改变真实价格。这种变化(100-101-100-101)是由于“测量问题”,我需要过滤它。我无法修复“测量”,所以我必须在这里修复它。
一种方法是使用“3LastAverage”算法:
- 98; 3lastAverage = 98
- 100; 3lastAverage = 99
- 101; 3lastAverage = 99.67 => 100
- 100; 3lastAverage = 100.33 => 100
- 101; 3lastAverage = 101
- 100; 3lastAverage = 100
- 101; 3lastAverage = 101
- 100; 3lastAverage = 100
- 101; 3lastAverage = 101
- 100; 3lastAverage = 100
- 99; 3lastAverage = 100
- 98; 3lastAverage = 99
如您所见,这种方法并不总是有效,我仍然有 100-101-100 问题。可能我可以使用更多的数字来计算“平均值”......但由于这样的例子,这种方法对我不起作用:
- 99; 3lastAverage = 99(我想要 99)
- 100; 3lastAverage = 100(我想要 100)
- 101; 3lastAverage = 100(我想要 101)
- 102; 3lastAverage = 101(我想要 102)
- 103; 3lastAverage = 103(我想要 103)
一般来说,当事情进展顺利时,我需要 truePrice 只是最后一个数字!
所以,有“在线”系列的整数,我需要计算这个系列的所谓“真值”,它是这样定义的:
- 如果一切正常,那么这只是最后一个数字
- 如果系列中有太多相同的数字(因为测量问题),那么“真实值”不应该经常改变。应使用最合适的值
我的建议是:
- 只是禁止“真实价值”每秒有超过一次相同的价格。
例如:
- 0.000:98;真值 = 98
- 0.100:100;真值 = 100
- 0.200:101;真值 = 101
- 0.300:100;真值 = 101(100 已在 0.2 秒前的步骤 2 中使用)
- 0.400:98;真值 = 101(98 已在 0.4 秒前的步骤 1 中使用)
- 0.500:99;真值 = 99
- 0.600:100;真值 = 99(0.5 秒前在步骤 2 中使用了 100)
- 1.500:101;真值 = 101(自使用 101 以来已过去超过一秒)。
然而,这种方法也有这样的“错误”:
- 99 吨 = 99
- 100 吨 = 100
- 101 吨 = 101
- 102 吨 = 102
- 103 吨 = 103
- 102 吨 = 103
- 101 吨 = 103
- 100 吨 = 103
- 99 吨 = 103
- 98 吨 = 98
- 97 吨 = 97
这里的问题是“tp”在 103 级“冻结”了太长时间。
对于这么大的问题,我真的很抱歉。但可能有人正在解决密切的问题并可以分享经验。我的主要问题是我确实需要同时解决两个相反的问题:
- “真实价格”必须只是一般条件下的“最后”值
- “真实价格”不应该经常改变(所以我需要以一种或另一种方式使用以前的值)
- 也很难说我们什么时候有“一般”条件,什么时候有“测量问题”
所以我的问题真的很模糊,我只是希望有人试图解决这样的问题。一如既往,应该使用“常识”来解决这个问题。