QuantConnect / Lean

Lean Algorithmic Trading Engine by QuantConnect (Python, C#)
https://lean.io
Apache License 2.0
9.68k stars 3.24k forks source link

Implement Connor's RSI #2678

Open AlexCatarino opened 5 years ago

AlexCatarino commented 5 years ago

Expected Behavior

Connor's RSI is supported.

Actual Behavior

Connor's RSI is not supported: https://www.quantconnect.com/forum/discussion/4824/anyone-have-connors-rsi

Potential Solution

Implement Connor's RSI: https://stockcharts.com/school/doku.php?id=chart_school:trading_strategies:rsi2 https://www.tradingview.com/wiki/Connors_RSI_(CRSI)

Checklist

LouisSzeto commented 1 year ago

spy_crsi.csv

LouisSzeto commented 11 months ago

spy_crsi.csv columns: "SPY close" "Conner RSI"

script:

import talib
import pandas as pd

history = pd.read_csv("https://github.com/QuantConnect/Lean/raw/master/Data/equity/usa/daily/spy.zip",
                       index_col=0, names=["open", "high", "low", "close", "volume"])

close = history.close

# Source: https://www.tradingview.com/support/solutions/43000502017-connors-rsi-crsi/
rsi = talib.RSI(close, 3)
streak = close * 0
for i in range(1, len(close)):
    if streak.iloc[i-1] / close.pct_change().iloc[i] <= 0:
        streak.iloc[i] = 0
    else:
        streak.iloc[i] = streak.iloc[i-1]
    if close.iloc[i] > close.iloc[i-1]:
        streak.iloc[i] = streak.iloc[i] + 1
    elif close.iloc[i] < close.iloc[i-1]:
        streak.iloc[i] = streak.iloc[i] - 1
rsi_streak = talib.RSI(streak, 2)
crsi = ((rsi + rsi_streak + close.pct_change(100)) / 3).to_frame()
crsi["SPY close"] = close
crsi = crsi.iloc[:, [1, 0]].dropna()
crsi.to_csv("spy_crsi.csv", header=False)