Quellcode : // ============================================================

// NQ NY Session — 8 EMA / 13·21·55 TEMA Dashboard

// Version: v3.0

//

// Funktionen:

// — 8 EMA (blau, dick) + 13/21/55 TEMA Linien

// — VWAP

// — Checkliste Tabelle (oben rechts):

// ✔/✘ 8 EMA kreuzte 55 TEMA

// ▲/▼ Trendrichtung (bullish/bearish)

// ✔/✘ 55 TEMA Ausrichtung (über allem für kurz / unter allem für lang)

// ✔/✘ 5m Zeitrahmen stimmt überein (8 EMA vs 55 TEMA auf 5m)

// ============================================================

//@version=6

indicator(title = "NQ NY — EMA/TEMA Dashboard",

shorttitle = "EMA/TEMA Dashboard",

overlay = true,

max_labels_count = 500,

max_boxes_count = 100)

// ─────────────────────────────────────────────

// EINGABEN

// ─────────────────────────────────────────────

grpEma = "Gleitende Durchschnitte"

emaLen = input.int(8, "EMA Länge", minval=1, group=grpEma)

t13Len = input.int(13, "TEMA 13 Länge", minval=1, group=grpEma)

t21Len = input.int(21, "TEMA 21 Länge", minval=1, group=grpEma)

t55Len = input.int(55, "TEMA 55 Länge", minval=1, group=grpEma)

showT13 = input.bool(true, "Zeige 13 TEMA", group=grpEma)

showT21 = input.bool(true, "Zeige 21 TEMA", group=grpEma)

showVwap = input.bool(true, "Zeige VWAP", group=grpEma)

grpVis = "Visuals"

emaCol = input.color(#1E90FF, "8 EMA Farbe", group=grpVis)

t13Col = input.color(color.new(#B39DDB,0),"13 TEMA Farbe", group=grpVis)

t21Col = input.color(color.new(#FFD740,0),"21 TEMA Farbe", group=grpVis)

t55Col = input.color(color.new(#FF9800,0),"55 TEMA Farbe", group=grpVis)

vwapCol = input.color(color.new(#E040FB,0),"VWAP Farbe", group=grpVis)

// ─────────────────────────────────────────────

// BERECHNUNGEN FÜR GLEITENDE DURCHSCHNITTE

// ─────────────────────────────────────────────

tema(src, len) =>

e1 = ta.ema(src, len)

e2 = ta.ema(e1, len)

e3 = ta.ema(e2, len)

3 e1 - 3 e2 + e3

ema8 = ta.ema(close, emaLen)

t13 = tema(close, t13Len)

t21 = tema(close, t21Len)

t55 = tema(close, t55Len)

// VWAP (Sitzung)

[vwapVal, , ] = ta.vwap(hlc3, false, 1)

// ─────────────────────────────────────────────

// CHECKLISTENLOGIK

// ─────────────────────────────────────────────

// 1. Hat 8 EMA 55 TEMA gekreuzt? (ist derzeit auf einer Seite)

// Grün = ein Kreuz hat stattgefunden (ema8 != t55 Seite, d.h. sie sind nicht gleich/verwickelt)

// Wir verfolgen, ob ema8 über oder unter t55 ist als den Kreuzstatus

emaCrossedBull = ema8 > t55 // ema oberhalb gekreuzt → bullisch

emaCrossedBear = ema8 < t55 // ema unterhalb gekreuzt → bärisch

crossOccurred = emaCrossedBull or emaCrossedBear

// 2. Trendrichtung

isBullish = ema8 > t55

isBearish = ema8 < t55

// 3. 55 TEMA Ausrichtung

// Für SHORT: t55 sollte ÜBER allen anderen MAs sein (Preis unter allen = bärischer Stapel)

// Für LONG: t55 sollte UNTER allen anderen MAs sein (Preis über allen = bullischer Stapel)

t55AboveAll = t55 > ema8 und t55 > t13 und t55 > t21 // gut für SHORT

t55BelowAll = t55 < ema8 und t55 < t13 und t55 < t21 // gut für LONG

t55Aligned = t55AboveAll or t55BelowAll

// 4. 5-Minuten-Zeitrahmen-Ausrichtung (8 EMA vs 55 TEMA auf 5m)

ema8_5m = request.security(syminfo.tickerid, "5", ta.ema(close, 8), lookahead=barmerge.lookahead_off)

t55_5m_e1 = request.security(syminfo.tickerid, "5", ta.ema(close, 55), lookahead=barmerge.lookahead_off)

t55_5m_e2 = request.security(syminfo.tickerid, "5", ta.ema(t55_5m_e1, 55), lookahead=barmerge.lookahead_off)

t55_5m_e3 = request.security(syminfo.tickerid, "5", ta.ema(t55_5m_e2, 55), lookahead=barmerge.lookahead_off)

t55_5m = 3 t55_5m_e1 - 3 t55_5m_e2 + t55_5m_e3

tfAlignBull = ema8_5m > t55_5m // 5m bullisch stimmt mit aktuellem bullisch überein

tfAlignBear = ema8_5m < t55_5m // 5m bärisch stimmt mit aktuellem bärisch überein

tfAligned = (isBullish and tfAlignBull) or (isBearish and tfAlignBear)

// ─────────────────────────────────────────────

// KREUZERKENNUNG

// ─────────────────────────────────────────────

bullCross = ta.crossover(ema8, t55)

bearCross = ta.crossunder(ema8, t55)

// ─────────────────────────────────────────────

// PLOTS

// ─────────────────────────────────────────────

plot(t55, title="55 TEMA", color=t55Col, linewidth=2)

plot(showT21 ? t21 : na, title="21 TEMA", color=t21Col, linewidth=2)

plot(showT13 ? t13 : na, title="13 TEMA", color=t13Col, linewidth=1)

plot(ema8, title="8 EMA", color=emaCol, linewidth=4)

plot(showVwap ? vwapVal : na, title="VWAP", color=vwapCol, linewidth=1, style=plot.style_circles)

// Kreuzmarker — "+" Label an exakter Schnittstelle von 8 EMA und 55 TEMA platziert

crossPrice = math.avg(ema8, t55)

if bullCross

label.new(bar_index, crossPrice,

text = "+",

textcolor = #00E676,

style = label.style_none,

size = size.huge)

if bearCross

label.new(bar_index, crossPrice,

text = "+",

textcolor = #FF1744,

style = label.style_none,

size = size.huge)

// ─────────────────────────────────────────────

// DASHBOARD-TABELLE

// ─────────────────────────────────────────────

var table dash = table.new(

position = position.top_right,

columns = 2,

rows = 6,

bgcolor = color.new(#0D1117, 10),

border_width = 1,

border_color = color.new(#2A3A4A, 0),

frame_width = 2,

frame_color = color.new(#1E90FF, 60))

// Farben

C_GREEN = #00E676

C_RED = #FF1744

C_WHITE = #EAEAEA

C_MUTED = #607080

C_HEADER = #0D1117

C_BULL = #00E676

C_BEAR = #FF1744

if barstate.islast

// ── Kopfzeile ──────────────────────────────

table.cell(dash, 0, 0, "BEDINGUNG",

text_color=color.new(C_MUTED, 0),

text_size=size.small,

bgcolor=color.new(#141C27, 0),

text_halign=text.align_left)

table.cell(dash, 1, 0, "STATUS",

text_color=color.new(C_MUTED, 0),

text_size=size.small,

bgcolor=color.new(#141C27, 0),

text_halign=text.align_center)

// ── Zeile 1: Kreuzung ────────────────────

table.cell(dash, 0, 1, "EMA8 × TEMA55 Kreuz",

text_color=C_WHITE,

text_size=size.small,

bgcolor=color.new(#0D1117, 0),

text_halign=text.align_left)

table.cell(dash, 1, 1,

crossOccurred ? "✔" : "✘",

text_color = crossOccurred ? C_GREEN : C_RED,

text_size = size.normal,

bgcolor = color.new(#0D1117, 0),

text_halign= text.align_center)

// ── Zeile 2: Trendrichtung ───────────────

trendTxt = isBullish ? "▲ BULLISH" : isBearish ? "▼ BEARISH" : "─ NEUTRAL"

trendColor = isBullish ? C_BULL : isBearish ? C_BEAR : C_MUTED

table.cell(dash, 0, 2, "Trendrichtung",

text_color=C_WHITE,

text_size=size.small,

bgcolor=color.new(#0D1117, 0),

text_halign=text.align_left)

table.cell(dash, 1, 2, trendTxt,

text_color = trendColor,

text_size = size.small,

bgcolor = color.new(#0D1117, 0),

text_halign= text.align_center)

// ── Zeile 3: 55 TEMA Stapel-Ausrichtung ───────

// Zeige, wofür es ausgerichtet ist (long oder short), oder ✘, wenn keines von beiden

stackTxt = t55BelowAll ? "✔ LONG" :

t55AboveAll ? "✔ SHORT" : "✘"

stackColor = t55Aligned ? C_GREEN : C_RED

table.cell(dash, 0, 3, "TEMA55 Stapel Ausgerichtet",

text_color=C_WHITE,

text_size=size.small,

bgcolor=color.new(#0D1117, 0),

text_halign=text.align_left)

table.cell(dash, 1, 3, stackTxt,

text_color = stackColor,

text_size = size.small,

bgcolor = color.new(#0D1117, 0),

text_halign= text.align_center)

// ── Zeile 4: 5m TF-Ausrichtung ───────────────

tfTxt = tfAligned ? "✔ STIMMT ÜBEREIN" : "✘ KONFLIKTE"

tfColor = tfAligned ? C_GREEN : C_RED

table.cell(dash, 0, 4, "5m TF Ausgerichtet",

text_color=C_WHITE,

text_size=size.small,

bgcolor=color.new(#0D1117, 0),

text_halign=text.align_left)

table.cell(dash, 1, 4, tfTxt,

text_color = tfColor,

text_size = size.small,

bgcolor = color.new(#0D1117, 0),

text_halign= text.align_center)

// ── Zeile 5: Alle-Grün Zusammenfassung ─────────────

allGreen = crossOccurred and t55Aligned and tfAligned

summaryTxt = allGreen ? "● KONFLUENT" : "● WARTEN"

summaryCol = allGreen ? C_GREEN : C_MUTED

table.cell(dash, 0, 5, "Konfluenz",

text_color = C_MUTED,

text_size = size.small,

bgcolor = color.new(#141C27, 0),

text_halign= text.align_left)

table.cell(dash, 1, 5, summaryTxt,

text_color = summaryCol,

text_size = size.small,

bgcolor = color.new(#141C27, 0),

text_halign= text.align_center)

$BTC #BTC #ETH🔥🔥🔥🔥🔥🔥