declare upper;
def h = high;
def l = low;
def OpeningBell = getTime()[1] < RegularTradingStart(getYYYYMMDD()) and
getTime() > RegularTradingStart(getYYYYMMDD());
def RTH = getTime() >= RegularTradingStart(getYYYYMMDD()) and
getTime() <= RegularTradingEnd(getYYYYMMDD());
def FirstFiveActive = getTime() >= OpeningBell and
getTime() <= RegularTradingStart(getYYYYMMDD()) + 300000;
def SecondFiveActive =
getTime() >= RegularTradingStart(getYYYYMMDD()) + 300000 and
getTime() <= RegularTradingStart(getYYYYMMDD()) + 600000;
def FMF_high = if OpeningBell
then h
else if FirstFiveActive and
h > FMF_high[1]
then h
else FMF_high[1];
def FMF_low = if OpeningBell
then l
else if FirstFiveActive and
l < FMF_low[1]
then l
else FMF_low[1];
plot ORhigh = if !FirstFiveActive and RTH and FMF_high != 0
then FMF_high
else Double.NaN;
ORhigh.SetStyle(Curve.LONG_DASH);
ORhigh.SetLineWeight(1);
ORhigh.SetDefaultColor(Color.GREEN);
plot ORlow = if !FirstFiveActive and RTH and FMF_low != 0
then FMF_low
else Double.NaN;
ORlow.SetStyle(Curve.LONG_DASH);
ORlow.SetLineWeight(1);
ORlow.SetDefaultColor(Color.RED);
def Swing_Low = if SecondFiveActive and (l < FMF_Low and l < l[1])
then l
else if SecondFiveActive and l < Swing_Low[1]
then l
else Swing_Low[1];
def Swing_High = if SecondFiveActive and (h > FMF_High and h > h[1])
then h
else if SecondFiveActive and h > Swing_High[1]
then h
else Swing_High[1];
# plot LowSwing = if !FirstFiveActive and !SecondFiveActive and RTH and Swing_low != 0
plot LowSwing = if !FirstFiveActive and RTH
then Swing_Low
else Double.NaN;
plot HighSwing = if !FirstFiveActive and RTH
then Swing_high
else Double.NaN;
def swing = if firstFiveActive or SecondFiveActive
then double.nan
else
if !isnan(swing)
then swing[1]
else
if l < FMF_low
then l - (FMF_high - FMF_low)
else if h > fmf_high
then h + (FMF_high - FMF_low)
else
double.nan;
plot Flip = if !firstFiveActive and !secondFiveActive and RTH then swing else double.nan;
# plot flip = swing;