Indicator

Indicator

Indicator

XAUUSD ICC SMC PRO 4H 15M 5MXAU/USD ICC + SMC Multi-Timeframe Indicator
The XAU/USD ICC + SMC Multi-Timeframe Indicator is designed to identify high-probability continuation setups by combining Indication, Correction and Continuation (ICC) with Supply & Demand, Liquidity Sweeps, CHoCH, BOS and multi-timeframe market structure.
The indicator follows a strict top-down process using 4H → 15M → 5M analysis.
4H – Indication and Supply/Demand
The 4-hour timeframe defines the main market direction and the institutional area of interest.
When price creates a confirmed Break of Structure (BOS), the indicator searches for the last opposite candle responsible for the displacement.
For a bullish structure, this area is marked as a 4H Demand Zone.
For a bearish structure, it is marked as a 4H Supply Zone.
The zone is automatically displayed as a rectangle and extended forward until price returns to it.
The 4H stage represents the INDICATION phase of the ICC model.
15M – Liquidity Sweep and CHoCH
Once price returns inside the 4H Supply or Demand zone, the indicator begins analyzing the 15-minute structure.
For a bullish setup, price must first take Sell-Side Liquidity below a previous 15M low and then close back above that level.
For a bearish setup, price must take Buy-Side Liquidity above a previous 15M high and close back below it.
A liquidity sweep alone is not considered an entry signal.
The indicator waits for a Change of Character (CHoCH) confirming that the short-term market structure is beginning to reverse.
The relationship between liquidity sweeps, displacement, CHoCH and BOS is similar to the structure shown in the example diagrams above.
15M – BOS Confirmation
After CHoCH, the system waits for another structural break in the same direction.
This second break is identified as the 15M BOS confirmation.
For a bullish setup:
Sell-Side Liquidity Sweep → Bullish CHoCH → Bullish BOS
For a bearish setup:
Buy-Side Liquidity Sweep → Bearish CHoCH → Bearish BOS
BOS is used primarily as a continuation confirmation, while CHoCH indicates a possible structural transition.
15M – Correction
After the BOS confirmation, the indicator waits for the market to retrace.
This retracement becomes the CORRECTION phase of the ICC model.
For a bullish setup, bearish 15-minute candles forming after the bullish BOS are monitored.
For a bearish setup, bullish candles forming after the bearish BOS are monitored.
The entire correction area is highlighted with an orange rectangle.
The indicator continuously tracks the highest and lowest points of the correction.
Correction Trendline
During the correction, the indicator automatically searches for swing points that allow it to build a correction trendline.
For a bullish setup, the correction normally creates a descending structure.
The indicator therefore draws a descending resistance trendline across the correction highs.
For a bearish setup, it draws an ascending support trendline across the correction lows.
The trendline is important because the indicator does not consider the correction finished simply because price touches an Order Block.
End of Correction
The correction ends only when price breaks the correction trendline in the direction of the original 4H setup.
Bullish sequence:
Correction → Descending Trendline → Bullish Trendline Break
Bearish sequence:
Correction → Ascending Trendline → Bearish Trendline Break
At this stage the indicator displays:
CORRECTION ENDED
TRENDLINE BREAK
CONTINUATION
This represents the transition from Correction → Continuation.
5M – Execution Zone
After the 15M continuation is confirmed, the indicator moves to the 5-minute execution logic.
For a bullish setup, it waits for a 5M bullish BOS and identifies the last bearish candle that created the displacement.
That candle becomes the new 5M Demand Zone.
For a bearish setup, the last bullish candle before the bearish displacement becomes the 5M Supply Zone.
Order Blocks combined with structural breaks are commonly visualized in this way, as shown in the example chart above.
The indicator then displays:
5M DEMAND – WAIT FOR RETEST
or
5M SUPPLY – WAIT FOR RETEST
Final BUY Signal
A BUY signal requires the complete sequence:
4H Bullish BOS
→ 4H Demand
→ Sell-Side Liquidity Sweep
→ 15M Bullish CHoCH
→ 15M Bullish BOS
→ 15M Correction
→ Correction Trendline Break
→ 5M Bullish BOS
→ 5M Demand
→ Demand Retest
→ Bullish Reaction
→ STRONG BUY
The indicator will not generate a BUY signal simply because price enters a Demand zone.
Final SELL Signal
The bearish process is the exact opposite:
4H Bearish BOS
→ 4H Supply
→ Buy-Side Liquidity Sweep
→ 15M Bearish CHoCH
→ 15M Bearish BOS
→ 15M Correction
→ Correction Trendline Break
→ 5M Bearish BOS
→ 5M Supply
→ Supply Retest
→ Bearish Reaction
→ STRONG SELL
Visual Color Guide
Green rectangle: 4H/5M Demand Zone
Red rectangle: 4H/5M Supply Zone
Yellow label: Liquidity Sweep
Aqua label: CHoCH
Blue label: BOS
Orange rectangle: Correction
Green/Red trendline: Correction structure
Large green label: STRONG BUY
Large red label: STRONG SELL
ICC Logic
The complete model can therefore be summarized as:
INDICATION
4H BOS + Supply/Demand
↓
CORRECTION PREPARATION
Liquidity Sweep + CHoCH + 15M BOS
↓
CORRECTION
15M retracement + correction trendline
↓
CONTINUATION
Trendline Break + 5M BOS + Demand/Supply retest
↓
EXECUTION
STRONG BUY or STRONG SELL
This structure is intentionally strict. Its purpose is to filter out ordinary Order Block touches and wait for liquidity manipulation, structural confirmation, correction and continuation before displaying the final trading signal.
Instant
Indicator

SMC Decision by SPPATLEThis Pine Script code implements a comprehensive Smart Money Concepts (SMC) trading indicator designed for PulseWire (Version 6). It combines institutional price-action structures (such as market structure breaks, change of character, and fair value gaps) with technical indicators and a real-time summary dashboard.
Here is a detailed breakdown of its core components and features:
1. Market Structure & SMC Components
Market Structure Breaks (BOS) & Change of Character (CHoCH): Tracks swing highs and lows to detect trend continuations (BOS) and trend reversals (CHoCH). It supports filtering breaks using either candle wicks or candle closing bodies (bodyBreak).
Fair Value Gaps (FVG): Automatically identifies and plots institutional imbalances (inefficiencies) where price moved rapidly, leaving an unfilled gap. Bullish and bearish gaps are tracked via dynamic arrays and cleared once mitigated.
Supply & Demand Zones: Scans up to the last 500 bars to plot dynamic high-volume supply and demand boundaries on the chart, complete with real-time status updates and distance calculations.
2. Technical Indicators & Volume Analysis
200-period Exponential Moving Average (EMA): Plots the baseline trend filter (ta.ema(close, 200)).
Volume Weighted Average Price (VWAP): Displays institutional benchmark pricing.
Relative Volume (RVOL): Calculates volume relative to a moving average lookback window, highlighting high-volume spikes visually on the chart (barcolor and dotted reference lines) when volume exceeds the set threshold.
3. Real-Time Dashboard & Recommendation Table
The indicator features an on-chart information table positioned at the top right that summarizes key market metrics in real time:
SMC Trend: Displays whether the current structure is BULLISH, BEARISH, or NEUTRAL.
Structure Rule: Shows the last detected market event (e.g., Bullish BOS or Bearish CHoCH).
S&D Status & Zone Distance: Reports whether price is inside or approaching a Supply/Demand zone along with percentage metrics.
200 EMA Filter: Shows price position relative to the 200 EMA with percentage deviation.
Current RVOL & Volume Power: Tracks current volume performance and relative buyer/seller power ratio.
Final Recommendation: Generates an automated signal (BUY, SELL, CAUTION, or HOLD) based on a combination of the trend filter, volume expansion, power momentum, and proximity to major zones. Indicator

Smart MoolahSmart Moolah — Order Blocks, FVG, Anchored VWAP & Structure
Smart Moolah combines several price-action concepts into one configurable toolkit, built for scalpers and day traders who track market structure, imbalances, and volume-weighted price.
WHAT IT DOES
- Order Blocks — automatically detects bullish and bearish order blocks anchored to actual swing highs/lows (not just the break event), extending forward with no length or count cap until price mitigates them.
- Fair Value Gaps (FVG) — identifies 3-candle imbalances, with an optional filter to only display FVGs that form within a defined window after a structural break (BOS/CHoCH), cutting out noise from flat, choppy consolidation.
- Break of Structure (BOS) / Change of Character (CHoCH) — swing-based structure detection, color-coded green for bullish breaks and red for bearish breaks, with labels centered on a dashed line connecting the swing point to the break.
- Anchored VWAP — session, weekly, monthly, or custom bar-count anchoring, with volume-weighted deviation bands (real standard deviation, not an approximation).
- Call / Put Hold Levels — a support level ("must hold above" for calls) and resistance level ("must hold below" for puts), derived from the nearest active order block or swing point, with a live on-chart table. Levels fade and mark "BREACHED" once price closes through them.
HOW TO USE IT
Every component is independently toggleable with its own color/style settings, grouped by section (Order Blocks, FVG, Anchored VWAP, Market Structure, Call/Put Hold Levels). Recommended starting points:
- Scalping (1-5min): Swing Lookback Length 5-8, Max FVG Boxes 5-8
- Day trading (15min-1h): Swing Lookback Length 10-15, Max FVG Boxes 10-15
The Call/Put Hold Levels are technical reference points derived from structure — they indicate whether the price action your trade thesis relies on is still intact, not a guarantee of direction or profitability.
DISCLAIMER
This script is for educational and informational purposes only. It does not constitute financial advice, and past structural behavior does not guarantee future price action. Order block, FVG, and structure detection are pattern-based approximations, not certainties. Always use independent judgment and proper risk management. Indicator

2.0- Killzones EUR/GBP - Manuel De Jesus Leiva// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © tradeforopp
//@version=6
indicator("Killzones EUR/GBP - Manuel De Jesus Leiva", "Killzones EUR/GBP - Manuel De Jesus Leiva", true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)
// ---------------------------------------- Constant Functions --------------------------------------------------
get_line_type(_style) =>
switch _style
"Solid" => line.style_solid
"Dotted" => line.style_dotted
"Dashed" => line.style_dashed
get_size(x) =>
switch x
"Auto" => size.auto
"Tiny" => size.tiny
"Small" => size.small
"Normal" => size.normal
"Large" => size.large
"Huge" => size.huge
get_table_pos(pos) =>
switch pos
"Bottom Center" => position.bottom_center
"Bottom Left" => position.bottom_left
"Bottom Right" => position.bottom_right
"Middle Center" => position.middle_center
"Middle Left" => position.middle_left
"Middle Right" => position.middle_right
"Top Center" => position.top_center
"Top Left" => position.top_left
"Top Right" => position.top_right
// ---------------------------------------- Constant Functions --------------------------------------------------
// ---------------------------------------- Inputs --------------------------------------------------
var g_SETTINGS = "Settings"
max_days = input.int(1000, "Session Drawing Limit", 1, tooltip = "Only this many drawings will be kept on the chart, for each selected drawing type (killzone boxes, pivot lines, open lines, etc.). Set to 200 for ~6 months of sessions.", group = g_SETTINGS)
tf_limit = input.timeframe("60", "Timeframe Limit", tooltip = "Drawings will not appear on timeframes greater than or equal to this", group = g_SETTINGS)
gmt_tz = input.string('America/New_York', "Timezone", options = , tooltip = "Note GMT is not adjusted to reflect Daylight Saving Time changes", group = g_SETTINGS)
lbl_size = get_size(input.string('Normal', "Label Size", options = , tooltip = "The size of all labels", group = g_SETTINGS))
txt_color = input.color(color.black, "Text Color", tooltip = "The color of all label and table text", group = g_SETTINGS)
use_cutoff = input.bool(false, "Drawing Cutoff Time", inline = "CO", tooltip = "When enabled, all pivots and open price lines will stop extending at this time", group = g_SETTINGS)
cutoff = input.session("1800-1801", "", inline = "CO", group = g_SETTINGS)
var tf_limit_is_equal_or_more_chart_tf = timeframe.in_seconds('') <= timeframe.in_seconds(tf_limit)
var g_KZ = "Killzones"
// General Killzone Settings
show_kz = input.bool(true, "Show Killzone Boxes", inline = "KZ", group = g_KZ)
show_kz_text = input.bool(false, "Display Text", inline = "KZ", group = g_KZ)
box_transparency = input.int(70, "Box Transparency", 0, 100, group = g_KZ)
text_transparency = input.int(50, "Text Transparency", 0, 100, group = g_KZ)
// ==================== KILLZONE 01 ====================
use_kz01 = input.bool(true, "00:00-01:00", inline = "KZ01", group = g_KZ)
kz01_txt = input.string("00-01", "", inline = "KZ01", group = g_KZ)
kz01 = input.session("0000-0100", "", inline = "KZ01", group = g_KZ)
kz01_color = input.color(color.blue, "", inline = "KZ01", group = g_KZ)
// ==================== KILLZONE 02 ====================
use_kz02 = input.bool(true, "01:00-02:00", inline = "KZ02", group = g_KZ)
kz02_txt = input.string("01-02", "", inline = "KZ02", group = g_KZ)
kz02 = input.session("0100-0200", "", inline = "KZ02", group = g_KZ)
kz02_color = input.color(color.blue, "", inline = "KZ02", group = g_KZ)
// ==================== KILLZONE 03 ====================
use_kz03 = input.bool(true, "02:00-03:00", inline = "KZ03", group = g_KZ)
kz03_txt = input.string("02-03", "", inline = "KZ03", group = g_KZ)
kz03 = input.session("0200-0300", "", inline = "KZ03", group = g_KZ)
kz03_color = input.color(color.blue, "", inline = "KZ03", group = g_KZ)
// ==================== KILLZONE 04 ====================
use_kz04 = input.bool(true, "03:00-04:00", inline = "KZ04", group = g_KZ)
kz04_txt = input.string("03-04", "", inline = "KZ04", group = g_KZ)
kz04 = input.session("0300-0400", "", inline = "KZ04", group = g_KZ)
kz04_color = input.color(color.blue, "", inline = "KZ04", group = g_KZ)
// ==================== KILLZONE 05 ====================
use_kz05 = input.bool(true, "04:00-05:00", inline = "KZ05", group = g_KZ)
kz05_txt = input.string("04-05", "", inline = "KZ05", group = g_KZ)
kz05 = input.session("0400-0500", "", inline = "KZ05", group = g_KZ)
kz05_color = input.color(color.blue, "", inline = "KZ05", group = g_KZ)
// ==================== KILLZONE 06 ====================
use_kz06 = input.bool(true, "05:00-06:00", inline = "KZ06", group = g_KZ)
kz06_txt = input.string("05-06", "", inline = "KZ06", group = g_KZ)
kz06 = input.session("0500-0600", "", inline = "KZ06", group = g_KZ)
kz06_color = input.color(color.blue, "", inline = "KZ06", group = g_KZ)
// ==================== KILLZONE 07 ====================
use_kz07 = input.bool(true, "06:00-07:00", inline = "KZ07", group = g_KZ)
kz07_txt = input.string("06-07", "", inline = "KZ07", group = g_KZ)
kz07 = input.session("0600-0700", "", inline = "KZ07", group = g_KZ)
kz07_color = input.color(color.blue, "", inline = "KZ07", group = g_KZ)
// ==================== KILLZONE 08 ====================
use_kz08 = input.bool(true, "07:00-08:00", inline = "KZ08", group = g_KZ)
kz08_txt = input.string("07-08", "", inline = "KZ08", group = g_KZ)
kz08 = input.session("0700-0800", "", inline = "KZ08", group = g_KZ)
kz08_color = input.color(color.blue, "", inline = "KZ08", group = g_KZ)
// ==================== KILLZONE 09 ====================
use_kz09 = input.bool(true, "08:00-09:00", inline = "KZ09", group = g_KZ)
kz09_txt = input.string("08-09", "", inline = "KZ09", group = g_KZ)
kz09 = input.session("0800-0900", "", inline = "KZ09", group = g_KZ)
kz09_color = input.color(color.blue, "", inline = "KZ09", group = g_KZ)
// ==================== KILLZONE 10 ====================
use_kz10 = input.bool(true, "09:00-10:00", inline = "KZ10", group = g_KZ)
kz10_txt = input.string("09-10", "", inline = "KZ10", group = g_KZ)
kz10 = input.session("0900-1000", "", inline = "KZ10", group = g_KZ)
kz10_color = input.color(color.blue, "", inline = "KZ10", group = g_KZ)
// ==================== KILLZONE 11 ====================
use_kz11 = input.bool(true, "10:00-11:00", inline = "KZ11", group = g_KZ)
kz11_txt = input.string("10-11", "", inline = "KZ11", group = g_KZ)
kz11 = input.session("1000-1100", "", inline = "KZ11", group = g_KZ)
kz11_color = input.color(color.blue, "", inline = "KZ11", group = g_KZ)
// ==================== KILLZONE 12 ====================
use_kz12 = input.bool(true, "11:00-12:00", inline = "KZ12", group = g_KZ)
kz12_txt = input.string("11-12", "", inline = "KZ12", group = g_KZ)
kz12 = input.session("1100-1200", "", inline = "KZ12", group = g_KZ)
kz12_color = input.color(color.blue, "", inline = "KZ12", group = g_KZ)
// ==================== KILLZONE 13 ====================
use_kz13 = input.bool(true, "12:00-13:00", inline = "KZ13", group = g_KZ)
kz13_txt = input.string("12-13", "", inline = "KZ13", group = g_KZ)
kz13 = input.session("1200-1300", "", inline = "KZ13", group = g_KZ)
kz13_color = input.color(color.blue, "", inline = "KZ13", group = g_KZ)
// ==================== KILLZONE 14 ====================
use_kz14 = input.bool(true, "13:00-14:00", inline = "KZ14", group = g_KZ)
kz14_txt = input.string("13-14", "", inline = "KZ14", group = g_KZ)
kz14 = input.session("1300-1400", "", inline = "KZ14", group = g_KZ)
kz14_color = input.color(color.blue, "", inline = "KZ14", group = g_KZ)
// ==================== KILLZONE 15 ====================
use_kz15 = input.bool(true, "14:00-15:00", inline = "KZ15", group = g_KZ)
kz15_txt = input.string("14-15", "", inline = "KZ15", group = g_KZ)
kz15 = input.session("1400-1500", "", inline = "KZ15", group = g_KZ)
kz15_color = input.color(color.blue, "", inline = "KZ15", group = g_KZ)
// ==================== KILLZONE 16 ====================
use_kz16 = input.bool(true, "15:00-16:00", inline = "KZ16", group = g_KZ)
kz16_txt = input.string("15-16", "", inline = "KZ16", group = g_KZ)
kz16 = input.session("1500-1600", "", inline = "KZ16", group = g_KZ)
kz16_color = input.color(color.blue, "", inline = "KZ16", group = g_KZ)
// ==================== KILLZONE 17 ====================
use_kz17 = input.bool(true, "16:00-17:00", inline = "KZ17", group = g_KZ)
kz17_txt = input.string("16-17", "", inline = "KZ17", group = g_KZ)
kz17 = input.session("1600-1700", "", inline = "KZ17", group = g_KZ)
kz17_color = input.color(color.blue, "", inline = "KZ17", group = g_KZ)
// ==================== KILLZONE 18 ====================
use_kz18 = input.bool(true, "17:00-18:00", inline = "KZ18", group = g_KZ)
kz18_txt = input.string("17-18", "", inline = "KZ18", group = g_KZ)
kz18 = input.session("1700-1800", "", inline = "KZ18", group = g_KZ)
kz18_color = input.color(color.blue, "", inline = "KZ18", group = g_KZ)
// ==================== KILLZONE 19 ====================
use_kz19 = input.bool(true, "18:00-19:00", inline = "KZ19", group = g_KZ)
kz19_txt = input.string("18-19", "", inline = "KZ19", group = g_KZ)
kz19 = input.session("1800-1900", "", inline = "KZ19", group = g_KZ)
kz19_color = input.color(color.blue, "", inline = "KZ19", group = g_KZ)
// ==================== KILLZONE 20 ====================
use_kz20 = input.bool(true, "19:00-20:00", inline = "KZ20", group = g_KZ)
kz20_txt = input.string("19-20", "", inline = "KZ20", group = g_KZ)
kz20 = input.session("1900-2000", "", inline = "KZ20", group = g_KZ)
kz20_color = input.color(color.blue, "", inline = "KZ20", group = g_KZ)
// ==================== KILLZONE 21 ====================
use_kz21 = input.bool(true, "20:00-21:00", inline = "KZ21", group = g_KZ)
kz21_txt = input.string("20-21", "", inline = "KZ21", group = g_KZ)
kz21 = input.session("2000-2100", "", inline = "KZ21", group = g_KZ)
kz21_color = input.color(color.blue, "", inline = "KZ21", group = g_KZ)
// ==================== KILLZONE 22 ====================
use_kz22 = input.bool(true, "21:00-22:00", inline = "KZ22", group = g_KZ)
kz22_txt = input.string("21-22", "", inline = "KZ22", group = g_KZ)
kz22 = input.session("2100-2200", "", inline = "KZ22", group = g_KZ)
kz22_color = input.color(color.blue, "", inline = "KZ22", group = g_KZ)
// ==================== KILLZONE 23 ====================
use_kz23 = input.bool(true, "22:00-23:00", inline = "KZ23", group = g_KZ)
kz23_txt = input.string("22-23", "", inline = "KZ23", group = g_KZ)
kz23 = input.session("2200-2300", "", inline = "KZ23", group = g_KZ)
kz23_color = input.color(color.blue, "", inline = "KZ23", group = g_KZ)
// ==================== KILLZONE 24 ====================
use_kz24 = input.bool(true, "23:00-00:00", inline = "KZ24", group = g_KZ)
kz24_txt = input.string("23-00", "", inline = "KZ24", group = g_KZ)
kz24 = input.session("2300-0000", "", inline = "KZ24", group = g_KZ)
kz24_color = input.color(color.blue, "", inline = "KZ24", group = g_KZ)
// ==================== KILLZONE 25 ====================
use_kz25 = input.bool(true, "17:00-21:00", inline = "KZ25", group = g_KZ)
kz25_txt = input.string("H4", "", inline = "KZ25", group = g_KZ)
kz25 = input.session("1700-2100", "", inline = "KZ25", group = g_KZ)
kz25_color = input.color(color.orange, "", inline = "KZ25", group = g_KZ)
// ==================== KILLZONE 26 ====================
use_kz26 = input.bool(true, "21:00-01:00", inline = "KZ26", group = g_KZ)
kz26_txt = input.string("H4", "", inline = "KZ26", group = g_KZ)
kz26 = input.session("2100-0100", "", inline = "KZ26", group = g_KZ)
kz26_color = input.color(color.aqua, "", inline = "KZ26", group = g_KZ)
// ==================== KILLZONE 27 ====================
use_kz27 = input.bool(true, "01:00-05:00", inline = "KZ27", group = g_KZ)
kz27_txt = input.string("H4", "", inline = "KZ27", group = g_KZ)
kz27 = input.session("0100-0500", "", inline = "KZ27", group = g_KZ)
kz27_color = input.color(color.green, "", inline = "KZ27", group = g_KZ)
// ==================== KILLZONE 28 ====================
use_kz28 = input.bool(true, "05:00-09:00", inline = "KZ28", group = g_KZ)
kz28_txt = input.string("H4", "", inline = "KZ28", group = g_KZ)
kz28 = input.session("0500-0900", "", inline = "KZ28", group = g_KZ)
kz28_color = input.color(color.yellow, "", inline = "KZ28", group = g_KZ)
// ==================== KILLZONE 29 ====================
use_kz29 = input.bool(true, "09:00-13:00", inline = "KZ29", group = g_KZ)
kz29_txt = input.string("H4", "", inline = "KZ29", group = g_KZ)
kz29 = input.session("0900-1300", "", inline = "KZ29", group = g_KZ)
kz29_color = input.color(color.red, "", inline = "KZ29", group = g_KZ)
// ==================== KILLZONE 30 ====================
use_kz30 = input.bool(true, "13:00-17:00", inline = "KZ30", group = g_KZ)
kz30_txt = input.string("H4", "", inline = "KZ30", group = g_KZ)
kz30 = input.session("1300-1700", "", inline = "KZ30", group = g_KZ)
kz30_color = input.color(color.purple, "", inline = "KZ30", group = g_KZ)
// ==================== KILLZONE 31 ====================
use_kz31 = input.bool(false, "05:00-17:00", inline = "KZ31", group = g_KZ)
kz31_txt = input.string("H12", "", inline = "KZ31", group = g_KZ)
kz31 = input.session("0500-1700", "", inline = "KZ31", group = g_KZ)
kz31_color = input.color(color.purple, "", inline = "KZ31", group = g_KZ)
// ==================== KILLZONE 32 ====================
use_kz32 = input.bool(false, "17:00-05:00", inline = "KZ32", group = g_KZ)
kz32_txt = input.string("H12", "", inline = "KZ32", group = g_KZ)
kz32 = input.session("1700-0500", "", inline = "KZ32", group = g_KZ)
kz32_color = input.color(color.purple, "", inline = "KZ32", group = g_KZ)
// ==================== KILLZONE 33 ====================
use_kz33 = input.bool(false, "17:00-01:00", inline = "KZ33", group = g_KZ)
kz33_txt = input.string("H8", "", inline = "KZ33", group = g_KZ)
kz33 = input.session("1700-0100", "", inline = "KZ33", group = g_KZ)
kz33_color = input.color(color.purple, "", inline = "KZ33", group = g_KZ)
// ==================== KILLZONE 34 ====================
use_kz34 = input.bool(false, "01:00-09:00", inline = "KZ34", group = g_KZ)
kz34_txt = input.string("H8", "", inline = "KZ34", group = g_KZ)
kz34 = input.session("0100-0900", "", inline = "KZ34", group = g_KZ)
kz34_color = input.color(color.purple, "", inline = "KZ34", group = g_KZ)
// ==================== KILLZONE 35 ====================
use_kz35 = input.bool(false, "09:00-17:00", inline = "KZ35", group = g_KZ)
kz35_txt = input.string("H8", "", inline = "KZ35", group = g_KZ)
kz35 = input.session("0900-1700", "", inline = "KZ35", group = g_KZ)
kz35_color = input.color(color.purple, "", inline = "KZ35", group = g_KZ)
// ==================== KILLZONE 36 ====================
use_kz36 = input.bool(false, "17:00-23:00", inline = "KZ36", group = g_KZ)
kz36_txt = input.string("H6", "", inline = "KZ36", group = g_KZ)
kz36 = input.session("1700-2300", "", inline = "KZ36", group = g_KZ)
kz36_color = input.color(color.purple, "", inline = "KZ36", group = g_KZ)
// ==================== KILLZONE 37 ====================
use_kz37 = input.bool(false, "23:00-05:00", inline = "KZ37", group = g_KZ)
kz37_txt = input.string("H6", "", inline = "KZ37", group = g_KZ)
kz37 = input.session("2300-0500", "", inline = "KZ37", group = g_KZ)
kz37_color = input.color(color.purple, "", inline = "KZ37", group = g_KZ)
// ==================== KILLZONE 38 ====================
use_kz38 = input.bool(false, "05:00-11:00", inline = "KZ38", group = g_KZ)
kz38_txt = input.string("H6", "", inline = "KZ38", group = g_KZ)
kz38 = input.session("0500-1100", "", inline = "KZ38", group = g_KZ)
kz38_color = input.color(color.purple, "", inline = "KZ38", group = g_KZ)
// ==================== KILLZONE 39 ====================
use_kz39 = input.bool(false, "11:00-17:00", inline = "KZ39", group = g_KZ)
kz39_txt = input.string("H6", "", inline = "KZ39", group = g_KZ)
kz39 = input.session("1100-1700", "", inline = "KZ39", group = g_KZ)
kz39_color = input.color(color.purple, "", inline = "KZ39", group = g_KZ)
var g_LABELS = "Killzone Pivots"
show_pivots = input.bool(false, "Show Pivots", inline = "PV", group = g_LABELS)
use_alerts = input.bool(false, "Alert Broken Pivots", inline = "PV", tooltip = "The desired killzones must be enabled at the time that an alert is created, along with the show pivots option, in order for alerts to work", group = g_LABELS)
show_midpoints = input.bool(false, "Show Pivot Midpoints", inline = "mp", group = g_LABELS)
stop_midpoints = input.bool(false, "Stop Once Mitigated", inline = "mp", group = g_LABELS)
show_labels = input.bool(false, "Show Pivot Labels", inline = "LB", tooltip = "Show labels denoting each killzone's high and low. Optionally choose to show the price of each level. Right side will show labels on the right-hand side of the chart until they are reached", group = g_LABELS)
label_price = input.bool(false, "Display Price", inline = "LB", group = g_LABELS)
label_right = input.bool(false, "Right Side", inline = "LB", group = g_LABELS)
ext_pivots = input.string("Until Mitigated", "Extend Pivots...", options = , group = g_LABELS)
ext_which = input.string("All", "...From Which Sessions", options = , group = g_LABELS)
ash_str = input.string("AS.H", "Killzone 1 Labels", inline = "L_AS", group = g_LABELS)
asl_str = input.string("AS.L", "", inline = "L_AS", group = g_LABELS)
loh_str = input.string("LO.H", "Killzone 2 Labels", inline = "L_LO", group = g_LABELS)
lol_str = input.string("LO.L", "", inline = "L_LO", group = g_LABELS)
nah_str = input.string("NYAM.H", "Killzone 3 Labels", inline = "L_NA", group = g_LABELS)
nal_str = input.string("NYAM.L", "", inline = "L_NA", group = g_LABELS)
nlh_str = input.string("NYL.H", "Killzone 4 Labels", inline = "L_NL", group = g_LABELS)
nll_str = input.string("NYL.L", "", inline = "L_NL", group = g_LABELS)
nph_str = input.string("NYPM.H", "Killzone 5 Labels", inline = "L_NP", group = g_LABELS)
npl_str = input.string("NYPM.L", "", inline = "L_NP", group = g_LABELS)
kzp_style = get_line_type(input.string(defval = 'Solid', title = "Pivot Style", options = , inline = "KZP", group = g_LABELS))
kzp_width = input.int(1, "", inline = "KZP", group = g_LABELS)
kzm_style = get_line_type(input.string(defval = 'Dotted', title = "Midpoint Style", options = , inline = "KZM", group = g_LABELS))
kzm_width = input.int(1, "", inline = "KZM", group = g_LABELS)
var g_RNG = "Killzone Range"
show_range = input.bool(false, "Show Killzone Range", tooltip = "Show the most recent ranges of each selected killzone, from high to low", group = g_RNG)
show_range_avg = input.bool(false, "Show Average", tooltip = "Show the average range of each selected killzone", group = g_RNG)
range_avg = input.int(5, "Average Length", 0, tooltip = "This many previous sessions will be used to calculate the average. If there isn't enough data on the current chart, it will use as many sessions as possible", group = g_RNG)
range_pos = get_table_pos(input.string('Top Right', "Table Position", options = , group = g_RNG))
range_size = get_size(input.string('Normal', "Table Size", options = , group = g_RNG))
var g_DWM = "Day - Week - Month"
sep_unlimited = input.bool(false, "Unlimited", tooltip = "Unlimited will show as many of the selected lines as possible. Otherwise, the session drawing limit will be used", group = g_DWM)
alert_HL = input.bool(false, "Alert High/Low Break", tooltip = "Alert when any selected highs and lows are traded through. The desired timeframe's high/low option must be enabled at the time that an alert is created", group = g_DWM)
show_d_open = input.bool(false, "D Open", inline = "DO", group = g_DWM)
dhl = input.bool(false, "High/Low", inline = "DO", tooltip = "", group = g_DWM)
ds = input.bool(false, "Separators", inline = "DO", tooltip = "Mark where a new day begins", group = g_DWM)
d_color = input.color(color.blue, "", inline = "DO", group = g_DWM)
show_w_open = input.bool(false, "W Open", inline = "WO", group = g_DWM)
whl = input.bool(false, "High/Low", inline = "WO", tooltip = "", group = g_DWM)
ws = input.bool(false, "Separators", inline = "WO", tooltip = "Mark where a new week begins", group = g_DWM)
w_color = input.color(#089981, "", inline = "WO", group = g_DWM)
show_m_open = input.bool(false, "M Open", inline = "MO", group = g_DWM)
mhl = input.bool(false, "High/Low", inline = "MO", tooltip = "", group = g_DWM)
ms = input.bool(false, "Separators", inline = "MO", tooltip = "Mark where a new month begins", group = g_DWM)
m_color = input.color(color.red, "", inline = "MO", group = g_DWM)
htf_style = get_line_type(input.string(defval = 'Solid', title = "Style", options = , inline = "D0", group = g_DWM))
htf_width = input.int(1, "", inline = "D0", group = g_DWM)
dow_labels = input.bool(false, "Day of Week Labels", inline = "DOW", group = g_DWM)
dow_yloc = input.string('Bottom', "", options = , inline = "DOW", group = g_DWM)
dow_xloc = input.string('Midnight', "", options = , inline = "DOW", group = g_DWM)
dow_hide_wknd = input.bool(false, "Hide Weekend Labels", group = g_DWM)
var g_OPEN = "Opening Prices"
open_unlimited = input.bool(false, "Unlimited", tooltip = "Unlimited will show as many of the selected lines as possible. Otherwise, the session drawing limit will be used", group = g_OPEN)
use_h1 = input.bool(false, "", inline = "H1", group = g_OPEN)
h1_text = input.string("17:00 H12/H8/H6/H4", "", inline = "H1", group = g_OPEN)
h1 = input.session("1700-1701", "", inline = "H1", group = g_OPEN)
h1_color = input.color(color.black, "", inline = "H1", group = g_OPEN)
use_h2 = input.bool(false, "", inline = "H2", group = g_OPEN)
h2_text = input.string("05:00 H12/H6/H4", "", inline = "H2", group = g_OPEN)
h2 = input.session("0500-0501", "", inline = "H2", group = g_OPEN)
h2_color = input.color(color.black, "", inline = "H2", group = g_OPEN)
use_h3 = input.bool(false, "", inline = "H3", group = g_OPEN)
h3_text = input.string("01:00 H8/H4", "", inline = "H3", group = g_OPEN)
h3 = input.session("0100-0101", "", inline = "H3", group = g_OPEN)
h3_color = input.color(color.black, "", inline = "H3", group = g_OPEN)
use_h4 = input.bool(false, "", inline = "H4", group = g_OPEN)
h4_text = input.string("09:00 H8/H4", "", inline = "H4", group = g_OPEN)
h4 = input.session("0900-0901", "", inline = "H4", group = g_OPEN)
h4_color = input.color(color.black, "", inline = "H4", group = g_OPEN)
use_h5 = input.bool(false, "", inline = "H5", group = g_OPEN)
h5_text = input.string("23:00 H6", "", inline = "H5", group = g_OPEN)
h5 = input.session("2300-2301", "", inline = "H5", group = g_OPEN)
h5_color = input.color(color.black, "", inline = "H5", group = g_OPEN)
use_h6 = input.bool(false, "", inline = "H6", group = g_OPEN)
h6_text = input.string("11:00 H6", "", inline = "H6", group = g_OPEN)
h6 = input.session("1100-1101", "", inline = "H6", group = g_OPEN)
h6_color = input.color(color.black, "", inline = "H6", group = g_OPEN)
use_h7 = input.bool(false, "", inline = "H7", group = g_OPEN)
h7_text = input.string("21:00 H4", "", inline = "H7", group = g_OPEN)
h7 = input.session("2100-2101", "", inline = "H7", group = g_OPEN)
h7_color = input.color(color.black, "", inline = "H7", group = g_OPEN)
use_h8 = input.bool(false, "", inline = "H8", group = g_OPEN)
h8_text = input.string("13:00 H4", "", inline = "H8", group = g_OPEN)
h8 = input.session("1300-1301", "", inline = "H8", group = g_OPEN)
h8_color = input.color(color.black, "", inline = "H8", group = g_OPEN)
hz_style = get_line_type(input.string(defval = 'Dotted', title = "Style", options = , inline = "H0", group = g_OPEN))
hz_width = input.int(1, "", inline = "H0", group = g_OPEN)
var g_VERTICAL = "Timestamps"
v_unlimited = input.bool(false, "Unlimited", tooltip = "Unlimited will show as many of the selected lines as possible. Otherwise, the session drawing limit will be used", group = g_VERTICAL)
use_v1 = input.bool(false, "", inline = "V1", group = g_VERTICAL)
v1 = input.session("0000-0001", "", inline = "V1", group = g_VERTICAL)
v1_color = input.color(color.black, "", inline = "V1", group = g_VERTICAL)
use_v2 = input.bool(false, "", inline = "V2", group = g_VERTICAL)
v2 = input.session("0800-0801", "", inline = "V2", group = g_VERTICAL)
v2_color = input.color(color.black, "", inline = "V2", group = g_VERTICAL)
use_v3 = input.bool(false, "", inline = "V3", group = g_VERTICAL)
v3 = input.session("1000-1001", "", inline = "V3", group = g_VERTICAL)
v3_color = input.color(color.black, "", inline = "V3", group = g_VERTICAL)
use_v4 = input.bool(false, "", inline = "V4", group = g_VERTICAL)
v4 = input.session("1200-1201", "", inline = "V4", group = g_VERTICAL)
v4_color = input.color(color.black, "", inline = "V4", group = g_VERTICAL)
vl_style = get_line_type(input.string(defval = 'Dotted', title = "Style", options = , inline = "V0", group = g_VERTICAL))
vl_width = input.int(1, "", inline = "V0", group = g_VERTICAL)
// ---------------------------------------- Inputs --------------------------------------------------
// ---------------------------------------- Variables & Constants --------------------------------------------------
type kz
string _title
array _box
array _hi_line
array _md_line
array _lo_line
array _hi_label
array _lo_label
array _hi_valid
array _md_valid
array _lo_valid
array _range_store
float _range_current
type hz
array LN
array LB
array CO
type dwm_hl
array hi_line
array lo_line
array hi_label
array lo_label
bool hit_high = false
bool hit_low = false
type dwm_info
string tf
float o = na
float h = na
float l = na
float ph = na
float pl = na
type lines_helper
hz _hz
string h
string h_text
color h_color
initLines() =>
array res = array.new()
if use_h1
res.push(lines_helper.new(hz.new(array.new_line(), array.new_label(), array.new_bool()), h1, h1_text, h1_color))
if use_h2
res.push(lines_helper.new(hz.new(array.new_line(), array.new_label(), array.new_bool()), h2, h2_text, h2_color))
if use_h3
res.push(lines_helper.new(hz.new(array.new_line(), array.new_label(), array.new_bool()), h3, h3_text, h3_color))
if use_h4
res.push(lines_helper.new(hz.new(array.new_line(), array.new_label(), array.new_bool()), h4, h4_text, h4_color))
if use_h5
res.push(lines_helper.new(hz.new(array.new_line(), array.new_label(), array.new_bool()), h5, h5_text, h5_color))
if use_h6
res.push(lines_helper.new(hz.new(array.new_line(), array.new_label(), array.new_bool()), h6, h6_text, h6_color))
if use_h7
res.push(lines_helper.new(hz.new(array.new_line(), array.new_label(), array.new_bool()), h7, h7_text, h7_color))
if use_h8
res.push(lines_helper.new(hz.new(array.new_line(), array.new_label(), array.new_bool()), h8, h8_text, h8_color))
res
var array lines = initLines()
type kz_helper
kz _kz
string session
color c
string box_txt
string hi_txt
string lo_txt
initKZ() =>
array res = array.new()
if use_kz01
res.push(kz_helper.new(
kz.new(kz01_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz01, kz01_color, kz01_txt, "KZ01.H", "KZ01.L"
))
if use_kz02
res.push(kz_helper.new(
kz.new(kz02_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz02, kz02_color, kz02_txt, "KZ02.H", "KZ02.L"
))
if use_kz03
res.push(kz_helper.new(
kz.new(kz03_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz03, kz03_color, kz03_txt, "KZ03.H", "KZ03.L"
))
if use_kz04
res.push(kz_helper.new(
kz.new(kz04_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz04, kz04_color, kz04_txt, "KZ04.H", "KZ04.L"
))
if use_kz05
res.push(kz_helper.new(
kz.new(kz05_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz05, kz05_color, kz05_txt, "KZ05.H", "KZ05.L"
))
if use_kz06
res.push(kz_helper.new(
kz.new(kz06_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz06, kz06_color, kz06_txt, "KZ06.H", "KZ06.L"
))
if use_kz07
res.push(kz_helper.new(
kz.new(kz07_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz07, kz07_color, kz07_txt, "KZ07.H", "KZ07.L"
))
if use_kz08
res.push(kz_helper.new(
kz.new(kz08_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz08, kz08_color, kz08_txt, "KZ08.H", "KZ08.L"
))
if use_kz09
res.push(kz_helper.new(
kz.new(kz09_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz09, kz09_color, kz09_txt, "KZ09.H", "KZ09.L"
))
if use_kz10
res.push(kz_helper.new(
kz.new(kz10_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz10, kz10_color, kz10_txt, "KZ10.H", "KZ10.L"
))
if use_kz11
res.push(kz_helper.new(
kz.new(kz11_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz11, kz11_color, kz11_txt, "KZ11.H", "KZ11.L"
))
if use_kz12
res.push(kz_helper.new(
kz.new(kz12_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz12, kz12_color, kz12_txt, "KZ12.H", "KZ12.L"
))
if use_kz13
res.push(kz_helper.new(
kz.new(kz13_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz13, kz13_color, kz13_txt, "KZ13.H", "KZ13.L"
))
if use_kz14
res.push(kz_helper.new(
kz.new(kz14_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz14, kz14_color, kz14_txt, "KZ14.H", "KZ14.L"
))
if use_kz15
res.push(kz_helper.new(
kz.new(kz15_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz15, kz15_color, kz15_txt, "KZ15.H", "KZ15.L"
))
if use_kz16
res.push(kz_helper.new(
kz.new(kz16_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz16, kz16_color, kz16_txt, "KZ16.H", "KZ16.L"
))
if use_kz17
res.push(kz_helper.new(
kz.new(kz17_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz17, kz17_color, kz17_txt, "KZ17.H", "KZ17.L"
))
if use_kz18
res.push(kz_helper.new(
kz.new(kz18_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz18, kz18_color, kz18_txt, "KZ18.H", "KZ18.L"
))
if use_kz19
res.push(kz_helper.new(
kz.new(kz19_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz19, kz19_color, kz19_txt, "KZ19.H", "KZ19.L"
))
if use_kz20
res.push(kz_helper.new(
kz.new(kz20_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz20, kz20_color, kz20_txt, "KZ20.H", "KZ20.L"
))
if use_kz21
res.push(kz_helper.new(
kz.new(kz21_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz21, kz21_color, kz21_txt, "KZ21.H", "KZ21.L"
))
if use_kz22
res.push(kz_helper.new(
kz.new(kz22_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz22, kz22_color, kz22_txt, "KZ22.H", "KZ22.L"
))
if use_kz23
res.push(kz_helper.new(
kz.new(kz23_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz23, kz23_color, kz23_txt, "KZ23.H", "KZ23.L"
))
if use_kz24
res.push(kz_helper.new(
kz.new(kz24_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz24, kz24_color, kz24_txt, "KZ24.H", "KZ24.L"
))
if use_kz25
res.push(kz_helper.new(
kz.new(kz25_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz25, kz25_color, kz25_txt, "KZ25.H", "KZ25.L"
))
if use_kz26
res.push(kz_helper.new(
kz.new(kz26_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz26, kz26_color, kz26_txt, "KZ26.H", "KZ26.L"
))
if use_kz27
res.push(kz_helper.new(
kz.new(kz27_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz27, kz27_color, kz27_txt, "KZ27.H", "KZ27.L"
))
if use_kz28
res.push(kz_helper.new(
kz.new(kz28_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz28, kz28_color, kz28_txt, "KZ28.H", "KZ28.L"
))
if use_kz29
res.push(kz_helper.new(
kz.new(kz29_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz29, kz29_color, kz29_txt, "KZ29.H", "KZ29.L"
))
if use_kz30
res.push(kz_helper.new(
kz.new(kz30_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz30, kz30_color, kz30_txt, "KZ30.H", "KZ30.L"
))
if use_kz31
res.push(kz_helper.new(
kz.new(kz31_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz31, kz31_color, kz31_txt, "KZ31.H", "KZ31.L"
))
if use_kz32
res.push(kz_helper.new(
kz.new(kz32_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz32, kz32_color, kz32_txt, "KZ32.H", "KZ32.L"
))
if use_kz33
res.push(kz_helper.new(
kz.new(kz33_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz33, kz33_color, kz33_txt, "KZ33.H", "KZ33.L"
))
if use_kz34
res.push(kz_helper.new(
kz.new(kz34_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz34, kz34_color, kz34_txt, "KZ34.H", "KZ34.L"
))
if use_kz35
res.push(kz_helper.new(
kz.new(kz35_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz35, kz35_color, kz35_txt, "KZ35.H", "KZ35.L"
))
if use_kz36
res.push(kz_helper.new(
kz.new(kz36_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz36, kz36_color, kz36_txt, "KZ36.H", "KZ36.L"
))
if use_kz37
res.push(kz_helper.new(
kz.new(kz37_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz37, kz37_color, kz37_txt, "KZ37.H", "KZ37.L"
))
if use_kz38
res.push(kz_helper.new(
kz.new(kz38_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz38, kz38_color, kz38_txt, "KZ38.H", "KZ38.L"
))
if use_kz39
res.push(kz_helper.new(
kz.new(kz39_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float()),
kz39, kz39_color, kz39_txt, "KZ39.H", "KZ39.L"
))
res
var array _kz = initKZ()
var d_hl = dwm_hl.new(array.new_line(), array.new_line(), array.new_label(), array.new_label())
var w_hl = dwm_hl.new(array.new_line(), array.new_line(), array.new_label(), array.new_label())
var m_hl = dwm_hl.new(array.new_line(), array.new_line(), array.new_label(), array.new_label())
var d_info = dwm_info.new("D")
var w_info = dwm_info.new("W")
var m_info = dwm_info.new("M")
t_co = not na(time("", cutoff, gmt_tz))
type ts_helper
string session
array lines
color c
initTS() =>
array res = array.new()
if use_v1
res.push(ts_helper.new(v1, array.new_line(), v1_color))
if use_v2
res.push(ts_helper.new(v2, array.new_line(), v2_color))
if use_v3
res.push(ts_helper.new(v3, array.new_line(), v3_color))
if use_v4
res.push(ts_helper.new(v4, array.new_line(), v4_color))
res
var array ts_data = initTS()
var d_sep_line = array.new_line()
var w_sep_line = array.new_line()
var m_sep_line = array.new_line()
var d_line = array.new_line()
var w_line = array.new_line()
var m_line = array.new_line()
var d_label = array.new_label()
var w_label = array.new_label()
var m_label = array.new_label()
var transparent = #ffffff00
var ext_current = ext_which == 'Most Recent'
var ext_past = ext_pivots == 'Past Mitigation'
update_dwm_info(dwm_info n) =>
if timeframe.change(n.tf)
n.ph := n.h
n.pl := n.l
n.o := open
n.h := high
n.l := low
else
n.h := math.max(high, n.h)
n.l := math.min(low, n.l)
if dhl or show_d_open
update_dwm_info(d_info)
if whl or show_w_open
update_dwm_info(w_info)
if mhl or show_m_open
update_dwm_info(m_info)
// ---------------------------------------- Variables & Constants --------------------------------------------------
// ---------------------------------------- Functions --------------------------------------------------
get_box_color(color c) =>
color.new(c, box_transparency)
get_text_color(color c) =>
color.new(c, text_transparency)
// ---------------------------------------- Functions --------------------------------------------------
// ---------------------------------------- Core Logic --------------------------------------------------
dwm_sep(string tf, bool use, array arr, color col) =>
if use
if timeframe.change(tf)
arr.unshift(line.new(bar_index, high * 1.0001, bar_index, low, style = htf_style, width = htf_width, extend = extend.both, color = col))
if not sep_unlimited and arr.size() > max_days
arr.pop().delete()
dwm_open(string tf, bool use, array lns, array lbls, dwm_info n, color col) =>
if use
if lns.size() > 0
lns.get(0).set_x2(time)
lbls.get(0).set_x(time)
if timeframe.change(tf)
lns.unshift(line.new(time, n.o, time, n.o, xloc = xloc.bar_time, style = htf_style, width = htf_width, color = col))
lbls.unshift(label.new(time, n.o, tf + " OPEN", xloc = xloc.bar_time, style = label.style_label_left, color = transparent, textcolor = txt_color, size = lbl_size))
if not sep_unlimited and lns.size() > max_days
lns.pop().delete()
lbls.pop().delete()
dwm_hl(string tf, bool use, dwm_hl hl, dwm_info n, color col) =>
if use
if hl.hi_line.size() > 0
hl.hi_line.get(0).set_x2(time)
hl.lo_line.get(0).set_x2(time)
hl.hi_label.get(0).set_x(time)
hl.lo_label.get(0).set_x(time)
if timeframe.change(tf)
hl.hi_line.unshift(line.new(time, n.ph, time, n.ph, xloc = xloc.bar_time, style = htf_style, width = htf_width, color = col))
hl.lo_line.unshift(line.new(time, n.pl, time, n.pl, xloc = xloc.bar_time, style = htf_style, width = htf_width, color = col))
hl.hi_label.unshift(label.new(time, n.ph, "P" + tf + "H", xloc = xloc.bar_time, style = label.style_label_left, color = transparent, textcolor = txt_color, size = lbl_size))
hl.lo_label.unshift(label.new(time, n.pl, "P" + tf + "L", xloc = xloc.bar_time, style = label.style_label_left, color = transparent, textcolor = txt_color, size = lbl_size))
hl.hit_high := false
hl.hit_low := false
if not sep_unlimited and hl.hi_line.size() > max_days
hl.hi_line.pop().delete()
hl.lo_line.pop().delete()
hl.hi_label.pop().delete()
hl.lo_label.pop().delete()
if hl.hi_line.size() > 0 and alert_HL
if not hl.hit_high and high > hl.hi_line.get(0).get_y1()
hl.hit_high := true
alert(str.format("Hit P{0}H", tf))
if not hl.hit_low and low < hl.lo_line.get(0).get_y1()
hl.hit_low := true
alert(str.format("Hit P{0}L", tf))
dwm() =>
if tf_limit_is_equal_or_more_chart_tf
// DWM - Separators
dwm_sep("D", ds, d_sep_line, d_color)
dwm_sep("W", ws, w_sep_line, w_color)
dwm_sep("M", ms, m_sep_line, m_color)
// DWM - Open Lines
dwm_open("D", show_d_open, d_line, d_label, d_info, d_color)
dwm_open("W", show_w_open, w_line, w_label, w_info, w_color)
dwm_open("M", show_m_open, m_line, m_label, m_info, m_color)
// DWM - Highs and Lows
dwm_hl("D", dhl, d_hl, d_info, d_color)
dwm_hl("W", whl, w_hl, w_info, w_color)
dwm_hl("M", mhl, m_hl, m_info, m_color)
method vline(ts_helper this) =>
bool t = not na(time("", this.session, gmt_tz))
bool t_prev = not na(time("", this.session, gmt_tz, bars_back = 1))
array arr = this.lines
color col = this.c
if t and not t_prev
arr.unshift(line.new(bar_index, high * 1.0001, bar_index, low, style = vl_style, width = vl_width, extend = extend.both, color = col))
if not v_unlimited
if arr.size() > max_days
arr.pop().delete()
vlines() =>
if tf_limit_is_equal_or_more_chart_tf
for in ts_data
vline(value)
method hz_line(lines_helper this) =>
bool t = not na(time("", this.h, gmt_tz))
bool t_prev = not na(time("", this.h, gmt_tz, bars_back = 1))
hz hz = this._hz
string txt = this.h_text
color col = this.h_color
if t and not t_prev
hz.LN.unshift(line.new(bar_index, open, bar_index, open, style = hz_style, width = hz_width, color = col))
hz.LB.unshift(label.new(bar_index, open, txt, style = label.style_label_left, color = transparent, textcolor = txt_color, size = lbl_size))
array.unshift(hz.CO, false)
if not open_unlimited and hz.LN.size() > max_days
hz.LN.pop().delete()
hz.LB.pop().delete()
hz.CO.pop()
if not t and hz.CO.size() > 0
if not hz.CO.get(0)
hz.LN.get(0).set_x2(bar_index)
hz.LB.get(0).set_x(bar_index)
if (use_cutoff ? t_co : false)
hz.CO.set(0, true)
hz_lines() =>
if tf_limit_is_equal_or_more_chart_tf
for in lines
hz_line(value)
del_kz(kz k) =>
if k._box.size() > max_days
k._box.pop().delete()
if k._hi_line.size() > max_days
k._hi_line.pop().delete()
k._lo_line.pop().delete()
k._hi_valid.pop()
k._lo_valid.pop()
if show_midpoints
k._md_line.pop().delete()
k._md_valid.pop()
if k._hi_label.size() > max_days
k._hi_label.pop().delete()
k._lo_label.pop().delete()
update_price_string(label L, float P) =>
S = L.get_text()
pre = str.substring(S, 0, str.pos(S, " "))
str.trim(pre)
L.set_text(str.format("{0} ({1})", pre, P))
adjust_in_kz(kz kz, bool t) =>
if t
kzBox0 = kz._box.get(0)
kzBox0.set_right(time)
newTop = math.max(kzBox0.get_top(), high)
kzBox0.set_top(newTop)
newBottom = math.min(kzBox0.get_bottom(), low)
kzBox0.set_bottom(newBottom)
kz._range_current := newTop - newBottom
if show_pivots and kz._hi_line.size() > 0
kzHiLine0 = kz._hi_line.get(0)
kzHiLine0.set_x2(time)
if high > kzHiLine0.get_y1()
kzHiLine0.set_xy1(time, high)
kzHiLine0.set_xy2(time, high)
kzLoLine0 = kz._lo_line.get(0)
kzLoLine0.set_x2(time)
if low < kzLoLine0.get_y1()
kzLoLine0.set_xy1(time, low)
kzLoLine0.set_xy2(time, low)
if show_midpoints
kzMidLine0 = kz._md_line.get(0)
kzMidLine0.set_x2(time)
kzMidLine0.set_xy1(time, math.avg(kzHiLine0.get_y2(), kzLoLine0.get_y2()))
kzMidLine0.set_xy2(time, math.avg(kzHiLine0.get_y2(), kzLoLine0.get_y2()))
if show_labels and kz._hi_label.size() > 0
if label_right
kz._hi_label.get(0).set_x(time)
kz._lo_label.get(0).set_x(time)
if high > kz._hi_label.get(0).get_y()
kz._hi_label.get(0).set_xy(time, high)
if label_price
update_price_string(kz._hi_label.get(0), high)
if low < kz._lo_label.get(0).get_y()
kz._lo_label.get(0).set_xy(time, low)
if label_price
update_price_string(kz._lo_label.get(0), low)
adjust_out_kz(kz kz, bool t, bool t_prev) =>
boxCount = kz._box.size()
if not t and boxCount > 0
if t_prev
array.unshift(kz._range_store, kz._range_current)
if kz._range_store.size() > range_avg
kz._range_store.pop()
if show_pivots and boxCount > 0
for i = 0 to boxCount - 1 by 1
if not ext_current or i == 0
kzHiValid = kz._hi_valid.get(i)
if ext_past or kzHiValid
kz._hi_line.get(i).set_x2(time)
if show_labels and label_right
kz._hi_label.get(i).set_x(time)
if kzHiValid and high > kz._hi_line.get(i).get_y1()
if use_alerts and i == 0
alert('Broke ' + kz._title + ' High', alert.freq_once_per_bar)
kz._hi_valid.set(i, false)
if show_labels and label_right
kz._hi_label.get(i).set_style(label.style_label_down)
else if use_cutoff ? t_co : false
kz._hi_valid.set(i, false)
kzLoValid = kz._lo_valid.get(i)
if ext_past or kzLoValid
kz._lo_line.get(i).set_x2(time)
if show_labels and label_right
kz._lo_label.get(i).set_x(time)
if kzLoValid and low < kz._lo_line.get(i).get_y1()
if use_alerts and i == 0
alert("Broke " + kz._title + " Low", alert.freq_once_per_bar)
kz._lo_valid.set(i, false)
if show_labels and label_right
kz._lo_label.get(i).set_style(label.style_label_up)
else if use_cutoff ? t_co : false
kz._lo_valid.set(i, false)
if show_midpoints and not t
if stop_midpoints ? kz._md_valid.get(i) : true
kz._md_line.get(i).set_x2(time)
if kz._md_valid.get(i) and low <= kz._md_line.get(i).get_y1() and high >= kz._md_line.get(i).get_y1()
kz._md_valid.set(i, false)
else
break
method manage_kz(kz_helper this) =>
kz kz = this._kz
c = this.c
string box_txt = this.box_txt
string hi_txt = this.hi_txt
string lo_txt = this.lo_txt
if tf_limit_is_equal_or_more_chart_tf
t = not na(time("", this.session, gmt_tz))
t_prev = not na(time("", this.session, gmt_tz, bars_back = 1))
if t and not t_prev
_c = get_box_color(c)
_t = get_text_color(c)
kz._box.unshift(box.new(time, high, time, low, xloc = xloc.bar_time, border_color = show_kz ? _c : na, bgcolor = show_kz ? _c : na, text = show_kz and show_kz_text ? box_txt : na, text_color = _t))
if show_pivots
kz._hi_line.unshift(line.new(time, high, time, high, xloc = xloc.bar_time, style = kzp_style, color = c, width = kzp_width))
kz._lo_line.unshift(line.new(time, low, time, low, xloc = xloc.bar_time, style = kzp_style, color = c, width = kzp_width))
if show_midpoints
kz._md_line.unshift(line.new(time, math.avg(high, low), time, math.avg(high, low), xloc = xloc.bar_time, style = kzm_style, color = c, width = kzm_width))
array.unshift(kz._md_valid, true)
array.unshift(kz._hi_valid, true)
array.unshift(kz._lo_valid, true)
if show_labels
_hi_txt = label_price ? str.format('{0} ({1})', hi_txt, high) : hi_txt
_lo_txt = label_price ? str.format('{0} ({1})', lo_txt, low) : lo_txt
if label_right
kz._hi_label.unshift(label.new(time, high, _hi_txt, xloc = xloc.bar_time, color = transparent, textcolor = txt_color, style = label.style_label_left, size = lbl_size))
kz._lo_label.unshift(label.new(time, low, _lo_txt, xloc = xloc.bar_time, color = transparent, textcolor = txt_color, style = label.style_label_left, size = lbl_size))
else
kz._hi_label.unshift(label.new(time, high, _hi_txt, xloc = xloc.bar_time, color = transparent, textcolor = txt_color, style = label.style_label_down, size = lbl_size))
kz._lo_label.unshift(label.new(time, low, _lo_txt, xloc = xloc.bar_time, color = transparent, textcolor = txt_color, style = label.style_label_up, size = lbl_size))
del_kz(kz)
adjust_in_kz(kz, t)
adjust_out_kz(kz, t, t_prev)
for in _kz
manage_kz(value)
dwm()
vlines()
hz_lines()
new_dow_time = dow_xloc == 'Midday' ? time - timeframe.in_seconds("D") / 2 * 1000 : time
new_day = dayofweek(new_dow_time, gmt_tz) != dayofweek(new_dow_time, gmt_tz)
var dow_top = dow_yloc == 'Top'
var saturday = "SATURDAY"
var sunday = "SUNDAY"
var monday = "MONDAY"
var tuesday = "TUESDAY"
var wednesday = "WEDNESDAY"
var thursday = "THURSDAY"
var friday = "FRIDAY"
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 1 and new_day and not dow_hide_wknd, location = dow_top ? location.top : location.bottom, char = '', textcolor = txt_color, text = sunday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 2 and new_day, location = dow_top ? location.top : location.bottom, char = '', textcolor = txt_color, text = monday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 3 and new_day, location = dow_top ? location.top : location.bottom, char = '', textcolor = txt_color, text = tuesday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 4 and new_day, location = dow_top ? location.top : location.bottom, char = '', textcolor = txt_color, text = wednesday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 5 and new_day, location = dow_top ? location.top : location.bottom, char = '', textcolor = txt_color, text = thursday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 6 and new_day, location = dow_top ? location.top : location.bottom, char = '', textcolor = txt_color, text = friday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 7 and new_day and not dow_hide_wknd, location = dow_top ? location.top : location.bottom, char = '', textcolor = txt_color, text = saturday)
get_min_days_stored() =>
store = array.new_int()
for in _kz
int tmpStoreSize = value._kz._range_store.size()
if tmpStoreSize > 0
store.push(tmpStoreSize)
store.min()
method set_table(table tbl, kz kz, int row, string txt, bool t, color col) =>
table.cell(tbl, 0, row, txt, text_size = range_size, bgcolor = get_box_color(col), text_color = txt_color)
table.cell(tbl, 1, row, str.tostring(kz._range_current), text_size = range_size, bgcolor = t ? get_box_color(col) : na, text_color = txt_color)
if show_range_avg
table.cell(tbl, 2, row, str.tostring(kz._range_store.avg()), text_size = range_size, text_color = txt_color)
if show_range and barstate.islast
var tbl = table.new(range_pos, 10, 10, chart.bg_color, chart.fg_color, 2, chart.fg_color, 1)
table.cell(tbl, 0, 0, "Killzone", text_size = range_size, text_color = txt_color)
table.cell(tbl, 1, 0, "Range", text_size = range_size, text_color = txt_color)
if show_range_avg
table.cell(tbl, 2, 0, "Avg (" + str.tostring(get_min_days_stored()) + ")", text_size = range_size, text_color = txt_color)
for in _kz
set_table(tbl, value._kz, index + 1, value.box_txt, not na(time("", value.session, gmt_tz)), value.c)
// ---------------------------------------- Core Logic --------------------------------------------------
Indicator

Indicator

RTH Gap [TakingProphets]OVERVIEW
RTH Gap marks the Opening Range Gap: the gap between the prior regular-session close and the next regular-session open.
It measures from the prior RTH close at 4:14 PM New York time to the next RTH open at 9:30 AM New York time, draws that range as a box, and overlays quadrant levels at 0, 25, 50, 75, and 100 percent.
This indicator does not provide trading signals, entries, or forecasts. It is a visualization aid for studying the Opening Range Gap within an ICT-style analytical framework.
The Opening Range Gap (ORG) is the space between where the regular session closed and where it reopened the next day. Within ICT-style education, this gap and its internal quadrants, especially the 50 percent midpoint, are studied for how price reacts when it trades back into them. This tool marks the gap and its quadrants automatically so they can be reviewed objectively rather than drawn by hand.
PURPOSE AND SCOPE
-----------------------------------------------------------------------------------------------
The tool serves as a research and study aid to document and analyze the Opening Range Gap and its internal levels.
It is commonly used to:
Automate the marking of the daily RTH gap and its quadrants.
Study how price reacts at the 50 percent midpoint and the other quadrant levels.
Keep several prior gaps on the chart for multi-day review.
Journal how often a gap is filled, respected, or rejected.
Teach the Opening Range Gap concept in a mentorship or training context.
LOGIC STRUCTURE
-----------------------------------------------------------------------------------------------
RTH Gap detects the gap on the 1-minute series and displays it consistently on any chart timeframe.
Detection
The prior RTH close is captured at 4:14 PM New York time.
The next RTH open is captured at 9:30 AM New York time.
The gap between those two prices becomes the range for that session.
Detection runs on the 1-minute series and its values are latched, so the gap displays correctly whether the chart is on a low or high timeframe.
Quadrants
The gap is drawn as a box, with horizontal levels at 0, 25, 50, 75, and 100 percent of the range.
Each level can be toggled, colored, and styled independently, and optionally labeled with its percentage and formation date.
Selection and Retention
The number of gaps shown is user controlled.
Gaps can be selected either by how recently they formed or by proximity of their midpoint to current price.
An IPDA lookback setting controls how far back gaps are retained before being pruned.
COMPONENTS AND VISUALS
-----------------------------------------------------------------------------------------------
Gap Box — The range between the prior RTH close and the next RTH open.
Quadrant Levels — Horizontal lines at 0, 25, 50, 75, and 100 percent of the gap.
Quadrant Labels — Optional labels showing each level's percentage and, if enabled, the gap's formation date.
INPUT CATEGORIES
-----------------------------------------------------------------------------------------------
General — Enable toggle, IPDA lookback length, date-prefix and quadrant-label toggles, and the selection mode (Most recent or Proximity).
Opening Range Gaps — Master visibility and how many gaps to display.
Opening Range Gap Style — Box color, fill and border options, gradient toggle, label color and size, and independent visibility, color, style, and width for each of the five quadrant levels.
USAGE GUIDELINES
-----------------------------------------------------------------------------------------------
RTH Gap is suited for the review and documentation of Opening Range Gap behavior.
Recommended educational workflows:
Mark the daily RTH gap and review how price interacts with its 50 percent midpoint.
Keep two or three prior gaps on the chart to study multi-day reactions.
Compare gaps that fill quickly against those that hold as support or resistance.
Switch between Most recent and Proximity modes depending on the study.
Teach the Opening Range Gap concept in mentorship or training sessions.
The tool is oriented toward regular-session index futures, where the RTH gap is most applicable.
OPERATIONAL NOTES AND LIMITATIONS
-----------------------------------------------------------------------------------------------
Detection is based on the 4:14 PM and 9:30 AM New York session times and is oriented toward regular-session instruments.
Gap values are latched from the 1-minute series so they display on any chart timeframe.
The selection mode and display count control which gaps appear, not how many are detected.
The IPDA lookback setting controls how far back gaps are retained.
The box, quadrant lines, and labels are visual study aids only.
This tool does not include setups, entries, targets, or alerts.
ORIGINALITY AND ATTRIBUTION
-----------------------------------------------------------------------------------------------
The detection and rendering engine is written from scratch in Pine v6, using a latched 1-minute session-time detector so the gap displays on any timeframe, a quadrant gradient system with per-level styling, two selection modes, and a lookback-based retention system.
Core concepts such as the Opening Range Gap and its quadrant levels are publicly taught within ICT-style market education. This implementation was designed and engineered by TakingProphets.
TERMS AND DISCLAIMER
-----------------------------------------------------------------------------------------------
This indicator is for educational and informational use only. It does not provide financial advice or predictive output. Historical patterns do not guarantee future results. All users remain responsible for their own decisions. Use of this script implies agreement with PulseWire's Terms of Use. Indicator

Hunter DWM Control Pro• Overview
Hunter DWM Control Pro is a multi-timeframe technical analysis script built around a structural process evaluated across the Daily, Weekly, and Monthly timeframes.
The script combines structural breakout references, structural invalidation levels, sequential price targets, evolving support and resistance, an Advanced Radar Control Cloud, normalized directional momentum, and timeframe-based candle coloring.
These components operate within one analytical workflow. The structural engine identifies the price structure being monitored, the target engine follows how that structure develops after a breakout, while the Radar and momentum components provide additional information about the directional environment surrounding the structure.
The complete D/W/M structural display is intended primarily for use on a Daily chart.
________________________________________
• Structural Detection
The structural process begins by evaluating directional candle shapes.
A qualifying bullish candle requires:
• Close above Open.
• The candle body to be larger than the combined upper and lower wicks.
A qualifying bearish candle applies the opposite directional condition using the same body-versus-wicks relationship.
The script records the Low of the most recent qualifying bullish candle. It then monitors for a qualifying bearish candle that closes below that bullish Low.
When this bearish structure occurs, its High, Low, and time are stored.
A bullish structural breakout is detected when a later close moves above the stored High of that bearish structure.
The same process is calculated separately on the Daily, Weekly, and Monthly timeframes.
________________________________________
• Daily, Weekly and Monthly Structure
The main table organizes the current structural state of:
• Daily
• Weekly
• Monthly
For each timeframe, the table can display:
• Last High
• Breakout
• SL
• RS
• SUP
• SL Stat
• T1
• T2
• T3
The three-timeframe view shows how the same structural process is developing across different time horizons.
________________________________________
• Structural Invalidation
When a breakout cycle becomes active, the script stores the Low of the bearish structure associated with that breakout as its structural invalidation reference.
The SL status can display:
• ACTIVE — an active structural cycle remains above its stored invalidation level.
• BROKEN — the relevant timeframe has closed below the stored invalidation level.
• INACTIVE — no active structural cycle is currently associated with that stored level.
Before an active cycle exists, the SL column may display the Low of the currently identified structure as a reference level.
These values are structural references generated by the script. They do not determine position size, account exposure, or individual risk tolerance.
________________________________________
• Primary Target Calculation
When a structural breakout cycle is established, the High and Low associated with that structure are stored.
The structural range is calculated as:
Range = Structure High - Structure Low
The primary targets are then derived as:
• T1 = Structure High + 1 × Range
• T2 = Structure High + 2 × Range
• T3 = Structure High + 3 × Range
A target is recorded as reached when the relevant timeframe closes at or above that target level.
Before a confirmed breakout cycle exists, the table can display preview target values calculated from the currently identified structure.
These preview levels provide a structural map of the levels ahead, while actual target-hit tracking begins after a breakout cycle is established.
________________________________________
• Extension Targets
After T3 has been reached, the script can establish an additional target sequence.
An extension requires a qualifying bullish candle to close at or above T3.
The High and Low of that candle define a new range reference from which three additional targets are calculated:
• EXT1
• EXT2
• EXT3
Once created, the extension anchor and target levels remain fixed for that extension cycle.
This separates the original structural projection from a later expansion phase.
________________________________________
• Dynamic Support and Resistance
The RS and SUP fields change as price progresses through the structural sequence.
Before an active target cycle exists, the stored structural High acts as the next resistance reference.
After a breakout, the original breakout level becomes a support reference while T1 becomes the next resistance.
As T1, T2, T3, and extension targets are reached, the script advances the support and resistance references through the sequence.
RS and SUP therefore describe the current location within the script's structural path rather than fixed support and resistance levels.
________________________________________
• Action State
The Action field summarizes the current Daily trade-state logic.
Possible states are:
• WAIT — no active Daily trade-state cycle.
• BUY — a new confirmed Daily structural breakout event has activated the programmed state.
• HOLD — the Daily state remains active and price has not closed below the stored structural invalidation level.
• TP — a programmed Daily target has just been confirmed while the state is active.
• EXIT — the Daily close has moved below the stored structural invalidation level.
The script also prevents a new BUY state when the first Daily target has already been registered for the relevant sequence.
These terms describe programmed indicator states. They are not brokerage orders and do not constitute instructions to buy, hold, take profit, or exit a position.
________________________________________
• Multi-Timeframe Candle Coloring
On the Daily chart, candles can optionally be colored according to the highest active breakout timeframe.
The priority is:
Monthly → Weekly → Daily
Accordingly:
• Daily breakout state uses the Daily color.
• Weekly breakout state takes priority over Daily.
• Monthly breakout state takes priority over Weekly and Daily.
• When none of these breakout states is active, the script leaves the chart's normal candle colors unchanged.
The candle coloring provides a compact visual representation of the highest active structural timeframe without adding additional markers around each candle.
________________________________________
• Advanced Radar Control Cloud
The Advanced Radar Control Cloud provides directional context separately from the D/W/M structural engine.
The Radar identifies strong directional candles using the relationship between candle body size and the combined wick size.
A qualifying bullish candle contributes to the Bull Control feed.
A qualifying bearish candle contributes to the Bear Control feed.
When a new qualifying directional candle is not present, the previous feed value is carried forward.
The Bull and Bear feeds are then smoothed using EMA calculations.
The default Radar Control EMA length is 11.
The script also measures the distance between Bull Control and Bear Control relative to ATR(14).
The Radar classifies the current environment into four states:
• Bull Control
• Bear Control
• Compression
• Transition
Compression occurs when the normalized distance between the two control lines is below the selected threshold. The default compression reference is 0.18 ATR.
Bull Control requires price to be above the upper Radar boundary together with a non-declining Bull Control line.
Bear Control requires price to be below the lower Radar boundary together with a non-rising Bear Control line.
Other non-compression conditions are classified as Transition.
The colored area between Bull Control and Bear Control forms the Advanced Radar Control Cloud.
An optional Radar Slow Bias line applies additional EMA smoothing to the midpoint between the two control lines. Its default length is 33, and it is hidden by default.
The Radar describes current directional conditions. It does not predict the direction of the next candle.
________________________________________
• Strength and Acceleration
The script measures directional candle impulse relative to its recent baseline.
The current directional movement is calculated from:
Close - Open
Its absolute movement is compared with the recent average absolute candle movement over a default seven-bar calculation length.
The resulting Strength value describes the current directional impulse relative to that recent baseline.
Acceleration measures the change in normalized Strength from the previous bar.
The Note field converts the relationship between Strength and Acceleration into descriptive states such as:
• Explosive
• Strong
• Starting
• Fading
• Moderate
• Weak
• Reversing
• Dead
These labels describe programmed momentum conditions. They are not probability, confidence, win-rate, or accuracy measurements.
________________________________________
• Early Entry Alert
The script includes a separate Early Entry alert condition.
The programmed condition requires:
• A confirmed crossover above the Daily structural High.
• An active Weekly breakout condition.
• Bull Control from the Radar.
• Positive Acceleration.
• Strong or Explosive positive momentum according to the script's classification.
Early Entry operates as an alert condition only and does not replace or modify the main Action-state engine.
________________________________________
• Why These Components Are Combined
Hunter DWM Control Pro uses established technical-analysis calculations such as EMA, ATR, candle-body and wick measurements, price ranges, and multi-timeframe price data.
The individual calculations are supporting components rather than the purpose of the script.
The script coordinates one structural process across Daily, Weekly, and Monthly data and connects that structure with stored invalidation levels, sequential targets, extension targets, evolving support and resistance, Action states, Radar context, normalized directional momentum, and timeframe-based candle coloring.
The structural engine identifies the reference levels.
The target and support/resistance engines describe how those levels evolve after a breakout.
The Radar and momentum components provide additional context about the directional environment and current price movement.
This relationship between the components is the reason they are presented together.
________________________________________
• Intended Timeframe
The complete structural workflow is designed primarily for a Daily chart.
On the Daily timeframe, the script displays:
• D/W/M structural lines.
• Structural SL references.
• The full multi-timeframe table.
• Action states.
• Timeframe-based candle coloring.
Radar and momentum calculations use the chart's current timeframe, but the complete D/W/M workflow is intended to be interpreted from the Daily chart.
________________________________________
• Multi-Timeframe Data Behavior
Daily, Weekly, and Monthly calculations are evaluated inside their respective requested timeframes.
The script uses multi-timeframe requests with future-data lookahead disabled.
However, values associated with the current Weekly or Monthly candle can still change while that higher-timeframe candle remains open.
Users should therefore distinguish between a developing higher-timeframe condition and one based on a completed higher-timeframe candle.
Daily BUY and EXIT events additionally require a confirmed Daily chart bar.
________________________________________
• Main Table
The main table contains:
• TF — Timeframe.
• Last High — Current stored structural High.
• Breakout — Current structural breakout state.
• SL — Structural Low or invalidation reference.
• RS — Current resistance reference.
• SUP — Current support reference.
• SL Stat — ACTIVE, BROKEN, or INACTIVE.
• T1 / T2 / T3 — Preview, primary, or extension target sequence depending on the current structural state.
• Action — Current Daily trade-state label.
________________________________________
• Radar Table
The compact Radar table contains:
• Trend — UP, DOWN, COMPRESSION, or NEUTRAL.
• Accel — Change in normalized directional Strength.
• Strength — Current normalized directional candle impulse.
• Note — Current descriptive momentum state.
________________________________________
• Settings
Available settings include controls for:
• Daily, Weekly, and Monthly colors.
• Candle coloring by highest breakout timeframe.
• Structural line length, width, and style.
• SL line length, width, and style.
• Label size and transparency.
• Main table appearance and position.
• Radar Control EMA length.
• Radar Bias EMA length.
• Radar compression threshold.
• Radar cloud transparency.
• Bull and Bear Radar colors.
• Radar Cloud visibility.
• Radar Slow Bias visibility.
• Radar table text size.
________________________________________
• Alerts
The script includes alert conditions for:
• BUY
• TP
• EXIT
• Early Entry
An alert means that the corresponding programmed condition has occurred.
It does not place a market order and does not imply that price will subsequently move in a particular direction.
________________________________________
• Limitations
Hunter DWM Control Pro is based on price-derived technical calculations.
Structural breakouts can fail.
Price may not reach projected targets.
A previously active structural condition can later be invalidated.
Radar, Strength, and Acceleration states can change as new price data becomes available.
Weekly and Monthly values can change while their current candles are still developing.
Preview targets shown before a confirmed breakout are structural projections and are not active target-hit records.
The script does not account for brokerage execution, spread, slippage, commissions, liquidity, leverage, position sizing, or individual risk-management rules.
The indicator is not a backtesting strategy and does not calculate or report historical profitability, win rate, or signal accuracy.
________________________________________
• Disclaimer
Hunter DWM Control Pro is a technical-analysis tool provided for informational and educational purposes.
Its levels, states, targets, colors, tables, and alerts are outputs of programmed calculations applied to market data.
They do not constitute financial advice or a recommendation to buy, sell, hold, or exit any financial instrument.
Users remain responsible for their own analysis, risk management, and trading decisions.
________________________________________
• نظرة عامة
Hunter DWM Control Pro هو سكربت للتحليل الفني متعدد الأطر الزمنية، ويعتمد على تسلسل هيكلي يتم تقييمه على الإطار اليومي والأسبوعي والشهري.
يجمع المؤشر بين مراجع الاختراق الهيكلي، ومستويات الإبطال الهيكلي، والأهداف السعرية المتتابعة، والدعم والمقاومة المتغيرة، وسحابة Radar Control المتطورة، وقياس القوة الاتجاهية، وتلوين الشموع وفق حالة الأطر الزمنية.
تعمل هذه المكونات ضمن دورة تحليل واحدة؛ فالمحرك الهيكلي يحدد البنية السعرية التي تتم مراقبتها، ومحرك الأهداف يتابع كيفية تطور تلك البنية بعد الاختراق، بينما يقدم الرادار وقياسات القوة معلومات إضافية عن البيئة الاتجاهية المحيطة بها.
تم تصميم العرض الهيكلي الكامل D/W/M بصورة أساسية للاستخدام على الشارت اليومي.
________________________________________
• اكتشاف الهيكل
يبدأ التسلسل الهيكلي بتقييم شكل الشموع الاتجاهية.
تتطلب الشمعة الصاعدة المستوفية للشروط:
• أن يكون الإغلاق أعلى من الافتتاح.
• أن يكون جسم الشمعة أكبر من مجموع الظل العلوي والسفلي.
ويتم تطبيق الشرط الاتجاهي المقابل على الشمعة الهابطة باستخدام العلاقة نفسها بين الجسم والظلال.
يسجل المؤشر قاع آخر شمعة صاعدة مستوفية للشروط، ثم يبحث عن شمعة هابطة مستوفية للشروط تغلق أسفل ذلك القاع.
عند ظهور هذا الهيكل الهابط، يتم تسجيل قمته وقاعه ووقته.
يتم اكتشاف الاختراق الهيكلي الصاعد عندما يحدث لاحقًا إغلاق أعلى من القمة المسجلة لذلك الهيكل.
ويتم تنفيذ العملية نفسها بصورة مستقلة على Daily وWeekly وMonthly.
________________________________________
• هيكل Daily وWeekly وMonthly
ينظم الجدول الرئيسي الحالة الهيكلية لكل من:
• Daily
• Weekly
• Monthly
ويعرض لكل إطار معلومات مثل:
• Last High
• Breakout
• SL
• RS
• SUP
• SL Stat
• T1
• T2
• T3
والغرض من قراءة الأطر الثلاثة هو معرفة كيفية تطور التسلسل الهيكلي نفسه عبر أكثر من أفق زمني.
________________________________________
• الإبطال الهيكلي
عند تفعيل دورة اختراق، يقوم المؤشر بتخزين قاع الهيكل الهابط المرتبط بذلك الاختراق ليصبح مرجع الإبطال الهيكلي.
يمكن أن تظهر حالة SL كالتالي:
• ACTIVE — توجد دورة هيكلية نشطة وما زالت أعلى مستوى الإبطال المخزن.
• BROKEN — أغلق الإطار المعني أسفل مستوى الإبطال المخزن.
• INACTIVE — لا توجد حاليًا دورة هيكلية نشطة مرتبطة بذلك المستوى.
وقبل وجود دورة نشطة، يمكن أن تعرض خانة SL قاع الهيكل الحالي كمرجع سعري.
هذه المستويات مراجع هيكلية محسوبة بواسطة المؤشر، ولا تحدد حجم الصفقة أو مقدار التعرض في الحساب أو مستوى المخاطرة المناسب للمستخدم.
________________________________________
• حساب الأهداف الأساسية
عند إنشاء دورة اختراق هيكلي جديدة، يتم تخزين قمة وقاع الهيكل المرتبط بها.
يتم حساب المدى كالتالي:
المدى = قمة الهيكل - قاع الهيكل
ثم:
• T1 = قمة الهيكل + مرة واحدة من المدى
• T2 = قمة الهيكل + مرتين من المدى
• T3 = قمة الهيكل + ثلاث مرات من المدى
يسجل المؤشر تحقق الهدف عندما يغلق الإطار الزمني المعني عند مستوى الهدف أو أعلى منه.
وقبل وجود دورة اختراق مؤكدة، يمكن أن يعرض الجدول أهدافًا تقديرية محسوبة من الهيكل الحالي.
تستخدم هذه المستويات لتوضيح المسار الهيكلي أمام السعر، بينما تبدأ متابعة تحقق الأهداف الفعلية بعد تفعيل دورة الاختراق.
________________________________________
• الأهداف الامتدادية
بعد تحقق T3 يمكن للمؤشر إنشاء تسلسل أهداف إضافي.
يتطلب تفعيل الامتداد وجود شمعة صاعدة مستوفية لشروط القوة تغلق عند T3 أو أعلى منه.
يتم استخدام قمة وقاع تلك الشمعة لتحديد مدى جديد، ومنه يتم حساب:
• EXT1
• EXT2
• EXT3
بعد إنشاء الامتداد يتم تثبيت مرجعه وأهدافه لدورة الامتداد الحالية، ولا يعاد حسابها من كل شمعة صاعدة لاحقة.
وبذلك يتم الفصل بين أهداف الهيكل الأساسي ومرحلة التوسع السعري اللاحقة.
________________________________________
• الدعم والمقاومة الديناميكية
تتغير خانات RS وSUP مع تقدم السعر خلال التسلسل الهيكلي.
قبل وجود دورة أهداف نشطة، تعمل القمة الهيكلية المسجلة كمرجع للمقاومة التالية.
بعد الاختراق، يتحول مستوى الاختراق الأصلي إلى مرجع دعم، بينما يصبح T1 المقاومة التالية.
ومع تحقق T1 ثم T2 ثم T3 وأهداف الامتداد، يقوم المؤشر بنقل مراجع الدعم والمقاومة عبر التسلسل.
ولذلك فإن RS وSUP يصفان الموقع الحالي داخل المسار الهيكلي للمؤشر، وليسا مستويات دعم ومقاومة ثابتة.
________________________________________
• حالة Action
تلخص خانة Action حالة منطق الصفقة اليومية داخل المؤشر.
الحالات الممكنة هي:
• WAIT — لا توجد دورة صفقة يومية نشطة.
• BUY — حدث اختراق هيكلي يومي جديد ومؤكد وقام بتفعيل الحالة البرمجية.
• HOLD — ما زالت الحالة اليومية نشطة ولم يغلق السعر أسفل مستوى الإبطال المخزن.
• TP — تم تأكيد أحد الأهداف اليومية المبرمجة أثناء بقاء الحالة نشطة.
• EXIT — أغلق السعر اليومي أسفل مستوى الإبطال الهيكلي المخزن.
كما يمنع المحرك إنشاء حالة BUY جديدة إذا كان الهدف اليومي الأول قد تم تسجيله بالفعل ضمن التسلسل المعني.
هذه المصطلحات أسماء لحالات برمجية داخل المؤشر، وليست أوامر تنفيذ لدى وسيط ولا تعليمات للمستخدم بالشراء أو الاحتفاظ أو جني الربح أو الخروج.
________________________________________
• تلوين الشموع متعدد الأطر
على الشارت اليومي يمكن للمؤشر تلوين الشموع اختياريًا وفق أعلى إطار زمني توجد عليه حالة اختراق نشطة.
ترتيب الأولوية هو:
Monthly → Weekly → Daily
وبالتالي:
• إذا كان Daily نشطًا يظهر لون اليومي.
• إذا كان Weekly نشطًا يأخذ الأولوية على اليومي.
• إذا كان Monthly نشطًا يأخذ الأولوية على الأسبوعي واليومي.
• إذا لم تكن أي من الحالات الثلاث نشطة، لا يغير المؤشر ألوان الشموع الأصلية للشارت.
الغرض من التلوين هو إظهار أعلى إطار هيكلي نشط بصريًا دون إضافة إشارات متكررة حول كل شمعة.
________________________________________
• سحابة Advanced Radar Control
تقدم سحابة Radar Control المتطورة قراءة للسياق الاتجاهي بشكل منفصل عن محرك D/W/M.
يحدد الرادار الشموع الاتجاهية القوية باستخدام العلاقة بين حجم جسم الشمعة ومجموع الظلال.
تغذي الشمعة الصاعدة المستوفية للشروط Bull Control، بينما تغذي الشمعة الهابطة المستوفية للشروط Bear Control.
وعندما لا توجد شمعة اتجاهية جديدة مستوفية للشروط، يتم الاحتفاظ بآخر قيمة.
ثم يتم تنعيم Bull Control وBear Control باستخدام EMA.
القيمة الافتراضية لطول Radar Control هي 11.
كما يقيس المؤشر المسافة بين Bull Control وBear Control مقارنة بـ ATR(14).
ويصنف الرادار البيئة الحالية إلى:
• Bull Control
• Bear Control
• Compression
• Transition
تظهر حالة Compression عندما تصبح المسافة المعيارية بين خطي السيطرة أقل من الحد المحدد، والقيمة الافتراضية هي 0.18 ATR.
تتطلب Bull Control وجود السعر أعلى الحد العلوي للرادار مع عدم انخفاض Bull Control.
وتتطلب Bear Control وجود السعر أسفل الحد السفلي للرادار مع عدم ارتفاع Bear Control.
أما الحالات الأخرى غير المصنفة كـCompression فتظهر كـTransition.
المنطقة الملونة بين Bull Control وBear Control تمثل سحابة Advanced Radar Control.
كما يوجد خط اختياري باسم Radar Slow Bias يعتمد على تنعيم إضافي لمتوسط خطي السيطرة بواسطة EMA بطول افتراضي 33، وهو مخفي افتراضيًا.
الرادار يصف الحالة الاتجاهية الحالية ولا يتنبأ باتجاه الشمعة التالية.
________________________________________
• Strength وAcceleration
يقيس المؤشر قوة الحركة الاتجاهية الحالية مقارنة بخط أساس حديث.
الحركة الاتجاهية الحالية هي:
Close - Open
ثم تتم مقارنة الحركة بمتوسط القيمة المطلقة لحركة الشموع الأخيرة خلال فترة افتراضية قدرها سبع شموع.
تمثل Strength قوة الحركة الاتجاهية الحالية مقارنة بخط الأساس الحديث.
أما Acceleration فيقيس التغير في Strength المعيارية مقارنة بالشمعة السابقة.
وتحول خانة Note هذه القراءات إلى أوصاف مثل:
• Explosive
• Strong
• Starting
• Fading
• Moderate
• Weak
• Reversing
• Dead
هذه الحالات تصف الزخم المحسوب داخل المؤشر، ولا تمثل احتمال نجاح أو Confidence أو Win Rate أو نسبة دقة.
________________________________________
• تنبيه Early Entry
يتضمن المؤشر شرط تنبيه مستقل باسم Early Entry.
ويتطلب:
• تقاطعًا مؤكدًا أعلى المستوى الهيكلي اليومي.
• وجود حالة اختراق أسبوعية نشطة.
• حالة Bull Control في الرادار.
• Acceleration إيجابي.
• وجود Strong أو Explosive ضمن تصنيف الزخم الإيجابي.
Early Entry هو شرط للتنبيه فقط، ولا يغير أو يستبدل محرك Action الرئيسي.
________________________________________
• لماذا تم جمع هذه المكونات؟
يستخدم Hunter DWM Control Pro حسابات معروفة في التحليل الفني مثل EMA وATR وقياسات أجسام وظلال الشموع ومدى السعر وبيانات الأطر الزمنية المتعددة.
ولا يتم تقديم هذه الحسابات الفردية باعتبارها أساليب جديدة بحد ذاتها.
يقوم السكربت بتنسيق تسلسل هيكلي واحد عبر Daily وWeekly وMonthly وربطه بمستويات الإبطال المخزنة، والأهداف المتتابعة، وأهداف الامتداد، والدعم والمقاومة المتغيرة، وحالات Action، وسياق الرادار، والقوة الاتجاهية المعيارية، وتلوين الشموع متعدد الأطر.
يحدد المحرك الهيكلي المستويات المرجعية، وتوضح محركات الأهداف والدعم والمقاومة كيفية تطور تلك المستويات بعد الاختراق، بينما يضيف الرادار وقياسات القوة سياقًا إضافيًا للحالة الاتجاهية والحركة الحالية.
وهذا الترابط هو سبب استخدام هذه المكونات معًا داخل السكربت.
________________________________________
• الإطار الزمني المقصود
تم تصميم دورة العمل الهيكلية الكاملة بصورة أساسية للشارت اليومي.
على الإطار اليومي يعرض المؤشر:
• خطوط D/W/M الهيكلية.
• مراجع SL.
• جدول الأطر الزمنية الكامل.
• حالات Action.
• تلوين الشموع وفق الأطر الزمنية.
أما حسابات الرادار والزخم فتستخدم بيانات الإطار الموجود على الشارت، لكن قراءة دورة D/W/M الكاملة مخصصة أساسًا للشارت اليومي.
________________________________________
• سلوك بيانات الأطر الزمنية
يتم تنفيذ حسابات Daily وWeekly وMonthly داخل الإطار الزمني الخاص بكل منها.
ويستخدم السكربت طلبات Multi-Timeframe مع تعطيل الوصول إلى بيانات مستقبلية.
مع ذلك، يمكن لقيم Weekly أو Monthly الحالية أن تتغير أثناء استمرار تكون شمعة الإطار الأعلى.
ولذلك يجب التمييز بين حالة إطار زمني أعلى ما زالت شمعتها قيد التكوين وبين حالة مبنية على شمعة مكتملة.
كما تتطلب أحداث BUY وEXIT اليومية تأكيد الشمعة الحالية.
________________________________________
• الجدول الرئيسي
يتضمن الجدول:
• TF — الإطار الزمني.
• Last High — القمة الهيكلية الحالية المسجلة.
• Breakout — حالة الاختراق الحالية.
• SL — مرجع القاع أو الإبطال الهيكلي.
• RS — المقاومة الحالية.
• SUP — الدعم الحالي.
• SL Stat — ACTIVE أو BROKEN أو INACTIVE.
• T1 / T2 / T3 — الأهداف التقديرية أو الأساسية أو الامتدادية حسب الحالة الحالية.
• Action — حالة الصفقة اليومية البرمجية الحالية.
________________________________________
• جدول الرادار
يتضمن جدول الرادار:
• Trend — UP أو DOWN أو COMPRESSION أو NEUTRAL.
• Accel — تغير القوة الاتجاهية المعيارية.
• Strength — القوة الاتجاهية الحالية مقارنة بخطها الأساسي.
• Note — الوصف البرمجي الحالي للزخم.
________________________________________
• الإعدادات
تشمل الإعدادات خيارات للتحكم في:
• ألوان Daily وWeekly وMonthly.
• تلوين الشموع حسب أعلى إطار اختراق.
• طول وعرض ونمط الخطوط الهيكلية.
• طول وعرض ونمط خطوط SL.
• حجم وشفافية التسميات.
• شكل وموقع الجدول الرئيسي.
• Radar Control EMA Length.
• Radar Bias EMA Length.
• Radar Compression Threshold.
• شفافية سحابة الرادار.
• ألوان Bull وBear Radar.
• إظهار أو إخفاء Radar Cloud.
• إظهار أو إخفاء Radar Slow Bias.
• حجم النص في جدول الرادار.
________________________________________
• التنبيهات
يتضمن السكربت شروط تنبيه لـ:
• BUY
• TP
• EXIT
• Early Entry
يعني التنبيه أن الشرط البرمجي المرتبط به قد تحقق.
ولا يقوم بتنفيذ أمر في السوق ولا يعني أن السعر سيتحرك لاحقًا في اتجاه معين.
________________________________________
• القيود
يعتمد Hunter DWM Control Pro على حسابات تحليل فني مشتقة من بيانات السعر.
قد يفشل الاختراق الهيكلي.
وقد لا يصل السعر إلى الأهداف المتوقعة.
وقد يتم إبطال حالة هيكلية كانت نشطة سابقًا.
كما يمكن أن تتغير حالات Radar وStrength وAcceleration مع وصول بيانات سعرية جديدة.
ويمكن أن تتغير قيم Weekly وMonthly أثناء استمرار تكون شموعها الحالية.
الأهداف التقديرية التي تظهر قبل الاختراق المؤكد هي إسقاطات هيكلية وليست سجلات لأهداف نشطة تم تحقيقها.
لا يأخذ السكربت في الاعتبار تنفيذ الوسيط أو السبريد أو الانزلاق السعري أو العمولات أو السيولة أو الرافعة المالية أو حجم الصفقة أو قواعد إدارة المخاطر الخاصة بالمستخدم.
المؤشر ليس Strategy للاختبار التاريخي ولا يحسب أو يعرض الربحية التاريخية أو Win Rate أو نسبة دقة للإشارات.
________________________________________
• إخلاء المسؤولية
Hunter DWM Control Pro هو أداة للتحليل الفني مقدمة لأغراض معلوماتية وتعليمية.
المستويات والحالات والأهداف والألوان والجداول والتنبيهات التي يعرضها هي نواتج لحسابات برمجية مطبقة على بيانات السوق.
ولا تمثل نصيحة مالية أو توصية بشراء أو بيع أو الاحتفاظ أو الخروج من أي أداة مالية.
يبقى المستخدم مسؤولًا عن تحليله وإدارة مخاطره وقراراته.
Indicator

Sessions - New York, London & AsiaOVERVIEW
This indicator draws price range boxes for the main trading sessions (Asia, London/Europe, and New York) and an optional full-day box with daily high/low labels and open/close lines. It is a chart-context tool: it shows where price traded during each session window, not buy/sell signals.
PURPOSE / WHY THIS EXISTS
Many traders need a clear visual of:
1) which session produced the day’s high or low,
2) how large the session range was,
3) how sessions overlap (for example London–New York),
4) and where the daily open sits relative to those ranges.
This script combines three session range boxes with a daily structure layer (00:00–24:00 in a fixed timezone). The components are meant to work together so you can read session behavior against the same day’s overall range without stacking several separate scripts.
WHAT IT DOES
• Asia session box — tracks high/low while the Asia window is open; freezes the box when the session ends.
• London (Europe) session box — same logic for the London window.
• New York session box — same logic for the RTH-style New York window.
• Daily box — full calendar day high/low in the same timezone.
• Daily high/low labels — marks the bar time of the daily high and low.
• Optional daily open and close/last lines with labels.
Sessions are only drawn on intraday charts. On daily and higher timeframes, session boxes are disabled (the daily layer can still apply depending on your settings).
DEFAULT SESSION TIMES
All times use the America/New_York timezone (PulseWire handles daylight saving for that zone). Defaults can be edited in the inputs:
• Asia: 20:00–05:00
• London (Europe): 03:00–12:00
• New York: 09:30–16:00
Overlaps are intentional. For example, Asia and London can share a morning window, and London and New York share a large mid-day window. The boxes stack so you can see concurrency visually.
HOW IT WORKS (CONCEPT)
1) Session membership
For each session, the script checks whether the current bar’s time falls inside the configured session string, evaluated in America/New_York.
2) Session start / end
• Session start: first bar that is inside the session after being outside.
• Session end: first bar that is outside the session after being inside.
3) Range tracking
While inside a session, the script updates running high and low from bar high/low. The live box left edge is the session start bar; the right edge follows the current bar. When the session ends, the box is fixed for that day/session instance and kept in an optional history list.
4) Daily layer
The daily open is taken from the 1D open of the symbol. Daily high/low are tracked from bar values until the New York calendar day changes, then the previous day is finalized as a historical daily box (if enabled).
5) Object limits
History depth is capped by internal safety limits so the chart does not exceed PulseWire drawing object limits on low timeframes.
HOW TO USE IT
Typical workflow on a 1m–15m chart:
1) Load the symbol you trade (indices, FX, metals, etc.).
2) Keep default session times if your process is U.S.-anchored; otherwise edit the three session inputs.
3) Use GLOBAL visibility toggles if you only need one or two sessions on screen.
4) Compare the current New York (or London) box size to recent historical boxes of the same color — this is visual context for range expansion/contraction, not a trade rule by itself.
5) Use daily high/low labels to see whether extremes printed in Asia, London, or New York.
6) Use open/close lines if you track acceptance above/below the daily open as part of your own rules.
Suggested reading order on any day:
Daily structure first (open, D Hi, D Lo) → then session boxes → then your own entry method (structure, levels, etc.). This script does not define entries, stop-loss, or take-profit.
INPUTS (MAIN GROUPS)
• Session time strings and colors for Asia / London / New York.
• Per-session show historical vs current boxes; outline-only options.
• GLOBAL toggles for each session.
• Daily box: historical and current day display.
• Daily high/low labels and colors.
• Daily open/close lines and their labels.
COLORS (DEFAULT IDEA)
• Asia — yellow tones
• London — blue tones
• New York — red tones
• Daily — lime tones
Colors are customizable so you can match your chart theme.
WHAT THIS SCRIPT IS NOT
• Not a strategy and not a signal generator.
• Not a guarantee of profitable trades or future price direction.
• Not a replacement for risk management or a complete trading plan.
• Session times are conventions (liquidity-focused windows), not a claim that one session is inherently “better” to trade.
TIPS FOR A CLEAN CHART
• Publish/use with this script alone on the chart for clarity.
• Prefer outline-only if fills feel heavy.
• Reduce historical session display if the chart becomes crowded.
LIMITATIONS
• Session logic depends on the bar timeframe: on higher intraday TFs, box edges align to those bars, not tick-perfect open/close of the clock window.
• Some symbols have thin overnight liquidity; box size then reflects that microstructure, not “quality” of a setup.
• Past session ranges do not predict the next session’s range.
DISCLAIMER
This tool Sessions - New York, London & Asia is for educational charting and visual analysis only. Markets involve risk. Past behavior on a chart does not guarantee future results. Always validate any idea on your own charts and risk parameters. Indicator

Apsis Screener Trend, Momentum & Participation Across a WatchlTwelve symbols, one row each: where the trend sits, whether momentum agrees, how
much participation is behind it, and how far price has stretched from the fast
EMA.
Defaults cover the CME complex, metals, energy, crypto and FX majors. Every slot
is editable; leave one blank and its row disappears.
WHAT EACH ROW REPORTS
• Trend — the same EMA pair as the Apsis Pro cloud
• Flux — the same participation-weighted momentum as Apsis Flux
• Agreement — whether the two point the same way
• Stretch — distance from the fast EMA in ATR units, so it is comparable across
instruments that do not share a price scale
Optionally floats the strongest readings to the top, so a twelve-row table can
be scanned in the time it takes to read three.
WHY IT IS THE SAME MATHS
A row here and a chart there will never disagree, because they are the same
calculation requested on a different ticker. A screener that uses its own
simplified formula is worse than no screener: it sends you to a chart that then
tells you something different.
ONE REQUEST PER SYMBOL
Every field for a symbol comes back in a single tuple request rather than one
call per field. PulseWire caps how many requests a script may make, and a
naive screener burns that cap at four symbols. This one stays inside it at
twelve.
NO REPAINTING
Requests use lookahead off and read the closed bar of the selected timeframe. On
an intrabar refresh a row updates exactly as it did live — it does not reach
forward to that bar's final value.
Scan timeframe is independent of the chart, so you can read a 1H screen from a
2m chart. Indicator

Indicator

BABEL PRECISION BOTBABEL PRECISION BOT v2 — A+ EDITION is an advanced PulseWire market-analysis indicator designed to identify high-confluence BUY and SELL opportunities rather than generating excessive signals.
It combines 50/200 EMA trend direction, higher-timeframe confirmation, RSI, ADX/DMI, volume expansion, market structure, BOS, CHOCH, liquidity sweeps, support and resistance, supply/demand zones, and automatic trend lines.
The indicator assigns an A+ setup score and only produces a BUY or SELL signal when enough conditions align. It also provides entry, Stop Loss, TP1, TP2 and TP3 levels using ATR-based risk management.
Indicator

Indicator

Indicator

Indicator

Indicator

Indicator

Indicator

Indicator
