NetNapz Universal V1

NetNapz Universal V1

This page contains the original indicator code you supplied, with only the indicator name changed to NetNapz Universal V1.

Important: paste the full code into a brand-new TradingView Pine script and keep //@version=6 as the first line.

Pine Script v6

//@version=6

indicator("NetNapz Universal V1", overlay=true, max_labels_count=500, max_lines_count=500, max_boxes_count=50)

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

// 1. ASSET CLASS DETECTION & ADAPTIVE SETTINGS

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

string asset_type = syminfo.type

bool is_forex = asset_type == "forex"

bool is_crypto = asset_type == "crypto"

bool is_futures = asset_type == "futures"

bool is_stock = asset_type == "stock"

bool is_index = asset_type == "index"

bool is_24h_market = is_crypto or is_forex

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

// 2. INPUT CONTEXTS & CONFIGURATIONS

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

// Group 1: Exchange Settings

exchange = input.string("WEEX", title="πŸ’± Exchange", options=["WEEX", "GMX", "Both", "Other"], group="πŸ’± Exchange Settings")

leverage = input.int(10, title="Leverage", minval=1, maxval=100, group="πŸ’± Exchange Settings")

account_size = input.float(1000, title="Account Size (USDT)", minval=100, group="πŸ’± Exchange Settings")

risk_percent = input.float(1.0, title="Risk per Trade (%)", minval=0.1, maxval=10, step=0.1, group="πŸ’± Exchange Settings")

// Group 2: Correlation Filters

use_btc_filter = input.bool(false, title="πŸ…±οΈ Enable Bitcoin Correlation Filter", group="πŸ”— Correlation Filters")

btc_symbol = input.symbol("BINANCE:BTCUSDT", title="Bitcoin Symbol", group="πŸ”— Correlation Filters")

btc_correlation_period = input.int(50, title="BTC Correlation Lookback", minval=10, maxval=200, group="πŸ”— Correlation Filters")

btc_min_correlation = input.float(0.5, title="Min Correlation (0-1)", minval=0.1, maxval=1.0, step=0.1, group="πŸ”— Correlation Filters")

use_macro_filter = input.bool(false, title="πŸ›‘οΈ Enable Macro Shield Filter (S&P 500)", group="πŸ”— Correlation Filters")

macro_symbol = input.symbol("CME_MINI:ES1!", title="Macro Symbol", group="πŸ”— Correlation Filters")

use_gold_filter = input.bool(false, title="πŸ₯‡ Enable Gold Correlation Filter", group="πŸ”— Correlation Filters")

gold_symbol = input.symbol("COMEX:GC1!", title="Gold Symbol", group="πŸ”— Correlation Filters")

// Group 3: Other Filters

use_ema200_filter = input.bool(false, title="πŸ“ˆ Enable EMA 200 Trend Filter", group="πŸ” Filters")

use_vol_filter = input.bool(true, title="πŸ“Š Enable Volume Surge Filter", group="πŸ” Filters")

use_market_session = input.bool(true, title="πŸ• Enable Market Session Filter", group="πŸ” Filters")

// Group 4: Signal Settings

signal_cooldown = input.int(5, minval=1, title="⏱️ Signal Cooldown (Bars)", group="βš™οΈ Signal Settings")

use_atr_stops = input.bool(true, title="🎯 Use ATR-Based Stop Levels", group="βš™οΈ Signal Settings")

atr_mult = input.float(1.5, title="ATR Stop Multiplier", minval=0.5, maxval=5, step=0.1, group="βš™οΈ Signal Settings")

// Group 5: Moving Averages

len1 = input.int(34, minval=1, title='πŸ“Š Whale EMA Length', group="πŸ“ Moving Averages")

len2 = input.int(21, minval=1, title='πŸ“Š Whale SMA Length', group="πŸ“ Moving Averages")

len3 = input.int(200, minval=1, title='πŸ“Š Long Term EMA', group="πŸ“ Moving Averages")

// Group 6: Structure

lookback = input.int(8, title="πŸ—οΈ Structure Lookback Period", group="πŸ”¨ Structure")

vol_length = input.int(9, title="πŸ“Š Volume MA Length", group="πŸ”¨ Structure")

// Group 7: Oscillators

bb_length = input.int(20, title="πŸ“ BB Length", group="πŸ“Š Oscillators")

bb_mult = input.float(2.5, title="πŸ“ BB Deviation", minval=1.0, maxval=5.0, step=0.1, group="πŸ“Š Oscillators")

rsi_len = input.int(14, title="πŸ“ RSI Length", group="πŸ“Š Oscillators")

// Group 8: Alerts & Display

show_alerts = input.bool(true, title="πŸ”” Show Signal Alerts", group="πŸ“’ Display")

show_stop_levels = input.bool(true, title="🎯 Show Stop/Target Levels", group="πŸ“’ Display")

// show_stats and show_trade_details & show_correlation are removed from display (they will not plot anything)

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

// 3. ADAPTIVE SETTINGS (Non-input constants)

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

float vol_mult_default = is_forex ? 1.5 : is_crypto ? 2.5 : 3.0

float touch_tolerance = is_forex ? 0.0005 : is_crypto ? 0.002 : 0.001

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

// 4. ENHANCED CALCULATIONS (using previous bar values only)

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

// ---- Use previous bar's data for all signals (non-repainting) ----

prev_close = close[1]

prev_high = high[1]

prev_low = low[1]

prev_open = open[1]

prev_volume = volume[1]

// ATR for dynamic stops (using previous close for consistency)

atr_value = ta.atr(14)[1]  // previous bar's ATR

// Session detection (for non-24h markets)

is_regular_session = if is_24h_market

    true

else

    not (hour < 9 or hour > 16)

// Volume analysis (using previous bar's volume)

volume_ma = ta.sma(prev_volume, vol_length)

vol_sma_20 = ta.sma(prev_volume, 20)

vol_ratio = prev_volume / vol_sma_20

vol_surge_threshold = vol_mult_default

// Adaptive moving averages (based on previous close)

ema1 = ta.ema(prev_close, len1)

sma1 = ta.sma(prev_close, len2)

ema2 = ta.ema(prev_close, len3)

// ---- Bitcoin correlation filter (using previous closes) ----

btc_close = use_btc_filter ? request.security(btc_symbol, timeframe.period, close[1], barmerge.gaps_off, barmerge.lookahead_off) : na

btc_change = use_btc_filter ? ta.change(btc_close) : na

btc_percent_change = use_btc_filter and not na(btc_close[1]) ? btc_change / btc_close[1] * 100 : na

asset_change = ta.change(prev_close)

asset_percent_change = asset_change / prev_close[1] * 100

btc_direction = use_btc_filter ? (btc_close > btc_close[1] ? 1 : btc_close < btc_close[1] ? -1 : 0) : 0

asset_direction = prev_close > prev_close[1] ? 1 : prev_close < prev_close[1] ? -1 : 0

var int btc_match_count = 0

var int btc_total_count = 0

if use_btc_filter and not na(btc_direction) and btc_direction != 0

    btc_total_count := btc_total_count + 1

    if btc_direction == asset_direction

        btc_match_count := btc_match_count + 1

btc_correlation = 0.0

if btc_total_count > 0

    btc_correlation := btc_match_count / btc_total_count

btc_aligned = use_btc_filter ? (btc_correlation >= btc_min_correlation) : true

btc_ema_50 = use_btc_filter ? ta.ema(btc_close, 50) : na

btc_trend_up = use_btc_filter ? (btc_close > btc_ema_50) : true

btc_trend_down = use_btc_filter ? (btc_close < btc_ema_50) : true

// ---- Macro filter (using previous closes) ----

spx_close = use_macro_filter ? request.security(macro_symbol, timeframe.period, close[1], barmerge.gaps_off, barmerge.lookahead_off) : na

spx_ema = ta.ema(spx_close, 21)

fallback_ema = ta.ema(prev_close, 50)

spx_is_crashing = use_macro_filter ? (not na(spx_close) ? (spx_close < spx_ema) : (prev_close < fallback_ema)) : false

spx_crashing = use_macro_filter and spx_is_crashing

// ---- Gold correlation filter (using previous closes) ----

gold_close = use_gold_filter ? request.security(gold_symbol, timeframe.period, close[1], barmerge.gaps_off, barmerge.lookahead_off) : na

gold_ema = ta.ema(gold_close, 21)

gold_is_bullish = use_gold_filter ? (gold_close > gold_ema) : true

gold_crashing = use_gold_filter and not gold_is_bullish

// ---- Structure detection (using previous close) ----

lookback_sma = ta.sma(prev_close, lookback)

close_cross_above_sma = ta.crossover(prev_close, lookback_sma)

close_cross_below_sma = ta.crossunder(prev_close, lookback_sma)

short_swing_low = ta.valuewhen(close_cross_above_sma, prev_low, 0)

long_swing_high = ta.valuewhen(close_cross_below_sma, prev_high, 0)

// Breakout detection (using previous close)

raw_breakout_long = ta.crossover(prev_close, long_swing_high)

raw_breakout_short = ta.crossunder(prev_close, short_swing_low)

macro_band_cross = ta.crossunder(prev_close, ema1)

// ---- Bollinger Bands and RSI (using previous close) ----

basis = ta.sma(prev_close, bb_length)

dev = bb_mult * ta.stdev(prev_close, bb_length)

upper_bb = basis + dev

lower_bb = basis - dev

rsi_val = ta.rsi(prev_close, rsi_len)

// ---- Enhanced whale patterns (using previous high/low) ----

climax_top = (prev_high >= upper_bb) and (rsi_val >= 70) and vol_ratio > 1.2

climax_bottom = (prev_low <= lower_bb) and (rsi_val <= 30) and vol_ratio > 1.2

whale_stop_hunt_top = (prev_high > upper_bb) and (prev_close < basis) and (prev_volume > vol_sma_20)

whale_stop_hunt_bot = (prev_low < lower_bb) and (prev_close > basis) and (prev_volume > vol_sma_20)

// ---- Volume surge signals (using previous volume) ----

vol_surge_bearish = use_vol_filter and (vol_ratio > vol_surge_threshold) and (prev_close < prev_open)

vol_surge_bullish = use_vol_filter and (vol_ratio > vol_surge_threshold) and (prev_close > prev_open)

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

// 5. DAILY LEVELS (using previous day's completed values)

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

[daily_high_prev, daily_low_prev, daily_open_prev, daily_close_prev] = request.security(syminfo.tickerid, "D", [high[1], low[1], open[1], close[1]], barmerge.gaps_off, barmerge.lookahead_off)

// Touch detection (based on previous bar touching yesterday's levels)

high_touch = prev_high >= daily_high_prev - (daily_high_prev * touch_tolerance)

low_touch = prev_low <= daily_low_prev + (daily_low_prev * touch_tolerance)

// Bounce detection

bounce_high = high_touch and prev_close < prev_open and prev_volume > vol_sma_20 and prev_close < daily_high_prev

bounce_low = low_touch and prev_close > prev_open and prev_volume > vol_sma_20 and prev_close > daily_low_prev

// Volume nodes

var float high_volume_node = na

var float low_volume_node = na

var float mid_volume_node = na

if high_touch and vol_ratio > 1.5

    high_volume_node := daily_high_prev

if low_touch and vol_ratio > 1.5

    low_volume_node := daily_low_prev

if ta.crossover(prev_close, daily_open_prev) and vol_ratio > 2.0

    mid_volume_node := daily_open_prev

// Pivot points (based on previous day)

pivot_point = (daily_high_prev + daily_low_prev + daily_close_prev) / 3

r1 = 2 * pivot_point - daily_low_prev

s1 = 2 * pivot_point - daily_high_prev

r2 = pivot_point + (daily_high_prev - daily_low_prev)

s2 = pivot_point - (daily_high_prev - daily_low_prev)

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

// 6. SIGNAL GENERATION (non-repainting)

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

var int structural_trend_state = 0

var int bars_since_last_signal = 100

var float last_entry_price = na

var float stop_loss_level = na

var float take_profit_level = na

var float position_size = na

var float margin_required = na

var float notional_value = na

bars_since_last_signal := bars_since_last_signal + 1

bool locked_out = bars_since_last_signal < signal_cooldown

// Session filter

bool session_ok = use_market_session ? is_regular_session : true

// Trend filters

bool trend_filter_long = use_ema200_filter ? (prev_close > ema2) : true

bool trend_filter_short = use_ema200_filter ? (prev_close < ema2) : true

// Correlation filters

bool btc_filter_long = use_btc_filter ? (btc_aligned and btc_trend_up) : true

bool btc_filter_short = use_btc_filter ? (btc_aligned and btc_trend_down) : true

bool gold_filter_ok = use_gold_filter ? not gold_crashing : true

// Combined filters

bool all_filters_long = trend_filter_long and btc_filter_long and gold_filter_ok and session_ok

bool all_filters_short = trend_filter_short and btc_filter_short and gold_filter_ok and session_ok

// Signal conditions

raw_msb_long = raw_breakout_long and not spx_crashing

raw_msb_short = raw_breakout_short or (spx_crashing and macro_band_cross)

// Signal variables

bool fire_long = false

bool fire_short = false

bool fire_sr_buy = false

bool fire_sr_sell = false

bool fire_climax_top = false

bool fire_climax_bot = false

// Long signals

if raw_msb_long and structural_trend_state != 1 and not whale_stop_hunt_bot and not locked_out and all_filters_long

    fire_long := true

    structural_trend_state := 1

    bars_since_last_signal := 0

    last_entry_price := prev_close

    stop_loss_level := use_atr_stops ? prev_close - (atr_value * atr_mult) : short_swing_low

    take_profit_level := prev_close + (atr_value * atr_mult * 2)

    position_size := (account_size * (risk_percent / 100)) / math.abs(prev_close - stop_loss_level)

    margin_required := position_size / leverage

    notional_value := position_size * prev_close

// Short signals

if raw_msb_short and structural_trend_state != -1 and not whale_stop_hunt_top and not locked_out and all_filters_short

    fire_short := true

    structural_trend_state := -1

    bars_since_last_signal := 0

    last_entry_price := prev_close

    stop_loss_level := use_atr_stops ? prev_close + (atr_value * atr_mult) : long_swing_high

    take_profit_level := prev_close - (atr_value * atr_mult * 2)

    position_size := (account_size * (risk_percent / 100)) / math.abs(prev_close - stop_loss_level)

    margin_required := position_size / leverage

    notional_value := position_size * prev_close

// Support/Resistance bounces

if bounce_low and structural_trend_state != 1 and not whale_stop_hunt_bot and not locked_out and all_filters_long

    fire_sr_buy := true

    structural_trend_state := 1

    bars_since_last_signal := 0

    last_entry_price := prev_close

    stop_loss_level := daily_low_prev - (atr_value * 0.5)

    take_profit_level := pivot_point

    position_size := (account_size * (risk_percent / 100)) / math.abs(prev_close - stop_loss_level)

    margin_required := position_size / leverage

    notional_value := position_size * prev_close

if bounce_high and structural_trend_state != -1 and not whale_stop_hunt_top and not locked_out and all_filters_short

    fire_sr_sell := true

    structural_trend_state := -1

    bars_since_last_signal := 0

    last_entry_price := prev_close

    stop_loss_level := daily_high_prev + (atr_value * 0.5)

    take_profit_level := pivot_point

    position_size := (account_size * (risk_percent / 100)) / math.abs(prev_close - stop_loss_level)

    margin_required := position_size / leverage

    notional_value := position_size * prev_close

// Climax signals

var int exhaustion_lock = 0

if climax_top and exhaustion_lock != 1 and structural_trend_state == 1 and not locked_out

    fire_climax_top := true

    exhaustion_lock := 1

    bars_since_last_signal := 0

    stop_loss_level := upper_bb

    take_profit_level := basis

if climax_bottom and exhaustion_lock != -1 and structural_trend_state == -1 and not locked_out

    fire_climax_bot := true

    exhaustion_lock := -1

    bars_since_last_signal := 0

    stop_loss_level := lower_bb

    take_profit_level := basis

// Reset exhaustion lock

if fire_long or fire_short or fire_sr_buy or fire_sr_sell

    exhaustion_lock := 0

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

// 7. VISUALIZATION

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

// Colors

c_emerald = color.new(#00C853, 0)

c_maroon = color.new(#880E4F, 0)

c_gold = color.new(#FFD700, 0)

c_purple = color.new(#9C27B0, 0)

c_blue = color.new(#2196F3, 0)

c_orange = color.new(#FF9800, 0)

c_bitcoin = color.new(#F7931A, 0)

// Moving average fills

diFill = sma1 > ema1 ? color.new(#E10013, 70) : color.new(#E1C700, 70)

p1 = plot(ema1, color=color.new(#E1C700, 40), title='Whale EMA 34', linewidth=2)

p2 = plot(sma1, color=color.new(#E10013, 40), title='Whale SMA 21', linewidth=2)

p3 = plot(ema2, color=color.new(#0F00E1, 40), linewidth=2, title='Long Term EMA 200')

fill(p1, p2, color=diFill, title='MA Band Fill')

// Daily levels

plot(daily_high_prev, color=c_emerald, linewidth=2, title="Daily High (Prev)", trackprice=true, show_last=1)

plot(daily_low_prev, color=c_maroon, linewidth=2, title="Daily Low (Prev)", trackprice=true, show_last=1)

plot(daily_open_prev, color=color.new(#9E9E9E, 0), linewidth=1, style=plot.style_circles, title="Daily Open (Prev)", trackprice=true, show_last=1)

// Pivot points

plot(pivot_point, color=c_gold, linewidth=1, title="Pivot Point", show_last=1)

plot(r1, color=color.new(#FF9800, 50), linewidth=1, title="R1", show_last=1)

plot(s1, color=color.new(#2196F3, 50), linewidth=1, title="S1", show_last=1)

// Volume nodes

plot(high_volume_node, color=c_purple, linewidth=2, title="High Volume Node", trackprice=true, show_last=1)

plot(low_volume_node, color=c_blue, linewidth=2, title="Low Volume Node", trackprice=true, show_last=1)

// Bollinger Bands

plot(upper_bb, color=color.new(color.blue, 70), linewidth=1, title="Upper BB")

plot(lower_bb, color=color.new(color.blue, 70), linewidth=1, title="Lower BB")

plot(basis, color=color.new(color.gray, 70), linewidth=1, title="BB Basis")

// Signal shapes

plotshape(fire_long, title="LONG Signal", style=shape.labelup, location=location.belowbar, 

          color=color.green, text="LONG", textcolor=color.white, size=size.large)

plotshape(fire_short, title="SHORT Signal", style=shape.labeldown, location=location.abovebar, 

          color=color.red, text="SHORT", textcolor=color.white, size=size.large)

plotshape(fire_sr_buy, title="BUY BOUNCE", style=shape.labelup, location=location.belowbar, 

          color=c_emerald, text="BUY", textcolor=color.white, size=size.normal)

plotshape(fire_sr_sell, title="SELL REJECT", style=shape.labeldown, location=location.abovebar, 

          color=c_maroon, text="SELL", textcolor=color.white, size=size.normal)

plotshape(fire_climax_top, title="TOP CLIMAX", style=shape.labeldown, location=location.abovebar, 

          color=color.aqua, text="TOP", textcolor=color.white, size=size.small)

plotshape(fire_climax_bot, title="BOTTOM CLIMAX", style=shape.labelup, location=location.belowbar, 

          color=color.blue, text="BOT", textcolor=color.white, size=size.small)

// Whale traps

plotshape(whale_stop_hunt_top, title="WHALE TRAP SHORT", style=shape.flag, location=location.abovebar, 

          color=c_purple, text="TRAP", textcolor=color.white, size=size.small)

plotshape(whale_stop_hunt_bot, title="WHALE TRAP LONG", style=shape.flag, location=location.belowbar, 

          color=c_purple, text="TRAP", textcolor=color.white, size=size.small)

// Volume surges

plotshape(vol_surge_bearish, title="VOLUME SELL", style=shape.triangledown, location=location.abovebar, 

          color=c_orange, size=size.small)

plotshape(vol_surge_bullish, title="VOLUME BUY", style=shape.triangleup, location=location.belowbar, 

          color=color.teal, size=size.small)

// Stop loss and take profit levels

if show_stop_levels and (fire_long or fire_short or fire_sr_buy or fire_sr_sell)

    line.new(bar_index, stop_loss_level, bar_index + 20, stop_loss_level, 

             color=color.red, width=2, style=line.style_dashed)

    line.new(bar_index, take_profit_level, bar_index + 20, take_profit_level, 

             color=color.green, width=2, style=line.style_dashed)

    label.new(bar_index, stop_loss_level, "SL", color=color.red, textcolor=color.white, style=label.style_label_left)

    label.new(bar_index, take_profit_level, "TP", color=color.green, textcolor=color.white, style=label.style_label_left)

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

// 8. ALERTS

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

alertcondition(fire_long, title="πŸš€ WEEX/GMX LONG Signal", message="LONG {{ticker}} @ {{close}}")

alertcondition(fire_short, title="πŸ”» WEEX/GMX SHORT Signal", message="SHORT {{ticker}} @ {{close}}")

alertcondition(fire_sr_buy, title="πŸ’Ž BUY Bounce Signal", message="BUY BOUNCE {{ticker}} @ {{close}}")

alertcondition(fire_sr_sell, title="πŸ’Ž SELL Reject Signal", message="SELL REJECT {{ticker}} @ {{close}}")

alertcondition(fire_climax_top, title="⚠️ TOP Climax Signal", message="TOP CLIMAX {{ticker}} - Consider profit taking")

alertcondition(fire_climax_bot, title="⚠️ BOTTOM Climax Signal", message="BOTTOM CLIMAX {{ticker}} - Consider profit taking")

alertcondition(whale_stop_hunt_top, title="πŸ‹ Whale Trap Short", message="WHALE TRAP {{ticker}} - Possible stop hunt")

alertcondition(whale_stop_hunt_bot, title="πŸ‹ Whale Trap Long", message="WHALE TRAP {{ticker}} - Possible stop hunt")

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

// 9. BACKGROUND HIGHLIGHTING

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

bgcolor(fire_long or fire_sr_buy ? color.new(color.green, 95) : na, title="Long Signal Background")

bgcolor(fire_short or fire_sr_sell ? color.new(color.red, 95) : na, title="Short Signal Background")

bgcolor(spx_crashing ? color.new(color.orange, 90) : na, title="Macro Risk Background")

bgcolor(use_btc_filter and not btc_aligned ? color.new(c_bitcoin, 95) : na, title="BTC Correlation Risk")

bgcolor(not session_ok and use_market_session ? color.new(color.gray, 95) : na, title="Off-Session Background")

Copying tip: create a brand-new Pine script in TradingView, delete its default contents, and paste the full block above starting with //@version=6.

OPEN TRADINGVIEW PINE EDITOR β†’

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top