我正在为外汇市场设计一个自动交易软件。在 MYSQL 数据库中,我每隔五分钟就有多年的市场数据。除了价格和时间,我有 5 个不同的数据指标。
[Time|Price|M1|M2|M3|M4|M5]
x ~400,0000
Time
是主键,M1
通过M5
是不同的指标(例如标准差或移动平均线的斜率)。
M1
给定, M2
, M3
, , 和 M5的输入,M4
我如何有效地定位最近的 5,000 个邻居?请注意,每个指标都是浮点数并且具有不同的分布/范围。
我正在为外汇市场设计一个自动交易软件。在 MYSQL 数据库中,我每隔五分钟就有多年的市场数据。除了价格和时间,我有 5 个不同的数据指标。
[Time|Price|M1|M2|M3|M4|M5]
x ~400,0000
Time
是主键,M1
通过M5
是不同的指标(例如标准差或移动平均线的斜率)。
M1
给定, M2
, M3
, , 和 M5的输入,M4
我如何有效地定位最近的 5,000 个邻居?请注意,每个指标都是浮点数并且具有不同的分布/范围。
我不知道您将如何确定最近的邻居。似乎您可以在每个指标之间做一个绝对值差异并将它们总结起来。(如果没有绝对值,您可能有两个指标相差甚远,但会相互抵消。)
因此,最近的邻居将被定义为具有此任务的最低值:
ABS(M1 - @M1) + ABS(M2 - @M2) + ABS(M3 - @M3) + ABS(M4 - @M4) + ABS(M5 - @M5)
如果这有效,那么查询将是:
SELECT TOP 5000 *
FROM YourTable
ORDER BY ABS(M1 - @M1) + ABS(M2 - @M2) + ABS(M3 - @M3) + ABS(M4 - @M4) + ABS(M5 - @M5)
如果您愿意,您也可以对每个指标进行不同的加权:
SELECT TOP 5000 *
FROM YourTable
ORDER BY 2 * ABS(M1 - @M1) + 5 * ABS(M2 - @M2) + ABS(M3 - @M3) + 3 * ABS(M4 - @M4) + ABS(M5 - @M5)