私のDBには数十万行あります。株式または外国為替の RSI を計算しようとしています。
の式RSI(14)
は次のとおりです。
100 - (100 / 1 + RS )
RS は平均利得 / 平均損失です。
この数式は、過去 14 行 (現在の行を含む) を振り返り、利益 (または上昇) があった行の値を平均し、その平均を損失があった行の平均で割ります。
私が MySQL で抱えている問題は、前の 14 行の平均ゲインと平均損失を選択することです。これはエクセルで簡単にできます。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 ステートメントは、最後の列で同じ数値を繰り返します。これは、他のすべてのものとは異なる範囲を持っているため、行ごとに異なるはずです。