Göstergeler ve stratejiler
Delta Zones Smart Money Concept (SMC) UT Trend Reversal Mul.Sig.🚀 What's New in This Version (V5 Update)
This version is a major overhaul focused on improving trade entry timing and risk management through enhanced UT Bot functionality:
Integrated UT Trailing Stop (ATR-based): The primary trend filter and moving stop-loss mechanism is now fully integrated.
Pre-Warning Line: A revolutionary feature that alerts traders when the price penetrates a specific percentage distance (customizable) from the UT Trailing Stop before the main reversal signal fires.
"Ready" Signal: Plots a "Ready" warning label on the chart and triggers an alert condition (UT Ready Long/Short) for pre-emptive trade preparation.
V5 Compatibility: All code has been optimized for Pine Script version 5, utilizing the modern array and type structures for efficient Order Block and Breaker Block detection.
💡 How to Use This Indicator
This indicator works best when confirming signals across different components:
1. Identify the Trend Bias (UT Trailing Stop)
Uptrend: UT Trailing Stop line is Green (Focus only on Buy/Long opportunities).
Downtrend: UT Trailing Stop line is Red (Focus only on Sell/Short opportunities).
2. Prepare for Entry (Warning Line)
Action: When you see the "Ready" label or the price hits the Pre-Warning Line (Dotted Orange Line), this is your alert to prepare for a trend flip, or to tighten the stop on your current trade.
3. Confirm the Entry (Multi-Signals)
Look for a primary entry signal that aligns with the desired trend:
High-Conviction Entry: Wait for the UT Buy/Sell label (confirmed trend flip) AND a Combined Buy/Sell arrow (confirmed by your selected Oscillator settings).
High-Liquidity Entry: Look for a Delta Zone Box forming near an active Order Block or Breaker Block (SMC zones), and then confirm with a UT or Combined Signal.
4. Manage Risk (Trailing Stop)
Always set your initial Stop Loss (SL) either just outside the opposite Order Block or at the UT Trailing Stop level itself.
If the price closes back across the UT Trailing Stop, exit your position immediately, as the trend bias has officially shifted.
Features & Components
1. Delta Zones (Liquidity/Wick Pressure)
Identifies periods of extreme buying or selling pressure based on wick-to-body ratios and standard deviation analysis.
Plots colored pressure boxes (Buy/Sell) to highlight potential exhaustion points or institutional activity.
2. Smart Money Concepts (SMC)
Automatically detects and plots Order Blocks (OBs) and Breaker Blocks (BBs) based on confirmed Market Structure Breaks (MSBs).
Includes Chop Control logic to remove less reliable Breaker Blocks.
3. UT Bot Trailing Stop & Warning Line
UT Trailing Stop (ATR-based): Plots a dynamic trend line (Green/Red) that acts as a moving stop-loss and primary trend filter.
Ready/Warning Signals: Alerts traders (via the "Ready" label and orange lines) when the price enters a "Pre-Reversal Zone" near the Trailing Stop.
4. Multi-Indicator Confirmation (Filters)
Includes customizable signals based on the crossover/crossunder of RSI, CCI, and Stochastic indicators against configurable Overbought/Oversold levels.
Allows selection of combination signals (e.g., RSI & CCI, All Combined, etc.) for high-conviction entries.
Gann Levels (Auto) by RRR📌 Gann Levels (Auto) — Intraday, Swing & Elliott Wave Precision Tool
Gann Levels (Auto) is a high-accuracy price-reaction indicator designed for intraday scalpers, swing traders, and Elliott Wave traders who want clean, auto-updating support and resistance levels without manually drawing anything.
The indicator automatically detects the latest swing high & swing low and plots the 8 Gann Octave Levels between them. These levels act as a complete price map—showing equilibrium, structure, trend continuation zones, and reversal points with extreme precision.
🔥 Why This Indicator Stands Out
✔ Fully automatic swing detection
Levels update as structure evolves — no manual adjustments.
✔ All Gann Octave levels
Plots 1/8 through 8/8 including the critical 4/8 midpoint.
✔ Intraday-optimized
Exceptional on 1m, 3m, 5m, and 15m charts.
✔ Ultra-clean support & resistance
Levels act as reliable barriers and breakout zones.
⭐ MOST IMPORTANT LEVELS FOR INTRADAY
4/8 – Midpoint (Major Decision Pivot)
Strongest Gann level.
Controls trend or reversal for the session.
Breakout → Trend Day
Rejection → Reversal Day
8/8 & 0/8 – Extreme Structure Edges
Most likely zones for intraday reversals.
Perfect for scalp entries when combined with volume exhaustion.
🎯 How to Trade ELLIOTT WAVE Using Gann Levels
This indicator is exceptionally powerful when combined with Elliott Wave Theory.
Here is how to use it wave-by-wave:
🔵 Wave 2 → Identify Bottom Using 0/8 or 1/8 Levels
Wave 2 typically retraces deep but remains above key structure.
Gann confirmation:
Price stops at 0/8 or 1/8 zone
Rejection wick + low volume breakdown attempt
Bullish intent starts forming
This gives a perfect Wave 3 entry zone.
🔴 Wave 3 → Breakout Above 4/8 Midpoint
Wave 3 is the strongest impulsive wave.
The 4/8 level works like a force-field.
Wave 3 confirmation:
Price breaks and retests 4/8
Strong volume
No deep pullbacks after break
This is one of the most reliable Elliott + Gann trades.
🟡 Wave 4 → Uses 3/8 or 5/8 as Support/Resistance
Wave 4 is corrective and shallow compared to Wave 2.
Gann alignment:
Wave 4 often consolidates between 3/8 and 5/8
Levels act like range boundaries
Avoid trading inside chop; wait for breakout
This gives perfect continuation entries for Wave 5.
🟣 Wave 5 → Ends Near 7/8 or 8/8 Extreme Zone
Wave 5 usually ends in overbought territory.
Gann confirmation:
Price hits 7/8 or 8/8
Momentum weakens
Divergence builds (RSI/MACD optional)
Last push = exhaustion
This is where reversals or major pullbacks begin.
💥 BONUS: Corrective Waves (A-B-C)
Wave A:
Often rejects from 4/8 or 5/8.
Wave B:
Typically trapped between 3/8–5/8.
Wave C:
Usually ends around 0/8 (for bullish trend)
or 8/8 (for bearish trend).
These zones give ultra-high confidence entries.
⚙️ Who This Indicator Is Perfect For
Elliott Wave traders
Intraday scalpers
Swing traders
Price action & structure traders
Traders who want automatic support-resistance levels
Traders who want clean, non-cluttered levels
⚠️ Disclaimer
This indicator is for educational purposes only.
Trading involves risk. Always use proper risk management.
Tactical Deviation🎯 TACTICAL DEVIATION - Volume-Backed VWAP Deviation Analysis
What Makes This Different?
Unlike basic VWAP indicators, Tactical Deviation combines:
• Multi-timeframe VWAP deviation bands (Daily/Weekly/Monthly)
• Volume spike intelligence - signals only appear with volume confirmation
• Pivot reversal detection at deviation extremes
• Optional multi-VWAP confluence system
• Smart defaults for quality over quantity
This unique combination filters weak setups and identifies high-probability entries at extreme price deviations from fair value.
📊 DEFAULT SETTINGS (Ready to Use)
✅ Daily VWAP with ±2σ deviation bands
✅ Volume spike detection (1.5x average required)
✅ 2σ minimum deviation for signals
❌ Weekly/Monthly VWAPs (enable for multi-timeframe)
❌ Pivot reversal requirement (enable for stronger signals)
❌ Fill zones (optional visual enhancement)
Why: Daily VWAP is most relevant for intraday trading. 2σ bands catch meaningful moves. Volume spikes ensure conviction. Clean chart focuses on what matters.
🚀 HOW TO USE
BASIC USAGE:
• Green triangles (below bars) = Long signals at oversold deviations
• Red triangles (above bars) = Short signals at overbought deviations
SIGNAL QUALITY:
• Normal size, bright colors = Volume spike (best quality)
• Small size, lighter colors = Volume momentum
• Tiny size = No volume confirmation
DEVIATION ZONES:
• ±2σ = Extreme deviation (signals appear here)
• ±1σ to ±2σ = Extended but not extreme
• Within ±1σ = Normal range
TRADING APPROACHES:
Mean Reversion:
→ Enter when price reaches ±2σ with volume spike
→ Target: Return to VWAP or opposite band
→ Stop: Beyond extreme deviation
Trend Continuation:
→ Use bands to identify pullbacks
→ Enter pullback to VWAP in trending market
→ Volume confirms continuation
Reversal Trading:
→ Enable "Require Pivot Reversal" for stronger signals
→ Signals only when deviation + pivot reversal occur
→ Higher probability, fewer signals
⚙️ EXPLORE SETTINGS FOR FULL USE
VWAP SETTINGS:
• Show Weekly/Monthly VWAP = Multi-timeframe context
• Show ±1σ Bands = Normal deviation range
• Show ±3σ Bands = Extreme extremes (rare but powerful)
SIGNAL SETTINGS:
• Min Deviation: 1σ (more signals) | 2σ (default) | 3σ (fewer, extreme only)
• Require Pivot Reversal: OFF (default) | ON (stronger but fewer)
• Volume Spike Threshold: 1.5x (default) | 2.0x+ (major spikes) | 1.2x (more signals)
CONFLUENCE SETTINGS:
• Require Multi-VWAP Confluence: OFF (default) | ON (2+ VWAPs must agree)
• Min VWAPs: 2 (Daily + Weekly/Monthly) | 3 (all must agree)
VISUAL SETTINGS:
• Show Fill Zones = Shaded areas between bands
• Fill Opacity = Transparency adjustment
• Line Widths = Customize thickness
💡 PRO TIPS
1. Start with defaults, then enable features as you learn
2. Volume spike requirement filters weak moves - keep it enabled
3. Enable Weekly/Monthly VWAPs for higher timeframe context
4. Enable confluence for swing trading setups
5. Pivot reversals: ON for reversals, OFF for continuations
6. Check top-right info table for current deviation levels
🎨 VISUAL GUIDE
• Cyan Line = Daily VWAP (fair value)
• Cyan Bands = Daily deviation zones
• Orange Line = Weekly VWAP (if enabled)
• Purple Line = Monthly VWAP (if enabled)
• Green Triangle = Long signal (oversold)
• Red Triangle = Short signal (overbought)
⚠️ IMPORTANT
Educational purposes only. Always use proper risk management. Signals are based on statistical deviation, not guarantees. Volume confirmation improves quality but doesn't guarantee outcomes. Combine with your own analysis.
The unique combination of VWAP deviation analysis, volume profile confirmation, pivot identification, and multi-timeframe confluence in a single clean interface makes Tactical Deviation different from basic VWAP indicators.
Happy Trading! 📈
Classic Dual Momentum – 12-Month Absolute Momentum - AntonacciThis indicator calculates the 12-month absolute momentum exactly as described in Gary Antonacci’s Dual Momentum framework.
It automatically adjusts the lookback period based on the chart’s timeframe:
Daily chart: 252 bars
Weekly chart: 52 bars
Monthly chart: 12 bars
Other timeframes: Estimated automatically using bar time difference
The script computes the 12-month rate of return and displays it as a color-coded column plot:
Green: Positive 12-month momentum
Red: Negative 12-month momentum
A customizable moving average is included to help visualize longer-term trends in the momentum signal.
How It’s Used (from Dual Momentum theory)
This indicator provides the absolute momentum filter used in classic Dual Momentum strategies:
If the 12-month return of an asset is above the risk-free return → trend is positive
If it is below the risk-free return → trend is negative
This absolute momentum check is a key component of the Global Equities Momentum (GEM) model presented in Gary Antonacci’s book Dual Momentum Investing.
Why This Indicator Exists
It gives traders a clean, accurate way to visualize the 12-month trend strength across any timeframe, without the distortions caused by bar length differences.
Scaling_mastery:Free TrendlinesScaling_mastery Trendlines is a clean, trading-ready smart trendline tool built for the Scaling_mastery community.
It automatically finds swing highs/lows and draws dynamic trendlines or channels that stay locked to price, on any symbol and any timeframe.
🔧 Modes
Trendline type
Wicks – classic trendlines anchored on candle wicks (high/low).
Bodies – trendlines anchored on candle bodies (open/close), great for closing structure.
Channel – 3-line channel:
outer lines form a band around price
middle line runs through the centre of the channel
thickness is adjustable (Small / Medium / Large).
Trend strength
Controls how strong the pivots must be to form a line.
Weak → more lines, reacts faster.
Medium → balanced, good for most pairs.
Strong → only the cleanest swings, higher-probability trendlines.
🎨 Visual controls
Max support / resistance lines – cap how many lines are kept on chart.
Show broken lines – hide broken trendlines or keep them for structure history.
Extend lines – None / Right / Both.
Support / Resistance colors – separate colors for active vs broken.
Channel thickness – Small / Medium / Large (0.5% / 1% / 2% of price).
Channel outer lines – color for channel edges.
Channel middle line – color + style (dotted / dashed / solid).
Broken lines are automatically faded + dotted, so you can instantly see what’s still respected and what’s already been taken out.
🧠 How to use
Add the indicator to any chart.
Start with:
Trendline type: Wicks
Trend strength: Strong
Max lines: 1–2 for both support & resistance
Once you like the behavior, experiment with:
Switching between Wicks / Bodies / Channel
Adjusting Channel thickness and Trend strength
Use the lines as a visual confluence tool with your own strategy:
HTF trend direction
LTF entries / retests
Liquidity grabs around broken lines
This script doesn’t generate entries or risk management – it’s designed to give you clean, reliable structure so you can execute your own edge.
⚠️ Disclaimer
This tool is for educational and visual purposes only and is not financial advice.
Always do your own research and manage risk.
I4I Inside Vortex Strike RateThis indicator identifies what I call an "Inside Vortex": It's similar to a Doji but more strict in having to be inside a keltner and also have a lower ATR than a blended average.
The bar itself is not that special. But it indicates that a potential big move might come in the next 2 periods.
After the patter: It then looks at what I call the Market Maker High and Low: A % of a blended ATR. It then looks back 100-200 or more bars and calculates the overall strike % in history for the High and low after the pattern happens.
This allows us to know how often these levels are hit within the next 2 periods to find if we have any edge on spread, call or put prices or use them as targets.
So its:
Pattern:
Levels
Strike Rate.
Very unique and EXTREME useful. Especially for options traders.
Volume Spike & Second Entry (Fast Scalping)this indicator puts volume spikes on your chart which gives a good indicator of a large move
Reversal Candlestick Setups (Doji, Outside, Extreme, Wick)Reversal Candlestick Setups – Doji, Outside, Extreme & Wick
This indicator identifies four high-probability reversal candlestick patterns across all timeframes: Doji Reversals, Outside Reversals, Extreme Reversals, and Wick Reversals. Each setup is based on clearly defined quantitative rules, allowing traders to filter noise and focus on strong reversal signals instead of relying on subjective visual interpretation.
The tool automatically scans every candle, highlights qualifying patterns on the chart, and provides alert options for both bullish and bearish versions of all four setups. This makes it suitable for intraday traders, swing traders, and positional traders seeking early reversal confirmation.
Included Setups
1. Doji Reversal Setup
Identifies candles with extremely small bodies relative to their range, combined with a smaller-than-average bar size. Useful for spotting market indecision before a directional shift.
2. Outside Reversal Setup
Flags candles that engulf the previous candle’s high–low range and exceed the average range by a multiplier. This is designed to capture strong momentum reversals driven by aggressive buying or selling.
3. Extreme Reversal Setup
Highlights large-bodied candles that dominate their overall range and exceed twice the average bar size. These signals aim to catch climactic exhaustion and institutional-level reversals.
4. Wick Reversal Setup
Detects candles with long rejection wicks, small bodies, and closes near an extreme of the range, supported by above-average bar size. Ideal for identifying sharp intrabar rejections.
Key Features
• Automatically detects all four reversal setups
• Works on all timeframes and symbols
• Customizable variables for deeper testing and optimization
• Clear bullish and bearish labels directly on the chart
• Fully integrated alert conditions for real-time notifications
• Suitable for crypto, stocks, indices, forex, and commodities
Who This Indicator Is For
• Traders who want objective, rule-based reversal detection
• Price action traders looking to enhance accuracy
• Systematic traders wanting quantifiable candlestick criteria
• Beginners learning reversal structures with visual guidance
• Professionals integrating reversal patterns into algorithmic or discretionary systems
How to Use
Add the indicator to your chart and enable alerts for the specific setups you want to track (e.g., “Bullish Wick Reversal”). Combine these signals with market structure, trend filters, volume analysis, or momentum indicators for increased conviction.
NeuroPolynomial Channel🧠 NeuroPolynomial Channel – AI-Inspired Market Structure Engine
In modern market microstructure analysis, price is no longer treated as a simple line — it is viewed as a continuously evolving signal governed by nonlinear dynamics, volatility deformation, and behavioral state shifts.
The NeuroPolynomial Channel (NPC) is a mathematically structured, AI-inspired indicator designed to approximate this dynamic behavior using a hybrid of:
• Polynomial regression smoothing
• Neural blending functions
• Volatility-adaptive envelopes
• Distribution-based bias levels
While full deep-learning models cannot be directly implemented in Pine Script due to computational and architectural limitations, the NeuroPolynomial Channel brings core AI concepts into TradingView through mathematically constrained approximations, creating an efficient, real-time neural structure model suitable for intraday and swing analysis.
📐 Mathematical Foundation
NPC is not a standard moving average or simple channel system.
It applies a multi-layer non-linear approximation built on four core mathematical components.
1️⃣ NeuroPolynomial Core Line
At the heart of the system lies a recursive polynomial smoothing kernel inspired by neural weighted blending:
K = α · K
+ (1 - α) · P
+ Δx · ( K - K ) / F
Where:
• K = Neuro core estimate
• P = Current price input
• α = Neural morph factor
• F = Flattening constant
• Δx = Position delta (horizontal deformation component)
The recursive references introduce memory similar to RNN-style feedback behavior.
This produces a structurally smooth, non-linear trajectory that adapts to both local and historical price deformation.
.....................................................................................................
2️⃣ Neural Volatility Envelope
Instead of classical standard deviation, NPC uses a cumulative error field:
E = ( Σ | P - K | ) / N
Using this error field, the dynamic envelope bands are constructed as:
Inner Band = K ± E · m1
Mid Band = K ± E · m2
Outer Band = K ± E · m3
Where:
• m1, m2, m3 are probabilistic band multipliers
• E represents actual observed deviation, not synthetic volatility
This creates a probabilistic price container that deforms with real market behavior rather than static statistical assumptions.
The channel automatically adapts its curvature based on current price regime:
trending, compressing, or expanding.
.....................................................................................................
3️⃣ Neural Regression Spine
Alongside the polynomial core, NPC calculates a ridge-regularized regression spine:
y = β · x + α (with L2 regularization)
This acts as a structural bias vector or "neural backbone".
It prevents overfitting and provides directional stabilization during extended trend phases.
......................................................................................................
4️⃣ Neuro Bias Zones (Daily Reset)
NPC also introduces daily volatility-anchored regime thresholds:
Z_levels = Open ± ATR_daily × {0.1, 0.382, 0.618}
These act as:
• Neuro Mid Zones – equilibrium bands
• Neuro Strong Zones – trend activation boundaries
Unlike classical pivot systems, these levels reset daily and expand dynamically based on real volatility.
They approximate probability field boundaries similar to those used in institutional volatility modeling.
.......................................................................................................
🤖 AI Philosophy
While Pine Script cannot host full neural networks, GPU models or multi-layer AI pipelines, NeuroPolynomial Channel introduces AI concepts through mathematical abstraction, including:
• Neural blending mechanics
• Memory-based recursion
• Volatility adaptation
• Bias field modeling
• Structured envelope projection
This creates an AI-style behavior using real-time deterministic mathematics — allowing performance on TradingView while preserving interpretability and stability.
🛠 How To Use
NPC is designed for structure-based interpretation, not random signal chasing.
① Trend Structure
Use the Neural Core Line and channel slope to establish trend direction and regime.
② Compression & Expansion
Observe band width.
Contracting channels signal volatility compression.
Expanding channels signal range expansion.
③ Bias Zones
Neuro Mid and Strong levels act as macro intraday bias framework — especially powerful for session trading and index futures.
⚙️ Settings Overview
• Morph Factor – Controls neural blending strength (higher = smoother, lower = reactive)
• Flatten – Reduces polynomial curvature noise
• Band Multipliers – Adjust envelope thickness
• Neural Bias Levels – ATR-anchored regime zones resetting daily
• Theme & Visual Controls – Dark/Light with pro-grade visibility
........................................................................................................
Companion AI:
I also built a free Trading AI on ChatGPT that reads chart screenshots and enforces a rule-based intraday checklist.
Use with this indicator: chatgpt.com
For educational & decision-support only. Not financial advice.
............................................................................................................
⚠️ Disclaimer
The information contained in my Scripts / Indicators / Ideas / Systems does not constitute financial advice or a solicitation to buy or sell any securities.
All markets carry risk. This tool is for educational and analytical purposes only.
I do not accept liability for any financial loss or damage resulting from direct or indirect use of this script.
Trading decisions must be made independently based on your own risk profile and financial assessment.
Naveen Prabhu with EMA//@version=6
indicator('Naveen Prabhu with EMA', overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)
a = input(2, title = 'Key Vaule. \'This changes the sensitivity\'')
c = input(5, title = 'ATR Period')
h = input(false, title = 'Signals from Heikin Ashi Candles')
BULLISH_LEG = 1
BEARISH_LEG = 0
BULLISH = +1
BEARISH = -1
GREEN = #089981
RED = #F23645
BLUE = #2157f3
GRAY = #878b94
MONO_BULLISH = #b2b5be
MONO_BEARISH = #5d606b
HISTORICAL = 'Historical'
PRESENT = 'Present'
COLORED = 'Colored'
MONOCHROME = 'Monochrome'
ALL = 'All'
BOS = 'BOS'
CHOCH = 'CHoCH'
TINY = size.tiny
SMALL = size.small
NORMAL = size.normal
ATR = 'Atr'
RANGE = 'Cumulative Mean Range'
CLOSE = 'Close'
HIGHLOW = 'High/Low'
SOLID = '⎯⎯⎯'
DASHED = '----'
DOTTED = '····'
SMART_GROUP = 'Smart Money Concepts'
INTERNAL_GROUP = 'Real Time Internal Structure'
SWING_GROUP = 'Real Time Swing Structure'
BLOCKS_GROUP = 'Order Blocks'
EQUAL_GROUP = 'EQH/EQL'
GAPS_GROUP = 'Fair Value Gaps'
LEVELS_GROUP = 'Highs & Lows MTF'
ZONES_GROUP = 'Premium & Discount Zones'
modeTooltip = 'Allows to display historical Structure or only the recent ones'
styleTooltip = 'Indicator color theme'
showTrendTooltip = 'Display additional candles with a color reflecting the current trend detected by structure'
showInternalsTooltip = 'Display internal market structure'
internalFilterConfluenceTooltip = 'Filter non significant internal structure breakouts'
showStructureTooltip = 'Display swing market Structure'
showSwingsTooltip = 'Display swing point as labels on the chart'
showHighLowSwingsTooltip = 'Highlight most recent strong and weak high/low points on the chart'
showInternalOrderBlocksTooltip = 'Display internal order blocks on the chart Number of internal order blocks to display on the chart'
showSwingOrderBlocksTooltip = 'Display swing order blocks on the chart Number of internal swing blocks to display on the chart'
orderBlockFilterTooltip = 'Method used to filter out volatile order blocks It is recommended to use the cumulative mean range method when a low amount of data is available'
orderBlockMitigationTooltip = 'Select what values to use for order block mitigation'
showEqualHighsLowsTooltip = 'Display equal highs and equal lows on the chart'
equalHighsLowsLengthTooltip = 'Number of bars used to confirm equal highs and equal lows'
equalHighsLowsThresholdTooltip = 'Sensitivity threshold in a range (0, 1) used for the detection of equal highs & lows Lower values will return fewer but more pertinent results'
showFairValueGapsTooltip = 'Display fair values gaps on the chart'
fairValueGapsThresholdTooltip = 'Filter out non significant fair value gaps'
fairValueGapsTimeframeTooltip = 'Fair value gaps timeframe'
fairValueGapsExtendTooltip = 'Determine how many bars to extend the Fair Value Gap boxes on chart'
showPremiumDiscountZonesTooltip = 'Display premium, discount, and equilibrium zones on chart'
modeInput = input.string( HISTORICAL, 'Mode', group = SMART_GROUP, tooltip = modeTooltip, options = )
styleInput = input.string( COLORED, 'Style', group = SMART_GROUP, tooltip = styleTooltip,options = )
showTrendInput = input( false, 'Color Candles', group = SMART_GROUP, tooltip = showTrendTooltip)
showInternalsInput = input( false, 'Show Internal Structure', group = INTERNAL_GROUP, tooltip = showInternalsTooltip)
showInternalBullInput = input.string( ALL, 'Bullish Structure', group = INTERNAL_GROUP, inline = 'ibull', options = )
internalBullColorInput = input( GREEN, '', group = INTERNAL_GROUP, inline = 'ibull')
showInternalBearInput = input.string( ALL, 'Bearish Structure' , group = INTERNAL_GROUP, inline = 'ibear', options = )
internalBearColorInput = input( RED, '', group = INTERNAL_GROUP, inline = 'ibear')
internalFilterConfluenceInput = input( false, 'Confluence Filter', group = INTERNAL_GROUP, tooltip = internalFilterConfluenceTooltip)
internalStructureSize = input.string( TINY, 'Internal Label Size', group = INTERNAL_GROUP, options = )
showStructureInput = input( false, 'Show Swing Structure', group = SWING_GROUP, tooltip = showStructureTooltip)
showSwingBullInput = input.string( ALL, 'Bullish Structure', group = SWING_GROUP, inline = 'bull', options = )
swingBullColorInput = input( GREEN, '', group = SWING_GROUP, inline = 'bull')
showSwingBearInput = input.string( ALL, 'Bearish Structure', group = SWING_GROUP, inline = 'bear', options = )
swingBearColorInput = input( RED, '', group = SWING_GROUP, inline = 'bear')
swingStructureSize = input.string( SMALL, 'Swing Label Size', group = SWING_GROUP, options = )
showSwingsInput = input( false, 'Show Swings Points', group = SWING_GROUP, tooltip = showSwingsTooltip,inline = 'swings')
swingsLengthInput = input.int( 50, '', group = SWING_GROUP, minval = 10, inline = 'swings')
showHighLowSwingsInput = input( false, 'Show Strong/Weak High/Low',group = SWING_GROUP, tooltip = showHighLowSwingsTooltip)
showInternalOrderBlocksInput = input( true, 'Internal Order Blocks' , group = BLOCKS_GROUP, tooltip = showInternalOrderBlocksTooltip, inline = 'iob')
internalOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'iob')
showSwingOrderBlocksInput = input( true, 'Swing Order Blocks', group = BLOCKS_GROUP, tooltip = showSwingOrderBlocksTooltip, inline = 'ob')
swingOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'ob')
orderBlockFilterInput = input.string( 'Atr', 'Order Block Filter', group = BLOCKS_GROUP, tooltip = orderBlockFilterTooltip, options = )
orderBlockMitigationInput = input.string( HIGHLOW, 'Order Block Mitigation', group = BLOCKS_GROUP, tooltip = orderBlockMitigationTooltip, options = )
internalBullishOrderBlockColor = input.color(color.new(GREEN, 80), 'Internal Bullish OB', group = BLOCKS_GROUP)
internalBearishOrderBlockColor = input.color(color.new(#f77c80, 80), 'Internal Bearish OB', group = BLOCKS_GROUP)
swingBullishOrderBlockColor = input.color(color.new(GREEN, 80), 'Bullish OB', group = BLOCKS_GROUP)
swingBearishOrderBlockColor = input.color(color.new(#b22833, 80), 'Bearish OB', group = BLOCKS_GROUP)
showEqualHighsLowsInput = input( false, 'Equal High/Low', group = EQUAL_GROUP, tooltip = showEqualHighsLowsTooltip)
equalHighsLowsLengthInput = input.int( 3, 'Bars Confirmation', group = EQUAL_GROUP, tooltip = equalHighsLowsLengthTooltip, minval = 1)
equalHighsLowsThresholdInput = input.float( 0.1, 'Threshold', group = EQUAL_GROUP, tooltip = equalHighsLowsThresholdTooltip, minval = 0, maxval = 0.5, step = 0.1)
equalHighsLowsSizeInput = input.string( TINY, 'Label Size', group = EQUAL_GROUP, options = )
showFairValueGapsInput = input( false, 'Fair Value Gaps', group = GAPS_GROUP, tooltip = showFairValueGapsTooltip)
fairValueGapsThresholdInput = input( true, 'Auto Threshold', group = GAPS_GROUP, tooltip = fairValueGapsThresholdTooltip)
fairValueGapsTimeframeInput = input.timeframe('', 'Timeframe', group = GAPS_GROUP, tooltip = fairValueGapsTimeframeTooltip)
fairValueGapsBullColorInput = input.color(color.new(#00ff68, 70), 'Bullish FVG' , group = GAPS_GROUP)
fairValueGapsBearColorInput = input.color(color.new(#ff0008, 70), 'Bearish FVG' , group = GAPS_GROUP)
fairValueGapsExtendInput = input.int( 1, 'Extend FVG', group = GAPS_GROUP, tooltip = fairValueGapsExtendTooltip, minval = 0)
showDailyLevelsInput = input( false, 'Daily', group = LEVELS_GROUP, inline = 'daily')
dailyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'daily', options = )
dailyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'daily')
showWeeklyLevelsInput = input( false, 'Weekly', group = LEVELS_GROUP, inline = 'weekly')
weeklyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'weekly', options = )
weeklyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'weekly')
showMonthlyLevelsInput = input( false, 'Monthly', group = LEVELS_GROUP, inline = 'monthly')
monthlyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'monthly', options = )
monthlyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'monthly')
showPremiumDiscountZonesInput = input( false, 'Premium/Discount Zones', group = ZONES_GROUP , tooltip = showPremiumDiscountZonesTooltip)
premiumZoneColorInput = input.color( RED, 'Premium Zone', group = ZONES_GROUP)
equilibriumZoneColorInput = input.color( GRAY, 'Equilibrium Zone', group = ZONES_GROUP)
discountZoneColorInput = input.color( GREEN, 'Discount Zone', group = ZONES_GROUP)
type alerts
bool internalBullishBOS = false
bool internalBearishBOS = false
bool internalBullishCHoCH = false
bool internalBearishCHoCH = false
bool swingBullishBOS = false
bool swingBearishBOS = false
bool swingBullishCHoCH = false
bool swingBearishCHoCH = false
bool internalBullishOrderBlock = false
bool internalBearishOrderBlock = false
bool swingBullishOrderBlock = false
bool swingBearishOrderBlock = false
bool equalHighs = false
bool equalLows = false
bool bullishFairValueGap = false
bool bearishFairValueGap = false
type trailingExtremes
float top
float bottom
int barTime
int barIndex
int lastTopTime
int lastBottomTime
type fairValueGap
float top
float bottom
int bias
box topBox
box bottomBox
type trend
int bias
type equalDisplay
line l_ine = na
label l_abel = na
type pivot
float currentLevel
float lastLevel
bool crossed
int barTime = time
int barIndex = bar_index
type orderBlock
float barHigh
float barLow
int barTime
int bias
// @variable current swing pivot high
var pivot swingHigh = pivot.new(na,na,false)
// @variable current swing pivot low
var pivot swingLow = pivot.new(na,na,false)
// @variable current internal pivot high
var pivot internalHigh = pivot.new(na,na,false)
// @variable current internal pivot low
var pivot internalLow = pivot.new(na,na,false)
// @variable current equal high pivot
var pivot equalHigh = pivot.new(na,na,false)
// @variable current equal low pivot
var pivot equalLow = pivot.new(na,na,false)
// @variable swing trend bias
var trend swingTrend = trend.new(0)
// @variable internal trend bias
var trend internalTrend = trend.new(0)
// @variable equal high display
var equalDisplay equalHighDisplay = equalDisplay.new()
// @variable equal low display
var equalDisplay equalLowDisplay = equalDisplay.new()
// @variable storage for fairValueGap UDTs
var array fairValueGaps = array.new()
// @variable storage for parsed highs
var array parsedHighs = array.new()
// @variable storage for parsed lows
var array parsedLows = array.new()
// @variable storage for raw highs
var array highs = array.new()
// @variable storage for raw lows
var array lows = array.new()
// @variable storage for bar time values
var array times = array.new()
// @variable last trailing swing high and low
var trailingExtremes trailing = trailingExtremes.new()
// @variable storage for orderBlock UDTs (swing order blocks)
var array swingOrderBlocks = array.new()
// @variable storage for orderBlock UDTs (internal order blocks)
var array internalOrderBlocks = array.new()
// @variable storage for swing order blocks boxes
var array swingOrderBlocksBoxes = array.new()
// @variable storage for internal order blocks boxes
var array internalOrderBlocksBoxes = array.new()
// @variable color for swing bullish structures
var swingBullishColor = styleInput == MONOCHROME ? MONO_BULLISH : swingBullColorInput
// @variable color for swing bearish structures
var swingBearishColor = styleInput == MONOCHROME ? MONO_BEARISH : swingBearColorInput
// @variable color for bullish fair value gaps
var fairValueGapBullishColor = styleInput == MONOCHROME ? color.new(MONO_BULLISH,70) : fairValueGapsBullColorInput
// @variable color for bearish fair value gaps
var fairValueGapBearishColor = styleInput == MONOCHROME ? color.new(MONO_BEARISH,70) : fairValueGapsBearColorInput
// @variable color for premium zone
var premiumZoneColor = styleInput == MONOCHROME ? MONO_BEARISH : premiumZoneColorInput
// @variable color for discount zone
var discountZoneColor = styleInput == MONOCHROME ? MONO_BULLISH : discountZoneColorInput
// @variable bar index on current script iteration
varip int currentBarIndex = bar_index
// @variable bar index on last script iteration
varip int lastBarIndex = bar_index
// @variable alerts in current bar
alerts currentAlerts = alerts.new()
// @variable time at start of chart
var initialTime = time
// we create the needed boxes for displaying order blocks at the first execution
if barstate.isfirst
if showSwingOrderBlocksInput
for index = 1 to swingOrderBlocksSizeInput
swingOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
if showInternalOrderBlocksInput
for index = 1 to internalOrderBlocksSizeInput
internalOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
// @variable source to use in bearish order blocks mitigation
bearishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : high
// @variable source to use in bullish order blocks mitigation
bullishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : low
// @variable default volatility measure
atrMeasure = ta.atr(200)
// @variable parsed volatility measure by user settings
volatilityMeasure = orderBlockFilterInput == ATR ? atrMeasure : ta.cum(ta.tr)/bar_index
// @variable true if current bar is a high volatility bar
highVolatilityBar = (high - low) >= (2 * volatilityMeasure)
// @variable parsed high
parsedHigh = highVolatilityBar ? low : high
// @variable parsed low
parsedLow = highVolatilityBar ? high : low
// we store current values into the arrays at each bar
parsedHighs.push(parsedHigh)
parsedLows.push(parsedLow)
highs.push(high)
lows.push(low)
times.push(time)
leg(int size) =>
var leg = 0
newLegHigh = high > ta.highest( size)
newLegLow = low < ta.lowest( size)
if newLegHigh
leg := BEARISH_LEG
else if newLegLow
leg := BULLISH_LEG
leg
startOfNewLeg(int leg) => ta.change(leg) != 0
startOfBearishLeg(int leg) => ta.change(leg) == -1
startOfBullishLeg(int leg) => ta.change(leg) == +1
drawLabel(int labelTime, float labelPrice, string tag, color labelColor, string labelStyle) =>
var label l_abel = na
if modeInput == PRESENT
l_abel.delete()
l_abel := label.new(chart.point.new(labelTime,na,labelPrice),tag,xloc.bar_time,color=color(na),textcolor=labelColor,style = labelStyle,size = size.small)
drawEqualHighLow(pivot p_ivot, float level, int size, bool equalHigh) =>
equalDisplay e_qualDisplay = equalHigh ? equalHighDisplay : equalLowDisplay
string tag = 'EQL'
color equalColor = swingBullishColor
string labelStyle = label.style_label_up
if equalHigh
tag := 'EQH'
equalColor := swingBearishColor
labelStyle := label.style_label_down
if modeInput == PRESENT
line.delete( e_qualDisplay.l_ine)
label.delete( e_qualDisplay.l_abel)
e_qualDisplay.l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time ,na,level), xloc = xloc.bar_time, color = equalColor, style = line.style_dotted)
labelPosition = math.round(0.5*(p_ivot.barIndex + bar_index - size))
e_qualDisplay.l_abel := label.new(chart.point.new(na,labelPosition,level), tag, xloc.bar_index, color = color(na), textcolor = equalColor, style = labelStyle, size = equalHighsLowsSizeInput)
getCurrentStructure(int size,bool equalHighLow = false, bool internal = false) =>
currentLeg = leg(size)
newPivot = startOfNewLeg(currentLeg)
pivotLow = startOfBullishLeg(currentLeg)
pivotHigh = startOfBearishLeg(currentLeg)
if newPivot
if pivotLow
pivot p_ivot = equalHighLow ? equalLow : internal ? internalLow : swingLow
if equalHighLow and math.abs(p_ivot.currentLevel - low ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot, low , size, false)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := low
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.bottom := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastBottomTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel < p_ivot.lastLevel ? 'LL' : 'HL', swingBullishColor, label.style_label_up)
else
pivot p_ivot = equalHighLow ? equalHigh : internal ? internalHigh : swingHigh
if equalHighLow and math.abs(p_ivot.currentLevel - high ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot,high ,size,true)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := high
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.top := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastTopTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel > p_ivot.lastLevel ? 'HH' : 'LH', swingBearishColor, label.style_label_down)
drawStructure(pivot p_ivot, string tag, color structureColor, string lineStyle, string labelStyle, string labelSize) =>
var line l_ine = line.new(na,na,na,na,xloc = xloc.bar_time)
var label l_abel = label.new(na,na)
if modeInput == PRESENT
l_ine.delete()
l_abel.delete()
l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time,na,p_ivot.currentLevel), xloc.bar_time, color=structureColor, style=lineStyle)
l_abel := label.new(chart.point.new(na,math.round(0.5*(p_ivot.barIndex+bar_index)),p_ivot.currentLevel), tag, xloc.bar_index, color=color(na), textcolor=structureColor, style=labelStyle, size = labelSize)
deleteOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
for in orderBlocks
bool crossedOderBlock = false
if bearishOrderBlockMitigationSource > eachOrderBlock.barHigh and eachOrderBlock.bias == BEARISH
crossedOderBlock := true
if internal
currentAlerts.internalBearishOrderBlock := true
else
currentAlerts.swingBearishOrderBlock := true
else if bullishOrderBlockMitigationSource < eachOrderBlock.barLow and eachOrderBlock.bias == BULLISH
crossedOderBlock := true
if internal
currentAlerts.internalBullishOrderBlock := true
else
currentAlerts.swingBullishOrderBlock := true
if crossedOderBlock
orderBlocks.remove(index)
storeOrdeBlock(pivot p_ivot,bool internal = false,int bias) =>
if (not internal and showSwingOrderBlocksInput) or (internal and showInternalOrderBlocksInput)
array a_rray = na
int parsedIndex = na
if bias == BEARISH
a_rray := parsedHighs.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.max())
else
a_rray := parsedLows.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.min())
orderBlock o_rderBlock = orderBlock.new(parsedHighs.get(parsedIndex), parsedLows.get(parsedIndex), times.get(parsedIndex),bias)
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
if orderBlocks.size() >= 100
orderBlocks.pop()
orderBlocks.unshift(o_rderBlock)
drawOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
orderBlocksSize = orderBlocks.size()
if orderBlocksSize > 0
maxOrderBlocks = internal ? internalOrderBlocksSizeInput : swingOrderBlocksSizeInput
array parsedOrdeBlocks = orderBlocks.slice(0, math.min(maxOrderBlocks,orderBlocksSize))
array b_oxes = internal ? internalOrderBlocksBoxes : swingOrderBlocksBoxes
for in parsedOrdeBlocks
orderBlockColor = styleInput == MONOCHROME ? (eachOrderBlock.bias == BEARISH ? color.new(MONO_BEARISH,80) : color.new(MONO_BULLISH,80)) : internal ? (eachOrderBlock.bias == BEARISH ? internalBearishOrderBlockColor : internalBullishOrderBlockColor) : (eachOrderBlock.bias == BEARISH ? swingBearishOrderBlockColor : swingBullishOrderBlockColor)
box b_ox = b_oxes.get(index)
b_ox.set_top_left_point( chart.point.new(eachOrderBlock.barTime,na,eachOrderBlock.barHigh))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,eachOrderBlock.barLow))
b_ox.set_border_color( internal ? na : orderBlockColor)
b_ox.set_bgcolor( orderBlockColor)
displayStructure(bool internal = false) =>
var bullishBar = true
var bearishBar = true
if internalFilterConfluenceInput
bullishBar := high - math.max(close, open) > math.min(close, open - low)
bearishBar := high - math.max(close, open) < math.min(close, open - low)
pivot p_ivot = internal ? internalHigh : swingHigh
trend t_rend = internal ? internalTrend : swingTrend
lineStyle = internal ? line.style_dashed : line.style_solid
labelSize = internal ? internalStructureSize : swingStructureSize
extraCondition = internal ? internalHigh.currentLevel != swingHigh.currentLevel and bullishBar : true
bullishColor = styleInput == MONOCHROME ? MONO_BULLISH : internal ? internalBullColorInput : swingBullColorInput
if ta.crossover(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BEARISH ? CHOCH : BOS
if internal
currentAlerts.internalBullishCHoCH := tag == CHOCH
currentAlerts.internalBullishBOS := tag == BOS
else
currentAlerts.swingBullishCHoCH := tag == CHOCH
currentAlerts.swingBullishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BULLISH
displayCondition = internal ? showInternalsInput and (showInternalBullInput == ALL or (showInternalBullInput == BOS and tag != CHOCH) or (showInternalBullInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBullInput == ALL or (showSwingBullInput == BOS and tag != CHOCH) or (showSwingBullInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bullishColor,lineStyle,label.style_label_down,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BULLISH)
p_ivot := internal ? internalLow : swingLow
extraCondition := internal ? internalLow.currentLevel != swingLow.currentLevel and bearishBar : true
bearishColor = styleInput == MONOCHROME ? MONO_BEARISH : internal ? internalBearColorInput : swingBearColorInput
if ta.crossunder(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BULLISH ? CHOCH : BOS
if internal
currentAlerts.internalBearishCHoCH := tag == CHOCH
currentAlerts.internalBearishBOS := tag == BOS
else
currentAlerts.swingBearishCHoCH := tag == CHOCH
currentAlerts.swingBearishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BEARISH
displayCondition = internal ? showInternalsInput and (showInternalBearInput == ALL or (showInternalBearInput == BOS and tag != CHOCH) or (showInternalBearInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBearInput == ALL or (showSwingBearInput == BOS and tag != CHOCH) or (showSwingBearInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bearishColor,lineStyle,label.style_label_up,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BEARISH)
fairValueGapBox(leftTime,rightTime,topPrice,bottomPrice,boxColor) => box.new(chart.point.new(leftTime,na,topPrice),chart.point.new(rightTime + fairValueGapsExtendInput * (time-time ),na,bottomPrice), xloc=xloc.bar_time, border_color = boxColor, bgcolor = boxColor)
deleteFairValueGaps() =>
for in fairValueGaps
if (low < eachFairValueGap.bottom and eachFairValueGap.bias == BULLISH) or (high > eachFairValueGap.top and eachFairValueGap.bias == BEARISH)
eachFairValueGap.topBox.delete()
eachFairValueGap.bottomBox.delete()
fairValueGaps.remove(index)
// @function draw fair value gaps
// @returns fairValueGap ID
drawFairValueGaps() =>
= request.security(syminfo.tickerid, fairValueGapsTimeframeInput, [close , open , time , high , low , time , high , low ],lookahead = barmerge.lookahead_on)
barDeltaPercent = (lastClose - lastOpen) / (lastOpen * 100)
newTimeframe = timeframe.change(fairValueGapsTimeframeInput)
threshold = fairValueGapsThresholdInput ? ta.cum(math.abs(newTimeframe ? barDeltaPercent : 0)) / bar_index * 2 : 0
bullishFairValueGap = currentLow > last2High and lastClose > last2High and barDeltaPercent > threshold and newTimeframe
bearishFairValueGap = currentHigh < last2Low and lastClose < last2Low and -barDeltaPercent > threshold and newTimeframe
if bullishFairValueGap
currentAlerts.bullishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentLow,last2High,BULLISH,fairValueGapBox(lastTime,currentTime,currentLow,math.avg(currentLow,last2High),fairValueGapBullishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentLow,last2High),last2High,fairValueGapBullishColor)))
if bearishFairValueGap
currentAlerts.bearishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentHigh,last2Low,BEARISH,fairValueGapBox(lastTime,currentTime,currentHigh,math.avg(currentHigh,last2Low),fairValueGapBearishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentHigh,last2Low),last2Low,fairValueGapBearishColor)))
getStyle(string style) =>
switch style
SOLID => line.style_solid
DASHED => line.style_dashed
DOTTED => line.style_dotted
drawLevels(string timeframe, bool sameTimeframe, string style, color levelColor) =>
= request.security(syminfo.tickerid, timeframe, [high , low , time , time],lookahead = barmerge.lookahead_on)
float parsedTop = sameTimeframe ? high : topLevel
float parsedBottom = sameTimeframe ? low : bottomLevel
int parsedLeftTime = sameTimeframe ? time : leftTime
int parsedRightTime = sameTimeframe ? time : rightTime
int parsedTopTime = time
int parsedBottomTime = time
if not sameTimeframe
int leftIndex = times.binary_search_rightmost(parsedLeftTime)
int rightIndex = times.binary_search_rightmost(parsedRightTime)
array timeArray = times.slice(leftIndex,rightIndex)
array topArray = highs.slice(leftIndex,rightIndex)
array bottomArray = lows.slice(leftIndex,rightIndex)
parsedTopTime := timeArray.size() > 0 ? timeArray.get(topArray.indexof(topArray.max())) : initialTime
parsedBottomTime := timeArray.size() > 0 ? timeArray.get(bottomArray.indexof(bottomArray.min())) : initialTime
var line topLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var line bottomLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var label topLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}H',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
var label bottomLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}L',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
topLine.set_first_point( chart.point.new(parsedTopTime,na,parsedTop))
topLine.set_second_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
topLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
bottomLine.set_first_point( chart.point.new(parsedBottomTime,na,parsedBottom))
bottomLine.set_second_point(chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
bottomLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
higherTimeframe(string timeframe) => timeframe.in_seconds() > timeframe.in_seconds(timeframe)
updateTrailingExtremes() =>
trailing.top := math.max(high,trailing.top)
trailing.lastTopTime := trailing.top == high ? time : trailing.lastTopTime
trailing.bottom := math.min(low,trailing.bottom)
trailing.lastBottomTime := trailing.bottom == low ? time : trailing.lastBottomTime
drawHighLowSwings() =>
var line topLine = line.new(na, na, na, na, color = swingBearishColor, xloc = xloc.bar_time)
var line bottomLine = line.new(na, na, na, na, color = swingBullishColor, xloc = xloc.bar_time)
var label topLabel = label.new(na, na, color=color(na), textcolor = swingBearishColor, xloc = xloc.bar_time, style = label.style_label_down, size = size.tiny)
var label bottomLabel = label.new(na, na, color=color(na), textcolor = swingBullishColor, xloc = xloc.bar_time, style = label.style_label_up, size = size.tiny)
rightTimeBar = last_bar_time + 20 * (time - time )
topLine.set_first_point( chart.point.new(trailing.lastTopTime, na, trailing.top))
topLine.set_second_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_text( swingTrend.bias == BEARISH ? 'Strong High' : 'Weak High')
bottomLine.set_first_point( chart.point.new(trailing.lastBottomTime, na, trailing.bottom))
bottomLine.set_second_point(chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_point( chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_text( swingTrend.bias == BULLISH ? 'Strong Low' : 'Weak Low')
drawZone(float labelLevel, int labelIndex, float top, float bottom, string tag, color zoneColor, string style) =>
var label l_abel = label.new(na,na,text = tag, color=color(na),textcolor = zoneColor, style = style, size = size.small)
var box b_ox = box.new(na,na,na,na,bgcolor = color.new(zoneColor,80),border_color = color(na), xloc = xloc.bar_time)
b_ox.set_top_left_point( chart.point.new(trailing.barTime,na,top))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,bottom))
l_abel.set_point( chart.point.new(na,labelIndex,labelLevel))
// @function draw premium/discount zones
// @returns void
drawPremiumDiscountZones() =>
drawZone(trailing.top, math.round(0.5*(trailing.barIndex + last_bar_index)), trailing.top, 0.95*trailing.top + 0.05*trailing.bottom, 'Premium', premiumZoneColor, label.style_label_down)
equilibriumLevel = math.avg(trailing.top, trailing.bottom)
drawZone(equilibriumLevel, last_bar_index, 0.525*trailing.top + 0.475*trailing.bottom, 0.525*trailing.bottom + 0.475*trailing.top, 'Equilibrium', equilibriumZoneColorInput, label.style_label_left)
drawZone(trailing.bottom, math.round(0.5*(trailing.barIndex + last_bar_index)), 0.95*trailing.bottom + 0.05*trailing.top, trailing.bottom, 'Discount', discountZoneColor, label.style_label_up)
parsedOpen = showTrendInput ? open : na
candleColor = internalTrend.bias == BULLISH ? swingBullishColor : swingBearishColor
plotcandle(parsedOpen,high,low,close,color = candleColor, wickcolor = candleColor, bordercolor = candleColor)
if showHighLowSwingsInput or showPremiumDiscountZonesInput
updateTrailingExtremes()
if showHighLowSwingsInput
drawHighLowSwings()
if showPremiumDiscountZonesInput
drawPremiumDiscountZones()
if showFairValueGapsInput
deleteFairValueGaps()
getCurrentStructure(swingsLengthInput,false)
getCurrentStructure(5,false,true)
if showEqualHighsLowsInput
getCurrentStructure(equalHighsLowsLengthInput,true)
if showInternalsInput or showInternalOrderBlocksInput or showTrendInput
displayStructure(true)
if showStructureInput or showSwingOrderBlocksInput or showHighLowSwingsInput
displayStructure()
if showInternalOrderBlocksInput
deleteOrderBlocks(true)
if showSwingOrderBlocksInput
deleteOrderBlocks()
if showFairValueGapsInput
drawFairValueGaps()
if barstate.islastconfirmedhistory or barstate.islast
if showInternalOrderBlocksInput
drawOrderBlocks(true)
if showSwingOrderBlocksInput
drawOrderBlocks()
lastBarIndex := currentBarIndex
currentBarIndex := bar_index
newBar = currentBarIndex != lastBarIndex
if barstate.islastconfirmedhistory or (barstate.isrealtime and newBar)
if showDailyLevelsInput and not higherTimeframe('D')
drawLevels('D',timeframe.isdaily,dailyLevelsStyleInput,dailyLevelsColorInput)
if showWeeklyLevelsInput and not higherTimeframe('W')
drawLevels('W',timeframe.isweekly,weeklyLevelsStyleInput,weeklyLevelsColorInput)
if showMonthlyLevelsInput and not higherTimeframe('M')
drawLevels('M',timeframe.ismonthly,monthlyLevelsStyleInput,monthlyLevelsColorInput)
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = barmerge.lookahead_off) : close
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop , 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop , 0) and src < nz(xATRTrailingStop , 0) ? math.min(nz(xATRTrailingStop ), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop , 0) and src > nz(xATRTrailingStop , 0) ? math.max(nz(xATRTrailingStop ), src - nLoss) : iff_2
pos = 0
iff_3 = src > nz(xATRTrailingStop , 0) and src < nz(xATRTrailingStop , 0) ? -1 : nz(pos , 0)
pos := src < nz(xATRTrailingStop , 0) and src > nz(xATRTrailingStop , 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
//---------------------------------------------------------------------------------------------------------------------}
//ALERTS
//---------------------------------------------------------------------------------------------------------------------{
alertcondition(currentAlerts.internalBullishBOS, 'Internal Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.internalBullishCHoCH, 'Internal Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.internalBearishBOS, 'Internal Bearish BOS', 'Internal Bearish BOS formed')
alertcondition(currentAlerts.internalBearishCHoCH, 'Internal Bearish CHoCH', 'Internal Bearish CHoCH formed')
alertcondition(currentAlerts.swingBullishBOS, 'Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.swingBullishCHoCH, 'Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.swingBearishBOS, 'Bearish BOS', 'Bearish BOS formed')
alertcondition(currentAlerts.swingBearishCHoCH, 'Bearish CHoCH', 'Bearish CHoCH formed')
alertcondition(currentAlerts.internalBullishOrderBlock, 'Bullish Internal OB Breakout', 'Price broke bullish internal OB')
alertcondition(currentAlerts.internalBearishOrderBlock, 'Bearish Internal OB Breakout', 'Price broke bearish internal OB')
alertcondition(currentAlerts.swingBullishOrderBlock, 'Bullish Swing OB Breakout', 'Price broke bullish swing OB')
alertcondition(currentAlerts.swingBearishOrderBlock, 'Bearish Swing OB Breakout', 'Price broke bearish swing OB')
alertcondition(currentAlerts.equalHighs, 'Equal Highs', 'Equal highs detected')
alertcondition(currentAlerts.equalLows, 'Equal Lows', 'Equal lows detected')
alertcondition(currentAlerts.bullishFairValueGap, 'Bullish FVG', 'Bullish FVG formed')
alertcondition(currentAlerts.bearishFairValueGap, 'Bearish FVG', 'Bearish FVG formed')
alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')
plotshape(buy, title = 'Buy', text = 'Buy', style = shape.labelup, location = location.belowbar, color = color.new(color.green, 0), textcolor = color.new(color.white, 0), size = size.tiny)
plotshape(sell, title = 'Sell', text = 'Sell', style = shape.labeldown, location = location.abovebar, color = color.new(color.red, 0), textcolor = color.new(color.white, 0), size = size.tiny)
//--------------------------------------------------------------------------------------
// EMA ADDITIONS (Editable)
//--------------------------------------------------------------------------------------
ema5Len = input.int(5, "5 EMA Length", minval = 1)
ema9Len = input.int(9, "9 EMA Length", minval = 1)
ema5 = ta.ema(src, ema5Len)
ema9 = ta.ema(src, ema9Len)
plot(ema5, "EMA 5", color = color.red, linewidth = 2)
plot(ema9, "EMA 9", color = color.blue, linewidth = 2)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
MoneyLine FusionMoneyLine Fusion is an advanced multi-indicator system combining linear regression trend analysis with dynamic volatility bands, Fisher Transform oscillator signals, and Aroon momentum filters. The core "Money Line" uses linear regression to identify trend direction, surrounded by ATR-based bands that dynamically expand during strong trends (powered by ADX). Buy and sell signals trigger when the Fisher Transform crosses extreme levels (-2.0/+2.0) while Aroon conditions confirm momentum exhaustion or reversal. The indicator features an enhanced scoring system integrating MACD, DMI, MFI, and RSI to provide a comprehensive market sentiment gauge. Visual feedback includes color-coded trend bands, scoring bars at chart bottom, and an info panel displaying Money Line value, volatility percentile, RSI levels, and composite TA score. Signal filtering prevents duplicate entries within 5 bars, and all parameters (Fisher/Aroon periods, signal thresholds, band multipliers) are fully customizable. Ideal for swing traders seeking high-probability entries with multi-timeframe confluence and clear visual confirmation.
STARKPROFITS SCALPER 2.0señales compra y venta..tendencia y estructura del mercado.se basa en tendencia
SuperEMA RSI Strategy [wjdtks255]Indicator Description and Trading Guide for “SuperEMA RSI Strategy ”
Indicator Name: SuperEMA RSI Strategy
Description
The SuperEMA RSI Strategy combines fast and slow Exponential Moving Averages (EMA) to identify key trend changes, enhanced with the Relative Strength Index (RSI) to filter momentum strength. It plots clear buy and sell signals based on EMA crossovers while highlighting trend zones with colored backgrounds for quick visual reference. This multi-timeframe compatible indicator is suitable for stocks, cryptocurrencies, and other markets.
How to Use the SuperEMA RSI Strategy
Buy Signal:
Enter a long position when the short-term EMA crosses above the long-term EMA, indicated by a green circle below the price bar. Confirm the trend with a green background and consider RSI values showing sufficient momentum (typically RSI above 50).
Sell Signal:
Enter a short position when the short-term EMA crosses below the long-term EMA, indicated by a red circle above the price bar. Confirm the bearish trend with a red background and verify momentum weakening (typically RSI below 50).
Trend Confirmation:
Use the background color-shaded zones to identify prevailing trend strength and avoid counter-trend trades.
RSI Application:
Optionally enable RSI display to avoid overbought/oversold entries by watching for levels above 70 (overbought) or below 30 (oversold).
Additional Tips
Adjust EMA and RSI parameters to suit different timeframes or asset volatility.
Combine this indicator with volume analysis and other technical tools for enhanced signal reliability.
Implement well-defined stop-loss and take-profit levels to manage risk effectively.
Guardian Entry Signal - FreeYou’ll instantly see big green triangles under the candles when all conditions line up. That’s your entry.
Set an alert and it will ping your phone the second one fires.
Fib+BOS/CHOCH+OB# ⭐ 1) **What This Indicator Does**
The indicator combines 4 major concepts:
### **1️⃣ Market Structure (Swing High/Low)**
* Detects major swing highs and lows using pivot logic
* Determines whether the market is **Bullish** or **Bearish**
### **2️⃣ BOS / CHOCH (Break of Structure / Change of Character)**
* **BOS:** continuation of trend
* **CHOCH:** early signal of trend reversal
* Only the **last 5** levels are displayed → keeps chart clean
### **3️⃣ Order Blocks (OB)**
* Detects last opposite candle before BOS/CHOCH
* Displays only **the latest 3 OB zones**
* Ideal for identifying high-probability pullbacks
BTC GOD — DEFINITIVE BTC MULTI INDICATORBTC GOD — The Ultimate Bitcoin Cycle Indicator (2025 Edition)
The one indicator every serious BTC holder and trader has been waiting for.
A single script that perfectly combines the 5 most powerful and accurate Bitcoin indicators ever created — all 100 % official versions:
- Official Pi Cycle Top (LookIntoBitcoin) → in 2013, 2017 & 2021 (3/3 hits)
- Official MVRV Z-Score (Glassnode / LookIntoBitcoin) → every major bottom (2015, 2018–19, 2022)
- Dynamic Bull/Bear background (red bear-market when price drops X % from cycle ATH + monthly RSI filter)
- Monthly Golden/Death Cross (50-month EMA vs 200-week EMA) → huge, unmistakable signals
- SuperTrend + 200-week EMA + 50-month EMA
- Cycle ATH/ATL tracking with flashing alert in the table when new highs/lows are made
- Exact days to/from the next halving + optimal accumulation zone (200–750 days post-halving)
- Fully customizable inputs for experienced traders
Zero repainting. Zero errors. Works on every timeframe.
This is the indicator used by people who truly understand Bitcoin’s 4-year cycles.
If you could only keep ONE Bitcoin indicator for the rest of your life… this would be it.
Save it, test it, and you’ll instantly see why it’s called BTC GOD.
Built with love and obsession for Bitcoin cycles.
Last update: November 2025
Breakout Condition Indicator - Long - V2 - Mega 86Script used for swing trading - contains certain adjustable metrics that I use for scanning and day or entry
Painel de Probabilidade Multi-Timeframe Long ShortPainel de Probabilidade Multi-Timeframe for best possibility for Long ou Short
Trinity KST (known sure thing) ProThis version is the **modern, low-lag evolution** of Martin Pring’s original 1990s KST.
Key differences from the classic KST
- Original uses only simple moving averages (SMA) on the four ROCs → quite a bit of lag.
- This version lets you replace every SMA with **ALMA, HEMA, TEMA, or EMA** → dramatically reduces lag while keeping the signal smooth and reliable.
- ALMA + progressive offset (0.90–0.97) is especially powerful because longer-term ROCs react almost as fast as the short ones without getting noisy.
- Histogram, clean labels inside the oscillator pane, alerts, background tint — all the quality-of-life stuff the original never had.
How traders actually use it in >2026
1. Primary signal: KST crosses above/below the red signal line = momentum shift (bullish/bearish).
2. Zero-line cross = confirmation of trend change (especially strong on daily/weekly).
3. Divergences between price and KST = high-probability reversals (works great on BTC, SPX, NAS100).
4. Histogram turning from red to green (or vice-versa) = early warning before the actual line cross.
Best settings I and many others run live right now (no table, just the winners)
- Crypto & Nasdaq: **ALMA + aggressiveness 0.93–0.96** → fastest valid signals.
- Forex pairs & Gold: **HEMA** (zero-lag Hull) → super clean, almost no whipsaw.
- Broad stock indices (SPX, DAX, etc.): **ALMA 0.91–0.93** or **TEMA** → perfect middle ground.
- Classic conservative daily/weekly swings: leave it on **SMA** (original Pring) or ALMA 0.88–0.90.
In short: same reliable KST logic you already know, but now it reacts 6–12 bars earlier and with far fewer fakeouts — exactly what you need in today’s fast markets.
Price vs 200 EMA / 50 EMA / VWAP TablePrice vs 200 EMA / 50 EMA / VWAP Table
This indicator displays a compact real-time table showing where current price is trading relative to three major dynamic levels: 200 EMA, 50 EMA, and VWAP.
It provides an instant read on trend strength, bias, and distance from key moving levels — all in one glance.
Color-coded signals:
Lime → Price above
Red → Price below
Gray → Price at / near
Features
Adjustable table position (4 corners)
Adjustable text size
Toggle % distance and points distance
Clean, lightweight, and non-intrusive
Works on all timeframes and assets
13 / 26 / 52 SMA Overlay13 / 26 / 52 SMA Overlay showing how short term is performing relative to long term.
Every Hour 1st FVG vTDLEvery Hour 1st FVG vTDL
For more information on how to trade FVG's, refer to Michael J. Huddleston aka The Inner Circle Trader as he is the guy who invented the concept after all.
x.com
www.youtube.com
I'm just vibing plz dont take down my indicator pinescript people plz and thank you
What It Shows:
This indicator displays the first Fair Value Gap (FVG) that appears during each hourly session, based on lower timeframe price action.
Core Concept:
Fair Value Gap (FVG) Detection:
Uses a 3-candle pattern to detect price gaps
Key Features:
1. Hourly Time-Based Filtering:
Divides the trading day into hourly blocks
Shows ONLY the first FVG(s) that appear in each hour
Resets tracking at the start of each new hour
Uses America/New_York timezone
2. Two Display Modes:
"First Only": Shows whichever FVG appears first per hour (bullish OR bearish)
Once one box appears, no more boxes for that hour
"Show Both": Shows first bullish AND first bearish FVG per hour
Displays the first bull FVG + the first bear FVG independently
3. Multi-Timeframe Support:
Lower Timeframe Selection: Choose 15-second, 1-minute, or 5-minute FVG detection
Works on ANY chart timeframe:
On 1-min chart: Uses direct candle data
On higher timeframes (5-min, 15-min, hourly, etc.): Fetches lower timeframe data to detect gaps
NOTE: YOU CAN NOT GO LOWER THAN THE TIME FRAME SELECTED FOR FVG IT WILL NOT WORK BECAUSE WE ARE REQUESTING DATA FROM A LOWER TIME FRAME, IF YOU ARE LOWER THAN THAT TIME FRAME YOU WILL GET:
Error on bar 0: The chart's timeframe must be greater or equal to the timeframe used with `request.security_lower_tf()`.
4. Visual Display:
Colored boxes mark the FVG zones:
Blue (default) = Bullish FVG
Red (default) = Bearish FVG
Box positioning:
Left edge: When the FVG formed
Right edge: End of that hour (HH:59:59)
Height: The actual gap size
5. Size Filtering:
Minimum gap size setting (default: 4 ticks)
Filters out tiny, insignificant gaps
Trading Logic Behind It:
The indicator helps identify the first imbalance of each hour by:
Highlighting where price moved too fast, leaving imbalances
Traders watch these zones for setups and entry models






















