LineWrapperLibrary "LineWrapper"
Wrapper Type for Line.
method draw(this)
draws line as per the wrapper object contents
Namespace types: Line
Parameters:
this (Line) : (series Line) Line object.
Returns: current Line object
method draw(this)
draws lines as per the wrapper object array
Namespace types: array
Parameters:
this (array) : (series array) Array of Line object.
Returns: current Array of Line objects
method update(this)
updates or redraws line as per the wrapper object contents
Namespace types: Line
Parameters:
this (Line) : (series Line) Line object.
Returns: current Line object
method update(this)
updates or redraws lines as per the wrapper object array
Namespace types: array
Parameters:
this (array) : (series array) Array of Line object.
Returns: current Array of Line objects
method delete(this)
Deletes the underlying line drawing object
Namespace types: Line
Parameters:
this (Line) : (series Line) Line object.
Returns: Current Line object
method get_price(this, bar)
get line price based on bar
Namespace types: Line
Parameters:
this (Line) : (series Line) Line object.
bar (int) : (series/int) bar at which line price need to be calculated
Returns: line price at given bar.
Line
Line Wrapper object
Fields:
p1 (chart.point)
p2 (chart.point)
xloc (series string) : (series string) See description of x1 argument. Possible values: xloc.bar_index and xloc.bar_time. Default is xloc.bar_index.
extend (series string) : (series string) If extend=extend.none, draws segment starting at point (x1, y1) and ending at point (x2, y2). If extend is equal to extend.right or extend.left, draws a ray starting at point (x1, y1) or (x2, y2), respectively. If extend=extend.both, draws a straight line that goes through these points. Default value is extend.none.
color (series color) : (series color) Line color.
style (series string) : (series string) Line style. Possible values: line.style_solid, line.style_dotted, line.style_dashed, line.style_arrow_left, line.style_arrow_right, line.style_arrow_both.
width (series int) : (series int) Line width in pixels.
obj (series line) : line object
Indikatoren und Strategien
utilsLibrary "utils"
Few essentials captured together (subset of arrayutils)
timer(timeStart, timeEnd)
finds difference between two timestamps
Parameters:
timeStart (int) : start timestamp
timeEnd (int)
Returns:
check_overflow(pivots, barArray, dir)
finds difference between two timestamps
Parameters:
pivots (array) : pivots array
barArray (array) : pivot bar array
dir (int) : direction for which overflow need to be checked
Returns: bool overflow
get_trend_series(pivots, length, highLow, trend)
finds series of pivots in particular trend
Parameters:
pivots (array) : pivots array
length (int) : length for which trend series need to be checked
highLow (int) : filter pivot high or low
trend (int) : Uptrend or Downtrend
Returns: int trendIndexes
get_trend_series(pivots, firstIndex, lastIndex)
finds series of pivots in particular trend
Parameters:
pivots (array) : pivots array
firstIndex (int) : First index of the series
lastIndex (int) : Last index of the series
Returns: int trendIndexes
getConsolidatedLabel(include, labels, separator)
Consolidates labels into single string by concatenating it with given separator
Parameters:
include (array) : array of conditions to include label or not
labels (array) : string array of labels
separator (simple string) : Separator for concatenating labels
Returns: string labelText
getColors(theme)
gets array of colors based on theme
Parameters:
theme (simple string) : dark or light theme
Returns: color themeColors
ohlcLibrary "ohlc"
Library having OHLC and Indicator type and method implementations.
getOhlcArray(o, h, l, c, highBeforeLow, highAfterLow, lowBeforeHigh, lowAfterHigh, barindex, bartime, indicators)
get array of OHLC values when called on every bar
Parameters:
o (float) : Open price
h (float) : High Price
l (float) : Low Price
c (float) : Close Price
highBeforeLow (float) : to be calculated based on lower timeframe. high price attained within the candle before reaching the lowest point.
highAfterLow (float) : to be calculated based on lower timeframe. high price attained within the candle after reaching the lowest point.
lowBeforeHigh (float) : to be calculated based on lower timeframe. low price attained within the candle before reaching the highest point.
lowAfterHigh (float) : to be calculated based on lower timeframe. low price attained within the candle after reaching the highest point.
barindex (int) : bar_index of OHLC data
bartime (int) : time of OHLC cata
indicators (array) : array containing indicator
Returns: Array of OHLC objects
push(this, item, maxItems)
Push items to OHLC array with maxItems limit
Parameters:
this (array)
item (OHLC) : OHLC Item to be pushed to the array
maxItems (int) : max Items the array can hold at a time
Returns: current object
push(this, item, maxItems)
Push items to Indicator array with maxItems limit
Parameters:
this (array)
item (Indicator) : Indicator Item to be pushed to the array
maxItems (int) : max Items the array can hold at a time
Returns: current object
unshift(this, item, maxItems)
Unshift items to OHLC array with maxItems limit
Parameters:
this (array)
item (OHLC) : OHLC Item to be unshifted to the array
maxItems (int) : max Items the array can hold at a time
Returns: current object
unshift(this, item, maxItems)
Unshift items to Indicator array with maxItems limit
Parameters:
this (array)
item (Indicator) : Indicator Item to be unshifted to the array
maxItems (int) : max Items the array can hold at a time
Returns: current object
method getPoints(indicators)
get array of points based on array of indicator values
Namespace types: array
Parameters:
indicators (array) : Array containing indicator objects
Returns: array of indicator points
method plot(indicator, xloc, line_color, line_style, line_width)
plots an array of Indicator using polyline
Namespace types: array
Parameters:
indicator (array) : Array containing indicator objects
xloc (string) : can have values xloc.bar_index or xloc.bar_time. Used for drawing the line based on either bars or time.
line_color (color) : color in which the plots need to be printed on chart.
line_style (string) : line style line.style_solid, line.style_dotted, line.style_dashed, line.style_arrow_right, line.style_arrow_left, line.style_arrow_both
line_width (int) : width of the plot line
Returns: array of plot polyline
Indicator
Object containing Indicator name and value
Fields:
name (series string) : Indicator Name
value (chart.point) : Indicator Value as a chart point
OHLC
Object containing OHLC and indicator values
Fields:
o (series float) : Open price
h (series float) : High Price
l (series float) : Low Price
c (series float) : Close Price
highBeforeLow (series float) : to be calculated based on lower timeframe. high price attained within the candle before reaching the lowest point.
highAfterLow (series float) : to be calculated based on lower timeframe. high price attained within the candle after reaching the lowest point.
lowBeforeHigh (series float) : to be calculated based on lower timeframe. low price attained within the candle before reaching the highest point.
lowAfterHigh (series float) : to be calculated based on lower timeframe. low price attained within the candle after reaching the highest point.
barindex (series int) : bar_index of OHLC data
bartime (series int) : time of OHLC cata
indicators (array) : array containing indicator
Quarterly Theory ICT 04 [TradingFinder] SSMT 4Quarter Divergence🔵 Introduction
Sequential SMT Divergence is an advanced price-action-based analytical technique rooted in the ICT (Inner Circle Trader) methodology. Its primary objective is to identify early-stage divergences between correlated assets within precise time structures. This tool not only breaks down market structure but also enables traders to detect engineered liquidity traps before the market reacts.
In simple terms, SMT (Smart Money Technique) occurs when two correlated assets—such as indices (ES and NQ), currency pairs (EURUSD and GBPUSD), or commodities (Gold and Silver)—exhibit different reactions at key price levels (swing highs or lows). This lack of alignment is often a sign of smart money manipulation and signals a lack of confirmation in the ongoing trend—hinting at an imminent reversal or at least a pause in momentum.
In its Sequential form, SMT divergences are examined through a more granular temporal lens—between intraday quarters (Q1 through Q4). When SMT appears at the transition from one quarter to another (e.g., Q1 to Q2 or Q3 to Q4), the signal becomes significantly more powerful, often aligning with a critical phase in the Quarterly Theory—a framework that segments market behavior into four distinct phases: Accumulation, Manipulation, Distribution, and Reversal/Continuation.
For instance, a Bullish SMT forms when one asset prints a new low while its correlated counterpart fails to break the corresponding low from the previous quarter. This usually indicates absorption of selling pressure and the beginning of accumulation by smart money. Conversely, a Bearish SMT arises when one asset makes a higher high, but the second asset fails to confirm, signaling distribution or a fake-out before a decline.
However, SMT alone is not enough. To confirm a true Market Structure Break (MSB), the appearance of a Precision Swing Point (PSP) is essential—a specific candlestick formation on a lower timeframe (typically 5 to 15 minutes) that reveals the entry of institutional participants. The combination of SMT and PSP provides a more accurate entry point and better understanding of premium and discount zones.
The Sequential SMT Indicator, introduced in this article, dynamically scans charts for such divergence patterns across multiple sessions. It is applicable to various markets including Forex, crypto, commodities, and indices, and shows particularly strong performance during mid-week sessions (Wednesdays and Thursdays)—when most weekly highs and lows tend to form.
Bullish Sequential SMT :
Bearish Sequential SMT :
🔵 How to Use
The Sequential SMT (SSMT) indicator is designed to detect time and structure-based divergences between two correlated assets. This divergence occurs when both assets print a similar swing (high or low) in the previous quarter (e.g., Q3), but in the current quarter (e.g., Q4), only one asset manages to break that swing level—while the other fails to reach it.
This temporal mismatch is precisely identified by the SSMT indicator and often signals smart money activity, a market phase transition, or even the presence of an engineered liquidity trap. The signal becomes especially powerful when paired with a Precision Swing Point (PSP)—a confirming candle on lower timeframes (5m–15m) that typically indicates a market structure break (MSB) and the entry of smart liquidity.
🟣 Bullish Sequential SMT
In the previous quarter, both assets form a similar swing low.
In the current quarter, one asset (e.g., EURUSD) breaks that low and trades below it.
The other asset (e.g., GBPUSD) fails to reach the same low, preserving the structure.
This time-based divergence reflects declining selling pressure, potential absorption, and often marks the end of a manipulation phase and the start of accumulation. If confirmed by a bullish PSP candle, it offers a strong long opportunity, with stop-losses defined just below the swing low.
🟣 Bearish Sequential SMT
In the previous quarter, both assets form a similar swing high.
In the current quarter, one asset (e.g., NQ) breaks above that high.
The other asset (e.g., ES) fails to reach that high, remaining below it.
This type of divergence signals weakening bullish momentum and the likelihood of distribution or a fake-out before a price drop. When followed by a bearish PSP candle, it sets up a strong shorting opportunity with targets in the discount zone and protective stops placed above the swing high.
🔵 Settings
⚙️ Logical Settings
Quarterly Cycles Type : Select the time segmentation method for SMT analysis.
Available modes include: Yearly, Monthly, Weekly, Daily, 90 Minute, and Micro.
These define how the indicator divides market time into Q1–Q4 cycles.
Symbol : Choose the secondary asset to compare with the main chart asset (e.g., XAUUSD, US100, GBPUSD).
Pivot Period : Sets the sensitivity of the pivot detection algorithm. A smaller value increases responsiveness to price swings.
Activate Max Pivot Back : When enabled, limits the maximum number of past pivots to be considered for divergence detection.
Max Pivot Back Length : Defines how many past pivots can be used (if the above toggle is active).
Pivot Sync Threshold : The maximum allowed difference (in bars) between pivots of the two assets for them to be compared.
Validity Pivot Length : Defines the time window (in bars) during which a divergence remains valid before it's considered outdated.
🎨 Display Settings
Show Cycle :Toggles the visual display of the current Quarter (Q1 to Q4) based on the selected time segmentation
Show Cycle Label : Shows the name (e.g., "Q2") of each detected Quarter on the chart.
Show Bullish SMT Line : Draws a line connecting the bullish divergence points.
Show Bullish SMT Label : Displays a label on the chart when a bullish divergence is detected.
Bullish Color : Sets the color for bullish SMT markers (label, shape, and line).
Show Bearish SMT Line : Draws a line for bearish divergence.
Show Bearish SMT Label : Displays a label when a bearish SMT divergence is found.
Bearish Color : Sets the color for bearish SMT visual elements.
🔔 Alert Settings
Alert Name : Custom name for the alert messages (used in TradingView’s alert system).
Message Frequency :
All: Every signal triggers an alert.
Once Per Bar: Alerts once per bar regardless of how many signals occur.
Per Bar Close: Only triggers when the bar closes and the signal still exists.
Time Zone Display : Choose the time zone in which alert timestamps are displayed (e.g., UTC).
Bullish SMT Divergence Alert : Enable/disable alerts specifically for bullish signals.
Bearish SMT Divergence Alert : Enable/disable alerts specifically for bearish signals
🔵 Conclusion
The Sequential SMT (SSMT) indicator is a powerful and precise tool for identifying structural divergences between correlated assets within a time-based framework. Unlike traditional divergence models that rely solely on sequential pivot comparisons, SSMT leverages Quarterly Theory, in combination with concepts like liquidity sweeps, market structure breaks (MSB) and precision swing points (PSP), to provide a deeper and more actionable view of market dynamics.
By using SSMT, traders gain not only the ability to identify where divergence occurs, but also when it matters most within the market cycle. This empowers them to anticipate major moves or traps before they fully materialize, and position themselves accordingly in high-probability trade zones.
Whether you're trading Forex, crypto, indices, or commodities, the true strength of this indicator is revealed when used in sync with the Accumulation, Manipulation, Distribution, and Reversal phases of the market. Integrated with other confluence tools and market models, SSMT can serve as a core component in a professional, rule-based, and highly personalized trading strategy.
arraysLibrary "arrays"
Supplementary array methods.
method delete(arr, index)
remove int object from array of integers at specific index
Namespace types: array
Parameters:
arr (array) : int array
index (int) : index at which int object need to be removed
Returns: void
method delete(arr, index)
remove float object from array of float at specific index
Namespace types: array
Parameters:
arr (array) : float array
index (int) : index at which float object need to be removed
Returns: float
method delete(arr, index)
remove bool object from array of bool at specific index
Namespace types: array
Parameters:
arr (array) : bool array
index (int) : index at which bool object need to be removed
Returns: bool
method delete(arr, index)
remove string object from array of string at specific index
Namespace types: array
Parameters:
arr (array) : string array
index (int) : index at which string object need to be removed
Returns: string
method delete(arr, index)
remove color object from array of color at specific index
Namespace types: array
Parameters:
arr (array) : color array
index (int) : index at which color object need to be removed
Returns: color
method delete(arr, index)
remove chart.point object from array of chart.point at specific index
Namespace types: array
Parameters:
arr (array) : chart.point array
index (int) : index at which chart.point object need to be removed
Returns: void
method delete(arr, index)
remove line object from array of lines at specific index and deletes the line
Namespace types: array
Parameters:
arr (array) : line array
index (int) : index at which line object need to be removed and deleted
Returns: void
method delete(arr, index)
remove label object from array of labels at specific index and deletes the label
Namespace types: array
Parameters:
arr (array) : label array
index (int) : index at which label object need to be removed and deleted
Returns: void
method delete(arr, index)
remove box object from array of boxes at specific index and deletes the box
Namespace types: array
Parameters:
arr (array) : box array
index (int) : index at which box object need to be removed and deleted
Returns: void
method delete(arr, index)
remove table object from array of tables at specific index and deletes the table
Namespace types: array
Parameters:
arr (array) : table array
index (int) : index at which table object need to be removed and deleted
Returns: void
method delete(arr, index)
remove linefill object from array of linefills at specific index and deletes the linefill
Namespace types: array
Parameters:
arr (array) : linefill array
index (int) : index at which linefill object need to be removed and deleted
Returns: void
method delete(arr, index)
remove polyline object from array of polylines at specific index and deletes the polyline
Namespace types: array
Parameters:
arr (array) : polyline array
index (int) : index at which polyline object need to be removed and deleted
Returns: void
method popr(arr)
remove last int object from array
Namespace types: array
Parameters:
arr (array) : int array
Returns: int
method popr(arr)
remove last float object from array
Namespace types: array
Parameters:
arr (array) : float array
Returns: float
method popr(arr)
remove last bool object from array
Namespace types: array
Parameters:
arr (array) : bool array
Returns: bool
method popr(arr)
remove last string object from array
Namespace types: array
Parameters:
arr (array) : string array
Returns: string
method popr(arr)
remove last color object from array
Namespace types: array
Parameters:
arr (array) : color array
Returns: color
method popr(arr)
remove last chart.point object from array
Namespace types: array
Parameters:
arr (array) : chart.point array
Returns: void
method popr(arr)
remove and delete last line object from array
Namespace types: array
Parameters:
arr (array) : line array
Returns: void
method popr(arr)
remove and delete last label object from array
Namespace types: array
Parameters:
arr (array) : label array
Returns: void
method popr(arr)
remove and delete last box object from array
Namespace types: array
Parameters:
arr (array) : box array
Returns: void
method popr(arr)
remove and delete last table object from array
Namespace types: array
Parameters:
arr (array) : table array
Returns: void
method popr(arr)
remove and delete last linefill object from array
Namespace types: array
Parameters:
arr (array) : linefill array
Returns: void
method popr(arr)
remove and delete last polyline object from array
Namespace types: array
Parameters:
arr (array) : polyline array
Returns: void
method shiftr(arr)
remove first int object from array
Namespace types: array
Parameters:
arr (array) : int array
Returns: int
method shiftr(arr)
remove first float object from array
Namespace types: array
Parameters:
arr (array) : float array
Returns: float
method shiftr(arr)
remove first bool object from array
Namespace types: array
Parameters:
arr (array) : bool array
Returns: bool
method shiftr(arr)
remove first string object from array
Namespace types: array
Parameters:
arr (array) : string array
Returns: string
method shiftr(arr)
remove first color object from array
Namespace types: array
Parameters:
arr (array) : color array
Returns: color
method shiftr(arr)
remove first chart.point object from array
Namespace types: array
Parameters:
arr (array) : chart.point array
Returns: void
method shiftr(arr)
remove and delete first line object from array
Namespace types: array
Parameters:
arr (array) : line array
Returns: void
method shiftr(arr)
remove and delete first label object from array
Namespace types: array
Parameters:
arr (array) : label array
Returns: void
method shiftr(arr)
remove and delete first box object from array
Namespace types: array
Parameters:
arr (array) : box array
Returns: void
method shiftr(arr)
remove and delete first table object from array
Namespace types: array
Parameters:
arr (array) : table array
Returns: void
method shiftr(arr)
remove and delete first linefill object from array
Namespace types: array
Parameters:
arr (array) : linefill array
Returns: void
method shiftr(arr)
remove and delete first polyline object from array
Namespace types: array
Parameters:
arr (array) : polyline array
Returns: void
method push(arr, val, maxItems)
add int to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : int array
val (int) : int object to be pushed
maxItems (int) : max number of items array can hold
Returns: int
method push(arr, val, maxItems)
add float to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : float array
val (float) : float object to be pushed
maxItems (int) : max number of items array can hold
Returns: float
method push(arr, val, maxItems)
add bool to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : bool array
val (bool) : bool object to be pushed
maxItems (int) : max number of items array can hold
Returns: bool
method push(arr, val, maxItems)
add string to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : string array
val (string) : string object to be pushed
maxItems (int) : max number of items array can hold
Returns: string
method push(arr, val, maxItems)
add color to the end of an array with max items cap. Objects are removed from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : color array
val (color) : color object to be pushed
maxItems (int) : max number of items array can hold
Returns: color
method push(arr, val, maxItems)
add chart.point to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : chart.point array
val (chart.point) : chart.point object to be pushed
maxItems (int) : max number of items array can hold
Returns: chart.point
method push(arr, val, maxItems)
add line to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : line array
val (line) : line object to be pushed
maxItems (int) : max number of items array can hold
Returns: line
method push(arr, val, maxItems)
add label to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : label array
val (label) : label object to be pushed
maxItems (int) : max number of items array can hold
Returns: label
method push(arr, val, maxItems)
add box to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : box array
val (box) : box object to be pushed
maxItems (int) : max number of items array can hold
Returns: box
method push(arr, val, maxItems)
add table to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : table array
val (table) : table object to be pushed
maxItems (int) : max number of items array can hold
Returns: table
method push(arr, val, maxItems)
add linefill to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : linefill array
val (linefill) : linefill object to be pushed
maxItems (int) : max number of items array can hold
Returns: linefill
method push(arr, val, maxItems)
add polyline to the end of an array with max items cap. Objects are removed and deleted from start to maintain max items cap
Namespace types: array
Parameters:
arr (array) : polyline array
val (polyline) : polyline object to be pushed
maxItems (int) : max number of items array can hold
Returns: polyline
method unshift(arr, val, maxItems)
add int to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : int array
val (int) : int object to be unshift
maxItems (int) : max number of items array can hold
Returns: int
method unshift(arr, val, maxItems)
add float to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : float array
val (float) : float object to be unshift
maxItems (int) : max number of items array can hold
Returns: float
method unshift(arr, val, maxItems)
add bool to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : bool array
val (bool) : bool object to be unshift
maxItems (int) : max number of items array can hold
Returns: bool
method unshift(arr, val, maxItems)
add string to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : string array
val (string) : string object to be unshift
maxItems (int) : max number of items array can hold
Returns: string
method unshift(arr, val, maxItems)
add color to the beginning of an array with max items cap. Objects are removed from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : color array
val (color) : color object to be unshift
maxItems (int) : max number of items array can hold
Returns: color
method unshift(arr, val, maxItems)
add chart.point to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : chart.point array
val (chart.point) : chart.point object to be unshift
maxItems (int) : max number of items array can hold
Returns: chart.point
method unshift(arr, val, maxItems)
add line to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : line array
val (line) : line object to be unshift
maxItems (int) : max number of items array can hold
Returns: line
method unshift(arr, val, maxItems)
add label to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : label array
val (label) : label object to be unshift
maxItems (int) : max number of items array can hold
Returns: label
method unshift(arr, val, maxItems)
add box to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : box array
val (box) : box object to be unshift
maxItems (int) : max number of items array can hold
Returns: box
method unshift(arr, val, maxItems)
add table to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : table array
val (table) : table object to be unshift
maxItems (int) : max number of items array can hold
Returns: table
method unshift(arr, val, maxItems)
add linefill to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : linefill array
val (linefill) : linefill object to be unshift
maxItems (int) : max number of items array can hold
Returns: linefill
method unshift(arr, val, maxItems)
add polyline to the beginning of an array with max items cap. Objects are removed and deleted from end to maintain max items cap
Namespace types: array
Parameters:
arr (array) : polyline array
val (polyline) : polyline object to be unshift
maxItems (int) : max number of items array can hold
Returns: polyline
method isEmpty(arr)
checks if an int array is either null or empty
Namespace types: array
Parameters:
arr (array) : int array
Returns: bool
method isEmpty(arr)
checks if a float array is either null or empty
Namespace types: array
Parameters:
arr (array) : float array
Returns: bool
method isEmpty(arr)
checks if a string array is either null or empty
Namespace types: array
Parameters:
arr (array) : string array
Returns: bool
method isEmpty(arr)
checks if a bool array is either null or empty
Namespace types: array
Parameters:
arr (array) : bool array
Returns: bool
method isEmpty(arr)
checks if a color array is either null or empty
Namespace types: array
Parameters:
arr (array) : color array
Returns: bool
method isEmpty(arr)
checks if a chart.point array is either null or empty
Namespace types: array
Parameters:
arr (array) : chart.point array
Returns: bool
method isEmpty(arr)
checks if a line array is either null or empty
Namespace types: array
Parameters:
arr (array) : line array
Returns: bool
method isEmpty(arr)
checks if a label array is either null or empty
Namespace types: array
Parameters:
arr (array) : label array
Returns: bool
method isEmpty(arr)
checks if a box array is either null or empty
Namespace types: array
Parameters:
arr (array) : box array
Returns: bool
method isEmpty(arr)
checks if a linefill array is either null or empty
Namespace types: array
Parameters:
arr (array) : linefill array
Returns: bool
method isEmpty(arr)
checks if a polyline array is either null or empty
Namespace types: array
Parameters:
arr (array) : polyline array
Returns: bool
method isEmpty(arr)
checks if a table array is either null or empty
Namespace types: array
Parameters:
arr (array) : table array
Returns: bool
method isNotEmpty(arr)
checks if an int array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : int array
Returns: bool
method isNotEmpty(arr)
checks if a float array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : float array
Returns: bool
method isNotEmpty(arr)
checks if a string array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : string array
Returns: bool
method isNotEmpty(arr)
checks if a bool array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : bool array
Returns: bool
method isNotEmpty(arr)
checks if a color array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : color array
Returns: bool
method isNotEmpty(arr)
checks if a chart.point array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : chart.point array
Returns: bool
method isNotEmpty(arr)
checks if a line array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : line array
Returns: bool
method isNotEmpty(arr)
checks if a label array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : label array
Returns: bool
method isNotEmpty(arr)
checks if a box array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : box array
Returns: bool
method isNotEmpty(arr)
checks if a linefill array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : linefill array
Returns: bool
method isNotEmpty(arr)
checks if a polyline array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : polyline array
Returns: bool
method isNotEmpty(arr)
checks if a table array is not null and has at least one item
Namespace types: array
Parameters:
arr (array) : table array
Returns: bool
method flush(arr)
remove all int objects in an array
Namespace types: array
Parameters:
arr (array) : int array
Returns: int
method flush(arr)
remove all float objects in an array
Namespace types: array
Parameters:
arr (array) : float array
Returns: float
method flush(arr)
remove all bool objects in an array
Namespace types: array
Parameters:
arr (array) : bool array
Returns: bool
method flush(arr)
remove all string objects in an array
Namespace types: array
Parameters:
arr (array) : string array
Returns: string
method flush(arr)
remove all color objects in an array
Namespace types: array
Parameters:
arr (array) : color array
Returns: color
method flush(arr)
remove all chart.point objects in an array
Namespace types: array
Parameters:
arr (array) : chart.point array
Returns: chart.point
method flush(arr)
remove and delete all line objects in an array
Namespace types: array
Parameters:
arr (array) : line array
Returns: line
method flush(arr)
remove and delete all label objects in an array
Namespace types: array
Parameters:
arr (array) : label array
Returns: label
method flush(arr)
remove and delete all box objects in an array
Namespace types: array
Parameters:
arr (array) : box array
Returns: box
method flush(arr)
remove and delete all table objects in an array
Namespace types: array
Parameters:
arr (array) : table array
Returns: table
method flush(arr)
remove and delete all linefill objects in an array
Namespace types: array
Parameters:
arr (array) : linefill array
Returns: linefill
method flush(arr)
remove and delete all polyline objects in an array
Namespace types: array
Parameters:
arr (array) : polyline array
Returns: polyline
Altcoin Reversal or Correction DetectionINDICATOR OVERVIEW: Altcoin Reversal or Correction Detection
Altcoin Reversal or Correction Detection is a powerful crypto-specific indicator designed exclusively for altcoins by analyzing their RSI values across multiple timeframes alongside Bitcoin’s RSI. Since BTC's price movements have a strong influence on altcoins, this tool helps traders better understand whether a reversal or correction signal is truly reliable or just noise. Even if an altcoin appears oversold or overbought, it may continue trending with BTC—so this indicator gives you the full picture.
The indicator is optimized for CRYPTO MARKETS only. Not suitable for BTC itself—this is a precision tool built only for ALTCOINS only.
This indicator is not only for signals but also serves as a tool for observing all the information from different timeframes of BTC and altcoins collectively.
How the Calculation Works: Algorithm Overview
The Altcoin Reversal or Correction Detection indicator relies on an algorithm that compares the RSI values of the altcoin across multiple timeframes with Bitcoin's RSI values. This allows the indicator to identify key market moments where a reversal or correction might occur.
BTC-Altcoin RSI Correlation: The algorithm looks for the correlation between Bitcoin's price movements and the altcoin's price actions, as BTC often influences the direction of altcoins. When both Bitcoin and the altcoin show either overbought or oversold conditions in a significant number of timeframes, the indicator signals the potential for a reversal or correction.
Multi-Timeframe Confirmation: Unlike traditional indicators that may focus on a single timeframe, this tool checks multiple timeframes for both BTC and the altcoin. When the same overbought/oversold conditions are met across multiple timeframes, it confirms the likelihood of a trend reversal or correction, providing a more reliable signal. The more timeframes that align with this pattern, the stronger the signal becomes.
Overbought/Oversold Conditions & Extreme RSI Values: The algorithm also takes into account the size of the RSI values, especially focusing on extreme overbought and oversold levels. The greater the RSI values are in these extreme regions, the stronger the potential reversal or correction signal. This means that not only do multiple timeframes need to confirm the condition, but the magnitude of the overbought or oversold RSI level plays a crucial role in determining the strength of the signal.
Signal Strength Levels: The signals are classified into three levels:
Early Signal
Strong Signal
Very Strong Signal
By taking into account the multi-timeframe analysis of both BTC and the altcoin RSI values, along with the magnitude of these RSI values, the indicator offers a highly reliable method for detecting potential reversals and corrections.
Who Is This Indicator Suitable For?
This indicator can also be used to detect reversal points, but it is especially effective for scalping. It highlights potential correction points, making it perfect for quick entries during smaller market pullbacks or short-term trend shifts, which is more suitable for scalpers looking to capitalize on short-term movements
Integration with other tools
Use this tool alongside key Support and Resistance zones to further enhance your trade by filtering for even better quality entries and focusing only on high-quality reversal or correction setups. It can be also used with other indicators and suitable with other personalised strategies.
Multi-Oscillator Adaptive KernelMulti-Oscillator Adaptive Kernel
Introduction
The Multi-Oscillator Adaptive Kernel (MOAK) is a powerful momentum-based indicator that fuses multiple popular oscillators RSI, Stochastic, MFI, and CCI into a single, adaptive tool. Through advanced kernel smoothing techniques, MOAK is engineered to filter out market noise and deliver clearer, more consistent trend signals. Whether in trending or ranging markets, MOAK equips traders with a holistic perspective on momentum across multiple timeframes.
Key Features
Oscillator Fusion: Combines normalized values from RSI, Stochastic, Money Flow Index, and Commodity Channel Index to capture broader momentum shifts.
Advanced Kernel Smoothing: Utilizes three kernel smoothing algorithms—Exponential, Linear, and Gaussian—to refine raw oscillator data and minimize false signals.
Customizable Sensitivity: Traders can tailor the indicator's responsiveness by adjusting lookback periods, kernel lengths, and smoothing sensitivity.
Clear Visual Signals: Features a color-coded signal line—cyan for bullish, magenta for bearish—with gradient fills to reflect trend intensity and direction.
Overbought/Oversold Zones: A central zero line helps identify momentum extremes, with layered gradients to indicate the strength of potential reversals or continuations.
Adaptive Signal Design: Dynamically adjusts its output to align with changing market conditions, offering reliable performance across diverse market environments.
How It Works
MOAK starts by calculating and normalizing input from four widely used momentum oscillators: Relative Strength Index (RSI), Stochastic Oscillator, Money Flow Index (MFI), and Commodity Channel Index (CCI). These values are then aggregated to form a composite momentum reading.
To reduce market noise and enhance signal clarity, the composite reading is passed through one of three user-selectable kernel smoothing filters—Exponential, Linear, or Gaussian. These algorithms shape the data curve, softening abrupt fluctuations while preserving meaningful trends.
The resulting smoothed output is rendered visually as a central signal line, colored cyan for upward momentum and magenta for downward momentum. A series of gradient fills around this line illustrates the intensity of the underlying momentum, with the zero line acting as a visual boundary between overbought and oversold regions. Users can customize key parameters such as lookback window, kernel length, and sensitivity level, ensuring the indicator can be optimized for different assets and trading styles.
Examples
MOAK is able to provide clear trend detection on large cap token such as Bitcoin in the example shown below and resistant to noise during consolidation period.
Downside positions are also handled by the indicator, this time on Solana which is more volatile than Bitcoin but even with more volatility MOAK was able to catch an early entry in the downside move.
Below an example on a lower timeframe with a low cap token Fartcoin where MOAK triggered an early entry on a positive uptrend.
Conclusion
MOAK is a sophisticated yet intuitive momentum indicator, merging the strengths of multiple oscillators into a cohesive and adaptive signal. Its kernel-based smoothing and customizable parameters make it a valuable tool for traders seeking to identify trend direction, assess momentum strength, and filter out short-term noise with precision. Ideal for both trend-following and range-trading strategies, MOAK offers a versatile edge in dynamic market conditions.
Disclaimer
This indicator is provided for informational and educational purposes only. It does not constitute financial advice, nor does it guarantee specific results. Always perform your own analysis and consult a licensed financial advisor before making any trading decisions. Use at your own risk.
Master RS Dashboard: 15M, 1D, 1WThis indicator gives you a complete picture of Relative Strength (RS) across three critical timeframes — 15-minute, Daily, and Weekly — to help confirm high-conviction entries, spot trend alignment, and build context around trade setups.
It calculates RS by comparing your current symbol to a benchmark (default: SPY), adjusted for volatility using ATR. The dashboard displays:
• RS values per timeframe
• Trend arrows (↑, ↓, →)
• Bullish / Bearish / Neutral signals
• A total alignment score (e.g. 3/3 Bullish)
• Optional background shading when all 3 are aligned
✅ Use this tool to:
• Filter your watchlist for multi-timeframe RS alignment
• Confirm breakout or momentum trades with strong backing
• Avoid trades when RS is mixed or conflicting
Works great for stocks, ETFs, and even futures. Ideal for swing traders, intraday traders, and trend followers who want a full-perspective view.
Vanguard Sniper Entry Tool v2 - ADVANCED🟢 Vanguard Sniper Entry Tool (2025 Edition)
Built for high-conviction swing and intraday traders, this advanced sniper script is engineered to detect precise entry points based on trend, zone structure, and candle confirmation. Developed using Pine Script v6, it's optimized for today's high-volatility macro landscape — including 2025's aggressive market behavior.
🔍 What It Does
Trend-Based Entry Filtering: Confirms market direction on higher timeframes (4H by default).
Candle Confirmation Logic: Customizable to Engulfing, Pin Bar, or Doji candles for sniper-level accuracy.
Sniper Zones: Automatically maps potential support/resistance zones based on recent price structure.
Signal Alerts: Visual & alert-based sniper signals when all conditions align for a high-RR entry.
Overlay-Ready: Designed to sit cleanly on price action for fast execution.
⚙️ Key Inputs
Confirmation Candle Type (Engulfing / Pin Bar / Doji)
Trend Timeframe (Default 4H)
Show Zones: Toggle sniper zones on/off
Enable Alerts: Real-time alerts when sniper setups confirm
📈 Best Used For:
Swing trading sniper entries
Trend continuation setups
Conservative confirmations before entry
Trade planning at support/resistance
⚠️ Risk Notice:
This tool is not financial advice. Always use proper risk management and confirm signals with your full system.
Relative VolumePopular Relative Volume indicator with added features: bars are colored and alerts can be configured whenever the relative volume exceeds a determined threshold
Dynamic Volume Profile OscillatorDynamic Volume Profile Oscillator
Introduction
The Dynamic Volume Profile Oscillator (DVPO) is an advanced technical analysis tool that merges volume profiling with price action dynamics to enhance trend identification and improve trade entry precision. Unlike conventional oscillators that rely solely on price-based metrics, DVPO incorporates adaptive volume-weighted mean deviations to present a more responsive and insightful perspective on market behavior. This makes it a powerful instrument for traders seeking refined momentum insights and context-aware overbought/oversold detection.
Key Features
Adaptive Volume Profiling: Utilizes real-time volume data to adjust the oscillator’s sensitivity to prevailing market activity, enabling more accurate trend and exhaustion zone identification.
Mean Reversion Mode: Highlights potential reversion points when price deviates significantly from volume-weighted norms, ideal for contrarian and range-bound strategies.
Oscillator Smoothing: Integrates optional smoothing filters to reduce noise and provide clearer directional signals without sacrificing responsiveness.
Dynamic Midline & Zones: Features an evolving midline calibrated to the current volume-weighted context, along with dynamically adjusting overbought and oversold zones.
Signal Crossovers: Generates actionable momentum signals when the oscillator crosses key thresholds or the midline, aiding in timing entries and exits.
Gradient Zone Visualization: Visually represents intensity and directional bias through gradient color zones, helping users quickly assess momentum strength and market condition shifts.
How It Works
The DVPO calculates deviations from a volume-weighted average price baseline across a defined lookback period. These deviations are then transformed into an oscillator that fluctuates above and below a dynamic midline, which represents the fair value zone based on recent volume distribution.
To enhance interpretability, the indicator introduces:
Dynamic Zones that expand or contract based on current volatility and volume skewness.
Smoothing algorithms (optional) that can be applied to reduce erratic movements caused by sudden spikes in volume.
Gradient coloring to reflect the strength and direction of the momentum — darker tones indicate stronger trends, while lighter ones suggest potential reversals or weakening trends.
Crossover logic that detects when the oscillator line crosses above or below the midline or critical thresholds, often coinciding with trend initiations or reversals.
Conclusion
The Dynamic Volume Profile Oscillator offers a significant enhancement to traditional momentum indicators by intelligently adapting to both price and volume shifts. Whether used for trend following, mean reversion, or breakout confirmation, its comprehensive design provides traders with an intuitive yet powerful edge in identifying actionable market signals across varying conditions.
Disclaimer
This indicator is intended for educational and informational purposes only. It does not constitute financial advice or a recommendation to buy or sell any financial instrument. Users should perform their own due diligence and consult a qualified financial advisor before making any trading decisions.
Dynamic Momentum BandsDynamic Momentum Bands
Introduction
The Dynamic Momentum Bands indicator is a powerful analytical tool designed to help traders identify the strength and direction of market momentum with greater precision. By combining key technical methodologies such as Relative Strength Index (RSI), adaptive volatility analysis, and customizable moving averages this indicator offers a multi-dimensional perspective on evolving market conditions. Whether in trending or ranging environments, Dynamic Momentum Bands aim to deliver actionable insights that enhance decision-making and risk management.
Key Features
Adaptive Band Calculation: The bands adjust dynamically in response to market conditions, allowing them to expand during volatile periods and contract during consolidation phases.
RSI-Driven Volatility Scaling: Integrates RSI analysis to scale the width of the bands based on momentum strength, creating a responsive and context-aware framework for trend evaluation.
Multiple Moving Average Options: Offers flexibility with various smoothing techniques, enabling users to tailor the indicator to their preferred strategies (e.g., EMA, SMA, WMA).
Smooth Gradient-Based Visualization: Enhances visual clarity with color gradients that reflect momentum intensity and directional bias, supporting intuitive interpretation of the market state.
How It Works
The Dynamic Momentum Bands indicator operates by combining three core components:
Adaptive Moving Averages: A central baseline is calculated using a selected moving average type. This baseline reflects the general price trend over a user-defined lookback period.
Volatility-Scaled Band Widths: Band distances from the central average are determined using an RSI-based volatility model. Higher RSI values and volatility readings cause the bands to widen, signaling stronger price momentum or potential breakouts.
Gradient Visualization: The bands are color-coded with gradient fills to reflect changes in momentum strength, providing real-time visual cues about potential trend shifts or exhaustion points.
This integration of methodologies allows the indicator to remain responsive to price action while maintaining a smooth, noise-filtered representation of market dynamics.
Conclusion
The Dynamic Momentum Bands indicator offers a versatile and insightful approach to tracking market momentum and volatility. Its adaptive design and multifactor methodology make it suitable for traders who seek a deeper understanding of price behavior beyond conventional moving average envelopes. By delivering a visually rich and responsive analysis tool, it empowers users to make more informed trading decisions across various market environments.
Disclaimer
This indicator is intended for educational and informational purposes only. It does not constitute financial advice or a recommendation to buy or sell any financial instrument. Users are advised to conduct their own analysis and consult with a licensed financial advisor before making any trading decisions.
Rogue ORB PRORogue ORB Pro is a precision-engineered Opening Range Breakout (ORB) indicator built for active intraday traders who need real signals, not noise.
This tool identifies high-probability breakout entries from the opening range, enhanced with optional ATR-based stop loss levels, deviation targets, cooldown filters, and a relative volume gate to filter weak setups.
🔍 Key Features:
Opening Range High/Low: Drawn from a user-defined time window and locked for the day
Deviations: Automatically plots target zones above and below the OR range (e.g. 1, 2 deviations)
Pre-Market Levels: Automatically draws pre market high and low lines at the end of pre market session
Buy/Sell Signals: Triggered on breakout of the OR High/Low with configurable breakout logic (touch or close)
ATR Stop Loss Line: Dynamically drawn at a fixed ATR distance from breakout candle, with optional SL label
Cooldown Period: Prevents back-to-back signals by enforcing a user-defined bar delay between entries, can help with overtrading
Volume Filter: Optional relative volume filter that requires breakout candles to exceed a custom volume threshold
VWAP Overlay: Visual VWAP for directional bias and confluence
📈 Dual SMA with Alerts & Trend ColorsFast SMA reacts quicker to price changes.
Slow SMA shows longer-term trend direction.
Trend coloring visually indicates upward or downward direction of each SMA.
Alerts are fully configured and ready to use.
Gas/Oil SpreadGas/Oil Spread Analyzer with Static Overbought/Oversold Zones
This indicator measures the spread between the actual price of natural gas and its oil-based equivalent, derived from a defined oil/gas ratio. It helps traders identify potential mispricings and mean-reversion opportunities between the two energy commodities.
Key Features:
- Calculates spread: Gas Price – Oil-Based Equivalent Price
- Supports dynamic or static oil/gas ratio
- Plots a smoothed version of the spread (SMA)
- Displays static overbought and oversold zones to highlight extreme deviations
Use Cases:
- Detect overvalued or undervalued gas relative to oil
- Spot potential reversion setups in intermarket trading
- Evaluate energy market dislocations and hedging opportunities
jsonBuilderLibrary "jsonBuilder"
jsonBuilder is a lightweight Pine Script utility library for building JSON strings manually. It includes functions to convert key-value pairs into JSON format and to combine multiple pairs into a complete JSON object.
jsonString(key, value) – Converts a string key and string value into a valid JSON key-value pair.
jsonObject(pair1, ..., pair20) – Merges up to 20 key-value pairs into a complete JSON object string. Empty arguments are skipped automatically.
This is useful when sending structured JSON data via webhooks or external integrations from Pine Script.
Oil/gas ratio MAOil/Gas Ratio-Based Equivalent Price
This indicator calculates the gas-equivalent price based on the current oil price and a defined oil/gas ratio. It helps identify relative overvaluation or undervaluation of natural gas compared to oil.
Features:
- Choose between a static or dynamic (SMA-based) oil/gas ratio
- Displays the fair value of gas derived from oil prices
- Works with any oil ticker symbol (e.g. BRENT, USOIL, etc.)
Useful for traders analyzing intermarket relationships and looking for relative value signals between energy commodities.
Close-EMA120 Bias Histogram### **Indicator: Close-EMA120 Bias Histogram**
**Purpose**:
Visualizes the deviation (bias rate) between the closing price and its 120-period EMA (Exponential Moving Average) as a histogram.
**Calculation**:
\
- Positive values: Price is **above** EMA120 (bullish momentum).
- Negative values: Price is **below** EMA120 (bearish momentum).
**Key Features**:
1. **Clean Histogram**:
- Green bars: Price > EMA120
- Red bars: Price < EMA120
- Transparency (30%) for subtle visualization.
2. **Zero Line Reference**:
- Solid gray line at 0% for quick divergence assessment.
3. **Minimalist Design**:
- No overbought/oversold thresholds or clutter.
- Adjustable EMA period via input (default: 120).
**Use Cases**:
- Identify mean-reversion opportunities when bias extremes occur.
- Confirm trend strength (sustained positive/negative bias).
- Combine with price action for divergence signals.
**Code Simplicity**:
- Only 10 lines of core logic.
- Easy to modify (e.g., change EMA length or colors).
DEMA SuperTrendDEMA SuperTrend
Introduction
The DEMA SuperTrend is a sophisticated trend-following indicator that integrates the speed and smoothness of the Double Exponential Moving Average (DEMA) with the classic SuperTrend methodology. Designed for traders seeking a more responsive alternative to standard trend indicators, the DEMA SuperTrend helps identify the prevailing market direction with minimal lag. It plots directly on the price chart, making it intuitive and accessible for real-time analysis across various timeframes and trading instruments.
Key Features
DEMA-Based Smoothing: Enhances traditional SuperTrend signals by applying DEMA, reducing signal lag and improving responsiveness to market changes.
Dynamic Trend Visualization: Clearly marks uptrend and downtrend phases with adaptive bands that follow price action.
Customizable Inputs: Users can tailor the ATR period, multiplier, and DEMA length to suit their strategy and trading style.
Visual Themes: Custom color schemes and line styles offer a personalized charting experience, supporting better clarity and decision-making.
How It Works
The DEMA SuperTrend calculates the Average True Range (ATR) to measure market volatility and applies a multiplier to determine the band offset. Instead of using a standard moving average, it employs the Double Exponential Moving Average to smooth the price series. The result is a responsive overlay that adjusts more quickly to market shifts compared to the traditional SuperTrend.
Uptrend: Triggered when the price closes above the DEMA-adjusted upper band.
Downtrend: Triggered when the price closes below the DEMA-adjusted lower band.
Band Switching: When a crossover occurs, the indicator switches the band to the opposite side of the price, signaling a potential change in trend direction.
Visual cues and color-coded zones on the chart enhance interpretability, making it easier for traders to react promptly to shifts in momentum.
Conclusion
The DEMA SuperTrend indicator combines the best of both worlds—robust trend-following logic and advanced smoothing—offering traders a powerful tool for identifying and tracking market trends with enhanced accuracy. Its versatility, responsiveness, and customization features make it suitable for both intraday and swing trading strategies.
Disclaimer
This indicator is intended for educational and informational purposes only. It does not constitute financial advice or a recommendation to buy or sell any financial instrument. Users should conduct their own research and risk assessment before making trading decisions.
Enigma Sniper 369The Enigma Sniper 369 is an innovative, customizable trading indicator designed to identify high-probability reversal setups during key market sessions.
Unlike generic trend-following or scalping tools, this indicator combines price action analysis with session-based filtering to pinpoint entries where candles exhibit specific structural characteristics, offering traders a unique edge in both trending and ranging markets.
By replacing traditional signal arrows with dynamic support/resistance lines, it provides visual clarity for trade management, making it suitable for scalpers, swing traders, and those seeking precise entry and exit levels.
What Makes It Original?
The Enigma Sniper 369 stands out due to its hybrid approach to signal generation and visualization:
Session-Specific Signals: It targets setups within user-defined "kill zones" (e.g., London and US sessions), leveraging high-volatility periods to improve signal reliability.
Candle Structure Analysis: Signals are based on a candle’s body closing relative to its midpoint and wick behavior compared to the prior candle, capturing reversals regardless of whether the candle is bullish or bearish.
Dynamic Line Visualization: Instead of cluttering charts with arrows, it plots two lines per signal (at the candle’s extreme and 50% of the wick), which act as adaptive support/resistance levels and auto-delete when price breaches them, aiding in trade confirmation and exit planning.
Customization: Traders can adjust line styles (solid, dotted, dashed) and colors individually, tailoring the visual output to their preferences.
This blend of price action, session timing, and interactive line-based feedback sets it apart from conventional indicators that rely solely on moving averages, RSI, or basic candlestick patterns.
What Does It Do?
The indicator identifies potential buy and sell setups by analyzing candle structure within user-specified trading sessions:
Buy Signals: Trigger when a candle’s close is above its midpoint ((high + low) / 2) and its low is lower than the previous candle’s low, indicating a potential bullish reversal or absorption of selling pressure. This can occur on both bullish and bearish candles, capturing unique setups where price rejects lower levels.
Sell Signals: Trigger when a candle’s close is below its midpoint and its high is higher than the previous candle’s high, suggesting a bearish reversal or rejection of higher prices.
Line Visualization:
For buy signals: Plots a line at the candle’s low and another at 50% of the lower wick (from the body bottom to the low), serving as support levels.
For sell signals: Plots a line at the candle’s high and another at 50% of the upper wick (from the body top to the high), acting as resistance levels.
Lines extend right and automatically delete when the candle’s close crosses them (close < buy line or close > sell line), signaling a potential exit or invalidation.
Session Filter: Signals only appear during user-defined London and US session hours, focusing on high-liquidity periods.
EMA Filter: An optional 50-period EMA filter ensures signals align with the broader trend, reducing noise in choppy markets.
How Does It Work?
The indicator’s calculations are rooted in price action and market structure, with the following key components:
Candle Midpoint Analysis:
For buy signals, the candle must close above (high + low) / 2, indicating buyer control despite a lower wick probing below the prior candle’s low. This suggests absorption of sell orders, often seen in reversals or liquidity grabs.
For sell signals, the close must be below (high + low) / 2, showing seller dominance after a high wick exceeds the prior candle’s high, hinting at rejection or distribution.
This midpoint rule allows the indicator to detect setups in both bullish and bearish candles, unlike traditional patterns that focus only on candle color.
Wick Comparison:
Buy signals require low < low , confirming the candle probed deeper than the prior low, potentially trapping sellers before a reversal.
Sell signals need high > high , indicating a higher wick that may have tested resistance or trapped buyers.
This wick behavior aligns with concepts like stop-hunting or smart money reversals, where large players exploit liquidity before reversing price.
Session-Based Kill Zones:
Users define start and end hours for London and US sessions (default: 1 AM–11 PM UTC for both, adjustable). Signals are restricted to these periods, capitalizing on increased volatility and institutional activity during major market hours.
This avoids low-volume periods where false breakouts are common, enhancing signal quality.
EMA Trend Filter:
An optional 50-period EMA filter (enabled by default) ensures buy signals occur when the EMA is rising (ema > ema ) and sell signals when it’s falling (ema < ema ).
This aligns setups with the broader trend, reducing whipsaws in sideways markets while still allowing reversals within trends.
Line-Based Visualization:
Instead of arrows, the indicator plots two lines per signal:
Buy: One at the candle’s low (key support) and one at 50% of the lower wick (from math.min(open, close) to low), offering a secondary support level.
Sell: One at the candle’s high (key resistance) and one at 50% of the upper wick (from math.max(open, close) to high), providing a secondary resistance level.
The 50% wick line approximates a midpoint of the candle’s rejection zone, useful for setting stops or targets.
Lines auto-delete when close crosses them, dynamically confirming whether the setup holds or fails.
Customization:
Line Styles: Users can set each line (buy low, buy wick, sell high, sell wick) to solid, dotted, or dashed via dropdowns. Defaults are solid for low/high lines and dotted for wick lines for visual distinction.
Line Colors: Individual color pickers allow full control over each line’s appearance, with defaults of green (buy low), lighter green (buy wick), red (sell high), and lighter red (sell wick).
Underlying Concepts
The Enigma Sniper 369 is inspired by advanced price action concepts and market dynamics:
Liquidity and Rejection: The wick conditions (low < low , high > high ) target setups where price tests prior extremes, often triggering stops or trapping early entrants before reversing. This aligns with smart money tactics seen in order block or breaker patterns.
Midpoint Control: Requiring the close to be above/below the candle’s midpoint ensures the candle reflects genuine buyer/seller commitment, filtering out indecision candles like doji or narrow-range bars.
Session Volatility: By focusing on London and US sessions, the indicator exploits periods of high institutional activity, where reversals are more likely due to order flow and liquidity.
Dynamic Levels: The auto-deleting lines mimic adaptive support/resistance, updating in real-time as price confirms or invalidates setups, reducing chart clutter and aiding decision-making.
Trend Alignment: The optional EMA filter incorporates a momentum-based trend check, blending reversal signals with directional bias for higher-probability trades.
Unlike common indicators that rely on lagging oscillators (e.g., RSI, MACD) or static patterns (e.g., engulfing candles), this method uses real-time candle structure and session context to capture setups with immediate relevance, making it versatile for scalping, day trading, or swing trading.
How to Use It
Add to Chart:
Load the Enigma Sniper 369 indicator on TradingView by pasting the script into the Pine Editor and clicking “Add to Chart.”
Configure Settings:
Open the indicator’s settings to customize:
Kill Zones: Adjust London Start/End Hour and US Start/End Hour (in UTC) to match your trading sessions (default: 1 AM–11 PM UTC). Set to 0–23 for all-day signals if desired.
EMA Filter: Enable/disable the 50-period EMA filter (default: enabled) and adjust the EMA Period (default: 50) to align with your timeframe.
Line Styles: Choose “Solid,” “Dotted,” or “Dashed” for each line (buy low, buy wick, sell high, sell wick). Defaults are solid for low/high, dotted for wick lines.
Line Colors: Pick colors for each line via color pickers. Defaults are green (buy low), lighter green (buy wick), red (sell high), lighter red (sell wick).
Example: For a cleaner chart, set wick lines to dotted and adjust colors to contrast your chart background.
Interpret Signals:
Buy Setup: When a buy signal triggers, two green lines appear: one at the candle’s low (primary support) and one at 50% of the lower wick (secondary support).
Consider entering long near these levels, with a stop below the low line.
The lines remain until close falls below them, signaling a potential exit or failure.
Sell Setup: Two red lines appear: one at the candle’s high (primary resistance) and one at 50% of the upper wick (secondary resistance).
Consider entering short near these levels, with a stop above the high line.
Lines delete when close exceeds them, indicating a breakout or invalidation.
Use the EMA filter to confirm signals align with the trend (e.g., buy only when EMA is rising).
Trading Tips:
Timeframes: Works on any timeframe, but 5M–1H is ideal for scalping/day trading, while 4H–Daily suits swing trading.
Confirmation: Pair with other tools (e.g., support/resistance, volume) to validate setups. The lines serve as dynamic levels for confluence.
Risk Management: Place stops beyond the primary line (low for buys, high for sells) and target the next key level or a risk-reward ratio (e.g., 1:2).
Session Focus: Adjust kill zones to your market (e.g., 2 AM–5 AM UTC for London open). Disable session filters for 24/7 markets like crypto.
Alerts: Set alerts for “Buy Alert” or “Sell Alert” to get notified when signals trigger (via TradingView’s alert system).
Example Scenario:
On a 15M EUR/USD chart during London open (2 AM UTC):
A candle closes above its midpoint with a low below the prior candle’s low, triggering a buy signal.
Two green lines appear: one at the low (1.0850) and one at 50% of the wick (1.0855).
Enter long near 1.0855, stop below 1.0850, target 1.0880 (next resistance).
If close drops below 1.0850, lines delete, signaling exit or reevaluation.
Who Should Use It?
Scalpers: Catch quick reversals during high-volatility sessions with precise entry/exit levels.
Day Traders: Use the lines to trade intraday setups with clear risk management.
Swing Traders: Apply on higher timeframes to capture larger reversals with dynamic support/resistance.
Price Action Enthusiasts: Leverage the indicator’s focus on candle structure and rejection zones.
Limitations
False Signals: Like all indicators, it can produce false signals in choppy markets. Use the EMA filter and external confirmation to reduce noise.
Session Dependency: If kill zones are misconfigured, signals may be limited. Test settings for your asset (e.g., crypto may need broader hours).
Learning Curve: Beginners should practice interpreting the lines as support/resistance and test on demo accounts before live trading.
Why Choose Enigma Sniper 369?
This indicator offers a fresh take on reversal trading by blending candle structure, session timing, and adaptive visualization. Its customizable lines and auto-deletion feature reduce chart clutter while providing actionable levels, empowering traders to make informed decisions. Whether you’re scalping the London open or swinging on daily charts, the Enigma Sniper 369 equips you with a versatile tool to snipe high-probability setups with precision.
Feedback Welcome
I hope you find the Enigma Sniper 369 valuable! Please share your feedback, suggestions, or results in the comments or via direct message. Happy trading!
Chandelier ExitChandelier Exit (Custom Time Frame)
This custom version of the Chandelier Exit indicator allows you to perform calculations on a custom time frame while displaying the results on your current chart. By default, it calculates the ATR and stop levels on a selected time frame (e.g., 15 minutes) but plots the buy/sell signals, long/short stop levels, and highlight states on your active chart time frame (e.g., 5 minutes).
Key Features:
• Customizable Time Frame: Choose any time frame for the ATR calculations (default is 15 minutes).
• Stop Levels: Displays dynamic stop levels based on the Chandelier Exit method.
• Alerts: Set alerts for changes in direction, buy/sell signals, or stop level breaches.
• Visual Customization: Easily toggle visual settings for buy/sell labels and highlight states.
Use this indicator to fine-tune your entry and exit strategies by incorporating longer-term price behavior while trading on shorter time frames.
MA Smoothed RSI For LoopMA Smoothed RSI For Loop
Introduction
The MA Smoothed RSI For Loop is a refined momentum indicator that enhances the classic Relative Strength Index (RSI) through advanced smoothing techniques and intelligent visual cues. By applying a moving average smoothing process within a for loop structure and integrating upper and lower threshold logic, this tool enables traders to detect trends with greater clarity and robustness. It is specifically built for traders who seek high-confidence signals through smoothed momentum analysis and contextual visual feedback.
Key Features
For Loop RSI Smoothing: Applies iterative moving average smoothing to the RSI using a for loop, reducing false signals and improving overall trend accuracy.
Threshold-Based Trend Detection: Incorporates upper and lower RSI thresholds to filter out weak signals and confirm strong momentum-driven trends.
Customizable Moving Averages: Supports a variety of moving average types (such as SMA, EMA, WMA) and lengths for tailored responsiveness.
Dynamic Color Feedback: Colors adapt based on RSI position and momentum, making it easy to interpret strength, reversal zones, or trend continuations.
Real-Time Trend Table: Trend Direction (uptrend/downtrend), Strength of Trend (based on RSI slope and threshold behavior) and Duration (number of bars in the current trend phase).
Weighted Loop Control: Allows users to apply weights during the smoothing loop, fine-tuning the indicator’s sensitivity.
How It Works
The indicator begins by computing the RSI from price data. It then enters a for loop where the RSI is repeatedly smoothed with a chosen moving average. This recursive process stabilizes the signal, minimizing the effects of short-term noise.
Upper and lower RSI thresholds are applied to define meaningful zones of momentum. Only when the smoothed RSI crosses and sustains beyond these thresholds is a trend considered significant. The direction and persistence of these movements are visually encoded using dynamic color schemes and captured numerically in the trend table.
This dual-layered method smoothing and threshold filtering provides a robust structure for identifying and monitoring meaningful price momentum.
Use Case
In the example described above we have one long and short positions early triggered once the momentum signal crossed its related threshold up in the case of bullish trend and down for the bearish one.
Conclusion
The MA Smoothed RSI For Loop offers a sophisticated approach to trend analysis by blending smoothed RSI logic with threshold-based confirmation and rich visual interpretation.
Disclaimer
This indicator is designed for educational and informational use only. It should not be construed as financial advice or a recommendation to trade. Always perform your own analysis and consult a qualified financial advisor before making investment decisions. Use at your own risk.
Reversal Strength Meter – Adib NooraniThe Reversal Strength Meter is an oscillator designed to identify potential reversal zones based on supply and demand dynamics. It uses smoothed stochastic logic to reduce noise and highlight areas where momentum may be weakening, signaling possible market turning points.
🔹 Smooth, noise-reduced stochastic oscillator
🔹 Custom zones to highlight potential supply and demand imbalances
🔹 Non-repainting, compatible across all timeframes and assets
🔹 Visual-only tool — intended to support discretionary trading decisions
This oscillator assists scalpers and intraday traders in tracking subtle shifts in momentum, helping them identify when a market may be preparing to reverse — always keeping in mind that trading is based on probabilities, not certainties.
📘 How to Use the Indicator Efficiently
For Reversal Trading:
Buy Setup
– When the blue line dips below the 20 level, wait for it to re-enter above 20.
– Look for reversal candlestick patterns (e.g., bullish engulfing, hammer, or morning star).
– Enter above the pattern’s high, with a stop loss below its low.
Sell Setup
– When the blue line rises above the 80 level, wait for it to re-enter below 80.
– Look for bearish candlestick patterns (e.g., bearish engulfing, inverted hammer, or evening star).
– Enter below the pattern’s low, with a stop loss above its high.
🛡 Risk Management Guidelines
Risk only 0.5% of your capital per trade
Book 50% profits at a 1:1 risk-reward ratio
Trail the remaining 50% using price action or other supporting indicators
Reversal Scalping Ribbon - Adib NooraniThe Reversal Scalping Ribbon is a trend-following overlay tool designed to visually identify potential reversal zones based on price extremes and dynamic volatility bands. It calculates adaptive upper and lower bands using price action and custom ATR logic, helping traders quickly assess market direction and possible turning points
🔹 Volatility-adjusted bands based on price highs/lows
🔹 Color-coded ribbons to indicate trend bias and potential reversal shifts
🔹 No repainting, works on all timeframes and assets
🔹 Visual-only display, no trade signals — supports discretion-based entries
This ribbon is designed for scalpers and intraday traders to spot reversal setups with clarity. It enhances your trading by showing real-time market bias without unnecessary distractions. By focusing on probabilities, it helps to improve decision-making in fast-paced environments
How to use the indicator efficiently
For Reversal Trading:
Buy: When price closes below the green ribbon with a red candle, then re-enters with a green candle. Enter above the high of the green candle with a stop loss below the lowest low of the recent green/red candles
Sell: When price closes above the red ribbon with a green candle, then re-enters with a red candle. Enter below the low of the red candle with a stop loss above the highest high of the recent red/green candles
Risk Management:
Limit risk to 0.5% of your capital per trade
Take 50% profit at a 1:1 risk-reward ratio
For the remaining 50%, trail using the lower edge of the green band for buys and the upper edge of the red band for sells