Does exactly what it says on the tin – gives the RSI value for a desired lookback period on a higher timeframe.
Only works up to timeframes of 2 hours (3 and 4 hour timeframes do not work as first bar of the day is sometimes a different duration, e.g. 1 or 2 hours, which messes up the calculations). Make sure obviously that the current timeframe is less than the specified higher timeframe.
// Chart timeframe:
IF Minute > 0 THEN
IF Day = Day[1] THEN
ChartTimeframe = Minute-Minute[1]
ELSIF Day <> Day[1] THEN
ChartTimeframe = Minute
ENDIF
ELSIF Minute = 0 THEN
IF Hour - Hour[1] = 1 THEN
ChartTimeframe = (60-Minute[1])
ELSIF Hour - Hour[1] > 1 THEN
ChartTimeframe = (Hour-Hour[1]) * 60
ENDIF
ENDIF
IF BarIndex > 0 AND BarIndex[1] > 0 AND ChartTimeFrame <> ChartTimeFrame[1] THEN
ChartTimeFrame = ChartTimeFrame[1]
ENDIF
//
StartHour = 7
// No. of Closes to go back for each higher timeframe:
ResHTF = (Hour-StartHour) MOD MAX((HigherTimeFrame/60),1)
IF ChartTimeFrame > 0 THEN
Calc1 = Minute MOD HigherTimeFrame
Calc2 = Minute MOD ChartTimeFrame
Pf1 = (ResHTF[1]*60) + (((Calc1-Calc2)/ChartTimeFrame)+1)[1]
ENDIF
// Higher TF RSI calculation:
IF Pf1 = HigherTimeFrame/ChartTimeFrame THEN
Change = Close-Close[Pf1]
ELSE
Change = 0
ENDIF
IF Pf1 = HigherTimeFrame/ChartTimeFrame AND Change >= 0 THEN
Gain = Change
GainMarker = 1
ELSE
Gain = 0
GainMarker = 0
ENDIF
IF Pf1 = HigherTimeFrame/ChartTimeFrame AND Change < 0 THEN
Losss = ABS(Change)
LossMarker = 1
ELSE
Losss = 0
LossMarker = 0
ENDIF
IF Pf1 = (HigherTimeFrame/ChartTimeFrame) THEN
GainSMA = Summation[(ROUND(HigherTimeFrame/ChartTimeFrame)*(per-1))+Pf1](Gain)/Summation[(ROUND(HigherTimeFrame/ChartTimeFrame)*(per-1))+Pf1](GainMarker)
LossSMA = Summation[(ROUND(HigherTimeFrame/ChartTimeFrame)*(per-1))+Pf1](Losss)/Summation[(ROUND(HigherTimeFrame/ChartTimeFrame)*(per-1))+Pf1](LossMarker)
ELSE
GainSMA = 0
LossSMA = 0
ENDIF
IF Pf1 = (HigherTimeFrame/ChartTimeFrame) AND BarIndex = (per*(HigherTimeFrame/ChartTimeFrame)) THEN
AverageGain = (Gain+((per-1)*GainSMA[Pf1]))/per
AverageLoss = (Losss+((per-1)*LossSMA[Pf1]))/per
ELSIF Pf1 = (HigherTimeFrame/ChartTimeFrame) AND BarIndex > (per*(HigherTimeFrame/ChartTimeFrame)) THEN
AverageGain = (Gain+((per-1)*AverageGain[Pf1]))/per
AverageLoss = (Losss+((per-1)*AverageLoss[Pf1]))/per
ELSE
AverageGain = 0
AverageLoss = 0
ENDIF
IF Pf1 = (HigherTimeFrame/ChartTimeFrame) THEN
RS = AverageGain/AverageLoss
ELSE
RS = 0
ENDIF
IF Pf1 = (HigherTimeFrame/ChartTimeFrame) THEN
IF AverageLoss = 0 THEN
MyRSI = 100
ELSIF AverageLoss > 0 THEN
MyRSI = 100-(100/(1+RS))
ENDIF
ENDIF
UpperBound = ub
Centreline = cl
LowerBound = lb
RETURN MyRSI COLOURED(0, 0, 255) AS "Higher TF RSI", UpperBound COLOURED(0, 0, 0) AS "Upper bound", Centreline COLOURED(0, 0, 0) AS "Centre line", LowerBound COLOURED(0, 0, 0) AS "Lower bound"
// Gain COLOURED(0, 255, 0) AS "Gain", Losss COLOURED(255, 0, 0) AS "Loss", GainMarker COLOURED(0, 0, 0) AS "Gain marker", LossMarker COLOURED(0, 0, 0) AS "Loss marker", GainSMA COLOURED(0, 255, 0) AS "Gain SMA", LossSMA COLOURED(255, 0, 0) AS "Loss SMA", AverageGain COLOURED(0, 255, 0) AS "Average Gain", AverageLoss COLOURED(255, 0, 0) AS "Average Loss",