在我的数据库中有数十万行。我正在尝试计算股票或外汇的 RSI。
的公式RSI(14)
是:
100 - (100 / 1 + RS )
RS 是平均收益/平均损失。
该公式回顾过去的 14 行(包括当前行),并对有增益(或向上移动)的行的值进行平均,并将该平均值除以有损失的行的平均值。
我在 MySQL 中遇到的问题是让它选择前 14 行的平均增益和平均损失。这在 Excel 中很容易做到。在 Excel 中,我创建了一个分析是否有增益或损失的列,然后我使用AVERAGEIF(Range,Criteria,Average_Range)
. 完全没有问题。但是 Excel 无法处理我必须分析的大量行。
我想过这样的事情:
SELECT *,
id,
(SELECT 10000 * Avg(close - open)
FROM `2011`
WHERE id <= 25
AND id >= ( 25 - 13 )
AND ( close - open ) >= 0) / (SELECT 10000 * Avg(open - close)
FROM `2011`
WHERE id <= 25
AND id >= ( 25 - 13 )
AND ( open - close ) > 0)
FROM `2011`
LIMIT 50
限制 50 只是为了保持可控。但这并没有达到我想要的效果。它的数学部分恰到好处,但它对每一行重复相同的数字。
因此,当它位于第 25 行时,它会查看第 12 到 25 行。然后对于第 26 行,它会查看第 13 到 26 行,依此类推,这将是每一行的新数字。相反,上面的 SELECT 语句在最后一列中重复相同的数字,这对于每一行应该是不同的,因为它的范围与其他所有内容不同。