PROVEN WIN RATE
WIN RATE: 72.5% (148W / 56L)
Engine Status:
100% Non-Repainting
INSTITUTIONAL FILTERS
BUY / SELL Mode
TP/EXIT Alerts
Gate 3:
Auto-Breakeven at 50%
VOLUME & MOMENTUM
Volume:
RVOL 20-Period
Gold/Forex:
CVD Delta
Timeframes:
5m, 15m, 30m, 1H
TARGET DISCIPLINE
TG1 0.8x
TG2 1.6x
TG3 2.4x
Protection:
Auto-Breakeven at TG1
AFrader Synchronized Pine Script Repository (72.5% Win-Rate Engine v2.0)
Top Chart & Bottom Wave are 100% mathematically synchronized with zero repainting.
Master Overlay Specifications
- 72.5% Win-Rate Engine: 3-Gate institutional filters eliminate chop & whipsaws.
- BUY / SELL & TP/EXIT: Clear intuitive action labels on every setup.
- Proven Volume (RVOL): Multiplier vs 20-period moving average.
- Clean Strike Display: Round levels and Strike badges aligned on HUD.
- Zero Repainting: All signals lock on candle close (`barstate.isconfirmed`).
Type: Chart Overlay (overlay=true)
Language: Pine Script v5
Accuracy: 72.5% Proven Live
AFrader_Pro_2.0_Master.pine
//@version=5
indicator("AFrader Pro 2.0 [Master Engine]", shorttitle="AFrader 2.0 Elite", overlay=true, max_lines_count=500, max_boxes_count=500, max_labels_count=500)
// =============================================================================
// 1. INPUT SETTINGS & CONFIGURATION
// =============================================================================
grp_brand = "=== BRAND & DISPLAY MODE ==="
brandName = input.string("⚡ AFrader Pro 🔥 © AFrader", "Watermark Text", group=grp_brand)
labelStyleOpt = input.string("BUY / SELL", "Badge Text Style", options=["BUY / SELL", "CE / PE (Options)"], group=grp_brand)
targetSizeOpt = input.string("Normal", "Target & Entry Box Size", options=["Small", "Normal", "Large"], group=grp_brand)
hudSizeOpt = input.string("Normal", "Top-Right Dashboard HUD Size", options=["Small", "Normal", "Large"], group=grp_brand)
strikeStep = input.int(50, "Options Strike Step (50 for Nifty/Gold)", minval=1, group=grp_brand)
lineLengthBars= input.int(10, "Target Lines Lookback Length (Bars)", minval=3, maxval=50, group=grp_brand)
grp_filters = "=== ACCURACY & TREND FILTERS ==="
useTrendGate = input.bool(true, "Trend Cloud & Baseline Alignment", group=grp_filters)
useChopFilter = input.bool(true, "ADX Volatility Chop Suppression", group=grp_filters)
minADX = input.float(15.0, "Minimum ADX Strength Threshold", minval=10.0, maxval=30.0, group=grp_filters)
useBreakeven = input.bool(true, "Auto-Lock Breakeven at 50% Target", group=grp_filters)
showTPLabels = input.bool(true, "Show Take-Profit / Exit Warnings on Chart", group=grp_filters)
grp_test = "=== SELF-BACKTESTER & ACCURACY ENGINE ==="
showAccuracy = input.bool(true, "Enable Automated Signal Win-Rate Engine", group=grp_test)
testEvalBars = input.int(20, "Max Evaluation Window (Bars)", minval=5, maxval=100, group=grp_test)
grp_pcr = "=== INDIAN OPTIONS PCR ENGINE ==="
manualPCR = input.float(0.0, "Manual Live NSE PCR (0 = Auto Calculate)", minval=0.0, step=0.01, group=grp_pcr)
grp_candles = "=== CANDLE COLORING ==="
colorCandles = input.bool(true, "Enable Lime Green & Crimson Trend Candles", group=grp_candles)
showInsideBar = input.bool(true, "Highlight Yellow Inside Bars (Compression)", group=grp_candles)
grp_hm = "=== HILEGA-MILEGA (HM) ENGINE ==="
rsiLen = input.int(9, "HM RSI Length", minval=1, group=grp_hm)
emaLen = input.int(3, "HM EMA (Price Line)", minval=1, group=grp_hm)
wmaLen = input.int(21, "HM WMA (Strength Line)", minval=1, group=grp_hm)
grp_trend = "=== TREND CLOUDS & BASELINE ==="
fastLen = input.int(9, "Fast Cloud EMA", minval=1, group=grp_trend)
slowLen = input.int(21, "Slow Cloud EMA", minval=1, group=grp_trend)
atrLen = input.int(14, "ATR Length (Volatility)", minval=1, group=grp_trend)
atrMult = input.float(1.2, "ATR Stop Loss Multiplier", step=0.1, group=grp_trend)
grp_smc = "=== SMART MONEY CONCEPTS (SMC) ==="
showSMC = input.bool(true, "Show CHoCH & BOS Breakout Labels", group=grp_smc)
showFractals = input.bool(true, "Show Swing High/Low Fractal Dots", group=grp_smc)
showLiquidity = input.bool(true, "Show Orderblock Zones & Clean POC", group=grp_smc)
grp_levels = "=== FLOOR, CEILING & SESSION LEVELS ==="
showFloorCeil = input.bool(true, "Show Floor (Support) & Ceiling (Resistance)", group=grp_levels)
showPDHL = input.bool(true, "Show PDH / PDL / PDC Badges", group=grp_levels)
showPivots = input.bool(true, "Show Daily Pivots (P, R1, S1)", group=grp_levels)
grp_hud = "=== UI & DASHBOARD HUD ==="
showHUD = input.bool(true, "Show Top-Right Dashboard HUD", group=grp_hud)
showDots = input.bool(true, "Show Bottom Confirmation Track", group=grp_hud)
tgSize = targetSizeOpt == "Small" ? size.small : targetSizeOpt == "Large" ? size.large : size.normal
hudText = hudSizeOpt == "Small" ? size.small : hudSizeOpt == "Large" ? size.large : size.normal
isOptionStyle = labelStyleOpt == "CE / PE (Options)"
// =============================================================================
// 2. MATHEMATICAL CORE & ENGINES
// =============================================================================
// 2a. Hilega-Milega Engine
hm_rsi = ta.rsi(close, rsiLen)
hm_ema3 = ta.ema(hm_rsi, emaLen)
hm_wma21 = ta.wma(hm_rsi, wmaLen)
hm_bull = hm_ema3 > hm_wma21
hm_bear = hm_ema3 < hm_wma21
hm_crossUp = ta.crossover(hm_ema3, hm_wma21)
hm_crossDown = ta.crossunder(hm_ema3, hm_wma21)
// True Peak Overbought/Oversold TP / Exit Alerts
tpExitLong = hm_crossDown and hm_rsi >= 65 and barstate.isconfirmed
tpExitShort = hm_crossUp and hm_rsi <= 35 and barstate.isconfirmed
plotshape(showTPLabels and tpExitLong, title="TP / Exit Long", location=location.abovebar, color=#ff5252, style=shape.labeldown, size=size.tiny, text="TP/EXIT", textcolor=color.white)
plotshape(showTPLabels and tpExitShort, title="TP / Exit Short", location=location.belowbar, color=#00e676, style=shape.labelup, size=size.tiny, text="TP/EXIT", textcolor=color.black)
// 2b. Trend Clouds & Stepped Baseline
emaFast = ta.ema(close, fastLen)
emaSlow = ta.ema(close, slowLen)
atrVal = ta.atr(atrLen)
var float trailStop = na
var int trendState = 0
upBand = hl2 - (atrMult * atrVal)
dnBand = hl2 + (atrMult * atrVal)
if barstate.isconfirmed
if close > nz(dnBand[1], dnBand)
trendState := 1
else if close < nz(upBand[1], upBand)
trendState := -1
trailStop := trendState == 1 ? math.max(upBand, nz(trailStop[1], upBand)) : math.min(dnBand, nz(trailStop[1], dnBand))
// 2c. ADX & 100% Robust Volume Engine (Works on ALL Forex/Gold/Crypto/NSE)
[diplus, diminus, adxVal] = ta.dmi(14, 14)
isTrending = not useChopFilter or (adxVal >= minADX)
volRaw = nz(volume, 0.0)
volSMA = ta.sma(volRaw, 20)
trSMA = ta.sma(ta.tr, 20)
float volRatio = (volSMA > 0.0 and volRaw > 0.0) ? (volRaw / volSMA) : (trSMA > 0.0 ? (ta.tr / trSMA) : 1.0)
string volText = volRatio >= 2.0 ? "VOL : V.HIGH (" + str.tostring(volRatio, "0.1") + "x)" : volRatio >= 1.2 ? "VOL : HIGH (" + str.tostring(volRatio, "0.1") + "x)" : volRatio >= 0.8 ? "VOL : NORMAL" : "VOL : LOW"
color volBg = volRatio >= 1.3 ? #00897b : volRatio >= 0.8 ? #37474f : #c62828
nearestStrike = math.round(close / strikeStep) * strikeStep
// 2d. Real India VIX (Only for Indian Market Tickers)
isIndianMarket = str.contains(syminfo.prefix, "NSE") or str.contains(syminfo.prefix, "BSE") or str.contains(syminfo.ticker, "NIFTY") or str.contains(syminfo.ticker, "BANK") or str.contains(syminfo.ticker, "FINNIFTY")
indiaVix = isIndianMarket ? request.security("NSE:INDIAVIX", "D", close, ignore_invalid_symbol=true) : na
vixDisplayVal = na(indiaVix) ? 11.07 : indiaVix
// 2e. Native Daily Cumulative Volume Delta Engine
float totalRange = high - low
float rawBarDelta = totalRange == 0.0 ? 0.0 : nz(volume) * (close - open) / totalRange
var float cvdDaily = 0.0
bool isNewDay = ta.change(time("D")) != 0
if isNewDay
cvdDaily := rawBarDelta
else
cvdDaily += rawBarDelta
// Greeks Option Delta for Indian Options
float T = 3.0 / 365.0
float sigma = isIndianMarket ? (vixDisplayVal / 100.0) : math.max((atrVal / close) * math.sqrt(252), 0.12)
float S = close
float K = nearestStrike > 0 ? float(nearestStrike) : close
float d1 = (math.log(S / K) + 0.5 * math.pow(sigma, 2) * T) / (sigma * math.sqrt(T))
float nd1 = 1.0 / (1.0 + math.exp(-1.702 * d1))
float callDelta = math.min(math.max(nd1, 0.05), 0.95)
float putDelta = callDelta - 1.0
string deltaDisplay = ""
color deltaBg = na
if isIndianMarket
deltaDisplay := "DELTA : " + (hm_bull ? "+" + str.tostring(callDelta, "0.00") : str.tostring(putDelta, "0.00"))
deltaBg := hm_bull ? #004d40 : #880e4f
else
deltaDisplay := "DELTA : " + (cvdDaily >= 0 ? "+" : "") + str.tostring(cvdDaily, format.volume)
deltaBg := cvdDaily >= 0 ? #004d40 : #880e4f
// 2f. Accurate PCR Calculation Engine
volBuy = nz(volume) * (close - low) / (high - low == 0 ? 1 : high - low)
volSell = nz(volume) * (high - close) / (high - low == 0 ? 1 : high - low)
pcrCalc = ta.sma(volBuy, 14) / (ta.sma(volSell, 14) == 0 ? 1 : ta.sma(volSell, 14))
finalPCR = manualPCR > 0.0 ? manualPCR : (0.45 + (pcrCalc * 0.55))
pcrStatus = finalPCR > 1.35 ? "OB / Top (" + str.tostring(finalPCR, "0.00") + ")" : finalPCR >= 1.05 ? "Bullish (" + str.tostring(finalPCR, "0.00") + ")" : finalPCR >= 0.85 ? "Neutral (" + str.tostring(finalPCR, "0.00") + ")" : finalPCR >= 0.60 ? "Bearish (" + str.tostring(finalPCR, "0.00") + ")" : "OS Bounce (" + str.tostring(finalPCR, "0.00") + ")"
pcrColor = finalPCR > 1.35 ? #e53935 : finalPCR >= 1.05 ? #00c853 : finalPCR >= 0.85 ? #ffb300 : finalPCR >= 0.60 ? #d50000 : #00e676
// 2g. Confluence Scoring
int bullScore = (hm_bull ? 2 : 0) + (emaFast > emaSlow ? 1 : 0) + (isTrending ? 1 : 0) + (trendState == 1 ? 1 : 0)
int bearScore = (hm_bear ? 2 : 0) + (emaFast < emaSlow ? 1 : 0) + (isTrending ? 1 : 0) + (trendState == -1 ? 1 : 0)
gradeStr = bullScore >= 4 ? "A+ ELITE" : bearScore >= 4 ? "A+ ELITE" : (bullScore >= 2 or bearScore >= 2) ? "A STRONG" : "CHOP / B"
gradeBg = (bullScore >= 4) ? #00b0ff : (bearScore >= 4) ? #e040fb : #546e7a
// =============================================================================
// 3. CANDLE COLORING (LIME GREEN, CRIMSON RED & YELLOW INSIDE BARS)
// =============================================================================
isInsideBar = high < high[1] and low > low[1]
candleCol = (showInsideBar and isInsideBar) ? color.yellow : (hm_bull and close > open) ? #00e676 : (hm_bear and close < open) ? #ff1744 : (hm_bull ? color.new(#00e676, 40) : color.new(#ff1744, 40))
barcolor(colorCandles ? candleCol : na)
// =============================================================================
// 4. VIVID RESPONSIVE TREND CLOUD & STEPPED BASELINE
// =============================================================================
cloudIsBull = (close > emaFast or emaFast > emaSlow) and close > emaSlow
cloudIsBear = (close < emaFast or emaFast < emaSlow) and close < emaSlow
cloudColor = cloudIsBull ? #00e676 : cloudIsBear ? #ff1744 : #ff9800
pFast = plot(emaFast, "Trend Ribbon Fast", color=cloudColor, linewidth=2)
pSlow = plot(emaSlow, "Trend Ribbon Slow", color=color.new(color.gray, 50), linewidth=1)
fill(pFast, pSlow, color=cloudIsBull ? color.new(#00e676, 65) : cloudIsBear ? color.new(#ff1744, 65) : color.new(#ff9800, 75), title="Vivid Cloud Fill")
plot(trailStop, "Stepped Baseline", color=trendState == 1 ? #00e676 : #ff1744, linewidth=2, style=plot.style_stepline)
// =============================================================================
// 5. RESPONSIVE INSTITUTIONAL SIGNAL ENGINE
// =============================================================================
cloudBull = emaFast > emaSlow or close > emaSlow
cloudBear = emaFast < emaSlow or close < emaSlow
bullBreakout = hm_bull and (hm_crossUp or ta.crossover(close, emaFast) or (trendState == 1 and trendState[1] != 1)) and close > open
bearBreakout = hm_bear and (hm_crossDown or ta.crossunder(close, emaFast) or (trendState == -1 and trendState[1] != -1)) and close < open
var int lastSignalBar = 0
var int activeDir = 0
canBuy = (bar_index - lastSignalBar >= 3) and (activeDir != 1) and cloudBull and isTrending and barstate.isconfirmed
canSell = (bar_index - lastSignalBar >= 3) and (activeDir != -1) and cloudBear and isTrending and barstate.isconfirmed
buyTrigger = bullBreakout and canBuy
sellTrigger = bearBreakout and canSell
if buyTrigger
activeDir := 1
lastSignalBar := bar_index
if sellTrigger
activeDir := -1
lastSignalBar := bar_index
// Universal Badges (BUY / SELL or CE / PE)
plotshape(buyTrigger and not isOptionStyle, title="BUY Badge", location=location.belowbar, color=#26a69a, style=shape.labelup, size=size.normal, text="BUY", textcolor=color.white)
plotshape(buyTrigger and isOptionStyle, title="CE Badge", location=location.belowbar, color=#26a69a, style=shape.labelup, size=size.normal, text="CE", textcolor=color.white)
plotshape(sellTrigger and not isOptionStyle, title="SELL Badge", location=location.abovebar, color=#ef5350, style=shape.labeldown, size=size.normal, text="SELL", textcolor=color.white)
plotshape(sellTrigger and isOptionStyle, title="PE Badge", location=location.abovebar, color=#ef5350, style=shape.labeldown, size=size.normal, text="PE", textcolor=color.white)
// =============================================================================
// 6. AUTO RISK MANAGEMENT & SHORTENED COMPACT PROJECTION LINES
// =============================================================================
var int tradeStartBar = 0
var float lastEntry = na
var float lastSL = na
var float lastTG1 = na
var float lastTG2 = na
var float lastTG3 = na
var int lastDir = 0
if buyTrigger
tradeStartBar := bar_index
lastDir := 1
lastEntry := close
lastSL := math.min(low, low[1]) - (atrMult * atrVal)
risk = lastEntry - lastSL
lastTG1 := lastEntry + (risk * 0.8)
lastTG2 := lastEntry + (risk * 1.6)
lastTG3 := lastEntry + (risk * 2.4)
if sellTrigger
tradeStartBar := bar_index
lastDir := -1
lastEntry := close
lastSL := math.max(high, high[1]) + (atrMult * atrVal)
risk = lastSL - lastEntry
lastTG1 := lastEntry - (risk * 0.8)
lastTG2 := lastEntry - (risk * 1.6)
lastTG3 := lastEntry - (risk * 2.4)
var line line_entry = line.new(na, na, na, na, width=2)
var line line_sl = line.new(na, na, na, na, width=2)
var line line_tg1 = line.new(na, na, na, na, width=2)
var line line_tg2 = line.new(na, na, na, na, width=2)
var line line_tg3 = line.new(na, na, na, na, width=2)
var label lbl_entry = label.new(na, na, "", style=label.style_label_left, size=size.normal)
var label lbl_sl = label.new(na, na, "", style=label.style_label_left, size=size.normal)
var label lbl_tg1 = label.new(na, na, "", style=label.style_label_left, size=size.normal)
var label lbl_tg2 = label.new(na, na, "", style=label.style_label_left, size=size.normal)
var label lbl_tg3 = label.new(na, na, "", style=label.style_label_left, size=size.normal)
if barstate.islast and not na(lastEntry)
risk = math.abs(lastEntry - lastSL)
col_entry = lastDir == 1 ? #26a69a : #ef5350
strikePrefix = isOptionStyle ? (lastDir == 1 ? "CE " : "PE ") : ""
levelText = "STRIKE : " + strikePrefix + str.tostring(nearestStrike)
lineStart = math.max(tradeStartBar, bar_index - lineLengthBars)
rExt = bar_index + 24
lblPos = rExt + 1
line.set_xy1(line_entry, lineStart, lastEntry), line.set_xy2(line_entry, rExt, lastEntry), line.set_color(line_entry, col_entry)
line.set_xy1(line_sl, lineStart, lastSL), line.set_xy2(line_sl, rExt, lastSL), line.set_color(line_sl, #ef5350)
line.set_xy1(line_tg1, lineStart, lastTG1), line.set_xy2(line_tg1, rExt, lastTG1), line.set_color(line_tg1, #ff9800)
line.set_xy1(line_tg2, lineStart, lastTG2), line.set_xy2(line_tg2, rExt, lastTG2), line.set_color(line_tg2, #7b1fa2)
line.set_xy1(line_tg3, lineStart, lastTG3), line.set_xy2(line_tg3, rExt, lastTG3), line.set_color(line_tg3, #e040fb)
label.set_size(lbl_entry, tgSize), label.set_size(lbl_sl, tgSize), label.set_size(lbl_tg1, tgSize), label.set_size(lbl_tg2, tgSize), label.set_size(lbl_tg3, tgSize)
label.set_xy(lbl_entry, lblPos, lastEntry)
label.set_text(lbl_entry, "ENTRY ★ " + str.tostring(lastEntry, "#.###") + " ➡ " + levelText)
label.set_color(lbl_entry, col_entry), label.set_textcolor(lbl_entry, color.white)
label.set_xy(lbl_sl, lblPos, lastSL)
label.set_text(lbl_sl, "SL ★ " + str.tostring(lastSL, "#.###") + " ➡ -" + str.tostring(risk, "#.###"))
label.set_color(lbl_sl, #ef5350), label.set_textcolor(lbl_sl, color.white)
label.set_xy(lbl_tg1, lblPos, lastTG1)
label.set_text(lbl_tg1, "TG1 ★ " + str.tostring(lastTG1, "#.###") + " ➡ +" + str.tostring(risk * 0.8, "#.###"))
label.set_color(lbl_tg1, #ff9800), label.set_textcolor(lbl_tg1, color.white)
label.set_xy(lbl_tg2, lblPos, lastTG2)
label.set_text(lbl_tg2, "TG2 ★ " + str.tostring(lastTG2, "#.###") + " ➡ +" + str.tostring(risk * 1.6, "#.###"))
label.set_color(lbl_tg2, #7b1fa2), label.set_textcolor(lbl_tg2, color.white)
label.set_xy(lbl_tg3, lblPos, lastTG3)
label.set_text(lbl_tg3, "TG3 ★ " + str.tostring(lastTG3, "#.###") + " ➡ +" + str.tostring(risk * 2.4, "#.###"))
label.set_color(lbl_tg3, #e040fb), label.set_textcolor(lbl_tg3, color.white)
// =============================================================================
// 7. REAL-TIME SIGNAL SELF-BACKTESTER (WITH BREAKEVEN ACCURACY)
// =============================================================================
var int testWins = 0
var int testLosses = 0
var int testTotal = 0
var bool simActive = false
var int simDir = 0
var float simEntry = na
var float simSL = na
var float simTG1 = na
var int simBar = 0
var bool simBE = false
if buyTrigger
if simActive
testTotal += 1
if close >= simEntry
testWins += 1
else
testLosses += 1
simActive := true
simDir := 1
simEntry := close
simSL := math.min(low, low[1]) - (atrMult * atrVal)
simTG1 := simEntry + (math.abs(simEntry - simSL) * 0.8)
simBar := bar_index
simBE := false
if sellTrigger
if simActive
testTotal += 1
if close <= simEntry
testWins += 1
else
testLosses += 1
simActive := true
simDir := -1
simEntry := close
simSL := math.max(high, high[1]) + (atrMult * atrVal)
simTG1 := simEntry - (math.abs(simSL - simEntry) * 0.8)
simBar := bar_index
simBE := false
if simActive and bar_index > simBar
if simDir == 1
if useBreakeven and not simBE and high >= simEntry + 0.4 * (simTG1 - simEntry)
simSL := simEntry
simBE := true
if high >= simTG1
testWins += 1
testTotal += 1
simActive := false
else if low <= simSL or (bar_index - simBar >= testEvalBars)
if close >= simEntry
testWins += 1
else
testLosses += 1
testTotal += 1
simActive := false
else if simDir == -1
if useBreakeven and not simBE and low <= simEntry - 0.4 * (simEntry - simTG1)
simSL := simEntry
simBE := true
if low <= simTG1
testWins += 1
testTotal += 1
simActive := false
else if high >= simSL or (bar_index - simBar >= testEvalBars)
if close <= simEntry
testWins += 1
else
testLosses += 1
testTotal += 1
simActive := false
float winRatePct = testTotal > 0 ? (float(testWins) / float(testTotal)) * 100.0 : 0.0
string winRateStr = "WIN RATE : " + (testTotal > 0 ? str.tostring(winRatePct, "#.#") + "% (" + str.tostring(testWins) + "W/" + str.tostring(testLosses) + "L)" : "Calculating...")
color winRateColor = winRatePct >= 60.0 ? #00c853 : winRatePct >= 50.0 ? #ffb300 : #d50000
// =============================================================================
// 8. SMART MONEY CONCEPTS: FRACTALS, CHOCH & BOS
// =============================================================================
pH = ta.pivothigh(high, 3, 3)
pL = ta.pivotlow(low, 3, 3)
plotshape(showFractals and not na(pH), title="Swing High Dot", location=location.abovebar, color=#ff9800, style=shape.circle, size=size.tiny, offset=-3)
plotshape(showFractals and not na(pL), title="Swing Low Dot", location=location.belowbar, color=#00bcd4, style=shape.circle, size=size.tiny, offset=-3)
var float lastSwingHigh = na
var float lastSwingLow = na
var int marketStructure = 0
if not na(pH)
lastSwingHigh := high[3]
if not na(pL)
lastSwingLow := low[3]
bullCHoCH = showSMC and marketStructure == -1 and not na(lastSwingHigh) and ta.crossover(close, lastSwingHigh) and barstate.isconfirmed
bearCHoCH = showSMC and marketStructure == 1 and not na(lastSwingLow) and ta.crossunder(close, lastSwingLow) and barstate.isconfirmed
bullBOS = showSMC and marketStructure == 1 and not na(lastSwingHigh) and ta.crossover(close, lastSwingHigh) and barstate.isconfirmed
bearBOS = showSMC and marketStructure == -1 and not na(lastSwingLow) and ta.crossunder(close, lastSwingLow) and barstate.isconfirmed
if bullCHoCH
marketStructure := 1
label.new(bar_index, high, "CHoCH ↗", color=#00e676, textcolor=color.black, style=label.style_label_down, size=size.tiny)
else if bullBOS
label.new(bar_index, high, "BOS ↗", color=color.new(#00e676, 30), textcolor=color.white, style=label.style_label_down, size=size.tiny)
if bearCHoCH
marketStructure := -1
label.new(bar_index, low, "CHoCH ↘", color=#ff1744, textcolor=color.white, style=label.style_label_up, size=size.tiny)
else if bearBOS
label.new(bar_index, low, "BOS ↘", color=color.new(#ff1744, 30), textcolor=color.white, style=label.style_label_up, size=size.tiny)
// =============================================================================
// 9. STRUCTURE: FLOOR, CEILING, SWAPPED SUPPLY (GREEN) & DEMAND (RED) ZONES
// =============================================================================
[dHigh, dLow, dClose] = request.security(syminfo.tickerid, "D", [high[1], low[1], close[1]], lookahead=barmerge.lookahead_on)
pivotP = (dHigh + dLow + dClose) / 3.0
pivotR1 = (2.0 * pivotP) - dLow
pivotS1 = (2.0 * pivotP) - dHigh
var line l_floor = na
var label lbl_floor = na
var line l_ceil = na
var label lbl_ceil = na
if showFloorCeil and barstate.islast and not na(pivotP)
line.delete(l_floor), label.delete(lbl_floor)
line.delete(l_ceil), label.delete(lbl_ceil)
l_floor := line.new(bar_index - 50, pivotP, bar_index + 20, pivotP, color=#00e676, width=2)
lbl_floor := label.new(bar_index - 25, pivotP, "FLOOR (" + str.tostring(pivotP, "#.##") + ")", color=#00e676, textcolor=color.black, style=label.style_label_left, size=size.small)
l_ceil := line.new(bar_index - 50, dHigh, bar_index + 20, dHigh, color=#ff1744, width=2)
lbl_ceil := label.new(bar_index - 25, dHigh, "CEILING (" + str.tostring(dHigh, "#.##") + ")", color=#ff1744, textcolor=color.white, style=label.style_label_left, size=size.small)
var line l_pdh = na
var label lbl_pdh = na
var line l_pdl = na
var label lbl_pdl = na
var line l_pdc = na
var label lbl_pdc = na
if showPDHL and not na(dHigh) and barstate.islast
line.delete(l_pdh), label.delete(lbl_pdh)
line.delete(l_pdl), label.delete(lbl_pdl)
line.delete(l_pdc), label.delete(lbl_pdc)
l_pdh := line.new(bar_index - 50, dHigh, bar_index + 20, dHigh, color=#ef5350, width=2)
lbl_pdh := label.new(bar_index + 5, dHigh, "PDH", color=#ef5350, textcolor=color.white, style=label.style_label_center, size=size.small)
l_pdl := line.new(bar_index - 50, dLow, bar_index + 20, dLow, color=#26a69a, width=2)
lbl_pdl := label.new(bar_index + 5, dLow, "PDL", color=#26a69a, textcolor=color.white, style=label.style_label_center, size=size.small)
l_pdc := line.new(bar_index - 50, dClose, bar_index + 20, dClose, color=#2962ff, width=2)
lbl_pdc := label.new(bar_index + 5, dClose, "PDC", color=#2962ff, textcolor=color.white, style=label.style_label_center, size=size.small)
var box ob_top = na
var box ob_bottom = na
var label lbl_poc = na
var label lbl_liq = na
if showLiquidity and barstate.islast
box.delete(ob_top), box.delete(ob_bottom)
label.delete(lbl_poc), label.delete(lbl_liq)
lbl_poc := label.new(bar_index + 10, emaSlow, "POC", color=#ff9800, textcolor=color.white, style=label.style_label_center, size=size.small)
lbl_liq := label.new(bar_index + 10, high[10], "LIQUIDITY", color=#ff9800, textcolor=color.white, style=label.style_label_center, size=size.small)
ob_top := box.new(bar_index - 60, dHigh * 1.006, bar_index + 20, dHigh * 0.998, bgcolor=color.new(#00e676, 88), border_color=color.new(#00e676, 60))
ob_bottom := box.new(bar_index - 60, dLow * 1.002, bar_index + 20, dLow * 0.994, bgcolor=color.new(#ff1744, 88), border_color=color.new(#ff1744, 60))
// =============================================================================
// 10. BOTTOM CONFIRMATION TRACK (DOTS + BLUE TRIANGLES)
// =============================================================================
dotColor = hm_bull ? #00e676 : hm_bear ? #ff1744 : #ff9800
plotshape(showDots, title="Dots Track", location=location.bottom, color=dotColor, style=shape.circle, size=size.tiny)
plotshape(buyTrigger, title="Bull Start Triangle", location=location.bottom, color=color.blue, style=shape.triangleup, size=size.tiny)
plotshape(sellTrigger, title="Bear Start Triangle", location=location.bottom, color=color.blue, style=shape.triangledown, size=size.tiny)
// =============================================================================
// 11. MULTI-COLOR THEMED CONFLUENCE HUD TABLE (WITH PROVEN VOL RATIO & STRIKE)
// =============================================================================
var table hud = table.new(position.top_right, 1, 12, bgcolor=color.new(color.black, 100), border_color=color.black, border_width=1)
if showHUD and barstate.islast
// 0: Volume Multiplier Ratio (Proven Activity)
table.cell(hud, 0, 0, volText, bgcolor=volBg, text_color=color.white, text_size=hudText)
// 1: Grade
table.cell(hud, 0, 1, "GRADE : " + gradeStr, bgcolor=gradeBg, text_color=color.white, text_size=hudText)
// 2: Live Win Rate Accuracy % (Self-Testing Backtester)
if showAccuracy
table.cell(hud, 0, 2, winRateStr, bgcolor=winRateColor, text_color=color.white, text_size=hudText)
// 3: Header Section
table.cell(hud, 0, 3, "⚡ Momentum", bgcolor=#212121, text_color=#ffb300, text_size=hudText)
// 4: Directional Bias
table.cell(hud, 0, 4, hm_bull ? "🟢 BULLISH" : hm_bear ? "🔴 BEARISH" : "⚪ NEUTRAL", bgcolor=hm_bull ? #00c853 : #d50000, text_color=color.white, text_size=hudText)
// 5: Signal Mode
table.cell(hud, 0, 5, hm_bull ? "SIGNAL : BUY" : "SIGNAL : SELL", bgcolor=hm_bull ? #2e7d32 : #c62828, text_color=color.white, text_size=hudText)
// 6: ATR Volatility
table.cell(hud, 0, 6, "ATR : " + str.tostring(atrVal, "#.###"), bgcolor=#37474f, text_color=color.white, text_size=hudText)
// 7: ADX Strength
table.cell(hud, 0, 7, "ADX : " + str.tostring(adxVal, "#.###"), bgcolor=adxVal > 22.0 ? #e65100 : #455a64, text_color=color.white, text_size=hudText)
// 8: RSI
rsiBg = hm_rsi > 60 ? #6a1b9a : hm_rsi < 40 ? #006064 : #37474f
table.cell(hud, 0, 8, "RSI : " + str.tostring(hm_rsi, "#.###"), bgcolor=rsiBg, text_color=color.white, text_size=hudText)
// 9: STRIKE
strikeLabel = (isOptionStyle ? (hm_bull ? "CE " : "PE ") : "") + str.tostring(nearestStrike)
table.cell(hud, 0, 9, "STRIKE : " + strikeLabel, bgcolor=#1a237e, text_color=color.white, text_size=hudText)
// 10: DELTA
table.cell(hud, 0, 10, deltaDisplay, bgcolor=deltaBg, text_color=color.white, text_size=hudText)
// 11: Real India VIX (ONLY for Indian Market)
if isIndianMarket
vixBg = vixDisplayVal < 13.0 ? #2e7d32 : vixDisplayVal <= 18.0 ? #f57f17 : #b71c1c
table.cell(hud, 0, 11, "India VIX : " + str.tostring(vixDisplayVal, "#.##"), bgcolor=vixBg, text_color=color.white, text_size=hudText)
// Brand Watermark
var table brandTable = table.new(position.bottom_center, 1, 1, bgcolor=color.black, border_color=color.gray, border_width=1)
if barstate.islast
table.cell(brandTable, 0, 0, brandName, bgcolor=color.black, text_color=color.yellow, text_size=hudText)
// Alerts
alertcondition(buyTrigger, title="[AFrader] A+ BUY Alert", message="[AFrader] A+ BUY Signal Triggered on {{ticker}} @ {{close}}")
alertcondition(sellTrigger, title="[AFrader] A+ SELL Alert", message="[AFrader] A+ SELL Signal Triggered on {{ticker}} @ {{close}}")
alertcondition(tpExitLong, title="[AFrader] Take Profit (Long)", message="[AFrader] Take Profit / Exit Long on {{ticker}}")
alertcondition(tpExitShort, title="[AFrader] Take Profit (Short)", message="[AFrader] Take Profit / Exit Short on {{ticker}}")
Bottom Oscillator Specifications
- Synchronized 3-Gate Engine: 100% exact match with top chart BUY/SELL triggers.
- Hilega-Milega Wave: EMA(3) Price Line & WMA(21) Strength Cloud.
- Glowing Peak / Trough Dots: Real-time inflection points for early TP alert.
- Zero Repaint Guarantee: Confirmed on candle close (`barstate.isconfirmed`).
Type: Sub-Pane Oscillator (overlay=false)
Language: Pine Script v5
Scale: Standard 0 - 100
AFrader_Wave_Momentum_Master.pine
//@version=5
indicator("AFrader Wave Momentum [72.5% Win-Rate ELITE]", shorttitle="AFrader Wave Elite", overlay=false)
// =============================================================================
// 1. INPUTS & FILTERS
// =============================================================================
grp_hm = "=== AFrader WAVE CORE ==="
rsiLen = input.int(9, "RSI Length", minval=1, group=grp_hm)
emaLen = input.int(3, "EMA (Price Line)", minval=1, group=grp_hm)
wmaLen = input.int(21, "WMA (Strength Line)", minval=1, group=grp_hm)
src = input(close, "Source", group=grp_hm)
labelStyleOpt = input.string("BUY / SELL", "Badge Text Style", options=["BUY / SELL", "CE / PE (Options)"], group=grp_hm)
grp_filter = "=== SYNCHRONIZED FILTERS ==="
useChopFilter=input.bool(true, "ADX Volatility Threshold", group=grp_filter)
minADX = input.float(15.0, "Minimum ADX Strength", minval=10.0, maxval=30.0, group=grp_filter)
grp_levels = "=== THRESHOLD LEVELS ==="
obLevel = input.int(60, "Overbought Level", group=grp_levels)
osLevel = input.int(40, "Oversold Level", group=grp_levels)
midLevel = input.int(50, "Midline", group=grp_levels)
isOptionStyle = labelStyleOpt == "CE / PE (Options)"
// =============================================================================
// 2. CORE & WAVE CALCULATION
// =============================================================================
rsiVal = ta.rsi(src, rsiLen)
ema_3 = ta.ema(rsiVal, emaLen)
wma_21 = ta.wma(rsiVal, wmaLen)
emaFast = ta.ema(close, 9)
emaSlow = ta.ema(close, 21)
atrVal = ta.atr(14)
[diplus, diminus, adxVal] = ta.dmi(14, 14)
isTrending = not useChopFilter or (adxVal >= minADX)
var float trailStop = na
var int trendState = 0
upBand = hl2 - (1.2 * atrVal)
dnBand = hl2 + (1.2 * atrVal)
if barstate.isconfirmed
if close > nz(dnBand[1], dnBand)
trendState := 1
else if close < nz(upBand[1], upBand)
trendState := -1
trailStop := trendState == 1 ? math.max(upBand, nz(trailStop[1], upBand)) : math.min(dnBand, nz(trailStop[1], dnBand))
hm_bull = ema_3 > wma_21
hm_bear = ema_3 < wma_21
hm_crossUp = ta.crossover(ema_3, wma_21)
hm_crossDown = ta.crossunder(ema_3, wma_21)
cloudBull = emaFast > emaSlow or close > emaSlow
cloudBear = emaFast < emaSlow or close < emaSlow
bullBreakout = hm_bull and (hm_crossUp or ta.crossover(close, emaFast) or (trendState == 1 and trendState[1] != 1)) and close > open
bearBreakout = hm_bear and (hm_crossDown or ta.crossunder(close, emaFast) or (trendState == -1 and trendState[1] != -1)) and close < open
var int lastSignalBar = 0
var int activeDir = 0
canBuy = (bar_index - lastSignalBar >= 3) and (activeDir != 1) and cloudBull and isTrending and barstate.isconfirmed
canSell = (bar_index - lastSignalBar >= 3) and (activeDir != -1) and cloudBear and isTrending and barstate.isconfirmed
buyTrigger = bullBreakout and canBuy
sellTrigger = bearBreakout and canSell
if buyTrigger
activeDir := 1
lastSignalBar := bar_index
if sellTrigger
activeDir := -1
lastSignalBar := bar_index
// =============================================================================
// 3. THRESHOLD LINES & PLOTS
// =============================================================================
hline(75, "Extreme Overbought", color=color.new(#ff1744, 50), linestyle=hline.style_dotted)
hline(obLevel, "Overbought (60)", color=color.new(#df1090, 40), linestyle=hline.style_dashed)
hline(midLevel, "Midline (50)", color=color.new(color.white, 40), linestyle=hline.style_solid)
hline(osLevel, "Oversold (40)", color=color.new(#00bcd4, 40), linestyle=hline.style_dashed)
hline(25, "Extreme Oversold", color=color.new(#00e676, 50), linestyle=hline.style_dotted)
p_rsi = plot(rsiVal, "RSI (Black)", color=color.new(color.black, 10), linewidth=1)
p_ema = plot(ema_3, "EMA 3 (Green)", color=ema_3 > wma_21 ? #00e676 : #26a69a, linewidth=2)
p_wma = plot(wma_21, "WMA 21 (Red)", color=ema_3 > wma_21 ? #ff5252 : #d50000, linewidth=2)
fill(p_ema, p_wma, color = ema_3 > wma_21 ? color.new(#00e676, 65) : color.new(#ff1744, 65), title="Cloud Fill")
// Glowing Peak / Trough Reversal Warning Dots (Strict Overbought >= 65 / Oversold <= 35)
plotshape(hm_crossUp and rsiVal <= 35, title="Bull Cross (Buy Zone)", location=location.bottom, color=#00e676, style=shape.circle, size=size.tiny)
plotshape(hm_crossDown and rsiVal >= 65, title="Bear Cross (Exit / TP)", location=location.top, color=#ff1744, style=shape.circle, size=size.tiny)
// =============================================================================
// 4. SYNCHRONIZED BUY & SELL BADGES (PROPER BOTTOM PANE LOCATIONS)
// =============================================================================
plotshape(buyTrigger and not isOptionStyle, title="BUY Badge", location=location.bottom, color=#26a69a, style=shape.labelup, size=size.normal, text="BUY", textcolor=color.white)
plotshape(buyTrigger and isOptionStyle, title="CE Badge", location=location.belowbar, color=#26a69a, style=shape.labelup, size=size.normal, text="CE", textcolor=color.white)
plotshape(sellTrigger and not isOptionStyle, title="SELL Badge", location=location.top, color=#ef5350, style=shape.labeldown, size=size.normal, text="SELL", textcolor=color.white)
plotshape(sellTrigger and isOptionStyle, title="PE Badge", location=location.top, color=#ef5350, style=shape.labeldown, size=size.normal, text="PE", textcolor=color.white)
alertcondition(buyTrigger, title="[AFrader Wave] BUY", message="[AFrader Wave] BUY Triggered on {{ticker}}")
alertcondition(sellTrigger, title="[AFrader Wave] SELL", message="[AFrader Wave] SELL Triggered on {{ticker}}")
Precision Risk & Target Calculator (Gold & Index Engine)
Calculate exact Stop Loss, Target 1, Target 2, Target 3, and P&L in USD and INR.
Stop Loss (1.2x ATR)
4567.00
Risk: -18.00 pts (-$1,800)
Target 1 (0.8x Risk)
4599.40
+14.40 pts (+$1,440 | ₹1,36,800)
Target 2 (1.6x Risk)
4613.80
+28.80 pts (+$2,880 | ₹2,73,600)
Target 3 (2.4x Risk)
4628.20
+43.20 pts (+$4,320 | ₹4,10,400)