RSI をコーディングしようとしています (これは、API データのフェッチとアルゴリズムを既に学習するための良い方法でした)。
私がデータを取得している API は評判の良い取引所からのものであるため、アルゴリズムが分析している値が正しいことがわかっています。これは良いスタートです。
私が抱えている問題は、計算の結果がその特定の取引所で読み取れるものから完全にずれており、RSI インジケーターも提供していることです (私は彼らが独自のデータを分析していると仮定しているので、私が持っているデータと同じです)。
まったく同じ API を使用して、一目のインジケーターをコードに変換しましたが、今回はすべてが正しいです! RSI の計算が何らかの形で間違っている可能性があると思いますが、何度も確認して再確認しました。
また、すべてのステップが Excel シートのように計算される「リテラル」バージョンのコードもあります。コードはかなりばかげていますが、計算のロジックを検証し、結果は次のコードと同じです。
RSIを計算するコードは次のとおりです。
let period = 14
// Upward Movements and Downward Movements
var upwardMovements : [Double] = []
var downwardMovements : [Double] = []
for idx in 0..<15 {
let diff = items[idx + 1].close - items[idx].close
upwardMovements.append(max(diff, 0))
downwardMovements.append(max(-diff, 0))
}
// Average Upward Movements and Average Downward Movements
let averageUpwardMovement1 = upwardMovements[0..<period].reduce(0, +) / Double(period)
let averageDownwardMovement1 = downwardMovements[0..<period].reduce(0, +) / Double(period)
let averageUpwardMovement2 = (averageUpwardMovement1 * Double(period - 1) + upwardMovements[period]) / Double(period)
let averageDownwardMovement2 = (averageDownwardMovement1 * Double(period - 1) + downwardMovements[period]) / Double(period)
// Relative Strength
let relativeStrength1 = averageUpwardMovement1 / averageDownwardMovement1
let relativeStrength2 = averageUpwardMovement2 / averageDownwardMovement2
// Relative Strength Index
let rSI1 = 100 - (100 / (relativeStrength1 + 1))
let rSI2 = 100 - (100 / (relativeStrength2 + 1))
// Relative Strength Index Average
let relativeStrengthAverage = (rSI1 + rSI2) / 2
BitcoinRelativeStrengthIndex.bitcoinRSI = relativeStrengthAverage
今日の午後 3 時 23 分の測定値は73.93
、私のアルゴリズムと18.74
取引所についてのものです。市場は現在暴落しており、私はさまざまな取引所でさまざまな RSI にアクセスできるため、それらはすべて下に RSI を表示する20
ため、私の計算は外れています。
皆さん、何か考えはありますか?