Bull Flag & Flat Top Breakout DetectorBull Flag & Flat Top Detector - Quick Reference Guide
Pattern Overview
🚩 Bull Flag
╱╲
╱ ╲ ← Pullback (2-5 red candles)
╱ ╲
╱ ╲____
╱ ╲
│ │
│ THE POLE │ ← Strong upward move (3+ green candles)
│ │
└──────────────┘
What to look for:
Strong initial move (the "pole") - 3+ green candles, 3%+ move
Brief pullback - 2-5 candles, less than 50% retracement
Pullback should "drift" lower, not crash
Entry on first candle to make new high after pullback
📊 Flat Top Breakout
════════════════ ← Resistance (multiple touches)
↑ ↑ ↑
╱╲ ╱╲ ╱╲
╱ ╲╱ ╲╱ ╲ ← Consolidation
╱ ╲
╱ ╲
What to look for:
Multiple touches of same resistance level (2+)
Tight consolidation range
Each failed breakout builds pressure
Entry on convincing break above resistance with volume
Signal Types
SignalShapeColorMeaningBull Flag Breakout▲ TriangleLimeEntry signal - go longFlat Top Breakout◆ DiamondAquaEntry signal - go longBear Flag Breakout▼ TriangleRedShort entry (if enabled)Pattern Forming🚩 FlagFaded GreenBull flag developingPattern Forming■ SquareFaded BlueFlat top developing
Level Lines Explained
LineColorStyleMeaningEntryLimeSolidBreakout trigger priceStop LossRedDashedExit if price falls hereTarget 1AquaDottedFirst profit target (2R)Target 2YellowDottedSecond profit target (3R)
Info Table Reference
FieldWhat It ShowsBull FlagScanning / Forming 🚩 / Breakout ✓Flat TopScanning / Forming 📊 / Breakout ✓PullbackCandle count + retracement %Rel VolumeCurrent bar vs averageEMA 20Above ✓ or Below ✗VWAPAbove ✓ or Below ✗Green StreakConsecutive green candles (pole)ResistanceTouch count for flat top
Trading Checklist
Before Entry ✅
Pattern status shows "FORMING" or "BREAKOUT"
Price above EMA (table shows ✓)
Price above VWAP (table shows ✓)
Relative volume 1.5x+ (ideally 2x+)
Stock is in play (up 5%+ on day, has catalyst)
Market direction supportive (not fighting trend)
Entry Execution
Wait for breakout candle to form
Confirm volume spike on breakout
Enter as close to entry line as possible
Set stop loss at red dashed line
Know your target levels
Trade Management
If no immediate follow-through → consider exit ("breakout or bailout")
Take 50% off at Target 1
Move stop to breakeven
Let remainder run toward Target 2
Exit fully if price returns below entry
Bull Flag Quality Checklist
Pole Quality:
FactorIdealAcceptableAvoidGreen candles5+3-4Less than 3Move size10%+3-10%Less than 3%VolumeIncreasingSteadyDecliningCandle bodiesLargeMediumSmall/doji
Pullback Quality:
FactorIdealAcceptableAvoidCandle count2-34-56+RetracementUnder 38%38-50%Over 50%VolumeDecliningSteadyIncreasingCharacterOrderly driftChoppySharp drop
Flat Top Quality Checklist
FactorGood SetupWeak SetupTouches3+ at same levelOnly 2, widely spacedToleranceVery tight (0.2%)Loose (1%+)Duration5-15 barsToo short or too longVolumeDrying upErraticPrior trendUpSideways/down
Common Mistakes to Avoid
❌ Entering too early
Wait for actual breakout, not anticipation
"Forming" ≠ "Breakout"
❌ Ignoring volume
No volume = likely false breakout
Require 1.5x+ relative volume minimum
❌ Fighting the trend
Check EMA and VWAP status
Both should be ✓ for high probability
❌ Wide stops
Stop should be below pullback low
If stop is too wide, skip the trade
❌ Holding losers
"Breakout or bailout" - if it doesn't work, exit
Failed breakouts often reverse hard
❌ Chasing extended moves
If you missed entry, wait for next pattern
Don't chase 5+ candles after breakout
Risk Management Rules
Position Sizing
Risk Amount = Account × Risk % (typically 1-2%)
Position Size = Risk Amount ÷ (Entry - Stop)
Example:
Account: $25,000
Risk: 1% = $250
Entry: $5.00
Stop: $4.70
Risk per share: $0.30
Position Size: $250 ÷ $0.30 = 833 shares
Risk-Reward Targets
TargetR MultipleExample (risk $0.30)Target 12:1+$0.60 ($5.60)Target 23:1+$0.90 ($5.90)
Timeframe Guide
TimeframeProsConsBest For1-minMore patterns, precise entryNoisy, false signalsScalping5-minGood balance, cleaner patternsFewer signalsDay trading15-minHigh quality patternsMiss fast movesSwing entries
Settings Quick Reference
Default Settings (Balanced)
Pole: 3 candles, 3% move
Pullback: 2-5 candles, 50% max retrace
Volume: 1.5x required
Filters: EMA + VWAP ON
Aggressive Settings
Pole: 2 candles, 2% move
Pullback: 2-6 candles, 60% max retrace
Volume: 1.2x required
Filters: VWAP OFF
Conservative Settings
Pole: 4 candles, 5% move
Pullback: 2-4 candles, 40% max retrace
Volume: 2.0x required
Filters: Both ON
Alert Setup
Recommended Alerts
"Bull Flag Forming"
Get early warning as pattern develops
Prepare your position size and levels
"Bull Flag Breakout"
Primary entry alert
React quickly when triggered
"Any Bullish Breakout"
Catch both bull flags and flat tops
Good for watchlist scanning
Alert Setup Steps
Right-click chart → Add Alert
Condition: Select "Bull Flag & Flat Top Breakout Detector"
Choose alert type from dropdown
Set expiration and notification method
Troubleshooting
Q: Patterns not detecting?
Lower the Min Pole Move % setting
Reduce Min Pole Candles requirement
Check that price is in acceptable range
Q: Too many false signals?
Increase volume multiplier to 2.0x
Enable both EMA and VWAP filters
Increase Min Pole Move %
Q: Levels not showing?
Enable "Show Entry Line", "Show Stop Loss", "Show Targets"
Check "Max Patterns to Display" setting
Q: Info table not visible?
Enable "Show Info Table" in settings
Try different table position
Pattern Combinations
Best Setups (A+ Quality)
Bull flag on a gap day (Gap & Go → Bull Flag)
Flat top at pre-market high resistance
Pattern forming above VWAP with 5x+ volume
Avoid These
Bull flag below VWAP
Flat top in downtrending stock
Low volume patterns
Patterns late in the day (after 2pm)
Daily Routine
Pre-Market (7-9am)
Build watchlist of gappers (5%+, high volume)
Apply indicator to top 3-5 candidates
Note pre-market levels
Market Open (9:30-10:30am)
Watch for "FORMING" status on watchlist
Prepare entries as patterns develop
Execute on breakout signals
Manage trades according to plan
Midday (10:30am-2pm)
Look for second-wave patterns
Be more selective (less momentum)
Consider tighter stops
Close (2-4pm)
Generally avoid new patterns
Manage existing positions
Review day's trades
Candlestick analysis
ORB + Fair Value Gaps (FVG/iFVG) Suite with Daily 50% MidlineA complete smart-money–focused price-action toolkit combining the New York Open Range Breakout (ORB), ICT-style Fair Value Gaps, Inverted FVGs, and a dynamic Daily 50% Midline.
Designed for traders who want a clean, fast, and highly visual way to track liquidity, imbalances, and intraday directional bias.
📌 Key Features
1. NY Session ORB (09:30–09:45 New York Time)
Automatically plots:
ORB High
ORB Low
Labels for ORB high/low
Optional 5-minute chart restriction
Lines extend forward for easy reference
Used to identify breakout conditions, liquidity sweeps, and directional bias into the morning session.
📌 2. ICT-Style Fair Value Gaps (FVGs)
Full automated detection of bullish & bearish FVGs based on the classic 3-candle displacement structure:
Bullish FVG: high < low
Bearish FVG: low > high
Each FVG is drawn as a box with:
Custom colour
Custom border style (solid, dashed, dotted)
Automatic extension to the right until filled
Optional size text showing the gap in points (font size/colour adjustable)
Adjustable max lookback for performance
📌 3. Inverted FVGs (iFVGs)
Once price fully fills an FVG, it automatically becomes an iFVG, shown with:
Custom iFVG colour
Custom border style
Extension to the right
Once price trades through the zone from the opposite side, the iFVG is considered “consumed” and:
It stops extending
And optionally auto-deletes based on user settings
This makes it easy to track meaningful imbalances that turn into liquidity pockets.
📌 4. “Show Only After ORB” Filter
Optionally hide all FVGs/iFVGs formed before the ORB completes.
This is especially useful for intraday strategies focused on NY session structure only.
📌 5. Daily 50% Midline (OHLC Midpoint)
A dynamic, always-updating midpoint of the current daily candle:
Mid = (Daily High + Daily Low) / 2
Features:
Custom colour
Dashed styling
Extends left and right as a horizontal ray
Updates live as the daily candle forms
Great for bias filters, mean reversion, and daily liquidity zones.
📌 6. Performance-Optimized (Fast!)
Built with:
Fully configurable max lookback
Memory-efficient arrays
Auto-cleaning of old FVG/iFVG objects
Lightweight daily midline recalculation
This allows extremely fast rendering even on 1-minute charts.
📌 7. Alerts
Includes a clean alert condition:
Price returned to a Fair Value Gap
Works for both bullish and bearish FVG revisits.
🎯 Who This Indicator Is For
This tool is ideal for traders who use:
ICT / SMC concepts
Liquidity-based trading
ORB strategies
Imbalance-driven price action
Intraday or NY session-focused setups
Futures, crypto, forex, and equities
🎁 Summary
This indicator gives you:
A clean ORB framework
Automatic, dynamic FVG and iFVG analysis
Real-time daily candle context
Customizable visuals
Powerful session filtering
Efficient performance
All in one clean, intuitive package built for real-time decision making.
3B / 3S System + 99 EMA + Camarilla Pivots3B / 3S System + 99 EMA + Camarilla Pivots, EMA5 above 2 candles buy or SELL
X VFI (LB) w absorptiona variation of the On-Balance Volume (OBV) introduced by Markos Katsanos and further refined by LazyBear, is a robust volume-based momentum oscillator designed to measure the strength and direction of money flow. It utilizes advanced filtering mechanisms to enhance signal quality for active trading environments. This version has added an absorption feature.
Core Functionality and Enhancements
Filtered Volume Flow: The VFI is calculated using the Typical Price (HLC/3) and incorporates filters for Volatility (coef) and Excessive Volume (vcoef). This ensures the indicator responds only to price changes supported by sustained, relevant volume, filtering out market noise and anomalous spikes.
Zero-Line Bias: VFI values above zero indicate net accumulation (bullish flow), while values below zero indicate net distribution (bearish flow).
Signal Line Timing (vfima): The Exponential Moving Average (EMA) of the VFI acts as the Signal Line. Crossovers between the VFI (fast line) and the Signal Line are primary triggers for trade entries and exits.
Absorption/Distribution Signals
This customized version introduces unique features to visually isolate periods where underlying volume conviction contradicts immediate price action—the most powerful setups for reversals and strong continuations.
Absorption/Distribution Highlighting:
The histogram's color is dynamically changed to highlight hidden buying or selling pressure:
(Absorption Signal): Indicates strong positive VFI momentum occurring on a bearish (down) candle. This signals aggressive buying absorption of supply, where large traders are accumulating positions despite brief selling pressure, often preceding a sharp upward move.
(Distribution Signal): Indicates strong negative VFI momentum occurring on a bullish (up) candle. This signals aggressive selling distribution into demand, where large traders are offloading positions into brief rallies, often preceding a sharp downward move.
Volume-Filtered Conviction: The visual intensity (transparency) of the signal color is adjusted based on a Volume Filter (minVolFilter). Darker, solid colors denote high-conviction signals supported by above-average volume, while transparent colors indicate lower-conviction signals.
Histogram Magnification:
The magnification input allows users to visually increase the height of the histogram bars (e.g., 2x). This enhances the immediate visual recognition of momentum acceleration or deceleration.
New Day Opening Gaps (1m 3:29-9:15)Precise Day Opening Gap IndicatorThis custom Pine Script indicator is designed for traders who rely on high-precision gap analysis, particularly for markets like the NSE/BSE.🎯 Core Functionality: Precision Gap IdentificationThis indicator calculates and highlights the exact price gap between the previous day's close and the current day's open. Unlike standard gap analysis that relies on higher timeframes, this script ensures accuracy by strictly using 1-minute data:Previous Close: Captured from the 1-minute candle closing at 3:29 PM (15:29).Current Open: Captured from the 1-minute candle opening at 9:15 AM (09:15).The resulting gap zone is plotted and automatically extends to the right, serving as a critical level for current price interaction.✨ Key Features1. Cross-Timeframe PersistenceThe gap markings are calculated based on the 1-minute chart but are displayed correctly and persist across all timeframes, including 5-minute, 15-minute, 1-hour, and even the Daily chart, ensuring consistency no matter how you analyze the price action.2. Controlled Historical ViewAvoid chart clutter with the "Number of Gaps to Show" input. Easily control how many historical day-opening gaps you want to display on your chart, allowing you to focus only on the most recent and relevant levels.3. Full CustomizationCustomize the look and feel to fit your charting style:Gap Zone: Adjust the color and opacity (transparency) of the gap box.Date Label: Toggle the date label display on/off and control its color, background, opacity, and size. The label is optimally placed at the top-right of the gap zone for clear visibility.🛠️ Recommended UseThis tool is perfect for intraday traders looking to:Identify immediate support and resistance zones based on overnight price action.Track where price action reacts to prior day gaps (filling or holding the gap).Maintain a clear visual reference of daily market openings.
Mambo MA & HAMambo MA & HA is a combined trend-view indicator that overlays Heikin Ashi direction markers and up to eight customizable moving averages on any chart.
The goal is to give a clear, uncluttered visual summary of short-term and long-term trend direction using both regular chart data and Heikin Ashi structure.
This indicator displays:
Heikin Ashi (HA) directional markers on the chart timeframe
Optional Heikin Ashi markers from a second, higher timeframe
Up to eight different moving averages (SMA, EMA, SMMA/RMA, WMA, VWMA)
Adjustable colors and transparency for visual layering
Offset controls for HA markers to prevent overlap with price candles
It is designed for visual clarity without altering the underlying price candles.
Heikin Ashi Direction Markers (Chart Timeframe)
The indicator generates HA OHLC values internally and compares the HA open and close:
Green (bullish) HA candle → triangle-up marker plotted above the bar
Red (bearish) HA candle → triangle-down marker plotted above the bar
The triangles use soft pastel colors for minimal obstruction:
Up marker: light green (rgb 204, 232, 204)
Down marker: light red (rgb 255, 204, 204)
The “HA Offset (chart TF ticks)” input lets users shift the triangle vertically in price terms to avoid overlapping the real candles or MAs.
Heikin Ashi Markers from a Second Timeframe
An optional second timeframe (default: 60m) shows additional HA direction:
Green HA (higher timeframe) → tiny triangle-up below the bar
Red HA (higher timeframe) → tiny triangle-down below the bar
This allows a trader to see higher-timeframe HA structure without switching charts.
The offset for the second timeframe is independent (“HA Offset (extra TF ticks)”).
Custom Moving Averages (Up to Eight)
The indicator includes eight individually configurable MAs, each with:
On/off visibility toggle
MA type
SMA
EMA
SMMA / RMA
WMA
VWMA
Source
Length
Color (with preset 70% transparency for visual stacking)
The default MA lengths are: 10, 20, 50, 100, 150, 200, 250, 300.
All MA colors are slightly transparent by design to avoid obscuring price bars and HA markers.
Purpose of the Indicator
This tool provides a simple combined view of:
Immediate trend direction (chart-TF HA markers)
Higher-timeframe HA trend bias (extra-TF markers)
Overall moving-average structure from short to very long periods
It is particularly useful for:
Monitoring trend continuation vs. reversal
Confirming entries with multi-TF Heikin Ashi direction
Identifying pullbacks relative to layered moving averages
Viewing trend context without switching timeframes
There are no signals, alerts, or strategy components.
It is strictly a visual trend-context tool.
Key Features Summary
Two-timeframe Heikin Ashi direction
Separate offsets for HA markers
Eight fully configurable MAs
Clean color scheme with low opacity
Non-intrusive overlays
Compatible with all markets and chart types
AP Capital – Volatility + High/Low Projection v1.1📌 AP Capital – Volatility + High/Low Projection v1.1
Predictive Daily Volatility • Session Logic • High/Low Projection Indicator
This indicator is designed to help traders visually understand daily volatility conditions, identify session-based turning points, and anticipate potential highs and lows of the day using statistical behavior observed across thousands of bars of intraday data.
It combines intraday session structure, volatility regime classification, and context from the previous day’s expansion to highlight high-probability areas where the market may set its daily high or daily low.
🔍 What This Indicator Does
1. Volatility Regime Detection
Each day is classified into:
🔴 High Volatility (trend continuation & expansion likely)
🟡 Normal Volatility
🔵 Low Volatility (chop, false breaks, mean-reversion common)
The background color automatically adapts so you always know what environment you're trading in.
2. Session-Based High/Low Identification
Different global sessions tend to create different market behaviors:
Asia session frequently sets the LOW of day
New York & Late US sessions frequently set the HIGH of day
This indicator uses those probabilities to highlight potential turning points.
3. Potential High / Low of Day Projections
The script plots:
🟢 Potential LOW of Day
🔴 Potential HIGH of Day
These appear only when:
Price hits the session-statistical turning zone
Volatility conditions match
Yesterday’s expansion or compression context agrees
This keeps signals clean and prevents over-marking.
4. Clean Visuals
Instead of cluttering the chart, highs and lows are marked only when conditions align, making this tool ideal for:
Session scalpers
Day traders
Gold / NAS100 / FX intraday traders
High-probability reversal traders
🧠 How It Works
The engine combines:
Daily range vs 20-day average
Real-time intraday high/low formation
Session-specific probability weighting
Previous day expansion and volatility filters
This results in highly reliable signals for:
Fade trades
Reversal setups
Timing entries more accurately
✔️ Best Uses
Identifying where the day’s range is likely to complete
Avoiding trades during low-volatility compression days
Detecting where the market is likely to turn during major sessions
Using potential HIGH/LOW levels as take-profit zones
Enhancing breakout or reversal strategies
⚠️ Disclaimer
This indicator does not repaint, but it is not a standalone entry tool.
It is designed to provide context, session awareness, and volatility-driven turning points to assist your existing strategy.
Always combine with sound risk management.
Directional Positional Option Selling Modelif you want to go dictional selling use it on 1 day or 4 hr chart
Dynamic Equity Allocation Model//@version=6
indicator('Dynamic Equity Allocation Model', shorttitle = 'DEAM', overlay = false, precision = 1, scale = scale.right, max_bars_back = 500)
// DYNAMIC EQUITY ALLOCATION MODEL
// Quantitative framework for dynamic portfolio allocation between stocks and cash.
// Analyzes five dimensions: market regime, risk metrics, valuation, sentiment,
// and macro conditions to generate allocation recommendations (0-100% equity).
//
// Uses real-time data from TradingView including fundamentals (P/E, ROE, ERP),
// volatility indicators (VIX), credit spreads, yield curves, and market structure.
// INPUT PARAMETERS
group1 = 'Model Configuration'
model_type = input.string('Adaptive', 'Allocation Model Type', options = , group = group1, tooltip = 'Conservative: Slower to increase equity, Aggressive: Faster allocation changes, Adaptive: Dynamic based on regime')
use_crisis_detection = input.bool(true, 'Enable Crisis Detection System', group = group1, tooltip = 'Automatic detection and response to crisis conditions')
use_regime_model = input.bool(true, 'Use Market Regime Detection', group = group1, tooltip = 'Identify Bull/Bear/Crisis regimes for dynamic allocation')
group2 = 'Portfolio Risk Management'
target_portfolio_volatility = input.float(12.0, 'Target Portfolio Volatility (%)', minval = 3, maxval = 20, step = 0.5, group = group2, tooltip = 'Target portfolio volatility (Cash reduces volatility: 50% Equity = ~10% vol, 100% Equity = ~20% vol)')
max_portfolio_drawdown = input.float(15.0, 'Maximum Portfolio Drawdown (%)', minval = 5, maxval = 35, step = 2.5, group = group2, tooltip = 'Maximum acceptable PORTFOLIO drawdown (not market drawdown - portfolio with cash has lower drawdown)')
enable_portfolio_risk_scaling = input.bool(true, 'Enable Portfolio Risk Scaling', group = group2, tooltip = 'Scale allocation based on actual portfolio risk characteristics (recommended)')
risk_lookback = input.int(252, 'Risk Calculation Period (Days)', minval = 60, maxval = 504, group = group2, tooltip = 'Period for calculating volatility and risk metrics')
group3 = 'Component Weights (Total = 100%)'
w_regime = input.float(35.0, 'Market Regime Weight (%)', minval = 0, maxval = 100, step = 5, group = group3)
w_risk = input.float(25.0, 'Risk Metrics Weight (%)', minval = 0, maxval = 100, step = 5, group = group3)
w_valuation = input.float(20.0, 'Valuation Weight (%)', minval = 0, maxval = 100, step = 5, group = group3)
w_sentiment = input.float(15.0, 'Sentiment Weight (%)', minval = 0, maxval = 100, step = 5, group = group3)
w_macro = input.float(5.0, 'Macro Weight (%)', minval = 0, maxval = 100, step = 5, group = group3)
group4 = 'Crisis Detection Thresholds'
crisis_vix_threshold = input.float(40, 'Crisis VIX Level', minval = 30, maxval = 80, group = group4, tooltip = 'VIX level indicating crisis conditions (COVID peaked at 82)')
crisis_drawdown_threshold = input.float(15, 'Crisis Drawdown Threshold (%)', minval = 10, maxval = 30, group = group4, tooltip = 'Market drawdown indicating crisis conditions')
crisis_credit_spread = input.float(500, 'Crisis Credit Spread (bps)', minval = 300, maxval = 1000, group = group4, tooltip = 'High yield spread indicating crisis conditions')
group5 = 'Display Settings'
show_components = input.bool(false, 'Show Component Breakdown', group = group5, tooltip = 'Display individual component analysis lines')
show_regime_background = input.bool(true, 'Show Dynamic Background', group = group5, tooltip = 'Color background based on allocation signals')
show_reference_lines = input.bool(false, 'Show Reference Lines', group = group5, tooltip = 'Display allocation percentage reference lines')
show_dashboard = input.bool(true, 'Show Analytics Dashboard', group = group5, tooltip = 'Display comprehensive analytics table')
show_confidence_bands = input.bool(false, 'Show Confidence Bands', group = group5, tooltip = 'Display uncertainty quantification bands')
smoothing_period = input.int(3, 'Smoothing Period', minval = 1, maxval = 10, group = group5, tooltip = 'Smoothing to reduce allocation noise')
background_intensity = input.int(95, 'Background Intensity (%)', minval = 90, maxval = 99, group = group5, tooltip = 'Higher values = more transparent background')
// Styling Options
color_scheme = input.string('EdgeTools', 'Color Theme', options = , group = 'Appearance', tooltip = 'Professional color themes')
use_dark_mode = input.bool(true, 'Optimize for Dark Theme', group = 'Appearance')
main_line_width = input.int(3, 'Main Line Width', minval = 1, maxval = 5, group = 'Appearance')
// DATA RETRIEVAL
// Market Data
sp500 = request.security('SPY', timeframe.period, close)
sp500_high = request.security('SPY', timeframe.period, high)
sp500_low = request.security('SPY', timeframe.period, low)
sp500_volume = request.security('SPY', timeframe.period, volume)
// Volatility Indicators
vix = request.security('VIX', timeframe.period, close)
vix9d = request.security('VIX9D', timeframe.period, close)
vxn = request.security('VXN', timeframe.period, close)
// Fixed Income and Credit
us2y = request.security('US02Y', timeframe.period, close)
us10y = request.security('US10Y', timeframe.period, close)
us3m = request.security('US03MY', timeframe.period, close)
hyg = request.security('HYG', timeframe.period, close)
lqd = request.security('LQD', timeframe.period, close)
tlt = request.security('TLT', timeframe.period, close)
// Safe Haven Assets
gold = request.security('GLD', timeframe.period, close)
usd = request.security('DXY', timeframe.period, close)
yen = request.security('JPYUSD', timeframe.period, close)
// Financial data with fallback values
get_financial_data(symbol, fin_id, period, fallback) =>
data = request.financial(symbol, fin_id, period, ignore_invalid_symbol = true)
na(data) ? fallback : data
// SPY fundamental metrics
spy_earnings_per_share = get_financial_data('AMEX:SPY', 'EARNINGS_PER_SHARE_BASIC', 'TTM', 20.0)
spy_operating_earnings_yield = get_financial_data('AMEX:SPY', 'OPERATING_EARNINGS_YIELD', 'FY', 4.5)
spy_dividend_yield = get_financial_data('AMEX:SPY', 'DIVIDENDS_YIELD', 'FY', 1.8)
spy_buyback_yield = get_financial_data('AMEX:SPY', 'BUYBACK_YIELD', 'FY', 2.0)
spy_net_margin = get_financial_data('AMEX:SPY', 'NET_MARGIN', 'TTM', 12.0)
spy_debt_to_equity = get_financial_data('AMEX:SPY', 'DEBT_TO_EQUITY', 'FY', 0.5)
spy_return_on_equity = get_financial_data('AMEX:SPY', 'RETURN_ON_EQUITY', 'FY', 15.0)
spy_free_cash_flow = get_financial_data('AMEX:SPY', 'FREE_CASH_FLOW', 'TTM', 100000000)
spy_ebitda = get_financial_data('AMEX:SPY', 'EBITDA', 'TTM', 200000000)
spy_pe_forward = get_financial_data('AMEX:SPY', 'PRICE_EARNINGS_FORWARD', 'FY', 18.0)
spy_total_debt = get_financial_data('AMEX:SPY', 'TOTAL_DEBT', 'FY', 500000000)
spy_total_equity = get_financial_data('AMEX:SPY', 'TOTAL_EQUITY', 'FY', 1000000000)
spy_enterprise_value = get_financial_data('AMEX:SPY', 'ENTERPRISE_VALUE', 'FY', 30000000000)
spy_revenue_growth = get_financial_data('AMEX:SPY', 'REVENUE_ONE_YEAR_GROWTH', 'TTM', 5.0)
// Market Breadth Indicators
nya = request.security('NYA', timeframe.period, close)
rut = request.security('IWM', timeframe.period, close)
// Sector Performance
xlk = request.security('XLK', timeframe.period, close)
xlu = request.security('XLU', timeframe.period, close)
xlf = request.security('XLF', timeframe.period, close)
// MARKET REGIME DETECTION
// Calculate Market Trend
sma_20 = ta.sma(sp500, 20)
sma_50 = ta.sma(sp500, 50)
sma_200 = ta.sma(sp500, 200)
ema_10 = ta.ema(sp500, 10)
// Market Structure Score
trend_strength = 0.0
trend_strength := trend_strength + (sp500 > sma_20 ? 1 : -1)
trend_strength := trend_strength + (sp500 > sma_50 ? 1 : -1)
trend_strength := trend_strength + (sp500 > sma_200 ? 2 : -2)
trend_strength := trend_strength + (sma_50 > sma_200 ? 2 : -2)
// Volatility Regime
returns = math.log(sp500 / sp500 )
realized_vol_20d = ta.stdev(returns, 20) * math.sqrt(252) * 100
realized_vol_60d = ta.stdev(returns, 60) * math.sqrt(252) * 100
ewma_vol = ta.ema(math.pow(returns, 2), 20)
realized_vol = math.sqrt(ewma_vol * 252) * 100
vol_premium = vix - realized_vol
// Drawdown Calculation
running_max = ta.highest(sp500, risk_lookback)
current_drawdown = (running_max - sp500) / running_max * 100
// Regime Score
regime_score = 0.0
// Trend Component (40%)
if trend_strength >= 4
regime_score := regime_score + 40
regime_score
else if trend_strength >= 2
regime_score := regime_score + 30
regime_score
else if trend_strength >= 0
regime_score := regime_score + 20
regime_score
else if trend_strength >= -2
regime_score := regime_score + 10
regime_score
else
regime_score := regime_score + 0
regime_score
// Volatility Component (30%)
if vix < 15
regime_score := regime_score + 30
regime_score
else if vix < 20
regime_score := regime_score + 25
regime_score
else if vix < 25
regime_score := regime_score + 15
regime_score
else if vix < 35
regime_score := regime_score + 5
regime_score
else
regime_score := regime_score + 0
regime_score
// Drawdown Component (30%)
if current_drawdown < 3
regime_score := regime_score + 30
regime_score
else if current_drawdown < 7
regime_score := regime_score + 20
regime_score
else if current_drawdown < 12
regime_score := regime_score + 10
regime_score
else if current_drawdown < 20
regime_score := regime_score + 5
regime_score
else
regime_score := regime_score + 0
regime_score
// Classify Regime
market_regime = regime_score >= 80 ? 'Strong Bull' : regime_score >= 60 ? 'Bull Market' : regime_score >= 40 ? 'Neutral' : regime_score >= 20 ? 'Correction' : regime_score >= 10 ? 'Bear Market' : 'Crisis'
// RISK-BASED ALLOCATION
// Calculate Market Risk
parkinson_hl = math.log(sp500_high / sp500_low)
parkinson_vol = parkinson_hl / (2 * math.sqrt(math.log(2))) * math.sqrt(252) * 100
garman_klass_vol = math.sqrt((0.5 * math.pow(math.log(sp500_high / sp500_low), 2) - (2 * math.log(2) - 1) * math.pow(math.log(sp500 / sp500 ), 2)) * 252) * 100
market_volatility_20d = math.max(ta.stdev(returns, 20) * math.sqrt(252) * 100, parkinson_vol)
market_volatility_60d = ta.stdev(returns, 60) * math.sqrt(252) * 100
market_drawdown = current_drawdown
// Initialize risk allocation
risk_allocation = 50.0
if enable_portfolio_risk_scaling
// Volatility-based allocation
vol_based_allocation = target_portfolio_volatility / math.max(market_volatility_20d, 5.0) * 100
vol_based_allocation := math.max(0, math.min(100, vol_based_allocation))
// Drawdown-based allocation
dd_based_allocation = 100.0
if market_drawdown > 1.0
dd_based_allocation := max_portfolio_drawdown / market_drawdown * 100
dd_based_allocation := math.max(0, math.min(100, dd_based_allocation))
dd_based_allocation
// Combine (conservative)
risk_allocation := math.min(vol_based_allocation, dd_based_allocation)
// Dynamic adjustment
current_equity_estimate = 50.0
estimated_portfolio_vol = current_equity_estimate / 100 * market_volatility_20d
estimated_portfolio_dd = current_equity_estimate / 100 * market_drawdown
vol_utilization = estimated_portfolio_vol / target_portfolio_volatility
dd_utilization = estimated_portfolio_dd / max_portfolio_drawdown
risk_utilization = math.max(vol_utilization, dd_utilization)
risk_adjustment_factor = 1.0
if risk_utilization > 1.0
risk_adjustment_factor := math.exp(-0.5 * (risk_utilization - 1.0))
risk_adjustment_factor := math.max(0.5, risk_adjustment_factor)
risk_adjustment_factor
else if risk_utilization < 0.9
risk_adjustment_factor := 1.0 + 0.2 * math.log(1.0 / risk_utilization)
risk_adjustment_factor := math.min(1.3, risk_adjustment_factor)
risk_adjustment_factor
risk_allocation := risk_allocation * risk_adjustment_factor
risk_allocation
else
vol_scalar = target_portfolio_volatility / math.max(market_volatility_20d, 10)
vol_scalar := math.min(1.5, math.max(0.2, vol_scalar))
drawdown_penalty = 0.0
if current_drawdown > max_portfolio_drawdown
drawdown_penalty := (current_drawdown - max_portfolio_drawdown) / max_portfolio_drawdown
drawdown_penalty := math.min(1.0, drawdown_penalty)
drawdown_penalty
risk_allocation := 100 * vol_scalar * (1 - drawdown_penalty)
risk_allocation
risk_allocation := math.max(0, math.min(100, risk_allocation))
// VALUATION ANALYSIS
// Valuation Metrics
actual_pe_ratio = spy_earnings_per_share > 0 ? sp500 / spy_earnings_per_share : spy_pe_forward
actual_earnings_yield = nz(spy_operating_earnings_yield, 0) > 0 ? spy_operating_earnings_yield : 100 / actual_pe_ratio
total_shareholder_yield = spy_dividend_yield + spy_buyback_yield
// Equity Risk Premium (multi-method calculation)
method1_erp = actual_earnings_yield - us10y
method2_erp = actual_earnings_yield + spy_buyback_yield - us10y
payout_ratio = spy_dividend_yield > 0 and actual_earnings_yield > 0 ? spy_dividend_yield / actual_earnings_yield : 0.4
sustainable_growth = spy_return_on_equity * (1 - payout_ratio) / 100
method3_erp = spy_dividend_yield + sustainable_growth * 100 - us10y
implied_growth = spy_revenue_growth * 0.7
method4_erp = total_shareholder_yield + implied_growth - us10y
equity_risk_premium = method1_erp * 0.35 + method2_erp * 0.30 + method3_erp * 0.20 + method4_erp * 0.15
ev_ebitda_ratio = spy_enterprise_value > 0 and spy_ebitda > 0 ? spy_enterprise_value / spy_ebitda : 15.0
debt_equity_health = spy_debt_to_equity < 1.0 ? 1.2 : spy_debt_to_equity < 2.0 ? 1.0 : 0.8
// Valuation Score
base_valuation_score = 50.0
if equity_risk_premium > 4
base_valuation_score := 95
base_valuation_score
else if equity_risk_premium > 3
base_valuation_score := 85
base_valuation_score
else if equity_risk_premium > 2
base_valuation_score := 70
base_valuation_score
else if equity_risk_premium > 1
base_valuation_score := 55
base_valuation_score
else if equity_risk_premium > 0
base_valuation_score := 40
base_valuation_score
else if equity_risk_premium > -1
base_valuation_score := 25
base_valuation_score
else
base_valuation_score := 10
base_valuation_score
growth_adjustment = spy_revenue_growth > 10 ? 10 : spy_revenue_growth > 5 ? 5 : 0
margin_adjustment = spy_net_margin > 15 ? 5 : spy_net_margin < 8 ? -5 : 0
roe_adjustment = spy_return_on_equity > 20 ? 5 : spy_return_on_equity < 10 ? -5 : 0
valuation_score = base_valuation_score + growth_adjustment + margin_adjustment + roe_adjustment
valuation_score := math.max(0, math.min(100, valuation_score * debt_equity_health))
// SENTIMENT ANALYSIS
// VIX Term Structure
vix_term_structure = vix9d > 0 ? vix / vix9d : 1
backwardation = vix_term_structure > 1.05
steep_backwardation = vix_term_structure > 1.15
// Safe Haven Flows
gold_momentum = ta.roc(gold, 20)
dollar_momentum = ta.roc(usd, 20)
yen_momentum = ta.roc(yen, 20)
treasury_momentum = ta.roc(tlt, 20)
safe_haven_flow = gold_momentum * 0.3 + treasury_momentum * 0.3 + dollar_momentum * 0.25 + yen_momentum * 0.15
// Advanced Sentiment Analysis
vix_percentile = ta.percentrank(vix, 252)
vix_zscore = (vix - ta.sma(vix, 252)) / ta.stdev(vix, 252)
vix_momentum = ta.roc(vix, 5)
vvix_proxy = ta.stdev(vix_momentum, 20) * math.sqrt(252)
risk_reversal_proxy = (vix - realized_vol) / realized_vol
// Sentiment Score
base_sentiment = 50.0
vix_adjustment = 0.0
if vix_zscore < -1.5
vix_adjustment := 40
vix_adjustment
else if vix_zscore < -0.5
vix_adjustment := 20
vix_adjustment
else if vix_zscore < 0.5
vix_adjustment := 0
vix_adjustment
else if vix_zscore < 1.5
vix_adjustment := -20
vix_adjustment
else
vix_adjustment := -40
vix_adjustment
term_structure_adjustment = backwardation ? -15 : steep_backwardation ? -30 : 5
vvix_adjustment = vvix_proxy > 2.0 ? -10 : vvix_proxy < 1.0 ? 10 : 0
sentiment_score = base_sentiment + vix_adjustment + term_structure_adjustment + vvix_adjustment
sentiment_score := math.max(0, math.min(100, sentiment_score))
// MACRO ANALYSIS
// Yield Curve
yield_spread_2_10 = us10y - us2y
yield_spread_3m_10 = us10y - us3m
// Credit Conditions
hyg_return = ta.roc(hyg, 20)
lqd_return = ta.roc(lqd, 20)
tlt_return = ta.roc(tlt, 20)
hyg_duration = 4.0
lqd_duration = 8.0
tlt_duration = 17.0
hyg_log_returns = math.log(hyg / hyg )
lqd_log_returns = math.log(lqd / lqd )
hyg_volatility = ta.stdev(hyg_log_returns, 20) * math.sqrt(252)
lqd_volatility = ta.stdev(lqd_log_returns, 20) * math.sqrt(252)
hyg_yield_proxy = -math.log(hyg / hyg ) * 100
lqd_yield_proxy = -math.log(lqd / lqd ) * 100
tlt_yield = us10y
hyg_spread = (hyg_yield_proxy - tlt_yield) * 100
lqd_spread = (lqd_yield_proxy - tlt_yield) * 100
hyg_distance = (hyg - ta.lowest(hyg, 252)) / (ta.highest(hyg, 252) - ta.lowest(hyg, 252))
lqd_distance = (lqd - ta.lowest(lqd, 252)) / (ta.highest(lqd, 252) - ta.lowest(lqd, 252))
default_risk_proxy = 2.0 - (hyg_distance + lqd_distance)
credit_spread = hyg_spread * 0.5 + (hyg_volatility - lqd_volatility) * 1000 * 0.3 + default_risk_proxy * 200 * 0.2
credit_spread := math.max(50, credit_spread)
credit_market_health = hyg_return > lqd_return ? 1 : -1
flight_to_quality = tlt_return > (hyg_return + lqd_return) / 2
// Macro Score
macro_score = 50.0
yield_curve_score = 0
if yield_spread_2_10 > 1.5 and yield_spread_3m_10 > 2
yield_curve_score := 40
yield_curve_score
else if yield_spread_2_10 > 0.5 and yield_spread_3m_10 > 1
yield_curve_score := 30
yield_curve_score
else if yield_spread_2_10 > 0 and yield_spread_3m_10 > 0
yield_curve_score := 20
yield_curve_score
else if yield_spread_2_10 < 0 or yield_spread_3m_10 < 0
yield_curve_score := 10
yield_curve_score
else
yield_curve_score := 5
yield_curve_score
credit_conditions_score = 0
if credit_spread < 200 and not flight_to_quality
credit_conditions_score := 30
credit_conditions_score
else if credit_spread < 400 and credit_market_health > 0
credit_conditions_score := 20
credit_conditions_score
else if credit_spread < 600
credit_conditions_score := 15
credit_conditions_score
else if credit_spread < 1000
credit_conditions_score := 10
credit_conditions_score
else
credit_conditions_score := 0
credit_conditions_score
financial_stability_score = 0
if spy_debt_to_equity < 0.5 and spy_return_on_equity > 15
financial_stability_score := 20
financial_stability_score
else if spy_debt_to_equity < 1.0 and spy_return_on_equity > 10
financial_stability_score := 15
financial_stability_score
else if spy_debt_to_equity < 1.5
financial_stability_score := 10
financial_stability_score
else
financial_stability_score := 5
financial_stability_score
macro_score := yield_curve_score + credit_conditions_score + financial_stability_score
macro_score := math.max(0, math.min(100, macro_score))
// CRISIS DETECTION
crisis_indicators = 0
if vix > crisis_vix_threshold
crisis_indicators := crisis_indicators + 1
crisis_indicators
if vix > 60
crisis_indicators := crisis_indicators + 2
crisis_indicators
if current_drawdown > crisis_drawdown_threshold
crisis_indicators := crisis_indicators + 1
crisis_indicators
if current_drawdown > 25
crisis_indicators := crisis_indicators + 1
crisis_indicators
if credit_spread > crisis_credit_spread
crisis_indicators := crisis_indicators + 1
crisis_indicators
sp500_roc_5 = ta.roc(sp500, 5)
tlt_roc_5 = ta.roc(tlt, 5)
if sp500_roc_5 < -10 and tlt_roc_5 < -5
crisis_indicators := crisis_indicators + 2
crisis_indicators
volume_spike = sp500_volume > ta.sma(sp500_volume, 20) * 2
sp500_roc_1 = ta.roc(sp500, 1)
if volume_spike and sp500_roc_1 < -3
crisis_indicators := crisis_indicators + 1
crisis_indicators
is_crisis = crisis_indicators >= 3
is_severe_crisis = crisis_indicators >= 5
// FINAL ALLOCATION CALCULATION
// Convert regime to base allocation
regime_allocation = market_regime == 'Strong Bull' ? 100 : market_regime == 'Bull Market' ? 80 : market_regime == 'Neutral' ? 60 : market_regime == 'Correction' ? 40 : market_regime == 'Bear Market' ? 20 : 0
// Normalize weights
total_weight = w_regime + w_risk + w_valuation + w_sentiment + w_macro
w_regime_norm = w_regime / total_weight
w_risk_norm = w_risk / total_weight
w_valuation_norm = w_valuation / total_weight
w_sentiment_norm = w_sentiment / total_weight
w_macro_norm = w_macro / total_weight
// Calculate Weighted Allocation
weighted_allocation = regime_allocation * w_regime_norm + risk_allocation * w_risk_norm + valuation_score * w_valuation_norm + sentiment_score * w_sentiment_norm + macro_score * w_macro_norm
// Apply Crisis Override
if use_crisis_detection
if is_severe_crisis
weighted_allocation := math.min(weighted_allocation, 10)
weighted_allocation
else if is_crisis
weighted_allocation := math.min(weighted_allocation, 25)
weighted_allocation
// Model Type Adjustment
model_adjustment = 0.0
if model_type == 'Conservative'
model_adjustment := -10
model_adjustment
else if model_type == 'Aggressive'
model_adjustment := 10
model_adjustment
else if model_type == 'Adaptive'
recent_return = (sp500 - sp500 ) / sp500 * 100
if recent_return > 5
model_adjustment := 5
model_adjustment
else if recent_return < -5
model_adjustment := -5
model_adjustment
// Apply adjustment and bounds
final_allocation = weighted_allocation + model_adjustment
final_allocation := math.max(0, math.min(100, final_allocation))
// Smooth allocation
smoothed_allocation = ta.sma(final_allocation, smoothing_period)
// Calculate portfolio risk metrics (only for internal alerts)
actual_portfolio_volatility = smoothed_allocation / 100 * market_volatility_20d
actual_portfolio_drawdown = smoothed_allocation / 100 * current_drawdown
// VISUALIZATION
// Color definitions
var color primary_color = #2196F3
var color bullish_color = #4CAF50
var color bearish_color = #FF5252
var color neutral_color = #808080
var color text_color = color.white
var color bg_color = #000000
var color table_bg_color = #1E1E1E
var color header_bg_color = #2D2D2D
switch color_scheme // Apply color scheme
'Gold' =>
primary_color := use_dark_mode ? #FFD700 : #DAA520
bullish_color := use_dark_mode ? #FFA500 : #FF8C00
bearish_color := use_dark_mode ? #FF5252 : #D32F2F
neutral_color := use_dark_mode ? #C0C0C0 : #808080
text_color := use_dark_mode ? color.white : color.black
bg_color := use_dark_mode ? #000000 : #FFFFFF
table_bg_color := use_dark_mode ? #1A1A00 : #FFFEF0
header_bg_color := use_dark_mode ? #2D2600 : #F5F5DC
header_bg_color
'EdgeTools' =>
primary_color := use_dark_mode ? #4682B4 : #1E90FF
bullish_color := use_dark_mode ? #4CAF50 : #388E3C
bearish_color := use_dark_mode ? #FF5252 : #D32F2F
neutral_color := use_dark_mode ? #708090 : #696969
text_color := use_dark_mode ? color.white : color.black
bg_color := use_dark_mode ? #000000 : #FFFFFF
table_bg_color := use_dark_mode ? #0F1419 : #F0F8FF
header_bg_color := use_dark_mode ? #1E2A3A : #E6F3FF
header_bg_color
'Behavioral' =>
primary_color := #808080
bullish_color := #00FF00
bearish_color := #8B0000
neutral_color := #FFBF00
text_color := use_dark_mode ? color.white : color.black
bg_color := use_dark_mode ? #000000 : #FFFFFF
table_bg_color := use_dark_mode ? #1A1A1A : #F8F8F8
header_bg_color := use_dark_mode ? #2D2D2D : #E8E8E8
header_bg_color
'Quant' =>
primary_color := #808080
bullish_color := #FFA500
bearish_color := #8B0000
neutral_color := #4682B4
text_color := use_dark_mode ? color.white : color.black
bg_color := use_dark_mode ? #000000 : #FFFFFF
table_bg_color := use_dark_mode ? #0D0D0D : #FAFAFA
header_bg_color := use_dark_mode ? #1A1A1A : #F0F0F0
header_bg_color
'Ocean' =>
primary_color := use_dark_mode ? #20B2AA : #008B8B
bullish_color := use_dark_mode ? #00CED1 : #4682B4
bearish_color := use_dark_mode ? #FF4500 : #B22222
neutral_color := use_dark_mode ? #87CEEB : #2F4F4F
text_color := use_dark_mode ? #F0F8FF : #191970
bg_color := use_dark_mode ? #001F3F : #F0F8FF
table_bg_color := use_dark_mode ? #001A2E : #E6F7FF
header_bg_color := use_dark_mode ? #002A47 : #CCF2FF
header_bg_color
'Fire' =>
primary_color := use_dark_mode ? #FF6347 : #DC143C
bullish_color := use_dark_mode ? #FFD700 : #FF8C00
bearish_color := use_dark_mode ? #8B0000 : #800000
neutral_color := use_dark_mode ? #FFA500 : #CD853F
text_color := use_dark_mode ? #FFFAF0 : #2F1B14
bg_color := use_dark_mode ? #2F1B14 : #FFFAF0
table_bg_color := use_dark_mode ? #261611 : #FFF8F0
header_bg_color := use_dark_mode ? #3D241A : #FFE4CC
header_bg_color
'Matrix' =>
primary_color := use_dark_mode ? #00FF41 : #006400
bullish_color := use_dark_mode ? #39FF14 : #228B22
bearish_color := use_dark_mode ? #FF073A : #8B0000
neutral_color := use_dark_mode ? #00FFFF : #008B8B
text_color := use_dark_mode ? #C0FF8C : #003300
bg_color := use_dark_mode ? #0D1B0D : #F0FFF0
table_bg_color := use_dark_mode ? #0A1A0A : #E8FFF0
header_bg_color := use_dark_mode ? #112B11 : #CCFFCC
header_bg_color
'Arctic' =>
primary_color := use_dark_mode ? #87CEFA : #4169E1
bullish_color := use_dark_mode ? #00BFFF : #0000CD
bearish_color := use_dark_mode ? #FF1493 : #8B008B
neutral_color := use_dark_mode ? #B0E0E6 : #483D8B
text_color := use_dark_mode ? #F8F8FF : #191970
bg_color := use_dark_mode ? #191970 : #F8F8FF
table_bg_color := use_dark_mode ? #141B47 : #F0F8FF
header_bg_color := use_dark_mode ? #1E2A5C : #E0F0FF
header_bg_color
// Transparency settings
bg_transparency = use_dark_mode ? 85 : 92
zone_transparency = use_dark_mode ? 90 : 95
band_transparency = use_dark_mode ? 70 : 85
table_transparency = use_dark_mode ? 80 : 15
// Allocation color
alloc_color = smoothed_allocation >= 80 ? bullish_color : smoothed_allocation >= 60 ? color.new(bullish_color, 30) : smoothed_allocation >= 40 ? primary_color : smoothed_allocation >= 20 ? color.new(bearish_color, 30) : bearish_color
// Dynamic background
var color dynamic_bg_color = na
if show_regime_background
if smoothed_allocation >= 70
dynamic_bg_color := color.new(bullish_color, background_intensity)
dynamic_bg_color
else if smoothed_allocation <= 30
dynamic_bg_color := color.new(bearish_color, background_intensity)
dynamic_bg_color
else if smoothed_allocation > 60 or smoothed_allocation < 40
dynamic_bg_color := color.new(primary_color, math.min(99, background_intensity + 2))
dynamic_bg_color
bgcolor(dynamic_bg_color, title = 'Allocation Signal Background')
// Plot main allocation line
plot(smoothed_allocation, 'Equity Allocation %', color = alloc_color, linewidth = math.max(1, main_line_width))
// Reference lines (static colors for hline)
hline_bullish_color = color_scheme == 'Gold' ? use_dark_mode ? #FFA500 : #FF8C00 : color_scheme == 'EdgeTools' ? use_dark_mode ? #4CAF50 : #388E3C : color_scheme == 'Behavioral' ? #00FF00 : color_scheme == 'Quant' ? #FFA500 : color_scheme == 'Ocean' ? use_dark_mode ? #00CED1 : #4682B4 : color_scheme == 'Fire' ? use_dark_mode ? #FFD700 : #FF8C00 : color_scheme == 'Matrix' ? use_dark_mode ? #39FF14 : #228B22 : color_scheme == 'Arctic' ? use_dark_mode ? #00BFFF : #0000CD : #4CAF50
hline_bearish_color = color_scheme == 'Gold' ? use_dark_mode ? #FF5252 : #D32F2F : color_scheme == 'EdgeTools' ? use_dark_mode ? #FF5252 : #D32F2F : color_scheme == 'Behavioral' ? #8B0000 : color_scheme == 'Quant' ? #8B0000 : color_scheme == 'Ocean' ? use_dark_mode ? #FF4500 : #B22222 : color_scheme == 'Fire' ? use_dark_mode ? #8B0000 : #800000 : color_scheme == 'Matrix' ? use_dark_mode ? #FF073A : #8B0000 : color_scheme == 'Arctic' ? use_dark_mode ? #FF1493 : #8B008B : #FF5252
hline_primary_color = color_scheme == 'Gold' ? use_dark_mode ? #FFD700 : #DAA520 : color_scheme == 'EdgeTools' ? use_dark_mode ? #4682B4 : #1E90FF : color_scheme == 'Behavioral' ? #808080 : color_scheme == 'Quant' ? #808080 : color_scheme == 'Ocean' ? use_dark_mode ? #20B2AA : #008B8B : color_scheme == 'Fire' ? use_dark_mode ? #FF6347 : #DC143C : color_scheme == 'Matrix' ? use_dark_mode ? #00FF41 : #006400 : color_scheme == 'Arctic' ? use_dark_mode ? #87CEFA : #4169E1 : #2196F3
hline(show_reference_lines ? 100 : na, '100% Equity', color = color.new(hline_bullish_color, 70), linestyle = hline.style_dotted, linewidth = 1)
hline(show_reference_lines ? 80 : na, '80% Equity', color = color.new(hline_bullish_color, 40), linestyle = hline.style_dashed, linewidth = 1)
hline(show_reference_lines ? 60 : na, '60% Equity', color = color.new(hline_bullish_color, 60), linestyle = hline.style_dotted, linewidth = 1)
hline(50, '50% Balanced', color = color.new(hline_primary_color, 50), linestyle = hline.style_solid, linewidth = 2)
hline(show_reference_lines ? 40 : na, '40% Equity', color = color.new(hline_bearish_color, 60), linestyle = hline.style_dotted, linewidth = 1)
hline(show_reference_lines ? 20 : na, '20% Equity', color = color.new(hline_bearish_color, 40), linestyle = hline.style_dashed, linewidth = 1)
hline(show_reference_lines ? 0 : na, '0% Equity', color = color.new(hline_bearish_color, 70), linestyle = hline.style_dotted, linewidth = 1)
// Component plots
plot(show_components ? regime_allocation : na, 'Regime', color = color.new(#4ECDC4, 70), linewidth = 1)
plot(show_components ? risk_allocation : na, 'Risk', color = color.new(#FF6B6B, 70), linewidth = 1)
plot(show_components ? valuation_score : na, 'Valuation', color = color.new(#45B7D1, 70), linewidth = 1)
plot(show_components ? sentiment_score : na, 'Sentiment', color = color.new(#FFD93D, 70), linewidth = 1)
plot(show_components ? macro_score : na, 'Macro', color = color.new(#6BCF7F, 70), linewidth = 1)
// Confidence bands
upper_band = plot(show_confidence_bands ? math.min(100, smoothed_allocation + ta.stdev(smoothed_allocation, 20)) : na, color = color.new(neutral_color, band_transparency), display = display.none, title = 'Upper Band')
lower_band = plot(show_confidence_bands ? math.max(0, smoothed_allocation - ta.stdev(smoothed_allocation, 20)) : na, color = color.new(neutral_color, band_transparency), display = display.none, title = 'Lower Band')
fill(upper_band, lower_band, color = show_confidence_bands ? color.new(neutral_color, zone_transparency) : na, title = 'Uncertainty')
// DASHBOARD
if show_dashboard and barstate.islast
var table dashboard = table.new(position.top_right, 2, 20, border_width = 1, bgcolor = color.new(table_bg_color, table_transparency))
table.clear(dashboard, 0, 0, 1, 19)
// Header
header_color = color.new(header_bg_color, 20)
dashboard_text_color = text_color
table.cell(dashboard, 0, 0, 'DEAM', text_color = dashboard_text_color, bgcolor = header_color, text_size = size.normal)
table.cell(dashboard, 1, 0, model_type, text_color = dashboard_text_color, bgcolor = header_color, text_size = size.normal)
// Core metrics
table.cell(dashboard, 0, 1, 'Equity Allocation', text_color = dashboard_text_color, text_size = size.small)
table.cell(dashboard, 1, 1, str.tostring(smoothed_allocation, '##.#') + '%', text_color = alloc_color, text_size = size.small)
table.cell(dashboard, 0, 2, 'Cash Allocation', text_color = dashboard_text_color, text_size = size.small)
cash_color = 100 - smoothed_allocation > 70 ? bearish_color : primary_color
table.cell(dashboard, 1, 2, str.tostring(100 - smoothed_allocation, '##.#') + '%', text_color = cash_color, text_size = size.small)
// Signal
signal_text = 'NEUTRAL'
signal_color = primary_color
if smoothed_allocation >= 70
signal_text := 'BULLISH'
signal_color := bullish_color
signal_color
else if smoothed_allocation <= 30
signal_text := 'BEARISH'
signal_color := bearish_color
signal_color
table.cell(dashboard, 0, 3, 'Signal', text_color = dashboard_text_color, text_size = size.small)
table.cell(dashboard, 1, 3, signal_text, text_color = signal_color, text_size = size.small)
// Market Regime
table.cell(dashboard, 0, 4, 'Regime', text_color = dashboard_text_color, text_size = size.small)
regime_color_display = market_regime == 'Strong Bull' or market_regime == 'Bull Market' ? bullish_color : market_regime == 'Neutral' ? primary_color : market_regime == 'Crisis' ? bearish_color : bearish_color
table.cell(dashboard, 1, 4, market_regime, text_color = regime_color_display, text_size = size.small)
// VIX
table.cell(dashboard, 0, 5, 'VIX Level', text_color = dashboard_text_color, text_size = size.small)
vix_color_display = vix < 20 ? bullish_color : vix < 30 ? primary_color : bearish_color
table.cell(dashboard, 1, 5, str.tostring(vix, '##.##'), text_color = vix_color_display, text_size = size.small)
// Market Drawdown
table.cell(dashboard, 0, 6, 'Market DD', text_color = dashboard_text_color, text_size = size.small)
market_dd_color = current_drawdown < 5 ? bullish_color : current_drawdown < 10 ? primary_color : bearish_color
table.cell(dashboard, 1, 6, '-' + str.tostring(current_drawdown, '##.#') + '%', text_color = market_dd_color, text_size = size.small)
// Crisis Detection
table.cell(dashboard, 0, 7, 'Crisis Detection', text_color = dashboard_text_color, text_size = size.small)
crisis_text = is_severe_crisis ? 'SEVERE' : is_crisis ? 'CRISIS' : 'Normal'
crisis_display_color = is_severe_crisis or is_crisis ? bearish_color : bullish_color
table.cell(dashboard, 1, 7, crisis_text, text_color = crisis_display_color, text_size = size.small)
// Real Data Section
financial_bg = color.new(primary_color, 85)
table.cell(dashboard, 0, 8, 'REAL DATA', text_color = dashboard_text_color, bgcolor = financial_bg, text_size = size.small)
table.cell(dashboard, 1, 8, 'Live Metrics', text_color = dashboard_text_color, bgcolor = financial_bg, text_size = size.small)
// P/E Ratio
table.cell(dashboard, 0, 9, 'P/E Ratio', text_color = dashboard_text_color, text_size = size.small)
pe_color = actual_pe_ratio < 18 ? bullish_color : actual_pe_ratio < 25 ? primary_color : bearish_color
table.cell(dashboard, 1, 9, str.tostring(actual_pe_ratio, '##.#'), text_color = pe_color, text_size = size.small)
// ERP
table.cell(dashboard, 0, 10, 'ERP', text_color = dashboard_text_color, text_size = size.small)
erp_color = equity_risk_premium > 2 ? bullish_color : equity_risk_premium > 0 ? primary_color : bearish_color
table.cell(dashboard, 1, 10, str.tostring(equity_risk_premium, '##.##') + '%', text_color = erp_color, text_size = size.small)
// ROE
table.cell(dashboard, 0, 11, 'ROE', text_color = dashboard_text_color, text_size = size.small)
roe_color = spy_return_on_equity > 20 ? bullish_color : spy_return_on_equity > 10 ? primary_color : bearish_color
table.cell(dashboard, 1, 11, str.tostring(spy_return_on_equity, '##.#') + '%', text_color = roe_color, text_size = size.small)
// D/E Ratio
table.cell(dashboard, 0, 12, 'D/E Ratio', text_color = dashboard_text_color, text_size = size.small)
de_color = spy_debt_to_equity < 0.5 ? bullish_color : spy_debt_to_equity < 1.0 ? primary_color : bearish_color
table.cell(dashboard, 1, 12, str.tostring(spy_debt_to_equity, '##.##'), text_color = de_color, text_size = size.small)
// Shareholder Yield
table.cell(dashboard, 0, 13, 'Dividend+Buyback', text_color = dashboard_text_color, text_size = size.small)
yield_color = total_shareholder_yield > 4 ? bullish_color : total_shareholder_yield > 2 ? primary_color : bearish_color
table.cell(dashboard, 1, 13, str.tostring(total_shareholder_yield, '##.#') + '%', text_color = yield_color, text_size = size.small)
// Component Scores
component_bg = color.new(neutral_color, 80)
table.cell(dashboard, 0, 14, 'Components', text_color = dashboard_text_color, bgcolor = component_bg, text_size = size.small)
table.cell(dashboard, 1, 14, 'Scores', text_color = dashboard_text_color, bgcolor = component_bg, text_size = size.small)
table.cell(dashboard, 0, 15, 'Regime', text_color = dashboard_text_color, text_size = size.small)
regime_score_color = regime_allocation > 60 ? bullish_color : regime_allocation < 40 ? bearish_color : primary_color
table.cell(dashboard, 1, 15, str.tostring(regime_allocation, '##'), text_color = regime_score_color, text_size = size.small)
table.cell(dashboard, 0, 16, 'Risk', text_color = dashboard_text_color, text_size = size.small)
risk_score_color = risk_allocation > 60 ? bullish_color : risk_allocation < 40 ? bearish_color : primary_color
table.cell(dashboard, 1, 16, str.tostring(risk_allocation, '##'), text_color = risk_score_color, text_size = size.small)
table.cell(dashboard, 0, 17, 'Valuation', text_color = dashboard_text_color, text_size = size.small)
val_score_color = valuation_score > 60 ? bullish_color : valuation_score < 40 ? bearish_color : primary_color
table.cell(dashboard, 1, 17, str.tostring(valuation_score, '##'), text_color = val_score_color, text_size = size.small)
table.cell(dashboard, 0, 18, 'Sentiment', text_color = dashboard_text_color, text_size = size.small)
sent_score_color = sentiment_score > 60 ? bullish_color : sentiment_score < 40 ? bearish_color : primary_color
table.cell(dashboard, 1, 18, str.tostring(sentiment_score, '##'), text_color = sent_score_color, text_size = size.small)
table.cell(dashboard, 0, 19, 'Macro', text_color = dashboard_text_color, text_size = size.small)
macro_score_color = macro_score > 60 ? bullish_color : macro_score < 40 ? bearish_color : primary_color
table.cell(dashboard, 1, 19, str.tostring(macro_score, '##'), text_color = macro_score_color, text_size = size.small)
// ALERTS
// Major allocation changes
alertcondition(smoothed_allocation >= 80 and smoothed_allocation < 80, 'High Equity Allocation', 'Equity allocation reached 80% - Bull market conditions')
alertcondition(smoothed_allocation <= 20 and smoothed_allocation > 20, 'Low Equity Allocation', 'Equity allocation dropped to 20% - Defensive positioning')
// Crisis alerts
alertcondition(is_crisis and not is_crisis , 'CRISIS DETECTED', 'Crisis conditions detected - Reducing equity allocation')
alertcondition(is_severe_crisis and not is_severe_crisis , 'SEVERE CRISIS', 'Severe crisis detected - Maximum defensive positioning')
// Regime changes
regime_changed = market_regime != market_regime
alertcondition(regime_changed, 'Regime Change', 'Market regime has changed')
// Risk management alerts
risk_breach = enable_portfolio_risk_scaling and (actual_portfolio_volatility > target_portfolio_volatility * 1.2 or actual_portfolio_drawdown > max_portfolio_drawdown * 1.2)
alertcondition(risk_breach, 'Risk Breach', 'Portfolio risk exceeds target parameters')
// USAGE
// The indicator displays a recommended equity allocation percentage (0-100%).
// Example: 75% allocation = 75% stocks, 25% cash/bonds.
//
// The model combines market regime analysis (trend, volatility, drawdowns),
// risk management (portfolio-level targeting), valuation metrics (P/E, ERP),
// sentiment indicators (VIX term structure), and macro factors (yield curve,
// credit spreads) into a single allocation signal.
//
// Crisis detection automatically reduces exposure when multiple warning signals
// converge. Alerts available for major allocation shifts and regime changes.
//
// Designed for SPY/S&P 500 portfolio allocation. Adjust component weights and
// risk parameters in settings to match your risk tolerance.
View in Pine
✨ SS. Candle Ranges°SS. Candle Ranges°
Visualize key price zones across multiple timeframes! This indicator plots the high, low, and mid levels of H1, H4, D1, W1, and M1 candles, highlighting Confluence Range Trading (CRT) zones.
Features:
Multi-timeframe candle ranges with optional alignment filters
Customizable lines, colors, midline transparency & glow
End-of-range labels for easy reference
Alerts for CRT High/Low touches
Perfect for swing traders, day traders, and anyone looking to spot strong support/resistance zones quickly.
J&A Sessions & NewsProject J&A: Session Ranges is a precision-engineered tool designed for professional traders who operate based on Time & Price. Unlike standard session indicators that clutter the chart with background colors, this tool focuses on Dynamic Price Ranges to help you visualize the Highs, Lows, and liquidity pools of each session.
It is pre-configured for Frankfurt Time (Europe/Berlin) but is fully customizable for any global location.
Key Features
1. Dynamic Session Ranges (The Boxes) Instead of vertical stripes, this indicator draws Boxes that encapsulate the entire price action of a session.
Real-Time Tracking: The box automatically expands to capture the Highest High and Lowest Low of the current session.
Visual Clarity: Instantly see the trading range of Asia, London, and New York to identify breakouts or range-bound conditions.
2. The "Lunch Break" Logic (Unique Feature) Institutional volume often dies down during lunch hours. This indicator allows you to Split the Session to account for these breaks.
Enabled: The script draws two separate boxes (Morning Session vs. Afternoon Session), allowing you to see fresh ranges after the lunch accumulation.
Disabled: The script draws one continuous box for the full session.
3. Manual High-Impact News Scheduler Never get caught on the wrong side of a spike. Since TradingView scripts cannot access live calendars, this tool includes a Manual Scheduler for risk management.
Input: Simply input the time of high-impact events (e.g., CPI, NFP) from ForexFactory into the settings.
Visual: A dashed line appears on the chart at the exact news time.
Audio Alert: The system triggers an alarm 10 minutes before the event, giving you time to manage positions or exit trades.
Default Configuration (Frankfurt Time)
Asian Session: 01:00 - 10:00 (Lunch disabled)
London Session: 09:00 - 17:30 (Lunch: 12:00-13:00)
New York Session: 14:00 - 22:00 (Lunch: 18:00-19:00)
How to Use
Setup: Apply the indicator. The default timezone is Europe/Berlin. If you live elsewhere, simply change the "Your Timezone" setting to your local time (e.g., America/New_York), and the boxes will align automatically.
Daily Routine: Check the economic calendar in the morning. If there is a "Red Folder" event at 14:30, open the indicator settings and enter 14:30 into the News Scheduler.
Trade: Use the Session Highs and Lows as liquidity targets or breakout levels.
Settings & Customization
Timezone: Full support for major global trading hubs.
Colors: Customize the Box fill and Border colors for every session.
Labels: Rename sessions (e.g., "Tokyo" instead of "Asia") via the settings menu.
Yit's Risk CalculatorIntroducing a risk a bulletproof risk calculator.
I'm tired of sitting on my brokerage, messing with my shares to buy while price action leaves me in the dust.
For my breakout strategy execution is everything i dont have time to stop and think.
within the Indicator settings you have free reign to change account size and risk%
*the stop loss is glued to the low of the day*
Pure Wyckoff V50R [Region Based]Pure Wyckoff V50R — Regional Wyckoff Volume-Price Structure Scanner
This script implements a semi-automatic Wyckoff volume–price analysis based purely on regional behaviour, not on single candles. Instead of trying to label every bar, it analyses the last N candles (default ≥ 50) and their volume distribution to estimate whether the market is in an accumulation, distribution or trend phase.
Main features:
🔍 Region-based structure detection
Scans the last regLen bars to find the trading range, then attempts to locate key Wyckoff points such as
SC (Selling Climax), AR, ST, Spring, UT, LPSY, and draws the SC–AR band when a structure is active.
⚖️ Supply–demand balance
Uses regional bullish vs bearish volume to show whether Demand > Supply, Supply > Demand, or Balanced for the current range.
🧠 Phase & decision panel
For the current bar the panel summarises:
overall structure (bullish / bearish / ranging),
approximate Wyckoff phase (e.g. “A phase: SC→AR rally”, “B phase: top distribution zone”, “Bottom testing zone”),
VSA-style bar reading (no supply, effort vs result, SOW, etc.),
current key signal (Spring / UT / LPSY / ST / Trend),
one-line short-term and long-term trading bias.
📊 Scoreboard
Simple scores for structure, volume and trend to give a quick “bullish / bearish / neutral” overview.
Recommended use:
Designed mainly for higher timeframes (Daily / 4H) where Wyckoff structures are clearer.
Parameters (window length, volume averages, multipliers) should be tuned to the instrument and timeframe.
This is a structure helper, not an automatic signal provider – always combine it with your own discretion and risk management.
Disclaimer: This script is for educational and analytical purposes only and does not constitute financial advice. Use at your own risk and feel free to share feedback or improvements.
Psychological Price Level GBPJPY (.250 / .750)This indicator is designed for GBPJPY traders who work with precision and smart-money-based analysis. It automatically plots psychological price levels at .250 and .750, which are known institutional reference points that often influence market structure, price reactions, and liquidity behavior. Unlike typical round-number indicators, this tool focuses specifically on quarter levels, which are frequently used by algorithms, banks, and experienced institutional traders.
Fixed and Reliable Levels
As price evolves, the levels update automatically and remain fixed on the chart without shifting when you scroll. This ensures that the levels always stay anchored to relevant market structure, making them reliable reference points for planning entries, targets, or stop placements.
Customization
The indicator allows full customization. You can freely adjust the line color, line thickness, and line style to match your personal trading chart layout. You can also choose whether lines extend left, right, or both directions, making the tool flexible enough to fit minimalist or highly marked-up workspaces.
Why These Levels Matter
In smart money trading approaches, the .250 and .750 levels often act as magnetic zones. Price frequently gravitates toward them to test liquidity or engineer traps before continuing its move. These levels may serve as rejection points, breakout confirmation zones, or take-profit areas depending on the broader context. Because they frequently align with order blocks, fair value gaps, and market structure shifts, they can add meaningful confluence to directional bias and trade timing.
Who Can Benefit
This tool is particularly useful for scalpers, day traders, and swing traders who base decisions on liquidity behavior and institutional logic. It works well on any timeframe and complements concepts such as premium and discount models, inefficiencies, fair value gaps, and volume imbalances. Many traders find that these price levels help them identify reactions earlier, refine entries, and improve confidence when executing trades.
Final Note
If this indicator supports your trading workflow, feel free to leave a comment or mark it as a favorite + give it a BOOST . Your feedback helps guide future improvements and ensures the tool continues evolving for serious GBPJPY traders.
Happy trading — and stay precise. 🚀📊
SPY/QQQ Customizable Price ConverterThis is a minimalist utility tool designed for Index traders (SPX, NDX, RUT). It allows you to monitor the price of a reference asset (like SPY, QQQ) directly on your main chart without cluttering your screen.
Key Features:
1.🖱️ Crosshair Sync for Historical Data (Highlight): Unlike simple info tables that only show the latest price, this script allows for historical inspection.
· How it works: Simply move your mouse crosshair over ANY historical candle on your chart.
· The script will instantly display the closing price of the reference asset (e.g., SPY) for that specific time in the Status Line (top-left) or the Data Window. Perfect for backtesting and reviewing price action.
2.🔄 Fully Customizable Ticker: Default is set to SPY, but you can change it to anything in the settings.
e.g.
· Trading NDX Change it to QQQ.
· Trading RUT Change it to IWM.
3.📊 Clean Real-Time Dashboard:
· A floating table displays the current real-time price of your reference asset.
· Color-coded text (Green/Red) indicates price movement.
· Fully customizable size, position, and colors to fit your layout.
Blackscrum Adaptive Momentum Line (BAML)Overview
The BlackScrum Adaptive Momentum Line (BAML) is a dynamic trend-confirmation tool designed to keep traders aligned with the dominant market direction while filtering out short-term noise.
It adapts automatically to market volatility and candle structure, giving clear visual cues for momentum shifts, trend reversals, and entry confirmation.
🔍 How It Works
BAML tracks price strength relative to its adaptive moving average and volatility envelope.
When momentum turns decisively bullish, the line flips gold, signalling a potential uptrend.
When momentum breaks down, it flips blue, showing trend exhaustion or a developing downtrend.
In sideways or transitional conditions, the line fades to neutral grey, helping traders avoid false entries.
The line uses:
An adaptive EMA core (to stay close to price during fast markets).
A volatility-weighted filter (to delay signals during chop).
Optional smoothing to fine-tune responsiveness.
🎯 How to Use It
Trend Direction:
Gold Line → Uptrend confirmed. Consider long bias, pullback entries, or trend continuation setups.
Blue Line → Downtrend confirmed. Consider short bias or defensive management on longs.
Grey/Flat Line → Neutral/transition phase. Wait for confirmation.
Entry Timing:
Combine BAML with your breakout or swing confirmation rules. For example:
Entry when the line turns gold and price closes above it.
Exit when it flips blue or price breaks back below.
Multi-Timeframe Usage:
Works effectively on any timeframe from 15-minute to 1-day charts.
Aligning higher-timeframe BAML with lower-timeframe triggers offers confluence for trend trades.
⚙️ Key Advantages
✅ Adaptive to volatility and candle structure — fewer fake flips.
✅ Visually clear color coding for fast trend reading.
✅ Compatible with other BlackScrum indicators (Fear & Greed, FOMO Finder, Swing Boxes).
✅ Ideal for swing, position, or momentum traders seeking clarity in volatile crypto or stock markets.
⚠️ Tips
Use alongside volume or sentiment indicators for confirmation.
Avoid counter-trend setups when both higher and lower timeframe BAML lines agree.
Works best in trending environments; during consolidation it acts as a stay-out filter.
🧠 In Summary
The BlackScrum Adaptive Momentum Line turns raw price data into a smooth, trustworthy trend signal.
It’s built to help you stay in strong moves longer, avoid fakeouts, and visually track the transition between fear, neutrality, and euphoria in real time.
Advanced Supply and DemandThe Supply and Demand Visible Range indicator displays areas & levels on the user's chart for the visible range using a novel volume-based method. The script also makes use of intra-bar data to create precise Supply & Demand zones.
🔶 SETTINGS
Threshold %: Percentage of the total visible range volume used as a threshold to set supply/demand areas. Higher values return wider areas.
Resolution: Determines the number of bins used to find each area. Higher values will return more precise results.
Intra-bar TF: Timeframe used to obtain intra-bar data.
The supply/demand areas and levels displayed by the script are aimed at providing potential supports/resistances for users. The script's behavior makes it recalculate each time the visible chart interval/range changes, as such this script is more suited as a descriptive tool.
Price reaching a supply (upper) area that might have been tested a few times might be indicative of a potential reversal down, while price reaching a demand (lower) area that might have been tested a few times could be indicative of a potential reversal up.
The width of each area can also indicate which areas are more liquid, with thinner areas indicating more significant liquidity.
The user can control the width of each area using the Threshold % setting, with a higher setting returning wider areas. The precision setting can also return wider supply/demand areas if very low values are used and has the benefit of improving the script execution time at the cost of precision.
The Supply and Demand Zones indicator returns various levels. The solid-colored levels display the average of each area, while dashed colored lines display the weighted averages of each area. These weighted averages can highlight more liquid price levels within the supply/demand areas.
Central solid/dashed lines display the average between the areas' averages and weighted averages.
🔶 DETAILS
Each supply/demand area is constructed from volume data. The calculation is done as follows:
The accumulated volume within the chart visible range is calculated.
The chart visible range is divided into N bins of equal width (where N is the resolution setting)
Calculation start from the highest visible range price value for the supply area, and lowest value for the demand area.
The volume within each bin after the starting calculation level is accumulated, once this accumulated volume is equal or exceed the threshold value (p % of the total visible range volume) the area is set.
Each bin volume accumulation within an area is displayed on the left, this can help indicate how fast volume accumulates within an area.
🔶 LIMITATIONS
The script execution time is dependent on all of the script's settings, using more demanding settings might return errors so make sure to be aware of the potential scenarios that might make the script exceed the allowed execution time:
Having a chart's visible range including a high number of bars.
Using a high number of bins (high resolution value) will increase computation time, this can be worsened by using a high threshold %.
Using very low intra-bar timeframe can drastically increase computation time but can also simply throw an error if the chart timeframe is high.
Prestijlo X v2 — Precision Scalper & Swing Hybrid AlgoPrestijlo X v2 is a hybrid trading algorithm optimized for short-term (SCALP) and medium-term (SWING) trades. It is an ultra-stable system with an EMA 9-21-50 trend filter, ATR-based risk calculation, percentage TP/SL, and advanced signal filtering.
• SCALP / SWING mode selection
• ATR & % TP/SL checkboxes
• EMA 9-21-50 trend filter
• Optimized for 1-5-15 minutes
• No label error / background color error
Usage: Trading planning can be done using the TP/SL boxes after a signal.
King-HamaadaThis indicator draws DR/IDR sessions for Mon–Fri (19:30–23:00 NY), keeps the DR box visible until 18:00 next day, tracks swing violations against the DR high/low, and calculates live pip expansion above and below the DR range from 23:00 → next day 23:00, displaying DR range and expansion up/down in pips on the right side of each DR.
Hamada 2.0So, short answer:
This indicator draws DR/IDR sessions for Mon–Fri (19:30–23:00 NY), keeps the DR box visible until 18:00 next day, tracks swing violations against the DR high/low, and calculates live pip expansion above and below the DR range from 23:00 → next day 23:00, displaying DR range and expansion up/down in pips on the right side of each DR.






















