// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © QuantAi-Trend //@version=6 indicator(title = 'AlphaTrend PRO+ (#BOSS) V2', overlay = false,max_labels_count = 500,max_lines_count = 500,max_boxes_count = 500,max_bars_back = 1000) g_switches = "Indicators" ms_activate = input(true,"Activate Dynamic Dots",group = g_switches) ad1_activate = input(true,"Activate Dynamic Reversion Bands",group = g_switches) linreg_activate = input(false,"Activate Channels",group = g_switches) ad3_activate = input(false,"Activate Multi-Timeframe Support/Resistance",group = g_switches) ad4_activate = input(true,"Activate OverBought/OverSold Banners",group = g_switches) ad6_activate = input(true,"Activate Areas of Interest",group = g_switches) g_lowerPane = "Lower Plots" ad1_plot_stoch = false//input(true,"Plot BCB Stoch",group = g_lowerPane,inline = "bcb") and ms_activate // ad5_plot_rsiBaseBanker = input(true,"Plot Flow Meter",group = g_lowerPane,inline = "fm") ad5_plot_bf = input(false,"Plot Banker Flow",group = g_lowerPane,inline = "fm1") // show_upper = input(true,"Blue",group = g_lowerPane,inline = "fm" ) upper_col = input.color(#5b9cf6,'',group = g_lowerPane,inline = "fm1") ad5_plot_if = input(false,"Plot Institutional Flow",group = g_lowerPane,inline = "fm2") // show_lower = input(true,"Yellow",group = g_lowerPane,inline = "fm" ) lower_col = input.color(color.yellow,'',group = g_lowerPane,inline = "fm2") ////////////// SMAs // Enable SMA1 Feature Enable_SMA1 = input.bool(false, title="SMA1",inline="SMA1",group = "SMAs") SMA1_len = input(34,"Length",group = "SMAs",inline = "SMA1") SMA1_src = input(close,"Src",group = "SMAs",inline = "SMA1") SMA1_Color = input.color(color.white, title="",inline="SMA1",group = "SMAs") // Calculate 34 SMA var float SMA1_34 = na if Enable_SMA1 SMA1_34 := ta.sma(SMA1_src, SMA1_len) // Plot SMA plot(SMA1_34, color=SMA1_Color, title="SMA 1",force_overlay = true,editable = false) // Enable SMA1 Feature Enable_SMA2 = input.bool(false, title="SMA2",inline="SMA2",group = "SMAs") SMA2_len = input(55,"Length",group = "SMAs",inline = "SMA2") SMA2_src = input(close,"Src",group = "SMAs",inline = "SMA2") SMA2_Color = input.color(#ff6e6e, title="",inline="SMA2",group = "SMAs") var float SMA2_55 = na if Enable_SMA2 SMA2_55 := ta.sma(SMA2_src, SMA2_len) plot(SMA2_55, color=SMA2_Color, title="SMA 2",force_overlay = true,editable = false) //////////////////////////////// MP scaleBetween(unscaledNum,min,max,targetMin,targetMax) => (targetMax - targetMin) * (unscaledNum - min) / (max - min) + targetMin ad6_plot_stoch_bg = input(true,"Plot Momentum Pulse",group = g_lowerPane,inline = "fm3") // show_lower = input(true,"Yellow",group = g_lowerPane,inline = "fm" ) ad6_stoch_bullc = input.color(color.new(color.white,0),'',group = g_lowerPane,inline = "fm3") ad6_stoch_bearc = input.color(#ff7575,'',group = g_lowerPane,inline = "fm3") ad6_plot_stoch_sig = input(true,"Crosses",group = g_lowerPane,inline = "fm3") //////////////////////////// ADX ad7_plot_sr = input(true,"Plot S/R Factor",group = g_lowerPane) //====================================================================== // S/R FACTOR SETTINGS (BETA — thresholds exposed) //====================================================================== g_sr = "S/R Factor" // Threshold inputs (BETA — exposed) adx_len = input(14,"ADX Length",group = g_sr) sr_rsi_os_th = input.float(20.0, "RSI Oversold", group = g_sr, inline = "rsi_th") sr_rsi_ob_th = input.float(80.0, "Overbought", group = g_sr, inline = "rsi_th") sr_stoch_os_th = input.float(-75.0, "Stoch Oversold", group = g_sr, inline = "stoch_th") sr_stoch_ob_th = input.float(75.0, "Overbought", group = g_sr, inline = "stoch_th") sr_di_norm_th = input.float(11.7, "DI Normal TH", group = g_sr, inline = "di_th") sr_di_extr_th = input.float(7.0, "Extreme TH", group = g_sr, inline = "di_th") // Color inputs (BETA — visible) sr_bull_norm_c = input.color(color.white, "Bullish Normal", group = g_sr, inline = "srbull") sr_bull_elev_c = input.color(color.yellow, "", group = g_sr, inline = "srbull") sr_bull_extr_c = input.color(color.red, "", group = g_sr, inline = "srbull") sr_bear_norm_c = input.color(color.white, "Bearish Normal", group = g_sr, inline = "srbear") sr_bear_elev_c = input.color(color.yellow, "", group = g_sr, inline = "srbear") sr_bear_extr_c = input.color(color.red, "", group = g_sr, inline = "srbear") // ADX computation (still needed for DI+ / DI-) TrueRange = math.max(math.max(high - low, math.abs(high - nz(close[1]))), math.abs(low - nz(close[1]))) DirectionalMovementPlus = high - nz(high[1]) > nz(low[1]) - low ? math.max(high - nz(high[1]), 0) : 0 DirectionalMovementMinus = nz(low[1]) - low > high - nz(high[1]) ? math.max(nz(low[1]) - low, 0) : 0 SmoothedTrueRange = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - nz(SmoothedTrueRange[1]) / adx_len + TrueRange SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - nz(SmoothedDirectionalMovementPlus[1]) / adx_len + DirectionalMovementPlus SmoothedDirectionalMovementMinus = 0.0 SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - nz(SmoothedDirectionalMovementMinus[1]) / adx_len + DirectionalMovementMinus adx_DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 adx_DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 adx_DX = math.abs(adx_DIPlus - adx_DIMinus) / (adx_DIPlus + adx_DIMinus) * 100 ADX = ta.sma(adx_DX, adx_len) // Old S/R visualization removed — new logic placed after ms_rsi0 computation ///////////////////////// // ms_q = 10 // ms_r = 3 // ms_s = 3 // ms_nsig = 3 // ms_matype = 'ema' // possible: ema, sma, wma, trima, hma, dema, tema, zlema // ms_overbought = 75 // ms_oversold = -75 // ms_plot_circles = true // trima(ms_src, ms_length) => // ta.sma(ta.sma(ms_src, ms_length), ms_length) // hma(ms_src, ms_length) => // ta.wma(2 * ta.wma(ms_src, ms_length / 2) - ta.wma(ms_src, ms_length), math.round(math.sqrt(ms_length))) // dema(ms_src, ms_length) => // 2 * ta.ema(ms_src, ms_length) - ta.ema(ta.ema(ms_src, ms_length), ms_length) // tema(ms_src, ms_length) => // 3 * ta.ema(ms_src, ms_length) - 3 * ta.ema(ta.ema(ms_src, ms_length), ms_length) + ta.ema(ta.ema(ta.ema(ms_src, ms_length), ms_length), ms_length) // zlema(ms_src, ms_length) => // ta.ema(ms_src, ms_length) + ta.ema(ms_src, ms_length) - ta.ema(ta.ema(ms_src, ms_length), ms_length) // ms_smi = 100 * ta.ema(ta.ema(close - 0.5 * (ta.highest(ms_q) + ta.lowest(ms_q)), ms_r), ms_s) / (0.5 * ta.ema(ta.ema(ta.highest(ms_q) - ta.lowest(ms_q), ms_r), ms_s)) // ema_1 = ta.ema(ms_smi, ms_nsig) // sma_1 = ta.sma(ms_smi, ms_nsig) // wma_1 = ta.wma(ms_smi, ms_nsig) // trima__1 = trima(ms_smi, ms_nsig) // hma__1 = hma(ms_smi, ms_nsig) // dema__1 = dema(ms_smi, ms_nsig) // tema__1 = tema(ms_smi, ms_nsig) // zlema__1 = zlema(ms_smi, ms_nsig) // ema_2 = ta.ema(ms_smi, ms_nsig) // ms_sig = ms_matype == 'ema' ? ema_1 : ms_matype == 'sma' ? sma_1 : ms_matype == 'wma' ? wma_1 : ms_matype == 'trima' ? trima__1 : ms_matype == 'hma' ? hma__1 : ms_matype == 'dema' ? dema__1 : ms_matype == 'tema' ? tema__1 : ms_matype == 'zlema' ? zlema__1 : ema_2 // p_smi = plot(ad1_plot_stoch and ms_activate? ms_smi : na, title = 'Smi', color = color.rgb(246, 246, 246), linewidth = 3) // p_sig = plot(ad1_plot_stoch and ms_activate? ms_sig : na, title = 'Signal', color = color.new(#854a0e, 0), linewidth = 3) ms_q = 10 ms_r = 3 ms_s = 3 ms_nsig = 3 ms_matype = 'ema' // possible: ema, sma, wma, trima, hma, dema, tema, zlema ms_overbought = 75 ms_oversold = -75 ms_plot_circles = true trima(ms_src, ms_length) => ta.sma(ta.sma(ms_src, ms_length), ms_length) hma(ms_src, ms_length) => ta.wma(2 * ta.wma(ms_src, ms_length / 2) - ta.wma(ms_src, ms_length), math.round(math.sqrt(ms_length))) dema(ms_src, ms_length) => 2 * ta.ema(ms_src, ms_length) - ta.ema(ta.ema(ms_src, ms_length), ms_length) tema(ms_src, ms_length) => 3 * ta.ema(ms_src, ms_length) - 3 * ta.ema(ta.ema(ms_src, ms_length), ms_length) + ta.ema(ta.ema(ta.ema(ms_src, ms_length), ms_length), ms_length) zlema(ms_src, ms_length) => ta.ema(ms_src, ms_length) + ta.ema(ms_src, ms_length) - ta.ema(ta.ema(ms_src, ms_length), ms_length) ms_smi = 100 * ta.ema(ta.ema(close - 0.5 * (ta.highest(ms_q) + ta.lowest(ms_q)), ms_r), ms_s) / (0.5 * ta.ema(ta.ema(ta.highest(ms_q) - ta.lowest(ms_q), ms_r), ms_s)) ema_1 = ta.ema(ms_smi, ms_nsig) sma_1 = ta.sma(ms_smi, ms_nsig) wma_1 = ta.wma(ms_smi, ms_nsig) trima__1 = trima(ms_smi, ms_nsig) hma__1 = hma(ms_smi, ms_nsig) dema__1 = dema(ms_smi, ms_nsig) tema__1 = tema(ms_smi, ms_nsig) zlema__1 = zlema(ms_smi, ms_nsig) ema_2 = ta.ema(ms_smi, ms_nsig) ms_sig = ms_matype == 'ema' ? ema_1 : ms_matype == 'sma' ? sma_1 : ms_matype == 'wma' ? wma_1 : ms_matype == 'trima' ? trima__1 : ms_matype == 'hma' ? hma__1 : ms_matype == 'dema' ? dema__1 : ms_matype == 'tema' ? tema__1 : ms_matype == 'zlema' ? zlema__1 : ema_2 // mom pulse lowerLim = -75 upperLim = 75 plot(ad6_plot_stoch_bg? ms_smi : na, title = '%K', color = ad6_stoch_bullc, linewidth = 2) plot(ad6_plot_stoch_bg? ms_sig : na, title = '%D', color = ad6_stoch_bearc, linewidth = 2) h0 = hline(ad6_plot_stoch_bg? upperLim : na,title = "Momentum Pulse Upper") h1 = hline(ad6_plot_stoch_bg? lowerLim : na,title = "Momentum Pulse Lower") pulseBull = ta.crossover(ms_smi,ms_sig) pulseBear = ta.crossunder(ms_smi,ms_sig) //Triangle indicator script for stochastic k,d crossing atr = ta.atr(14) //if ad6_plot_stoch_bg and ad6_plot_stoch_sig // if pulseBull // label.new(bar_index,ms_sig-10,"",yloc=yloc.price,style=label.style_triangleup,color=color.green,size = size.tiny) // if pulseBear // label.new(bar_index,ms_sig+10,"",yloc=yloc.price,style=label.style_triangledown,color=color.red,size = size.tiny) // Cross conditions var mpTrend = 0 co = ta.crossover(ms_smi, ms_sig) cu = ta.crossunder(ms_smi, ms_sig) if co mpTrend := 1 if cu mpTrend := -1 col = mpTrend == 1 ? ad6_stoch_bullc : mpTrend == -1 ? ad6_stoch_bearc : na // bgcolor(ad6_plot_stoch_bg? col : na,title = "Momentum Pulse Background") alertcondition(pulseBull,"Momentum Pulse Bullish","Pulse Bullish @ {{ticker}}") alertcondition(pulseBear,"Momentum Pulse Bearish","Pulse Bearish @ {{ticker}}") ////////////////////// ms_trendlines_g = 'Trendlines' ms_show_trendlines = input(true, 'Show Trendlines', group = ms_trendlines_g) and ms_activate dot_size = str.lower(input.string("Auto","Dot Size",options=["Auto","Tiny","Small","Normal","Large","Huge"],group=ms_trendlines_g)) la_sz = input.string('normal', 'label Size', ['tiny', 'small', 'normal', 'large', 'huge'], group = ms_trendlines_g) ms_length = 14 ms_mult = 1 ms_calcMethod = 'Atr' ms_backpaint = input(true,"Backpaint", group = ms_trendlines_g) //Style ms_upCss = input.color(color.new(color.green,30), 'color', group = ms_trendlines_g) ms_dnCss = input.color(color.new(color.red,30), 'color', group = ms_trendlines_g) ms_showExt = input(true, 'Show Extended ms_lines', group = ms_trendlines_g) ms_lin_w = input.int(2, 'Trendline width', group = ms_trendlines_g) ms_fomo_white = input.color(color.white,'FOMO CANDLES',inline='col',group = ms_trendlines_g) ms_fomo_yel = input.color(color.yellow,'',inline='col',group = ms_trendlines_g) // Dots cSize = size.auto dotLvl3 = 90 dotLvl2 = 84 dotLvl1 = 75 isTopRedDot = false isTopYelDot = false isTopWhiteDot = false isBotRedDot = false isBotYelDot = false isBotWhiteDot = false if ms_activate and ms_plot_circles if ms_smi > dotLvl3 label.new(bar_index,high,"",yloc = yloc.abovebar,style = label.style_circle,color=color.red,force_overlay = true,size=dot_size) isTopRedDot := true if ms_smi > dotLvl2 and ms_smi < dotLvl3 label.new(bar_index,high,"",yloc = yloc.abovebar,style = label.style_circle,color=color.yellow,force_overlay = true,size=dot_size) isTopYelDot := true if ms_smi > dotLvl1 and ms_smi < dotLvl2 label.new(bar_index,high,"",yloc = yloc.abovebar,style = label.style_circle,color=color.white,force_overlay = true,size=dot_size) isTopWhiteDot := true if ms_smi < -dotLvl3 label.new(bar_index,low,"",yloc = yloc.belowbar,style = label.style_circle,color=color.red,force_overlay = true,size=dot_size) isBotRedDot := true if ms_smi < -dotLvl2 and ms_smi > -dotLvl3 label.new(bar_index,low,"",yloc = yloc.belowbar,style = label.style_circle,color=color.yellow,force_overlay = true,size=dot_size) isBotYelDot := true if ms_smi < -dotLvl1 and ms_smi > -dotLvl2 label.new(bar_index,low,"",yloc = yloc.belowbar,style = label.style_circle,color=color.white,force_overlay = true,size=dot_size) isBotWhiteDot := true alertcondition( isTopWhiteDot , "Top White Dot", "Top White Dot @ {{ticker}}") alertcondition( isTopYelDot , "Top Yellow Dot", "Top Yellow Dot @ {{ticker}}") alertcondition( isTopRedDot , "Top Red Dot", "Top Red Dot @ {{ticker}}") alertcondition( isBotWhiteDot , "Bottom White Dot", "Bottom White Dot @ {{ticker}}") alertcondition( isBotYelDot , "Bottom Yellow Dot", "Bottom Yellow Dot @ {{ticker}}") alertcondition( isBotRedDot , "Bottom Red Dot", "Bottom Red Dot @ {{ticker}}") var ms_upper = 0. var ms_lower = 0. var ms_slope_ph = 0. var ms_slope_pl = 0. var ms_offset = ms_backpaint ? ms_length : 0 n = bar_index ms_src = close ms_ph = ta.pivothigh(ms_length, ms_length) ms_pl = ta.pivotlow(ms_length, ms_length) ms_slope = switch ms_calcMethod 'Atr' => ta.atr(ms_length) / ms_length * ms_mult 'Stdev' => ta.stdev(ms_src, ms_length) / ms_length * ms_mult 'Linreg' => math.abs(ta.sma(ms_src * n, ms_length) - ta.sma(ms_src, ms_length) * ta.sma(n, ms_length)) / ta.variance(n, ms_length) / 2 * ms_mult ms_slope_ph := bool(ms_ph) ? ms_slope : ms_slope_ph ms_slope_pl := bool(ms_pl) ? ms_slope : ms_slope_pl ms_upper := bool(ms_ph) ? ms_ph : ms_upper - ms_slope_ph ms_lower := bool(ms_pl) ? ms_pl : ms_lower + ms_slope_pl var upos = 0 var dnos = 0 upos := bool(ms_ph) ? 0 : close > ms_upper - ms_slope_ph * ms_length ? 1 : upos dnos := bool(ms_pl) ? 0 : close < ms_lower + ms_slope_pl * ms_length ? 1 : dnos var uptl = line.new(na, na, na, na, color = ms_upCss, style = line.style_solid, extend = extend.right, width = ms_lin_w, force_overlay = true) var dntl = line.new(na, na, na, na, color = ms_dnCss, style = line.style_solid, extend = extend.right, width = ms_lin_w, force_overlay = true) if ms_show_trendlines if bool(ms_ph) and ms_showExt uptl.set_xy1(n - ms_offset, ms_backpaint ? ms_ph : ms_upper - ms_slope_ph * ms_length) uptl.set_xy2(n - ms_offset + 1, ms_backpaint ? ms_ph - ms_slope : ms_upper - ms_slope_ph * (ms_length + 1)) if bool(ms_pl) and ms_showExt dntl.set_xy1(n - ms_offset, ms_backpaint ? ms_pl : ms_lower + ms_slope_pl * ms_length) dntl.set_xy2(n - ms_offset + 1, ms_backpaint ? ms_pl + ms_slope : ms_lower + ms_slope_pl * (ms_length + 1)) plot(ms_show_trendlines ? ms_backpaint ? ms_upper : ms_upper - ms_slope_ph * ms_length : na, 'Upper', color = bool(ms_ph) ? na : ms_upCss, offset = -ms_offset, force_overlay = true,linewidth = 2,editable = false,display = display.pane) plot(ms_show_trendlines ? ms_backpaint ? ms_lower : ms_lower + ms_slope_pl * ms_length : na, 'Lower', color = bool(ms_pl) ? na : ms_dnCss, offset = -ms_offset, force_overlay = true,linewidth = 2,editable = false,display = display.pane) B_l = ta.atr(14) S_l = ta.atr(14) if ms_show_trendlines if upos > upos[1] label.new(bar_index, low - ( B_l * 4 ), text = 'B', style = label.style_label_up, textcolor = color.white, color = ms_upCss, size = la_sz, force_overlay = true) if dnos > dnos[1] label.new(bar_index, high + ( S_l * 4 ), text = 'B', style = label.style_label_down, textcolor = color.white, color = ms_dnCss, size = la_sz, force_overlay = true) alertcondition(upos > upos[1], 'Trendline Upward Breakout', 'Price broke the down trendline upward') alertcondition(dnos > dnos[1], 'Trendline Downward Breakout', 'Price broke the up trendline downward') timeframe_option = 'D' ms_line_color = input.color(#ba68c8, 'Line color', group = 'OPENING PRICE LINE') ms_line_thickness = 2 ms_line_style = input.string('Solid', 'Line Style', options = ['Solid', 'Dotted', 'Dashed'], group = 'OPENING PRICE LINE') ms_line_style_enum = ms_line_style == 'Solid' ? line.style_solid : ms_line_style == 'Dotted' ? line.style_dotted : line.style_dashed ms_show_labels = true ms_label_color = color.black ms_open1 = request.security(syminfo.tickerid, timeframe_option, open[2], lookahead = barmerge.lookahead_on) ms_open2 = request.security(syminfo.tickerid, timeframe_option, open[1], lookahead = barmerge.lookahead_on) ms_open3 = request.security(syminfo.tickerid, timeframe_option, open, lookahead = barmerge.lookahead_on) ms_open1_time = request.security(syminfo.tickerid, timeframe_option, time[2], lookahead = barmerge.lookahead_on) ms_open2_time = request.security(syminfo.tickerid, timeframe_option, time[1], lookahead = barmerge.lookahead_on) ms_open3_time = request.security(syminfo.tickerid, timeframe_option, time, lookahead = barmerge.lookahead_on) var array ms_lines = array.new_line(0) var array