Untitled
s7s
plain_text
5 months ago
6.4 kB
22
Indexable
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) // © LuxAlgo //@version=5 indicator("Trendlines with Breaks [LuxAlgo]", overlay=true) // Inputs length = input.int(14) k = input.float(1.0, 'Slope', minval=0, step=0.1) method = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg']) show = input(false, 'Show Only Confirmed Breakouts') // Variables var float upper = na var float lower = na var float slope_ph = na var float slope_pl = na src = close n = bar_index // Pivot points ph = ta.pivothigh(length, length) pl = ta.pivotlow(length, length) // Slope calculation slope = switch method 'Atr' => ta.atr(length) / length * k 'Stdev' => ta.stdev(src, length) / length * k 'Linreg' => math.abs(ta.sma(src * bar_index, length) - ta.sma(src, length) * ta.sma(bar_index, length)) / ta.variance(n, length) / 2 * k slope_ph := ph ? slope : slope_ph[1] slope_pl := pl ? slope : slope_pl[1] upper := ph ? ph : upper[1] - slope_ph lower := pl ? pl : lower[1] + slope_pl // Breakout detection single_upper = 0 single_lower = 0 single_upper := src[length] > upper ? 0 : ph ? 1 : single_upper[1] single_lower := src[length] < lower ? 0 : pl ? 1 : single_lower[1] upper_breakout = single_upper[1] and src[length] > upper and (show ? src > src[length] : 1) lower_breakout = single_lower[1] and src[length] < lower and (show ? src < src[length] : 1) plotshape(upper_breakout ? low[length] : na, "Upper Break", shape.labelup, location.absolute, #26a69a, -length, text="B", textcolor=color.white, size=size.tiny) plotshape(lower_breakout ? high[length] : na, "Lower Break", shape.labeldown, location.absolute, #ef5350, -length, text="B", textcolor=color.white, size=size.tiny) // Trendlines var line up_l = na var line dn_l = na var label recent_up_break = na var label recent_dn_break = na if ph[1] line.delete(up_l[1]) label.delete(recent_up_break[1]) up_l := line.new(n - length - 1, ph[1], n - length, upper, color=#26a69a, extend=extend.right, style=line.style_dashed) if pl[1] line.delete(dn_l[1]) label.delete(recent_dn_break[1]) dn_l := line.new(n - length - 1, pl[1], n - length, lower, color=#ef5350, extend=extend.right, style=line.style_dashed) if ta.crossover(src, upper - slope_ph * length) label.delete(recent_up_break[1]) recent_up_break := label.new(n, low, 'B', color=#26a69a, textcolor=color.white, style=label.style_label_up, size=size.small) if ta.crossunder(src, lower + slope_pl * length) label.delete(recent_dn_break[1]) recent_dn_break := label.new(n, high, 'B', color=#ef5350, textcolor=color.white, style=label.style_label_down, size=size.small) // Plotting plot(upper, 'Upper', color=ph ? na : #26a69a, offset=-length) plot(lower, 'Lower', color=pl ? na : #ef5350, offset=-length) alertcondition(ta.crossover(src, upper - slope_ph * length), 'Upper Breakout', 'Price broke upper trendline') alertcondition(ta.crossunder(src, lower + slope_pl * length), 'Lower Breakout', 'Price broke lower trendline') // Constants var START_OFFSET = 0 var END_OFFSET = 25 // Inputs for liquidity levels var g_htf = "HTF Liquidity" var g_intraday = "Intraday Liquidity" var g_purged = "Purged Liquidity" i_isDailyEnabled = input(true, "Daily", inline="Daily", group=g_htf) i_dailyAboveLiquidityColor = input(color.new(#8931ac, 35), "", inline="Daily", group=g_htf) i_dailyBelowLiquidityColor = input(color.new(#8931ac, 35), "", inline="Daily", group=g_htf) i_dailyWidth = input(2, "Width", inline="Daily", group=g_htf) i_isWeeklyEnabled = input(true, "Weekly", inline="Weekly", group=g_htf) i_weeklyAboveLiquidityColor = input(color.new(#3e76d6, 46), "", inline="Weekly", group=g_htf) i_weeklyBelowLiquidityColor = input(color.new(#3e76d6, 46), "", inline="Weekly", group=g_htf) i_weeklyWidth = input(5, "Width", inline="Weekly", group=g_htf) i_is1HEnabled = input(true, "1H", inline="1H", group=g_intraday) i_1HAboveLiquidityColor = input(color.rgb(231, 173, 74, 32), "", inline="1H", group=g_intraday) i_1HBelowLiquidityColor = input(color.rgb(231, 173, 74, 32), "", inline="1H", group=g_intraday) i_1HWidth = input(1, "Width", inline="1H", group=g_intraday) i_is4HEnabled = input(true, "4H", inline="4H", group=g_intraday) i_4HAboveLiquidityColor = input(color.rgb(29, 90, 47, 32), "", inline="4H", group=g_intraday) i_4HBelowLiquidityColor = input(color.rgb(29, 90, 47, 32), "", inline="4H", group=g_intraday) i_4HWidth = input(1, "Width", inline="4H", group=g_intraday) i_purgedLevelColor = input(color.new(color.gray, 70), "Color", group=g_purged) i_purgedLevelStyle = input.string("Dashed", "Style", ["Solid", "Dashed", "Dotted"], group=g_purged) i_showPurgeDaily = input(false, "Show Purge Daily", group=g_purged) i_showPurgeWeekly = input(false, "Show Purge Weekly", group=g_purged) i_showPurge1H = input(false, "Show Purge 1H", group=g_purged) i_showPurge4H = input(false, "Show Purge 4H", group=g_purged) // Variables for liquidity levels : var highsArray = array.new_float() var lowsArray = array.new_float() var highLinesArray = array.new_line() var lowLinesArray = array.new_line() var purgedLinesArray = array.new_line() var float dayHigh = na var float dayLow = na var highsTFnumArray = array.new_int() var lowsTFnumArray = array.new_int() var purgedTFnumArray = array.new_int() // int TF_D = 1 int TF_W = 2 int TF_M = 3 int TF_240 = 4 int TF_60 = 5 [prevDayHigh, prevDayLow] = request.security(syminfo.tickerid, "D", [high[1], low[1]], lookahead=barmerge.lookahead_on) [prevWeekHigh, prevWeekLow] = request.security(syminfo.tickerid, "W", [high[1], low[1]], lookahead=barmerge.lookahead_on) [prevMonthHigh, prevMonthLow] = request.security(syminfo.tickerid, "M", [high[1], low[1]], lookahead=barmerge.lookahead_on) [prev4HHigh, prev4HLow] = request.security(syminfo.tickerid, "240", [high[1], low[1]], lookahead=barmerge.lookahead_on) [prev1HHigh, prev1HLow] = request.security(syminfo.tickerid, "60", [high[1], low[1]], lookahead=barmerge.lookahead_on) // Functions f_drawLine(float _y, color _c, int _w=1) => line.new(bar_index, _y, bar_index, _y, color=_c, width=_w) f_create(float _high, float _low, color _upperColor, color _lowerColor, int _linewidth, int aTFnum) => array.push(highsArray, _high) array.push(lowsArray, _low) array.push(highLinesArray, f_drawLine(_high, _upperColor
Editor is loading...