Higher Timeframe RSI

Category: Indicators By: JMat45 Created: October 23, 2017, 10:31 AM
October 23, 2017, 10:31 AM
Indicators
5 Comments

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",

 

Download
Filename: Higher-TF-RSI.itf
Downloads: 135
JMat45 Senior
Currently debugging life, so my bio is on hold. Check back after the next commit for an update.
Author’s Profile

Comments

Logo Logo
Loading...