Alpha Forge Adaptive VWAP Wave v1.0.19Alpha Forge Adaptive VWAP Wave is a selective, long-side market-structure overlay designed specifically for standard 1-hour charts.
It combines an adaptive VWAP-based wave with confirmed multi-timeframe qualification to help distinguish between balanced conditions, directional expansion, and established trends. Rather than producing signals on every crossover, the indicator waits for its internal market profile and routing requirements to align.
HOW THE ROUTING WORKS
The indicator evaluates two possible routes:
• 1H PRIMARY — The setup qualifies directly from the 1-hour market structure.
• 4H QUALIFICATION / 1H EXECUTION — A completed 4-hour candle establishes the broader thesis while the actual entry remains timed and confirmed on the 1-hour chart.
The 1-hour route always receives priority. The 4-hour route is only considered when the primary route does not qualify.
If neither route meets the internal requirements, the dashboard displays NO QUALIFIED ROUTE. This is intentional and means the indicator is choosing to stand aside rather than force a setup.
SIGNAL MARKERS
• Cyan BUY — Confirmed 1-hour tactical entry.
• Purple 4H QUAL BUY — Confirmed 4-hour thesis with a 1-hour tactical entry.
• Pink EXIT — Confirmed tactical exit or protective trade-management event.
Signals are deliberately selective and will not appear on every symbol.
ADAPTIVE WAVE
The cyan and magenta wave provides a visual representation of the active VWAP structure and surrounding deviation zones.
The wave is designed to make changes in balance, direction, and structural support easier to identify without covering the underlying price action. Its width and position adapt to the market rather than remaining fixed to a single static distance.
DASHBOARD
The Alpha Forge dashboard provides a compact summary of the current operating state:
• STATUS — Whether the system is in a trade or standing aside.
• ROUTE — The timeframe path currently controlling the setup.
• PROFILE — The trade-management profile selected by the internal qualification process.
• REGIME — The detected market environment.
• SAMPLE — The amount of historical evidence available for the selected profile.
• POSITION — Current position state and active profile.
FORGE GUIDE
The Forge Guide translates the active system state into three practical sections:
• WAITING — What the system is currently waiting for.
• WATCH — The structure or protection currently being monitored.
• ACTION — The appropriate response for the present state.
The Guide is informational. It does not replace personal risk management or independent analysis.
RECOMMENDED USE
• Use standard candlesticks or bars.
• Use the 1-hour chart timeframe.
• Leave the source at its default HLC3 setting unless you are deliberately testing an alternative.
• The 4-hour analysis is handled internally; there is no need to change the chart to 4H.
• Wait for the candle to close before treating a marker as confirmed.
The indicator is primarily intended for liquid stocks and metals. It may also qualify selected forex markets, but it is deliberately selective and should not be expected to produce a route on every currency pair.
SIGNAL CONFIRMATION
BUY and EXIT events are confirmed only after the 1-hour chart candle closes.
The higher-timeframe route uses information from previously completed 4-hour candles. This prevents an unfinished 4-hour candle from being treated as confirmed evidence.
The live wave and dashboard may move while the current candle is forming. Final markers and alerts are only confirmed at candle close.
ALERTS
The script supports confirmed BUY and EXIT alerts.
For standard TradingView notifications, create alerts from the available BUY and EXIT conditions.
For dynamic webhook messages, select “Any alert() function call.” Create webhook alerts while the dashboard is FLAT whenever possible.
TradingView stores a snapshot of the script, chart, and settings when an alert is created. Alerts should therefore be recreated after changing the script, symbol, timeframe, or important inputs.
IMPORTANT QUALIFICATION NOTES
This is an indicator, not a TradingView strategy.
Its internal qualification process evaluates the historical information available on the loaded chart. Qualification can therefore vary with the symbol, market-data provider, and amount of chart history available.
The internal cost filter assumes 0.05% per side. It does not separately model spread, slippage, funding, swaps, or broker-specific commissions.
Historical qualification does not guarantee future performance. A qualified route identifies alignment with the model’s requirements; it is not a prediction or promise that a trade will be profitable.
Alpha Forge Adaptive VWAP Wave is intended as a market-structure and decision-support tool. It should be used alongside appropriate position sizing, risk controls, and independent analysis.
Indicator

fxberkantt old istek🇬🇧 English
ICT Killzones & Pivots plots the major ICT trading session (killzone) boxes — Asia, London, NY AM, NY Lunch, NY PM, and RTH — along with their high/low pivot lines, midpoints, hit-rate statistics, day/week/month levels, opening price lines, and custom timestamps.
This version restores the classic feature of displaying the session name directly inside each killzone box (e.g. "ASIA", "LNDN"), scaled and centered automatically as the box grows — just like the earlier release of this indicator. The session name, its text size, and its transparency can all be adjusted from the settings.
Original credit: © tradeforopp, licensed under MPL 2.0.
🇹🇷 Türkçe
ICT Killzones & Pivots , başlıca ICT işlem seanslarını (killzone) — Asya, Londra, NY Sabah, NY Öğle, NY Akşam ve RTH — kutu olarak çizer; bunlarla birlikte yüksek/düşük pivot çizgilerini, orta noktaları, isabet oranı istatistiklerini, gün/hafta/ay seviyelerini, açılış fiyat çizgilerini ve özel zaman damgalarını gösterir.
Bu sürüm, göstergenin eski versiyonundaki klasik özelliği geri getiriyor: seans isminin doğrudan killzone kutusunun içinde (örn. "ASIA", "LNDN") gösterilmesi. Yazı, kutu büyüdükçe otomatik olarak ortalanır. Seans isminin gösterilip gösterilmeyeceği, yazı boyutu ve şeffaflığı ayarlardan değiştirilebilir.
Orijinal hak sahibi: © tradeforopp, MPL 2.0 lisansı altında.
🇪🇸 Español
ICT Killzones & Pivots dibuja las principales sesiones de trading ICT (killzones) — Asia, Londres, NY AM, NY Lunch, NY PM y RTH — junto con sus líneas de pivote de máximo/mínimo, puntos medios, estadísticas de tasa de acierto, niveles diarios/semanales/mensuales, líneas de precio de apertura y marcas de tiempo personalizadas.
Esta versión recupera la función clásica de mostrar el nombre de la sesión directamente dentro de cada caja de killzone (ej. "ASIA", "LNDN"), centrado automáticamente a medida que la caja crece — tal como en la versión anterior de este indicador. El nombre de la sesión, su tamaño de texto y su transparencia se pueden ajustar desde la configuración.
Crédito original: © tradeforopp, bajo licencia MPL 2.0. Indicator

Indicator

Market Regime - Trend or RangeWHAT IT DOES
Market Regime — Trend or Range answers one question at a glance: is the current market TRENDING or RANGING? It combines three established, independent regime measures and requires a 2-of-3 majority vote before declaring a verdict, so a single noisy reading cannot flip the classification.
WHY THESE THREE COMPONENTS WORK TOGETHER
Each component measures a different aspect of market character, so their agreement is meaningful rather than redundant:
1) ADX (Wilder) measures directional strength. Vote: Trend above the ADX Trend Threshold (default 25), Range below the ADX Range Threshold (default 20), otherwise neutral.
2) Kaufman Efficiency Ratio measures how efficiently price travels: net change over the lookback divided by the sum of absolute bar-to-bar changes (default length 20). A high ratio means price moved directionally; a low ratio means it churned. Vote: Trend above 0.50, Range below 0.30.
3) Choppiness Index measures sideways versus directional behavior using the log ratio of summed true range to the total high-low range of the lookback (default length 14). Vote: Trend below 38.2, Range above 61.8.
The votes are summed into a score from -3 to +3. TREND requires +2 or more, RANGE requires -2 or less, anything else is MIXED. This 2-of-3 design is the purpose of the combination: ADX alone lags turns, the Efficiency Ratio alone is jumpy, and Choppiness alone ignores direction. Requiring agreement between at least two independent measures filters each one's weakness instead of merely displaying three indicators side by side. The script also derives a 0-100 strength meter by averaging normalized ADX, normalized Efficiency Ratio and inverted Choppiness.
WHAT APPEARS ON THE CHART
- Optional background tint: teal while TREND, orange while RANGE, none while MIXED.
- A dashboard table (corner selectable) showing the verdict, each component's current value with its own vote mark (up arrow = trend vote, down arrow = range vote, dot = neutral), the strength meter, the raw vote score, and a Playbook line that reads Trend tools, Fade tools, or Stand aside.
INPUTS AND DEFAULTS
ADX Length (14), ADX Trend Threshold (25), ADX Range Threshold (20), Efficiency Ratio Length (20), ER Trend Threshold (0.50), ER Range Threshold (0.30), Choppiness Length (14), plus visual toggles for the background tint and the dashboard position. Defaults are the classic reference values for each measure, not optimized settings.
HOW TO USE IT
Read it on your trading timeframe for the live regime, and optionally on a higher timeframe for the session's broader character. On TREND verdicts, continuation methods are generally more appropriate; on RANGE verdicts, mean-reversion and fade methods; on MIXED, caution or smaller size. It works on any symbol and timeframe and makes no claim of special performance on any market.
ALERTS
Two alert conditions are included and fire when the composite verdict changes: "Switched to TREND" and "Switched to RANGE".
BEHAVIOR AND LIMITATIONS
- All calculations run on the chart timeframe with no higher-timeframe requests, so nothing repaints from other timeframes. Values on the live bar update until that bar closes, then are fixed.
- A regime classifier describes current conditions. It does not predict future price and it is not a signal generator.
- Thresholds are configurable; changing them changes how strict each vote is.
This is an informational analysis tool for chart study, not financial advice. Past market behavior does not guarantee future results. Always apply your own risk management. Indicator

Equalhigh - Lepage Dual-Regime DetectorEqualhigh — Lepage Dual-Regime Detector
User Manual
Overview
The Equalhigh Lepage Dual-Regime Detector is a non-parametric change-point indicator for TradingView. It is designed to identify recent changes in either:
Location: the central level of the return distribution.
Scale: the dispersion of the return distribution.
Both simultaneously: a mixed structural break.
Unlike a conventional momentum oscillator, the indicator does not ask whether price is overbought or oversold. It asks whether recent return behavior is statistically different from earlier return behavior inside the active window.
This is a diagnostic regime detector, not an automatic buy-and-sell system.
Why use a location-scale test?
A market transition does not always begin with an obvious directional move. Sometimes the median return changes while volatility remains stable. In other cases, volatility expands or contracts before a clear directional shift becomes visible.
The Lepage framework combines two rank-based components:
The Wilcoxon rank-sum component measures a change in location.
The Ansari–Bradley component measures a change in scale.
The combined statistic can therefore detect more types of structural change than a location-only test.
Observation series
The test is applied to multi-bar logarithmic returns:
Observation = 100 × ln(Source / Source )
Using returns instead of raw prices reduces the tendency to classify the normal upward drift of an asset as a permanent structural break.
Logarithmic returns require positive source values. The indicator remains unavailable when the active window contains invalid or non-positive source observations.
Core calculation
For every active window, the script:
Stores the return observations chronologically.
Assigns average Wilcoxon ranks to equal observations.
Assigns average Ansari–Bradley center-weighted scores to equal observations.
Tests every split that leaves at least the selected Minimum segment size on both sides.
Standardizes the location and scale score sums at each split.
Calculates the Lepage statistic:
L = Z_location² + Z_scale²
Selects the split with the highest Lepage statistic.
Calculates the fixed-split asymptotic p-value:
p_fixed ≈ exp(−L / 2)
Applies a conservative Bonferroni correction for all admissible splits:
p_scan = min(1, Number of tested splits × p_fixed)
Uses medians and median absolute deviations to classify the type and practical size of the detected change.
The scan correction is important because selecting the strongest result from many candidate splits would otherwise make the displayed p-value too optimistic.
Understanding the components
Location Z
The location component is displayed with an intuitive directional sign:
Location Z > 0: the later segment shifted upward.
Location Z < 0: the later segment shifted downward.
A larger absolute value represents stronger rank-based location evidence.
Scale Z
The scale component describes the change in return dispersion:
Scale Z > 0: the later segment became more dispersed.
Scale Z < 0: the later segment became less dispersed.
A larger absolute value represents stronger rank-based scale evidence.
The combined statistic squares both components, so the p-value measures the strength of the overall break. The signs are used to interpret its direction.
Color system
Color or marker
Interpretation
Green — LEVEL +
Confirmed positive location shift without a qualifying scale shift
Red — LEVEL −
Confirmed negative location shift without a qualifying scale shift
Purple — VOL +
Confirmed scale expansion without a qualifying location shift
Blue — VOL −
Confirmed scale compression without a qualifying location shift
Orange — MIXED
Confirmed location and scale shift occurring together
Yellow — ?
Possible break with incomplete statistical confirmation
Gray
No currently actionable break
A volatility expansion is not automatically bearish, and a volatility compression is not automatically bullish. These states describe dispersion, not market direction.
The orange mixed state does not encode direction by itself. Use Median Shift and MAD Scale Shift in the dashboard to determine whether the mixed change combines an upward or downward level shift with expansion or compression.
Confidence line
The main line is calculated as:
Scan-adjusted confidence = 100 × (1 − p_scan)
The default boundaries are:
95: confirmed statistical zone when the confirmed p-value is 0.05.
85: possible statistical zone when the possible-break p-value is 0.15.
The line color reflects the currently classified regime.
Important: this confidence value is not the probability that price will rise, the probability that a trade will be profitable, a win rate, or a forecast-accuracy score.
Confirmation logic
A confirmed regime requires all of the following:
The scan-adjusted p-value is less than or equal to Confirmed scan p-value.
The estimated break is no older than Maximum actionable break age.
At least one component passes its practical-effect threshold.
The contributing component also passes Minimum component Z.
Positive or negative location shift
The robust location effect reaches Minimum location shift.
The absolute Location Z reaches Minimum component Z.
The scale component does not independently pass all its confirmation filters.
The sign of the median shift determines positive or negative classification.
Scale expansion or compression
The symmetric MAD scale-ratio change reaches Minimum scale-ratio change.
The absolute Scale Z reaches Minimum component Z.
The location component does not independently pass all its confirmation filters.
The MAD ratio determines expansion or compression.
Mixed break
Both the location and scale components pass their effect-size and component-Z filters.
Possible break
The scan-adjusted p-value is above the confirmed threshold but no higher than the possible-break threshold. At least one component must also reach half of its normal effect-size and component-Z requirements.
Dashboard
Dashboard field
Meaning
Lepage State
Current regime classification
Scan-Adj P
Bonferroni-adjusted approximate p-value for the split scan
Break Age
Estimated number of bars since the selected split
Location Z
Directional standardized Wilcoxon component
Scale Z
Directional standardized Ansari–Bradley component
Median Shift
Post-break median return minus pre-break median return, in percentage points
Location Effect
Median shift divided by a robust sigma estimate
MAD Scale Shift
Conventional percentage change from pre-break MAD to post-break MAD
Additional dashboard states include:
FILTERED BREAK: the combined statistic is significant and recent, but neither component passes all practical-effect and Z filters.
OLD BREAK: the combined statistic remains significant inside the window, but the estimated split is older than Maximum actionable break age.
STABLE REGIME: no currently actionable or possible break.
Input guide
1. Observations
Price sourceSeries used to calculate logarithmic returns. Close is the standard setting.
Log-return horizonNumber of bars covered by each return observation. Lower values react to short moves. Higher values emphasize slower market behavior but create more overlap between consecutive observations.
Lepage windowNumber of return observations in each rolling test. Short windows react faster but are noisier. Long windows are more stable but respond later.
Minimum segment sizeMinimum number of observations required before and after every candidate split. Increasing it reduces unstable edge detections but prevents the test from selecting extremely recent breaks.
2. Validation
Confirmed scan p-valueMaximum adjusted p-value for confirmation. The default is 0.05. Lower values produce fewer and more selective events.
Possible-break scan p-valueMaximum adjusted p-value for the yellow early-warning state. The default is 0.15.
Maximum actionable break ageMaximum number of bars allowed between the estimated split and the current bar.
Minimum location shiftMinimum median shift measured in robust sigma units. The robust sigma is 1.4826 × window MAD, with standard deviation used as a fallback when necessary.
Minimum scale-ratio change (%)Minimum symmetric difference between pre-break and post-break MAD. Symmetric measurement treats a doubling and a halving of scale as equally large changes for filtering purposes.
Minimum component ZPrevents a regime label from being attributed to a component that contributed too little to the combined Lepage statistic. The default is 1.00.
Confirm signals at bar closeWhen enabled, new markers and alert events are confirmed only when the current bar closes. This is the recommended setting.
3. Display
These settings independently control regime backgrounds, confirmed labels, possible-break markers, and the dashboard.
Suggested starting profiles
Use case
Return horizon
Window
Minimum segment
Maximum age
Location effect
Scale change
Component Z
General swing trading
5
60
10
10
0.25
25%
1.00
Faster monitoring
3
50
8
7
0.30
30%
1.25
Slower regime analysis
10
90
15
15
0.35
30%
1.00
These profiles are starting points, not optimized trading parameters. Test settings across different assets and unseen market periods.
Interpretation examples
Green location event
Suppose the dashboard shows:
Scan-adjusted p-value: 0.03
Break age: 6
Median shift: +0.80 pp
Location effect: +0.55 sigma
MAD scale shift: +10%
The evidence supports a recent upward change in the central return level, while the scale change remains below its filter.
Purple volatility-expansion event
Suppose the location effect is small, but post-break MAD is 60% higher, Scale Z is strongly positive, and the adjusted p-value is below 0.05. The indicator classifies a volatility expansion. Market direction must be determined separately.
Orange mixed event
If both median returns and dispersion change materially, the indicator displays MIXED. A positive Median Shift with a positive MAD Scale Shift represents improving returns accompanied by expanding volatility. A negative Median Shift with expanding volatility can represent a more hostile risk regime.
Practical workflow
Use ordinary candlesticks on a liquid instrument.
Keep Confirm signals at bar close enabled.
Treat yellow as an observation state rather than an entry instruction.
When a confirmed event appears, inspect Location Z, Scale Z, Median Shift, and MAD Scale Shift.
Confirm the interpretation with price structure, volume, liquidity, and higher-timeframe context.
Define entry, invalidation, position sizing, and exit rules independently.
The indicator is particularly useful as a regime filter. For example, a trend strategy may be treated differently during purple volatility expansion than during blue volatility compression.
Alerts
Six alert conditions are available:
Lepage — Possible break
Lepage — Positive level shift
Lepage — Negative level shift
Lepage — Volatility expansion
Lepage — Volatility compression
Lepage — Mixed regime break
A confirmed alert fires when a qualifying state first appears, when the confirmed regime type changes, or when the estimated split resets to a more recent point. A possible alert follows equivalent first-appearance and break-reset logic.
When bar-close confirmation is enabled, configure TradingView alerts as Once Per Bar Close.
Repainting and event timing
The script does not use future data, lookahead, or a negative plot offset. It places a marker on the bar where the break is detected and never moves that marker backward to the estimated historical split.
However, the estimator is rolling. As a new bar enters the window and an old bar leaves it, the selected split, component scores, p-value, break age, and current state can change. Values can also fluctuate on an open real-time bar. Bar-close confirmation prevents provisional intrabar markers from being treated as confirmed events.
Historical events are calculated only from information available on their respective bars.
Statistical limitations
The fixed-split chi-square p-value is asymptotic rather than exact.
Bonferroni correction is conservative because the candidate splits are dependent.
The correction covers the splits inside one window, not repeated testing across every bar in the chart.
Consecutive multi-bar returns overlap and are not independent. The adjusted p-value should therefore be interpreted as comparative evidence rather than a perfectly calibrated probability.
The classical Lepage components are most naturally interpreted as location and scale tests under regular distributional conditions. Strong skew changes or complex distribution changes can affect both components.
The detector selects one dominant split per rolling window. Multiple rapid changes can interfere with one another.
A statistically significant regime change does not guarantee persistence, directional continuation, or trading profitability.
Median absolute deviation can be close to zero on discrete or insufficiently variable data. The script uses a small numerical floor, but scale percentages can still become unusually large.
Results on Heikin Ashi, Renko, Range, Kagi, Point & Figure, or other synthetic charts describe transformed data rather than ordinary traded prices.
Always evaluate the indicator on unseen data and combine it with independent risk controls.
Data Window outputs
The script exposes:
State code.
Scan-adjusted p-value.
Estimated break age.
Location Z component.
Scale Z component.
Median shift in percentage points.
Robust location effect.
MAD scale change percentage.
Lepage statistic.
State codes are:
Code
State
4
Mixed location-scale break
3
Scale expansion
2
Positive location shift
1
Possible break
0
Stable, filtered, or old break
−2
Negative location shift
−3
Scale compression
TradingView publication metadata
Primary category: Oscillators
Secondary category: Trend Analysis
Suggested tags: Lepage Test, Change Point, Regime Detection, Statistics, Non-Parametric, Volatility, Structural Break
References
Y. Lepage, “A Combination of Wilcoxon's and Ansari-Bradley's Statistics,” Biometrika, 1971.
F. Rublík, “The Multisample Version of the Lepage Test,” Kybernetika, Vol. 41, No. 6, 2005, pp. 713–733: paper.
G. J. Ross, D. K. Tasoulis and N. M. Adams, “Nonparametric Monitoring of Data Streams for Changes in Location and Scale,” Technometrics, Vol. 53, No. 4, 2011, pp. 379–389: DOI.
H. Murakami, “A Nonparametric Location–Scale Statistic for Detecting a Change Point,” The International Journal of Advanced Manufacturing Technology, Vol. 61, 2012, pp. 449–455: DOI.
Disclaimer
This indicator is provided for research and educational purposes. It does not constitute investment advice, a recommendation, or a guarantee of future performance. Trading involves risk, including the possible loss of capital. Indicator

Target Trend ProEnhanced trend-following tool with automated entry signals, stop loss, three profit targets, filters, and live dashboard.
🎯 Target Trend Pro
An enhanced and expanded version of the original Target Trend concept by BigBeluga.
This indicator helps traders identify trend direction and manage trades visually with clear entry signals, stop loss, and three customizable take-profit levels — all displayed directly on the chart.
══════════════════════════════════════
🔵 KEY FEATURES
══════════════════════════════════════
• Adaptive SMA ± ATR bands for trend detection
• Automatic Long / Short entry triangles
• Three fixed Take Profit levels (ATR-based)
• Dynamic or fixed Stop Loss (with optional trailing)
• Live Dashboard showing:
- Entry, SL, TP1/TP2/TP3 with distance %
- Risk:Reward ratio
- ADX status
- Bars in trade
- Current trade status
• Filters:
- ADX Filter
- Higher Timeframe confirmation
- Volume Filter
• Clean visual management (lines, labels, fills)
• Full alert support (Entry + TP hits + SL hit)
══════════════════════════════════════
🔵 HOW IT WORKS
══════════════════════════════════════
1. Trend is detected when price crosses the adaptive SMA bands.
2. On a confirmed trend change, the indicator plots:
- Entry level
- Stop Loss
- Three Take Profit targets
3. Targets are calculated using ATR at the moment of the signal (fixed).
4. The dashboard updates in real time with trade progress.
5. Optional filters help reduce low-quality signals.
══════════════════════════════════════
🔵 SETTINGS OVERVIEW
══════════════════════════════════════
• Trend Length & ATR settings → Control sensitivity
• TP1 / TP2 / TP3 Multipliers → Customize target distances
• Trailing Stop → Optional dynamic stop loss
• ADX / HTF / Volume filters → Improve signal quality
• Display options → Dashboard position, line extension, etc.
══════════════════════════════════════
🔵 CREDITS
══════════════════════════════════════
Original concept: Target Trend by BigBeluga
This version is a heavily enhanced and expanded modification released for free under the same Creative Commons Attribution-NonCommercial-ShareAlike 4.0 license.
Please keep credits if you share or modify this script.
══════════════════════════════════════
⚠️ DISCLAIMER
══════════════════════════════════════
This indicator is for educational and informational purposes only.
It does not constitute financial advice. Always do your own research and manage risk properly. Indicator

BABEL PRECISION BOTBABEL PRECISION BOT v2 — A+ EDITION is an advanced TradingView 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

Equalhigh - Pettitt Structural Break DetectorEqualhigh — Pettitt Structural Break Detector
User Manual
Overview
The Equalhigh Pettitt Structural Break Detector is a statistical regime-change indicator for TradingView. It is designed to identify a recent change in the distribution of price returns rather than a conventional overbought, oversold, or moving-average condition.
The indicator applies a rolling version of Pettitt's non-parametric change-point test to logarithmic price returns. It estimates the most likely break location inside the active window, evaluates its statistical significance, measures the direction and size of the median shift, and filters out changes that are too old or too small to be considered actionable.
This is a diagnostic indicator, not an automatic trading system. Its purpose is to answer:
Has the recent return regime changed materially, in which direction, and with what level of statistical evidence?
Core calculation
The observation tested on each bar is the multi-bar logarithmic return:
100 × ln(Source / Source )
Inside the selected Pettitt window, the indicator:
Orders the observations chronologically.
Assigns non-parametric ranks, using average ranks for equal values.
Tests every admissible split while preserving the minimum segment size on both sides.
Selects the split with the largest absolute Pettitt statistic.
Calculates the approximate two-sided p-value:
p ≈ min(1, 2 × exp(-6K² / (n³ + n²)))
Compares the median return before and after the estimated break.
Standardizes the median shift by the rolling standard deviation.
Rejects breaks that are too old or have an insufficient effect size.
The test is non-parametric: it relies on ranks and does not require returns to follow a normal distribution.
Reading the indicator
The main line is a signed statistical-confidence display ranging from approximately -100 to +100.
Display
Meaning
Green
Recent, statistically confirmed upward shift in the return distribution
Red
Recent, statistically confirmed downward shift in the return distribution
Orange
Possible break; evidence is developing but does not yet meet the confirmed threshold
Gray
No currently actionable structural break
BULL label
A new confirmed upward structural-break event
BEAR label
A new confirmed downward structural-break event
Orange ?
A new possible upward or downward break
A positive reading means that the post-break median return is higher than the pre-break median. A negative reading means it is lower.
Important: a bullish break does not necessarily mean that returns are already positive. A change from strongly negative returns to mildly negative returns is an upward structural shift and can therefore be classified as bullish. Price structure should still be checked separately.
The displayed confidence is calculated as 100 × (1 − p-value). It is not the probability that a trade will be profitable, the probability that price will rise, or a forecast accuracy score.
Confirmation rules
A confirmed break requires all of the following:
The approximate p-value is less than or equal to the Confirmed p-value setting.
The estimated break age does not exceed the Maximum actionable break age.
The absolute median-shift effect reaches the Minimum median-shift effect.
The post-break median is different from the pre-break median.
A possible break requires:
A p-value above the confirmed threshold but no higher than the Possible-break p-value.
A recent estimated break.
At least half of the selected minimum effect size.
Dashboard
The statistical dashboard provides five fields:
Field
Interpretation
Pettitt State
Current classification: stable, possible break, confirmed break, or old break
P Value Approx
Approximate probability of observing a Pettitt statistic at least this extreme under the no-change hypothesis
Break Age
Estimated number of bars since the detected split
Median Shift
Post-break median return minus pre-break median return, in percentage points
Effect Size
Median shift divided by the rolling standard deviation of the tested returns
An OLD BREAK state means that statistically significant evidence remains inside the window, but the estimated change point is older than the selected actionable-age limit.
Inputs
1. Observations
Price sourceSelects the series used in the logarithmic-return calculation. Close is the standard choice.
Log-return horizonDefines the number of bars used for each return observation. A higher value focuses on slower moves but creates more overlap between consecutive observations.
Pettitt windowDefines the number of observations included in each rolling test. Short windows react faster but are noisier. Long windows are more stable but detect changes later.
Minimum segment sizePrevents the estimated split from being placed too close to either edge of the window. Larger values reduce unstable edge detections but also delay recognition of very recent changes.
2. Validation
Confirmed p-valueMaximum approximate p-value for a confirmed break. 0.05 is the default. Lower values are more selective.
Possible-break p-valueMaximum p-value for the orange early-warning state. 0.15 is the default.
Maximum actionable break ageMaximum number of bars allowed between the estimated break and the current bar. This prevents an old statistical event from being treated as a fresh signal.
Minimum median-shift effectMinimum absolute standardized median shift required for confirmation. 0.25 means that the shift must represent at least one quarter of the rolling return standard deviation.
Confirm signals at bar closeWhen enabled, new labels and alert events are confirmed only after the current bar closes. This is the recommended setting.
3. Display
These controls independently enable the regime background, confirmed labels, possible-break markers, and statistical dashboard.
Suggested starting profiles
Use case
Return horizon
Window
Minimum segment
Maximum age
Minimum effect
General swing trading
5
60
10
10
0.25
Faster market monitoring
3
50
8
7
0.30
Slower regime analysis
10
90
15
15
0.35
These are starting points, not optimized trading parameters. Settings should be tested across different symbols and market regimes without selecting them solely from the best historical result.
Practical workflow
Use a liquid instrument and ordinary candlestick data.
Keep bar-close confirmation enabled.
Treat orange as an observation state, not an entry instruction.
When a confirmed label appears, check whether price structure, volume, volatility, and the higher-timeframe context support the same interpretation.
Use the p-value, effect size, and break age together. A small p-value alone does not guarantee a useful trade.
Define entry, invalidation, position size, and exit rules independently.
For example, a green event with p = 0.02, a break age of 6 bars, and an effect size of +0.60 sigma represents a recent and statistically meaningful upward shift. It becomes more useful if price has also reclaimed an important level or broken a declining structure.
Alerts
Four alert conditions are available:
Pettitt — Possible bullish break
Pettitt — Possible bearish break
Pettitt — Bullish structural break
Pettitt — Bearish structural break
Alerts fire when a qualifying state first appears or when the estimated break resets to a more recent point while the same directional condition remains active. With bar-close confirmation enabled, alerts should be configured Once Per Bar Close.
Repainting and timing
The script does not use future data, lookahead, or a negative plot offset. A signal is displayed on the bar where the break is detected; it is not placed retrospectively on the estimated historical change point.
However, this is a rolling estimator. As new bars enter the window, the most likely split, p-value, break age, and state can change. On a live unclosed bar, values can also move with price. Enabling Confirm signals at bar close prevents provisional intrabar labels from being treated as confirmed events.
Limitations
Pettitt's test identifies the dominant single change point inside the active window. Multiple rapid regime changes can interfere with one another.
The p-value is an approximation, not an exact posterior probability.
Consecutive multi-bar returns overlap and are therefore not independent. This makes the p-value best treated as comparative statistical evidence rather than a perfectly calibrated probability.
A statistically significant distribution shift does not guarantee trend continuation or trading profitability.
Outliers are less influential than in many mean-based tests, but they can still affect the detected split and the rolling volatility denominator.
Very short windows are noisy; very long windows can react too slowly.
Logarithmic returns require positive source values. The test remains unavailable when the selected source contains invalid or non-positive observations inside the active window.
Results on Heikin Ashi, Renko, Range, Kagi, or other synthetic chart types describe the transformed data rather than standard traded prices.
Always evaluate the indicator on unseen data and combine it with independent risk controls.
Data Window outputs
The script exposes the following values for inspection and alert integration:
State code: +2 confirmed bullish, +1 possible bullish, 0 stable, −1 possible bearish, −2 confirmed bearish.
Approximate p-value.
Estimated break age.
Median shift in percentage points.
Median-shift effect size.
Pettitt K statistic.
Reference
A. N. Pettitt, “A Non-Parametric Approach to the Change-Point Problem,” Journal of the Royal Statistical Society: Series C (Applied Statistics), Vol. 28, No. 2, 1979, pp. 126–135. DOI: 10.2307/2346729.
Disclaimer
This indicator is provided for research and educational purposes. It does not constitute investment advice, a recommendation, or a guarantee of future performance. Trading involves risk, including the possible loss of capital. Indicator

Indicator

PDH / PDL / ONH / ONL (CST)PDH / PDL / ONH / ONL — Chicago Session Levels
Marks the four key reference levels traders watch each session, calculated in Chicago (CST/CDT) time:
PDH / PDL — the high and low of the previous Regular Trading Hours session (default 08:30–16:00 CT)
ONH / ONL — the high and low of the overnight range, from the prior RTH close to the pre-market cutoff (default 16:00–08:25 CT)
Each level is finalized when its session closes and extends to the right until the next session produces a new one.
Features
Fully customizable session windows and time zone — set it to any market you trade
Independent color, line style (solid/dashed/dotted), and width for each of the four levels
Optional lines anchored at the wick that created the extreme, so you can see exactly which candle produced the level
Vertical session dividers at day start and day end, with their own colors, styles, and history limit
Price labels that follow the right edge of the chart
Option to keep prior days' levels on screen as fixed segments
Built-in alerts for crosses above PDH/ONH and below PDL/ONL
How to use
Apply on an intraday timeframe — 5-minute or lower gives the most accurate overnight extremes. Enable "Extended Trading Hours" in your chart settings so overnight data is available. These levels commonly act as support/resistance, liquidity targets, and breakout reference points at the open.
This indicator is a visualization tool, not a trading signal. Test on your own instruments and timeframes before relying on it. Indicator

Indicator

Indicator

ROIC vs WACC (Value Creation)The Recommended Timeframe This indicator must be used on a Daily (1D) timeframe.
There are two primary reasons for this:
The Beta Calculation: The script calculates the stock's volatility (Beta) against the S&P 500 using a default 252-bar lookback. There are roughly 252 trading days in a year. If you drop to a 1-hour chart, the script will calculate Beta over the last 252 hours, which completely breaks the Capital Asset Pricing Model (CAPM) math used to find the Cost of Equity.
Fundamental Data Frequency: Corporate financial data (like debt, tax rates, and ROIC) is only reported quarterly. Viewing this on an intraday chart provides no extra data and just wastes computing resources.
How the Indicator Works At its core, this indicator visualizes the most important rule in corporate finance: A company only creates true wealth for shareholders if its Return on Invested Capital (ROIC) is higher than its Weighted Average Cost of Capital (WACC).
If a company borrows money at 8% (WACC) to fund projects that only return 5% (ROIC), it is destroying value, even if its total revenue is growing.
Here is how the script breaks that down visually on your chart:
The Blue Line (ROIC) What it is: Return on Invested Capital. It measures how efficiently a company turns debt and equity into profit.
How it behaves: Because this data is pulled directly from the company's financial statements (Form 10-K or 10-Q), the line will look like a "staircase." It remains flat until a new earnings report is released, at which point it steps up or down.
The Orange Line (WACC) What it is: Weighted Average Cost of Capital. This is the "hurdle rate" the company must beat. It blends the cost of the company's debt (interest payments) and the cost of its equity (what shareholders expect to earn given the stock's risk).
How it behaves: Unlike ROIC, this line wiggles and waves every single day. This is because the script actively calculates WACC using live market data:
It checks the real-time US 10-Year Treasury yield to find the risk-free rate.
It calculates a live Beta to measure the stock's daily risk against the S&P 500.
It uses the live stock price to calculate the Market Cap, constantly shifting the weight between debt and equity.
The Histogram (Economic Spread) What it is: The visual difference between the Blue Line and the Orange Line (ROIC - WACC).
How to read it:
Teal Bars (Above Zero): The company is a Value Creator. It is earning more on its capital than that capital costs to acquire. These are typically high-quality businesses with strong competitive moats.
Red Bars (Below Zero): The company is a Value Destroyer. Its cost of funding is dragging down its actual returns.
A Note on the "Manual" Setting Because WACC relies heavily on a stock's historical volatility (Beta), extremely volatile tech stocks (like heavily shorted meme stocks) or highly leveraged Real Estate Investment Trusts (REITs) can temporarily cause the math to spit out absurd WACC numbers (like 40% or 50%).
If you are looking at an unusual stock and the Orange line looks broken, you can open the indicator settings and change the WACC Mode from "Estimated" to "Manual". This will lock the Orange line at a flat, sensible hurdle rate (default 8%) so you can still measure the company's ROIC against a standard benchmark. Indicator

Indicator

Indicator

Indicator

Indicator

Indicator

Equalhigh - GAPO Easy ModeEQUALHIGH - GAPO EASY MODE
OVERVIEW
GAPO Easy Mode is a volatility-regime indicator based on the Gopalakrishnan Range Index developed by Jayanthi Gopalakrishnan.
Its purpose is not to predict market direction. It identifies:
• Volatility compression
• Volatility expansion
• Possible bullish or bearish releases
• Donchian breakouts occurring shortly after compression
The original GAPO value is converted into a rolling percentile from 0 to 100. This makes the indicator easier to interpret across different market periods.
CALCULATION
The original Gopalakrishnan Range Index is:
GAPO = ln(Highest High − Lowest Low) / ln(Period)
The highest high and lowest low are calculated over the selected GAPO period.
Because the original GAPO depends on the asset’s price scale, this script calculates its percentile rank over a user-defined historical window.
• A low percentile indicates an unusually narrow price range.
• A rising percentile indicates that the range is expanding.
• A high percentile indicates unusually elevated variability.
DEFAULT SETTINGS
• GAPO period: 14 bars
• Percentile lookback: 252 bars
• Compression threshold: 20
• High variability threshold: 80
• Expansion confirmation: 2 rising bars
• Donchian breakout period: 20 bars
• Activation window: 15 bars
• Direction filter: EMA 50
• Signal confirmation: Bar close
COLOR INTERPRETATION
BLUE — COMPRESSION
The GAPO percentile is at or below the compression threshold.
The market’s recent price range is unusually narrow compared with its own history. This does not provide a directional signal. It indicates that traders should prepare for a possible volatility release.
GRAY — NEUTRAL
No meaningful compression or confirmed expansion is currently detected.
GREEN — BULLISH RELEASE
The following conditions are present:
• A compression occurred recently
• The GAPO percentile is rising
• The percentile is above the compression threshold
• Price is above the direction-filter EMA
This indicates expanding volatility with a bullish directional bias. It is not necessarily a confirmed breakout.
RED — BEARISH RELEASE
The following conditions are present:
• A compression occurred recently
• The GAPO percentile is rising
• The percentile is above the compression threshold
• Price is below the direction-filter EMA
This indicates expanding volatility with a bearish directional bias.
ORANGE — HIGH VARIABILITY
The GAPO percentile is at or above the high-variability threshold.
The current range is unusually wide compared with the historical reference period. This can occur during a strong trend or an erratic market.
A high percentile is not automatically a reversal signal.
DASHBOARD
The dashboard displays three items.
GAPO STATE
Possible states include:
• COMPRESSION
• NEUTRAL
• BULLISH RELEASE
• BEARISH RELEASE
• BULL BREAKOUT
• BEAR BREAKOUT
• HIGH VARIABILITY
PERCENTILE
Shows the current GAPO percentile between 0 and 100.
BREAKOUT ARMED
• YES: A compression occurred within the activation window.
• NO: No sufficiently recent compression is available to validate a breakout signal.
BREAKOUT SIGNALS
BUY SIGNAL
A BUY label appears when:
1. A GAPO compression occurred within the activation window.
2. The GAPO percentile has moved above the compression threshold.
3. The percentile has risen for the required number of bars.
4. Price closes above the previous Donchian high.
The current bar is excluded from the Donchian boundary calculation. This ensures that the current close genuinely breaks the previous price range.
SELL SIGNAL
A SELL label appears when:
1. A recent GAPO compression is available.
2. The GAPO percentile is expanding.
3. Price closes below the previous Donchian low.
The EMA determines the directional color of a volatility release. It is not required for the BUY or SELL breakout calculation itself.
PRACTICAL WORKFLOW
1. WAIT FOR BLUE
A blue GAPO line identifies volatility compression. Do not assume the next move will be bullish.
2. CHECK “BREAKOUT ARMED”
The dashboard should display YES. This confirms that a qualifying compression occurred recently.
3. WATCH FOR VOLATILITY RELEASE
The GAPO percentile should leave the compression zone and begin rising.
• Green indicates bullish expansion.
• Red indicates bearish expansion.
4. REQUIRE PRICE CONFIRMATION
For stronger confirmation, wait for a BUY or SELL label generated by the Donchian breakout.
5. CONTROL RISK
Use price structure, ATR or another risk-management method to determine the stop.
The indicator does not calculate position size or guarantee that a breakout will continue.
EXAMPLE OF A BULLISH SETUP
• GAPO percentile falls below 20
• Dashboard displays COMPRESSION
• Breakout Armed displays YES
• GAPO begins rising above 20
• Price remains above EMA 50
• The line becomes green
• Price closes above the previous 20-bar high
• A BUY label appears
EXAMPLE OF A BEARISH SETUP
• GAPO enters compression
• The percentile subsequently begins rising
• Price is below EMA 50
• The line becomes red
• Price closes below the previous 20-bar low
• A SELL label appears
ALERTS
Five TradingView alert conditions are included:
• GAPO - New compression
• GAPO - Bullish release
• GAPO - Bearish release
• GAPO - Bullish breakout
• GAPO - Bearish breakout
For more stable signals, configure TradingView alerts as “Once Per Bar Close.”
SETTINGS
GAPO PERIOD
Controls the number of bars used to calculate the highest high and lowest low.
A shorter period reacts faster but produces more noise. The default value is 14.
PERCENTILE LOOKBACK
Defines the historical window used to determine whether the current GAPO is relatively low or high.
The default value of 252 corresponds approximately to one trading year on a daily chart.
COMPRESSION THRESHOLD
Determines when the market is classified as compressed.
The default value is the 20th percentile.
HIGH VARIABILITY THRESHOLD
Determines when the market’s range is considered historically elevated.
The default value is the 80th percentile.
RISING BARS REQUIRED
Defines how many consecutive rising percentile readings are required to confirm volatility expansion.
A higher value reduces noise but delays detection.
DONCHIAN BREAKOUT PERIOD
Defines the price range that must be broken to generate a BUY or SELL signal.
The default setting is 20 bars.
MAXIMUM BARS AFTER COMPRESSION
Defines how long a compression can remain valid for a subsequent breakout.
After this window expires, Breakout Armed returns to NO.
DIRECTION FILTER EMA
Determines whether an expansion is classified as bullish or bearish.
• Price above the EMA: bullish bias
• Price below the EMA: bearish bias
CONFIRM SIGNALS AT BAR CLOSE
When enabled, signals are confirmed only after the current candle closes. This reduces temporary intrabar signals.
SUGGESTED TIMEFRAMES
For swing trading:
• Daily chart: use the default settings
• Four-hour chart: defaults can be used as a starting point
• Weekly chart: consider increasing the activation window
The periods always represent chart bars, not calendar days.
DATA REQUIREMENTS
The percentile requires sufficient historical data.
With a 14-bar GAPO and a 252-bar percentile lookback, approximately 265 chart bars may be required before the normalized indicator becomes available.
Newly listed securities may therefore show no value until enough history exists. Reducing the percentile lookback can produce earlier readings, but the statistical reference will be less robust.
NON-REPAINTING BEHAVIOR
The indicator uses only current and historical price data. It does not use future bars.
The GAPO line and dashboard can change while the current candle is forming. When bar-close confirmation is enabled, completed BUY and SELL signals remain fixed after the candle closes.
LIMITATIONS
GAPO measures range variability, not market direction.
It does not directly account for:
• Trading volume
• Fundamental information
• Earnings announcements
• Market liquidity
• Transaction costs
• Position sizing
• Broader market conditions
Corporate actions, large gaps and exceptional price events can temporarily distort the rolling range.
Compression does not guarantee a breakout, and a breakout can still fail. GAPO Easy Mode should be combined with price structure and disciplined risk management.
DISCLAIMER
This indicator is provided for educational and analytical purposes only. It does not constitute financial advice or a recommendation to buy or sell any financial instrument. Past performance does not guarantee future results.
Indicator

Kloom Turtle System - Donchian Breakout with Trend FilterClassic Turtle-style Donchian breakout system with an explicit, non-repainting state engine.
How it works
• Entry channel: highest high / lowest low of the last 20 bars (Donchian). A break of the previous bar's channel triggers a long/short state — signals only fire on confirmed breaks, so nothing repaints.
• Exit channel: 10-bar Donchian on the opposite side, the classic Turtle S1 exit.
• Optional 200 EMA trend filter: longs only above it, shorts only below it.
• A state table shows the current system state (LONG / SHORT / FLAT) at a glance, and exit levels are drawn continuously so you always know where the system would flip.
How to use it
Works on any symbol and timeframe. Behaves best on markets that actually trend (crypto majors, gold, indices) on 1h-4h. Entry/exit lengths, the trend filter and its length are all configurable.
Why another Donchian script
Most Donchian scripts plot the channel and stop there. Here the position state is tracked bar by bar, exits are always visible, and the breakout reference is the previous bar's channel — the detail that keeps historical signals honest. Indicator

V6 ORB Retest NY Session// ORB Retest — NY Session (MNQ)
// Live companion to the walk-forward-validated strategy in orb_retest.py.
//
// Draws and alerts only. It never places an order.
//
// DESIGNED FOR A 5-MINUTE CHART. The strategy was validated on 5-minute bars;
// on any other timeframe the breakout/retest granularity differs from what was
// tested, so the panel shows a warning.
//
// Session times are pinned to America/New_York, so the 9:30 ET open is located
// correctly no matter what timezone your chart displays, and DST is handled
// automatically. No chart timezone change needed.
//
// Install: TradingView -> Pine Editor -> paste -> Save -> Add to chart.
//@version=6
indicator("ORB Retest — NY Session", "ORB Retest", overlay = true,
max_boxes_count = 500, max_lines_count = 500, max_labels_count = 500)
// ───────────────────────── Inputs ─────────────────────────
grpS = "Session (always New York time)"
orSessionInput = input.session("0930-0945", "Opening range window", group = grpS, display = display.none)
tradeSessionInput = input.session("0930-1555", "Trading session (flat at end)", group = grpS, display = display.none)
cutoffInput = input.session("0930-1200", "Breakout must occur before", group = grpS, display = display.none)
grpR = "Trade rules"
targetR = input.float(2.5, "Target (multiple of risk)", minval = 0.5, step = 0.5, group = grpR,
tooltip = "2.5R tested best across both 2019-2026 and 2023-onward: target is hit on 48% of trades vs 38% at 3R, win rate 58% vs 52%, slightly more total profit and a smaller drawdown.",
display = display.none)
stopBufTicks = input.int(4, "Stop buffer beyond retest extreme (ticks)", minval = 0, group = grpR, display = display.none)
touchTolTicks = input.int(2, "Retest touch tolerance (ticks)", minval = 0, group = grpR, display = display.none)
invalTicks = input.int(4, "Invalidation buffer past level (ticks)", minval = 0, group = grpR, display = display.none)
retestDeadlineM = input.int(60, "Cancel if no retest within (minutes)", minval = 5, group = grpR, display = display.none)
maxRiskPts = input.float(0, "Skip if risk exceeds (points, 0 = no limit)", minval = 0, group = grpR,
tooltip = "Off by default. On a 5-minute chart a 40-point cap improved results (+0.72R to +0.80R, drawdown roughly halved). On a 15-minute chart stops are naturally wider and the same cap removes too many good trades, so leave it at 0 there.",
display = display.none)
grpF = "Day filter"
useRangeFilter = input.bool(true, "Skip days with unusual opening-range width", group = grpF, display = display.none)
rangeLookback = input.int(20, "Lookback (days)", minval = 5, group = grpF, display = display.none)
rangeMinMult = input.float(0.5, "Minimum multiple of average", step = 0.1, group = grpF, display = display.none)
rangeMaxMult = input.float(2.0, "Maximum multiple of average", step = 0.1, group = grpF, display = display.none)
grpV = "Display"
drawSessionInput = input.session("0930-1230", "Extend drawings during (NY time)", group = grpV,
tooltip = "Boxes and lines grow only inside this window, then freeze. Default = first 3 hours of the NY session, so old days stay compact.",
display = display.none)
keepDays = input.int(120, "Keep drawings for last N days", minval = 1, maxval = 250, group = grpV,
tooltip = "TradingView caps an indicator at 500 drawings per type; at 4 lines per traded day that is roughly 125 days of full markup. Beyond the cap the oldest drawings drop off automatically.",
display = display.none)
pointValue = input.float(2.0, "Contract $ per point (MNQ = 2)", minval = 0.01, group = grpV, display = display.none)
showPanel = input.bool(true, "Show status panel", group = grpV, display = display.none)
showBox = input.bool(true, "Opening range box", group = grpV, display = display.none)
showLevels = input.bool(true, "Entry / stop / target lines", group = grpV, display = display.none)
showMarkers = input.bool(true, "Signal markers", group = grpV, display = display.none)
showLabels = input.bool(true, "Outcome labels", group = grpV, display = display.none)
showLegend = input.bool(true, "Show symbol legend (bottom-left)", group = grpV, display = display.none)
TZ = "America/New_York"
// ───────────────────── Session detection ─────────────────────
inOR = not na(time(timeframe.period, orSessionInput, TZ))
inTrade = not na(time(timeframe.period, tradeSessionInput, TZ))
beforeCut = not na(time(timeframe.period, cutoffInput, TZ))
inDraw = not na(time(timeframe.period, drawSessionInput, TZ))
orStart = inOR and not inOR
orEnd = not inOR and inOR
tradeEnd = not inTrade and inTrade
tick = syminfo.mintick
isFiveMin = timeframe.isminutes and timeframe.multiplier == 5
// Live-chart safety: every decision waits for the bar to CLOSE, exactly like
// the backtest. On the streaming realtime bar nothing updates until it
// confirms, so signals never appear and then vanish mid-bar (no repainting).
confirmed = barstate.isconfirmed
// ───────────────────────── State ─────────────────────────
// 0 = waiting for breakout, 1 = waiting for retest, 2 = in trade, 3 = done today
var int state = 0
var int armedDir = 0
var int armTime = na
var float orH = na
var float orL = na
var float orRange = na
var bool orReady = false
var bool dayEligible = false
var float retestExtreme = na
var float entryPrice = na
var float stopPrice = na
var float targetPrice = na
var float riskPts = na
var string outcome = "—"
var array orHistory = array.new_float()
// Drawing handles for the current day
var box orBox = na
var line levelLine = na
var line entryLine = na
var line stopLine = na
var line targetLine = na
// Rolling registry so old days' drawings get cleaned up instead of piling up.
var array boxReg = array.new()
var array lineReg = array.new()
var array labelReg = array.new()
// Signal flags at global scope so plotshape / alertcondition can read them.
bool sigBreakout = false
bool sigEntry = false
bool sigInvalidated = false
bool sigExpired = false
bool sigTargetHit = false
bool sigStopHit = false
// ───────────── Build the opening range, reset for a new day ─────────────
if orStart and confirmed
orH := high
orL := low
orReady := false
state := 0
armedDir := 0
dayEligible := false
retestExtreme := na
entryPrice := na
stopPrice := na
targetPrice := na
riskPts := na
outcome := "—"
levelLine := na
entryLine := na
stopLine := na
targetLine := na
else if inOR and confirmed
orH := math.max(orH, high)
orL := math.min(orL, low)
if orEnd and confirmed
orRange := orH - orL
orReady := true
// Compare today's range against the trailing average BEFORE adding it.
// Starts judging after 5 days of history (averaging what it has, up to the
// full lookback) — demanding all 20 up front left short-history charts,
// like 5-minute ones, permanently stuck in "filtered out".
int warmup = math.min(rangeLookback, 5)
float avgRange = array.size(orHistory) >= warmup ? array.avg(orHistory) : na
dayEligible := not useRangeFilter or (not na(avgRange)
and orRange >= avgRange * rangeMinMult
and orRange <= avgRange * rangeMaxMult)
array.push(orHistory, orRange)
if array.size(orHistory) > rangeLookback
array.shift(orHistory)
if not dayEligible
outcome := na(avgRange) and useRangeFilter ? "warming up — collecting history" : "day filtered out"
if showBox
orBox := box.new(bar_index - 1, orH, bar_index, orL,
border_color = dayEligible ? color.new(color.orange, 20) : color.new(color.gray, 65),
border_style = line.style_dashed, border_width = 1,
bgcolor = dayEligible ? color.new(color.orange, 90) : color.new(color.gray, 96))
array.push(boxReg, orBox)
if array.size(boxReg) > keepDays
box.delete(array.shift(boxReg))
// Stretch the box only inside the drawing window, then freeze it.
if showBox and inDraw and orReady and not na(orBox)
box.set_right(orBox, bar_index)
// ───────────────────── State machine ─────────────────────
if orReady and inTrade and dayEligible and confirmed
// ---- Waiting for a breakout CLOSE (wicks do not count) ----
if state == 0 and beforeCut
if close > orH
armedDir := 1
state := 1
armTime := time
retestExtreme := low
sigBreakout := true
outcome := "armed long — waiting for retest"
else if close < orL
armedDir := -1
state := 1
armTime := time
retestExtreme := high
sigBreakout := true
outcome := "armed short — waiting for retest"
if sigBreakout and showLevels
float lvl = armedDir == 1 ? orH : orL
levelLine := line.new(bar_index, lvl, bar_index, lvl,
color = color.orange, width = 2)
array.push(lineReg, levelLine)
// ---- Armed: waiting for price to come back and retest the level ----
else if state == 1
bool isLong = armedDir == 1
float lvl = isLong ? orH : orL
float invalLevel = isLong ? lvl - invalTicks * tick : lvl + invalTicks * tick
bool invalidated = isLong ? close < invalLevel : close > invalLevel
bool expired = (time - armTime) / 60000 > retestDeadlineM or not beforeCut
if invalidated
state := 3
sigInvalidated := true
outcome := "invalidated — closed back inside"
if not na(levelLine)
line.set_color(levelLine, color.new(color.gray, 40))
else if expired
state := 3
sigExpired := true
outcome := "no retest — expired"
if not na(levelLine)
line.set_color(levelLine, color.new(color.gray, 40))
else
// Track how far the pullback has run — this defines the stop.
retestExtreme := isLong ? math.min(retestExtreme, low) : math.max(retestExtreme, high)
float tol = touchTolTicks * tick
bool touched = isLong ? low <= lvl + tol : high >= lvl - tol
bool pierced = isLong ? low <= lvl - tick : high >= lvl + tick
if touched and pierced
float eP = lvl
float sP = isLong ? retestExtreme - stopBufTicks * tick
: retestExtreme + stopBufTicks * tick
float rk = isLong ? eP - sP : sP - eP
if rk > 0 and (maxRiskPts == 0 or rk <= maxRiskPts)
entryPrice := eP
stopPrice := sP
riskPts := rk
targetPrice := isLong ? eP + targetR * rk : eP - targetR * rk
state := 2
sigEntry := true
outcome := (isLong ? "LONG live" : "SHORT live")
if showLevels
entryLine := line.new(bar_index, entryPrice, bar_index, entryPrice,
color = color.blue, width = 2)
stopLine := line.new(bar_index, stopPrice, bar_index, stopPrice,
color = color.red, width = 1, style = line.style_dashed)
targetLine := line.new(bar_index, targetPrice, bar_index, targetPrice,
color = color.green, width = 1, style = line.style_dashed)
array.push(lineReg, entryLine)
array.push(lineReg, stopLine)
array.push(lineReg, targetLine)
if showLabels
label lb = label.new(bar_index, isLong ? low : high,
(isLong ? "LONG " : "SHORT ")
+ str.tostring(rk, format.mintick) + " pts ($"
+ str.tostring(rk * pointValue, "#.##") + ")",
yloc = isLong ? yloc.belowbar : yloc.abovebar,
style = isLong ? label.style_label_up : label.style_label_down,
size = size.small,
color = isLong ? color.new(color.green, 20) : color.new(color.red, 20),
textcolor = color.white)
array.push(labelReg, lb)
else
state := 3
outcome := rk <= 0 ? "skipped — no risk defined" : "skipped — risk too wide"
// ---- In the trade: stop or target first? ----
else if state == 2
bool isLong = armedDir == 1
bool hitStop = isLong ? low <= stopPrice : high >= stopPrice
bool hitTarget = isLong ? high >= targetPrice : low <= targetPrice
// If one bar spans both, assume the stop filled first (matches the backtest).
if hitStop
state := 3
sigStopHit := true
outcome := "stopped out (−1R)"
else if hitTarget
state := 3
sigTargetHit := true
outcome := "target hit (+" + str.tostring(targetR, "#.#") + "R)"
// Grow active lines only inside the drawing window (no infinite extend,
// and old days stay frozen at their 3-hour width).
if inDraw
if state == 1 and not na(levelLine)
line.set_x2(levelLine, bar_index)
if state == 2
if not na(entryLine)
line.set_x2(entryLine, bar_index)
if not na(stopLine)
line.set_x2(stopLine, bar_index)
if not na(targetLine)
line.set_x2(targetLine, bar_index)
// ---- Session over: anything still open is flattened ----
if tradeEnd and state == 2 and confirmed
state := 3
outcome := "flat — session end"
if showLabels
label lb2 = label.new(bar_index, close, "flat — session end", yloc = yloc.abovebar,
style = label.style_label_down, size = size.tiny,
color = color.new(color.gray, 35), textcolor = color.white)
array.push(labelReg, lb2)
// ---- Prune old drawings so the chart doesn't fill up ----
if array.size(lineReg) > keepDays * 4
line.delete(array.shift(lineReg))
if array.size(labelReg) > keepDays * 2
label.delete(array.shift(labelReg))
// ───────────────────────── Plots ─────────────────────────
plotshape(showMarkers and sigBreakout, "Breakout close", shape.triangleup,
location.belowbar, color.new(color.orange, 0), size = size.tiny, display = display.pane)
plotshape(showMarkers and sigEntry and armedDir == 1, "Long entry", shape.labelup,
location.belowbar, color.new(color.green, 0), text = "E", textcolor = color.white,
size = size.small, display = display.pane)
plotshape(showMarkers and sigEntry and armedDir == -1, "Short entry", shape.labeldown,
location.abovebar, color.new(color.red, 0), text = "E", textcolor = color.white,
size = size.small, display = display.pane)
plotshape(showMarkers and sigTargetHit, "Target hit", shape.xcross,
location.abovebar, color.new(color.green, 0), size = size.tiny, display = display.pane)
plotshape(showMarkers and sigStopHit, "Stop hit", shape.xcross,
location.belowbar, color.new(color.red, 0), size = size.tiny, display = display.pane)
plotshape(showMarkers and sigInvalidated, "Setup invalidated", shape.circle,
location.abovebar, color.new(color.gray, 25), size = size.tiny, display = display.pane)
plotshape(showMarkers and sigExpired, "No retest — expired", shape.square,
location.abovebar, color.new(color.gray, 25), size = size.tiny, display = display.pane)
// ───────────────────────── Status panel ─────────────────────────
var table panel = table.new(position.top_right, 2, 7,
border_width = 1, border_color = color.new(color.gray, 60),
frame_width = 1, frame_color = color.new(color.gray, 60))
if showPanel and barstate.islast
color hdrBg = color.new(color.gray, 85)
color cellBg = color.new(color.gray, 92)
table.cell(panel, 0, 0, "ORB Retest", text_size = size.small, text_color = color.gray,
bgcolor = hdrBg, text_halign = text.align_left)
table.cell(panel, 1, 0, isFiveMin ? "5m ✓" : "⚠ tested on 5m",
text_size = size.small, bgcolor = hdrBg,
text_color = isFiveMin ? color.green : color.orange, text_halign = text.align_right)
table.cell(panel, 0, 1, "Status", text_size = size.small, text_color = color.gray,
bgcolor = cellBg, text_halign = text.align_left)
table.cell(panel, 1, 1, outcome, text_size = size.small, bgcolor = cellBg,
text_color = state == 2 ? color.blue : color.gray, text_halign = text.align_right)
table.cell(panel, 0, 2, "Range high", text_size = size.small, text_color = color.gray,
bgcolor = cellBg, text_halign = text.align_left)
table.cell(panel, 1, 2, na(orH) ? "—" : str.tostring(orH, format.mintick),
text_size = size.small, bgcolor = cellBg, text_color = color.orange,
text_halign = text.align_right)
table.cell(panel, 0, 3, "Range low", text_size = size.small, text_color = color.gray,
bgcolor = cellBg, text_halign = text.align_left)
table.cell(panel, 1, 3, na(orL) ? "—" : str.tostring(orL, format.mintick),
text_size = size.small, bgcolor = cellBg, text_color = color.orange,
text_halign = text.align_right)
table.cell(panel, 0, 4, "Range width", text_size = size.small, text_color = color.gray,
bgcolor = cellBg, text_halign = text.align_left)
table.cell(panel, 1, 4, na(orRange) ? "—" : str.tostring(orRange, "#.##") + " pts",
text_size = size.small, bgcolor = cellBg, text_color = color.gray,
text_halign = text.align_right)
table.cell(panel, 0, 5, "Entry / Stop", text_size = size.small, text_color = color.gray,
bgcolor = cellBg, text_halign = text.align_left)
table.cell(panel, 1, 5, na(entryPrice) ? "—"
: str.tostring(entryPrice, format.mintick) + " / " + str.tostring(stopPrice, format.mintick),
text_size = size.small, bgcolor = cellBg, text_color = color.gray,
text_halign = text.align_right)
table.cell(panel, 0, 6, "Risk", text_size = size.small, text_color = color.gray,
bgcolor = cellBg, text_halign = text.align_left)
table.cell(panel, 1, 6, na(riskPts) ? "—"
: str.tostring(riskPts, "#.##") + " pts $" + str.tostring(riskPts * pointValue, "#.##"),
text_size = size.small, bgcolor = cellBg, text_color = color.red,
text_halign = text.align_right)
// ───────────────────────── Symbol legend ─────────────────────────
var table legend = table.new(position.bottom_left, 4, 7,
border_width = 1, border_color = color.new(color.gray, 70),
frame_width = 1, frame_color = color.new(color.gray, 70))
if showLegend and barstate.islast
color lgBg = color.new(color.gray, 94)
color lgTxt = color.new(color.gray, 15)
table.cell(legend, 0, 0, "SYMBOL GUIDE", text_size = size.tiny, text_color = color.gray,
bgcolor = color.new(color.gray, 88), text_halign = text.align_left)
table.merge_cells(legend, 0, 0, 3, 0)
// column 0-1: setup phase column 2-3: trade phase
table.cell(legend, 0, 1, "▭", text_size = size.small, text_color = color.orange, bgcolor = lgBg)
table.cell(legend, 1, 1, "opening range 9:30–9:45", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 2, 1, "▬", text_size = size.small, text_color = color.blue, bgcolor = lgBg)
table.cell(legend, 3, 1, "entry price", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 0, 2, "▭", text_size = size.small, text_color = color.gray, bgcolor = lgBg)
table.cell(legend, 1, 2, "day skipped (range filter)", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 2, 2, "╌", text_size = size.small, text_color = color.red, bgcolor = lgBg)
table.cell(legend, 3, 2, "stop loss", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 0, 3, "▲", text_size = size.small, text_color = color.orange, bgcolor = lgBg)
table.cell(legend, 1, 3, "breakout close — wait for retest", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 2, 3, "╌", text_size = size.small, text_color = color.green, bgcolor = lgBg)
table.cell(legend, 3, 3, "take profit (3R)", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 0, 4, "▬", text_size = size.small, text_color = color.orange, bgcolor = lgBg)
table.cell(legend, 1, 4, "retest level = your entry", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 2, 4, "✕", text_size = size.small, text_color = color.green, bgcolor = lgBg)
table.cell(legend, 3, 4, "target hit (win)", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 0, 5, "E", text_size = size.small, text_color = color.green, bgcolor = lgBg)
table.cell(legend, 1, 5, "long entry filled", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 2, 5, "✕", text_size = size.small, text_color = color.red, bgcolor = lgBg)
table.cell(legend, 3, 5, "stop hit (−1R)", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 0, 6, "E", text_size = size.small, text_color = color.red, bgcolor = lgBg)
table.cell(legend, 1, 6, "short entry filled", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
table.cell(legend, 2, 6, "● ■", text_size = size.small, text_color = color.gray, bgcolor = lgBg)
table.cell(legend, 3, 6, "invalidated / no retest — no trade", text_size = size.tiny, text_color = lgTxt, bgcolor = lgBg, text_halign = text.align_left)
// ───────────────────────── Alerts ─────────────────────────
alertcondition(sigBreakout, "ORB: breakout close", "Opening range broken on the close — watch for a retest")
alertcondition(sigEntry, "ORB: retest entry", "Retest reached — entry level touched")
alertcondition(sigTargetHit, "ORB: target hit", "Target reached")
alertcondition(sigStopHit, "ORB: stop hit", "Stop hit")
alertcondition(sigInvalidated, "ORB: setup invalid", "Price closed back inside the range — setup dead")
alertcondition(sigExpired, "ORB: no retest", "Retest window expired — no trade today") Indicator

TRADION Gaussian Trend EngineTRADION Gaussian Trend Engine
OVERVIEW
TRADION Gaussian Trend Engine is a multi-factor trend analysis framework designed to evaluate market direction, trend strength, momentum alignment and volatility within a unified model.
The indicator is built around an independently implemented multi-pole Gaussian cascade. Instead of using Gaussian direction alone as a trading signal, the engine evaluates several additional dimensions of market behavior before qualifying a directional transition.
The framework combines:
• Configurable multi-pole Gaussian smoothing
• ATR-normalized Gaussian slope
• Price displacement from the Gaussian baseline
• RSI momentum analysis
• Rate of Change (ROC)
• A composite 0–100 Trend Strength Score
• Volatility-adaptive trend ribbons
• Three-level BUY / SELL classification
• Confirmed-bar signal generation
• Dedicated TradingView alerts
The design objective is selective trend qualification rather than generating a signal on every minor directional fluctuation.
────────────────────────────
GAUSSIAN TREND ENGINE
────────────────────────────
The core of the indicator is a configurable multi-pole Gaussian cascade.
The user can control two primary parameters:
Gaussian Period:
Controls the smoothing horizon of the filter.
Gaussian Poles:
Controls the number of sequential Gaussian smoothing stages used by the engine, from 1 to 6.
Each additional pole applies another stage of Gaussian smoothing to the previous output.
This architecture provides a configurable balance between responsiveness and noise reduction.
The final output of the selected pole becomes the Gaussian trend baseline used by the rest of the engine.
────────────────────────────
TREND DIRECTION
────────────────────────────
Directional state is determined from the slope of the Gaussian baseline.
When the current Gaussian value is above its previous value, the engine identifies a bullish directional state.
When the current Gaussian value is below its previous value, the engine identifies a bearish directional state.
The Gaussian line changes dynamically:
Green = Bullish Gaussian direction
Red = Bearish Gaussian direction
An unchanged Gaussian value preserves the previous directional state.
────────────────────────────
VOLATILITY NORMALIZATION
────────────────────────────
Raw price movement has different significance across instruments and volatility regimes.
For this reason, ATR is used as a normalization reference within the engine.
Two important measurements are normalized relative to ATR:
• Gaussian slope magnitude
• Distance between price and the Gaussian baseline
This allows the strength model to evaluate movement relative to current market volatility rather than relying only on absolute price changes.
────────────────────────────
TREND STRENGTH SCORE
────────────────────────────
TRADION Gaussian Trend Engine calculates a composite Trend Strength Score ranging from 0 to 100.
The score combines four normalized components:
1. Gaussian Slope Strength — 40%
2. Price Distance from Gaussian — 20%
3. RSI Momentum Intensity — 25%
4. ROC Magnitude — 15%
Gaussian Slope Strength measures the magnitude of directional movement in the Gaussian baseline relative to ATR.
Price Distance measures the absolute displacement of price from the Gaussian baseline relative to ATR.
RSI Momentum Intensity measures the distance of RSI from its neutral 50 level.
ROC Magnitude measures the absolute velocity of price movement.
Each component is normalized before being incorporated into the final weighted score.
The result is a single 0–100 metric designed to describe the degree of agreement between trend movement, price expansion and momentum.
────────────────────────────
MOMENTUM CONFIRMATION
────────────────────────────
Momentum confirmation can be enabled or disabled by the user.
For bullish confirmation, the default model requires:
• RSI above 50 plus the selected Neutral Zone
• Positive ROC
For bearish confirmation, it requires:
• RSI below 50 minus the selected Neutral Zone
• Negative ROC
This layer prevents every Gaussian slope change from automatically qualifying as a BUY or SELL event.
The RSI Neutral Zone is configurable, allowing the user to control how much momentum separation is required around the RSI 50 equilibrium level.
────────────────────────────
DIRECTIONAL QUALIFICATION
────────────────────────────
A qualified bullish setup requires:
• Rising Gaussian direction
• Price above the Gaussian baseline
• Valid bullish momentum when momentum confirmation is enabled
• Trend Strength above the configured minimum threshold
A qualified bearish setup requires:
• Falling Gaussian direction
• Price below the Gaussian baseline
• Valid bearish momentum when momentum confirmation is enabled
• Trend Strength above the configured minimum threshold
This means that Gaussian direction, price structure, momentum and trend strength are evaluated together before a directional event is accepted.
────────────────────────────
THREE-LEVEL SIGNAL CLASSIFICATION
────────────────────────────
Qualified transitions are classified according to their Trend Strength Score.
Bullish classifications:
BUY
STRONG BUY
EXTREME BUY
Bearish classifications:
SELL
STRONG SELL
EXTREME SELL
The default thresholds are:
Minimum Signal Strength: 25
Strong Signal Threshold: 55
Extreme Signal Threshold: 75
These thresholds are fully configurable.
A standard signal represents a qualified directional transition below the Strong threshold.
A STRONG signal represents a transition whose Trend Strength reaches the Strong threshold.
An EXTREME signal represents a transition whose Trend Strength reaches the highest configured classification threshold.
These labels describe the strength of the conditions detected by the model. They are not predictions of future returns.
────────────────────────────
CONFIRMED-BAR SIGNAL ENGINE
────────────────────────────
Signal generation uses confirmed-bar logic.
A new directional signal is accepted only when the current chart bar is confirmed.
This prevents temporary intrabar conditions from being treated as completed signals before the candle closes.
The engine also maintains directional signal state.
Once a bullish signal has been generated, another bullish signal is not repeatedly produced while the signal state remains bullish.
A new bullish event becomes possible after the engine has transitioned through the opposite qualified state, and vice versa.
This creates cleaner transition-based signal behavior.
────────────────────────────
VOLATILITY-ADAPTIVE TREND RIBBON
────────────────────────────
The trend ribbon provides a visual representation of directional state and adaptive market conditions.
Its base width is calculated using ATR.
The final ribbon width also incorporates the current Trend Strength Score.
As calculated trend strength increases, the ribbon can expand according to the user-defined Trend Strength Width Effect.
During bullish states, the ribbon is positioned below the Gaussian baseline.
During bearish states, the ribbon is positioned above the Gaussian baseline.
The ribbon consists of multiple visual layers, creating a clear distinction between the Gaussian baseline and the outer volatility-adjusted trend zone.
This makes direction and changes in trend intensity easier to interpret directly from the chart.
────────────────────────────
VISUAL INTERPRETATION
────────────────────────────
GREEN GAUSSIAN / GREEN RIBBON
The Gaussian baseline is rising and the engine is operating in a bullish directional regime.
RED GAUSSIAN / RED RIBBON
The Gaussian baseline is falling and the engine is operating in a bearish directional regime.
BUY / SELL
A new directional setup has passed the minimum qualification requirements.
STRONG BUY / STRONG SELL
A qualified transition has reached the configured Strong Trend Strength threshold.
EXTREME BUY / EXTREME SELL
A qualified transition has reached the configured Extreme Trend Strength threshold.
────────────────────────────
USER CONTROLS
────────────────────────────
Gaussian Engine:
• Source
• Gaussian Period
• Gaussian Poles
Momentum Confirmation:
• Enable / Disable Momentum Confirmation
• RSI Period
• ROC Period
• RSI Neutral Zone
Trend Strength:
• ATR Period
• Gaussian Slope Sensitivity
• Price Distance Sensitivity
• Minimum Signal Strength
• Strong Signal Threshold
• Extreme Signal Threshold
Adaptive Trend Ribbon:
• Show / Hide Adaptive Trend Ribbon
• Ribbon ATR Width
• Trend Strength Width Effect
Visual Settings:
• Show Trading Signals
• Color Price Bars
• Show Gaussian Trend Line
────────────────────────────
ALERTS
────────────────────────────
Six dedicated TradingView alert conditions are included:
• TRADION BUY
• TRADION STRONG BUY
• TRADION EXTREME BUY
• TRADION SELL
• TRADION STRONG SELL
• TRADION EXTREME SELL
This allows each signal classification to be monitored independently.
────────────────────────────
PRACTICAL USE
────────────────────────────
TRADION Gaussian Trend Engine can be used as:
• A directional trend filter
• A trend-strength visualization tool
• A momentum-confirmed transition detector
• A volatility-adaptive trend framework
• A confirmation layer for discretionary analysis
• An alert-based trend monitoring system
Because sensitivity depends on the selected parameters, instrument and timeframe, users should evaluate settings according to their own methodology.
Higher sensitivity may detect directional changes earlier but can increase exposure to market noise.
Greater smoothing and higher qualification thresholds can reduce signal frequency but may identify transitions later.
────────────────────────────
DESIGN PHILOSOPHY
────────────────────────────
The central idea behind TRADION Gaussian Trend Engine is that trend direction alone provides incomplete information.
A rising filter does not necessarily represent a strong trend.
For this reason, the engine evaluates four questions:
1. What direction is the Gaussian structure moving?
2. How significant is that movement relative to volatility?
3. Is price positioned consistently with that direction?
4. Does momentum support the directional structure?
The Trend Strength model then measures the degree of alignment between these components.
This creates a unified framework for analyzing direction, momentum, volatility and trend intensity rather than treating each component as an isolated indicator.
────────────────────────────
IMPORTANT NOTES
────────────────────────────
TRADION Gaussian Trend Engine is an analytical indicator, not a strategy and not a prediction system.
BUY, STRONG BUY, EXTREME BUY, SELL, STRONG SELL and EXTREME SELL labels represent mathematical classifications produced by the indicator's current conditions.
They do not guarantee future price direction, profitability or trade outcomes.
Signals are confirmed at bar close, but confirmed-bar processing does not eliminate normal market risk or signal lag.
Users should independently evaluate the indicator and apply appropriate risk management.
For research and educational purposes. Indicator
