// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// © Mrspock007


//@version=5

indicator("NEO VWAP Touch Strategy Pro", shorttitle="NEO-VWAP", overlay=true, max_labels_count=500, max_lines_count=500)


// ═════════════════════════════════════════════════════════════════════════

// 📊 PANNEAU DE CONFIGURATION - INPUTS

// ═════════════════════════════════════════════════════════════════════════


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

// 🎯 SECTION 1: VWAP SETTINGS

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

vwap_group = "═══ 🎯 VWAP Configuration ═══"

show_daily_vwap = input.bool(true, "Show Daily VWAP", group=vwap_group)

daily_vwap_color = input.color(color.white, "Daily VWAP Color", group=vwap_group)

daily_vwap_width = input.int(2, "Daily VWAP Width", minval=1, maxval=5, group=vwap_group)


show_weekly_vwap = input.bool(true, "Show Weekly VWAP", group=vwap_group)

weekly_vwap_color = input.color(color.blue, "Weekly VWAP Color", group=vwap_group)

weekly_vwap_width = input.int(3, "Weekly VWAP Width", minval=1, maxval=5, group=vwap_group)


vwap_touch_sensitivity = input.float(0.05, "Touch Sensitivity (%)", minval=0.01, maxval=1.0, step=0.01, tooltip="Distance from VWAP to consider a 'touch' (percentage)", group=vwap_group)


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

// 📈 SECTION 2: SIGNAL SETTINGS

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

signal_group = "═══ 📈 Signal Configuration ═══"

require_confirmation = input.bool(true, "Require Candle Confirmation", tooltip="Wait for candle close to confirm pattern", group=signal_group)

min_wick_ratio = input.float(2.0, "Min Wick/Body Ratio", minval=0.5, maxval=10.0, step=0.5, tooltip="Minimum ratio for rejection wick vs body", group=signal_group)


show_long_signals = input.bool(true, "Show LONG Signals (Bounce)", group=signal_group)

show_short_signals = input.bool(true, "Show SHORT Signals (Rejection)", group=signal_group)


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

// 🔥 SECTION 3: VOLUME CONFLUENCE

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

volume_group = "═══ 🔥 Volume Confluence ═══"

use_volume_filter = input.bool(true, "Enable Volume Filter", group=volume_group)

volume_ma_length = input.int(20, "Volume MA Length", minval=5, maxval=200, group=volume_group)

volume_spike_multiplier = input.float(1.5, "Volume Spike Multiplier", minval=1.0, maxval=5.0, step=0.1, tooltip="Volume must be X times above MA", group=volume_group)


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

// 🌊 SECTION 4: ICHIMOKU CONFLUENCE

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

ichimoku_group = "═══ 🌊 Ichimoku Confluence ═══"

use_ichimoku_filter = input.bool(true, "Enable Ichimoku Filter", group=ichimoku_group)

tenkan_period = input.int(9, "Tenkan Period", minval=1, group=ichimoku_group)

kijun_period = input.int(26, "Kijun Period", minval=1, group=ichimoku_group)

senkou_span_b_period = input.int(52, "Senkou Span B Period", minval=1, group=ichimoku_group)

displacement = input.int(26, "Displacement", minval=1, group=ichimoku_group)


ichimoku_require_above_kijun_long = input.bool(true, "LONG: Require Above Kijun", tooltip="For bullish signals, price must be above Kijun", group=ichimoku_group)

ichimoku_require_below_kijun_short = input.bool(true, "SHORT: Require Below Kijun", tooltip="For bearish signals, price must be below Kijun", group=ichimoku_group)

ichimoku_require_above_cloud_long = input.bool(false, "LONG: Require Above Cloud", group=ichimoku_group)

ichimoku_require_below_cloud_short = input.bool(false, "SHORT: Require Below Cloud", group=ichimoku_group)


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

// 📊 SECTION 5: RSI CONFLUENCE

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

rsi_group = "═══ 📊 RSI Confluence ═══"

use_rsi_filter = input.bool(true, "Enable RSI Filter", group=rsi_group)

rsi_length = input.int(14, "RSI Length", minval=1, group=rsi_group)

rsi_oversold = input.int(30, "RSI Oversold Level", minval=0, maxval=50, group=rsi_group)

rsi_overbought = input.int(70, "RSI Overbought Level", minval=50, maxval=100, group=rsi_group)


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

// 🎲 SECTION 6: STOCHASTIC RSI CONFLUENCE

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

stoch_group = "═══ 🎲 Stochastic RSI Confluence ═══"

use_stoch_filter = input.bool(true, "Enable Stochastic RSI Filter", group=stoch_group)

stoch_length = input.int(14, "Stoch Length", minval=1, group=stoch_group)

stoch_k = input.int(3, "Stoch %K", minval=1, group=stoch_group)

stoch_d = input.int(3, "Stoch %D", minval=1, group=stoch_group)

stoch_oversold = input.int(20, "Stoch Oversold", minval=0, maxval=50, group=stoch_group)

stoch_overbought = input.int(80, "Stoch Overbought", minval=50, maxval=100, group=stoch_group)


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

// 🎨 SECTION 7: DISPLAY SETTINGS

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

display_group = "═══ 🎨 Display Settings ═══"

show_vwap_touch_zones = input.bool(true, "Show Touch Zones", group=display_group)

show_info_panel = input.bool(true, "Show Info Panel", group=display_group)

show_alerts = input.bool(true, "Enable Alerts", group=display_group)


// ═════════════════════════════════════════════════════════════════════════

// 📐 CALCULS PRINCIPAUX

// ═════════════════════════════════════════════════════════════════════════


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

// VWAP Calculations

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

vwap_src = hlc3


// Daily VWAP

daily_start = ta.change(time('D')) != 0

var float daily_cum_volume = 0.0

var float daily_cum_pv = 0.0


if daily_start

daily_cum_volume := 0.0

daily_cum_pv := 0.0


daily_cum_volume += volume

daily_cum_pv += vwap_src * volume

daily_vwap = daily_cum_pv / daily_cum_volume


// Weekly VWAP

weekly_start = ta.change(time('W')) != 0

var float weekly_cum_volume = 0.0

var float weekly_cum_pv = 0.0


if weekly_start

weekly_cum_volume := 0.0

weekly_cum_pv := 0.0


weekly_cum_volume += volume

weekly_cum_pv += vwap_src * volume

weekly_vwap = weekly_cum_pv / weekly_cum_volume


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

// VWAP Touch Detection

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

touch_threshold_percent = vwap_touch_sensitivity / 100


// Daily VWAP Touch

daily_touch_range_high = daily_vwap * (1 + touch_threshold_percent)

daily_touch_range_low = daily_vwap * (1 - touch_threshold_percent)

daily_touching = (low <= daily_touch_range_high and high >= daily_touch_range_low)


// Weekly VWAP Touch

weekly_touch_range_high = weekly_vwap * (1 + touch_threshold_percent)

weekly_touch_range_low = weekly_vwap * (1 - touch_threshold_percent)

weekly_touching = (low <= weekly_touch_range_high and high >= weekly_touch_range_low)


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

// Candlestick Pattern Recognition

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

body = math.abs(close - open)

upper_wick = high - math.max(close, open)

lower_wick = math.min(close, open) - low


// Bullish Rejection Patterns (for LONG)

is_hammer = lower_wick > body * min_wick_ratio and upper_wick < body and close > open

is_bullish_pin_bar = lower_wick > body * min_wick_ratio and close > open

is_bullish_engulfing = close > open and close[1] < open[1] and close > open[1] and open < close[1] and body > body[1] * 1.5


bullish_rejection_pattern = is_hammer or is_bullish_pin_bar or is_bullish_engulfing


// Bearish Rejection Patterns (for SHORT)

is_shooting_star = upper_wick > body * min_wick_ratio and lower_wick < body and close < open

is_bearish_pin_bar = upper_wick > body * min_wick_ratio and close < open

is_bearish_engulfing = close < open and close[1] > open[1] and close < open[1] and open > close[1] and body > body[1] * 1.5


bearish_rejection_pattern = is_shooting_star or is_bearish_pin_bar or is_bearish_engulfing


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

// Volume Filter

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

volume_ma = ta.sma(volume, volume_ma_length)

volume_spike = volume > volume_ma * volume_spike_multiplier

volume_filter_pass = not use_volume_filter or volume_spike


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

// Ichimoku Calculations

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

donchian(len) =>

math.avg(ta.lowest(len), ta.highest(len))


tenkan = donchian(tenkan_period)

kijun = donchian(kijun_period)

senkou_span_a = math.avg(tenkan, kijun)

senkou_span_b = donchian(senkou_span_b_period)


// Ichimoku Filters

price_above_kijun = close > kijun

price_below_kijun = close < kijun

price_above_cloud = close > math.max(senkou_span_a[displacement], senkou_span_b[displacement])

price_below_cloud = close < math.min(senkou_span_a[displacement], senkou_span_b[displacement])


ichimoku_long_ok = not use_ichimoku_filter or (not ichimoku_require_above_kijun_long or price_above_kijun) and (not ichimoku_require_above_cloud_long or price_above_cloud)


ichimoku_short_ok = not use_ichimoku_filter or (not ichimoku_require_below_kijun_short or price_below_kijun) and (not ichimoku_require_below_cloud_short or price_below_cloud)


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

// RSI Calculations

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

rsi = ta.rsi(close, rsi_length)

rsi_long_ok = not use_rsi_filter or rsi < rsi_overbought

rsi_short_ok = not use_rsi_filter or rsi > rsi_oversold


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

// Stochastic RSI Calculations

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

rsi_for_stoch = ta.rsi(close, stoch_length)

stoch_k_value = ta.sma(ta.stoch(rsi_for_stoch, rsi_for_stoch, rsi_for_stoch, stoch_k), stoch_d)

stoch_d_value = ta.sma(stoch_k_value, stoch_d)


stoch_long_ok = not use_stoch_filter or (stoch_k_value < stoch_overbought and stoch_k_value > stoch_oversold)

stoch_short_ok = not use_stoch_filter or (stoch_k_value > stoch_oversold and stoch_k_value < stoch_overbought)


// ═════════════════════════════════════════════════════════════════════════

// 🎯 SIGNAL GENERATION

// ═════════════════════════════════════════════════════════════════════════


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

// LONG Signals (VWAP Bounce)

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

long_daily_touch = show_daily_vwap and daily_touching and bullish_rejection_pattern and close > daily_vwap

long_weekly_touch = show_weekly_vwap and weekly_touching and bullish_rejection_pattern and close > weekly_vwap


long_signal_base = (long_daily_touch or long_weekly_touch) and show_long_signals


// Apply all confluence filters for LONG

long_signal = long_signal_base and

volume_filter_pass and

ichimoku_long_ok and

rsi_long_ok and

stoch_long_ok


// Confirmation logic

long_confirmed = require_confirmation ? long_signal and not long_signal[1] : long_signal


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

// SHORT Signals (VWAP Rejection)

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

short_daily_touch = show_daily_vwap and daily_touching and bearish_rejection_pattern and close < daily_vwap

short_weekly_touch = show_weekly_vwap and weekly_touching and bearish_rejection_pattern and close < weekly_vwap


short_signal_base = (short_daily_touch or short_weekly_touch) and show_short_signals


// Apply all confluence filters for SHORT

short_signal = short_signal_base and

volume_filter_pass and

ichimoku_short_ok and

rsi_short_ok and

stoch_short_ok


// Confirmation logic

short_confirmed = require_confirmation ? short_signal and not short_signal[1] : short_signal


// ═════════════════════════════════════════════════════════════════════════

// 📊 PLOTTING

// ═════════════════════════════════════════════════════════════════════════


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

// Plot VWAP Lines

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

plot(show_daily_vwap ? daily_vwap : na, "Daily VWAP", color=daily_vwap_color, linewidth=daily_vwap_width, style=plot.style_line)

plot(show_weekly_vwap ? weekly_vwap : na, "Weekly VWAP", color=weekly_vwap_color, linewidth=weekly_vwap_width, style=plot.style_line)


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

// Plot Touch Zones (Optional)

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

bgcolor(show_vwap_touch_zones and daily_touching ? color.new(daily_vwap_color, 95) : na, title="Daily Touch Zone")

bgcolor(show_vwap_touch_zones and weekly_touching ? color.new(weekly_vwap_color, 95) : na, title="Weekly Touch Zone")


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

// Plot Signals

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

plotshape(long_confirmed, "LONG Signal", shape.triangleup, location.belowbar, color=color.new(color.lime, 0), size=size.normal, text="LONG\n🚀")

plotshape(short_confirmed, "SHORT Signal", shape.triangledown, location.abovebar, color=color.new(color.red, 0), size=size.normal, text="SHORT\n💥")


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

// Labels with Details

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

if long_confirmed

vwap_type = long_daily_touch ? "Daily" : "Weekly"

pattern_name = is_hammer ? "Hammer" : is_bullish_pin_bar ? "Pin Bar" : "Engulfing"

label_text = "🚀 LONG SETUP\n" +

"VWAP: " + vwap_type + "\n" +

"Pattern: " + pattern_name + "\n" +

"Entry: " + str.tostring(close, "#.##") + "\n" +

"Stop: " + str.tostring(low * 0.9995, "#.##")

label.new(bar_index, low, label_text,

style=label.style_label_up,

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

textcolor=color.white,

size=size.normal)


if short_confirmed

vwap_type = short_daily_touch ? "Daily" : "Weekly"

pattern_name = is_shooting_star ? "Shooting Star" : is_bearish_pin_bar ? "Pin Bar" : "Engulfing"

label_text = "💥 SHORT SETUP\n" +

"VWAP: " + vwap_type + "\n" +

"Pattern: " + pattern_name + "\n" +

"Entry: " + str.tostring(close, "#.##") + "\n" +

"Stop: " + str.tostring(high * 1.0005, "#.##")

label.new(bar_index, high, label_text,

style=label.style_label_down,

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

textcolor=color.white,

size=size.normal)


// ═════════════════════════════════════════════════════════════════════════

// 📋 INFO PANEL

// ═════════════════════════════════════════════════════════════════════════

if show_info_panel and barstate.islast

var table info_table = table.new(position.top_right, 2, 12,

bgcolor=color.new(color.black, 85),

border_width=2,

border_color=color.new(color.gray, 50))

// Header

table.cell(info_table, 0, 0, "NEO VWAP Strategy", text_color=color.yellow, text_size=size.normal, bgcolor=color.new(color.gray, 70))

table.cell(info_table, 1, 0, "Status", text_color=color.yellow, text_size=size.normal, bgcolor=color.new(color.gray, 70))

// Daily VWAP Info

table.cell(info_table, 0, 1, "Daily VWAP", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 1, str.tostring(daily_vwap, "#.##"), text_color=daily_vwap_color, text_size=size.small)

// Weekly VWAP Info

table.cell(info_table, 0, 2, "Weekly VWAP", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 2, str.tostring(weekly_vwap, "#.##"), text_color=weekly_vwap_color, text_size=size.small)

// Current Price

table.cell(info_table, 0, 3, "Current Price", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 3, str.tostring(close, "#.##"), text_color=color.white, text_size=size.small)

// Volume Status

vol_status = volume_spike ? "🔥 High" : "Normal"

vol_color = volume_spike ? color.lime : color.gray

table.cell(info_table, 0, 4, "Volume", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 4, vol_status, text_color=vol_color, text_size=size.small)

// RSI Status

rsi_status = rsi > rsi_overbought ? "Overbought" : rsi < rsi_oversold ? "Oversold" : "Neutral"

rsi_color = rsi > rsi_overbought ? color.red : rsi < rsi_oversold ? color.lime : color.gray

table.cell(info_table, 0, 5, "RSI", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 5, str.tostring(rsi, "#.#") + " (" + rsi_status + ")", text_color=rsi_color, text_size=size.small)

// Stoch Status

stoch_status = stoch_k_value > stoch_overbought ? "Overbought" : stoch_k_value < stoch_oversold ? "Oversold" : "Neutral"

stoch_color = stoch_k_value > stoch_overbought ? color.red : stoch_k_value < stoch_oversold ? color.lime : color.gray

table.cell(info_table, 0, 6, "Stoch RSI", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 6, str.tostring(stoch_k_value, "#.#") + " (" + stoch_status + ")", text_color=stoch_color, text_size=size.small)

// Ichimoku Position

ichi_vs_kijun = close > kijun ? "Above Kijun ✅" : "Below Kijun ❌"

ichi_color = close > kijun ? color.lime : color.red

table.cell(info_table, 0, 7, "vs Kijun", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 7, ichi_vs_kijun, text_color=ichi_color, text_size=size.small)

// Touch Status

touch_status = daily_touching ? "Daily Touch 🎯" : weekly_touching ? "Weekly Touch 🎯" : "No Touch"

touch_color = (daily_touching or weekly_touching) ? color.yellow : color.gray

table.cell(info_table, 0, 8, "VWAP Touch", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 8, touch_status, text_color=touch_color, text_size=size.small)

// Pattern Detection

pattern_detected = bullish_rejection_pattern ? "Bullish 🟢" : bearish_rejection_pattern ? "Bearish 🔴" : "None"

pattern_color = bullish_rejection_pattern ? color.lime : bearish_rejection_pattern ? color.red : color.gray

table.cell(info_table, 0, 9, "Pattern", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 9, pattern_detected, text_color=pattern_color, text_size=size.small)

// Signal Status

signal_status = long_confirmed ? "LONG 🚀" : short_confirmed ? "SHORT 💥" : "Waiting..."

signal_color = long_confirmed ? color.lime : short_confirmed ? color.red : color.gray

table.cell(info_table, 0, 10, "Signal", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 10, signal_status, text_color=signal_color, text_size=size.small, bgcolor=long_confirmed or short_confirmed ? color.new(signal_color, 80) : na)

// Confluence Score

confluence_score = 0

if volume_filter_pass

confluence_score += 1

if ichimoku_long_ok or ichimoku_short_ok

confluence_score += 1

if rsi_long_ok or rsi_short_ok

confluence_score += 1

if stoch_long_ok or stoch_short_ok

confluence_score += 1

confluence_text = str.tostring(confluence_score) + "/4"

confluence_color = confluence_score >= 3 ? color.lime : confluence_score >= 2 ? color.yellow : color.red

table.cell(info_table, 0, 11, "Confluence", text_color=color.white, text_size=size.small)

table.cell(info_table, 1, 11, confluence_text, text_color=confluence_color, text_size=size.small)


// ═════════════════════════════════════════════════════════════════════════

// 🔔 ALERTS

// ═════════════════════════════════════════════════════════════════════════

if show_alerts

if long_confirmed

vwap_type = long_daily_touch ? "Daily" : "Weekly"

alert("🚀 NEO VWAP LONG SIGNAL!\n" +

"VWAP: " + vwap_type + "\n" +

"Price: " + str.tostring(close, "#.##") + "\n" +

"Confluence: Strong ✅",

alert.freq_once_per_bar_close)

if short_confirmed

vwap_type = short_daily_touch ? "Daily" : "Weekly"

alert("💥 NEO VWAP SHORT SIGNAL!\n" +

"VWAP: " + vwap_type + "\n" +

"Price: " + str.tostring(close, "#.##") + "\n" +

"Confluence: Strong ✅",

alert.freq_once_per_bar_close)

OMAF Capital - Résumé des performances

Compilation de 5 paires de trading, Généré le 09/01/2026

  • Résumé Exécutif

  • Par Indicateur

  • Sessions Optimales

  • Détails Complets

clique sur l'image pour agrandir
clique sur l'image pour agrandir
clique sur l'image pour agrandir
clique sur l'image pour agrandir

Nasdaq - Matrice décisionnelle (287 trades)

De: juil2025-jan 2026, Win rate Global: 96.2%, 276W-11L

  • Matrice Décision

  • Décision finale

  • Liste de quelques trades Nasdaq

  • Analyse pertes

Cliquer pour agrandir
Cliquer pour agrandir
cliquer pour agrandir
cliquer pour agrandir
cliquer pour agrandir
cliquer pour agrandir