// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // Β© ChartPrime //@version=5 indicator("Trendline Breakouts With Targets [ Chartprime ]",shorttitle = "TBT [ Chartprime ]",overlay = true,max_bars_back = 500,max_lines_count = 500) bool ChartTime = time > chart.left_visible_bar_time and time < chart.right_visible_bar_time string CORE = "➞ Core Settings πŸ”Έ" var bool TradeisON = false var bool LongTrade = false var bool ShortTrade = false var float TP = 0.0 var float SL = 0.0 int BarTIME = time - time[1] var line tpLine = na var label LAB = na var int UpdatedX = 0 var float UpdatedY = 0.0 var float UpdatedSLP = 0.0 var int UpdatedXLow = 0 var float UpdatedYLow = 0.0 var float UpdatedSLPLow = 0.0 int Period = input.int(10, title='     Periodβ€„β€…β€„β€„β€…βžž', group = CORE, inline = "001") bool Trendtype = input.string(title = "     Typeβ€…β€…β€…β€„β€…β€„β€„β€…βžž", defval='Wicks', options=['Wicks', 'Body'], group = CORE, inline = "001") == 'Wicks' string Extensions = input.string(title='     Extendβ€„β€…β€„β€„βžž', defval=' 25', options=[' 25', ' 50', ' 75'], group = CORE, inline = "001") color LineCol1 = input.color(color.rgb(109, 111, 111, 19),"",group = CORE,inline = "001") bool ShowTargets = input.bool(true,"Show Targets",group = CORE,inline = "002") ExtenSwitcher(ex) => switch ex ' 25' => 1 , ' 50' => 2 , => 3 WidthSwitcher(ex) => switch ex '1' => 1 , '2' => 2 , => 3 StyleSwitcher(style) => switch style 'Dashed' => line.style_dashed , 'Dotted' => line.style_dotted , => line.style_solid method volAdj(int len)=> math.min(ta.atr(len) * 0.3, close * (0.3/100)) [20] /2 Zband = volAdj(30) method Trendlines(float src, int timeIndex,bool dir) => var int Start = 1 , var int End = 0 , var int TIME = 1 var float YEnd = 0, var float YStart = 0 , var float Slope = 0 var line Line1 = line.new(na,na,na,na) var line Line2 = line.new(na,na,na,na) var line Line3 = line.new(na,na,na,na) SCR = fixnan(src) if ta.change(SCR) != 0 TIME := time[timeIndex] YStart := SCR[1] Start := TIME[1] Slope := (SCR - YStart) / (TIME - Start) Slope EXTime = ExtenSwitcher(Extensions) * BarTIME * 25 End := TIME + EXTime YEnd := SCR + EXTime * Slope if ta.change(SCR) != 0 and not TradeisON[1] LineCond = Slope * time < 0 ? dir ? na : color.rgb(11, 139, 7, 53) : dir ? color.rgb(212, 46, 0, 54) : na if not na(LineCond) //and ChartTime Line1 := line.new(Start, YStart, End, YEnd, xloc.bar_time, extend.none, color=color.new(color.white,100) ) Line2:=line.new(Start, YStart - (Zband * 2), End, YEnd - (Zband * 2), xloc.bar_time, extend.none, color=color.new(color.black,100) ) Line3:=line.new(Start, YStart - (Zband * 1), End, YEnd - (Zband * 1), xloc.bar_time, extend.none, color=color.new(color.black,100) ) linefill.new(Line3,Line2,color= LineCol1) linefill.new(Line3,Line1,color= LineCond) // linefill.new(Line,Line2,color= color.rgb(28, 15, 2, 76)) [Start, YStart, Slope] PH = ta.pivothigh(Trendtype ? high : close > open ? close : open, Period, Period / 2) PL = ta.pivotlow(Trendtype ? low : close > open ? open : close, Period, Period / 2) method GetlinePrice(int TIME, float Price, float SLOP, int LookB) => var float Current = 0.0 EsTime = time - TIME Current := Price + (EsTime - LookB * BarTIME) * SLOP Current method CheckCross(float Price, int StartTime, float StartPrice, float SLP) => var float Current = 0.0 var float Previous = 0.0 if StartPrice[Period] != StartPrice Current := GetlinePrice(StartTime, StartPrice, SLP, 0) Previous := GetlinePrice(StartTime, StartPrice, SLP, 1) Crossover = Price[1] < Previous and Price > Current ? 1 : Price[1] > Previous - (Zband*0.1) and Price < Current - (Zband*0.1) ? -1 : 0 Crossover [Xx, XZ, SLPXZ] = Trendlines(PH, Period / 2,false) [XxL, XZL, SLPXZL] = Trendlines(PL, Period / 2, true) if ta.change(fixnan(PH)) != 0 UpdatedX := Xx UpdatedY := XZ UpdatedSLP := SLPXZ UpdatedSLP if ta.change(fixnan(PL)) != 0 UpdatedXLow := XxL UpdatedYLow := XZL UpdatedSLPLow := SLPXZL UpdatedSLPLow Long = not (UpdatedSLP * time > 0) and CheckCross(close, UpdatedX, UpdatedY, UpdatedSLP)== 1 and not TradeisON Short = not (UpdatedSLPLow * time < 0) and CheckCross(close, UpdatedXLow, UpdatedYLow, UpdatedSLPLow)==-1 and not TradeisON TradeFire = Long or Short if Long and not TradeisON LongTrade:= true ShortTrade:= false if Short and not TradeisON LongTrade:= false ShortTrade:= true if true if TradeFire and not TradeisON TP := switch Long => high + (Zband *20) Short => low - (Zband *20) SL := switch Long => low - (Zband *20) Short => high + (Zband *20) TradeisON:= true if ShowTargets line.new(bar_index, Long ? high : low, bar_index, TP, width=2, color = color.rgb(154, 103, 20), style= line.style_dashed) tpLine:= line.new(bar_index, TP, bar_index+2, TP, style= line.style_dashed, color = color.rgb(154, 103, 20) ) LAB:=label.new(bar_index, TP, "Target", color = color.rgb(154, 103, 20), style= label.style_label_left, size=size.small, textcolor = color.white ) if TradeisON line.set_x2(tpLine,bar_index) label.set_x(LAB,bar_index+1) if LongTrade and TradeisON if high >= TP label.set_color(LAB,color.rgb(6, 128, 10, 37)) TradeisON:=false if close <= SL label.set_color(LAB,color.new(color.rgb(246, 7, 7),70)) TradeisON:=false else if ShortTrade and TradeisON if low <= TP label.set_color(LAB,color.rgb(6, 128, 10, 37)) TradeisON:=false if close >= SL label.set_color(LAB,color.new(color.rgb(246, 7, 7),70)) TradeisON:=false plotshape(Long and not TradeisON[1], size = size.small, color = color.rgb(46, 192, 6, 11), location = location.belowbar, style = shape.labelup , text = "", textcolor = color.white) plotshape(Short and not TradeisON[1], size = size.small, color = color.rgb(241, 2, 2, 11), location = location.abovebar, style = shape.labeldown , text = "", textcolor = color.white) // -- END -- .