Recent in Technology

๐Ÿš€ 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.

Post a Comment

0 Comments

Recent in Technology