declare upper; input BarsUsedForRange = 2; input BarsRequiredToRemainInRange = 7; input TargetMultiple = 0.5; input ColorPrice = yes; input HideTargets = no; input HideBalance = no; input HideBoxLines = no; input HideCloud = no; input HideLabels = no; # Identify Consolidation def HH = highest(high[1], BarsUsedForRange); def LL = lowest(low[1], BarsUsedForRange); def maxH = highest(hh, BarsRequiredToRemainInRange); def maxL = lowest(ll, BarsRequiredToRemainInRange); def HHn = if maxH == maxH[1] or maxL == maxL then maxH else HHn[1]; def LLn = if maxH == maxH[1] or maxL == maxL then maxL else LLn[1]; def Bh = if high <= HHn and HHn == HHn[1] then HHn else double.nan; def Bl = if low >= LLn and LLn == LLn[1] then LLn else double.nan; def CountH = if isnan(Bh) or isnan(Bl) then 2 else CountH[1] + 1; def CountL = if isnan(Bh) or isnan(Bl) then 2 else CountL[1] + 1; def ExpH = if barnumber() == 1 then double.nan else if CountH[-BarsRequiredToRemainInRange] >= BarsRequiredToRemainInRange then HHn[-BarsRequiredToRemainInRange] else if High <= ExpH[1] then ExpH[1] else double.nan; def ExpL = if barnumber() == 1 then double.nan else if Countl[-BarsRequiredToRemainInRange] >= BarsRequiredToRemainInRange then LLn[-BarsRequiredToRemainInRange] else if Low >= ExpL[1] then ExpL[1] else double.nan; # Plot the High and Low of the Box; Paint Cloud plot BoxHigh = if !isnan(expL) and !isnan(ExpH) then ExpH else double.nan; plot BoxLow = if !isnan(expL) and !isnan(ExpH) then ExpL else double.nan; boxhigh.setdefaultColor(color.dark_green); BoxHigh.setpaintingStrategy(paintingStrategy.HORIZONTAL); BoxLow.setpaintingStrategy(paintingStrategy.HORIZONTAL); BoxLow.setdefaultColor(color.dark_red); BoxHigh.SETHIDING(HideBoxLines); BoxLow.SETHIDING(HideBoxLines); addcloud(if !HideCloud then BoxHigh else double.nan, BoxLow, color.gray, color.gray); # Things to the Right of a Finished Box def eH = if barnumber() == 1 then double.nan else if !isnan(BoxHigh[1]) and isnan(BoxHigh) then BoxHigh[1] else eh[1]; def eL = if barnumber() == 1 then double.nan else if !isnan(BoxLow[1]) and isnan(BoxLow) then BoxLow[1] else el[1]; def diff = (eh - el) * TargetMultiple; plot Balance = if isnan(boxhigh) and isnan(boxlow) then (eh+el)/2 else double.nan; plot Htgt_1 = if isnan(Boxhigh) and high >= eh then eh + diff else double.nan; plot Htgt_2 = if isnan(Boxhigh) and high >= eh then eh + diff*2 else double.nan; plot Htgt_3 = if isnan(Boxhigh) and high >= eh then eh + diff*3 else double.nan; plot Htgt_4 = if isnan(Boxhigh) and high >= eh then eh + diff*4 else double.nan; plot Htgt_5 = if isnan(Boxhigh) and high >= eh then eh + diff*5 else double.nan; plot Htgt_6 = if isnan(Boxhigh) and high >= eh then eh + diff*6 else double.nan; plot Ltgt_1 = if isnan(BoxLow) and Low <= eL then eL - diff else double.nan; plot Ltgt_2 = if isnan(BoxLow) and Low <= eL then eL - diff*2 else double.nan; plot Ltgt_3 = if isnan(BoxLow) and Low <= eL then eL - diff*3 else double.nan; plot Ltgt_4 = if isnan(BoxLow) and Low <= eL then eL - diff*4 else double.nan; plot Ltgt_5 = if isnan(BoxLow) and Low <= eL then eL - diff*5 else double.nan; plot Ltgt_6 = if isnan(BoxLow) and Low <= eL then eL - diff*6 else double.nan; Balance.SETHIDING(HideBalance); Balance.setdefaultColor(CREATECOLOR(255,255,255)); Balance.setpaintingStrategy(PAIntingStrategy.SQUARES); Htgt_2.setlineWeight(2); Htgt_4.setlineWeight(2); Htgt_6.setlineWeight(2); Htgt_1.setdefaultColor(CREATECOLOR( 50, 100 , 75)); Htgt_1.setpaintingStrategy(PAIntingStrategy.DASHES); Htgt_2.setdefaultColor(CREATECOLOR( 50, 100 , 75)); Htgt_2.setpaintingStrategy(paintingStrategy.HORIZONTAL); Htgt_3.setdefaultColor(CREATECOLOR( 50, 100 , 75)); Htgt_3.setpaintingStrategy(PAIntingStrategy.DASHES); Htgt_4.setdefaultColor(CREATECOLOR( 50, 100 , 75)); Htgt_4.setpaintingStrategy(paintingStrategy.HORIZONTAL); Htgt_5.setdefaultColor(CREATECOLOR( 50, 100 , 75)); Htgt_5.setpaintingStrategy(PAIntingStrategy.DASHES); Htgt_6.setdefaultColor(CREATECOLOR( 50, 100 , 75)); Htgt_6.setpaintingStrategy(paintingStrategy.HORIZONTAL); Ltgt_2.setlineWeight(2); Ltgt_4.setlineWeight(2); Ltgt_6.setlineWeight(2); Ltgt_1.setdefaultColor(CREATECOLOR( 100, 50 , 75)); Ltgt_1.setpaintingStrategy(PAIntingStrategy.DASHES); Ltgt_2.setdefaultColor(CREATECOLOR( 100, 50 , 75)); Ltgt_2.setpaintingStrategy(paintingStrategy.HORIZONTAL); Ltgt_3.setdefaultColor(CREATECOLOR( 100, 50 , 75)); Ltgt_3.setpaintingStrategy(PAIntingStrategy.DASHES); Ltgt_4.setdefaultColor(CREATECOLOR( 100, 50 , 75)); Ltgt_4.setpaintingStrategy(paintingStrategy.HORIZONTAL); Ltgt_5.setdefaultColor(CREATECOLOR( 100, 50 , 75)); Ltgt_5.setpaintingStrategy(PAIntingStrategy.DASHES); Ltgt_6.setdefaultColor(CREATECOLOR( 100, 50 , 75)); Ltgt_6.setpaintingStrategy(paintingStrategy.HORIZONTAL); Htgt_1.SETHIDING(HIDETARGETS); Htgt_2.SETHIDING(HIDETARGETS); Htgt_3.SETHIDING(HIDETARGETS); Htgt_4.SETHIDING(HIDETARGETS); Htgt_5.SETHIDING(HIDETARGETS); Htgt_6.SETHIDING(HIDETARGETS); Ltgt_1.SETHIDING(HIDETARGETS); Ltgt_2.SETHIDING(HIDETARGETS); Ltgt_3.SETHIDING(HIDETARGETS); Ltgt_4.SETHIDING(HIDETARGETS); Ltgt_5.SETHIDING(HIDETARGETS); Ltgt_6.SETHIDING(HIDETARGETS); # Labels addlabel(!HideLabels, "TgtLvls = " + diff + "pts each | Bal = " + balance, if high > eh and low < el then color.yellow else if high > eh then color.green else if low < el then color.red else color.gray); addlabel(!HideLabels && high > eh && low < el, "OUTSIDE BAR!!", color.yellow); addlabel(!HideLabels && high > eh && low >= el, "Long", color.green); addlabel(!HideLabels && high <= eh && low < el, "Short", color.red); #Price Color assignPriceColor(if !ColorPrice then color.current else if !isnan(BoxHigh) then color.gray else if high > eh and low < el then color.yellow else if high > eh then color.green else if low < el then color.red else color.gray);