ArefBitcoinCRYPTO:BTCUSDarefkhoor//@version=5 indicator("Algoman NEXT", overlay=true, max_lines_count=500, max_labels_count=500, max_boxes_count=350) // Get user input enableDashboard = input(true, "Enable Dashboard", group="DASHBOARD SETTINGS") locationDashboard = input.string("Middle right", "Location", , group="DASHBOARD SETTINGS") sizeDashboard = input.string("Tiny", "Size", , group="DASHBOARD SETTINGS") colorBackground = input(#2A2E39, "Bg color", group="DASHBOARD SETTINGS") colorFrame = input(#2A2E39, "Frame color", group="DASHBOARD SETTINGS") colorBorder = input(#363A45, "Border color", group="DASHBOARD SETTINGS") showSignals = input(true, "Show signals", group="BUY AND SELL SIGNALS SETTINGS") strategy = input.string("Normal", "Strategy", , group="BUY AND SELL SIGNALS SETTINGS") sensitivity = input.float(1.8, "Sensitivity", 0.1, step=0.1, group="BUY AND SELL SIGNALS SETTINGS") consSignalsFilter = input(false, "Consolidation signals filter", group="BUY AND SELL SIGNALS SETTINGS") smartSignalsOnly = input(false, "Smart signals only", group="BUY AND SELL SIGNALS SETTINGS") candleColors = input(false, "Candle colors", group="BUY AND SELL SIGNALS SETTINGS") momentumCandles = input(false, "Momentum candles", group="BUY AND SELL SIGNALS SETTINGS") highVolSignals = input(false, "High volume signals only", group="BUY AND SELL SIGNALS SETTINGS") enableTrailingSL = input(false, "Enable trailing stop-loss", group="RISK MANAGEMENT SETTINGS") usePercSL = input(false, "% Trailing sl", inline="2", group="RISK MANAGEMENT SETTINGS") percTrailingSL = input.float(1, "", 0, step=0.1, inline="2", group="RISK MANAGEMENT SETTINGS") enableSwings = input(false, "Enable Swing High's & Swing's Low's", inline="3", group="RISK MANAGEMENT SETTINGS") periodSwings = input.int(10, "", 2, inline="3", group="RISK MANAGEMENT SETTINGS") enableTpSlAreas = input(false, "Enable take profit/stop-loss areas", group="RISK MANAGEMENT SETTINGS") useTP1 = input(true, "", inline="4", group="RISK MANAGEMENT SETTINGS") multTP1 = input.float(1, "TP 1", 0, inline="4", group="RISK MANAGEMENT SETTINGS") useTP2 = input(true, "", inline="5", group="RISK MANAGEMENT SETTINGS") multTP2 = input.float(2, "TP 2", 0, inline="5", group="RISK MANAGEMENT SETTINGS") useTP3 = input(true, "", inline="6", group="RISK MANAGEMENT SETTINGS") multTP3 = input.float(3, "TP 3", 0, inline="6", group="RISK MANAGEMENT SETTINGS") tpLabels = input(true, "Take profit labels", group="RISK MANAGEMENT SETTINGS") showTrendCloud = input(true, "Show Trend cloud", group="TREND CLOUD SETTINGS") periodTrendCloud = input.string("New", "Trend cloud period", , group="TREND CLOUD SETTINGS") signalsTrendCloud = input(false, "Trend only signals", group="TREND CLOUD SETTINGS") fastTrendCloud = input(false, "Fast trend cloud", group="TREND CLOUD SETTINGS") fastTrendCloudLen = input.int(55, "Fast trend cloud", 2, group="TREND CLOUD SETTINGS") enableAutoTrend = input(false, "Enable Auto Trendlines", group="AUTO TRENDLINES SETTINGS") srcTrendChannel = input(close, "Trend channel source", group="AUTO TRENDLINES SETTINGS") lenTrendChannel = input.int(200, "Trend channel loopback", 2, group="AUTO TRENDLINES SETTINGS") enableSR = input(false, "Enable support and resistance", group="AUTO SUPPORT AND RESISTANCE SETTINGS") lineSrStyle = input.string("Dashed", "Line Style", , group="AUTO SUPPORT AND RESISTANCE SETTINGS") lineSrWidth = input.int(2, "Line Width", 1, 4, group="AUTO SUPPORT AND RESISTANCE SETTINGS") showCons = input(false, "Consolidation Zones", group="CONSOLIDATION ZONES") lbPeriod = input.int(10, "Loopback Period", 2, 50, group="CONSOLIDATION ZONES") lenCons = input.int(5, "Min Consolidation Length", 2, 20, group="CONSOLIDATION ZONES") paintCons = input(true, "Paint Consolidation Area", group="CONSOLIDATION ZONES") colorZone = input(color.new(color.blue, 70), "Zone Color", group="CONSOLIDATION ZONES") box_ob = input.bool(false, "Toggle Order Block", group="ORDER BLOCK") box_hide_gray = input.bool(false, "Hide gray boxes", group="ORDER BLOCK") bos_type = input.string("High and Low", "MSB trigger", , group="ORDER BLOCK") box_sv = input.bool(true, "Plot demand boxes", group="ORDER BLOCK") box_test_delay = input.int(3, "Delay to count test of demand box", 1, group="ORDER BLOCK") box_fill_delay = input.int(3, "Delay to count fill of demand box", 1, group="ORDER BLOCK") box_test_sv = input.bool(true, "Dim tested demand boxes", group="ORDER BLOCK") box_stop_sv = input.bool(true, "Stop plotting filled demand boxes", group="ORDER BLOCK") algomanVP = input(false, "algoman volume profile", group="algoman VOLUME PROFILE") colorBorderVP = input(color.new(color.black, 80), "Border color", group="algoman VOLUME PROFILE") colorBuyVP = input(#7F1623, "Buy volume", group="algoman VOLUME PROFILE") colorSellVP = input(#00DD00, "Sell volume", group="algoman VOLUME PROFILE") offset = input.int(2, "Offset", 2, 20, group="algoman VOLUME PROFILE") lookback = input.int(100, "Lookback", 14, 10000, group="algoman VOLUME PROFILE") levelNum = input.int(100, "Number of levels", 10, 1000, group="algoman VOLUME PROFILE") levelWidth = input.int(50, "Level width", 2, 100, group="algoman VOLUME PROFILE") // Functions f_chartTfInMinutes() => float _resInMinutes = timeframe.multiplier * ( timeframe.isseconds ? 1. / 60 : timeframe.isminutes ? 1. : timeframe.isdaily ? 60. * 24 : timeframe.isweekly ? 60. * 24 * 7 : timeframe.ismonthly ? 60. * 24 * 30.4375 : na) atr(len) => tr = ta.tr atr = 0.0 atr := nz(atr + (tr - atr) / len, tr) supertrend(src, factor, len) => atr = ta.atr(len) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand) prevUpperBand = nz(upperBand) lowerBand := lowerBand > prevLowerBand or close < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close > prevUpperBand ? upperBand : prevUpperBand int direction = na float superTrend = na prevSuperTrend = superTrend if prevSuperTrend == prevUpperBand direction := close > upperBand ? 1 : -1 else direction := close < lowerBand ? -1 : 1 superTrend := direction == 1 ? lowerBand : direction == -1 ? upperBand : na dchannel(len)=> hh = ta.highest(len) ll = ta.lowest (len) trend = 0 trend := close > hh ? 1 : close < ll ? -1 : nz(trend) trendScalper(show, len1, len2, len3, colorBull, colorBear, colorBarBull, colorBarBear) => avgOC = math.avg(open, close) ha_o = 0.0, ha_o := na(ha_o) ? avgOC : (ha_o + ohlc4) / 2 ema1 = ta.ema(ha_o, len1), ema2 = ta.ema(ha_o, len2), ema3 = ta.ema(ha_o, len3) ris1 = ema1 > ema1, ris2 = ema2 > ema2, ris3 = ema3 > ema3 fal1 = ema1 < ema1, fal2 = ema2 < ema2, fal3 = ema3 < ema3 colorEma1 = ris1 ? colorBull : fal1 ? colorBear : na, colorEma2 = ris2 ? colorBull : fal2 ? colorBear : na, colorEma3 = ris3 ? colorBull : fal3 ? colorBear : na fillEma1 = avgOC > ema1 ? colorBull : avgOC < ema1 ? colorBear : na, fillEma2 = ema1 > ema2 ? colorBull : ema1 < ema2 ? colorBear : na, fillEma3 = ema2 > ema3 ? colorBull : ema2 < ema3 ? colorBear : na colorBar = close < ema1 and close < ema2 ? colorBarBear : colorBarBull candlesMom() => = ta.macd(close, 12, 26, 9) (macd > 0 and macd > macd) or (macd < 0 and macd < macd) trailingSL(buy, sell, factor, len, usePerc, perc) => atr = atr(len) upperBand = high + (usePerc ? high * (perc / 100) : factor * atr) lowerBand = low - (usePerc ? low * (perc / 100) : factor * atr) prevLowerBand = nz(lowerBand) prevUpperBand = nz(upperBand) lowerBand := lowerBand > prevLowerBand or buy ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or sell ? upperBand : prevUpperBand int direction = na float stop = na prevSuperTrend = stop if prevSuperTrend == prevUpperBand direction := buy ? 1 : -1 else direction := sell ? -1 : 1 stop := direction == 1 ? lowerBand : direction == -1 ? upperBand : na add_to_zz(zz, val, bi) => array.unshift(zz, bi) array.unshift(zz, val) if array.size(zz) > 12 array.pop(zz) update_zz(zz, val, bi, dir) => if array.size(zz) == 0 add_to_zz(zz, val, bi) else if dir == 1 and val > array.get(zz, 0) or dir == -1 and val < array.get(zz, 0) array.set(zz, 0, val) array.set(zz, 1, bi) 0 float ph = ta.pivothigh(high, 10, 10) float pl = ta.pivotlow (low , 10, 10) LSRstyle = lineSrStyle == "Dashed" ? line.style_dashed : lineSrStyle == "Solid" ? line.style_solid : line.style_dotted prdhighest = ta.highest(300) prdlowest = ta.lowest (300) cwidth = (prdhighest - prdlowest) * 10 / 100 var pivotvals = array.new_float(0) if ph or pl array.unshift(pivotvals, ph ? ph : pl) if array.size(pivotvals) > 20 array.pop(pivotvals) get_sr_vals(ind) => float lo = array.get(pivotvals, ind) float hi = lo int numpp = 0 for y = 0 to array.size(pivotvals) - 1 by 1 float cpp = array.get(pivotvals, y) float wdth = cpp 0 ? array.size(sr_strength) - 1 : na to 0 by 1 if strength ret = true for i = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1 if array.get(sr_up_level, i) >= lo and array.get(sr_up_level, i) = lo and array.get(sr_dn_level, i) = array.get(sr_strength, i) array.remove(sr_strength, i) array.remove(sr_up_level, i) array.remove(sr_dn_level, i) ret else ret := false ret break ret // Get components rsi = ta.rsi(close, 14) vosc = ta.obv - ta.ema(ta.obv, 20) bs = ta.ema(nz(math.abs((open - close) / (high - low) * 100)), 3) ema = ta.ema(close, 200) emaBull = close > ema equal_tf(res) => str.tonumber(res) == f_chartTfInMinutes() higher_tf(res) => str.tonumber(res) > f_chartTfInMinutes() too_small_tf(res) => (timeframe.isweekly and res=="1") or (timeframe.ismonthly and str.tonumber(res) < 10) securityNoRep(sym, res, src) => bool bull = na bull := equal_tf(res) ? src : bull bull := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on) : bull bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ? str.tostring(f_chartTfInMinutes()) : too_small_tf(res) ? (timeframe.isweekly ? "3" : "10") : res, src) if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res) bull := array.pop(bull_array) array.clear(bull_array) bull TF1Bull = securityNoRep(syminfo.tickerid, "1" , emaBull) TF3Bull = securityNoRep(syminfo.tickerid, "3" , emaBull) TF5Bull = securityNoRep(syminfo.tickerid, "5" , emaBull) TF10Bull = securityNoRep(syminfo.tickerid, "10" , emaBull) TF15Bull = securityNoRep(syminfo.tickerid, "15" , emaBull) TF30Bull = securityNoRep(syminfo.tickerid, "30" , emaBull) TF60Bull = securityNoRep(syminfo.tickerid, "60" , emaBull) TF120Bull = securityNoRep(syminfo.tickerid, "120" , emaBull) TF240Bull = securityNoRep(syminfo.tickerid, "240" , emaBull) TF720Bull = securityNoRep(syminfo.tickerid, "720" , emaBull) TFDBull = securityNoRep(syminfo.tickerid, "1440", emaBull) ema150 = ta.ema(close, 150) ema250 = ta.ema(close, 250) hma55 = ta.hma(close, 55 ) = ta.macd(close, 12, 26, 9) supertrend = supertrend(ohlc4, sensitivity, 10) maintrend = dchannel(30) confBull = (ta.crossover (close, supertrend) or (ta.crossover (close, supertrend) and maintrend < 0)) and macd > 0 and macd > macd and ema150 > ema250 and hma55 > hma55 and maintrend > 0 confBear = (ta.crossunder(close, supertrend) or (ta.crossunder(close, supertrend) and maintrend > 0)) and macd < 0 and macd < macd and ema150 < ema250 and hma55 < hma55 and maintrend < 0 trendcloud = supertrend(ohlc4, periodTrendCloud == "Long term" ? 7 : 4, 10) hma = fastTrendCloud ? ta.hma(close, fastTrendCloudLen) : na none = close > 0 = ta.dmi(14, 14) consFilter = adx > 20 smartFilter = ta.ema(close, 200) volFilter = (ta.ema(volume, 25) - ta.ema(volume, 26)) / ta.ema(volume, 26) > 0 trendFilter = trendcloud bull = (strategy == "Normal" ? ta.crossover (close, supertrend) : confBull and not confBull) and strategy != "Trend scalper" and (smartSignalsOnly ? close > smartFilter : none) and (consSignalsFilter ? consFilter : none) and (highVolSignals ? volFilter : none) and (signalsTrendCloud ? (periodTrendCloud == "New" ? ema150 > ema250 : close > trendFilter) : none) bear = (strategy == "Normal" ? ta.crossunder(close, supertrend) : confBear and not confBear) and strategy != "Trend scalper" and (smartSignalsOnly ? close < smartFilter : none) and (consSignalsFilter ? consFilter : none) and (highVolSignals ? volFilter : none) and (signalsTrendCloud ? (periodTrendCloud == "New" ? ema150 < ema250 : close < trendFilter) : none) countBull = ta.barssince(bull) countBear = ta.barssince(bear) trigger = nz(countBull, bar_index) < nz(countBear, bar_index) ? 1 : 0 = trendScalper(strategy == "Trend scalper" ? true : false, 5, 9, 21, color.green, color.red, #00DD00, #DD0000) trailingStop = trailingSL(bull, bear, 2.2, 14, usePercSL, percTrailingSL) float _ph = ta.highestbars(high, periodSwings) == 0 ? high : na float _pl = ta.lowestbars (low, periodSwings) == 0 ? low : na var _dir = 0, dir_ = _pl and na(_ph) ? -1 : _dir, _dir := _ph and na(_pl) ? 1 : dir_, dirChg = ta.change(_dir) var zz = array.new_float(0), zzOld = array.copy(zz) float zzLive = _ph or _pl ? (dirChg ? add_to_zz(zz, _dir == 1 ? _ph : _pl, bar_index) : update_zz(zz, _dir == 1 ? _ph : _pl, bar_index, _dir)) : na a = ta.wma(srcTrendChannel, lenTrendChannel), b = ta.sma(srcTrendChannel, lenTrendChannel) A = 4 * b - 3 * a, B = 3 * a - 2 * b m = (A - B) / (lenTrendChannel - 1) d = 0., for i = 0 to lenTrendChannel - 1 by 1 l = B + m * i d += math.pow(srcTrendChannel - l, 2) rmse = math.sqrt(d / (lenTrendChannel - 1)) * 2 float hb_ = ta.highestbars(lbPeriod) == 0 ? high : na float lb_ = ta.lowestbars (lbPeriod) == 0 ? low : na var int dir = 0 float zz_ = na float pp = na var int consCnt = 0 var float condHi = na var float condLo = na float H_ = ta.highest(lenCons) float L_ = ta.lowest (lenCons) var line lineUp = na var line lineDn = na bool breakUp = false bool breakDn = false var float pvh1_price = array.new_float(1000, na) var int pvh1_time = array.new_int (1000, na) var float pvl1_price = array.new_float(1000, na) var int pvl1_time = array.new_int (1000, na) var float pvh2_price = array.new_float(1000, na) var int pvh2_time = array.new_int (1000, na) var float pvl2_price = array.new_float(1000, na) var int pvl2_time = array.new_int (1000, na) var float htcmrll_price = na var int htcmrll_time = na var float ltcmrhh_price = na var int ltcmrhh_time = na var box long_boxes = array.new_box() var box short_boxes = array.new_box() var float temp_pv_0 = na var float temp_pv_1 = na var float temp_pv_2 = na bool pvh = high < high and high > high bool pvl = low > low and low < low int pv1_time = bar_index float pv1_high = high float pv1_low = low float trigger_high = bos_type == "High and Low" ? high : math.max(open, close) float trigger_low = bos_type == "High and Low" ? low : math.min(open, close) rangeHigh = ta.highest(high, lookback) rangeLow = ta.lowest(low, lookback) rangeHeight = rangeHigh - rangeLow histogramHeight = rangeHeight / levelNum histogramLowList = array.new_float(levelNum, na) histogramHighList = array.new_float(levelNum, na) histogramBuyVolumeList = array.new_float(levelNum, 0.0) histogramSellVolumeList = array.new_float(levelNum, 0.0) var buyBars = array.new_box(365, na) for i = 0 to 364 box.delete(array.get(buyBars, i)) var sellBars = array.new_box(365, na) for i = 0 to 364 box.delete(array.get(sellBars, i)) // Colors green = #00DD00, green50 = color.new(green, 50), green20 = color.new(green, 80) red = #DD0000, red50 = color.new(red, 50), red20 = color.new(red, 80) silver = #B2B5BE, silver50 = color.new(silver, 50), silver20 = color.new(silver, 80) // Plots atrBand = usePercSL ? (trigger ? low : high) * (percTrailingSL / 100) : ta.atr(14) * 2.2 atrStop = trigger ? low - atrBand : high + atrBand lastTrade(src) => ta.valuewhen(bull or bear, src, 0) entry_y = lastTrade(close) stop_y = lastTrade(atrStop) tp1_y = (entry_y-lastTrade(atrStop))*multTP1 + entry_y tp2_y = (entry_y-lastTrade(atrStop))*multTP2 + entry_y tp3_y = (entry_y-lastTrade(atrStop))*multTP3 + entry_y labelTpSl(cond, y, txt, color) => label labelTpSl = enableTpSlAreas and cond ? label.new(bar_index + 1, y, txt, xloc.bar_index, yloc.price, color, label.style_label_left, color.white, size.normal) : na label.delete(labelTpSl) labelTpSl(none, entry_y, "Entry : " + str.tostring(math.round_to_mintick(entry_y)), color.orange) labelTpSl(none, stop_y , "Stop loss : " + str.tostring(math.round_to_mintick(atrStop)), color.red) labelTpSl(useTP1 and multTP1 != 0, tp1_y, "TP 1 : " + str.tostring(math.round_to_mintick(tp1_y)), color.green) labelTpSl(useTP2 and multTP2 != 0, tp2_y, "TP 2 : " + str.tostring(math.round_to_mintick(tp2_y)), color.green) labelTpSl(useTP3 and multTP3 != 0, tp3_y, "TP 3 : " + str.tostring(math.round_to_mintick(tp3_y)), color.green) lineTpSl(cond, y, color, style) => line lineTpSl = enableTpSlAreas and cond ? line.new(bar_index - (trigger ? countBull : countBear), y, bar_index + 1, y, xloc.bar_index, extend.none, color, style) : na line.delete(lineTpSl) lineTpSl(none, entry_y, color.orange, line.style_dashed) lineTpSl(none, stop_y , color.red , line.style_solid ) lineTpSl(useTP1 and multTP1 != 0, tp1_y, color.green, line.style_dotted) lineTpSl(useTP2 and multTP2 != 0, tp2_y, color.green, line.style_dotted) lineTpSl(useTP3 and multTP3 != 0, tp3_y, color.green, line.style_dotted) var dashboard_loc = locationDashboard == "Top right" ? position.top_right : locationDashboard == "Top left" ? position.top_left : locationDashboard == "Middle right" ? position.middle_right : locationDashboard == "Middle left" ? position.middle_left : locationDashboard == "Bottom right" ? position.bottom_right : position.bottom_left var dashboard_size = sizeDashboard == "Tiny" ? size.tiny : sizeDashboard == "Small" ? size.small : size.normal var dashboard = table.new(dashboard_loc, 2, 20, colorBackground, colorFrame, 3, colorBorder, 3) dashboard_cell(column, row, txt) => table.cell(dashboard, column, row, txt, 0, 0, color.white, text_size=dashboard_size) dashboard_cell_bg(column, row, col) => table.cell_set_bgcolor(dashboard, column, row, col) if barstate.islast and enableDashboard dashboard_cell(0, 0 , "Current strategy") dashboard_cell(0, 1 , "Current sensitivity") dashboard_cell(0, 2 , "Current Position") dashboard_cell(0, 3 , "Current trend") dashboard_cell(0, 4 , "Trend strength") dashboard_cell(0, 5 , "Volume") dashboard_cell(0, 6 , "Volatility") dashboard_cell(0, 7 , "Momentum") dashboard_cell(0, 8 , "Timeframe trends📊"), table.merge_cells(dashboard, 0, 8, 1, 8) dashboard_cell(0, 9 , "1 min") dashboard_cell(0, 10, "3 min") dashboard_cell(0, 11, "5 min") dashboard_cell(0, 12, "10 min") dashboard_cell(0, 13, "15 min") dashboard_cell(0, 14, "30 min") dashboard_cell(0, 15, "1 Hour") dashboard_cell(0, 16, "2 Hour") dashboard_cell(0, 17, "4 Hour") dashboard_cell(0, 18, "12 Hour") dashboard_cell(0, 19, "Daily") dashboard_cell(1, 0 , strategy) dashboard_cell(1, 1 , str.tostring(sensitivity)) dashboard_cell(1, 2 , strategy != "Trend scalper" ? (trigger ? "Buy" : "Sell") : ""), dashboard_cell_bg(1, 2, strategy != "Trend scalper" ? (trigger ? color.green : color.red) : colorBackground) dashboard_cell(1, 3 , emaBull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 3, emaBull ? color.green : color.red) dashboard_cell(1, 4 , str.tostring(bs, "0.0") + " %") dashboard_cell(1, 5 , vosc > 0 ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 5, vosc > 0 ? color.green : color.red) dashboard_cell(1, 6 , adx > 20 ? "Trending 🚀" : "Ranging ⚠️"), dashboard_cell_bg(1, 6, adx > 20 ? color.green : color.orange) dashboard_cell(1, 7 , rsi > 50 ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 7, rsi > 50 ? color.green : color.red) dashboard_cell(1, 9 , TF1Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 9 , TF1Bull ? color.green : color.red) dashboard_cell(1, 10, TF3Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 10, TF3Bull ? color.green : color.red) dashboard_cell(1, 11, TF5Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 11, TF5Bull ? color.green : color.red) dashboard_cell(1, 12, TF10Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 12, TF10Bull ? color.green : color.red) dashboard_cell(1, 13, TF15Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 13, TF15Bull ? color.green : color.red) dashboard_cell(1, 14, TF30Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 14, TF30Bull ? color.green : color.red) dashboard_cell(1, 15, TF60Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 15, TF60Bull ? color.green : color.red) dashboard_cell(1, 16, TF120Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 16, TF120Bull ? color.green : color.red) dashboard_cell(1, 17, TF240Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 17, TF240Bull ? color.green : color.red) dashboard_cell(1, 18, TF720Bull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 18, TF720Bull ? color.green : color.red) dashboard_cell(1, 19, TFDBull ? "Bullish" : "Bearish"), dashboard_cell_bg(1, 19, TFDBull ? color.green : color.red) l(css, k) => line lr = enableAutoTrend ? line.new(bar_index - lenTrendChannel + 1, A + k, bar_index, B + k, extend=extend.right, color=css) : na line.delete(lr) l(color.blue, rmse), l(color.blue, 0), l(color.blue, -rmse) buy = showSignals and bull ? label.new(bar_index, low , close > smartFilter ? "Smart\nBuy" : "Buy" , xloc.bar_index, yloc.belowbar, color.green, label.style_label_up , color.white, size.normal) : na sell = showSignals and bear ? label.new(bar_index, high, close < smartFilter ? "Smart\nSell" : "Sell", xloc.bar_index, yloc.abovebar, color.red , label.style_label_down, color.white, size.normal) : na tpLabels(tp) => tp1Bull = ta.crossover (rsi, 70), tp2Bull = ta.crossover (rsi, 75), tp3Bull = ta.crossover (rsi, 80) tp1Bear = ta.crossunder(rsi, 30), tp2Bear = ta.crossunder(rsi, 25), tp3Bear = ta.crossunder(rsi, 20) tp1Bull := tp1Bull and (nz(ta.barssince(tp1Bull), 9999) > countBull), tp2Bull := tp2Bull and (ta.barssince(tp1Bull) countBull), tp3Bull := tp3Bull and (ta.barssince(tp2Bull) countBull) tp1Bear := tp1Bear and (nz(ta.barssince(tp1Bear), 9999) > countBear), tp2Bear := tp2Bear and (ta.barssince(tp1Bear) countBear), tp3Bear := tp3Bear and (ta.barssince(tp2Bear) countBear) if strategy != "Trend scalper" and tpLabels trigger ? (tp == 1 ? tp1Bull : tp == 2 ? tp2Bull : tp3Bull) : (tp == 1 ? tp1Bear : tp == 2 ? tp2Bear : tp3Bear) plotshape(tpLabels(1), "", shape.cross, location.abovebar, trigger ? green : na , 0, "TP 1", trigger ? green : na , false) plotshape(tpLabels(2), "", shape.cross, location.abovebar, trigger ? green : na , 0, "TP 2", trigger ? green : na , false) plotshape(tpLabels(3), "", shape.cross, location.abovebar, trigger ? green : na , 0, "TP 3", trigger ? green : na , false) plotshape(tpLabels(1), "", shape.cross, location.belowbar, trigger ? na : red, 0, "TP 1", trigger ? na : red, false) plotshape(tpLabels(2), "", shape.cross, location.belowbar, trigger ? na : red, 0, "TP 2", trigger ? na : red, false) plotshape(tpLabels(3), "", shape.cross, location.belowbar, trigger ? na : red, 0, "TP 3", trigger ? na : red, false) var label zzLabel = na if array.size(zz) > 12 and enableSwings if array.get(zz, 0) != array.get(zzOld, 0) or array.get(zz, 1) != array.get(zzOld, 1) if array.get(zz, 2) == array.get(zzOld, 2) and array.get(zz, 3) == array.get(zzOld, 3) label.delete(zzLabel) zzLabel := label.new(math.round(array.get(zz, 1)), array.get(zz, 0), _dir == 1 ? array.get(zz, 0) > array.get(zz, 4) ? ((array.get(zz, 4) < array.get(zz, 8)) ? "High" : "HH") : "LH" : array.get(zz, 0) < array.get(zz, 4) ? ((array.get(zz, 4) > array.get(zz, 8)) ? "Low" : "LL") : "HL", xloc.bar_index, yloc.price, color.new(color.white, 100), _dir == 1 ? label.style_label_down : label.style_label_up, _dir == 1 ? color.green : color.red) var sr_lines = array.new_line(11, na) for x = 1 to 10 by 1 line.set_color(array.get(sr_lines, x), color=line.get_y1(array.get(sr_lines, x)) >= close ? color.red : color.lime) if ph or pl array.clear(sr_up_level) array.clear(sr_dn_level) array.clear(sr_strength) for x = 0 to array.size(pivotvals) - 1 by 1 = get_sr_vals(x) if check_sr(hi, lo, strength) loc = find_loc(strength) if loc < 5 and strength >= 2 array.insert(sr_strength, loc, strength) array.insert(sr_up_level, loc, hi) array.insert(sr_dn_level, loc, lo) if array.size(sr_strength) > (enableSR ? 5 : 0) array.pop(sr_strength) array.pop(sr_up_level) array.pop(sr_dn_level) for x = 1 to 10 by 1 line.delete(array.get(sr_lines, x)) for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1 float mid = math.round_to_mintick((array.get(sr_up_level, x) + array.get(sr_dn_level, x)) / 2) rate = 100 * (mid - close) / close array.set(sr_lines, x + 1, line.new(x1=bar_index, y1=mid, x2=bar_index - 1, y2=mid, extend=extend.both, color=mid >= close ? color.red : color.lime, style=LSRstyle, width=lineSrWidth)) if showCons and barstate.isconfirmed dir := hb_ and na(lb_) ? 1 : lb_ and na(hb_) ? -1 : dir if hb_ and lb_ if dir == 1 zz_ := hb_ else zz_ := lb_ else zz_ := hb_ ? hb_ : lb_ ? lb_ : na for x = 0 to 1000 if na(close) or dir != dir break if zz_ if na(pp) pp := zz_ else if dir == 1 and zz_ > pp pp := zz_ if dir == -1 and zz_ < pp pp := zz_ if pp != pp if consCnt > lenCons if pp > condHi breakUp := true if pp < condLo breakDn := true if consCnt > 0 and pp = condLo consCnt += 1 else consCnt := 0 else consCnt += 1 if consCnt >= lenCons if consCnt == lenCons condHi := H_ condLo := L_ else line.delete(lineUp) line.delete(lineDn) condHi := math.max(condHi, high) condLo := math.min(condLo, low ) lineUp := line.new(bar_index, condHi , bar_index - consCnt, condHi , color=color.red , style=line.style_dashed) lineDn := line.new(bar_index, condLo , bar_index - consCnt, condLo , color=color.lime, style=line.style_dashed) fill(plot(condHi, "", na, 1, plot.style_stepline, editable=false), plot(condLo, "", na, 1, plot.style_stepline, editable=false), paintCons and consCnt > lenCons ? colorZone : na, "", false) if box_ob and barstate.isconfirmed if pvh array.pop(pvh1_price) array.pop(pvh1_time) array.unshift(pvh1_price, pv1_high) array.unshift(pvh1_time, pv1_time) if array.size(pvh1_price) > 2 temp_pv_0 := array.get(pvh1_price, 0) temp_pv_1 := array.get(pvh1_price, 1) temp_pv_2 := array.get(pvh1_price, 2) if temp_pv_0 > temp_pv_1 for i = 0 to array.size(pvl1_time) - 1 by 1 temp_ltcmrhh_time = array.get(pvl1_time, i) if temp_ltcmrhh_time < array.get(pvh1_time, 0) ltcmrhh_price := array.get(pvl1_price, i) ltcmrhh_time := temp_ltcmrhh_time break if temp_pv_0 < temp_pv_1 and temp_pv_1 > temp_pv_2 array.pop(pvh2_price) array.pop(pvh2_time) array.unshift(pvh2_price, temp_pv_1) array.unshift(pvh2_time, array.get(pvh1_time, 1)) if pvl array.pop(pvl1_price) array.pop(pvl1_time) array.unshift(pvl1_price, pv1_low) array.unshift(pvl1_time, pv1_time) if array.size(pvl1_price) > 2 temp_pv_0 := array.get(pvl1_price, 0) temp_pv_1 := array.get(pvl1_price, 1) temp_pv_2 := array.get(pvl1_price, 2) if temp_pv_0 < temp_pv_1 for i = 0 to array.size(pvh1_time) - 1 by 1 temp_htcmrll_time = array.get(pvh1_time, i) if temp_htcmrll_time < array.get(pvl1_time, 0) htcmrll_price := array.get(pvh1_price, i) htcmrll_time := temp_htcmrll_time break if temp_pv_0 > temp_pv_1 and temp_pv_1 < temp_pv_2 array.pop(pvl2_price) array.pop(pvl2_time) array.unshift(pvl2_price, temp_pv_1) array.unshift(pvl2_time, array.get(pvl1_time, 1)) if trigger_high > htcmrll_price if box_sv loBox = box.new(left=array.get(pvl1_time, 0), top=math.min(high, high), right=bar_index, bottom=array.get(pvl1_price, 0), bgcolor=color.rgb(0, 255, 0, 80), border_color=color.rgb(0, 255, 0, 80), extend=extend.right) if array.size(long_boxes) >= 25 box.delete(array.shift(long_boxes)) array.push(long_boxes, loBox) htcmrll_price := na htcmrll_price if trigger_low < ltcmrhh_price if box_sv hiBox = box.new(left=array.get(pvh1_time, 0), top=array.get(pvh1_price, 0), right=bar_index, bottom=math.max(low, low), bgcolor=color.rgb(255, 0, 0, 80), border_color=color.rgb(255, 0, 0, 80), extend=extend.right) if array.size(short_boxes) >= 25 box.delete(array.shift(short_boxes)) array.push(short_boxes, hiBox) ltcmrhh_price := na ltcmrhh_price if array.size(short_boxes) > 0 for i = array.size(short_boxes) - 1 to 0 by 1 tbox = array.get(short_boxes, i) top = box.get_top(tbox) bottom = box.get_bottom(tbox) if trigger_high > bottom and box.get_left(tbox) + box_test_delay < bar_index and box_test_sv if box_hide_gray box.set_bgcolor(tbox, #00000000) box.set_border_color(tbox, #00000000) else box.set_bgcolor(tbox, color.rgb(192, 192, 192, 80)) box.set_border_color(tbox, color.rgb(192, 192, 192, 80)) if trigger_high > top and box.get_left(tbox) + box_fill_delay < bar_index if box_stop_sv box.set_right(tbox, bar_index) box.set_extend(tbox, extend.none) array.remove(short_boxes, i) if array.size(long_boxes) > 0 for i = array.size(long_boxes) - 1 to 0 by 1 lbox = array.get(long_boxes, i) top = box.get_top(lbox) bottom = box.get_bottom(lbox) if trigger_low < top and box.get_left(lbox) + box_test_delay < bar_index and box_test_sv if box_hide_gray box.set_bgcolor(lbox, #00000000) box.set_border_color(lbox, #00000000) else box.set_bgcolor(lbox, color.rgb(192, 192, 192, 80)) box.set_border_color(lbox, color.rgb(192, 192, 192, 80)) if trigger_low < bottom and box.get_left(lbox) + box_fill_delay < bar_index if box_stop_sv box.set_right(lbox, bar_index) box.set_extend(lbox, extend.none) array.remove(long_boxes, i) if barstate.islast and algomanVP for i = 0 to levelNum - 1 histogramLow = rangeLow + histogramHeight * i histogramHigh = rangeLow + histogramHeight * (i + 1) array.set(histogramLowList, i, histogramLow) array.set(histogramHighList, i, histogramHigh) for i = 0 to lookback - 1 currentBarHeight = high - low currentBuyVolume = high == low ? 0 : volume * (close - low ) / currentBarHeight currentSellVolume = high == low ? 0 : volume * (high - close) / currentBarHeight for j = 0 to levelNum - 1 histogramLow = array.get(histogramLowList, j) histogramHigh = array.get(histogramHighList, j) target = math.max(histogramHigh, high) - math.min(histogramLow, low) - (math.max(histogramHigh, high) - math.min(histogramHigh, high)) - (math.max(histogramLow, low) - math.min(histogramLow, low)) histogramVolumePercentage = target / currentBarHeight histogramBuyVolume = array.get(histogramBuyVolumeList, j) histogramSellVolume = array.get(histogramSellVolumeList, j) if histogramVolumePercentage > 0 array.set(histogramBuyVolumeList, j, histogramBuyVolume + currentBuyVolume * histogramVolumePercentage) array.set(histogramSellVolumeList, j, histogramSellVolume + currentSellVolume * histogramVolumePercentage) highestHistogramVolume = 0.0 for i = 0 to levelNum - 1 histogramBuyVolume = array.get(histogramBuyVolumeList, i) histogramSellVolume = array.get(histogramSellVolumeList, i) histogramVolume = histogramBuyVolume + histogramSellVolume highestHistogramVolume := math.max(highestHistogramVolume, histogramVolume) highestHistogramVolume for i = 0 to levelNum - 1 histogramLow = array.get(histogramLowList, i) histogramHigh = array.get(histogramHighList, i) histogramBuyVolume = array.get(histogramBuyVolumeList, i) histogramSellVolume = array.get(histogramSellVolumeList, i) histogramVolume = histogramBuyVolume + histogramSellVolume histogramWidth = levelWidth * histogramVolume / highestHistogramVolume histogramBuyWidth = math.floor(histogramWidth * histogramBuyVolume / histogramVolume) histogramSellWidth = math.floor(histogramWidth * histogramSellVolume / histogramVolume) array.set(buyBars , i, box.new(bar_index + offset + levelWidth - 1 - histogramBuyWidth, histogramHigh, bar_index + offset + levelWidth - 1 , histogramLow, colorBorderVP, bgcolor=colorBuyVP )) array.set(sellBars, i, box.new(bar_index + offset + levelWidth - 1 - histogramBuyWidth, histogramHigh, bar_index + offset + levelWidth - 1 - histogramBuyWidth - histogramSellWidth, histogramLow, colorBorderVP, bgcolor=colorSellVP)) barcolor(momentumCandles and candlesMom() ? color.purple : candleColors ? (strategy == "Trend scalper" ? colorBar : na(countBull) and na(countBear) ? color.gray : trigger ? green : red) : na, editable=false) fill(plot(showTrendCloud and periodTrendCloud == "New" ? ema150 : na, "", na, editable=false), plot(showTrendCloud and periodTrendCloud == "New" ? ema250 : na, "", na, editable=false), ema150 > ema250 ? color.new(color.green, 70) : ema150 < ema250 ? color.new(color.red, 70) : na) plot(enableTrailingSL and trigger and nz(ta.barssince(low < trailingStop), bar_index) > countBull ? trailingStop : na, "", green, 1, plot.style_linebr, editable=false) plot(enableTrailingSL and not trigger and nz(ta.barssince(high > trailingStop), bar_index) > countBear ? trailingStop : na, "", red , 1, plot.style_linebr, editable=false) p0 = plot(avgOC, "", na , editable=false) p1 = plot(ema5 , "", colorEma5 , editable=false) p2 = plot(ema9 , "", colorEma9 , editable=false) p3 = plot(ema21, "", colorEma21, editable=false) fill(p0, p1, fillEma5 ) fill(p1, p2, fillEma9 ) fill(p2, p3, fillEma21) fill(plot(showTrendCloud and periodTrendCloud != "New" and trendcloud != 0 and close > trendcloud ? trendcloud : na, "", color.green, 1, plot.style_linebr, editable=false), p0, color.new(color.green, 90)) fill(plot(showTrendCloud and periodTrendCloud != "New" and trendcloud != 0 and close < trendcloud ? trendcloud : na, "", color.red , 1, plot.style_linebr, editable=false), p0, color.new(color.red , 90)) fill(plot(hma, "", hma > hma ? green : hma < hma ? red : na, editable=false), plot(hma, "", hma > hma ? green : hma < hma ? red : na, editable=false), hma > hma ? green : hma < hma ? red : na) // Alerts f_crossed_over() => ret = false for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1 float mid = math.round_to_mintick((array.get(sr_up_level, x) + array.get(sr_dn_level, x)) / 2) if close mid ret := true ret ret f_crossed_under() => ret = false for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1 float mid = math.round_to_mintick((array.get(sr_up_level, x) + array.get(sr_dn_level, x)) / 2) if close >= mid and close < mid ret := true ret ret f_sl_crossed() => ret = false stop = enableTrailingSL ? trailingStop : stop_y crossBull = low >= stop and low < stop and ta.barssince(low >= stop and low < stop) >= countBull - 1 crossBear = high stop and ta.barssince(high stop) >= countBear - 1 ret := trigger ? crossBull : crossBear f_tp_crossed(tp) => ret = false profit = tp crossBull = high profit and ta.barssince(high profit) >= countBull - 1 crossBear = low >= profit and low < profit and ta.barssince(low >= profit and low < profit) >= countBear - 1 ret := trigger ? crossBull : crossBear alert01 = (bull and close = smartFilter) alert02 = bull or bear alert03 = (bull and close > smartFilter) or (bear and close < smartFilter) alert04 = bull and close = smartFilter alert07 = bull and close > smartFilter alert08 = bear and close < smartFilter alert09 = f_sl_crossed() alert10 = f_crossed_under() alert11 = f_tp_crossed(tp1_y) alert12 = f_tp_crossed(tp2_y) alert13 = f_tp_crossed(tp3_y) alert14 = periodTrendCloud == "New" ? ta.crossunder(ema150, ema250) : (close < trendcloud) and (close > trendcloud) alert15 = periodTrendCloud == "New" ? ta.crossover (ema150, ema250) : (close > trendcloud) and (close < trendcloud) alerts(sym) => if alert01 or alert02 or alert03 or alert04 or alert05 or alert06 or alert07 or alert08 or alert09 or alert10 or alert11 or alert12 or alert13 or alert14 or alert15 alert("NEW ALERT", alert.freq_once_per_bar_close) alerts(syminfo.tickerid) alertcondition(alert01, "Any Signal Buy / sell", "Buy or Sell") alertcondition(alert02, "Any signal Buy/Smart Buy or Sell/Smart Sell", "Buy/Smart Buy or Sell/Smart Sell") alertcondition(alert03, "Any signal Smart Buy / Smart Sell", "Smart Buy or Smart Sell") alertcondition(alert04, "Buy alert", "Buy") alertcondition(alert05, "Resistance Broken", "Resistance Broken") alertcondition(alert06, "Sell alert", "Sell") alertcondition(alert07, "Smart Buy", "Smart Buy") alertcondition(alert08, "Smart Sell", "Smart Sell") alertcondition(alert09, "Stop loss", "Stop loss") alertcondition(alert10, "Support Broken", "Support Broken") alertcondition(alert11, "Target 1", "Target 1") alertcondition(alert12, "Target 2", "Target 2") alertcondition(alert13, "Target 3", "Target 3") alertcondition(alert14, "Trend cloud Bearish Alert", "Trend cloud Bearish") alertcondition(alert15, "Trend cloud Bullish Alert", "Trend cloud Bullish")