cryptowatch.de (私の場合は LTC-EUR)の RSI 値を正確に反映したいので、RSI の計算方法を説明しているサイトstockcharts.comを使用して、計算機を Javascript (ノード) で記述しました。
これまでの私のコード:
// data is an array of open-prices in descending date order (the current price is the last element)
function calculateRSI(data) {
data = data.reverse(); // Reverse to handle it better
let avgGain = 0;
let aveLoss = 0;
// Calculate first 14 periods
for (let i = 0; i < 14; i++) {
const ch = data[i] - data[i + 1];
if (ch >= 0) {
avgGain += ch;
} else {
aveLoss -= ch;
}
}
avgGain /= 14;
aveLoss /= 14;
// Smooth values 250 times
for (let i = 14; i < 264; i++) {
const ch = data[i] - data[i + 1];
if (ch >= 0) {
avgGain = (avgGain * 13 + ch) / 14;
aveLoss = (aveLoss * 13) / 14;
} else {
avgGain = (avgGain * 13) / 14;
aveLoss = (aveLoss * 13 - ch) / 14;
}
}
// Calculate relative strength index
const rs = avgGain / aveLoss;
return 100 - 100 / (1 + rs);
}
しかし、結果は常に cryptowatch.deに表示される値とはかけ離れています。何が問題なのですか? それを正しく計算する方法は?(他のプログラミング言語での投稿もOK)
@jingxに感謝しますが、結果はまだ間違っています