🚀 Ultimate Trading Dashboard: EMA Crossover + ADX Filter + MTF Scanner

🚀 Ultimate Trading Dashboard: EMA Crossover + ADX Filter + MTF Scanner

Welcome to the most advanced TradingView indicator script for Indian Stock Market Traders. If you trade NIFTY, BANKNIFTY, or F&O Stocks, this tool is designed to solve your biggest problem: Analysis Paralysis.

Instead of opening 10 different tabs to check trends, this indicator brings everything to a single screen. It combines Trend Following (EMA), Momentum (ADX), and Multi-Timeframe Analysis into one powerful dashboard.

Need a Custom Strategy or Modifications?

We build professional Pine Script indicators tailored to your needs.

📲 WhatsApp: 9713466747

🔥 Why This Indicator is a Game Changer?

Most traders lose money because they trade against the trend or enter during a sideways market. This script fixes that using a triple-confirmation system:

  • Confirmation 1 (EMA Crossover): We use EMA 9 and EMA 15. When the fast line crosses the slow line, it signals a potential entry.
  • Confirmation 2 (The ADX Filter): This is the secret sauce. A crossover is useless if the market has no power. We only generate a signal if ADX is greater than 25. This filters out 70% of fake signals.
  • Confirmation 3 (Global Sentiment): The dashboard shows you the trend of 10 major sectors/stocks at once. If NIFTY, BANKNIFTY, and HDFC are all Green, you know the market is Bullish.

📊 Key Features Explained

1. The "Jackpot" Combo Alert

Free TradingView users usually get only 1 alert. This script combines BUY and SELL logic into a single alert condition called "Jackpot Combo".

Logic: It triggers ONLY when a crossover happens AND the trend strength (ADX) is explosive. You get a notification saying: ⚠️ BIG MOVE: Strong Buy/Sell Signal on {{ticker}}! ADX > 25.

2. The Live Market Dashboard

On the right side of your screen, you will see a detailed table tracking 10 symbols (NIFTY, BANKNIFTY, FINNIFTY, IT, AUTO, RELIANCE, etc.).

  • LTP & %Chg: Live price tracking.
  • RSI: Background changes color if RSI is Overbought (>70) or Oversold (<30).
  • SIG (Signal): Shows 🔥 B (Buy) or ❌ S (Sell) based on breakout logic.

3. Multi-Timeframe (MTF) Scanner

A small movable panel allows you to see the trend of the current chart across all timeframes: 1m, 5m, 15m, 1H, 4H, Daily, and Weekly. Never trade against the higher timeframe trend again!

4. Auto Support & Resistance Levels

No need to draw lines manually. The script automatically plots:

  • PDH (Previous Day High): Important resistance.
  • PDL (Previous Day Low): Important support.
  • 200 EMA: The ultimate trend filter.

🛠️ How to Trade with This Tool

For Buying (Call Option / Long):

  1. Wait for a GREEN Arrow on the chart.
  2. Check the label: It must say "🚀 STRONG BUY" (this means ADX > 25).
  3. Look at the MTF Dashboard: Ensure 15m and 1H timeframes are also Green.
  4. Entry above the high of the signal candle. Stoploss below EMA 15.

For Selling (Put Option / Short):

  1. Wait for a RED Arrow on the chart.
  2. Check the label: It must say "🔻 STRONG SELL".
  3. Look at the MTF Dashboard: Ensure higher timeframes are Red.
  4. Entry below the low of the signal candle.

🔓 Download the Premium Pine Script

Enter your User ID and Password below to reveal the source code. Copy the code and paste it into the TradingView Pine Editor.

🔒

Restricted Content

This code is exclusive for premium members.



⚠️ Incorrect ID or Password

✅ Code Unlocked Successfully!

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ashishmishraahc

//@version=5
indicator("All-in-One: Full Dashboard + ADX + Combo Alert", overlay=true, max_labels_count=500, max_lines_count=500)

// ==========================================
// 🔹 1. GENERAL SETTINGS
// ==========================================
sizeInput = input.string("Small", "Dashboard Size", options=["Tiny", "Small", "Normal", "Large", "Auto"], group="Display Settings")
textSize = switch sizeInput
    "Tiny"   => size.tiny
    "Small"  => size.small
    "Normal" => size.normal
    "Large"  => size.large
    => size.auto

// ==========================================
// 🔹 2. CHART DATA & ALERTS (FREE PLAN FIX)
// ==========================================
chartSym = syminfo.tickerid
[ema9, ema15, vwap, c] = request.security(chartSym, timeframe.period, [ta.ema(close, 9), ta.ema(close, 15), ta.vwap, close])
[dplus, dminus, adxChart] = ta.dmi(14, 14)

// Conditions
buyCond  = ta.crossover(ema9, ema15)
sellCond = ta.crossunder(ema9, ema15)

// --- 🔥 COMBO ALERT LOGIC ---
// Ye Buy aur Sell dono ko check karega (Free plan ke liye 1 slot)
anyStrongSignal = (buyCond and adxChart > 25) or (sellCond and adxChart > 25)

alertcondition(anyStrongSignal, title="🔥 Jackpot Combo Alert", message="⚠️ BIG MOVE: Strong Buy/Sell Signal on {{ticker}}! ADX > 25. Check Chart!")

// Plot Arrows on Chart
var string lastSignal = "NONE"
if buyCond and lastSignal != "BUY"
    lastSignal := "BUY"
    txt = adxChart > 25 ? "🚀 STRONG BUY" : "BUY"
    label.new(bar_index, low, txt, color=color.green, style=label.style_label_up, textcolor=color.white, size=size.normal)

if sellCond and lastSignal != "SELL"
    lastSignal := "SELL"
    txt = adxChart > 25 ? "🔻 STRONG SELL" : "SELL"
    label.new(bar_index, high, txt, color=color.red, style=label.style_label_down, textcolor=color.white, size=size.normal)

// Plot Indicators
plot(ema9,  title="EMA 9",  color=color.green, linewidth=2)
plot(ema15, title="EMA 15", color=color.red,   linewidth=2)
plot(vwap,  title="VWAP",   color=color.new(color.blue, 0), linewidth=2, style=plot.style_line)

// ==========================================
// 🔹 3. FULL DASHBOARD (10 COLUMNS)
// ==========================================
sym1  = input.symbol("NSE:NIFTY", "Symbol 1", group="Symbols")
sym2  = input.symbol("NSE:BANKNIFTY", "Symbol 2", group="Symbols")
sym3  = input.symbol("NSE:CNXFINANCE", "Symbol 3", group="Symbols")
sym4  = input.symbol("NSE:CNXIT", "Symbol 4", group="Symbols")
sym5  = input.symbol("NSE:CNXAUTO", "Symbol 5", group="Symbols")
sym6  = input.symbol("NSE:CNXENERGY", "Symbol 6", group="Symbols")
sym7  = input.symbol("NSE:CNXFMCG", "Symbol 7", group="Symbols")
sym8  = input.symbol("NSE:SBIN", "Symbol 8", group="Symbols")
sym9  = input.symbol("NSE:HDFCBANK", "Symbol 9", group="Symbols")
sym10 = input.symbol("NSE:ICICIBANK", "Symbol 10", group="Symbols")

var table dash = table.new(position.top_right, 10, 12, border_width=1)

if barstate.isfirst
    table.cell(dash, 0, 0, "SYM",   text_color=color.white, bgcolor=color.gray, text_size=textSize)
    table.cell(dash, 1, 0, "LTP",      text_color=color.white, bgcolor=color.gray, text_size=textSize)
    table.cell(dash, 2, 0, "%CHG", text_color=color.white, bgcolor=color.gray, text_size=textSize)
    table.cell(dash, 3, 0, "RSI",      text_color=color.white, bgcolor=color.gray, text_size=textSize)
    table.cell(dash, 4, 0, "ADX",      text_color=color.white, bgcolor=color.gray, text_size=textSize)
    table.cell(dash, 5, 0, "LEVEL",    text_color=color.white, bgcolor=color.gray, text_size=textSize)
    table.cell(dash, 6, 0, "TRND",    text_color=color.white, bgcolor=color.gray, text_size=textSize)
    table.cell(dash, 7, 0, "EMA", text_color=color.white, bgcolor=color.gray, text_size=textSize)
    table.cell(dash, 8, 0, "VWAP",     text_color=color.white, bgcolor=color.gray, text_size=textSize)
    table.cell(dash, 9, 0, "SIG",    text_color=color.white, bgcolor=color.gray, text_size=textSize)

var int buyCount = 0
var int sellCount = 0

f_calcAdx() =>
    [dp, dm, val] = ta.dmi(14, 14)
    val

f_fill_row(row, sym) =>
    [cur, e9, e15, vwp, adxVal] = request.security(sym, timeframe.period, [close, ta.ema(close, 9), ta.ema(close, 15), ta.vwap, f_calcAdx()])
    [prevClose, prevHigh, prevLow] = request.security(sym, "D", [close[1], high[1], low[1]])
    
    chg = (na(prevClose) or prevClose == 0) ? na : ((cur - prevClose) / prevClose) * 100
    chgColor = (not na(chg) and chg >= 0) ? color.green : color.red
    rsi = na(cur) ? na : ta.rsi(cur, 14)
    
    adxColor = na(adxVal) ? color.gray : adxVal >= 25 ? color.new(color.green, 0) : adxVal < 20 ? color.gray : color.orange
    
    trendBull = e9 > e15
    trend_txt  = trendBull ? "UP" : "DN"
    trendColor = trendBull ? color.new(color.green, 0) : color.new(color.red, 0)
    
    lvl = ""
    sig = "NO"
    sigColor = color.orange
    if not na(prevHigh) and cur > prevHigh
        lvl := "Abv PDH"
        sig := "Brk ↑"
        sigColor := color.green
    else if not na(prevLow) and cur < prevLow
        lvl := "Blw PDL"
        sig := "Brk ↓"
        sigColor := color.red
    else
        lvl := "Rng"
        sig := "Rng"
        
    emaSig = e9 > e15 ? "B" : e9 < e15 ? "S" : "N"
    emaColor = e9 > e15 ? color.green : e9 < e15 ? color.red : color.orange
    vwapColor = cur > vwp ? color.green : cur < vwp ? color.red : color.gray
    
    finalSig = (sig == "Brk ↑" and emaSig == "B") ? "🔥 B" : (sig == "Brk ↓" and emaSig == "S") ? "❌ S" : "⚖️ N"
    finalColor = finalSig == "🔥 B" ? color.new(color.green, 0) : finalSig == "❌ S" ? color.new(color.red, 0) : color.new(color.orange, 0)
    
    rsiBg = na(rsi) ? color.black : rsi > 70 ? color.new(color.red, 0) : rsi < 30 ? color.new(color.green, 0) : color.rgb(60, 60, 60)

    table.cell(dash, 0, row, str.replace_all(sym, "NSE:", ""), text_color=color.white, bgcolor=color.black, text_size=textSize)
    table.cell(dash, 1, row, na(cur) ? "-" : str.tostring(cur, format.mintick), text_color=color.white, bgcolor=color.black, text_size=textSize)
    table.cell(dash, 2, row, na(chg) ? "-" : str.tostring(chg, "#.1") + "%", text_color=color.white, bgcolor=chgColor, text_size=textSize)
    table.cell(dash, 3, row, na(rsi) ? "-" : str.tostring(rsi, "#"), text_color=color.white, bgcolor=rsiBg, text_size=textSize)
    table.cell(dash, 4, row, na(adxVal) ? "-" : str.tostring(adxVal, "#"), text_color=color.white, bgcolor=adxColor, text_size=textSize)
    table.cell(dash, 5, row, lvl, text_color=color.white, bgcolor=sigColor, text_size=textSize)
    table.cell(dash, 6, row, trend_txt, text_color=color.white, bgcolor=trendColor, text_size=textSize)
    table.cell(dash, 7, row, emaSig, text_color=color.white, bgcolor=emaColor, text_size=textSize)
    table.cell(dash, 8, row, na(vwp) ? "-" : str.tostring(vwp, format.mintick), text_color=color.white, bgcolor=vwapColor, text_size=textSize)
    table.cell(dash, 9, row, finalSig, text_color=color.white, bgcolor=finalColor, text_size=textSize)
    finalSig

// Fill Rows separately to avoid errors
s1 = f_fill_row(1, sym1)
s2 = f_fill_row(2, sym2)
s3 = f_fill_row(3, sym3)
s4 = f_fill_row(4, sym4)
s5 = f_fill_row(5, sym5)
s6 = f_fill_row(6, sym6)
s7 = f_fill_row(7, sym7)
s8 = f_fill_row(8, sym8)
s9 = f_fill_row(9, sym9)
s10 = f_fill_row(10, sym10)

// Sentiment Logic
for s in array.from(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10)
    if s == "🔥 B"
        buyCount += 1
    else if s == "❌ S"
        sellCount += 1

marketSentiment = buyCount > sellCount ? "Bullish 🟢" : sellCount > buyCount ? "Bearish 🔴" : "Neutral ⚖️"
sentimentColor = buyCount > sellCount ? color.new(color.green, 20) : sellCount > buyCount ? color.new(color.red, 20) : color.new(color.orange, 20)
table.merge_cells(dash, 0, 11, 9, 11)
table.cell(dash, 0, 11, "SENTIMENT: " + marketSentiment + " (B:" + str.tostring(buyCount) + " S:" + str.tostring(sellCount) + ")", text_color=color.white, bgcolor=sentimentColor, text_size=textSize)

// ==========================================
// 🔹 3. MINI MTF DASHBOARD (Compact & Movable)
// ==========================================
// Inputs for Position
mtfPosStr = input.string("Bottom Right", "MTF Widget Position", options=["Top Right", "Top Left", "Top Center", "Bottom Right", "Bottom Left", "Bottom Center", "Middle Right", "Middle Left"], group="MTF Mini Settings")
mtfSizeInput = input.string("Small", "MTF Widget Size", options=["Tiny", "Small", "Normal"], group="MTF Mini Settings")

// Map inputs to real values
mtfPos = switch mtfPosStr
    "Top Right"    => position.top_right
    "Top Left"     => position.top_left
    "Top Center"   => position.top_center
    "Bottom Right" => position.bottom_right
    "Bottom Left"  => position.bottom_left
    "Bottom Center"=> position.bottom_center
    "Middle Right" => position.middle_right
    "Middle Left"  => position.middle_left
    => position.bottom_right

mtfTextSize = switch mtfSizeInput
    "Tiny"   => size.tiny
    "Small"  => size.small
    "Normal" => size.normal
    => size.small

mtfMaLen = input.int(50, "MTF Trend EMA Length", group="MTF Mini Settings")

var table mtfDash = table.new(mtfPos, 2, 10, border_width=1, frame_color=color.gray, bgcolor=color.rgb(20, 20, 20))

f_get_mtf_trend(tf) =>
    [c_mtf, ema_mtf] = request.security(syminfo.tickerid, tf, [close, ta.ema(close, mtfMaLen)])
    c_mtf > ema_mtf

f_fill_mtf_row(row, tf, dispName) =>
    isBull = f_get_mtf_trend(tf)
    table.cell(mtfDash, 0, row, dispName, text_color=color.white, bgcolor=color.rgb(40, 44, 52), text_size=mtfTextSize)
    table.cell(mtfDash, 1, row, isBull ? "🟢" : "🔴", text_color=color.white, bgcolor=isBull ? color.new(color.green, 80) : color.new(color.red, 80), text_size=mtfTextSize)

if barstate.islast
    f_fill_mtf_row(0, "1",   "1m")
    f_fill_mtf_row(1, "3",   "3m")
    f_fill_mtf_row(2, "5",   "5m")
    f_fill_mtf_row(3, "15",  "15m")
    f_fill_mtf_row(4, "30",  "30m")
    f_fill_mtf_row(5, "60",  "1h")
    f_fill_mtf_row(6, "240", "4h")
    f_fill_mtf_row(7, "D",   "Day")
    f_fill_mtf_row(8, "W",   "Wk")

// ==========================================
// 🔹 5. CHART PLOTS (PDH, PDL, EMA200)
// ==========================================
[pdh_chart, pdl_chart] = request.security(syminfo.tickerid, "D", [high[1], low[1]], lookahead=barmerge.lookahead_on)
finalSigChart = "N"
if (not na(c)) and (not na(pdh_chart)) and (not na(pdl_chart))
    if (c >= pdh_chart) and (ema9 > ema15)
        finalSigChart := "B"
    else if (c <= pdl_chart) and (ema9 < ema15)
        finalSigChart := "S"

bgCol = finalSigChart == "B" ? color.new(color.green, 90) : finalSigChart == "S" ? color.new(color.red, 90) : color.new(color.orange, 95)
bgcolor(bgCol)

plot(pdh_chart, title="PDH", color=color.green, linewidth=2)
plot(pdl_chart, title="PDL", color=color.red, linewidth=2)
ema200 = ta.ema(close, 200)
plot(ema200, title="Trend EMA200", color=close > ema200 ? color.green : color.red, linewidth=2)

© 2025 Ashish Mishra Trading Tools. All Rights Reserved.

💬 Comments

Share your thoughts:

Post a Comment