#// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
#// © Keanu_ritz
#indicator("Pi - Intraday High-Low Predictor", overlay=true)
# Converted by Sam4Cok@Samer800 - 11/2023
input showHistoricalRanges = yes; # 'Show Historical Predicted High-Low Range'
input showDayHigh = yes; # 'Show Predicted-High from Day-Low'
input showDayLow = yes; # 'Show Predicted-Low from Day-High'
input OpeningRangePeriod = AggregationPeriod.FIVE_MIN;# "Opening Range period"
input highlightRange = yes;#(true, title='Fill Range Predicted High-Low'
def na = Double.NaN;
def last = isNaN(Close);
def pi = Double.Pi;
def YYYYMMDD = GetYYYYMMDD();
def today = GetDay() == GetLastDay();
def showHDHLR = !last[5] and today;
def is_Newbar = YYYYMMDD!=YYYYMMDD[1];
def ODay = Open(Period = "DAY");
def CDay = Close(Period = "DAY");
def HDay = High(Period = "DAY");
def LDay = Low(Period = "DAY");
def hTF = High(Period = OpeningRangePeriod);
def lTF = low(Period = OpeningRangePeriod);
def Dopen = if is_Newbar then ODay else Dopen[1];
def Dclose = if is_Newbar then CDay else Dclose[1];
def dhigh = if is_Newbar then HDay else dhigh[1];
def dlow = if is_Newbar then LDay else dlow[1];
def _High = if is_Newbar then hTF else _High[1];
def _Low = if is_Newbar then lTF else _Low[1];
def ORHigh = _High;
def ORLow = _Low;
def ORange = ORHigh - ORLow;
def DRange = ORange * Pi;
def DsRange = DRange / 2;
def DLRange = DRange + DsRange;
def DsrHigh = dlow + DsRange;
def DrHigh = dlow + DRange;
def DLrHigh = dlow + DLRange;
def DsrLow = dhigh - DsRange;
def DrLow = dhigh - DRange;
def DLrLow = dhigh - DLRange;
def _piDsrHigh; def _piDrHigh; def _piDLrHigh;
if showHistoricalRanges and !last and !today {
_piDsrHigh = DsrHigh;
_piDrHigh = DrHigh;
_piDLrHigh = DLrHigh;
} else {
_piDsrHigh = na;
_piDrHigh = na;
_piDLrHigh = na;
}
def _piDsrLow; def _piDrLow; def _piDLrLow;
if showHistoricalRanges and !last and !today {
_piDsrLow = DsrLow;
_piDrLow = DrLow;
_piDLrLow = DLrLow;
} else {
_piDsrLow = na;
_piDrLow = na;
_piDLrLow = na;
}
plot pDsrHigh = if showDayHigh and showHDHLR then DsrHigh else na;#, title='Small Range - Predicted High'
plot pDrHigh = if showDayHigh and showHDHLR then DrHigh else na;#, title='Range - Predicted High'
plot pDLrHigh = if showDayHigh and showHDHLR then DLrHigh else na;#, title='Large Range - Predicted High'
plot pDsrLow = if showDayLow and showHDHLR then DsrLow else na;#, title='Small Range - Predicted Low'
plot pDrLow = if showDayLow and showHDHLR then DrLow else na;#;#, title='Range - Predicted Low'
plot pDLrLow = if showDayLow and showHDHLR then DLrLow else na;#, title='Large Range - Predicted Low'
pDsrHigh.SetDefaultColor(Color.DARK_GREEN);
pDrHigh.SetDefaultColor(Color.DARK_GREEN);
pDLrHigh.SetDefaultColor(Color.DARK_GREEN);
pDsrLow.SetDefaultColor(Color.PLUM);
pDrLow.SetDefaultColor(Color.PLUM);
pDLrLow.SetDefaultColor(Color.PLUM);
plot piDsrHigh = _piDsrHigh;
plot piDrHigh = _piDrHigh;
plot piDLrHigh = _piDLrHigh;
plot piDsrLow = _piDsrLow;
plot piDrLow = _piDrLow;
plot piDLrLow = _piDLrLow;
piDsrHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
piDrHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
piDLrHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
piDsrLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
piDrLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
piDLrLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
piDsrHigh.SetDefaultColor(Color.CYAN);
piDrHigh.SetDefaultColor(Color.CYAN);
piDLrHigh.SetDefaultColor(Color.CYAN);
piDsrLow.SetDefaultColor(Color.MAGENTA);
piDrLow.SetDefaultColor(Color.MAGENTA);
piDLrLow.SetDefaultColor(Color.MAGENTA);
AddCloud(if highlightRange and !last then DrHigh else na, DrLow, Color.DARK_GRAY, Color.DARK_GRAY);
#-- END OF CODE