OverBought & OverSold [SwissAlgo]OverBought & OverSold
Statistical analysis of momentum extremes
----------------------------------------------------------
Purpose
This indicator was built to answer three questions:
Is the current price move statistically extreme? - By comparing current momentum to historical distribution
What is the current market regime? - By combining trend position and momentum direction
Is momentum accelerating or decelerating? - By analyzing weekly momentum shifts
----------------------------------------------------------
What You Can Do With This Indicator
Identify Statistical Extremes
See when price momentum seems to have reached levels that historically preceded reversals
Compare the current Rate of Change to its historical mean and standard deviation
Spot when readings exceed ±1σ, ±2σ, or higher thresholds
Monitor Market Regime/State
Track whether the market seems to be in BULL, WEAK BULL, BEAR, or WEAK BEAR state
Observe potential transitions between regimes as they occur
Understand the relationship between price position and momentum
Assess Momentum Quality
Distinguish between potentially accelerating momentum (lime/red bars) and decelerating momentum (green/maroon bars)
Watch for possible momentum deterioration within established trends
Track weekly momentum patterns that filter out daily noise
Measure Distance from Trend
Monitor how far the price is from its long-term moving average (EMA 350)
Identify when price approaches trend support/resistance
Contextualize current position relative to historical distance patterns
----------------------------------------------------------
Overview
This indicator calculates a volume-weighted Rate of Change (ROC) and displays it with statistical Z-Score bands. It combines ROC analysis with market regime detection using weekly MACD and EMA positioning.
Key Features
Volume-weighted ROC calculation with 5-bar smoothing
Dynamic Z-Score bands (±0.5σ to ±6σ)
Four-state market regime classification
Weekly Stochastic RSI-based histogram coloring
Visual markers for extreme readings
Information table with current statistics
Calculations
Volume-Weighted ROC
The indicator compares two 5-bar volume-weighted average prices separated by the ROC
Length period:
Recent VWAP = Σ(Price × Volume) / Σ(Volume) for last 5 bars
Past VWAP = Σ(Price × Volume) / Σ(Volume) for 5 bars at lookback
ROC = ((Recent VWAP - Past VWAP) / Past VWAP) × 100
Default ROC Length: 30 periods
Why volume-weighted:
Single price points can be affected by temporary spikes
Volume weighting emphasizes legitimate price moves
5-bar averaging reduces single-bar noise
Z-Score Bands
The indicator maintains separate statistical distributions for positive and negative ROC values:
For positive ROC values:
Calculates mean and standard deviation of all positive ROC readings
Plots bands at +0.5σ, +1σ, +2σ, +3σ, +4σ, +5σ, +6σ above the mean
For negative ROC values:
Calculates mean and standard deviation of all negative ROC readings
Plots bands at -0.5σ, -1σ, -2σ, -3σ, -4σ, -5σ, -6σ below the mean
Z-Score formula:
If ROC > 0: Z = (ROC - Positive Mean) / Positive Std Dev
If ROC < 0: Z = (ROC - Negative Mean) / Negative Std Dev
Why separate distributions:
Upward and downward momentum often have different statistical properties
Separate analysis provides more accurate extreme identification
Each side maintains its own mean and volatility characteristics
The ±1σ bands use thicker lines (linewidth=2) as these levels are most frequently tested.
Market Regime States
Four states based on weekly MACD (10, 24, 8) and EMA 350:
BULL
Conditions: Price > EMA 350, Weekly MACD > 0, MACD > Signal, ROC histogram lime
Background: Lime (85% transparency)
Interpretation: Price above long-term trend with accelerating momentum
WEAK BULL
Conditions: Price > EMA 350 AND (MACD < Signal OR ROC histogram green)
Background: Green (95% transparency)
Interpretation: Price above trend, but momentum seems to be decelerating
BEAR
Conditions: Price < EMA 350, Weekly MACD < 0, MACD < Signal, ROC histogram red
Background: Red (85% transparency)
Interpretation: Price below long-term trend with accelerating downward momentum
WEAK BEAR
Conditions: Price < EMA 350 AND (MACD > Signal OR ROC histogram maroon)
Background: Maroon (95% transparency)
Interpretation: Price below trend, but downward momentum seems to be decelerating
NEUTRAL
Conditions: None of the above met
Background: Gray (95% transparency)
Interpretation: Transitional state between regimes
Why weekly MACD:
Filters daily volatility and noise
Provides more stable regime classification
Reduces false regime switches
Histogram Colors
Colors determined by Weekly Stochastic RSI (14, 14, 3, 3):
Lime: ROC > 0 and K > D (rising positive momentum)
Green: ROC > 0 and K < D (falling positive momentum)
Red: ROC < 0 and K < D (falling negative momentum)
Maroon: ROC < 0 and K > D (rising negative momentum)
Why weekly Stochastic RSI:
Shows momentum direction independent of absolute level
Weekly timeframe provides stable readings
K/D crossover indicates momentum shifts
Visual Markers
Red arrows (↓): Display when ROC ≥ +1σ (overbought zone)
Lime arrows (↑): Display when ROC ≤ -0.5σ (oversold zone)
These markers highlight when readings reach statistical extremes.
Information Table
Located at the top-right, displays four rows:
Row 1 - Market State
Shows current regime text (BULL/WEAK BULL/BEAR/WEAK BEAR/NEUTRAL)
Color matches regime state
Row 2 - Current Z-Score
Shows Z-Score value with 2 decimal places
Lime when Z ≤ -0.5 (statistically oversold)
Red when Z ≥ +1 (statistically overbought)
White for values between -0.5 and +1 (normal range)
Adds bullet (●) for extreme values
Row 3 - Price ROC %
Shows current ROC percentage
Lime when positive
Red when negative
Row 4 - Distance % EMA
Shows percentage distance from EMA 350
Calculates Z-score of distance
Red with ● when close to EMA in bull market (|Z| < 0.5)
Lime with ● when close to EMA in bear market (|Z| < 0.5)
Standard colors otherwise (lime when above EMA, red when below)
Why distance matters:
A price approaching EMA 350 in a bull market can signal a support test
Price near EMA 350 in a bear market can signal a resistance test
Z-score of distance shows if the current proximity is statistically unusual
----------------------------------------------------------
Settings
ROC Length (Integer, default: 30, minimum: 1)
Number of periods for ROC lookback
Higher values = slower response, smoother
Lower values = faster response, more sensitive
Source (Source, default: close)
Price data input for calculations
Can use close, open, high, low, hl2, hlc3, ohlc4
Show Info Table (Boolean, default: true)
Toggle table visibility
----------------------------------------------------------
Technical Details
Uses lookahead=barmerge.lookahead_off for all request.security() calls
Accumulates all historical ROC values in arrays for Z-Score calculation
Weekly timeframe data retrieved via request.security() on "1W" resolution
EMA length hardcoded to 350 periods
All plots use Pine Script v6 syntax
Data Requirements
Minimum bars required: ROC Length + 5 bars
Works on any timeframe
Applicable to any instrument with volume data
Historical data used: All available bars on the chart
Display Elements
Plots:
ROC histogram (plotcandle format)
Zero line (horizontal line)
14 standard deviation lines (7 positive, 7 negative)
13 filled regions between bands
14 sigma labels (displayed on last bar only)
Extreme zone markers (arrows)
Color Scheme:
Positive bands: Lime with varying transparency
Negative bands: Red with varying transparency
Fills: Green (positive) and Red (negative) with high transparency
Bands beyond 3σ use increased transparency (85%, 90%, 93%)
Visual Hierarchy
±1σ bands: Thicker lines (most important levels)
±0.5σ to ±3σ: Standard visibility
±4σ to ±6σ: Faded (visible only during extreme events)
Notes
This is an oscillator-type indicator (overlay=false)
Displays in a separate pane below the price chart
Does not generate automatic buy/sell signals
Does not include alert conditions
Does not repaint (all calculations use confirmed data)
Limitations
Requires sufficient historical data for meaningful statistics
Z-Score bands recalculate as new data accumulates
Market regime requires weekly MACD calculation (may show neutral on insufficient data)
Volume-weighting requires volume data availability
EMA 350 is fixed (not adjustable via inputs)
Statistical extremes do not guarantee reversals
Past distribution patterns do not predict future behavior
----------------------------------------------------------
Disclaimer
Educational Purpose Only
This indicator is provided for educational and informational purposes only. It is a technical analysis tool that displays statistical calculations and historical data patterns.
Not Financial Advice
This indicator does not provide financial, investment, trading, or any other type of professional advice. All content and calculations are for informational purposes only and should not be construed as a recommendation to buy, sell, or hold any security or financial instrument.
No Guarantee of Results
Past performance and historical statistical patterns do not guarantee future results. Markets are inherently unpredictable, and statistical analysis cannot predict future price movements with certainty. The appearance of statistical extremes does not ensure that reversals will occur.
User Responsibility
Users of this indicator are solely responsible for their own trading and investment decisions. You should conduct your own research and due diligence and consult with qualified financial professionals before making any investment decisions.
Risk Warning
Trading and investing in financial markets involves substantial risk of loss. You should only trade with capital you can afford to lose. The use of technical indicators does not eliminate market risk.
No Warranty
This indicator is provided "as is" without warranty of any kind, either expressed or implied, including but not limited to warranties of accuracy, reliability, or fitness for a particular purpose. The author makes no guarantees regarding the accuracy of calculations or the absence of errors.
Limitation of Liability
The author and publisher of this indicator shall not be held liable for any losses, damages, or claims arising from the use or inability to use this indicator, including but not limited to trading losses, lost profits, or any other financial losses.
Data Accuracy
While efforts have been made to ensure calculation accuracy, users should independently verify all outputs. The indicator relies on data provided by TradingView, and the author is not responsible for data feed errors or interruptions.
User Agreement
By using this indicator, you acknowledge that you have read, understood, and agree to this disclaimer. If you do not agree with any part of this disclaimer, you should not use this indicator.
نماذج فنيه
Candle Body RatioThis indicator is designed to calculate the percentage of the upper wick, the body, and the lower wick of the candle over which your cursor is positioned.
Traderei SessionsTraderei Sessions shows the previous daily H/L + previous weekly H + L, daily open from the current day, the H/L from Asia/London/NY Session, including the 50% Level for Premium or Discount Price.
VPOC for each Session. VPOC do not work on FX ! only Crypto + Gold !
2 EMAs and 1 SMA, + 1 additional EMA/SMA.
default settings for EMA 20/50, SMA 200
all lines, labels can be toggled
Victoria Smart Overlay – EMA1/SMA3/SMA1Core Components:
EMA 1 (Micro): fastest trend trigger
SMA 3 (Short): trend confirmation
SMA 1 (Base): structure guide
Conditions and Actions:
EMA1 crosses above SMA3 → Uptrend starting → Consider Calls / Long
EMA1 crosses below SMA3 → Downtrend starting → Consider Puts / Short
Price hugging SMA1 → Neutral zone → Wait for breakout
Background Green → Confirmed Uptrend → Stay long or scalp Calls
Background Red → Confirmed Downtrend → Stay short or scalp Puts
Micro EMA + Heikin Ashi (Refined Swing Map)
Purpose: Filters fake moves and identifies strong momentum runs.
Use on 5m / 15m charts for intraday clarity.
Signals and Actions:
EMA1 > EMA3 > EMA5 → Micro-uptrend forming → Enter / hold Calls
EMA1 < EMA3 < EMA5 → Micro-downtrend forming → Enter / hold Puts
EMA lines tangled → No conviction → Wait
200-Day SMA rising → Macro bullish → Favor long trades
200-Day SMA falling → Macro bearish → Favor shorts
Victoria RSI Hybrid Pro – Momentum + Volume + DivergenceConditions and Actions:
RSI > 50 → Bullish regime → Consider Calls
RSI < 50 → Bearish regime → Consider Puts
RSI crosses up → Momentum shift up → Buy confirmation
RSI crosses down → Momentum shift down → Sell confirmation
RSI > 70 → Overbought → Take profits
RSI < 30 → Oversold → Watch for reversal
Bullish divergence → Hidden upward momentum → Reversal watch
Bearish divergence → Hidden downward momentum → Reversal watch
4. Multi-Indicator Confirmation Rules
Combine signals from EMA, SMA, RSI, and Volume to identify high-confidence trades.
Rules:
Triple Green → EMA1>SMA3, RSI>50, Volume Up → Buy Calls / Shares
Triple Red → EMA1 70 + Weak Volume → Exit Calls early
EMA1 flips direction + Strong Volume → Confirm bias immediately
RSI on 1H agrees with main chart → Trend continuation likely
6. Timeframes
Scalps: 1m–5m
Next-Day Options: 15m–1H
Swings: 4H–1D
7. Key Mindset Rules
Patience beats prediction. Wait for confirmations.
Volume confirms conviction, not direction.
If RSI and Overlay disagree → No trade.
Only act when 2 of 3 systems (EMA, RSI, Volume) align.
✅ Heikin Ashi Trend Reversal Confirmedusing the heikin ashi trend candles, this indicator can attempt to give buy and sell signals
DAX ORB Ultimate - ALGO Suite//@version=5
indicator("DAX ORB Ultimate - ALGO Suite", overlay=true, max_labels_count=200, max_lines_count=100)
// ═══════════════════════════════════════════════════════════════════════════════
// DAX OPENING RANGE BREAKOUT - ULTIMATE EDITION
// Real-time ORB building | Multi-timeframe support | Key levels with bias
// Works on ANY timeframe - uses M1 data for ORB construction
// ═══════════════════════════════════════════════════════════════════════════════
// ════════════════════════ INPUTS ════════════════════════
orb_start_h = input.int(7, "Start Hour (UTC)", minval=0, maxval=23, group="ORB Settings")
orb_start_m = input.int(40, "Start Minute", minval=0, maxval=59, group="ORB Settings")
orb_end_h = input.int(8, "End Hour (UTC)", minval=0, maxval=23, group="ORB Settings")
orb_end_m = input.int(0, "End Minute", minval=0, maxval=59, group="ORB Settings")
exclude_wicks = input.bool(true, "Exclude Wicks", group="ORB Settings")
close_hour = input.int(16, "Market Close Hour", minval=0, maxval=23, group="ORB Settings")
use_tf = input.bool(true, "1. Trend Following", group="Strategies")
use_mr = input.bool(true, "2. Mean Reversion", group="Strategies")
use_sa = input.bool(true, "3. Statistical Arb", group="Strategies")
use_mm = input.bool(true, "4. Market Making", group="Strategies")
use_ba = input.bool(true, "5. Basis Arb", group="Strategies")
use_ema = input.bool(true, "EMA Filter", group="Technical Filters")
use_rsi = input.bool(true, "RSI Filter", group="Technical Filters")
use_macd = input.bool(true, "MACD Filter", group="Technical Filters")
use_vol = input.bool(true, "Volume Filter", group="Technical Filters")
use_bb = input.bool(true, "Bollinger Filter", group="Technical Filters")
use_fixed = input.bool(false, "Fixed SL/TP", group="Risk Management")
fixed_sl = input.float(50, "Fixed SL Points", minval=10, group="Risk Management")
fixed_tp = input.float(150, "Fixed TP Points", minval=10, group="Risk Management")
atr_sl = input.float(2.0, "ATR SL Mult", minval=0.5, group="Risk Management")
atr_tp = input.float(3.0, "ATR TP Mult", minval=0.5, group="Risk Management")
min_rr = input.float(2.0, "Min R:R", minval=1.0, group="Risk Management")
show_dash = input.bool(true, "Show Dashboard", group="Display")
show_lines = input.bool(true, "Show Lines", group="Display")
show_levels = input.bool(true, "Show Key Levels", group="Display")
// ════════════════════════ FUNCTIONS ════════════════════════
is_orb_period(_h, _m) =>
start = orb_start_h * 60 + orb_start_m
end = orb_end_h * 60 + orb_end_m
curr = _h * 60 + _m
curr >= start and curr < end
orb_ended(_h, _m) =>
end = orb_end_h * 60 + orb_end_m
curr = _h * 60 + _m
curr == end
is_market_open() =>
h = hour(time)
h >= orb_start_h and h <= close_hour
// ════════════════════════ DATA GATHERING (M1) ════════════════════════
// Get M1 data for ORB construction (works on ANY chart timeframe)
= request.security(syminfo.tickerid, "1", , barmerge.gaps_off, barmerge.lookahead_off)
// Daily data
d_high = request.security(syminfo.tickerid, "D", high, barmerge.gaps_off, barmerge.lookahead_on)
d_low = request.security(syminfo.tickerid, "D", low, barmerge.gaps_off, barmerge.lookahead_on)
d_open = request.security(syminfo.tickerid, "D", open, barmerge.gaps_off, barmerge.lookahead_on)
// Current day high/low (intraday)
var float today_high = na
var float today_low = na
var float prev_day_high = na
var float prev_day_low = na
var float yest_size = 0
if ta.change(time("D")) != 0
prev_day_high := d_high
prev_day_low := d_low
yest_size := d_high - d_low
today_high := high
today_low := low
else
today_high := math.max(na(today_high) ? high : today_high, high)
today_low := math.min(na(today_low) ? low : today_low, low)
// ════════════════════════ ORB CONSTRUCTION (REAL-TIME) ════════════════════════
var float orb_h = na
var float orb_l = na
var bool orb_ready = false
var float orb_building_h = na
var float orb_building_l = na
var bool is_building = false
// Get M1 bar time components
m1_hour = hour(m1_time)
m1_minute = minute(m1_time)
// Reset daily
if ta.change(time("D")) != 0
orb_h := na
orb_l := na
orb_ready := false
orb_building_h := na
orb_building_l := na
is_building := false
// Build ORB using M1 data
if is_orb_period(m1_hour, m1_minute) and not orb_ready
is_building := true
val_h = exclude_wicks ? m1_close : m1_high
val_l = exclude_wicks ? m1_close : m1_low
if na(orb_building_h)
orb_building_h := val_h
orb_building_l := val_l
else
orb_building_h := math.max(orb_building_h, val_h)
orb_building_l := math.min(orb_building_l, val_l)
// FIX #1: Set is_building to false when NOT in ORB period anymore
if not is_orb_period(m1_hour, m1_minute) and is_building and not orb_ready
is_building := false
// Finalize ORB when period ends
if orb_ended(m1_hour, m1_minute) and not orb_ready
orb_h := orb_building_h
orb_l := orb_building_l
orb_ready := true
is_building := false
// Display building values in real-time
current_orb_h = is_building ? orb_building_h : orb_h
current_orb_l = is_building ? orb_building_l : orb_l
// ════════════════════════ INDICATORS ════════════════════════
ema9 = ta.ema(close, 9)
ema21 = ta.ema(close, 21)
ema50 = ta.ema(close, 50)
rsi = ta.rsi(close, 14)
= ta.macd(close, 12, 26, 9)
= ta.bb(close, 20, 2)
atr = ta.atr(14)
vol_ma = ta.sma(volume, 20)
// ════════════════════════ STRATEGY SIGNALS ════════════════════════
// 1. Trend Following
tf_short = ta.sma(close, 10)
tf_long = ta.sma(close, 30)
tf_bull = tf_short > tf_long
tf_bear = tf_short < tf_long
// 2. Mean Reversion
mr_mean = ta.sma(close, 20)
mr_dev = (close - mr_mean) / mr_mean * 100
mr_bull = mr_dev <= -0.5
mr_bear = mr_dev >= 0.5
// 3. Statistical Arb
sa_mean = ta.sma(close, 120)
sa_std = ta.stdev(close, 120)
sa_z = sa_std > 0 ? (close - sa_mean) / sa_std : 0
var string sa_st = "flat"
if sa_st == "flat"
if sa_z <= -2.0
sa_st := "long"
else if sa_z >= 2.0
sa_st := "short"
else if math.abs(sa_z) <= 0.5 or math.abs(sa_z) >= 4.0
sa_st := "flat"
sa_bull = sa_st == "long"
sa_bear = sa_st == "short"
// 4. Market Making
mm_spread = (high - low) / close * 100
mm_mid = (high + low) / 2
mm_bull = close < mm_mid and mm_spread >= 0.5
mm_bear = close > mm_mid and mm_spread >= 0.5
// 5. Basis Arb
ba_fair = ta.sma(close, 50)
ba_bps = ba_fair != 0 ? (close - ba_fair) / ba_fair * 10000 : 0
ba_bull = ba_bps <= -8.0
ba_bear = ba_bps >= 8.0
// Vote counting
bull_v = 0
bear_v = 0
if use_tf
bull_v := bull_v + (tf_bull ? 1 : 0)
bear_v := bear_v + (tf_bear ? 1 : 0)
if use_mr
bull_v := bull_v + (mr_bull ? 1 : 0)
bear_v := bear_v + (mr_bear ? 1 : 0)
if use_sa
bull_v := bull_v + (sa_bull ? 1 : 0)
bear_v := bear_v + (sa_bear ? 1 : 0)
if use_mm
bull_v := bull_v + (mm_bull ? 1 : 0)
bear_v := bear_v + (mm_bear ? 1 : 0)
if use_ba
bull_v := bull_v + (ba_bull ? 1 : 0)
bear_v := bear_v + (ba_bear ? 1 : 0)
// Technical filters - Simplified scoring system
ema_ok_b = not use_ema or (ema9 > ema21 and close > ema50)
ema_ok_s = not use_ema or (ema9 < ema21 and close < ema50)
rsi_ok_b = not use_rsi or (rsi > 40 and rsi < 80) // More lenient
rsi_ok_s = not use_rsi or (rsi < 60 and rsi > 20) // More lenient
macd_ok_b = not use_macd or macd > sig
macd_ok_s = not use_macd or macd < sig
vol_ok = not use_vol or volume > vol_ma * 1.2 // More lenient
bb_ok_b = not use_bb or close > bb_mid
bb_ok_s = not use_bb or close < bb_mid
// Technical score (need at least 2 out of 5 filters)
tech_score_b = (ema_ok_b ? 1 : 0) + (rsi_ok_b ? 1 : 0) + (macd_ok_b ? 1 : 0) + (bb_ok_b ? 1 : 0) + (vol_ok ? 1 : 0)
tech_score_s = (ema_ok_s ? 1 : 0) + (rsi_ok_s ? 1 : 0) + (macd_ok_s ? 1 : 0) + (bb_ok_s ? 1 : 0) + (vol_ok ? 1 : 0)
tech_bull = tech_score_b >= 2
tech_bear = tech_score_s >= 2
// Breakout - SIMPLIFIED (just need close above/below ORB)
brk_bull = orb_ready and close > current_orb_h
brk_bear = orb_ready and close < current_orb_l
// Consensus - At least 2 strategies agree (not majority)
total_st = (use_tf ? 1 : 0) + (use_mr ? 1 : 0) + (use_sa ? 1 : 0) + (use_mm ? 1 : 0) + (use_ba ? 1 : 0)
consensus_b = bull_v >= 2
consensus_s = bear_v >= 2
// Final signals - MUCH MORE LENIENT
daily_ok = yest_size >= 50 // Reduced from 100
buy = brk_bull and consensus_b and tech_bull and is_market_open()
sell = brk_bear and consensus_s and tech_bear and is_market_open()
// ════════════════════════ SL/TP ════════════════════════
// IMMEDIATE SL/TP LEVELS - Calculated as soon as ORB is ready (at 8:00)
var float long_entry = na
var float long_sl = na
var float long_tp = na
var float short_entry = na
var float short_sl = na
var float short_tp = na
// Calculate potential levels immediately when ORB is ready
if orb_ready and not na(orb_h) and not na(orb_l)
// Long scenario: Entry at ORB high breakout
long_entry := orb_h
long_sl := use_fixed ? long_entry - fixed_sl : long_entry - atr * atr_sl
long_tp := use_fixed ? long_entry + fixed_tp : long_entry + atr * atr_tp
// Short scenario: Entry at ORB low breakout
short_entry := orb_l
short_sl := use_fixed ? short_entry + fixed_sl : short_entry + atr * atr_sl
short_tp := use_fixed ? short_entry - fixed_tp : short_entry - atr * atr_tp
// Signal-based entry tracking (for dashboard and alerts)
var float buy_entry = na
var float buy_sl = na
var float buy_tp = na
var float sell_entry = na
var float sell_sl = na
var float sell_tp = na
if buy
buy_entry := close
buy_sl := use_fixed ? buy_entry - fixed_sl : buy_entry - atr * atr_sl
buy_tp := use_fixed ? buy_entry + fixed_tp : buy_entry + atr * atr_tp
if sell
sell_entry := close
sell_sl := use_fixed ? sell_entry + fixed_sl : sell_entry + atr * atr_sl
sell_tp := use_fixed ? sell_entry - fixed_tp : sell_entry - atr * atr_tp
buy_rr = not na(buy_entry) ? (buy_tp - buy_entry) / (buy_entry - buy_sl) : 0
sell_rr = not na(sell_entry) ? (sell_entry - sell_tp) / (sell_sl - sell_entry) : 0
buy_final = buy and buy_rr >= min_rr
sell_final = sell and sell_rr >= min_rr
// ════════════════════════ TRAILING STOPS ════════════════════════
// Trailing Stop Loss and Take Profit Management
var float trailing_sl_long = na
var float trailing_sl_short = na
var float trailing_tp_long = na
var float trailing_tp_short = na
var bool in_long = false
var bool in_short = false
var float highest_since_entry = na
var float lowest_since_entry = na
// Enter long position
if buy_final and not in_long
in_long := true
in_short := false
trailing_sl_long := buy_sl
trailing_tp_long := buy_tp
highest_since_entry := close
// Enter short position
if sell_final and not in_short
in_short := true
in_long := false
trailing_sl_short := sell_sl
trailing_tp_short := sell_tp
lowest_since_entry := close
// Update trailing stops for LONG
if in_long
// Track highest price since entry
highest_since_entry := math.max(highest_since_entry, high)
// Trail stop loss (moves up as price moves up)
// When price moves 1 ATR in profit, move SL to breakeven
// When price moves 2 ATR in profit, move SL to +1 ATR
profit_atr = (highest_since_entry - buy_entry) / atr
if profit_atr >= 2.0
trailing_sl_long := math.max(trailing_sl_long, buy_entry + atr * 1.0)
else if profit_atr >= 1.0
trailing_sl_long := math.max(trailing_sl_long, buy_entry)
// Smart trailing TP - extends TP if strong momentum
if highest_since_entry > trailing_tp_long * 0.9 and rsi > 60 // Within 10% of TP and strong momentum
trailing_tp_long := trailing_tp_long + atr * 0.5 // Extend TP
// Exit conditions
if close <= trailing_sl_long or close >= trailing_tp_long
in_long := false
trailing_sl_long := na
trailing_tp_long := na
highest_since_entry := na
// Update trailing stops for SHORT
if in_short
// Track lowest price since entry
lowest_since_entry := math.min(lowest_since_entry, low)
// Trail stop loss (moves down as price moves down)
profit_atr = (sell_entry - lowest_since_entry) / atr
if profit_atr >= 2.0
trailing_sl_short := math.min(trailing_sl_short, sell_entry - atr * 1.0)
else if profit_atr >= 1.0
trailing_sl_short := math.min(trailing_sl_short, sell_entry)
// Smart trailing TP - extends TP if strong momentum
if lowest_since_entry < trailing_tp_short * 1.1 and rsi < 40 // Within 10% of TP and strong momentum
trailing_tp_short := trailing_tp_short - atr * 0.5 // Extend TP
// Exit conditions
if close >= trailing_sl_short or close <= trailing_tp_short
in_short := false
trailing_sl_short := na
trailing_tp_short := na
lowest_since_entry := na
// ════════════════════════ ANALYTICS ════════════════════════
prob_strat = total_st > 0 ? math.max(bull_v, bear_v) / total_st * 100 : 50
prob_tech = (tech_bull or tech_bear) ? 75 : 35
prob_vol = vol_ok ? 85 : 50
prob_daily = daily_ok ? 85 : 30
prob_orb = orb_ready ? 80 : 20
probability = prob_strat * 0.3 + prob_tech * 0.25 + prob_vol * 0.15 + prob_daily * 0.15 + prob_orb * 0.15
dir_score = 0
dir_score := dir_score + (ema9 > ema21 ? 2 : -2)
dir_score := dir_score + (tf_bull ? 2 : -2)
dir_score := dir_score + (macd > sig ? 1 : -1)
dir_score := dir_score + (rsi > 50 ? 1 : -1)
direction = dir_score >= 2 ? "STRONG BULL" : (dir_score > 0 ? "BULL" : (dir_score <= -2 ? "STRONG BEAR" : (dir_score < 0 ? "BEAR" : "NEUTRAL")))
clean_trend = math.abs(ema9 - ema21) / close * 100
clean_noise = atr / close * 100
clean_struct = close > ema9 and close > ema21 and close > ema50 or close < ema9 and close < ema21 and close < ema50
clean_score = (clean_trend > 0.5 ? 30 : 10) + (clean_noise < 1.5 ? 30 : 10) + (clean_struct ? 40 : 10)
quality = clean_score >= 70 ? "CLEAN" : (clean_score >= 50 ? "GOOD" : (clean_score >= 30 ? "OK" : "CHOPPY"))
mom = ta.mom(close, 10)
mom_str = math.abs(mom) / close * 100
vol_rat = atr / ta.sma(atr, 20)
movement = buy_final or sell_final ? (mom_str > 0.8 and vol_rat > 1.3 ? "STRONG" : (mom_str > 0.5 ? "MODERATE" : "GRADUAL")) : "WAIT"
ok_score = (daily_ok ? 25 : 0) + (orb_ready ? 25 : 0) + (is_market_open() ? 20 : 0) + (clean_score >= 50 ? 20 : 5) + (probability >= 60 ? 10 : 0)
ok_trade = ok_score >= 65
// ════════════════════════ KEY LEVELS WITH BIAS ════════════════════════
// Calculate potential reaction levels with directional bias
var float key_levels = array.new_float(0)
var string key_bias = array.new_string(0)
if barstate.islast and show_levels
array.clear(key_levels)
array.clear(key_bias)
// Add levels with bias
if not na(current_orb_h)
array.push(key_levels, current_orb_h)
array.push(key_bias, consensus_b ? "BULL BREAK" : "RESISTANCE")
if not na(current_orb_l)
array.push(key_levels, current_orb_l)
array.push(key_bias, consensus_s ? "BEAR BREAK" : "SUPPORT")
if not na(prev_day_high)
array.push(key_levels, prev_day_high)
bias_pdh = close > prev_day_high ? "BULLISH" : (close < prev_day_high and close > prev_day_high * 0.995 ? "WATCH" : "RESIST")
array.push(key_bias, bias_pdh)
if not na(prev_day_low)
array.push(key_levels, prev_day_low)
bias_pdl = close < prev_day_low ? "BEARISH" : (close > prev_day_low and close < prev_day_low * 1.005 ? "WATCH" : "SUPPORT")
array.push(key_bias, bias_pdl)
if not na(today_high)
array.push(key_levels, today_high)
array.push(key_bias, "TODAY HIGH")
if not na(today_low)
array.push(key_levels, today_low)
array.push(key_bias, "TODAY LOW")
// Add EMA50 as dynamic level
array.push(key_levels, ema50)
ema_bias = close > ema50 ? "BULL SUPPORT" : "BEAR RESIST"
array.push(key_bias, ema_bias)
// ════════════════════════ VISUALS ════════════════════════
// Previous day lines
plot(show_lines ? prev_day_high : na, "Prev Day H", color.new(color.yellow, 0), 1, plot.style_line)
plot(show_lines ? prev_day_low : na, "Prev Day L", color.new(color.orange, 0), 1, plot.style_line)
// Current day high/low
plot(show_lines ? today_high : na, "Today High", color.new(color.lime, 40), 2, plot.style_circles)
plot(show_lines ? today_low : na, "Today Low", color.new(color.red, 40), 2, plot.style_circles)
// ORB lines (show building values in real-time with separate plots)
// Building phase - circles (orange during building)
plot(show_lines and is_building and not na(current_orb_h) ? current_orb_h : na, "ORB High Building", color.new(color.orange, 30), 3, plot.style_circles)
plot(show_lines and is_building and not na(current_orb_l) ? current_orb_l : na, "ORB Low Building", color.new(color.orange, 30), 3, plot.style_circles)
// Ready phase - ULTRA BRIGHT solid lines
plot(show_lines and not is_building and not na(current_orb_h) ? current_orb_h : na, "ORB High Ready", color.new(color.aqua, 0), 4, plot.style_line)
plot(show_lines and not is_building and not na(current_orb_l) ? current_orb_l : na, "ORB Low Ready", color.new(color.aqua, 0), 4, plot.style_line)
// ORB zone fill
p1 = plot(not na(current_orb_h) ? current_orb_h : na, display=display.none)
p2 = plot(not na(current_orb_l) ? current_orb_l : na, display=display.none)
fill_color = is_building ? color.new(color.blue, 93) : color.new(color.blue, 88)
fill(p1, p2, fill_color, title="ORB Zone")
// FIX #2: Draw ORB rectangle box ONLY ONCE when ready (use var to track if already drawn)
var box orb_box = na
var int orb_start_bar = na
var bool orb_box_drawn = false
// Reset box drawn flag on new day
if ta.change(time("D")) != 0
orb_box_drawn := false
// Capture the bar when ORB becomes ready
if orb_ready and not orb_ready
orb_start_bar := bar_index
orb_box_drawn := false // Allow new box to be drawn
// Draw box ONLY ONCE when ORB first becomes ready
if orb_ready and not orb_box_drawn and not na(orb_h) and not na(orb_l) and show_lines
if not na(orb_box)
box.delete(orb_box)
// Ultra clear rectangle with thick bright borders
box_color = color.new(color.aqua, 85) // Bright aqua fill
border_color = color.new(color.aqua, 0) // Solid bright aqua border
orb_box := box.new(orb_start_bar, orb_h, bar_index + 50, orb_l,
border_color=border_color,
border_width=3, // Thicker border
bgcolor=box_color,
extend=extend.right,
text="ORB ZONE",
text_size=size.normal, // Larger text
text_color=color.new(color.aqua, 0)) // Bright text
orb_box_drawn := true
// Update box right edge on each bar (without creating new box)
if orb_box_drawn and not na(orb_box) and show_lines
box.set_right(orb_box, bar_index)
// EMAs
plot(use_ema ? ema9 : na, "EMA9", color.new(color.blue, 20), 1)
plot(use_ema ? ema21 : na, "EMA21", color.new(color.orange, 20), 1)
plot(use_ema ? ema50 : na, "EMA50", color.new(color.purple, 30), 2)
// Signals
plotshape(buy_final, "BUY", shape.triangleup, location.belowbar, color.new(color.lime, 0), size=size.small, text="BUY")
plotshape(sell_final, "SELL", shape.triangledown, location.abovebar, color.new(color.red, 0), size=size.small, text="SELL")
// Exit signals
plotshape(in_long and not in_long, "EXIT LONG", shape.xcross, location.abovebar, color.new(color.orange, 0), size=size.tiny, text="EXIT")
plotshape(in_short and not in_short, "EXIT SHORT", shape.xcross, location.belowbar, color.new(color.orange, 0), size=size.tiny, text="EXIT")
// Trailing stop lines
plot(in_long and not na(trailing_sl_long) ? trailing_sl_long : na, "Trail SL Long", color.new(color.red, 0), 2, plot.style_cross)
plot(in_long and not na(trailing_tp_long) ? trailing_tp_long : na, "Trail TP Long", color.new(color.lime, 0), 2, plot.style_cross)
plot(in_short and not na(trailing_sl_short) ? trailing_sl_short : na, "Trail SL Short", color.new(color.red, 0), 2, plot.style_cross)
plot(in_short and not na(trailing_tp_short) ? trailing_tp_short : na, "Trail TP Short", color.new(color.lime, 0), 2, plot.style_cross)
// FIX #3: IMMEDIATE SL/TP LINES - Draw ONLY ONCE when ORB is ready
var line long_sl_ln = na
var line long_tp_ln = na
var line short_sl_ln = na
var line short_tp_ln = na
var label long_sl_lbl = na
var label long_tp_lbl = na
var label short_sl_lbl = na
var label short_tp_lbl = na
var bool sltp_lines_drawn = false
// Reset lines drawn flag on new day
if ta.change(time("D")) != 0
sltp_lines_drawn := false
// Draw lines ONLY ONCE when ORB first becomes ready
if orb_ready and not orb_ready and show_lines
sltp_lines_drawn := false // Allow new lines to be drawn
if orb_ready and not sltp_lines_drawn and show_lines
// Delete old lines
if not na(long_sl_ln)
line.delete(long_sl_ln)
line.delete(long_tp_ln)
line.delete(short_sl_ln)
line.delete(short_tp_ln)
label.delete(long_sl_lbl)
label.delete(long_tp_lbl)
label.delete(short_sl_lbl)
label.delete(short_tp_lbl)
// LONG scenario (green - bullish breakout above ORB high)
if not na(long_sl) and not na(long_tp)
long_sl_ln := line.new(bar_index, long_sl, bar_index + 100, long_sl, color=color.new(color.red, 0), width=2, style=line.style_solid, extend=extend.right)
long_tp_ln := line.new(bar_index, long_tp, bar_index + 100, long_tp, color=color.new(color.lime, 0), width=2, style=line.style_solid, extend=extend.right)
long_sl_lbl := label.new(bar_index, long_sl, "LONG SL: " + str.tostring(long_sl, "#.##"), style=label.style_label_left, color=color.new(color.red, 0), textcolor=color.white, size=size.small)
long_tp_lbl := label.new(bar_index, long_tp, "LONG TP: " + str.tostring(long_tp, "#.##"), style=label.style_label_left, color=color.new(color.lime, 0), textcolor=color.black, size=size.small)
// SHORT scenario (red - bearish breakout below ORB low)
if not na(short_sl) and not na(short_tp)
short_sl_ln := line.new(bar_index, short_sl, bar_index + 100, short_sl, color=color.new(color.red, 0), width=2, style=line.style_solid, extend=extend.right)
short_tp_ln := line.new(bar_index, short_tp, bar_index + 100, short_tp, color=color.new(color.lime, 0), width=2, style=line.style_solid, extend=extend.right)
short_sl_lbl := label.new(bar_index, short_sl, "SHORT SL: " + str.tostring(short_sl, "#.##"), style=label.style_label_left, color=color.new(color.red, 0), textcolor=color.white, size=size.small)
short_tp_lbl := label.new(bar_index, short_tp, "SHORT TP: " + str.tostring(short_tp, "#.##"), style=label.style_label_left, color=color.new(color.lime, 0), textcolor=color.black, size=size.small)
sltp_lines_drawn := true
// FIX #4: Key level labels - Track and delete old labels to prevent duplication
var label key_level_labels = array.new_label(0)
// Delete all old key level labels
if array.size(key_level_labels) > 0
for i = 0 to array.size(key_level_labels) - 1
label.delete(array.get(key_level_labels, i))
array.clear(key_level_labels)
// Create key level labels only on last bar
if barstate.islast and show_levels and array.size(key_levels) > 0
for i = 0 to array.size(key_levels) - 1
lvl = array.get(key_levels, i)
bias = array.get(key_bias, i)
// Color based on bias
lbl_color = str.contains(bias, "BULL") ? color.new(color.green, 70) : (str.contains(bias, "BEAR") ? color.new(color.red, 70) : (str.contains(bias, "SUPPORT") ? color.new(color.blue, 70) : (str.contains(bias, "RESIST") ? color.new(color.orange, 70) : color.new(color.gray, 70))))
txt_color = str.contains(bias, "BULL") ? color.green : (str.contains(bias, "BEAR") ? color.red : (str.contains(bias, "SUPPORT") ? color.blue : (str.contains(bias, "RESIST") ? color.orange : color.gray)))
new_lbl = label.new(bar_index + 2, lvl, str.tostring(lvl, "#.##") + " " + bias, style=label.style_label_left, color=lbl_color, textcolor=txt_color, size=size.tiny, textalign=text.align_left)
array.push(key_level_labels, new_lbl)
// FIX #5: Compact chart info labels - Track and delete to prevent duplication
var label prob_label = na
var label dir_label = na
if barstate.islast and show_lines
// Delete old labels
if not na(prob_label)
label.delete(prob_label)
if not na(dir_label)
label.delete(dir_label)
// Create new labels
prob_c = probability >= 70 ? color.green : (probability >= 50 ? color.yellow : color.red)
prob_label := label.new(bar_index, high + atr * 1.2, str.tostring(probability, "#") + "%", style=label.style_none, textcolor=prob_c, size=size.small)
dir_c = str.contains(direction, "BULL") ? color.green : (str.contains(direction, "BEAR") ? color.red : color.gray)
dir_label := label.new(bar_index, high + atr * 2, direction, style=label.style_none, textcolor=dir_c, size=size.tiny)
// ════════════════════════ DASHBOARD ════════════════════════
var table dash = table.new(position.top_right, 2, 20, bgcolor=color.new(color.black, 5), border_width=1, border_color=color.new(color.gray, 60))
if barstate.islast and show_dash
r = 0
// Header
table.cell(dash, 0, r, "DAX ORB ULTIMATE", text_color=color.white, bgcolor=color.new(color.blue, 30), text_size=size.small)
table.cell(dash, 1, r, timeframe.period, text_color=color.yellow, bgcolor=color.new(color.blue, 30), text_size=size.tiny)
// Current Day
r += 1
table.cell(dash, 0, r, "TODAY H/L", text_color=color.aqua, text_size=size.tiny)
table.cell(dash, 1, r, "", text_color=color.white)
r += 1
table.cell(dash, 0, r, "High", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(today_high, "#.##"), text_color=color.lime, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "Low", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(today_low, "#.##"), text_color=color.red, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "Range", text_color=color.gray, text_size=size.tiny)
today_range = today_high - today_low
table.cell(dash, 1, r, str.tostring(today_range, "#") + "p", text_color=color.aqua, text_size=size.tiny)
// Previous Day
r += 1
table.cell(dash, 0, r, "PREV H/L", text_color=color.aqua, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(yest_size, "#") + "p", text_color=daily_ok ? color.lime : color.red, text_size=size.tiny)
// ORB Status with real-time values
r += 1
table.cell(dash, 0, r, "ORB 7:40-8:00", text_color=color.aqua, text_size=size.tiny)
orb_status = is_building ? "BUILDING" : (orb_ready ? "READY" : "WAIT")
orb_clr = is_building ? color.orange : (orb_ready ? color.lime : color.gray)
table.cell(dash, 1, r, orb_status, text_color=orb_clr, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "High", text_color=color.gray, text_size=size.tiny)
orb_h_txt = not na(current_orb_h) ? str.tostring(current_orb_h, "#.##") : "---"
table.cell(dash, 1, r, orb_h_txt, text_color=is_building ? color.orange : color.green, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "Low", text_color=color.gray, text_size=size.tiny)
orb_l_txt = not na(current_orb_l) ? str.tostring(current_orb_l, "#.##") : "---"
table.cell(dash, 1, r, orb_l_txt, text_color=is_building ? color.orange : color.red, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "Size", text_color=color.gray, text_size=size.tiny)
orb_size = not na(current_orb_h) and not na(current_orb_l) ? current_orb_h - current_orb_l : 0
table.cell(dash, 1, r, str.tostring(orb_size, "#") + "p", text_color=color.yellow, text_size=size.tiny)
// Strategies
r += 1
table.cell(dash, 0, r, "STRATEGIES", text_color=color.aqua, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(bull_v) + "B " + str.tostring(bear_v) + "S", text_color=color.yellow, text_size=size.tiny)
// Analytics
r += 1
table.cell(dash, 0, r, "PROBABILITY", text_color=color.white, bgcolor=color.new(color.purple, 70), text_size=size.small)
prob_c = probability >= 70 ? color.lime : (probability >= 50 ? color.yellow : color.red)
table.cell(dash, 1, r, str.tostring(probability, "#") + "%", text_color=prob_c, bgcolor=color.new(color.purple, 70), text_size=size.small)
r += 1
table.cell(dash, 0, r, "Direction", text_color=color.gray, text_size=size.tiny)
dir_c = str.contains(direction, "BULL") ? color.lime : (str.contains(direction, "BEAR") ? color.red : color.gray)
table.cell(dash, 1, r, direction, text_color=dir_c, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "Chart", text_color=color.gray, text_size=size.tiny)
qual_c = quality == "CLEAN" ? color.lime : (quality == "GOOD" ? color.green : (quality == "OK" ? color.yellow : color.red))
table.cell(dash, 1, r, quality, text_color=qual_c, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "OK Trade?", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, ok_trade ? "YES" : "NO", text_color=ok_trade ? color.lime : color.red, text_size=size.tiny)
// Position Status
r += 1
pos_txt = in_long ? "IN LONG" : (in_short ? "IN SHORT" : "NO POSITION")
pos_c = in_long ? color.lime : (in_short ? color.red : color.gray)
table.cell(dash, 0, r, "POSITION", text_color=color.white, bgcolor=color.new(color.blue, 50), text_size=size.small)
table.cell(dash, 1, r, pos_txt, text_color=pos_c, bgcolor=color.new(color.blue, 50), text_size=size.small)
// Show trailing stops if in position
if in_long and not na(trailing_sl_long)
r += 1
table.cell(dash, 0, r, "Trail SL", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(trailing_sl_long, "#.##"), text_color=color.red, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "Trail TP", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(trailing_tp_long, "#.##"), text_color=color.lime, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "Profit", text_color=color.gray, text_size=size.tiny)
pnl = close - buy_entry
pnl_c = pnl > 0 ? color.lime : color.red
table.cell(dash, 1, r, str.tostring(pnl, "#.#") + "p", text_color=pnl_c, text_size=size.tiny)
if in_short and not na(trailing_sl_short)
r += 1
table.cell(dash, 0, r, "Trail SL", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(trailing_sl_short, "#.##"), text_color=color.red, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "Trail TP", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(trailing_tp_short, "#.##"), text_color=color.lime, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "Profit", text_color=color.gray, text_size=size.tiny)
pnl = sell_entry - close
pnl_c = pnl > 0 ? color.lime : color.red
table.cell(dash, 1, r, str.tostring(pnl, "#.#") + "p", text_color=pnl_c, text_size=size.tiny)
// Signal
r += 1
table.cell(dash, 0, r, "SIGNAL", text_color=color.white, bgcolor=color.new(color.green, 50), text_size=size.small)
sig_txt = buy_final ? "BUY NOW" : (sell_final ? "SELL NOW" : "WAIT")
sig_c = buy_final ? color.lime : (sell_final ? color.red : color.gray)
table.cell(dash, 1, r, sig_txt, text_color=sig_c, bgcolor=color.new(color.green, 50), text_size=size.small)
// IMMEDIATE Trade Levels - Show as soon as ORB is ready
if orb_ready and not na(long_entry) and not na(short_entry)
r += 1
table.cell(dash, 0, r, "LONG LEVELS", text_color=color.lime, bgcolor=color.new(color.green, 70), text_size=size.tiny)
table.cell(dash, 1, r, "", text_color=color.white)
r += 1
table.cell(dash, 0, r, "Entry", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(long_entry, "#.##"), text_color=color.white, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "SL", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(long_sl, "#.##"), text_color=color.red, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "TP", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(long_tp, "#.##"), text_color=color.lime, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "SHORT LEVELS", text_color=color.red, bgcolor=color.new(color.red, 70), text_size=size.tiny)
table.cell(dash, 1, r, "", text_color=color.white)
r += 1
table.cell(dash, 0, r, "Entry", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(short_entry, "#.##"), text_color=color.white, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "SL", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(short_sl, "#.##"), text_color=color.red, text_size=size.tiny)
r += 1
table.cell(dash, 0, r, "TP", text_color=color.gray, text_size=size.tiny)
table.cell(dash, 1, r, str.tostring(short_tp, "#.##"), text_color=color.lime, text_size=size.tiny)
// ════════════════════════ ALERTS ════════════════════════
alertcondition(buy_final, "BUY Signal", "DAX ORB BUY")
alertcondition(sell_final, "SELL Signal", "DAX ORB SELL")
alertcondition(orb_ready and not orb_ready , "ORB Ready", "DAX ORB READY")
alertcondition(is_building and not is_building , "ORB Building", "DAX ORB BUILDING")
alertcondition(ok_trade and not ok_trade , "Ready to Trade", "DAX OK")
MEREEP version 2 of air gap scannerMEREEP version 2 of air gap scanner – SummaryThis Pine Script (v6) detects and counts "air gaps" on the 4-hour timeframe, then displays the results in a clean on-chart table — exactly like the Pine Screener in your screenshot.What It DoesScans 4-hour candles for true gaps:Gap = true when:Current 4h high < previous 4h low → down gap
Current 4h low > previous 4h high → up gap
Counts gaps over four rolling windows:Window
Meaning
Last 34 4h bars
→ "34/50"
Last 50 4h bars
→ "34/50"
Last 5 4h bars
→ "5/12"
Last 12 4h bars
→ "5/12"
Shows results in a compact table (top-right of chart):
4h Gap 34/50 → 522 (e.g. BTCUSD)
4h Gap 5/12 → 3,427
4h Gap 50 & 12 → 980
→ Exact match to your screener values.
Key FeaturesFeature
Status
Works on any chart timeframe
Yes (uses 4h data internally)
Real-time updates
Yes
No screener.add_column errors
Yes (uses table)
No ta.sum errors
Yes (uses sum() / math.sum)
shorttitle ≤ 10 chars
Yes ("GapScan")
No syntax errors
Yes
Example Output (BTCUSD)Metric
Value
Gaps in last 34 of 50 4h bars
522
Gaps in last 5 of 12 4h bars
3,427
Gaps in last 50 & 12 4h bars
980
→ Identical to your TradingView Pine ScreenerUse CaseScan any symbol for unusual 4h gap activity
Spot potential volatility or institutional moves
Works on stocks, crypto, forex, futures
Willy ORB for Gold – Session Presets (NY 5m)What it does:
Plots the opening-range high/low for the main Gold sessions (Shanghai, Tokyo, Sydney, Frankfurt, London, New York 5-minute OR by default). It projects TP1/TP2 expansion targets, supports a timezone offset so opens line up with your broker, and includes breakout alerts on confirmed closes.
⸻
Why it’s Gold-friendly
• New York (COMEX pit): 5-minute opening range at ~20:20 local (via your offset) to capture the most active burst.
• London / Frankfurt: strong European volatility windows for XAU/USD.
• Shanghai / Tokyo / Sydney: structure-setting sessions before momentum builds.
⸻
Features
• Session presets: SH, TK, SY, FR, LDN, NY (5m) — toggle individually
• 15m OR for all sessions except NY (5m) by default (editable per session)
• TP1 / TP2 expansion targets (user-defined multiples)
• Labels for 15m/5m range and targets; customizable styles
• Timezone offset control (aligns lines to your local clock)
• Daily auto-reset for clean levels
• Alerts: “Closed Above Range High” / “Closed Below Range Low” per session
⸻
How to use
1. Add to chart (best on 1–15m).
2. In settings → Gold Sessions, toggle the sessions you want.
3. Set “My time offset from chart (hours)” so session lines match your broker time.
4. Trade the breakouts: when price closes beyond the session high/low, TP levels plot automatically.
⸻
Parameters (quick guide)
• Targets: TP1/TP2 multiples (e.g., 1.0 and 2.0).
• Labels: left/right label placement, line styles/colors.
• Sessions: enable/disable + choose each session’s OR length (NY defaults to 5m).
⸻
Tips for XAU/USD
• London often gives the cleanest first breakout.
• New York tends to drive continuation after data releases.
• Consider pairing with volume/volatility or HTF trend for confluence.
⸻
Notes
• Built in Pine Script v6.
• Indicator (not a strategy). For backtests, use a companion strategy that trades the closes beyond the OR with SL at the opposite side and TP by R.
⸻
Disclaimer
For educational purposes only. Not financial advice. Always backtest and manage risk.
BAY Technical Indicators//@version=5
indicator("BAY Technical Indicators", overlay=true)
// Price source
price = close
// VWAP
vwap = ta.vwap
plot(vwap, title="VWAP", color=color.blue, linewidth=2)
// SMMA (RMA) 20 and 50
smma20 = ta.rma(price, 20)
smma50 = ta.rma(price, 50)
plot(smma20, title="SMMA 20", color=color.lime)
plot(smma50, title="SMMA 50", color=color.purple)
// EMA 9 and 21
ema9 = ta.ema(price, 9)
ema21 = ta.ema(price, 21)
plot(ema9, title="EMA 9", color=color.white)
plot(ema21, title="EMA 21", color=color.red)
// MA 200
ma200 = ta.sma(price, 200)
plot(ma200, title="MA 200", color=color.orange, linewidth=2)
// SMA 325 (Dark Green)
sma325 = ta.sma(price, 325)
plot(sma325, title="SMA 325", color=color.new(color.green, 0)) // Dark green
// Volume SMA 9 (plotted in data window only)
volume_sma9 = ta.sma(volume, 9)
plot(volume_sma9, title="Volume SMA 9", color=color.fuchsia, linewidth=1, display=display.data_window)
Extended MacrosExtended Macro Times from XX:42 to XX:15.
These are the times to trade and when the Smart Money Reversal is likely to occur.
Quantura - Liquidity Sweep & Run LevelsIntroduction
“Quantura – Liquidity Sweep & Run Levels” is a structural price-action indicator designed to automatically detect swing-based liquidity zones and visualize potential sweep and run events. It helps traders identify areas where liquidity has likely been taken (sweep) or released (run), improving precision in market structure analysis and timing of entries or exits.
Originality & Value
This tool translates institutional liquidity concepts into an automated visual framework. Instead of simply marking highs and lows, it dynamically monitors swing points, tracks their breaches, and identifies subsequent reactions. The indicator is built to highlight the liquidity dynamics that often precede reversals or continuations.
Its originality lies in:
Automatic identification and tracking of swing highs and lows.
Real-time detection of broken levels and liquidity sweeps.
Distinction between “Run” and “Sweep” modes for different market behaviors.
Persistent historical visualization of liquidity levels using clean line structures.
Configurable signal markers for bullish and bearish sweep confirmations.
Functionality & Core Logic
Detects swing highs and lows using a user-defined Swing Length parameter.
Stores and updates all swing levels dynamically with arrays for efficient memory handling.
Draws horizontal lines from each detected swing point to visualize potential liquidity zones.
Monitors when price breaks a swing level and marks that event as “broken.”
Generates signals when the market either sweeps above/below or runs away from those levels, depending on the chosen mode.
Provides optional visual signal markers (“▲” for bullish sweeps, “▼” for bearish sweeps).
Parameters & Customization
Mode: Choose between “Sweep” (detects liquidity grabs) or “Run” (detects breakout continuations).
Swing Length: Sets the sensitivity for detecting swing highs/lows. A higher value focuses on larger structures, while smaller values detect micro liquidity points.
Bullish Color / Bearish Color: Customize color themes for sweep/run lines and signal markers.
Signals: Enables or disables visual up/down markers for confirmed events.
Visualization & Display
Horizontal lines represent potential liquidity levels (unbroken swing highs/lows).
Once broken, lines automatically stop extending, marking the moment liquidity is taken.
Depending on the selected mode:
“Sweep” mode identifies false breaks or stop-hunt behavior.
“Run” mode highlights breakouts that continue the trend.
Colored arrows indicate the direction and type of liquidity reaction.
Clean, non-intrusive visualization suitable for overlaying on price charts.
Use Cases
Detect liquidity sweeps before major reversals.
Identify breakout continuations after liquidity runs.
Combine with Supply/Demand or FVG indicators for multi-layered confirmation.
Validate liquidity bias in algorithmic or discretionary strategies.
Analyze market manipulation patterns and institutional stop-hunting behavior.
Limitations & Recommendations
This indicator identifies structural behavior but does not guarantee trade direction or profitability.
Works best on liquid markets with clear swing structures (e.g., crypto, forex, indices).
Signal interpretation should be combined with confluence tools such as volume, order flow, or structure-based filters.
Excessively small swing settings may cause over-signaling in volatile markets.
Markets & Timeframes
Optimized for all major asset classes — including crypto, Forex, indices, and equities — and for intraday to higher-timeframe structural analysis (5-minute up to daily charts).
Author & Access
Developed 100% by Quantura. Published as a Open-source script indicator. Access is free.
Compliance Note
This description fully complies with TradingView’s Script Publishing Rules and House Rules . It avoids performance claims, provides transparency on methodology, and clearly describes indicator behavior and limitations.
ATHENS GOLD MASTER v1.1e — by ATHENSATHENS GOLD MASTER v1.1e — by ATHENS
Professional Smart-Money-Based Gold Trading System
Built with institutional precision and ICT logic for XAUUSD traders.
⚙️ Core Strategy Components
✅ ICT Premium/Discount Model
✅ Daily Pivot Points & Price Bias
✅ Order Block & Break of Structure Detection
✅ Fair Value Gap (FVG) Mitigation Logic
✅ Dynamic Support & Resistance Recognition
✅ Candlestick + Chart Pattern Confirmation
✅ Multi-Timeframe Structure Alignment
💡 How It Works
The indicator scans real-time GOLD price action and generates Buy / Sell signals only when 3 or more confirmations align across smart money and technical confluence.
Each signal is visually marked on the chart with labels showing:
Confirmation count (1–5)
Key structure notes (Pivot, OB, FVG, etc.)
Support/Resistance zone tags
🧠 Optional Filters for Accuracy (90%+)
EMA-200 Trend Filter
ATR Volatility Filter
Volume Strength Filter
Session-Time Restriction (London–New York Overlap)
🟩 Buy Signal Example
Price above Pivot & in Discount Zone
Bullish Order Block Retest
FVG Mitigation Confirmed
Bullish Engulfing / Pin-Bar Confirmation
🟥 Sell Signal Example
Price below Pivot & in Premium Zone
Bearish Order Block Retest
FVG Mitigation Confirmed
Bearish Engulfing / Pin-Bar Confirmation
📊 Extra Features
Live Bias Table (Panel)
Selective Smart S/R Zones
Auto Session Filter
Alerts for Buy, Sell, and Strong Confluences
Best for: Gold Traders, ICT Students, Smart-Money Concepts Enthusiasts, and Professional Price-Action Analysts.
⚜️ Developed by ATHENS | Sahan Akalanka
📈 “Trade Smart. Think Institutional.”
Day of Week LetterLetters printed on the Daily candle corresponding the day of the trading week it is on. Used for weekly range logic
Set it to 'bring to front' to see it
Inside Day FinderWhat is an Inside Day?
An inside day happens when:
Today’s high is lower than yesterday’s high, and
Today’s low is higher than yesterday’s low.
So, today’s candle is inside the previous day’s range — showing consolidation or indecision in the market.
Pair Trade Beta Calculator (WORKING VERSION)wrote by chatgpt5, calucate the beta for pair trading
Asset A: The asset you would like to long
Assest B: The asset you would like to short
🧠 Quantum Regime Shift Detector v2.1🧠 Quantum Regime Shift Detector v2.1
This tool identifies market phase transitions — when conditions shift between stable and volatile regimes.
It blends volatility, trend strength, momentum, and volume dynamics to compute a Quantum Shift Score that highlights regime changes in real time.
🟩 Green = Stable Regime (calm, trending markets)
🟥 Red = Transition Regime (volatility spikes or reversals)
🟨 Yellow = Uncertain Zone
The histogram tracks regime states, while alerts trigger automatically when the market enters a new phase.
Use it to anticipate major shifts before price confirms them.
(Tip: pair with your favorite trend or volume indicator for confirmation.)
chart Pattern & Candle sticks Strategy# **XAUUSD Pattern & Candle Strategy - Complete Description**
## **Overview**
This Pine Script indicator is a comprehensive multi-factor trading system specifically designed for **XAUUSD (Gold) scalping and swing trading**. It combines classical technical analysis methods including candlestick patterns, chart patterns, moving averages, and volume analysis to generate high-probability buy/sell signals with automatic stop-loss and take-profit levels.
***
## **Core Components**
### **1. Moving Average System (Triple MA)**
**Purpose:** Identifies trend direction and momentum
- **Fast MA (20-period)** - Short-term price action
- **Medium MA (50-period)** - Intermediate trend
- **Slow MA (200-period)** - Long-term trend direction
**How it works:**
- **Bullish alignment**: MA20 > MA50 > MA200 (all pointing up)
- **Bearish alignment**: MA20 < MA50 < MA200 (all pointing down)
- **Crossover signals**: When Fast MA crosses Medium MA, it triggers buy/sell signals
- **Choice of SMA or EMA**: Adjustable based on preference
**Visual indicators:**
- Blue line = Fast MA
- Orange line = Medium MA
- Light red line = Slow MA
- Green background tint = Bullish trend
- Red background tint = Bearish trend
---
### **2. Candlestick Pattern Recognition (13 Patterns)**
**Purpose:** Identifies reversal and continuation signals based on price action
#### **Bullish Patterns (Signal potential upward moves):**
1. **Hammer** 🔨
- Long lower wick (2x body size)
- Small body at top
- Indicates rejection of lower prices (buyers stepping in)
- Best at support levels
2. **Inverted Hammer**
- Long upper wick
- Small body at bottom
- Shows buying pressure despite initial selling
3. **Bullish Engulfing** 📈
- Green candle completely engulfs previous red candle
- Strong reversal signal
- Body must be 1.2x larger than previous
4. **Morning Star** ⭐
- 3-candle pattern
- Red candle → Small indecision candle → Large green candle
- Powerful reversal at bottoms
5. **Piercing Line** ⚡
- Green candle closes above 50% of previous red candle
- Indicates strong buying interest
6. **Bullish Marubozu**
- Almost no wicks (95% body)
- Very strong bullish momentum
- Body must be 1.3x average size
#### **Bearish Patterns (Signal potential downward moves):**
7. **Shooting Star** 💫
- Long upper wick
- Small body at bottom
- Indicates rejection of higher prices (sellers in control)
- Best at resistance levels
8. **Hanging Man**
- Similar to hammer but appears at top
- Warning of potential reversal down
9. **Bearish Engulfing** 📉
- Red candle completely engulfs previous green candle
- Strong reversal signal
10. **Evening Star** 🌙
- 3-candle pattern (opposite of Morning Star)
- Green → Small → Large red candle
- Powerful top reversal
11. **Dark Cloud Cover** ☁️
- Red candle closes below 50% of previous green candle
- Indicates strong selling pressure
12. **Bearish Marubozu**
- Almost no wicks, pure red body
- Very strong bearish momentum
#### **Neutral Pattern:**
13. **Doji**
- Open and close nearly equal (tiny body)
- Indicates indecision
- Often precedes major moves
**Detection Logic:**
- Compares body size, wick ratios, and position relative to previous candles
- Uses 14-period average body size as reference
- All patterns validated against volume confirmation
***
### **3. Chart Pattern Recognition**
**Purpose:** Identifies major support/resistance and reversal patterns
#### **Patterns Detected:**
**Double Bottom** 📊 (Bullish)
- Two lows at approximately same level
- Indicates strong support
- Breakout above neckline triggers buy signal
- Most reliable at major support zones
**Double Top** 📊 (Bearish)
- Two highs at approximately same level
- Indicates strong resistance
- Breakdown below neckline triggers sell signal
- Most reliable at major resistance zones
**Support & Resistance Levels**
- Automatically plots recent pivot highs (resistance)
- Automatically plots recent pivot lows (support)
- Uses 3-bar strength for validation
- Levels shown as dashed horizontal lines
**Price Action Patterns**
- **Uptrend detection**: Higher highs + higher lows
- **Downtrend detection**: Lower highs + lower lows
- Confirms overall market structure
***
### **4. Volume Analysis**
**Purpose:** Confirms signal strength and filters false signals
**Metrics tracked:**
- **Volume MA (20-period)**: Baseline average volume
- **High volume threshold**: 1.5x the volume average
- **Volume increase**: Current volume > previous 2 bars
**How it's used:**
- All buy/sell signals **require volume confirmation**
- High volume = institutional participation
- Low volume signals are filtered out
- Prevents whipsaw trades during quiet periods
**Visual indicator:**
- Dashboard shows "High" volume in orange when active
- "Normal" shown in gray during low volume
***
### **5. Signal Generation Logic**
**BUY SIGNALS triggered when ANY of these occur:**
1. **Candlestick + Volume**
- Bullish candle pattern detected
- High volume confirmation
- Price above Fast MA
2. **MA Crossover + Volume**
- Fast MA crosses above Medium MA
- High volume confirmation
3. **Double Bottom Breakout**
- Price breaks above support level
- Volume confirmation present
4. **Trend Continuation**
- Uptrend structure intact (higher highs/lows)
- All MAs in bullish alignment
- Price above Fast MA
- Volume confirmation
**SELL SIGNALS triggered when ANY of these occur:**
1. **Candlestick + Volume**
- Bearish candle pattern detected
- High volume confirmation
- Price below Fast MA
2. **MA Crossunder + Volume**
- Fast MA crosses below Medium MA
- High volume confirmation
3. **Double Top Breakdown**
- Price breaks below resistance level
- Volume confirmation present
4. **Trend Continuation**
- Downtrend structure intact (lower highs/lows)
- All MAs in bearish alignment
- Price below Fast MA
- Volume confirmation
***
### **6. Risk Management System**
**Automatic Stop Loss Calculation:**
- Based on ATR (Average True Range) - 14 periods
- **Formula**: Entry price ± (ATR × SL Multiplier)
- **Default multiplier**: 1.5 (adjustable)
- Adapts to market volatility automatically
**Automatic Take Profit Calculation:**
- **Formula**: Entry price ± (ATR × TP Multiplier)
- **Default multiplier**: 2.5 (adjustable)
- **Default Risk:Reward ratio**: 1:1.67
- Higher TP multiplier = more aggressive targets
**Position Management:**
- Tracks ONE position at a time (no pyramiding)
- Automatically closes position when:
- Stop loss is hit
- Take profit is reached
- Opposite MA crossover occurs
- Prevents revenge trading and over-leveraging
**Visual Representation:**
- **Red horizontal line** = Stop Loss level
- **Green horizontal line** = Take Profit level
- Lines remain on chart while position is active
- Automatically disappear when position closes
***
### **7. Visual Elements**
**On-Chart Displays:**
1. **Moving Average Lines**
- Fast MA (Blue, thick)
- Medium MA (Orange, thick)
- Slow MA (Red, thin)
2. **Support/Resistance**
- Green crosses = Support levels
- Red crosses = Resistance levels
3. **Buy/Sell Arrows**
- Large GREEN "BUY" label below bars
- Large RED "SELL" label above bars
4. **Pattern Labels** (Small markers)
- "Hammer", "Bull Engulf", "Morning Star" (green, below bars)
- "Shooting Star", "Bear Engulf", "Evening Star" (red, above bars)
- "Double Bottom" / "Double Top" (blue/orange)
5. **Signal Detail Labels** (Medium size)
- Shows signal reason (e.g., "Bullish Candle", "MA Cross Up")
- Displays Entry, SL, and TP prices
- Color-coded (green for long, red for short)
6. **Background Coloring**
- Light green tint = Bullish MA alignment
- Light red tint = Bearish MA alignment
***
### **8. Information Dashboard**
**Top-right corner table showing:**
| Metric | Description |
|--------|-------------|
| **Position** | Current trade status (LONG/SHORT/None) |
| **MA Trend** | Overall trend direction (Bullish/Bearish/Neutral) |
| **Volume** | Current volume status (High/Normal) |
| **Pattern** | Last detected candlestick pattern |
| **ATR** | Current volatility measurement |
**Purpose:**
- Quick at-a-glance market assessment
- Real-time position tracking
- No need to check multiple indicators
***
### **9. Alert System**
**Complete alert coverage for:**
✅ **Entry Alerts**
- "Buy Signal" - Triggers when buy conditions met
- "Sell Signal" - Triggers when sell conditions met
✅ **Exit Alerts**
- "Long TP Hit" - Take profit reached on long position
- "Long SL Hit" - Stop loss triggered on long position
- "Short TP Hit" - Take profit reached on short position
- "Short SL Hit" - Stop loss triggered on short position
**How to use:**
1. Click "Create Alert" button
2. Select desired alert from dropdown
3. Set notification method (popup, email, SMS, webhook)
4. Never miss a trade opportunity
***
## **Recommended Settings**
### **For Scalping (Quick trades):**
- **Timeframe**: 5-minute
- **Fast MA**: 9
- **Medium MA**: 21
- **Slow MA**: 50
- **SL Multiplier**: 1.0
- **TP Multiplier**: 2.0
- **Volume Threshold**: 1.5x
### **For Swing Trading (Longer holds):**
- **Timeframe**: 1-hour or 4-hour
- **Fast MA**: 20
- **Medium MA**: 50
- **Slow MA**: 200
- **SL Multiplier**: 2.0
- **TP Multiplier**: 3.0
- **Volume Threshold**: 1.3x
### **Best Trading Hours for XAUUSD:**
- **Asian Session**: 00:00 - 08:00 GMT (lower volatility)
- **London Session**: 08:00 - 16:00 GMT (high volatility) ⭐
- **New York Session**: 13:00 - 21:00 GMT (highest volume) ⭐
- **London-NY Overlap**: 13:00 - 16:00 GMT (BEST for scalping) 🔥
***
## **How to Use This Strategy**
### **Step 1: Setup**
1. Open TradingView
2. Load XAUUSD chart
3. Select timeframe (5m, 15m, 1H, or 4H)
4. Add indicator from Pine Editor
5. Adjust settings based on your trading style
### **Step 2: Wait for Signals**
- Watch for GREEN "BUY" or RED "SELL" labels
- Check the signal reason in the detail label
- Verify dashboard shows favorable conditions
- Confirm volume is "High" (not required but preferred)
### **Step 3: Enter Trade**
- Enter at market or limit order near signal price
- Note the displayed Entry, SL, and TP prices
- Set your broker's SL/TP to match indicator levels
### **Step 4: Manage Position**
- Watch for SL/TP lines on chart
- Monitor dashboard for trend changes
- Exit manually if opposite MA crossover occurs
- Let SL/TP do their job (don't move them!)
### **Step 5: Review & Learn**
- Track win rate over 20+ trades
- Adjust multipliers if needed
- Note which patterns work best for you
- Refine entry timing
***
## **Key Advantages**
✅ **Multi-confirmation approach** - Reduces false signals significantly
✅ **Automatic risk management** - No manual calculation needed
✅ **Adapts to volatility** - ATR-based SL/TP adjusts to market conditions
✅ **Volume filtered** - Ensures institutional participation
✅ **Visual clarity** - Easy to understand at a glance
✅ **Complete alert system** - Never miss opportunities
✅ **Pattern education** - Learn patterns as they appear
✅ **Works on all timeframes** - Scalping to swing trading
***
## **Limitations & Considerations**
⚠️ **Not a holy grail** - No strategy wins 100% of trades
⚠️ **Requires practice** - Demo trade first to understand signals
⚠️ **Market conditions matter** - Works best in trending or volatile markets
⚠️ **News events** - Avoid trading during major economic releases
⚠️ **Slippage on 5m** - Fast markets may have execution delays
⚠️ **Pattern subjectivity** - Some patterns may trigger differently than expected
***
## **Risk Management Rules**
1. **Never risk more than 1-2% per trade**
2. **Maximum 3 positions per day** (avoid overtrading)
3. **Don't trade during major news** (NFP, FOMC, etc.)
4. **Use proper position sizing** (0.01 lot per $100 for micro accounts)
5. **Keep trade journal** (track patterns, win rate, mistakes)
6. **Stop trading after 3 consecutive losses** (psychological reset)
7. **Don't move stop loss further away** (accept losses)
8. **Take partial profits** at 1:1 R:R if desired
***
## **Expected Performance**
**Realistic expectations:**
- **Win rate**: 50-65% (depending on market conditions and timeframe)
- **Risk:Reward**: 1:1.67 default (adjustable to 1:2 or 1:3)
- **Signals per day**: 3-8 on 5m, 1-3 on 1H
- **Best months**: High volatility periods (news events, economic uncertainty)
- **Drawdowns**: Expect 3-5 losing trades in a row occasionally
***
## **Customization Options**
All inputs are adjustable in settings panel:
**Moving Averages:**
- Type (SMA or EMA)
- All three period lengths
**Volume:**
- Volume MA length
- High volume multiplier threshold
**Chart Patterns:**
- Pattern strength (bars for pivot detection)
- Show/hide pattern labels
**Risk Management:**
- ATR period
- Stop loss multiplier
- Take profit multiplier
**Display:**
- Toggle pattern labels
- Customize colors (in code)
***
## **Conclusion**
This is a **professional-grade, multi-factor trading system** that combines the best of classical technical analysis with modern risk management. It's designed to give clear, actionable signals while automatically handling the complex calculations of stop loss and take profit levels.
**Best suited for traders who:**
- Understand basic technical analysis
- Can follow rules consistently
- Prefer systematic approach over gut feeling
- Want visual confirmation before entering trades
- Value proper risk management
**Start with demo trading** for at least 20-30 trades to understand how the signals work in different market conditions. Once comfortable and profitable on demo, transition to live trading with minimal risk per trade.
Happy trading! 📈🎯
celenni//@version=6
strategy("Cruce SMA 5/20 – v6 (const TF, gap en puntos SOLO cortos, next bar open, 1 trade/ventana, anti-flip)",
overlay = true,
initial_capital = 10000,
default_qty_type = strategy.percent_of_equity,
default_qty_value = 10,
pyramiding = 0)
// === CONSTANTES ===
const string TF = "15" // fija el timeframe de cálculo (ej. "5","15","30","60","120","240","D")
const string SYM_ALLOWED = "QQQ" // símbolo permitido
// === Inputs ===
confirmOnClose = input.bool(true, "Confirmar señal al cierre (evita repaint)")
maxGapPtsShort = input.float(0.50, "Máx gap permitido en CORTOS (puntos)", 0.0, 1e6)
lenFast = input.int(5, "SMA rápida", 1)
lenSlow = input.int(20, "SMA lenta", 2)
tpPts = input.float(20.0, "Take Profit (puntos)", 0.01)
slPts = input.float(5.0, "Stop Loss (puntos)", 0.01)
// Ventanas (NY)
useSessions = input.bool(true, "Usar ventanas NY")
sess1 = input.session("1000-1130", "Ventana 1 (NY)")
sess2 = input.session("1330-1600", "Ventana 2 (NY)")
flatOutside = input.bool(true, "Cerrar posición al salir de la ventana")
// === Utilidades ===
isAllowedSymbol() =>
(syminfo.ticker == SYM_ALLOWED) or str.contains(str.upper(syminfo.ticker), str.upper(SYM_ALLOWED))
// === Series MTF (cálculo en TF) ===
closeTF = request.security(syminfo.tickerid, TF, close, barmerge.gaps_off, barmerge.lookahead_off)
smaFast = ta.sma(closeTF, lenFast)
smaSlow = ta.sma(closeTF, lenSlow)
// Señales MTF sin repaint
longSignalTF = request.security(syminfo.tickerid, TF,
ta.crossover(ta.sma(close, lenFast), ta.sma(close, lenSlow)),
barmerge.gaps_off, barmerge.lookahead_off)
shortSignalTF = request.security(syminfo.tickerid, TF,
ta.crossunder(ta.sma(close, lenFast), ta.sma(close, lenSlow)),
barmerge.gaps_off, barmerge.lookahead_off)
// === Sesiones (evaluadas en el TF del gráfico, zona NY) ===
inSess1 = useSessions ? not na(time(timeframe.period, sess1, "America/New_York")) : true
inSess2 = useSessions ? not na(time(timeframe.period, sess2, "America/New_York")) : true
inSession = inSess1 or inSess2
// Inicio de ventanas y contadores (1 trade por ventana)
var bool wasIn1 = false, wasIn2 = false
win1Start = inSess1 and not wasIn1
win2Start = inSess2 and not wasIn2
wasIn1 := inSess1
wasIn2 := inSess2
var int tradesWin1 = 0, tradesWin2 = 0
if win1Start
tradesWin1 := 0
if win2Start
tradesWin2 := 0
justOpened = strategy.position_size != 0 and strategy.position_size == 0
if justOpened
if inSess1
tradesWin1 += 1
if inSess2
tradesWin2 += 1
canTakeMore =
(inSess1 and tradesWin1 < 1) or
(inSess2 and tradesWin2 < 1) or
(not useSessions)
// === Filtro NO-GAP SOLO para CORTOS (en PUNTOS) ===
// Compara OPEN actual vs CLOSE previo; se evalúa en la barra donde se EJECUTA (apertura actual).
gapPts = math.abs(open - close )
shortGapOK = maxGapPtsShort <= 0 ? true : (gapPts <= maxGapPtsShort)
// === Anti-flip y gating ===
isFlat = strategy.position_size == 0
canSignal = (not confirmOnClose or barstate.isconfirmed)
canTrade = isAllowedSymbol() and inSession and canTakeMore and canSignal
// === ENTRADAS (se colocan al cierre; se llenan en la apertura siguiente) ===
// Largos: sin filtro de gap
if canTrade and isFlat and longSignalTF
strategy.entry("Long", strategy.long)
// Cortos: requieren shortGapOK
if canTrade and isFlat and shortSignalTF and shortGapOK
strategy.entry("Short", strategy.short)
// === TP/SL en puntos ===
if strategy.position_size > 0
e = strategy.position_avg_price
strategy.exit("TP/SL Long", from_entry="Long", limit=e + tpPts, stop=e - slPts)
if strategy.position_size < 0
e = strategy.position_avg_price
strategy.exit("TP/SL Short", from_entry="Short", limit=e - tpPts, stop=e + slPts)
// === Cierre fuera de sesión ===
if flatOutside and not inSession and strategy.position_size != 0
strategy.close_all("Fuera de sesión")
// === Visual ===
plot(smaFast, color=color.new(color.teal, 0), title="SMA 5 ("+TF+")")
plot(smaSlow, color=color.new(color.orange, 0), title="SMA 20 ("+TF+")")
plotshape(longSignalTF and canTrade and isFlat, title="Compra", style=shape.triangleup,
location=location.belowbar, color=color.new(color.teal,0), size=size.tiny, text="Long")
plotshape(shortSignalTF and canTrade and isFlat and shortGapOK, title="Venta", style=shape.triangledown,
location=location.abovebar, color=color.new(color.red,0), size=size.tiny, text="Short")
SevenDayHighLowTableWithBoxes [CHE]SevenDayHighLowTableWithBoxes — Seven-day day-range boxes with a weekday-aware “ghost” projection and a compact table that tracks recent extremes and per-weekday hit rates.
Summary
This indicator visualizes each trading day as a colored box and annotates the final high and low with compact markers. It maintains a rolling seven-day view and a five-column table showing day name, high, low, range, and a per-weekday projection hit statistic. A dashed “ghost” box projects a typical range for the current weekday using a running average and an adjustable scaling factor. The script is written in Pine v6, runs on the main chart (overlay true), and emphasizes stable object handling and closed-bar finalization at day boundaries.
Motivation: Why this design?
Intraday traders often need fast context for where today’s price sits relative to recent daily extremes, without switching timeframes. A simple daily high/low overlay is informative but lacks structure, sizing context, and continuity. By grouping bars into local days (configurable UTC offset), drawing explicit boxes, and projecting a weekday-typical range, the chart becomes easier to scan. The compact table gives a quick audit trail of the latest seven days while tracking how often the weekday projection would have covered the realized range.
What’s different vs. standard approaches?
Reference baseline: Plain daily high/low lines or session boxes without context.
Architecture differences:
Weekday-tinted boxes and labels for today plus up to six prior days.
Weekday average range drives a dashed projection (“ghost”) sized by a user-defined percentage.
Per-weekday hit statistics recorded as hits over totals and displayed in the table.
ATR-based vertical offsets keep labels readable.
Live updates intraday; state is finalized at the local day switch.
Practical effect: The chart shows where current price sits inside a known daily envelope, plus how “typical” the day’s movement is for this weekday, aiding expectations and planning.
How it works (technical)
The script computes a local daily timestamp using the user’s UTC offset. A day change finalizes the prior day, writes its high, low, start and end indices, and records the bar indices of the terminal high and low.
For each weekday, it maintains a running average of realized ranges with a cap on the lookback count. The ghost projection length is the weekday average scaled by the user’s percentage setting.
Anchor selection for the ghost uses the most recent extreme and the close relative to the intraday midpoint to choose a low-anchored or high-anchored box.
A five-column table (Day, High, Low, Range, Ghost OK) is refreshed on the last bar. The “Ghost OK” column shows per-weekday cumulative hits over totals with a percentage, calculated before including the just-finished day.
Object counts are bounded to seven days by pruning arrays and deleting old boxes and labels. Visual updates for historical objects occur on the last bar to minimize overhead. No `security()` calls are used.
Parameter Guide
UTC (+/−) — Controls local day boundaries — Default: minus five hours — Set to your venue’s local time.
Session (for Time gate) — Session string — Default: full week — (Optional) computed internally; not applied to gating.
Show 7-Day High/Low Table — Toggles the table — Default: true — Disable to reduce UI load.
Show Day Boxes in Chart — Toggles day boxes — Default: true — Disable for a cleaner chart.
Table Position — Nine-point anchor — Default: Middle Right — Move to avoid overlap.
Table Background / Text Color / Min Cell Width — Styling controls — Defaults: gray background, white text, width twelve characters.
Weekday Colors (Sun…Sat) — Row and box tints — Defaults: semi-transparent hues — Adjust for your theme.
Triangle Transparency — Marker opacity — Default: zero — Increase to fade high/low dots.
Day Label Transparency — Day name opacity — Default: zero — Increase to reduce emphasis.
Box Border Width — Box stroke width — Default: one — Increase for stronger edges.
Extend Boxes Right — Extend current box — Default: false — Useful for forward planning.
Show Average Range Ghost Box — Dashed projection — Default: true — Disable if distracting.
Ghost Border Color / Width — Ghost styling — Defaults: gray, width one.
Ghost Length percent of AvgRange — Projection scale — Default: one hundred; bounds zero to five hundred — Lower to be conservative.
Max History Days for Average — Cap per-weekday averaging — Default: two hundred fifty-two; bounds thirty to five hundred.
ATR Length / Day Label ATR Multiplier / Triangle Up ATR Multiplier / Triangle Down ATR Multiplier — Offsets for label placement — Defaults: length one hundred; multipliers zero — Increase on dense instruments to prevent overlap.
Reading & Interpretation
Day boxes: The filled rectangle marks each day’s full high-low span; color encodes the weekday.
Markers: Small dots near the terminal high and low highlight where the final extremes occurred.
Ghost box: A dashed box sized by the weekday average range, anchored based on recent behavior. It is a typical span, not a target.
Table: Row one shows “Today”. Rows below list up to six prior days. “Ghost OK” shows per-weekday cumulative hits over totals with a percentage, which reflects historical coverage quality for that weekday.
Practical Workflows & Combinations
Trend following: Use the current box plus recent boxes to read expansion or compression days; combine with basic structure such as higher-highs and higher-lows or lower-lows and lower-highs for confirmation.
Exits and risk: When price nears the ghost boundary late in the session, consider managing exposure more conservatively.
Multi-asset and multi-timeframe: Works on minute charts. As a starting point, use five to less than sixty minutes. For cross-checks, pair with a higher timeframe bias filter.
Behavior, Constraints & Performance
Repaint/confirmation: The indicator updates intraday; extremes and ghost position can move while the day is open. Values are finalized on the next local day start.
HTF/security: None used; repaint risk is limited to live-bar movement.
Resources: `max_bars_back` five thousand; arrays are pruned to seven days; the table and color sync run on the last bar; the live ghost updates only in real time.
Known limits: Weekday averages can be unrepresentative during regime shifts, events, or gaps. Day boundaries depend on the UTC offset being set correctly. No alerts are included. The script displays warning labels when the timeframe is below five minutes or at sixty minutes and above.
Sensible Defaults & Quick Tuning
Start with the defaults.
Ghost too aggressive: Lower the percent scale.
Labels overlap: Increase ATR multipliers.
Clutter or performance issues: Hide the table or boxes, or disable the ghost.
Day boundary misaligned: Adjust the UTC offset to your market.
What this indicator is—and isn’t
This is a visualization and context layer for daily extremes and a weekday-based typical span. It does not predict direction, does not manage orders, and is not a complete trading system. Use it alongside market structure, risk controls, and position management.
Disclaimer
The content provided, including all code and materials, is strictly for educational and informational purposes only. It is not intended as, and should not be interpreted as, financial advice, a recommendation to buy or sell any financial instrument, or an offer of any financial product or service. All strategies, tools, and examples discussed are provided for illustrative purposes to demonstrate coding techniques and the functionality of Pine Script within a trading context.
Any results from strategies or tools provided are hypothetical, and past performance is not indicative of future results. Trading and investing involve high risk, including the potential loss of principal, and may not be suitable for all individuals. Before making any trading decisions, please consult with a qualified financial professional to understand the risks involved.
By using this script, you acknowledge and agree that any trading decisions are made solely at your discretion and risk.
Do not use this indicator on Heikin-Ashi, Renko, Kagi, Point-and-Figure, or Range charts, as these chart types can produce unrealistic results for signal markers and alerts.
Best regards and happy trading
Chervolino
LONG/SHORT Signals by YCGH CapitalThis indicator uses volatility as its primary input to help identify potential market
bottoms and tops. By measuring extreme price movements and volatility spikes, it generates
signals for both long (buy) and short (sell) opportunities.
BEST SUITED FOR:
This indicator works best when the market is in a clear trend - either uptrend or downtrend.
It excels at catching reversal points within trending markets and identifying exhaustion
points where trends may reverse.
HOW TO USE THIS INDICATOR:
1. IDENTIFY SIGNAL TYPES:
• Long Filtered (Dark Blue, Tiny): Conservative buy signals with higher probability
• Long Aggressive (Aqua, Small): Early buy signals for catching bottoms faster
• Short Filtered (Dark Red, Tiny): Conservative sell signals with confirmation
• Short Aggressive (Orange, Small): Early sell signals for catching tops
2. TRADING APPROACHES:
Conservative Traders:
- Focus only on Filtered signals (tiny arrows)
- Wait for full confirmation before entering
- Lower risk, fewer trades, higher win rate
Aggressive Traders:
- Use Aggressive signals (small arrows) for earlier entries
- Accept more risk for potentially larger profits
- More trades, catch moves from the beginning
Balanced Approach:
- Use Aggressive signals to spot opportunities early
- Confirm with Filtered signals or use them to add to positions
- Scale in with Aggressive, scale out with opposite signals
3. RISK MANAGEMENT:
- Always use stop losses below recent swing lows (long) or above swing highs (short)
- Risk less per trade on Aggressive signals (they have more false signals)
- Risk more per trade on Filtered signals (higher probability setups)
- Consider the broader trend - signals aligned with trend work better
4. COMBINATION STRATEGIES:
- Use with trend indicators (moving averages) to filter signals
- Combine with support/resistance levels for higher probability entries
- Look for signals near key price levels for best results
- Use volume confirmation to validate signal strength
5. TIMEFRAME RECOMMENDATIONS:
- 15min-1H charts: Day trading with quick reversals
- 4H-Daily charts: Swing trading with multi-day holds (RECOMMENDED)
- Weekly charts: Position trading for long-term trend reversals
IMPORTANT NOTES:
- Not all signals will result in profitable trades
- Best performance in trending markets, may produce false signals in sideways/choppy conditions
- Combine with your own analysis and risk management rules
- Past performance does not guarantee future results






















