input Morning_Start_Time = 0935;
input Morning_End_Time = 1005;
input Afternoon_Start_Time = 1235;
input Afternoon_End_Time = 1305;
input End_Of_Day = 1630;
######################################
def Morning_Session = if SecondsFromTime(Morning_Start_Time) >= 0 and SecondsTillTime(Morning_End_Time) >= 0 then 1 else Double.NaN;
def Afternoon_Session = if SecondsFromTime(Afternoon_Start_Time) >= 0 and SecondsTillTime(Afternoon_End_Time) >= 0 then 1 else Double.NaN;
######################################
def Morning_Upper;
if SecondsTillTime(End_Of_Day) == 0 {
Morning_Upper = Double.NaN;
}else if secondsFromTime(Morning_Start_Time) == 0 {
Morning_Upper = high;
}else if Morning_Session and high>=Morning_Upper[1]{
Morning_Upper = high;
}else{
Morning_Upper = Morning_Upper[1];}
def Morning_Lower;
if SecondsTillTime(End_Of_Day) == 0 {
Morning_Lower = Double.NaN;
}else if secondsFromTime(Morning_Start_Time) == 0 {
Morning_Lower = low;
}else if Morning_Session and low<=Morning_Lower[1]{
Morning_Lower = low;
}else{
Morning_Lower = Morning_Lower[1];}
def Aft_Upper;
if SecondsTillTime(End_Of_Day) == 0 {
Aft_Upper = Double.NaN;
}else if secondsFromTime(Afternoon_Start_Time) == 0 {
Aft_Upper = high;
}else if Afternoon_Session and high>=Aft_Upper[1]{
Aft_Upper = high;
}else{
Aft_Upper = Aft_Upper[1];}
def Aft_Lower;
if SecondsTillTime(End_Of_Day) == 0 {
Aft_Lower = Double.NaN;
}else if secondsFromTime(Afternoon_Start_Time) == 0 {
Aft_Lower = low;
}else if Afternoon_Session and low<=Aft_Lower[1]{
Aft_Lower = low;
}else{
Aft_Lower = Aft_Lower[1];}
######################################
def Morning_Session_StartBar = if SecondsFromTime(Morning_Start_Time) == 0 then BarNumber() else Morning_Session_StartBar[1];
def Morning_Session_EndBar = fold i = 0 to AbsValue(BarNumber()) while !IsNaN(GetValue(Morning_Session, -i)) do GetValue(BarNumber(), -i);
def Morning_Session_Length = 1 + (Morning_Session_EndBar - Morning_Session_StartBar);
def Morning_Session_High = fold ih = 0 to AbsValue(Morning_Session_Length) while !IsNaN(GetValue(Morning_Session, -ih)) do GetValue(Morning_Upper, -ih);
def Morning_Session_Low = fold il = 0 to AbsValue(Morning_Session_Length) while !IsNaN(GetValue(Morning_Session, -il)) do GetValue(Morning_Lower, -il);
def Afternoon_Session_StartBar = if SecondsFromTime(Afternoon_Start_Time) == 0 then BarNumber() else Afternoon_Session_StartBar[1];
def Afternoon_Session_EndBar = fold j = 0 to AbsValue(BarNumber()) while !IsNaN(GetValue(Afternoon_Session, -j)) do GetValue(BarNumber(), -j);
def Afternoon_Session_Length = 1 + (Afternoon_Session_EndBar - Afternoon_Session_StartBar);
def Afternoon_Session_High = fold jh = 0 to AbsValue(Afternoon_Session_Length) while !IsNaN(GetValue(Afternoon_Session, -jh)) do GetValue(Aft_Upper, -jh);
def Afernoon_Session_Low = fold jl = 0 to AbsValue(Afternoon_Session_Length) while !IsNaN(GetValue(Afternoon_Session, -jl)) do GetValue(Aft_Lower, -jl);
######################################
plot Mupper = if !IsNaN(Morning_Session) then Morning_Session_High else Double.NaN;
Mupper.SetDefaultColor(Color.YELLOW);
Mupper.SetStyle(Curve.SHORT_DASH);
plot Mlower = if !IsNaN(Morning_Session) then Morning_Session_Low else Double.NaN;
Mlower.SetDefaultColor(Color.YELLOW);
Mlower.SetStyle(Curve.SHORT_DASH);
plot Aftupper = if !IsNaN(Afternoon_Session) then Afternoon_Session_High else Double.NaN;
Aftupper.SetDefaultColor(Color.BLUE);
Aftupper.SetStyle(Curve.SHORT_DASH);
plot Aftlower = if !IsNaN(Afternoon_Session) then Afernoon_Session_Low else Double.NaN;
Aftlower.SetDefaultColor(Color.BLUE);
Aftlower.SetStyle(Curve.SHORT_DASH);
plot Mupper_Ext = if IsNaN(Morning_Session) then Morning_Upper else Double.NaN;
Mupper_Ext.SetDefaultColor(Color.YELLOW);
Mupper_Ext.SetStyle(Curve.SHORT_DASH);
plot Mlower_Ext = if IsNaN(Morning_Session) then Morning_Lower else Double.NaN;
Mlower_Ext.SetDefaultColor(Color.YELLOW);
Mlower_Ext.SetStyle(Curve.SHORT_DASH);
plot Aftupper_Ext = if IsNaN(Afternoon_Session) then Aft_Upper else Double.NaN;
Aftupper_Ext.SetDefaultColor(Color.BLUE);
Aftupper_Ext.SetStyle(Curve.SHORT_DASH);
plot Aftlower_Ext = if IsNaN(Afternoon_Session) then Aft_Lower else Double.NaN;
Aftlower_Ext.SetDefaultColor(Color.BLUE);
Aftlower_Ext.SetStyle(Curve.SHORT_DASH);