DISCLAIMER: the below is purely for entertainment + educational purposes! It is not FINANCIAL ADVICE OR CODING (AI, or otherwise) advice. This is just for DEMONSTRATION purposes!
Prompt for SMA Clouds
Act as a senior TradingView Pine Script v5 developer.
Create an overlay indicator named:
“Technical Indicator Coding 4.0 — SMA Cloud Setup”
PURPOSE
Build a non-repainting, multi-timeframe indicator that provides trend context and qualifies potential signals. It must not execute trades or present financial advice.
FRAMEWORK
The indicator uses three analytical layers:
1. 8-hour structure
- Determine the broader market structure on the 8H timeframe.
- Classify it as bullish, bearish or neutral.
- Display the current classification in a small dashboard.
2. 1-hour SMA Cloud
- Calculate a fast and slow Simple Moving Average on the 1H timeframe.
- Make both SMA lengths configurable.
- Default values: [INSERT FAST SMA] and [INSERT SLOW SMA].
- Fill the area between the averages:
• Green when the fast SMA is above the slow SMA.
• Red when the fast SMA is below the slow SMA.
• Neutral grey when the relationship is unclear.
- The 1H cloud is the primary trend-direction filter.
3. 15-minute trigger and IMACD confirmation
- Calculate the entry trigger on the 15M timeframe.
- Confirm bullish triggers only when IMACD momentum is positive.
- Confirm bearish triggers only when IMACD momentum is negative.
- Use the following IMACD specification: [INSERT EXACT IMACD FORMULA AND SETTINGS].
- Plot a green upward triangle for confirmed bullish triggers.
- Plot a red downward triangle for confirmed bearish triggers.
SIGNAL HIERARCHY
A bullish qualification requires:
- Acceptable bullish or neutral 8H structure.
- Bullish 1H SMA Cloud.
- Bullish 15M trigger.
- Positive IMACD confirmation.
A bearish qualification requires the exact inverse conditions.
TECHNICAL REQUIREMENTS
- Use request.security() with barmerge.lookahead_off.
- Evaluate signals only on confirmed closed candles.
- Do not repaint historical signals.
- Do not use future data.
- Allow the three timeframes and all calculation lengths to be changed through inputs.
- Include switches to show or hide the cloud, structure labels, trigger markers and dashboard.
- Add alertcondition() rules for confirmed bullish and bearish qualifications.
- Keep the chart visually clean.
- Do not include automated orders, performance claims, P&L or investment recommendations.
- Comment the code clearly and explain how each timeframe contributes to the result.
Before writing the code, identify any missing calculation rules or parameters. Do not invent proprietary settings. Ask me for the missing values first.
After receiving those values, provide:
1. Complete Pine Script v5 code.
2. A concise explanation of the logic.
3. A checklist for testing that the indicator does not repaint.
CODE (COPY & PASTE)
//@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 Core
//==================================================
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 Spacing
//==================================================
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 Logic
//==================================================
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
and 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)
//==================================================
// Plot EMAs (Thin / Muted)
//==================================================
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 Fast Reaction
fill(p5, p9, color=color.new(color.aqua, 80))
// 9–12 Momentum
fill(p9, p12, color=color.new(color.blue, 82))
// 12–26 Structure
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 Triangles
//==================================================
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 and Code
Prompt
Act as a senior TradingView Pine Script v5 developer.
Create an overlay indicator named:
“Technical Indicator Coding 5.2 — Average True Range”
PURPOSE
Build a volatility-adaptive trend-direction indicator using a ratcheting Average True Range trailing level. The indicator is for educational analysis and must not execute trades or make performance claims.
CORE SETTINGS
- ATR period: 10
- ATR multiplier: 1.9
- Calculation source: close
- Make the ATR period, multiplier and source configurable.
CALCULATION
1. Calculate Average True Range over 10 periods.
2. Calculate the trailing distance:
trailingDistance = 1.9 × ATR(10)
3. Create a recursive trailing level that ratchets with price:
- While price remains above the previous trailing level, the level may move upward but never downward.
- While price remains below the previous trailing level, the level may move downward but never upward.
- When price crosses the trailing level, change the coded direction.
DIRECTION LOGIC
- Change direction to bullish when the closing price crosses above the trailing level.
- Change direction to bearish when the closing price crosses below the trailing level.
- Generate a signal only when the direction changes.
- Do not generate repeated signals on every candle.
VISUAL OUTPUT
- Plot the ATR trailing level.
- Use green when the coded direction is bullish.
- Use red when the coded direction is bearish.
- Plot a green upward triangle on a bullish direction change.
- Plot a red downward triangle on a bearish direction change.
- Optionally colour the candles according to the current direction.
EMA CLOUD
- Add a 12-period and 26-period Exponential Moving Average cloud.
- Fill the cloud green when EMA 12 is above EMA 26.
- Fill it red when EMA 12 is below EMA 26.
- Treat the EMA cloud as momentum context; it must not alter the ATR direction-change calculation.
- Include an input to hide the EMA cloud.
TECHNICAL REQUIREMENTS
- Use confirmed candle closes.
- Do not repaint.
- Do not use future information or look-ahead.
- Preserve the trailing level through recursive variable logic.
- Add alertcondition() rules for bullish and bearish direction changes.
- Include switches for markers, candle colours, trailing level and EMA cloud.
- Do not create strategy orders, a results table, P&L calculations or financial recommendations.
- Organise and comment the code clearly.
Provide:
1. Complete Pine Script v5 code.
2. A plain-language explanation of ATR and the ratcheting mechanism.
3. A description of the conditions that create each marker.
4. A short non-repainting verification checklist.
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="Smooths the plotted band only — does not affect signal timing")
src = close
// ── ATR trailing stop core — raw, drives everything real ──
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 — visually smoothed for fluency, cosmetic only ──
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 (smoothed)", color=trendColor, linewidth=1)
fill(pricePlot, stopPlot, color=color.new(trendColor, 75), title="Trend Cloud")
// ── Signals — driven by raw values, unaffected by smoothing ──
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")
// ── Flip proximity — raw gap, same as 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 to 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)

