DISCLAIMER: das Folgende dient ausschließlich zur Unterhaltung + zu Bildungszwecken! Es ist KEINE FINANZBERATUNG ODER CODING (KI, oder anders) Beratung. Das ist nur zu DEMONSTRATIONSZWECKEN!

Prompt für SMA-Clouds

Handle als Senior TradingView Pine Script v5 Entwickler.

Erstelle einen Overlays-Indikator namens:

„Technical Indicator Coding 4.0 — SMA-Cloud-Setup“

ZWECK

Erstelle einen nicht-repaintingfähigen, Multi-Timeframe-Indikator, der Trendkontext liefert und potenzielle Signale qualifiziert. Er darf keine Trades ausführen oder finanzielle Beratung darstellen.

RAHMENWERK

Der Indikator nutzt drei analytische Ebenen:

1. 8-Stunden-Struktur

   - Bestimme die breitere Marktstruktur im 8H-Zeitrahmen.

   - Kategorisiere es als bullisch, bearisch oder neutral.

   - Zeige die aktuelle Klassifizierung in einem kleinen Dashboard an.

2. 1-Stunden SMA Cloud

   - Berechne einen schnellen und einen langsamen Simple Moving Average auf dem 1H-Zeitrahmen.

   - Mache beide SMA-Längen konfigurierbar.

   - Standardwerte: [INSERT FAST SMA] und [INSERT SLOW SMA].

   - Fülle die Fläche zwischen den Durchschnitten:

     • Grün, wenn die schnelle SMA über der langsamen SMA liegt.

     • Rot, wenn die schnelle SMA unter der langsamen SMA liegt.

     • Neutrales Grau, wenn die Beziehung unklar ist.

   - Die 1H-Wolke ist der primäre Filter für die Trendrichtung.

3. 15-Minuten-Trigger und IMACD-Bestätigung

   - Berechne den Entry-Trigger im 15M-Zeitrahmen.

   - Bestätige bullische Trigger nur, wenn IMACD-Momentum positiv ist.

   - Bestätige bearische Trigger nur, wenn IMACD-Momentum negativ ist.

   - Verwende die folgende IMACD-Spezifikation: [INSERT EXACT IMACD FORMULA AND SETTINGS].

   - Plotte ein grünes aufwärtsgerichtetes Dreieck für bestätigte bullische Trigger.

   - Plotte ein rotes abwärtsgerichtetes Dreieck für bestätigte bearische Trigger.

SIGNAL-HIERARCHIE

Eine bullische Qualifikation erfordert:

- Akzeptable bullische oder neutrale 8H-Struktur.

- Bullische 1H SMA-Cloud.

- Bullischer 15M-Trigger.

- Positive IMACD-Bestätigung.

Eine bearische Qualifikation erfordert exakt die umgekehrten Bedingungen.

TECHNISCHE ANFORDERUNGEN

- Verwende request.security() mit barmerge.lookahead_off.

- Werte Signale nur auf bestätigte, geschlossene Kerzen aus.

- Keine historischen Signale neu zeichnen.

- Verwende keine zukünftigen Daten.

- Erlaube, dass alle drei Zeiteinheiten und alle Berechnungslängen über Inputs geändert werden.

- Füge Schalter hinzu, um die Cloud, Struktur-Labels, Trigger-Marker und das Dashboard anzuzeigen oder auszublenden.

- Füge Regeln für alertcondition() für bestätigte bullische und bearische Qualifikationen hinzu.

- Halte das Diagramm visuell sauber.

- Keine automatisierten Orders einbauen, keine Leistungsbehauptungen, kein P&L und keine Anlageempfehlungen.

- Kommentiere den Code klar und erkläre, wie jeder Zeiteinheit zum Ergebnis beiträgt.

Bevor du den Code schreibst, identifiziere alle fehlenden Berechnungsregeln oder Parameter. Erfinde keine proprietären Einstellungen. Frage mich zuerst nach den fehlenden Werten.

Nach dem Erhalt dieser Werte liefere:

1. Vervollständige den Pine-Script-v5-Code.

2. Eine kurze Erklärung der Logik.

3. Eine Checkliste zum Testen, dass der Indikator nicht repaintet.

CODE (KOPIEREN & EINFÜGEN)

//@version=6

indicator("John Wick v 4.0", overlay=true)

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

// MACD Inputs

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

fastLength   = input.int(12, "MACD Fast Length")

slowLength   = input.int(26, "MACD Slow Length")

signalLength = input.int(9, "MACD Signal Length")

atrLength = input.int(14, "ATR Length")

showExits   = input.bool(true)

showCrosses = input.bool(true)

minProfitATR = input.float(0.30)

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

// MACD-Kern

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

fastMA   = ta.ema(close, fastLength)

slowMA   = ta.ema(close, slowLength)

macdLine   = fastMA - slowMA

signalLine = ta.ema(macdLine, signalLength)

hist = macdLine - signalLine

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

// Cross Events

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

bullCross = ta.crossover(macdLine, signalLine)

bearCross = ta.crossunder(macdLine, signalLine)

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

// Marker-Abstand

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

atrValue = ta.atr(atrLength)

dotOffset = atrValue * 0.28

triOffset = atrValue * 0.70

longExitY  = high + dotOffset

shortExitY = low  - dotOffset

triBullY = low  - triOffset

triBearY = high + triOffset

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

// Trade-State-Engine

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

var int   activeDir    = 0

var float entryPrice   = na

var float bestHist     = na

var bool  partialTaken = false

if bullCross

   activeDir    := 1

   entryPrice   := close

   bestHist     := hist

   partialTaken := false

if bearCross

   activeDir    := -1

 entryPrice   := close

   bestHist     := hist

   partialTaken := false

if activeDir == 1

   bestHist := na(bestHist) ? hist : math.max(bestHist, hist)

if activeDir == -1

   bestHist := na(bestHist) ? hist : math.min(bestHist, hist)

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

// Exit-Logik

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

longInProfit =

    activeDir == 1

and not na(entryPrice)

and high >= entryPrice + atrValue * minProfitATR

shortInProfit =

    activeDir == -1

and not na(entryPrice)

and low <= entryPrice - atrValue * minProfitATR

longMomentumFade =

    activeDir == 1

and bestHist > 0

and hist < hist[1]

shortMomentumFade =

    activeDir == -1

and bestHist < 0

and hist > hist[1]

yellowLongExit =

    showExits

and activeDir == 1

and not partialTaken

and longInProfit

and longMomentumFade

yellowShortExit =

    showExits

and activeDir == -1

and not partialTaken

und shortInProfit

and shortMomentumFade

if yellowLongExit or yellowShortExit

   partialTaken := true

redLongExit =

    showExits

and activeDir == 1

and partialTaken

and bearCross

redShortExit =

    showExits

and activeDir == -1

and partialTaken

and bullCross

if redLongExit or redShortExit

   activeDir    := 0

   entryPrice   := na

   bestHist     := na

   partialTaken := false

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

// EMA STACK (5-Layer Cloud)

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

ema5  = ta.ema(close, 5)

ema9  = ta.ema(close, 9)

ema12 = ta.ema(close, 12)

ema26 = ta.ema(close, 26)

ema50 = ta.ema(close, 50)

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

// Plotte EMAs (Dünn / gedämpft)

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

p5  = plot(ema5, color=color.new(color.aqua, 20), linewidth=1)

p9  = plot(ema9, color=color.new(color.blue, 20), linewidth=1)

p12 = plot(ema12, color=color.new(color.gray, 20), linewidth=1)

p26 = plot(ema26, color=color.new(color.orange,20), linewidth=1)

p50 = plot(ema50, color=color.new(color.red, 20), linewidth=1)

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

// CLOUDS

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

// 5–9 Schnelle Reaktion

fill(p5, p9, color=color.new(color.aqua, 80))

// 9–12 Momentum

fill(p9, p12, color=color.new(color.blue, 82))

// 12–26 Struktur

fill(p12, p26, color=color.new(color.gray, 84))

// 26–50 Trend

fill(p26, p50, color=color.new(color.orange, 86))

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

// Exit Dots

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

plotshape(

    yellowLongExit ? longExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.new(color.yellow, 20),

    size=size.tiny

)

plotshape(

    yellowShortExit ? shortExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.new(color.yellow, 20),

    size=size.tiny

)

plotshape(

    redLongExit ? longExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.red,

    size=size.tiny

)

plotshape(

    redShortExit ? shortExitY : na,

    style=shape.circle,

    location=location.absolute,

    color=color.red,

    size=size.tiny

)

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

// Entry-Dreiecke

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

plotshape(

    showCrosses and bullCross ? triBullY : na,

    style=shape.triangleup,

    location=location.absolute,

    color=color.lime,

    size=size.small

)

plotshape(

    showCrosses and bearCross ? triBearY : na,

    style=shape.triangledown,

    location=location.absolute,

    color=color.red,

    size=size.small

)

ATR-Prompt und Code

Prompt

Handle als Senior TradingView Pine Script v5 Entwickler.

Erstelle einen Overlay-Indikator mit dem Namen:

“Technical Indicator Coding 5.2 — Average True Range”

ZWECK

Erstelle einen volatilitäts-adaptiven Indikator für die Trendrichtung mit einem ratcheting Average True Range Trailing-Level. Der Indikator dient der schulungs-/bildungsbezogenen Analyse und darf keine Trades ausführen oder Leistungsbehauptungen machen.

KERN-EINSTELLUNGEN

- ATR-Periode: 10

- ATR-Multiplikator: 1.9

   - Solange der Kurs unter der vorherigen Trailing-Stufe bleibt, kann sich die Stufe nach unten bewegen, aber niemals nach oben.

- Mache die ATR-Periode, den Multiplikator und die Quelle konfigurierbar.

BERECHNUNG

1. Berechne den Average True Range über 10 Perioden.

2. Berechne die trailing Distanz:

   trailingDistance = 1.9 × ATR(10)

3. Erstelle ein rekursives Trailing-Level, das sich mit dem Kurs „ratchetet“:

- Solange der Kurs über der vorherigen Trailing-Stufe bleibt, kann sich die Stufe nach oben bewegen, aber niemals nach unten.

shortInProfit =

   - Wenn der Kurs die Trailing-Stufe kreuzt, ändere die codierte Richtung.

RICHTUNGSLOGIK

- Ändere die Richtung auf bullisch, wenn der Schlusskurs die Trailing-Stufe von unten nach oben kreuzt.

- Ändere die Richtung auf bearisch, wenn der Schlusskurs die Trailing-Stufe von oben nach unten kreuzt.

- Erzeuge ein Signal nur, wenn die Richtung wechselt.

- Erzeuge keine wiederholten Signale auf jeder Kerze.

VISUELLE AUSGABE

- Plotte das ATR-Trailing-Level.

- Verwende grün, wenn die codierte Richtung bullisch ist.

- Verwende Rot, wenn die codierte Richtung bearisch ist.

- Plotte ein grünes aufwärtsgerichtetes Dreieck für eine bullische Richtungsänderung.

- Plotte ein rotes abwärtsgerichtetes Dreieck für eine bearische Richtungsänderung.

- Optionale Farbe der Kerzen entsprechend der aktuellen Richtung.

EMA CLOUD

- Füge eine 12-Perioden- und eine 26-Perioden Exponential Moving Average Cloud hinzu.

- Fülle die Cloud grün, wenn EMA 12 über EMA 26 liegt.

- Fülle sie rot, wenn EMA 12 unter EMA 26 liegt.

- Behandle die EMA-Cloud als Momentum-Kontext; sie darf die ATR-Richtungswechsel-Berechnung nicht beeinflussen.

- Ergänze eine Eingabe, um die EMA-Cloud auszublenden.

TECHNISCHE ANFORDERUNGEN

- Verwende bestätigte Kerzenschlüsse.

- Nicht neu zeichnen (no repaint).

- Verwende keine Future-Informationen oder Look-Ahead.

- Erhalte das Trailing-Level über rekursive Variabellogik.

- Füge Regeln für alertcondition() für bullische und bearische Richtungswechsel hinzu.

- Ergänze Schalter für Marker, Kerzenfarben, Trailing-Level und EMA-Cloud.

- Erzeuge keine Strategy-Orders, keine Ergebnis-Tabelle, keine P&L-Berechnungen und keine finanziellen Empfehlungen.

- Organisiere und kommentiere den Code klar.

Liefere:

1. Vervollständige den vollständigen Pine-Script-v5-Code.

2. Eine Erklärung in einfachem Deutsch zu ATR und dem Ratcheting-Mechanismus.

3. Eine Beschreibung der Bedingungen, die jedes Marker-Element erzeugen.

4. Eine Checkliste zur verifizierenden Prüfung gegen Non-Repainting (Kurz: Nicht-neuzeichnen) für den Short.


CODE

//@version=6

indicator("JW V5.2", overlay=true)

// ── Inputs ──────────────────────────────────────────

atrPeriod     = input.int(10, "ATR Period")

keyValue      = input.float(1.9, "Key Value / ATR Multiplier", step=0.1)

warnZoneATR   = input.float(0.25, "Warning Zone (x ATR)", step=0.05)

cloudSmooth   = input.int(3, "Cloud Smoothness", minval=1, tooltip="Glättet nur das gezeichnete Band — beeinflusst nicht das Signal-Timing")

src           = close

// ── ATR-Trailing-Stop-Kern — roh, treibt alles Reale ──

xATR  = ta.atr(atrPeriod)

nLoss = keyValue * xATR

var float trailStop = 0.0

trailStop := src > nz(trailStop[1], 0) and src[1] > nz(trailStop[1], 0) ? math.max(nz(trailStop[1]), src - nLoss) :

            src < nz(trailStop[1], 0) and src[1] < nz(trailStop[1], 0) ? math.min(nz(trailStop[1]), src + nLoss) :

            src > nz(trailStop[1], 0) ? src - nLoss : src + nLoss

var int pos = 0

pos := src[1] < nz(trailStop[1], 0) and src > nz(trailStop[1], 0) ? 1 :

      src[1] > nz(trailStop[1], 0) and src < nz(trailStop[1], 0) ? -1 : nz(pos[1], 0)

trendColor = pos == 1 ? color.new(color.green, 0) : pos == -1 ? color.new(color.red, 0) : color.gray

// ── Cloud — visuell geglättet für Lesbarkeit, nur kosmetisch ──

plotSrc  = ta.ema(src, cloudSmooth)

plotStop = ta.ema(trailStop, cloudSmooth)

pricePlot = plot(plotSrc, title="Price (smoothed)",     color=trendColor, linewidth=1)

stopPlot  = plot(plotStop, title="Trail Stop (geglättet)", color=trendColor, linewidth=1)

fill(pricePlot, stopPlot, color=color.new(trendColor, 75), title="Trend Cloud")

// ── Signale — basieren auf Rohwerten, unbeeinflusst von Glättung ──

buySignal  = pos == 1  and pos[1] == -1

sellSignal = pos == -1 and pos[1] == 1

plotshape(buySignal, title="Buy", text="buy", style=shape.triangleup, location=location.belowbar, color=color.green, textcolor=color.white, size=size.small)

plotshape(sellSignal, title="Sell", text="sell", style=shape.triangledown, location=location.abovebar, color=color.red, textcolor=color.white, size=size.small)

alertcondition(buySignal, "Buy Signal", "ATR Trail flipped bullish")

alertcondition(sellSignal, "Sell Signal", "ATR Trail flipped bearish")

// ── Nähe-Flip — roher Abstand, gleich wie Signal-Math ──

gapATR    = pos == 1 ? (src - trailStop) / xATR : (trailStop - src) / xATR

pctToFlip = math.max(0, math.min(100, 100 * (1 - gapATR / keyValue)))

dirText   = pos == 1 ? "LONG" : pos == -1 ? "SHORT" : "FLAT"

nearFlip  = gapATR <= warnZoneATR

labelColor = nearFlip ? color.new(color.orange, 0) : trendColor

labelText  = dirText + " — " + str.tostring(gapATR, "#.##") + " ATR bis zum Flip (" + str.tostring(pctToFlip, "#") + "%)"

var label proximityLabel = na

if barstate.islast

   label.delete(proximityLabel)

   proximityLabel := label.new(bar_index + 2, src, labelText, style=label.style_label_left, color=labelColor, textcolor=color.white, size=size.normal)