{"slug":"why-rsi-differs-between-platforms","qid":"rsi_two_ways","label":"RSI(14) on identical closes: Wilder's smoothing against a simple average","post_title":"Why Your RSI Differs Between Platforms","post_url":"/blog/why-rsi-differs-between-platforms#q-rsi_two_ways","columns":["date","rsi_wilder","rsi_simple","rsi_spread"],"rows":[{"date":"2026-04-06","rsi_wilder":54.41,"rsi_simple":59.73,"rsi_spread":5.32},{"date":"2026-04-07","rsi_wilder":46.88,"rsi_simple":48.96,"rsi_spread":2.08},{"date":"2026-04-08","rsi_wilder":53.81,"rsi_simple":62.41,"rsi_spread":8.6},{"date":"2026-04-09","rsi_wilder":55.65,"rsi_simple":65.7,"rsi_spread":10.05},{"date":"2026-04-10","rsi_wilder":55.63,"rsi_simple":67.47,"rsi_spread":11.84},{"date":"2026-04-13","rsi_wilder":53.64,"rsi_simple":61.5,"rsi_spread":7.86},{"date":"2026-04-14","rsi_wilder":53.05,"rsi_simple":60.65,"rsi_spread":7.6},{"date":"2026-04-15","rsi_wilder":62.24,"rsi_simple":67.1,"rsi_spread":4.86},{"date":"2026-04-16","rsi_wilder":57.42,"rsi_simple":62.18,"rsi_spread":4.76},{"date":"2026-04-17","rsi_wilder":64.16,"rsi_simple":73.36,"rsi_spread":9.2},{"date":"2026-04-20","rsi_wilder":66.52,"rsi_simple":78.4,"rsi_spread":11.88},{"date":"2026-04-21","rsi_wilder":56.72,"rsi_simple":63.39,"rsi_spread":6.67},{"date":"2026-04-22","rsi_wilder":62.73,"rsi_simple":67.06,"rsi_spread":4.33},{"date":"2026-04-23","rsi_wilder":62.94,"rsi_simple":67.04,"rsi_spread":4.1},{"date":"2026-04-24","rsi_wilder":59.7,"rsi_simple":62.01,"rsi_spread":2.31},{"date":"2026-04-27","rsi_wilder":55.24,"rsi_simple":64.43,"rsi_spread":9.19},{"date":"2026-04-28","rsi_wilder":58.26,"rsi_simple":62.67,"rsi_spread":4.41},{"date":"2026-04-29","rsi_wilder":57.53,"rsi_simple":60.63,"rsi_spread":3.1},{"date":"2026-04-30","rsi_wilder":58.74,"rsi_simple":61.64,"rsi_spread":2.9},{"date":"2026-05-01","rsi_wilder":66.43,"rsi_simple":69.31,"rsi_spread":2.88},{"date":"2026-05-04","rsi_wilder":61.76,"rsi_simple":65.75,"rsi_spread":3.99},{"date":"2026-05-05","rsi_wilder":67.26,"rsi_simple":65.59,"rsi_spread":1.67},{"date":"2026-05-06","rsi_wilder":69.41,"rsi_simple":71.07,"rsi_spread":1.66},{"date":"2026-05-07","rsi_wilder":69.31,"rsi_simple":67.06,"rsi_spread":2.25},{"date":"2026-05-08","rsi_wilder":72.94,"rsi_simple":68.94,"rsi_spread":4},{"date":"2026-05-11","rsi_wilder":71.94,"rsi_simple":78.04,"rsi_spread":6.1},{"date":"2026-05-12","rsi_wilder":73.25,"rsi_simple":75.51,"rsi_spread":2.26},{"date":"2026-05-13","rsi_wilder":75.59,"rsi_simple":77.53,"rsi_spread":1.94},{"date":"2026-05-14","rsi_wilder":74.45,"rsi_simple":80.51,"rsi_spread":6.06},{"date":"2026-05-15","rsi_wilder":75.66,"rsi_simple":87.88,"rsi_spread":12.22},{"date":"2026-05-18","rsi_wilder":71.35,"rsi_simple":82.03,"rsi_spread":10.68},{"date":"2026-05-19","rsi_wilder":72.16,"rsi_simple":83.54,"rsi_spread":11.38},{"date":"2026-05-20","rsi_wilder":74.41,"rsi_simple":84.3,"rsi_spread":9.89},{"date":"2026-05-21","rsi_wilder":76.15,"rsi_simple":81.87,"rsi_spread":5.72},{"date":"2026-05-22","rsi_wilder":78.36,"rsi_simple":90.48,"rsi_spread":12.12},{"date":"2026-05-26","rsi_wilder":77.37,"rsi_simple":86.98,"rsi_spread":9.61},{"date":"2026-05-27","rsi_wilder":78.85,"rsi_simple":86.65,"rsi_spread":7.8},{"date":"2026-05-28","rsi_wilder":79.79,"rsi_simple":87.5,"rsi_spread":7.71},{"date":"2026-05-29","rsi_wilder":78.77,"rsi_simple":83.46,"rsi_spread":4.69},{"date":"2026-06-01","rsi_wilder":67.01,"rsi_simple":70.58,"rsi_spread":3.57},{"date":"2026-06-02","rsi_wilder":73.58,"rsi_simple":75.58,"rsi_spread":2},{"date":"2026-06-03","rsi_wilder":65.74,"rsi_simple":63.98,"rsi_spread":1.76},{"date":"2026-06-04","rsi_wilder":66.5,"rsi_simple":65.85,"rsi_spread":0.65},{"date":"2026-06-05","rsi_wilder":60.72,"rsi_simple":58.28,"rsi_spread":2.44},{"date":"2026-06-08","rsi_wilder":53.29,"rsi_simple":53.99,"rsi_spread":0.7},{"date":"2026-06-09","rsi_wilder":42.64,"rsi_simple":42.51,"rsi_spread":0.13},{"date":"2026-06-10","rsi_wilder":43.78,"rsi_simple":40.11,"rsi_spread":3.67},{"date":"2026-06-11","rsi_wilder":48.12,"rsi_simple":41.53,"rsi_spread":6.59},{"date":"2026-06-12","rsi_wilder":44.05,"rsi_simple":34.19,"rsi_spread":9.86},{"date":"2026-06-15","rsi_wilder":49.46,"rsi_simple":40.19,"rsi_spread":9.27},{"date":"2026-06-16","rsi_wilder":52.12,"rsi_simple":40.49,"rsi_spread":11.63},{"date":"2026-06-17","rsi_wilder":48.89,"rsi_simple":36.79,"rsi_spread":12.1},{"date":"2026-06-18","rsi_wilder":50.94,"rsi_simple":39.07,"rsi_spread":11.87},{"date":"2026-06-22","rsi_wilder":49.89,"rsi_simple":42.19,"rsi_spread":7.7},{"date":"2026-06-23","rsi_wilder":47.07,"rsi_simple":30.41,"rsi_spread":16.66},{"date":"2026-06-24","rsi_wilder":45.81,"rsi_simple":32.69,"rsi_spread":13.12},{"date":"2026-06-25","rsi_wilder":32.2,"rsi_simple":22.9,"rsi_spread":9.3},{"date":"2026-06-26","rsi_wilder":41.25,"rsi_simple":33.48,"rsi_spread":7.77},{"date":"2026-06-29","rsi_wilder":39.9,"rsi_simple":35.35,"rsi_spread":4.55},{"date":"2026-06-30","rsi_wilder":46.91,"rsi_simple":49.07,"rsi_spread":2.16}],"shape":"series","sql":"WITH\n    daily AS\n    (\n        SELECT arraySort(groupArray((day, px))) AS pts\n        FROM\n        (\n            SELECT\n                date                  AS day,\n                toFloat64(max(close)) AS px\n            FROM global_markets.stocks_daily_aggs\n            WHERE ticker = 'AAPL'\n              AND date >= '2025-01-02'\n              AND date <= '2026-06-30'\n            GROUP BY day\n        )\n    ),\n    steps AS\n    (\n        SELECT\n            arrayMap(p -> p.1, pts)                                 AS days,\n            arrayPopFront(arrayDifference(arrayMap(p -> p.2, pts))) AS chg\n        FROM daily\n    ),\n    points AS\n    (\n        SELECT\n            days,\n            arrayMap(x -> greatest(x, 0.0),  chg) AS up,\n            arrayMap(x -> greatest(-x, 0.0), chg) AS dn,\n            arrayJoin(arrayMap(k -> toInt64(k), arraySlice(arrayEnumerate(chg), -60))) AS e\n        FROM steps\n    ),\n    averages AS\n    (\n        SELECT\n            days[e + 1] AS day,\n            (arraySum(arraySlice(up, 1, 14)) / 14) * pow(13.0 / 14.0, e - 14)\n                + arraySum(arrayMap((g, j) -> g * pow(13.0 / 14.0, toInt64(j) - 1),\n                      arrayReverse(arraySlice(up, 15, e - 14)),\n                      arrayEnumerate(arraySlice(up, 15, e - 14)))) / 14 AS up_wilder,\n            (arraySum(arraySlice(dn, 1, 14)) / 14) * pow(13.0 / 14.0, e - 14)\n                + arraySum(arrayMap((g, j) -> g * pow(13.0 / 14.0, toInt64(j) - 1),\n                      arrayReverse(arraySlice(dn, 15, e - 14)),\n                      arrayEnumerate(arraySlice(dn, 15, e - 14)))) / 14 AS dn_wilder,\n            arraySum(arraySlice(up, e - 13, 14)) / 14 AS up_simple,\n            arraySum(arraySlice(dn, e - 13, 14)) / 14 AS dn_simple\n        FROM points\n    )\nSELECT\n    toString(day)                                                         AS date,\n    round(100 - 100 / (1 + up_wilder / greatest(dn_wilder, 0.000001)), 2) AS rsi_wilder,\n    round(100 - 100 / (1 + up_simple / greatest(dn_simple, 0.000001)), 2) AS rsi_simple,\n    round(abs(rsi_wilder - rsi_simple), 2)                                AS rsi_spread\nFROM averages\nORDER BY date","computed_at":"2026-08-17T15:36:40.371039+00:00","elapsed":0.055388423}