Trend-Filtered Blue DiamondTo make sure the Blue Diamond only appears during a confirmed uptrend and stays hidden during a downtrend, we need to add a "Trend Filter."
The best way to do this is by using a long-term Moving Average (like the 200 EMA). This ensures that even if you get a small bullish crossover, the diamond won't show up unless the overall market direction is positive.
圖表形態
Capital Rotational Event (CRE)What is a Capital Rotational Event (CRE)?
A Capital Rotational Event is when money shifts from one asset to another — e.g., rotation from stocks into bonds, from tech into commodities, or from one sector into another.
In technical terms it typically shows:
✔ Divergence between two asset price series
✔ Relative strength switching direction
✔ Volume/flow confirming rotation
✔ Often precedes trend acceleration in the “receiver” asset
Custom Price Offsets v6.1For use on ES, default 3, 6, 9, 13, and 19 point targets. Add indicator and click the price level that you want to use in order to measure the targets. Delete and re-apply to change set point.
RDI Price ZonesOverview
RDI Price Zones is a manual price-level visualization indicator.
It draws user-defined horizontal zones and a reference line to help visually organize important price areas on the chart.
This script does not calculate, infer, or fetch market data.
All levels are entered manually by the user.
What it draws
• Reference Line — A horizontal line at a user-defined price level.
• Upper Zones — Rectangular price areas drawn to the right of the chart.
• Lower Zones — Rectangular price areas drawn to the left of the chart.
These elements are purely visual and do not generate signals.
Inputs
• Up to three upper zone price levels (manual input).
• Up to three lower zone price levels (manual input).
• One reference price level.
• Zone thickness defined as a percentage of price.
• Optional color and border settings.
Design notes
• Zones are drawn as rectangles anchored to price levels.
• Rectangles extend a fixed number of bars for visualization purposes only.
• Percentage-based thickness allows zones to scale across different instruments.
Usage
This indicator is intended to help users visually map predefined price areas during a session.
It does not predict price movement, suggest trades, or provide trading signals.
Disclaimer
This script is provided for educational and visualization purposes only.
It does not offer trading advice, does not guarantee results, and should not be used as the sole basis for trading decisions.
Short summary (≤200 chars)
Manual price-zone visualization tool. Draws user-defined rectangular zones and a reference line. No calculations, no signals, no predictions. Educational use only.
Fibonacci Sequence Grid [BigBeluga]🔵 OVERVIEW
A geometric price mapping tool that projects Fibonacci sequence levels and grid structures from recent price swings to help traders visualize natural expansion and reversion zones.
This indicator overlays Fibonacci-based structures directly on the chart, utilizing both grid projections and horizontal levels based on the classic Fibonacci integer sequence (0, 1, 1, 2, 3, 5, 8, ...). It identifies recent swing highs or lows and builds precision-aligned levels based on the trend direction.
🔵 CONCEPTS
Uses the Fibonacci integer sequence (not ratios) to define distances from the most recent swing point.
Identifies a trend based on EMA cross of fast and slow periods.
Projects two types of Fibonacci tools:
A grid projection from the swing point, displaying multiple sloped levels based on the sequence.
A set of horizontal Fibonacci levels for clean structural references.
Levels can be plotted from either swing low or high depending on the current trend direction.
Adjustable “Size” inputs control spacing between levels for better price alignment.
Lookback period defines how far the script searches for recent swing extremes.
🔵 FEATURES
Fibonacci Grid Projection:
Draws two mirrored Fibonacci grids—one expanding away from the swing high/low, the other converging toward price.
Swing-Based Trend Detection:
Uses a fast/slow EMA crossover to determine trend direction and reference swing points for projections.
Fibonacci Sequence Levels:
Displays horizontal levels based on the Fibonacci number sequence (0, 1, 2, 3, 5, 8, 13, 21...) for natural price targets.
Dynamic Labels and Coloring:
Each level is labeled with its sequence value and colored based on trend direction (e.g., red = downtrend, green = uptrend).
Both grids and levels can be toggled on/off independently.
Sizing controls allow tighter or looser clustering of levels depending on chart scale.
🔵 HOW TO USE
Enable Fibonacci Grid to visualize price expansion zones during impulsive trends.
Use Fibonacci Levels as horizontal support/resistance or target zones.
A label below price means the current trend is up and levels are projected from swing low.
A label above price means trend is down and levels are projected from swing high.
Adjust “Size” input to fit grid/level projection to your preferred chart scale or instrument volatility.
Use in confluence with price action, trend indicators, or volume tools for layered trading decisions.
🔵 CONCLUSION
Fibonacci Sequence Grid reimagines Fibonacci analysis using whole-number spacing from natural math progressions. Whether used for projecting grid-based expansions or horizontal support/resistance zones, it provides a powerful and intuitive structure to trade within. Perfect for traders who rely on symmetry, market geometry, and mathematically consistent levels.
Gold Buy/Sell with BoxesKey Features of This Update
Box-Style Labels: Instead of small icons, this uses label.new to create larger, text-based boxes that provide immediate confirmation ("GOLD BUY CONFIRMED").
Dynamic Positioning: Labels are automatically placed at the high or low of the signal bar to avoid cluttering the price candles.
Multi-Indicator Filter: Signals only trigger when both a Moving Average crossover occurs and momentum (RSI) is in the correct zone, reducing "noise" or false signals in sideways markets.
Alert Ready: You can set mobile or desktop notifications in TradingView by selecting these specific Buy/Sell conditions in the "Create Alert" menu.
Multi SMA Indicator📊 Multi SMA Indicator - Description
This Pine Script v5 indicator is a comprehensive technical analysis system that combines multiple essential components for stock trading on Bursa Malaysia (LONG-only strategies).
✨ Key Features:
1. Multiple Simple Moving Averages (SMA)
• SMA 7 (Red) - Very short-term trend
• SMA 20 (Blue) - Short-term trend
• SMA 50 (Black) - Medium-term trend
• SMA 200 (Magenta) - Long-term trend
• All SMAs can be individually shown/hidden
2. 52-Week High/Low (Bursa Malaysia Standard)
• Uses 252 trading days
• 52W High (Green) - Yearly resistance level
• 52W Low (Red) - Yearly support level
• Detects breakouts at these critical levels
3. Bollinger Bands
• BB Length: 20 (customizable)
• Standard Deviation: 2.0
• Special candlestick coloring:
◦ Yellow: Price open & close below Lower BB (strong oversold signal)
◦ Purple: Price below Lower BB
4. Breakout Detection
• Detects breakouts with volume confirmation
• Breakout period: 20 bars (customizable)
• Volume Multiplier: 1.5x above MA20
• Candlestick coloring:
◦ Aqua 🌊: 52-week high breakout
◦ Orange 🍊: 52-week low breakdown
◦ Lime 🟢: Bullish breakout
◦ Magenta 🟣: Bearish breakout
5. Jerun Trend Signals (Trend Confirmation)
• 🦈 Jerun Buy (Aqua): Uptrend confirmation
◦ SMA7 > SMA20 > SMA50 (alignment)
◦ Price above SMA7
◦ Bullish candle with consecutive rises
• 🔥 Jerun Sell (Orange): Downtrend warning
◦ SMA7 < SMA20 < SMA50 (downtrend alignment)
◦ Price below SMA7
◦ Bearish candle with consecutive declines
6. Strong Momentum Detection
• 🚀 Signal: Strong momentum with criteria:
◦ Candle size > 1.5x ATR(14)
◦ Price increase ≥ 3% (threshold customizable)
◦ Volume spike (1.5x above MA20)
◦ Price above SMA7
7. Golden Cross & Death Cross
• 🐃 Golden Cross (Lime): Bullish signal
◦ SMA50 crosses above SMA200 (most powerful)
◦ SMA20 crosses above SMA50
• 🐻 Death Cross (Red): Bearish warning
◦ SMA50 crosses below SMA200
◦ SMA20 crosses below SMA50
📍 Visual Components:
1. Moving Average Lines - 4 SMA lines with distinct colors
2. 52W High/Low Lines - Stepline style for yearly levels
3. Bollinger Bands - 3 lines (upper, middle, lower)
4. Candlestick Colors - Dynamic coloring based on conditions
5. Signal Emojis - 🚀🦈🔥🐃🐻 for quick visual reference
6. Price Labels - Current value labels on the right side of chart
🎯 Usage:
• LONG Only: Focus on buy signals (Bursa Malaysia restriction)
• Entry Signals: Jerun Buy 🦈, Strong Momentum 🚀, Golden Cross 🐃
• Confirmation: Volume spike + Breakout + SMA alignment
• Risk Warning: Jerun Sell 🔥, Death Cross 🐻
• Oversold Opportunity: Yellow/purple candlesticks (price below BB Lower)
⚙️ Customizable Settings:
All parameters can be modified through indicator settings:
• SMA periods
• Breakout length
• Volume multiplier
• Momentum threshold
• Bollinger Bands parameters
• Toggle display for each feature
This indicator is suitable for traders who want a complete system with multiple confirmation signals for entry and risk management. 🚀📈
CRE Multi Pair Scanner
✔ 1 lead asset (capital source)
✔ Multiple receiver assets
✔ CRE signal fires per asset
✔ Table + labels show rotation winner
Bullish Trend DiamondTo create a Blue Diamond that specifically signals when a trend is turning bullish, we usually look for a "confluence" of factors (price action + momentum).
A common and effective way to define a bullish reversal is using a Moving Average Crossover combined with the RSI moving out of the oversold zone.
Blue Diamond SignalPlace Blue Diamond when RSI is 30. This will be very useful to find oversold tickers
Sarina - 2EMA Dynamic & BB - 01132026Here is a concise and professional description of your indicator in English, designed to be shared with others. It highlights the logic of "Dynamic Adaptation" and the "Anti-Noise" system without being overly technical.
Indicator Description: EMA Dynamic - Pro Adaptive System
This indicator is a high-performance trend-following tool designed to filter market noise and adapt to real-time price volatility. Unlike standard EMAs that use a fixed length, this system uses a Computational Logic that expands or contracts its period based on price momentum and distance.
Key Features:
Dynamic EMA Core: The lengths (c1 & c2) are not static. They increase or decrease dynamically as price moves, allowing the indicator to "speed up" during breakouts and "slow down" during consolidations.
Shock-Absorber (Stability Logic): To prevent "false signals" during sudden spikes, the indicator includes a stabilization filter (No-Shock). It only confirms a trend change after the price maintains its position relative to the EMAs for a specified number of bars.
Volatility-Linked Bollinger Bands: The Bollinger Bands are anchored to the Dynamic EMA 1, meaning the volatility channels expand and contract in perfect harmony with the adaptive core of the system.
Dual-Layer Signal System: Includes S-Signals (Fast/Scalp) and P-Signals (Pro/Trend) to identify different layers of market entry and exit points.
Visual Efficiency: Designed for clean charts. Works best with "Wick-only" candlestick views to focus strictly on price rejection and dynamic trend structures.
Best Used For: Identifying the "Safe Middle" of a move and avoiding the traps set by market makers during choppy price action.
Would you like me to create a separate Readme file or a Setup Guide for users who want to know exactly how to tune the "Step Inc/Dec" settings?
Structure + MTF + Failed 2U/2D + PDH/PDL Sweeps (Toolkit)How this behaves (so you are not guessing)
1) Liquidity sweeps (PDH/PDL)
PDH Sweep: price trades above yesterday’s high, then (by default) closes back below PDH
PDL Sweep: price trades below yesterday’s low, then closes back above PDL
You can allow wick-only sweeps via the input if you want more signals (and more noise, because humans love noise).
2) Failed 2U / Failed 2D
Failed 2U: candle takes prior high but closes back below it (failure)
Failed 2D: candle takes prior low but closes back above it
If you enable confirmation, the script triggers the “confirmed” entry only when the next candle breaks the fail candle in the intended direction.
3) FTFC strength meter (0–3)
Uses 3 higher timeframes you pick (defaults 15, 60, 240).
Strength = how many of those TF candles are bullish or bearish.
“Aligned” means 2 or 3 agree.
4) Consolidation filter
Flags consolidation when:
You have an inside-bar streak (default 2+) and/or
ATR is compressed vs its own SMA (default threshold 0.80)
Then it can block entries if you enable “Avoid entries during consolidation”.
5) “Setup Ready” alert
Triggers before entries when:
Sweep/rejection context exists (PDH/PDL)
Structure signal is forming (failed or reversal pattern)
Consolidation filter allows it
That’s your “stop chasing every candle” mechanism.
All-in-One SMC: CHOCH | BOS | FVG | OB | LiquidityThis script combines:
BOS (Break of Structure)
CHOCH (Change of Character)
Bullish & Bearish FVGs
Mitigation Order Blocks
Liquidity grabs (equal highs/lows)
Discount / Premium zones (relative to equilibrium)
SA CloudRegimes GC.5min 1.12.2026 OVERNIGHTSignal Architect™ — Developer Note
These daily posts are intentional.
They are designed to help potential users visually observe consistency—not just in outcomes, but in process—across multiple futures products, market conditions, and timeframes, using the Stop Hunt Indicator alongside my proprietary Signal Architect™ framework.
The goal is simple:
To show how structure, behavior, and probability repeat—every day—despite a constantly changing market.
If you follow these posts over time, you will begin to recognize that:
• The same behaviors appear across different futures contracts
• The same reactions occur on multiple timeframes
• The same structural traps and stop events repeat regardless of volatility regime
That consistency is not coincidence.
Consistency is the signal.
Over time, that consistency should become familiar—
and familiarity should become your edge.
________________________________________
🧠 What You’re Seeing (And Why It Matters)
This indicator includes a limited visual preview of a proprietary power signal I have personally developed and refined across:
• Futures
• Algorithmic trading systems
• Options structure
• Equity market behavior
Every tool I release is built around one core principle:
Clarity of direction without over-promising or over-fitting.
That is why all Signal Architect™ tools emphasize:
• Market structure first
• High-probability directional context
• Clear, visual risk framing
• No predictive claims
• No curve-fit illusions
What you see publicly is not the full system—only controlled, educational previews meant to demonstrate how structure and probability align in real markets.
________________________________________
📊 Background & Scope
Over the years, I have personally developed 800+ programs, including:
• Equity systems
• Futures strategies
• Options structure tools
• Dividend & income frameworks
• Portfolio construction and allocation logic
This includes 40+ Nasdaq-100 trading bots, several operating under extremely strict rule-sets and controlled deployment conditions.
Nothing shared publicly represents my complete internal framework.
Public posts exist for education, observation, and pattern recognition—not signals, not advice, and not promises.
________________________________________
🤝 For Those Who Find Value
If these daily posts help you see the market more clearly:
• Follow, boost, and share my scripts, Ideas, and MINDS posts
• Feel free to message me directly with questions or build requests
• Constructive feedback and collaboration are always welcome
For traders who want to go deeper, optional memberships may include:
• Additional signal access
• Early previews
• Occasional free tools and upgrades
🔗 Membership & Signals:
trianchor.gumroad.com
________________________________________
⚠️ Final Note
Everything published publicly is educational and analytical only.
Markets carry risk.
Discipline, patience, and risk management always come first.
Watch the consistency.
Study the structure.
Let the market repeat itself.
— Signal Architect™
________________________________________
🔗 Personally Developed GPT Tools
• AuctionFlow GPT
chatgpt.com
• Signal Architect™ Gamma Desk – Market Intelligence
chatgpt.com
• Gamma Squeeze Watchtower™
chatgpt.com
SA CloudRegimes + HLC3 Reclaim + CONF% (VWAP Always-On)
Purpose:
This is a market-regime + trigger engine. It paints cloud zones to show what the market is doing (expanding vs contracting, bullish vs bearish) and then fires reclaim signals when price confirms continuation via HLC3 reclaim + wick reclaim behavior.
What makes it different
VWAP is always enforced (session VWAP when available; otherwise a rolling VWAP proxy).
It separates regime (cloud) from execution (signal).
It gives a real-time confirmation score (CONF%) so you can filter out low-quality setups.
1) The 4 Cloud Zones (Regimes)
Each cloud represents a behavioral state. You don’t “guess direction” inside the cloud — you use the cloud to understand what kind of market you’re in, then you wait for the reclaim trigger.
🟩 GREEN Cloud — Bullish Expansion (Uptrend continuation)
Meaning: Trend is aligned and volatility/energy is expanding upward.
Conditions (conceptually):
Trend stack bullish: SMA3 > SMA8 > SMA20 > SMA50
Price above VWAP
Momentum/pressure supportive: W%R bullish, PFE bullish
Range behavior indicates expansion
How to trade it:
Best for: continuation longs
Wait for: Bull reclaim trigger (triangle up) to enter
Risk: false continuation late in the move (use CONF% + wick gate)
💗 PINK Cloud — Bearish Contraction in an Uptrend (Bull pullback / hedge phase)
Meaning: The market is still in an uptrend, but it is pulling back and compressing (often a hedge/unwind pause before continuation).
Conditions:
Trend still bullish (uptrend stack)
Price remains above VWAP
W%R is oversold, PFE weak → indicating pullback pressure
Range indicates contraction
How to trade it:
Best for: “buy-the-pullback” continuation
Wait for: Bull reclaim trigger after the pullback stabilizes
This is your “reload zone” — don’t long blindly; let reclaim confirm.
🟥 RED Cloud — Bearish Expansion (Downtrend continuation)
Meaning: Trend is aligned bearish and volatility/energy is expanding downward.
Conditions:
Trend stack bearish: SMA3 < SMA8 < SMA20 < SMA50
Price below VWAP
W%R oversold + PFE weak/negative
Range behavior indicates expansion
How to trade it:
Best for: continuation shorts
Wait for: Bear reclaim trigger (triangle down) to enter
Risk: late-stage selling → use CONF% + wick gate.
🟩 (Light Green) Cloud — Bullish Contraction in a Downtrend (Bear pullback / bounce phase)
Meaning: The market is still in a downtrend, but it’s bouncing and compressing (often the pause before continuation lower).
Conditions:
Downtrend stack remains intact
Price remains below VWAP
W%R improving / PFE stabilizing
Range indicates contraction
How to trade it:
Best for: sell-the-bounce continuation
Wait for: Bear reclaim trigger to confirm the bounce is ending.
2) Zone Signals (G / P / R / LG markers)
These are zone-entry markers that fire only on the first bar when a zone turns on.
G = Green Zone started (bull expansion)
P = Pink Zone started (bear contraction inside uptrend)
R = Red Zone started (bear expansion)
LG = Light Green Zone started (bull contraction inside downtrend)
How to use them:
These are context markers, not trade entries.
They tell you: “We just entered a new regime. Now wait for reclaim.”
3) The Actual Trade Triggers: “Reclaim” Signals (RECL triangles)
The triangle “RECL” signals are your execution triggers.
Bull Reclaim (Triangle Up)
Fires only when the system believes the market is in a bullish regime (Green or Pink) and then sees:
A bull candle
A cross back above HLC3
A prior-bar reclaim wick (optional but recommended)
Interpretation:
Pullback resolved → price reclaimed balance (HLC3) → continuation likely.
Bear Reclaim (Triangle Down)
Fires only when the system believes the market is in a bearish regime (Red or Light Green) and then sees:
A bear candle
A cross back below HLC3
A prior-bar reclaim wick (optional)
Interpretation:
Bounce resolved → price lost balance (HLC3) → continuation lower likely.
4) CONF% Bubble (Real-Time Probability Filter)
Whenever a reclaim signal fires, the script calculates a confirmation score (0–100) using weighted factors:
Trend alignment
VWAP alignment
Zone alignment
HLC3 reclaim cross
Wick reclaim gate (if enabled)
W%R alignment
PFE alignment
Default filter
Bubble only prints if CONF% ≥ 40%
You can raise it if you want fewer, cleaner trades:
50–60% = fewer but higher quality
70%+ = very selective
How to use CONF% properly
It’s not “win rate.”
It’s a confluence meter: “How many of my conditions are aligned right now?”
Use it as a trade permission layer.
5) Recommended Workflow (The Correct Way)
Step 1 — Identify the active cloud
Green/ Pink = you’re looking for long continuation
Red/ Light Green = you’re looking for short continuation
Step 2 — Let the pullback finish
Pink and Light Green are pullback/bounce phases.
Don’t jump in — wait.
Step 3 — Take ONLY reclaim triggers
Triangle up/down is your “go” signal.
Step 4 — Use CONF% to filter
If CONF% is low, skip.
If CONF% is strong, you have confluence.
6) Best Timeframes (Practical)
This tool works on many charts, but it shines where regimes develop clearly.
Best (most stable)
15m
1H
2H
4H
Faster (more signals, more noise)
3m / 5m can work, but you’ll need:
tighter tickSize accuracy
slightly looser thresholds
higher CONF% filtering
7) Key Settings You’ll Actually Adjust
If you don’t see many clouds on a timeframe:
Lower pfeBullThresh (ex: 35 → 30)
Lower expansionMin (60 → 55)
Raise contractionMax (35 → 40)
If you see too many weak signals:
Raise minConfirmPct (40 → 50/60)
Keep usePrevWickGate = true
8) Simple Interpretation Cheat Sheet
Green: bull continuation environment → wait for bull reclaim
Pink: pullback in bull trend → best “reload” → wait for bull reclaim
Red: bear continuation environment → wait for bear reclaim
Light Green: bounce in bear trend → best “sell bounce” → wait for bear reclaim
eBacktesting - Learning: Power of 3eBacktesting - Learning: Power of 3 highlights ICT’s “Power of 3” intraday story:
- Accumulation: price builds a quiet range
- Manipulation: a sweep grabs liquidity above or below that range (the classic stop hunt)
- Distribution: the real move expands away from that range, often in the opposite direction of the sweep
Use it to train your eyes to recognize when price is likely “setting up” vs when the session is actually “moving,” and to build a clean daily narrative around liquidity and expansion.
These indicators are built to pair perfectly with the eBacktesting extension, where traders can practice these concepts step-by-step. Backtesting concepts visually like this is one of the fastest ways to learn, build confidence, and improve trading performance.
Educational use only. Not financial advice.
MACD Trend Count ScoreThis indicator is designed to confirm potential future trends in an asset’s price by analyzing the MACD histogram in the past. It works by counting positive and negative MACD bars within the selected chart timeframe to calculate a Strength Index, which reflects the past trend direction and intensity.
Summarizing the predominance of positive or negative bars across higher timeframes in the past such as daily, weekly, bi-weekly, and quarterly, it provides insight to anticipate how the trend may evolve in upcoming periods, according to the predetermined range scales Strong Bullish, Moderate Bullish, Neutral, Moderate Bearish and Strong Bearish.
Additionally, a dedicated module linked to the strength index is optimized for short-term charts (2-minute, 5-minute and 15-minute timeframes), making it a valuable tool for day trading strategies.
QUARTERS THEORY XAUUSDThe “Quarter Theory XAUUSD” indicator on TradingView is designed to automatically plot horizontal price levels in $25 increments on your chart, providing traders with a clear visual representation of key psychological and technical price points. These levels are particularly useful for instruments like XAU/USD, where price often reacts to round numbers, forming support and resistance zones that can be leveraged for both scalping and swing trading strategies. By showing all $25 increments as horizontal white lines, the indicator ensures that traders can quickly identify potential entry and exit points, without the need for manual drawing or repeated calculations.
The indicator works by calculating the nearest $25 multiple relative to the current market price and then drawing horizontal lines across the chart for all increments within a defined range. This range can be customized to suit the instrument being traded; for example, for gold (XAU/USD), a typical range might extend from 0 to 5000, covering all practical price levels that could be relevant in both high and low market conditions. By using Pine Script’s persistent variables, the indicator efficiently creates these lines only once at the start of the chart, avoiding unnecessary resource usage and preventing TradingView from slowing down, which can happen if lines are redrawn every bar.
From a trading perspective, these levels serve multiple purposes. For scalpers, the $25 increments act as micro support and resistance points, helping to determine short-term price reactions and potential breakout zones. Scalpers can use these levels to enter positions with tight stop-loss orders just beyond a level and take profits near the next $25 increment, which aligns with common price behavior patterns in highly liquid instruments. For swing traders, the same levels provide broader context, allowing them to identify areas where price might pause or reverse over several days. Swing traders can use these levels to align trades with the prevailing trend, particularly when combined with other indicators such as moving averages or trendlines.
Another key advantage of the Quarterly Levels indicator is its simplicity and visual clarity. By plotting lines in a uniform white color and extending them to the right, the chart remains clean and easy to read, allowing traders to focus on price action and market dynamics rather than cluttered technical drawings. This visual consistency also helps in backtesting and strategy development, as traders can quickly see how price interacts with each level over time. Additionally, the use of round-number increments leverages the psychological tendencies of market participants, as many traders place stop orders or entry points near these levels, making them natural zones of interest.
Overall, the Quarterly Levels indicator combines efficiency, clarity, and practical trading utility into a single tool. It streamlines chart analysis, highlights meaningful price zones, and supports both scalping and swing trading approaches, making it an essential addition to a trader’s toolkit. By understanding how to integrate these levels into trading strategies, traders can make more informed decisions, manage risk effectively, and identify high-probability trade setups across various market conditions.
TJR asia session sweep//@version=5
strategy("TJR asia session sweep", "TJR Asia Sweep", overlay=true, max_lines_count=500, max_labels_count=500)
// Input settings
show_asian = input.bool(true, "Show Asian Session", group="Visual Settings")
show_london = input.bool(true, "Show London Session", group="Visual Settings")
show_swing_points = input.bool(true, "Show Asian Swing Points", group="Visual Settings")
show_market_structure = input.bool(true, "Show Market Structure", group="Visual Settings")
show_bos = input.bool(true, "Show Break of Structure", group="Visual Settings")
// Session Time Settings
asian_start_hour_input = input.int(22, "Asian Session Start Hour", minval=0, maxval=23, group="Session Times")
asian_end_hour_input = input.int(3, "Asian Session End Hour", minval=0, maxval=23, group="Session Times")
london_start_hour_input = input.int(3, "London Session Start Hour", minval=0, maxval=23, group="Session Times")
london_end_hour_input = input.int(8, "London Session End Hour", minval=0, maxval=23, group="Session Times")
session_timezone = input.string("America/New_York", "Session Timezone", options= , group="Session Times")
// Risk Management Settings
use_atr_sl = input.bool(false, "Use ATR Multiplier for Stop Loss", group="Risk Management")
atr_length = input.int(14, "ATR Length", minval=1, maxval=50, group="Risk Management")
atr_multiplier = input.float(2.0, "ATR Multiplier for Stop Loss", minval=0.5, maxval=10.0, group="Risk Management")
force_london_close = input.bool(true, "Force Close at London Session End", group="Risk Management")
cutoff_minutes = input.int(60, "Minutes Before Session End to Stop New Trades", minval=0, maxval=300, group="Risk Management")
// Position Sizing Settings
position_sizing_method = input.string("USD Risk", "Position Sizing Method", options= , group="Position Sizing")
usd_risk_per_trade = input.float(100.0, "USD Risk Per Trade", minval=1.0, maxval=10000.0, group="Position Sizing")
fixed_contracts = input.float(1.0, "Fixed Number of Contracts", minval=0.01, maxval=1000.0, step=0.01, group="Position Sizing")
// Color settings
asian_color = input.color(color.red, "Asian Session Color")
london_color = input.color(color.blue, "London Session Color")
swing_high_color = input.color(color.orange, "Swing High Color")
swing_low_color = input.color(color.lime, "Swing Low Color")
bullish_structure_color = input.color(color.green, "Bullish Structure Color")
bearish_structure_color = input.color(color.red, "Bearish Structure Color")
bos_color = input.color(color.orange, "Break of Structure Color")
// Line settings
line_width = input.int(2, "Line Width", minval=1, maxval=5)
// ATR calculation for stop loss
atr = ta.atr(atr_length)
// Position size calculation function
calculate_position_size(entry_price, stop_loss_price) =>
var float position_size = na
if position_sizing_method == "Fixed Contracts"
position_size := fixed_contracts
else // USD Risk method
stop_distance = math.abs(entry_price - stop_loss_price)
if stop_distance > 0
// Calculate position size based on USD risk per trade
// For forex: position_size = risk_amount / (stop_distance * point_value)
// For most forex pairs, point value = 1 (since we're dealing with price differences directly)
position_size := usd_risk_per_trade / stop_distance
else
position_size := fixed_contracts // Fallback to fixed contracts if stop distance is 0
position_size
// Session time definitions (using input variables)
asian_start_hour = asian_start_hour_input
asian_end_hour = asian_end_hour_input
london_start_hour = london_start_hour_input
london_end_hour = london_end_hour_input
// Get current hour using selected timezone
current_hour = hour(time, session_timezone)
// Previous hour for transition detection
prev_hour = hour(time , session_timezone)
// Session transition detection
asian_start = current_hour == asian_start_hour and prev_hour != asian_start_hour
asian_end = current_hour == asian_end_hour and prev_hour != asian_end_hour
london_start = current_hour == london_start_hour and prev_hour != london_start_hour
london_end = current_hour == london_end_hour and prev_hour != london_end_hour
// Session activity detection
asian_active = (current_hour >= asian_start_hour) or (current_hour < asian_end_hour)
london_active = (current_hour >= london_start_hour) and (current_hour < london_end_hour)
// Session boxes - keep previous sessions visible
var box asian_session_box = na
var box london_session_box = na
// Create Asian session box
if show_asian and asian_start
// Create new box at session start (previous box remains visible)
asian_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=asian_color, bgcolor=color.new(asian_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate session highs and lows for consistency
asian_session_length = asian_active and not na(asian_session_box) ? bar_index - box.get_left(asian_session_box) + 1 : 1
current_asian_high = ta.highest(high, asian_session_length)
current_asian_low = ta.lowest(low, asian_session_length)
// Update Asian session box continuously during session
if show_asian and asian_active and not na(asian_session_box)
box.set_right(asian_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(asian_session_box, current_asian_high)
box.set_bottom(asian_session_box, current_asian_low)
// Create London session box
if show_london and london_start
// Create new box at session start (previous box remains visible)
london_session_box := box.new(bar_index, high, bar_index + 1, low,
border_color=london_color, bgcolor=color.new(london_color, 90),
border_width=2, border_style=line.style_solid)
// Pre-calculate London session highs and lows for consistency
london_session_length = london_active and not na(london_session_box) ? bar_index - box.get_left(london_session_box) + 1 : 1
current_london_high = ta.highest(high, london_session_length)
current_london_low = ta.lowest(low, london_session_length)
// Update London session box continuously during session
if show_london and london_active and not na(london_session_box)
box.set_right(london_session_box, bar_index)
// Update box to contain session highs and lows
box.set_top(london_session_box, current_london_high)
box.set_bottom(london_session_box, current_london_low)
// Asian Session Swing Points Detection
var float asian_session_high = na
var float asian_session_low = na
var int asian_high_bar = na
var int asian_low_bar = na
// Asian Session Absolute High/Low for TP levels
var float asian_absolute_high = na
var float asian_absolute_low = na
var line asian_high_line = na
var line asian_low_line = na
var label asian_high_label = na
var label asian_low_label = na
var bool high_broken = false
var bool low_broken = false
// London Session High/Low tracking for stop loss
var float london_session_high = na
var float london_session_low = na
// Market structure tracking variables
var string breakout_direction = na // "bullish" or "bearish"
var float last_hh_level = na // Last Higher High level
var float last_hl_level = na // Last Higher Low level
var float last_ll_level = na // Last Lower Low level
var float last_lh_level = na // Last Lower High level
var int structure_count = 0
var string last_structure_type = na // "HH", "HL", "LL", "LH"
// Legacy variables for compatibility
var float last_swing_high = na
var float last_swing_low = na
var int last_high_bar = na
var int last_low_bar = na
// Market structure state tracking
var float pending_high = na
var float pending_low = na
var int pending_high_bar = na
var int pending_low_bar = na
var bool waiting_for_confirmation = false
// Break of Structure tracking variables
var float most_recent_hl = na
var float most_recent_lh = na
var int most_recent_hl_bar = na
var int most_recent_lh_bar = na
var bool bos_detected = false
// Trading variables
var bool trade_taken = false
// Trade visualization boxes (based on Casper strategy approach)
var box current_profit_box = na
var box current_sl_box = na
// Update swing points during Asian session
if asian_active and show_swing_points
// Always track absolute high/low for both TP levels and breakout detection
if na(asian_absolute_high) or high > asian_absolute_high
asian_absolute_high := high
if na(asian_absolute_low) or low < asian_absolute_low
asian_absolute_low := low
// Use absolute high/low for breakout levels (simplified logic)
if na(asian_session_high) or high > asian_session_high
asian_session_high := high
asian_high_bar := bar_index
if na(asian_session_low) or low < asian_session_low
asian_session_low := low
asian_low_bar := bar_index
// Track London session high/low for stop loss levels
if london_active
if na(london_session_high) or high > london_session_high
london_session_high := high
if na(london_session_low) or low < london_session_low
london_session_low := low
// Draw initial lines when Asian session ends
if asian_end and show_swing_points
if not na(asian_session_high) and not na(asian_high_bar)
// Draw extending line for high
asian_high_line := line.new(asian_high_bar, asian_session_high, bar_index + 200, asian_session_high,
color=swing_high_color, width=2, style=line.style_dashed, extend=extend.right)
asian_high_label := label.new(bar_index + 5, asian_session_high, "Asian High: " + str.tostring(asian_session_high, "#.####"), style=label.style_label_left, color=swing_high_color, textcolor=color.white, size=size.small)
if not na(asian_session_low) and not na(asian_low_bar)
// Draw extending line for low
asian_low_line := line.new(asian_low_bar, asian_session_low, bar_index + 200, asian_session_low,
color=swing_low_color, width=2, style=line.style_dashed, extend=extend.right)
asian_low_label := label.new(bar_index + 5, asian_session_low, "Asian Low: " + str.tostring(asian_session_low, "#.####"), style=label.style_label_left, color=swing_low_color, textcolor=color.white, size=size.small)
// Reset break flags for new session
high_broken := false
low_broken := false
// Check for breakouts during London session
if london_active and show_swing_points and not na(asian_session_high) and not na(asian_session_low)
// Check if Asian high is broken
if not high_broken and not low_broken and high > asian_session_high
high_broken := true
// Update high line to end at break point
if not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
// Remove the low line (first break wins)
if not na(asian_low_line)
line.delete(asian_low_line)
if not na(asian_low_label)
label.delete(asian_low_label)
// Add break marker
label.new(bar_index, asian_session_high * 1.001, "HIGH BREAK!",
style=label.style_label_down, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bullish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_high_bar := bar_index
structure_count := 0
// Check if Asian low is broken
if not low_broken and not high_broken and low < asian_session_low
low_broken := true
// Update low line to end at break point
if not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Remove the high line (first break wins)
if not na(asian_high_line)
line.delete(asian_high_line)
if not na(asian_high_label)
label.delete(asian_high_label)
// Add break marker
label.new(bar_index, asian_session_low * 0.999, "LOW BREAK!",
style=label.style_label_up, color=color.red, textcolor=color.white, size=size.normal)
// Set breakout direction and initialize structure tracking
breakout_direction := "bearish"
last_swing_high := asian_session_high
last_swing_low := asian_session_low
last_low_bar := bar_index
structure_count := 0
// Stop extending lines when London session ends (if not already broken)
if london_end and show_swing_points
if not high_broken and not na(asian_high_line)
line.set_x2(asian_high_line, bar_index)
line.set_extend(asian_high_line, extend.none)
if not low_broken and not na(asian_low_line)
line.set_x2(asian_low_line, bar_index)
line.set_extend(asian_low_line, extend.none)
// Force close all trades at London session end (if enabled)
if london_end and force_london_close
if strategy.position_size != 0
// Extend boxes immediately before session close to prevent timing issues
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
strategy.close_all(comment="London Close")
trade_taken := false // Reset trade flag for next session
// Market structure detection after breakout (only during London session and before first BoS)
if show_market_structure and not na(breakout_direction) and london_active and not bos_detected
// Bullish structure tracking (HH, HL alternating)
if breakout_direction == "bullish"
// Check for Higher High pattern: Bullish candle followed by bearish candle
pattern_high = math.max(high , high)
prev_hh = na(last_hh_level) ? last_swing_high : last_hh_level
// HH Detection: Only if we expect HH next (no last structure or last was HL)
if (na(last_structure_type) or last_structure_type == "HL") and close > open and close < open and pattern_high > prev_hh and close > prev_hh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_hh = true
if is_too_close and structure_count > 0 and pattern_high <= last_hh_level
should_create_hh := false
if should_create_hh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "HH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hh_level := pattern_high
last_swing_high := pattern_high
last_high_bar := bar_index
last_structure_type := "HH"
// HL Detection: Only if we expect HL next (last was HH)
pattern_low = math.min(low , low)
prev_hl = na(last_hl_level) ? last_swing_low : last_hl_level
if last_structure_type == "HH" and close < open and close > open and pattern_low > prev_hl and close > prev_hl
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_hl = true
if is_too_close and pattern_low <= last_hl_level
should_create_hl := false
if should_create_hl
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "HL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_hl_level := pattern_low
most_recent_hl := pattern_low // Update most recent HL for BoS detection
most_recent_hl_bar := bar_index - 1 // Store HL bar position
last_low_bar := bar_index
last_structure_type := "HL"
// Bearish structure tracking (LL, LH alternating)
if breakout_direction == "bearish"
// Check for Lower Low pattern: Bearish candle followed by bullish candle
pattern_low = math.min(low , low)
prev_ll = na(last_ll_level) ? last_swing_low : last_ll_level
// LL Detection: Only if we expect LL next (no last structure or last was LH)
if (na(last_structure_type) or last_structure_type == "LH") and close < open and close > open and pattern_low < prev_ll and close < prev_ll
// Check consolidation
is_too_close = not na(last_low_bar) and (bar_index - last_low_bar) <= 4
should_create_ll = true
if is_too_close and structure_count > 0 and pattern_low >= last_ll_level
should_create_ll := false
if should_create_ll
structure_count := structure_count + 1
label.new(bar_index - 1, low - (low * 0.0003), "LL" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_ll_level := pattern_low
last_swing_low := pattern_low
last_low_bar := bar_index
last_structure_type := "LL"
// LH Detection: Only if we expect LH next (last was LL)
pattern_high = math.max(high , high)
prev_lh = na(last_lh_level) ? last_swing_high : last_lh_level
if last_structure_type == "LL" and close > open and close < open and pattern_high < prev_lh and close < prev_lh
// Check consolidation
is_too_close = not na(last_high_bar) and (bar_index - last_high_bar) <= 4
should_create_lh = true
if is_too_close and pattern_high >= last_lh_level
should_create_lh := false
if should_create_lh
structure_count := structure_count + 1
label.new(bar_index - 1, high + (high * 0.0003), "LH" + str.tostring(structure_count),
style=label.style_none, color=color.new(color.white, 100),
textcolor=color.white, size=size.small)
last_lh_level := pattern_high
most_recent_lh := pattern_high // Update most recent LH for BoS detection
most_recent_lh_bar := bar_index - 1 // Store LH bar position
last_high_bar := bar_index
last_structure_type := "LH"
// Check if we're within the cutoff period before London session end
current_minute = minute(time, session_timezone)
london_end_time_minutes = london_end_hour * 60 // Convert London end hour to minutes
current_time_minutes = current_hour * 60 + current_minute // Current time in minutes
// Calculate minutes remaining in London session
london_session_minutes_remaining = london_end_time_minutes - current_time_minutes
// Handle day rollover case (e.g., if london_end is 8:00 (480 min) and current is 23:30 (1410 min))
if london_session_minutes_remaining < 0
london_session_minutes_remaining := london_session_minutes_remaining + (24 * 60) // Add 24 hours in minutes
// Only allow trades if more than cutoff_minutes remaining in London session
allow_new_trades = london_session_minutes_remaining > cutoff_minutes
// Break of Structure (BoS) Detection and Trading Logic - Only first BoS per London session and outside cutoff period
if show_bos and london_active and show_market_structure and not bos_detected and not trade_taken and allow_new_trades
// Bullish BoS: Price closes below the most recent HL (after bullish breakout) - SELL SIGNAL
if breakout_direction == "bullish" and not na(most_recent_hl) and not na(most_recent_hl_bar)
// Check minimum distance requirement (at least 4 candles between BoS and HL)
if close < most_recent_hl and (bar_index - most_recent_hl_bar) >= 4
// Draw dotted line from HL position to BoS point
line.new(most_recent_hl_bar, most_recent_hl, bar_index, most_recent_hl,
color=bos_color, width=2, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_hl_bar + bar_index) / 2)
// Draw BoS label below the line for HL break
label.new(center_bar, most_recent_hl - (most_recent_hl * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// SELL ENTRY
if not na(london_session_high) and not na(asian_absolute_low)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close + (atr * atr_multiplier) : london_session_high
take_profit_level = asian_absolute_low
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("SELL", strategy.short, qty=position_size, comment="BoS Sell")
strategy.exit("SELL EXIT", "SELL", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=take_profit_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=stop_loss_level,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Bearish BoS: Price closes above the most recent LH (after bearish breakout) - BUY SIGNAL
if breakout_direction == "bearish" and not na(most_recent_lh) and not na(most_recent_lh_bar)
// Check minimum distance requirement (at least 4 candles between BoS and LH)
if close > most_recent_lh and (bar_index - most_recent_lh_bar) >= 4
// Draw dotted line from LH position to BoS point
line.new(most_recent_lh_bar, most_recent_lh, bar_index, most_recent_lh,
color=bos_color, width=1, style=line.style_dotted, extend=extend.none)
// Calculate center position for BoS label
center_bar = math.round((most_recent_lh_bar + bar_index) / 2)
// Draw BoS label above the line for LH break
label.new(center_bar, most_recent_lh + (most_recent_lh * 0.0005), "BoS",
style=label.style_none, color=color.new(color.white, 100),
textcolor=bos_color, size=size.normal)
// BUY ENTRY
if not na(london_session_low) and not na(asian_absolute_high)
// Calculate stop loss based on settings
stop_loss_level = use_atr_sl ? close - (atr * atr_multiplier) : london_session_low
take_profit_level = asian_absolute_high
entry_price = close
// Calculate position size based on user settings
position_size = calculate_position_size(entry_price, stop_loss_level)
strategy.entry("BUY", strategy.long, qty=position_size, comment="BoS Buy")
strategy.exit("BUY EXIT", "BUY", stop=stop_loss_level, limit=take_profit_level, comment="SL/TP")
// Create trade visualization boxes (TradingView style) - minimum 8 bars width
// Blue profit zone box (from entry to take profit)
current_profit_box := box.new(left=bar_index, top=entry_price, right=bar_index + 8, bottom=take_profit_level,
bgcolor=color.new(color.blue, 70), border_width=0)
// Red stop loss zone box (from entry to stop loss)
current_sl_box := box.new(left=bar_index, top=stop_loss_level, right=bar_index + 8, bottom=entry_price,
bgcolor=color.new(color.red, 70), border_width=0)
trade_taken := true
bos_detected := true // Mark BoS as detected for this session
// Position close detection for extending boxes (based on Casper strategy)
if barstate.isconfirmed and strategy.position_size == 0 and strategy.position_size != 0
// Extend trade visualization boxes to exact exit point when position closes
if not na(current_profit_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na // Clear reference after extending
if not na(current_sl_box)
// Ensure minimum 8 bars width or extend to current bar, whichever is longer
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na // Clear reference after extending
// Backup safety check - extend boxes if position is closed but boxes still active
if not na(current_profit_box) and strategy.position_size == 0
box_left = box.get_left(current_profit_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_profit_box, final_right)
current_profit_box := na
if not na(current_sl_box) and strategy.position_size == 0
box_left = box.get_left(current_sl_box)
min_right = box_left + 8
final_right = math.max(min_right, bar_index)
box.set_right(current_sl_box, final_right)
current_sl_box := na
// Reset everything when new Asian session starts
if asian_start and show_swing_points
asian_session_high := na
asian_session_low := na
asian_high_bar := na
asian_low_bar := na
// Reset absolute levels
asian_absolute_high := na
asian_absolute_low := na
asian_high_line := na
asian_low_line := na
asian_high_label := na
asian_low_label := na
high_broken := false
low_broken := false
// Reset London session levels
london_session_high := na
london_session_low := na
// Reset market structure tracking
breakout_direction := na
last_hh_level := na
last_hl_level := na
last_ll_level := na
last_lh_level := na
last_swing_high := na
last_swing_low := na
last_high_bar := na
last_low_bar := na
structure_count := 0
last_structure_type := na
pending_high := na
pending_low := na
pending_high_bar := na
pending_low_bar := na
waiting_for_confirmation := false
// Reset BoS tracking
most_recent_hl := na
most_recent_lh := na
most_recent_hl_bar := na
most_recent_lh_bar := na
bos_detected := false
// Reset trading
trade_taken := false
// Reset current trade boxes
current_profit_box := na
current_sl_box := na
// Debug info (optional)
show_debug = input.bool(false, "Show Debug Info")
if show_debug
var table debug_table = table.new(position.top_right, 2, 3, bgcolor=color.white, border_width=1)
if barstate.islast
table.cell(debug_table, 0, 0, "Current Hour:", text_color=color.black)
table.cell(debug_table, 1, 0, str.tostring(current_hour), text_color=color.black)
table.cell(debug_table, 0, 1, "Asian Active:", text_color=color.black)
table.cell(debug_table, 1, 1, str.tostring((current_hour >= asian_start_hour) or (current_hour < asian_end_hour)), text_color=color.black)
table.cell(debug_table, 0, 2, "London Active:", text_color=color.black)
table.cell(debug_table, 1, 2, str.tostring((current_hour >= london_start_hour) and (current_hour < london_end_hour)), text_color=color.black)
Multi TF Volume ATRThis indicator measures volatility using ATR applied to volume across multiple timeframes. It helps identify when real momentum enters the market by showing volume spikes on 1h, 4h, 12h, and Daily charts. When several timeframes spike at the same time, it often signals strong moves, breakouts, or major shifts in volatility.
The script calculates Volume ATR for 1h, 4h, 12h, and 1D. Each timeframe generates its own spike condition. The indicator then checks for alignment between timeframes. The 1h histogram changes color based on the strength of the signal.
Red means multi timeframe alignment. This is the strongest signal and shows that several timeframes are spiking together.
Yellow means a 1h spike only. This is an early warning of local volatility.
Blue means no spike.
The indicator also plots higher timeframe ATR lines for context. These include 4h ATR, 12h ATR, and 1D ATR. When these lines rise together, volatility is building. Spike markers appear at the top of the pane when higher timeframes trigger.
You can choose how strict the alignment should be. Options include all three timeframes (1h, 4h, 12h), at least two timeframes, or including the daily timeframe for even stronger confirmation.
The script includes alert conditions for 1h spikes, multi timeframe alignment spikes, and daily spikes. These alerts help you stay ahead of volatility without watching charts constantly.
This indicator is useful for many trading styles. Breakout traders use red bars to confirm momentum. Mean reversion traders use daily spikes to confirm volatility conditions. Trend traders watch rising 4h and 12h ATR lines. Scalpers use yellow bars as early warnings.
Volume ATR shows how quickly volume is expanding. When several timeframes spike together, it often signals institutional activity, liquidity events, volatility shifts, breakouts, or reversals. This provides information that price alone cannot show.
First Candle Session Levels. Sessions custom timeframes settingsFirst Candle Rule – Scalping Itinerary
Chart Setup
Use two charts at the same time: the five-minute chart and the one-minute chart. This double-chart approach allows you to define structure on the higher timeframe and execute with precision on the lower timeframe.
The First Candle
Focus on the first five-minute candle of the session. Once this candle has fully closed, mark its high and its low. These two price levels form the operating range for the setup.
Execution Phase
After the range is marked, wait for price to return into or react around the first candle range. Execution is carried out on the one-minute chart, using price reaction at the high or low of the first five-minute candle.
Conceptual Framework
This method is built around Smart Money Concepts and Inner Circle Trader principles. It aligns closely with first candle theory and candle range theory. If you understand ICT concepts, the logic behind this setup will be immediately familiar.
Strategy Type
This is a scalping system designed to be simple, repeatable, and effective on a daily basis. It is not about prediction, but about reacting to price within a clearly defined range.
Learning Path
To fully understand the background of this approach, study first candle theory and related ICT material on YouTube. This will help you see how and why the setup works across different market conditions.
Final Purpose
This algorithm was built to be accessible to everyone. The objective is consistency, discipline, and structure, with the long-term goal of helping traders work toward financial freedom through a clear and repeatable process.
OXS for GC A Share MarketThis is a dummy indicator for selecting shares from GC A share market based on momentum thoery
Bullish Diamond (Current TF)To ensure the Blue Diamond only appears based on the current timeframe's bullish momentum and ignores any signals during a downtrend, we will use a logic that checks two things:
Trend Filter: Is the current price above a major Moving Average (the 200-period)?
Crossover: Did a fast Moving Average just cross above a slow one on the specific bars you are looking at?
30d Rolling TWAP (Hourly)code:
//@version=5
indicator("30d Rolling TWAP (Hourly)", overlay=true)
// Calculation: (High + Low + Close) / 3
typicalPrice = hlc3
// 30 days * 24 hours = 720 bars
length = 720
twap30 = ta.sma(typicalPrice, length)
// Plotting
plot(twap30, color=color.new(#2962FF, 0), title="30d Hourly TWAP", linewidth=2)
// Optional: Background highlight
fillColor = close > twap30 ? color.new(color.green, 90) : color.new(color.red, 90)
bgcolor(fillColor)






















