input alertPeriodStart = 930; input alertPeriodEnd = 1130; input alertOnBreak = yes; input alertOnPullBack = yes; input numberOfDays = 0; input numberOfYears = 0; input aggregationPeriod = AggregationPeriod.DAY; input showOnlyLastPeriod = yes; def okToPlot = GetLastDay() - numberOfDays <= GetDay() and GetLastYear() - numberOfYears <= GetYear() ; def startCounter = SecondsFromTime(alertPeriodStart); def endCounter = SecondsTillTime(alertPeriodEnd); def alertPeriod = if startCounter >= 0 and endCounter >= 0 then 1 else 0; def regularSessionHours = RegularTradingStart(GetYYYYMMDD()) <= GetTime(); def extendedSessionHours = RegularTradingStart(GetYYYYMMDD()) >= GetTime(); def extendedSessionStart = regularSessionHours[1] and extendedSessionHours; def regularSessionStart = extendedSessionHours[1] and regularSessionHours; def extendedSessionHigh = CompoundValue(1, if extendedSessionStart then high else if extendedSessionHours then Max(high, extendedSessionHigh[1]) else extendedSessionHigh[1], 0); def extendedSessionLow = CompoundValue(1, if extendedSessionStart then low else if extendedSessionHours then Min(low, extendedSessionLow[1]) else extendedSessionLow[1], 0); def regularSessionHigh = CompoundValue(1, if regularSessionStart then high else if regularSessionHours then Max(high, regularSessionHigh[1]) else regularSessionHigh[1], 0); def regularSessionLow = CompoundValue(1, if regularSessionStart then low else if regularSessionHours then Min(low, regularSessionLow[1]) else regularSessionLow[1], 0); def prevPrice = open(period = aggregationPeriod)[-1]; def price = open(period = aggregationPeriod); #---------- Highlight the alert period AddCloud(if okToPlot and alertPeriod then Double.POSITIVE_INFINITY else Double.NaN, if okToPlot and alertPeriod then Double.NEGATIVE_INFINITY else Double.NaN, Color.light_GRAY, Color.BLACK); #---------- Plot the overnight high/low during regular market hours plot overnightHigh = if okToPlot and regularSessionHours then extendedSessionHigh else Double.NaN; overnightHigh.SetDefaultColor(Color.DARK_GREEN); overnightHigh.SetLineWeight(2); plot overnightLow = if okToPlot and regularSessionHours then extendedSessionLow else Double.NaN; overnightLow.SetDefaultColor(Color.DARK_RED); overnightLow.SetLineWeight(2); plot DailyOpen = if showOnlyLastPeriod and !IsNaN(prevPrice) then Double.NaN else price; DailyOpen.SetDefaultColor(Color.DARK_GREEN); Dailyopen.SetLineWeight(2); def breakOfHigh = if regularSessionStart then low < extendedSessionHigh and high > extendedSessionHigh else extendedSessionHigh[1] > regularSessionHigh[1] and regularSessionHigh > extendedSessionHigh; def pullbackToHigh = low[1] > extendedSessionHigh[1] and low < extendedSessionHigh; def pullbackToLow = high[1] < extendedSessionLow[1] and high > extendedSessionLow; def breakOfLow = if regularSessionStart then high > extendedSessionLow and low < extendedSessionLow else extendedSessionLow[1] < regularSessionLow[1] and regularSessionLow < extendedSessionLow; #---------- Throw some alerts in here Alert(alertOnBreak and alertPeriod and breakOfHigh, "Break Above Overnight High", Alert.BAR, Sound.RING);