我正在为外汇市场设计一个自动化交易软件。在MYSQL数据库中,我每隔5分钟就有几年的市场数据。除了价格和时间,我还有5个不同的指标来衡量这个数据。
[Time|Price|M1|M2|M3|M4|M5]
x ~400,0000Time是主键,M1到M5是不同的度量标准(例如移动平均值的标准差或斜率)。
给定输入M1、M2、M3、M4和M5,如何有效地定位最近的5,000个邻居?请注意,每个指标都是浮点数,并且具有不同的分布/范围。
发布于 2011-08-09 22:08:22
我不知道你怎么确定最近的邻居。似乎你可以在每个指标之间做一个绝对值的差值,然后把它们加起来。(如果没有绝对值,您可能会有两个指标相距甚远,但却相互抵消。)
因此,最近的邻居将被定义为具有此任务中的最低值:
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)https://stackoverflow.com/questions/6994876
复制相似问题