Waddah Attar Explosion with TDI First of all, a big shoutout to @shayankm, @LazyBear, @Bromley, @Goldminds and @LuxAlgo, the ones that made this script possible.
This is a version of Waddah Attar Explosion with Traders Dynamic Index.
WAE provides volume and volatility information. Also, WAE calculation was changed to a full-on MACD, to provide the momentum: the idea is to "assess" which MACD bars have significant momentum (i.e. crossover the Explosion Line)
TDI provides momentum, divergences as well as overbought and oversold areas. There is also a RSI on a different timeframe, for convergence.
Almost everything is editable:
- All moving averages are customizable, including the TRAMA, from @LuxAlgo
Waddah Attar Explosion_
- Three different crossing signals: histogram crossing contracting Explosion Line, expanding Explosion Line and ascending Explosion Line while both Bolling Bands are expanding; Explosion Line shows different color when expanding.
- Explosion line signals: Below DeadZone line and Exhaustion (highest value in a given lookback period). You can set a predefined EPL slope to filter out some noise.
- Deadzone signal : Deadzone squeeze ( lowst value in a given lookback period)
TDI:
- Overbought an Oversold signals. The OB and OS shapes have two colors, in order to display extreme signals on current timeframe or extreme signals on current and different time frame.
- Visual display of RSI outside the Bollinger Bands, and crossing of RSI Moving Average crossing of zero line.
I believe this combination is great for so many reasons!
Like the idea of TTM Squeeze? You can tune the Deadzone and Explosion lines to look for a volatility breakout
Like trading divergences or want to filter out extreme areas? The RSI is great for that
You like the using the MACD strategy but don't like the amount of false signals given? this WAE version filters some of them out.
If you are a Bollinger bands fan, you can customize both indicators to trade breakouts and/or mean reversion strategies, and filter out exhaustion of the bands expansion
This is my first publication, so give it a go and provide feedback if possible.
ابحث في النصوص البرمجية عن "luxalgo"
Moon Phases + Daily, Weekly, Monthly, Quarterly & Yearly Breaks█ Moon Phases
From LuxAlgo description.
Trading moon phases has become quite popular among traders, believing that there exists a relationship between moon phases and market movements.
This strategy is based on an estimate of moon phases with the possibility to use different methods to determine long/short positions based on moon phases.
Note that we assume moon phases are perfectly periodic with a cycle of 29.530588853 days (which is not realistically the case), as such there exists a difference between the detected moon phases by the strategy and the ones you would see. This difference becomes less important when using higher timeframes.
█ Daily, Weekly, Monthly, Quarterly & Yearly Breaks
This indicator marks the start of the selected periods with a vertical line that help with identifying cycles.
It allows to enable or disable independently the daily, weekly, monthly, quarterly and yearly session breaks.
This script is based on LuxAlgo and kaushi / icostan scripts.
Moon Phases Strategy
Year/Quarter/Month/Week/Day breaks
Month/week breaks
[potatoshop] Volume Profile lower timeframeThis script is a volume profile that displays the volume of transactions in price blocks over a recent period of time.
For a more detailed representation, OHCLV values on the time frame lower than the time zone on the chart were called and expressed.
Low time frames are adjustable.
You can adjust the number of blocks and the most recent time period that you want to view.
Although it cannot be compared to the volume indicators provided for paid users of Trading-View, it has functioned by displaying transactions that are difficult to find on open source.
Displays the amount traded in each block and the percentage of the total over a given period.
POC represents the middle value of the block with the highest transaction volume as a line.
TPOC represents the block that stayed the longest regardless of the volume of transaction.
The reversal line appears when you determine the trading advantage of the rising and falling closing on a block basis and then have a different value from the neighboring blocks.
(I didn't mean it much, but I just put it in for fun.)
It represents the total volume of transactions traded in each block, and there are also check boxes in the settings window that represent the volume of transactions that closed higher and closed lower.
You can specify the color of each block.
The highest and lowest values for the set period and the total sum of each block are displayed at the bottom of the box.
Because it was made using a lot of arrays, the total transaction volume was marked separately to check the value.
When expressing the price block according to the trading volume percentage, it was a pity that the minimum pixel was 1 bar, so it could not be expressed delicately.
Although set to bar_time in Box properties xloc, 1 bar was actually the minimum unit of the X-axis value.
The logic used to place the transaction volume for each block is as follows.
1. Divide the difference between the high and low values of 1 LTF bar by the transaction volume .
2. Find the percentage of this LTF bar within each block.
3. Multiply the ratio by the transaction volume again.
4. Store the value in each block cell.
Below are the codes of the people I referred to this time.
1. ‘Time & volume point of control (TPOC & VPOC)’ by quantifytools
2. ‘Volume Profile ’ by LuxAlgo
3. ‘Volume Profile and Volume Indicator by DGT’ by dgtrd
The script is for informational and educational purposes only.
이 스크립트는 최근 일정 기간동안의 거래량을 가격 블록단위로 표시해 주는 볼륨 프로화일입니다.
좀 더 자세한 표현을 위해 차트상의 시간대보다 낮은 시간 프레임상의 OHCLV 값들을 호출하여 표현하였습니다.
낮은 시간 프레임은 조절 가능합니다..
보고 싶은 최근 일정 기간과 블럭 갯수를 조절할 수 있습니다.
트뷰 유료 사용자들을 위해 제공하는 지표와는 비교할 수는 없지만, 오픈 소스상에서는 찾기 힘든 거래량을 표시해 기능을 넣었습니다.
각 블럭에서 거래되었던 양 과 주어진 기간 동안의 총량 대비 퍼센트를 표시해 줍니다.
POC는 거래량이 가장 많았던 블럭의 중간값을 라인으로 표현해 줍니다.
TPOC는 거래량에 상관없이 가장 오랜 시간 머물렸던 블럭을 표현해 줍니다.
반전선은 블럭 단위로 상승 마감과 하락 마감의 거래량 우세를 결정한 뒤, 이웃 블럭들하고 다른 값을 가질 때 나타납니다.
(어떤 뜻을 갖고 만든 건 아니고 그냥 재미로 넣어 보았습니다.)
각 블럭에서 거래되었던 총거래량을 표현해 주며, 또한 설정창에서 상승 마감한 거래량과 하락 마감한 거래량을 표현하는 체크 박스가 있습니다.
각 블럭의 색깔을 지정하실 수 있습니다.
설정된 기간 동안의 최고값과 최저값, 각 블럭을 합친 총량을 박스 하단에 표시해 두었습니다.
어레이를 많이 사용하여 만들었기 때문에 값의 확인을 위해 전체 거래량을 따로 표시하였습니다.
가격 블럭을 거래량 퍼센트에 따라 표현할 때, 최소 픽셀이 1bar 이어서 섬세하게 표현 할 수 없어 안타까웠습니다.
박스 속성을 xloc.bar_time 로 설정하였지만 실제로는 1 bar가 X축 값의 최소 단위였습니다.
각 블록 별로 거래량을 배치 할 때 쓰인 로직은 다음과 같습니다.
1. 1 LTF bar의 하이 와 로우 값의 차이를 거래량으로 나누어 줍니다.
2. 각 블록 안에서 이 LTF bar가 차지 하는 비율을 구합니다.
3. 그 비율에 다시 거래량을 곱해 줍니다.
4. 그 값을 각 블록 셀에 저장해 줍니다.
밑에 제가 이번에 참고한 분들의 코드들입니다.
1. ‘Time & volume point of control (TPOC & VPOC)’ by quantifytools
2. ‘Volume Profile ’ by LuxAlgo
3. ‘Volume Profile and Volume Indicator by DGT’ by dgtrd
MAConverging + QQE Threshold This trading script is a trading strategy that is made up of 2 public indicators so credit goes to LuxAlgo and Jose5770. I have the 2 indicators listed below.
1) Moving Average Converging (LuxAlgo)
2) QQE Threshold (Jose5770)
This trading strategy is buying when the two indicators align, and then the take profit is the first red bar on the QQE Threshold histogram. It is not a set risk reward but instead a variable take profit strategy. I have the rules of the strategy listed below in order of how it works.
Long Position :
1. Wait for Moving Average Converging to be green
2. Candlestick is green from the QQE Threshold indicator
3. QQE Threshold histogram is green as well, then it enters the trade once we have these criteria met.
Take profit is the first red bar on the QQE Threshold histogram that appears and the trade will close.
Short Position :
1. Wait for Moving Average Converging to be red
2. Candlestick is red from the QQE Threshold indicator
3. QQE Threshold histogram is red as well, then it enters the trade once we have these criteria met.
Take profit is the first green bar on the QQE Threshold histogram that appears and the trade will close.
I hope everyone enjoys!
UM Nadaraya-Watson OscillatorDescription
This is a different take on the Nadaraya-Watson Estimator from both Jdhorty and LuxAlgo. Both great scripts, I encourage everyone to check them out. Think of this script as a measure of trend direction, direction change, and trend acceleration or deceleration. It is not a Moving Average, but you could think of it as loosely as an intelligent adaptive regression curve with the focus on trend direction. The Gaussian calculations prefer and add more weight to the most recent bars. The end result is the oscillator is more responsive with less lag and less prone to pure price noise.
How it Works
The indicator was added to the chart twice; once with an MA, once without. The oscillator indicates trend change by crossing up through the zero line or down through the zero line. Once the indicator turns positive, we are in a positive trend until it crosses below zero and then the trend turns negative. I implemented a Moving Average overlay for additional signal determination; if the configured MA (EMA, SMA, WMA, or Nadaraya-Watson Estimator) trends higher, it is green. When trending down, it is red. The indicator also changes the color of the price bars; when the indicator below zero and red, the price bars are red. When the indicator is above zero and green, the price bars are green.
I marked up the chart and indicator to identify LONG, SHORT, and divergences between price and oscillator.
Default Settings
The default settings are 16 for Bandwidth and a WMA with 110. This is shown in the chart example. There directional arrows, but they are off by default. The Price bars are colored green or red to match the oscillator and the bar coloring is on by default.
All settings are user-configurable including bandwidth, MA type, MA length, bar coloring, and arrows.
Suggested Settings and uses
I personally like the 30 min chart with a bandwidth of 16 and a WMA of 110. The bandwidth 8 and 8 period EMA or WMA also work well on 6 hour and daily charts. Add this to your chart arsenal and use your favorite indicators for confirmation. This indicator works well on the 30 minute chart for inverse ETFs as well (SQQQ, SOXS, TZA). Also, the oscillator is good for identifying divergences between price and and indicator. (see chart for illustration)
Experiment with settings and adapt them to your trading style.
Alerts
If you right click the indicator, and select add alert, I have configured 4 standard alerts: A bullish cross above zero, A bearish cross below zero, An MA bullish turned up to trend higher, (green), and an MA bearish turned down to trend lower (red).
SuperTrend AI Oscillator StrategySuperTrend AI Oscillator Strategy
Overview
This strategy is a trend-following approach that combines the SuperTrend indicator with oscillator-based filtering.
By identifying market trends while utilizing oscillator-based momentum analysis, it aims to improve entry precision.
Additionally, it incorporates a trailing stop to strengthen risk management while maximizing profits.
This strategy can be applied to various markets, including Forex, Crypto, and Stocks, as well as different timeframes. However, its effectiveness varies depending on market conditions, so thorough testing is required.
Features
1️⃣ Trend Identification Using SuperTrend
The SuperTrend indicator (a volatility-adjusted trend indicator based on ATR) is used to determine trend direction.
A long entry is considered when SuperTrend turns bullish.
A short entry is considered when SuperTrend turns bearish.
The goal is to capture clear trend reversals and avoid unnecessary trades in ranging markets.
2️⃣ Entry Filtering with an Oscillator
The Super Oscillator is used to filter entry signals.
If the oscillator exceeds 50, it strengthens long entries (indicating strong bullish momentum).
If the oscillator drops below 50, it strengthens short entries (indicating strong bearish momentum).
This filter helps reduce trades in uncertain market conditions and improves entry accuracy.
3️⃣ Risk Management with a Trailing Stop
Instead of a fixed stop loss, a SuperTrend-based trailing stop is implemented.
The stop level adjusts automatically based on market volatility.
This allows profits to run while managing downside risk effectively.
4️⃣ Adjustable Risk-Reward Ratio
The default risk-reward ratio is set at 1:2.
Example: A 1% stop loss corresponds to a 2% take profit target.
The ratio can be customized according to the trader’s risk tolerance.
5️⃣ Clear Trade Signals & Visual Support
Green "BUY" labels indicate long entry signals.
Red "SELL" labels indicate short entry signals.
The Super Oscillator is plotted in a separate subwindow to visually assess trend strength.
A real-time trailing stop is displayed to support exit strategies.
These visual aids make it easier to identify entry and exit points.
Trading Parameters & Considerations
Initial Account Balance: Default is $7,000 (adjustable).
Base Currency: USD
Order Size: 10,000 USD
Pyramiding: 1
Trading Fees: $0.94 per trade
Long Position Margin: 50%
Short Position Margin: 50%
Total Trades (M5 Timeframe): 1,032
Visual Aids for Clarity
This strategy includes clear visual trade signals to enhance decision-making:
Green "BUY" labels for long entries
Red "SELL" labels for short entries
Super Oscillator plotted in a subwindow with a 50 midline
Dynamic trailing stop displayed for real-time trend tracking
These visual aids allow traders to quickly identify trade setups and manage positions with greater confidence.
Summary
The SuperTrend AI Oscillator Strategy is developed based on indicators from Black Cat and LuxAlgo.
By integrating high-precision trend analysis with AI-based oscillator filtering, it provides a strong risk-managed trading approach.
Important Notes
This strategy does not guarantee profits—performance varies based on market conditions.
Past performance does not guarantee future results. Markets are constantly changing.
Always test extensively with backtesting and demo trading before using it in live markets.
Risk management, position sizing, and market conditions should always be considered when trading.
Conclusion
This strategy combines trend analysis with momentum filtering, enhancing risk management in trading.
By following market trends carefully, making precise entries, and using trailing stops, it seeks to reduce risk while maximizing potential profits.
Before using this strategy, be sure to test it thoroughly via backtesting and demo trading, and adjust the settings to match your trading style.
Advanced Order Blocks by AccountantXThe "Advanced Order Blocks by AccountantX" is tool designed to identify and visualize significant order blocks in the market.
This script goes beyond traditional order block detection by integrating advanced features such as volume threshold filtering, ATR-based sizing, and higher timeframe considerations.
How It works:
A. General data :
- Order Block Detection: Identifies bullish and bearish order blocks based on swing highs and lows, with options to filter by volume thresholds to ensure significant levels.
- Volume Threshold: Only displays order blocks where the volume exceeds a user-defined threshold, ensuring the highlighted zones are of particular significance.
- ATR-Based Sizing: Offers the option to use the Average True Range (ATR) for sizing order blocks, allowing for dynamic adjustment based on market volatility.
- Higher Timeframe Integration: Includes the ability to display order blocks from a higher timeframe, providing a broader market perspective.
- Customizable Appearance: Users can customize the colors and transparency of the order blocks, ensuring they fit seamlessly with any chart setup.
B. Code explanation :
- The script allows you to set a minimum volume threshold. Order blocks are only shown if the volume during their formation exceeds this threshold, ensuring that only significant price levels are highlighted.
- When enabled, the ATR (Average True Range) is used to size the order blocks. This means the height of the blocks adjusts dynamically with market volatility, providing a more accurate representation of significant zones.
- The script can display order blocks from a higher timeframe on your current chart. This is useful for aligning shorter-term trading decisions with broader market trends.
C. How to Use:
a) Set the volume threshold to filter out less significant order blocks. Adjust the value according to the typical volume of your trading instrument;
b) Enable the ATR-based sizing and set the period and multiplier to match your trading style. This helps in identifying order blocks relative to market volatility;
c) Choose a higher timeframe if you want to see significant order blocks from a broader market perspective. This can help in making more informed trading decisions.
Acknowledgements:
This script builds upon traditional order block concepts by integrating advanced features and customization options. Special thanks to the TradingView community( @fluxchart, @LuxAlgo_Team) for providing foundational concepts and inspiration.
Important Note
This script is provided as-is for educational purposes.
Predictive Channel SignalsThis script is a comprehensive tool designed to enhance trading strategies by utilizing predictive channels, multiple moving average types, and dynamic signal generation. The script is meticulously crafted for traders who seek to identify potential support and resistance levels, anticipate market reversals, and optimize entry and exit points through advanced technical analysis featuring with the help of codes provided by LuxAlgo.
Core Features:
Dynamic Predictive Channels: The script calculates predictive channels based on price movements and volatility, represented by adjustable factors for sensitivity and slope. These channels adapt to changing market conditions, providing real-time support and resistance levels.
Versatile Moving Averages: Users can select from a variety of moving average types, including SMA, EMA, SMMA (RMA), HullMA, WMA, VWMA, DEMA, and TEMA. This flexibility allows traders to tailor the analysis to their specific strategy and market view.
Signal Generation: The script generates buying and selling signals based on the interaction between moving averages and predictive channels. Signals are categorized into low, mid, and high tiers, indicating the strength and potential risk/reward of the trade opportunity.
Visual Cues and Customization: With an emphasis on usability, the script offers customizable color schemes for easy interpretation of bullish and bearish zones, moving averages, and trading signals. Traders can quickly identify market trends and reversal points at a glance.
Advanced Calculations: Utilizing calculations such as the Average True Range (ATR) for volatility assessment, the script ensures that signals are both sensitive to market dynamics and robust against false positives.
Ideal for Traders Who:
Prefer a technical analysis approach with a focus on moving averages and price channels.
Desire a customizable tool that can adapt to different trading styles and market conditions.
Seek to enhance their trading strategy with predictive insights and actionable signals.
Circle = Entry Point
End of polyline = Stop Loss
1 Circle = Low Strength
2 Circles = Mid Strength
3 Circles = High Strength
Volume Profile HeatmapA variation of a Volume Profile based on code originally by LuxAlgo. () The traditional bar chart is replaced with full-width bars that are brighter for high volume price levels.
Like a traditional VP, its purpose is to visualize how volume corresponds to specific price levels, allowing you to get a quick idea of where the most activity is occurring, and where it hasn't been. This information may provide clues as to where price action may return, areas of support and resistance , and regions where price may move quickly. The basic concepts behind any Volume Profile (or Price by Volume Chart) should apply here as well. (investopedia article)
Inputs are set up such that you can customize the lookback period, number of rows, and width of rows for most major timeframes individually. Timeframes between those available will use the next lower timeframe settings (e.g., 2m chart will use the 1m settings.)
This indicator is experimental and is likely to receive further updates.
Simple ICT Sweep + FVG (LuxAlgo Swings FIXED)something i created if anyone can improve it or change for better visual
Kernel EnvelopeKernel Envelope is a non-repainting dynamic band system designed to identify price overextension, trend exhaustion, volatility expansion, and high-probability reversal points.
Using a kernel-based smoothing technique, the indicator builds adaptive upper and lower envelopes that respond fluidly to market structure while maintaining exceptional stability for systematic trading.
These envelopes form the core of the system and allow traders to:
Detect bullish rebounds from the lower band
Detect bearish rejections from the upper band
Filter trend-following entries using volatility context
Identify zones where price is statistically stretched
Highlight exhaustion points during impulsive moves
The indicator also includes an integrated pivot-based trendline engine, which draws dynamic support and resistance levels derived from structural highs and lows.
These lines auto-extend forward and include breakout alerts, making them ideal for breakout traders, liquidity hunters, and structure-based strategies.
Key Features
Fully non-repainting envelope calculation
Adaptive smoothing responsive to market volatility
Clean gold/silver visual theme for maximum clarity
Glow-style rendering for enhanced band visibility
Automatic trendline generation using pivot points
Breakout alerts for upper and lower trendlines
Rebound and rejection alerts on envelope interaction
Works on all markets and timeframes
Whether you trade reversals, breakouts, or trend continuation setups, Kernel Envelope provides a reliable, low-noise framework for identifying high-quality trade signals.
Acknowledgment
This indicator is inspired by the original Nadaraya-Watson Envelope by LuxAlgo, whose work served as the foundation for further research and development.
Follow Me on X
For more indicators, updates, automated strategies, and educational content, you can follow me here:
X (Twitter): x.com
TRZigZagLibLibrary "TRZigZagLib"
method directionName(this)
Gets pivot direction as string
Namespace types: Pivot
Parameters:
this (Pivot) : Pivot instance
Returns: "HIGH" or "LOW"
method isHigh(this)
Checks if pivot is a high
Namespace types: Pivot
Parameters:
this (Pivot) : Pivot instance
Returns: true if pivot is a high
method isLow(this)
Checks if pivot is a low
Namespace types: Pivot
Parameters:
this (Pivot) : Pivot instance
Returns: true if pivot is a low
method newSettings(minLength, minBarSize, maxBarSize)
Creates default ZigZag settings
Namespace types: series int, simple int, input int, const int
Parameters:
minLength (int) : Minimum pivot length (default: 10)
minBarSize (int) : Minimum bars between pivots (default: 5)
maxBarSize (int) : Maximum bars to lookback (default: 300)
Returns: New ZigZagSettings instance
method setLineStyle(this, lineColor, lineWidth, lineStyle)
Sets line appearance
Namespace types: ZigZagSettings
Parameters:
this (ZigZagSettings) : Settings instance
lineColor (color)
lineWidth (int)
lineStyle (string)
Returns: Modified settings instance
method newZigZag(settings, depth)
Creates a new ZigZag instance
Namespace types: ZigZagSettings
Parameters:
settings (ZigZagSettings) : ZigZag settings
depth (int) : Depth value for this ZigZag
Returns: New ZigZag instance
method calculate(this)
Calculates ZigZag using LuxAlgo-style pivot detection
Namespace types: ZigZag
Parameters:
this (ZigZag) : ZigZag instance
method getLastPivots(this, count)
Gets the last N pivots
Namespace types: ZigZag
Parameters:
this (ZigZag) : ZigZag instance
count (int) : Number of pivots to get (default: 5)
Returns: Array of pivots
method getPivot(this, index)
Gets pivot at index
Namespace types: ZigZag
Parameters:
this (ZigZag) : ZigZag instance
index (int) : Index (0 = most recent)
Returns: Pivot or na
method truncate(this, maxBars)
Truncates old pivots beyond lookback window
Namespace types: ZigZag
Parameters:
this (ZigZag) : ZigZag instance
maxBars (int) : Maximum bars to keep
method newMultiZigZag(settings, minDepth, maxDepth, count)
Creates a new MultiZigZag manager
Namespace types: ZigZagSettings
Parameters:
settings (ZigZagSettings) : Base settings for all ZigZags
minDepth (int) : Minimum depth value
maxDepth (int) : Maximum depth value
count (int) : Number of ZigZag instances (max 11)
Returns: New MultiZigZag instance
method calculateAll(this)
Updates all ZigZag instances
Namespace types: MultiZigZag
Parameters:
this (MultiZigZag) : MultiZigZag instance
method getZigZag(this, index)
Gets ZigZag at index
Namespace types: MultiZigZag
Parameters:
this (MultiZigZag) : MultiZigZag instance
index (int) : Index (0 to count-1)
Returns: ZigZag instance or na
method getDepth(this, index)
Gets depth value at index
Namespace types: MultiZigZag
Parameters:
this (MultiZigZag) : MultiZigZag instance
index (int) : Index (0 to count-1)
Returns: Depth value
method size(this)
Gets total number of ZigZag instances
Namespace types: MultiZigZag
Parameters:
this (MultiZigZag) : MultiZigZag instance
Returns: Count of ZigZag instances
method truncateAll(this, maxBars)
Truncates all ZigZag instances
Namespace types: MultiZigZag
Parameters:
this (MultiZigZag) : MultiZigZag instance
maxBars (int) : Maximum bars to keep
method distance(p1, p2)
Calculates distance between two pivots
Namespace types: Pivot
Parameters:
p1 (Pivot) : First pivot
p2 (Pivot) : Second pivot
Returns: Price distance (absolute)
method barSpan(p1, p2)
Calculates bar span between two pivots
Namespace types: Pivot
Parameters:
p1 (Pivot) : First pivot
p2 (Pivot) : Second pivot
Returns: Bar span (absolute)
method isAlternating(pivots)
Checks if pivots are alternating (high-low-high or low-high-low)
Namespace types: array
Parameters:
pivots (array) : Array of pivots
Returns: true if alternating pattern exists
Pivot
Pivot point in the chart
Fields:
d (series int) : Direction: 1=high, -1=low
x (series int) : Bar index
y (series float) : Price
confirmed (series bool) : Pivot confirmation flag
ZigZagSettings
ZigZag configuration settings
Fields:
minLength (series int) : Minimum pivot detection length
minBarSize (series int) : Minimum bars between pivots
maxBarSize (series int) : Maximum bars to lookback
lineColor (series color) : ZigZag line color
lineWidth (series int) : ZigZag line width
lineStyle (series string) : ZigZag line style
ZigZag
Single ZigZag instance
Fields:
settings (ZigZagSettings) : Configuration settings
pivots (array) : Array of pivot points (max 25 for patterns)
lastUpdateBar (series int) : Last bar index when updated
depth (series int) : Current depth value
MultiZigZag
Multi-depth ZigZag manager
Fields:
zigzags (array) : Array of ZigZag instances (max 11)
depthValues (array) : Array of depth values being used
currentBar (series int) : Current bar index being processed
SYXX - HTF Candle Overlay
This script, titled "HTF Candle Overlay by SYXX," is designed to visualize the full range and structure of a higher-timeframe (HTF) candle directly onto a lower-timeframe chart. It helps traders maintain context by showing where the current price action sits relative to a much larger candle's boundaries. Combined with LuxAlgo Volume Node Profile.
1. 🔍 Primary Feature: Higher Timeframe Candle Projection
Configurable Timeframe: The user sets the desired HTF using the Interval input, which defaults to 'D' (Daily). The indicator then tracks the High, Low, Open, and Close of that HTF bar.
Live and Historical Drawing: The script uses box.new to draw boxes representing the candle's full range (High to Low).
Historical Boxes (if changeHTF): When a new HTF candle closes, the completed box for the previous period is drawn.
Live Box (if barstate.islast): The indicator draws a live, dynamic box for the current, incomplete HTF candle, which expands with every new High or Low on the lower chart.
2. 🎨 Visualization & Customization
Color-Coded Bias: The boxes are colored based on the HTF candle's direction:
Bullish/Long (BgLong): Green color is used if the HTF candle closed higher than it opened (close > htfOpen).
Bearish/Short (BgShort): Red color is used if the HTF candle closed lower than it opened.
Box Styling: Users can customize the box's appearance, including border color and style, border thickness, and background opacity (BoxOpacity).
Midline: An optional MidLine is calculated as the average of the HTF High and Low, acting as a potential support/resistance reference point.
Range Display: The indicator can display the range of the box in pips (BoxRangePips) or the percentage of movement relative to the full range (BoxRangePercentage).
Time Labels: It plots time labels that show the start and end time of the completed HTF period (e.g., "07:00 - 11:00").
3. 🚨 Alert System (Placeholders)
The script includes placeholder inputs for standard trading alerts, though the internal logic for checking these conditions is currently commented out or set to false:
Alert: Break Above/Below Box: To signal a breakout of the HTF High or Low.
Alert: Price Re-Enters Box: To signal a pullback back into the range.
Opening Range with Breakouts & Targets w/ Alerts [LuxAlgo]This is the exact Lux Algo opening range with Breakouts and Targets, but added the ability to fire alerts on buy and sell signals
Sima-Smart Money Concepts + RSI Candlestick [LuxAlgo]This indicator displays the RSI in a candlestick format and marks its support and resistance levels, as well as oversold and overbought zones based on Smart Money concepts.
In fact, this indicator is a combination of a candlestick-style RSI and a Smart Money indicator.
Morning ORB FVG Trigger✅ Overview
Morning ORB FVG Trigger is a complete intraday trading framework built around:
A Morning Opening Range Breakout (ORB)
The first Fair Value Gap (FVG) after that breakout
Strict risk management and position sizing
Optional HTF trend filter (Daily / Weekly / Monthly)
Optional Daily ATR filter to avoid extreme days
The script is designed for futures / indices / FX on intraday charts up to 15 minutes and for traders who want a clean, mechanical entry framework with clear risk.
🧠 Core idea
Define a morning opening range (e.g. 09:30–09:45).
Wait for a clean breakout above/below that range.
After the breakout, wait for the first FVG in breakout direction,
confirmed by the next candle (no immediate full reclaim).
Use a chosen stop logic + R:R factor to build risk/reward boxes.
Calculate position size based on your account risk.
(Optional) Only take trades:
In the direction of the HTF EMA trend (D/W/M).
On days where the morning range is within a band of the Daily ATR.
You can also disable all signals/boxes and use the script just as a visual ORB tool.
⏰ 1. ORB / Morning Range
Inputs (Main section)
Morning Range Session
Time window of the opening range in exchange time
Example: 09:30–09:45 for a 15-minute ORB.
You can type custom ranges (e.g. 09:30–09:35 for a 5-minute ORB).
Risk/Reward (TP factor)
Multiplier for the take-profit distance relative to the stop.
2.0 = TP is 2× the stop distance
1.5 = TP is 1.5× the stop distance
Show ORB range
If enabled, draws:
ORB high/low lines
ORB labels (e.g. 15min ORB high / low)
Optional midline
Extend ORB lines to the right (bars)
How many bars to extend the ORB high/low horizontally beyond the ORB itself.
Trade box width (bars)
Horizontal width (in bars) of:
Red risk box (entry–stop)
Green reward box (entry–TP)
Implementation details
The ORB is always calculated on 1-minute data internally, so it stays precise even on 5m/15m charts.
The script only works on intraday timeframes up to 15 minutes.
📦 2. FVG Block
Group: “FVG”
Threshold %
Minimum size of an FVG in % of price.
0 = every FVG
Higher values = only larger gaps
Auto threshold (from volatility)
If enabled, the minimum FVG size is derived from historical volatility
instead of a fixed percentage.
Allow breakout FVG partly inside ORB
Off (default): the FVG must lie fully outside the ORB.
On: the breakout FVG itself may still overlap the ORB a bit,
as long as it is the first one attached to the breakout move.
Enable FVG entry signals, boxes & alerts
On: full system – FVG detection, entry labels, risk/TP boxes, alerts.
Off: no entries, no risk/TP boxes, no alerts.
You only get the ORB and (optionally) the HTF dashboard, so you can trade your own setups.
Entry mode
Entry mode (Mid / Edge / NextOpen)
Mid – Entry at the midpoint of the FVG.
Edge – Long at the upper FVG edge, short at the lower FVG edge.
NextOpen – No limit order in the gap. Entry is placed at the next bar open after FVG confirmation.
Edge offset (ticks)
Additional offset for Edge entries:
Long:
+ticks = a bit above the FVG (more conservative)
-ticks = deeper into the FVG (more aggressive)
Short:
+ticks = a bit below the FVG
-ticks = deeper into the FVG
FVG detection logic
Uses a LuxAlgo-style 3-candle FVG pattern (gap between candle 1 and 3).
Only one FVG is taken: the first valid FVG after the ORB breakout in breakup direction.
The FVG candle is the middle bar; the script:
Detects the FVG on the previous bar.
Waits for the current bar to confirm it:
Bullish: current low must stay above the lower FVG boundary
Bearish: current high must stay below the upper FVG boundary
Only then an entry signal is generated.
🛑 3. Stop Logic
Group: “Stop Logic”
Stop mode (PrevBar / Pivot / FVG Candle)
PrevBar – Stop at the low/high of the candle before the FVG
(tight/aggressive).
FVG Candle – Stop at the low/high of the FVG candle itself
(medium).
Pivot – Stop at the most recent swing high/low
using pivotLeft / pivotRight pivots (more conservative).
Ticks (stop buffer)
Offset (in ticks) from the selected stop level.
> 0 = further away (more room, more risk)
< 0 = closer (tighter stop)
Pivot left / Pivot right
Number of candles left/right to define a swing high/low
when using Pivot stop mode.
Typical intraday values: 2–3.
The script also sanity-checks the stop:
if the calculated stop would be invalid (e.g. above entry in a long), it moves it by a minimal distance (2 ticks) to keep a valid risk.
📈 4. HTF Trend Filter (Daily / Weekly / Monthly)
Group: “HTF Trend Filter”
Enable HTF trend filter
If enabled, trades are only allowed:
Long when at least 2 of D/W/M closes are above their EMA
Short when at least 2 of D/W/M closes are below their EMA
EMA length (D/W/M)
EMA length for all three higher timeframes (Daily, Weekly, Monthly).
This helps focus entries in the direction of the dominant higher-timeframe trend.
📊 5. ATR Filter (Daily)
Group: “ATR Filter (Daily)”
Use daily ATR filter
If enabled, the height of the ORB (ORB high – ORB low) must be within
a band of the Daily ATR to allow any signals.
Daily ATR length
ATR period on the Daily timeframe.
Min ORB size vs ATR
Lower bound:
Example: 0.3 → ORB must be at least 0.3 × Daily ATR
0.0 = no minimum.
Max ORB size vs ATR
Upper bound:
Example: 1.5 → ORB must be ≤ 1.5 × Daily ATR
0.0 = no maximum.
If the ORB is too small (choppy) or too large (exhausted move), no breakout or FVG signal will be generated on that day.
🧭 6. HTF Dashboard & Signal Labels
Group: “HTF Trend Dashboard”
Show HTF dashboard
Draws a small label at the top of the chart showing:
HTF Trend (EMA X)
D: UP/FLAT/DOWN
W: UP/FLAT/DOWN
M: UP/FLAT/DOWN
Dashboard position
Top Right, Top Center, Top Left – places the dashboard at the top.
Over Risk Info – no top dashboard; instead, the HTF trend info is shown as a label near the risk box when a new signal appears.
Lookback (bars) for top anchor
How many bars to use to determine the top price level for dashboard placement.
Show HTF trend above risk box on signal
Only relevant if Dashboard position = Over Risk Info.
When enabled, a small HTF label appears near the risk box for each new trade.
Signal label vertical offset (ticks)
Vertical spacing between risk info label and HTF label.
Minimum spacing HTF/Risk (ticks)
Ensures a minimum vertical distance so the two labels don’t overlap.
HTF signal label X offset (bars)
Horizontal offset (left/right) relative to the risk info label.
⏳ 7. ORB–FVG Filters (Session & Time Window)
Group: “ORB FVG Filter”
Only same session day
If enabled, FVG entries are only allowed on the same calendar day
as the ORB. When the date changes, all state & drawings are reset.
Limit hours after ORB
Enables a time window after the ORB end.
Trading window after ORB (hours)
Length of that window in hours.
Example: 2.0 → FVG signals only in the first 2 hours after ORB end.
💰 8. Risk Management & Position Sizing
Group: “Risk Management”
Calculate position size
If enabled, the script computes suggested mini and micro contract size for you.
Account size
Your trading account size (in account currency).
Risk mode
Percent – risk is a % of account size (Account risk %).
Fixed amount – risk is a fixed dollar amount (Fixed risk ($)).
Account risk %
Risk per trade as a percentage of account size (e.g. 1.0 for 1%).
Fixed risk ($)
Fixed risk per trade in dollars when using Fixed amount mode.
Micro factor (vs mini)
How much a micro contract is worth relative to a mini.
Example:
0.1 → one micro moves 1/10 of one mini.
Risk Info label
For each new trade, a label is shown above the boxes with:
Stop distance in price and $ risk per mini
Max risk allowed for the trade
Suggested mini and micro size
Text like:
Suggested: 2 mini
Suggested: 5 micro
or Suggested: no trade
This makes the script especially useful for prop-firm rules or strict risk discipline.
🎨 9. Visual Style (Boxes, Labels, ORB Lines)
Group: “Box & Label Style (Trade)”
Label font size (Very small, Small, Normal, Large)
Entry label BG / text color
Stop label BG / text color
TP label BG / text color
Risk info BG / text color
Risk box color (entry–stop zone)
Reward box color (entry–TP zone)
Group: “ORB Style”
ORB high line color
ORB low line color
ORB line width
ORB label font size
ORB label background color
ORB label text color
Show ORB midline
ORB midline color / width / style (Solid / Dashed / Dotted)
⚠️ 10. Alerts
Group: “Alerts”
The script defines three alert conditions:
Long entry FVG breakout
Triggered when a new long signal appears.
Short entry FVG breakout
Triggered when a new short signal appears.
FVG entry (long/short)
Generic alert for any new signal (long or short).
To use them:
Add the indicator to the chart.
Open the Alerts dialog → “Condition”.
Select this script and one of the alert conditions.
Set your preferred expiration and notification settings.
Alerts only fire when Enable FVG entry signals, boxes & alerts is on.
🧩 11. How the trading logic flows (summary)
Build ORB on 1-minute data during the selected session.
Optionally reject the day if ORB is outside the ATR bounds.
Wait for a breakout (close above high or below low), respecting HTF trend filter.
After breakout, look for the first valid FVG in that direction:
Outside the ORB (unless breakout FVG allowed inside)
Confirmed by the next candle (no full reclaim)
Once confirmed:
Compute entry, stop, target.
Draw risk/reward boxes and all labels.
Optionally show HTF signal label over the risk info.
Trigger alerts if enabled.
If you disable FVG signals, only steps 1–3 (plus dashboard) are effectively active.
⚠️ 12. Notes & Disclaimer
Script is intended for intraday trading up to 15-minute timeframes.
All signals are mechanical and do not guarantee profitability.
Always backtest and forward-test on your own data before risking real money.
This script is for educational purposes only and is not financial advice.
🚀 Quick-start guide
Add the script to your chart
Use an intraday timeframe ≤ 15 minutes (1m, 3m, 5m, 15m).
Works best on liquid indices, futures, FX and large-cap stocks.
Set the Morning Range
In “Morning Range Session” choose the exchange’s opening window.
Examples
US index futures (CME): 08:30–08:45 or 08:30–08:35
US stocks (NYSE/Nasdaq): 09:30–09:45 or 09:30–09:35
The ORB is always calculated on 1-minute data internally, so the range stays accurate on higher intraday charts.
Keep the default filters at first
HTF Trend Filter: ON
EMA length = 20
This will only allow trades in the direction of the dominant D/W/M trend.
ATR Filter: OFF (optional; you can enable later once you’re comfortable).
Use the full trade system
In the FVG group leave
“Enable FVG entry signals, boxes & alerts” = ON
Entry mode: Mid
Stop mode: FVG Candle or PrevBar
Risk/Reward: 2.0 as a starting point.
Set your risk
Turn on “Calculate position size”.
Enter your Account size and choose either:
Risk mode = Percent (e.g. 1.0 = 1% per trade), or
Risk mode = Fixed amount (e.g. $250 per trade).
The risk info label will show:
Stop distance in price and $/contract
Max allowed risk
Suggested mini and micro contract size.
Enable alerts (optional)
Open the Alerts dialog → Condition: this script.
Choose one of:
Long entry FVG breakout
Short entry FVG breakout
FVG entry (long/short)
Choose “Once per bar” or “Once per bar close”, and your preferred notification type.
Replay & journal
Use the TradingView bar replay tool to step through past days.
Focus on:
How the ORB defines the structure.
How the first confirmed FVG outside the ORB behaves.
Whether the risk/TP levels fit your own style and product.
🎛 Recommended settings & profiles
These are starting points, not rules. Always adapt to the instrument and your own risk tolerance.
1. Conservative / Trend-following
Timeframe: 5m or 15m
Morning Range Session: 15-minute ORB around the cash or futures open
FVG
Threshold %: 0.05–0.1 (filter out very small gaps)
Auto threshold: OFF (keep it simple)
Allow breakout FVG partly inside ORB: OFF
Enable FVG entry signals/boxes/alerts: ON
Entry mode: Mid
Stop Logic
Stop mode: Pivot
Pivot left/right: 2–3
Stop buffer: +1–2 ticks
HTF Trend Filter
Enabled: ON
EMA length: 20
ATR Filter
Enabled: ON
Daily ATR length: 14
Min ORB vs ATR: 0.3–0.4
Max ORB vs ATR: 1.2–1.5
Risk Management
Risk mode: Percent
Account risk: 0.5–1.0%
Idea: Only trade when the higher-timeframe trend supports the move and the opening range is of a “normal” size for the current volatility.
2. Balanced / Intraday directional
Timeframe: 3m or 5m
FVG
Threshold %: 0.02–0.05
Auto threshold: ON (lets the script adapt to volatility)
Allow breakout FVG partly inside ORB: ON
(first breakout FVG may partly sit inside the ORB)
Entry mode: Edge
Edge offset (ticks): 0 or +1
Stop Logic
Stop mode: FVG Candle
Stop buffer: 0–1 ticks
HTF Trend Filter
Enabled: ON
ATR Filter
Enabled: OFF (optional)
Risk Management
Risk mode: Percent
Account risk: 1.0–1.5% (if this fits your plan)
Idea: Slightly more aggressive entries at the gap edge, still aligned with HTF trend, but with more flexibility on ATR.
3. Aggressive / Scalping around the ORB
Timeframe: 1m or 3m
FVG
Threshold %: 0.0–0.02
Auto threshold: ON
Allow breakout FVG partly inside ORB: ON
Entry mode: NextOpen or Edge with a negative offset (deeper into the gap)
Stop Logic
Stop mode: PrevBar
Stop buffer: 0 or -1 tick
HTF Trend Filter
Enabled: OFF (or ON but treat as soft guidance)
ATR Filter
Enabled: OFF
Risk Management
Risk mode: Percent
Account risk: lower, e.g. 0.25–0.5% per trade
Idea: More trades and tighter stops. Best for experienced traders who understand the limitations of scalping and whipsaw risk.
Final reminder
All of these are templates, not guarantees:
Always check how the system behaves on your market and session.
Start on replay and demo before trading real money.
Adjust filters (HTF, ATR, thresholds) until the signals fit your personal approach.
لbsm15// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) creativecommons.org
// © LuxAlgo
//@version=5
indicator("لbsm15", overlay = true, max_lines_count = 500, max_boxes_count = 500, max_bars_back = 3000)
//------------------------------------------------------------------------------
//Settings
//-----------------------------------------------------------------------------{
liqGrp = 'Liquidity Detection'
liqLen = input.int (7, title = 'Detection Length', minval = 3, maxval = 13, inline = 'LIQ', group = liqGrp)
liqMar = 10 / input.float (6.9, 'Margin', minval = 4, maxval = 9, step = 0.1, inline = 'LIQ', group = liqGrp)
liqBuy = input.bool (true, 'Buyside Liquidity Zones, Margin', inline = 'Buyside', group = liqGrp)
marBuy = input.float(2.3, '', minval = 1.5, maxval = 10, step = .1, inline = 'Buyside', group = liqGrp)
cLIQ_B = input.color (color.new(#4caf50, 0), '', inline = 'Buyside', group = liqGrp)
liqSel = input.bool (true, 'Sellside Liquidity Zones, Margin', inline = 'Sellside', group = liqGrp)
marSel = input.float(2.3, '', minval = 1.5, maxval = 10, step = .1, inline = 'Sellside', group = liqGrp)
cLIQ_S = input.color (color.new(#f23645, 0), '', inline = 'Sellside', group = liqGrp)
lqVoid = input.bool (false, 'Liquidity Voids, Bullish', inline = 'void', group = liqGrp)
cLQV_B = input.color (color.new(#4caf50, 0), '', inline = 'void', group = liqGrp)
cLQV_S = input.color (color.new(#f23645, 0), 'Bearish', inline = 'void', group = liqGrp)
lqText = input.bool (false, 'Label', inline = 'void', group = liqGrp)
mode = input.string('Present', title = 'Mode', options = , inline = 'MOD', group = liqGrp)
visLiq = input.int (3, ' # Visible Levels', minval = 1, maxval = 50, inline = 'MOD', group = liqGrp)
//-----------------------------------------------------------------------------}
//General Calculations
//-----------------------------------------------------------------------------{
maxSize = 50
atr = ta.atr(10)
atr200 = ta.atr(200)
per = mode == 'Present' ? last_bar_index - bar_index <= 500 : true
//-----------------------------------------------------------------------------}
//User Defined Types
//-----------------------------------------------------------------------------{
// @type used to store pivot high/low data
//
// @field d (array) The array where the trend direction is to be maintained
// @field x (array) The array where the bar index value of pivot high/low is to be maintained
// @field y (array) The array where the price value of pivot high/low is to be maintained
type ZZ
int d
int x
float y
// @type bar properties with their values
//
// @field o (float) open price of the bar
// @field h (float) high price of the bar
// @field l (float) low price of the bar
// @field c (float) close price of the bar
// @field i (int) index of the bar
type bar
float o = open
float h = high
float l = low
float c = close
int i = bar_index
// @type liquidity object definition
//
// @field bx (box) box maitaing the liquity level margin extreme levels
// @field bxz (box) box maitaing the liquity zone margin extreme levels
// @field bxt (box) box maitaing the labels
// @field brZ (bool) mainains broken zone status
// @field brL (bool) mainains broken level status
// @field ln (line) maitaing the liquity level line
// @field lne (line) maitaing the liquity extended level line
type liq
box bx
box bxz
box bxt
bool brZ
bool brL
line ln
line lne
//-----------------------------------------------------------------------------}
//Variables
//-----------------------------------------------------------------------------{
var ZZ aZZ = ZZ.new(
array.new (maxSize, 0),
array.new (maxSize, 0),
array.new (maxSize, na)
)
bar b = bar.new()
var liq b_liq_B = array.new (1, liq.new(box(na), box(na), box(na), false, false, line(na), line(na)))
var liq b_liq_S = array.new (1, liq.new(box(na), box(na), box(na), false, false, line(na), line(na)))
var b_liq_V = array.new_box()
var int dir = na, var int x1 = na, var float y1 = na, var int x2 = na, var float y2 = na
//-----------------------------------------------------------------------------}
//Functions/methods
//-----------------------------------------------------------------------------{
// @function maintains arrays
// it prepends a `value` to the arrays and removes their oldest element at last position
// @param aZZ (UDT, array, array>) The UDT obejct of arrays
// @param _d (array) The array where the trend direction is maintained
// @param _x (array) The array where the bar index value of pivot high/low is maintained
// @param _y (array) The array where the price value of pivot high/low is maintained
//
// @returns none
method in_out(ZZ aZZ, int _d, int _x, float _y) =>
aZZ.d.unshift(_d), aZZ.x.unshift(_x), aZZ.y.unshift(_y), aZZ.d.pop(), aZZ.x.pop(), aZZ.y.pop()
// @function (build-in) sets the maximum number of bars that is available for historical reference
max_bars_back(time, 1000)
//-----------------------------------------------------------------------------}
//Calculations
//-----------------------------------------------------------------------------{
x2 := b.i - 1
ph = ta.pivothigh(liqLen, 1)
pl = ta.pivotlow (liqLen, 1)
if ph
dir := aZZ.d.get(0)
x1 := aZZ.x.get(0)
y1 := aZZ.y.get(0)
y2 := nz(b.h )
if dir < 1
aZZ.in_out(1, x2, y2)
else
if dir == 1 and ph > y1
aZZ.x.set(0, x2), aZZ.y.set(0, y2)
if per
count = 0
st_P = 0.
st_B = 0
minP = 0.
maxP = 10e6
for i = 0 to maxSize - 1
if aZZ.d.get(i) == 1
if aZZ.y.get(i) > ph + (atr / liqMar)
break
else
if aZZ.y.get(i) > ph - (atr / liqMar) and aZZ.y.get(i) < ph + (atr / liqMar)
count += 1
st_B := aZZ.x.get(i)
st_P := aZZ.y.get(i)
if aZZ.y.get(i) > minP
minP := aZZ.y.get(i)
if aZZ.y.get(i) < maxP
maxP := aZZ.y.get(i)
if count > 2
getB = b_liq_B.get(0)
if st_B == getB.bx.get_left()
getB.bx.set_top(math.avg(minP, maxP) + (atr / liqMar))
getB.bx.set_rightbottom(b.i + 10, math.avg(minP, maxP) - (atr / liqMar))
else
b_liq_B.unshift(
liq.new(
box.new(st_B, math.avg(minP, maxP) + (atr / liqMar), b.i + 10, math.avg(minP, maxP) - (atr / liqMar), bgcolor=color(na), border_color=color(na)),
box.new(na, na, na, na, bgcolor = color(na), border_color = color(na)),
box.new(st_B, st_P, b.i + 10, st_P, text = 'Buyside liquidity', text_size = size.tiny, text_halign = text.align_left, text_valign = text.align_bottom, text_color = color.new(cLIQ_B, 25), bgcolor = color(na), border_color = color(na)),
false,
false,
line.new(st_B , st_P, b.i - 1, st_P, color = color.new(cLIQ_B, 0)),
line.new(b.i - 1, st_P, na , st_P, color = color.new(cLIQ_B, 0), style = line.style_dotted))
)
alert('buyside liquidity level detected/updated for ' + syminfo.ticker)
if b_liq_B.size() > visLiq
getLast = b_liq_B.pop()
getLast.bx.delete()
getLast.bxz.delete()
getLast.bxt.delete()
getLast.ln.delete()
getLast.lne.delete()
if pl
dir := aZZ.d.get (0)
x1 := aZZ.x.get (0)
y1 := aZZ.y.get (0)
y2 := nz(b.l )
if dir > -1
aZZ.in_out(-1, x2, y2)
else
if dir == -1 and pl < y1
aZZ.x.set(0, x2), aZZ.y.set(0, y2)
if per
count = 0
st_P = 0.
st_B = 0
minP = 0.
maxP = 10e6
for i = 0 to maxSize - 1
if aZZ.d.get(i) == -1
if aZZ.y.get(i) < pl - (atr / liqMar)
break
else
if aZZ.y.get(i) > pl - (atr / liqMar) and aZZ.y.get(i) < pl + (atr / liqMar)
count += 1
st_B := aZZ.x.get(i)
st_P := aZZ.y.get(i)
if aZZ.y.get(i) > minP
minP := aZZ.y.get(i)
if aZZ.y.get(i) < maxP
maxP := aZZ.y.get(i)
if count > 2
getB = b_liq_S.get(0)
if st_B == getB.bx.get_left()
getB.bx.set_top(math.avg(minP, maxP) + (atr / liqMar))
getB.bx.set_rightbottom(b.i + 10, math.avg(minP, maxP) - (atr / liqMar))
else
b_liq_S.unshift(
liq.new(
box.new(st_B, math.avg(minP, maxP) + (atr / liqMar), b.i + 10, math.avg(minP, maxP) - (atr / liqMar), bgcolor=color(na), border_color=color(na)),
box.new(na, na, na, na, bgcolor=color(na), border_color=color(na)),
box.new(st_B, st_P, b.i + 10, st_P, text = 'Sellside liquidity', text_size = size.tiny, text_halign = text.align_left, text_valign = text.align_top, text_color = color.new(cLIQ_S, 25), bgcolor=color(na), border_color=color(na)),
false,
false,
line.new(st_B , st_P, b.i - 1, st_P, color = color.new(cLIQ_S, 0)),
line.new(b.i - 1, st_P, na , st_P, color = color.new(cLIQ_S, 0), style = line.style_dotted))
)
alert('sellside liquidity level detected/updated for ' + syminfo.ticker)
if b_liq_S.size() > visLiq
getLast = b_liq_S.pop()
getLast.bx.delete()
getLast.bxz.delete()
getLast.bxt.delete()
getLast.ln.delete()
getLast.lne.delete()
for i = 0 to b_liq_B.size() - 1
x = b_liq_B.get(i)
if not x.brL
x.lne.set_x2(b.i)
if b.h > x.bx.get_top()
x.brL := true
x.brZ := true
alert('buyside liquidity level breached for ' + syminfo.ticker)
x.bxz.set_lefttop(b.i - 1, math.min(x.ln.get_y1() + marBuy * (atr), b.h))
x.bxz.set_rightbottom(b.i + 1, x.ln.get_y1())
x.bxz.set_bgcolor(color.new(cLIQ_B, liqBuy ? 73 : 100))
else if x.brZ
if b.l > x.ln.get_y1() - marBuy * (atr) and b.h < x.ln.get_y1() + marBuy * (atr)
x.bxz.set_right(b.i + 1)
x.bxz.set_top(math.max(b.h, x.bxz.get_top()))
if liqBuy
x.lne.set_x2(b.i + 1)
else
x.brZ := false
for i = 0 to b_liq_S.size() - 1
x = b_liq_S.get(i)
if not x.brL
x.lne.set_x2(b.i)
if b.l < x.bx.get_bottom()
x.brL := true
x.brZ := true
alert('sellside liquidity level breached for ' + syminfo.ticker)
x.bxz.set_lefttop(b.i - 1, x.ln.get_y1())
x.bxz.set_rightbottom(b.i + 1, math.max(x.ln.get_y1() - marSel * (atr), b.l))
x.bxz.set_bgcolor(color.new(cLIQ_S, liqSel ? 73 : 100))
else if x.brZ
if b.l > x.ln.get_y1() - marSel * (atr) and b.h < x.ln.get_y1() + marSel * (atr)
x.bxz.set_rightbottom(b.i + 1, math.min(b.l, x.bxz.get_bottom()))
if liqSel
x.lne.set_x2(b.i + 1)
else
x.brZ := false
if lqVoid and per
bull = b.l - b.h > atr200 and b.l > b.h and b.c > b.h
bear = b.l - b.h > atr200 and b.h < b.l and b.c < b.l
if bull
l = 13
if bull
st = math.abs(b.l - b.l ) / l
for i = 0 to l - 1
array.push(b_liq_V, box.new(b.i - 2, b.l + i * st, b.i, b.l + (i + 1) * st, border_color = na, bgcolor = color.new(cLQV_B, 90) ))
else
st = math.abs(b.l - b.h ) / l
for i = 0 to l - 1
if lqText and i == 0
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, text = 'Liquidity Void ', text_size = size.tiny, text_halign = text.align_right, text_valign = text.align_bottom, text_color = na, border_color = na, bgcolor = color.new(cLQV_B, 90) ))
else
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, border_color = na, bgcolor = color.new(cLQV_B, 90) ))
if bear
l = 13
if bear
st = math.abs(b.h - b.h) / l
for i = 0 to l - 1
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, border_color = na, bgcolor = color.new(cLQV_S, 90) ))
else
st = math.abs(b.l - b.h) / l
for i = 0 to l - 1
if lqText and i == l - 1
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, text = 'Liquidity Void ', text_size = size.tiny, text_halign = text.align_right, text_valign = text.align_top, text_color = na, border_color = na, bgcolor = color.new(cLQV_S, 90) ))
else
array.push(b_liq_V, box.new(b.i - 2, b.h + i * st, b.i, b.h + (i + 1) * st, border_color = na, bgcolor = color.new(cLQV_S, 90) ))
if b_liq_V.size() > 0
qt = b_liq_V.size()
for bn = qt - 1 to 0
if bn < b_liq_V.size()
cb = b_liq_V.get(bn)
ba = math.avg(cb.get_bottom(), cb.get_top())
if math.sign(b.c - ba) != math.sign(b.c - ba) or math.sign(b.c - ba) != math.sign(b.l - ba) or math.sign(b.c - ba) != math.sign(b.h - ba)
b_liq_V.remove(bn)
else
cb.set_right(b.i + 1)
if b.i - cb.get_left() > 21
cb.set_text_color(color.new(color.gray, 25))
//-----------------------------------------------------------------------------}
Smart Money Concepts [Dau_tu_hieu_goc]Credits to LuxAlgo for the SMC Parts.
Edited by Dau_Tu_Hieu_Goc
My script// @version=5 indicator("Custom LuxAlgo-Style Levels", overlay=true, max_lines_count=500)
// --- Trend Detection (EMA Based) fastEMA = ta.ema(close, 9) slowEMA = ta.ema(close, 21) trendUp = fastEMA > slowEMA trendDown = fastEMA < slowEMA
plot(fastEMA, title="Fast EMA", color=color.new(color.blue, 0)) plot(slowEMA, title="Slow EMA", color=color.new(color.orange, 0))
// --- Buy / Sell Signals buySignal = trendUp and ta.crossover(fastEMA, slowEMA) sellSignal = trendDown and ta.crossunder(fastEMA, slowEMA)
plotshape(buySignal, title="Buy", style=shape.labelup, color=color.new(color.green,0), size=size.small, text="BUY") plotshape(sellSignal, title="Sell", style=shape.labeldown, color=color.new(color.red,0), size=size.small, text="SELL")
// --- Auto Support & Resistance length = 20 sup = ta.lowest(length) res = ta.highest(length)
plot(sup, title="Support", color=color.new(color.green,70), linewidth=2) plot(res, title="Resistance", color=color.new(color.red,70), linewidth=2)
// --- Market Structure (Simple Swing High/Low) sh = ta.highest(high, 5) == high sl = ta.lowest(low, 5) == low
plotshape(sh, title="Swing High", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny) plotshape(sl, title="Swing Low", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny)
// --- Alerts alertcondition(buySignal, "Buy Signal", "Trend Buy Signal Detected") alertcondition(sellSignal, "Sell Signal", "Trend Sell Signal Detected")
ITC Market Structure ProWith this tool you can see market structure, set session, daylow, dayhigh, multiple moving avg., fvg...
Every feature can by witched off or on to have more clarity watching price action - and everything is in one indicator, so you don't need to have stack off them!
Detailed description will try to provide later...
PS Thanks for LuxAlgo - I have use some of their fine work to combine all-in-one! Hoping it's not against the rules - if so, I will remove my tool.
PS Everything is rewritten to pine6
Lorentzian Length Adaptive Moving Average [LLAMA] Adaptation of "Machine Learning: Lorentzian Classification" by
Gradient color by base on work by
LLAMA: A regime-aware adaptive moving average that bends with the market.
Start with a problem traders know:
Traditional moving averages are either too slow (EMA200) or too fast (EMA9)
Adaptive MAs exist, but they often hug price too tightly or smooth too much, failing to balance bias and tactics
LLAMA uses a Lorentzian distance function to adapt its length dynamically. Instead of a fixed smoothing window, it stretches or contracts depending on market conditions. This distortion reduces lag while still providing a clear bias line.
The indicator looks back at recent bars and measures how similar they are using a Lorentzian distance (a log‑scaled absolute difference). It keeps track of the “nearest neighbors” — bars that most resemble the current regime. Each neighbor carries a label (long, short, neutral) based on simple price comparisons. By averaging these labels, LLAMA predicts whether the market is leaning bullish or bearish. That prediction is then mapped into a dynamic length between and .
Bullish bias -> length stretches toward max (smoother, more stable).
Bearish bias -> length contracts toward min (snappier, more reactive).
During breakouts, LLAMA tightens and comes into contact with bars, giving actionable signals. During chop, it stretches to avoid false triggers. It covers both ends of the spectrum (bias and tactics) in one line, something static MA's can't do.
Think of LLAMA as a lens that bends with the market:
Wide lens (max length) for big picture bias.
Narrow lens (min length) for tactical precision.
The "Lorentzian Loop" is the math that decides when to widen or narrow.
BTC 1h StratUses LuxAlgo-style Support/Resistance levels (pivot-based, with volume break labels).
Adds momentum confirmation (RSI + MACD) to filter fakeouts.Keeps your swing breakout logic (close above swing high / below swing low).
Includes liquidity and TP/SL risk management.
Adaptive CE-VWAP Breakout Framework [KedArc Quant]Description
A structured framework that unites three complementary systems into one charting engine:
Chandelier Exit (CE) – ATR-based trailing logic that defines trend direction, stop placement, and risk/reward overlays.
Swing-Anchored VWAP (SWAV) – a dynamically anchored VWAP that re-starts from each confirmed swing and adapts its smoothness to volatility.
Pivot S/R with Volume Breaks – confirmed horizontal levels with alerts when broken on expanding volume.
This script builds a single workflow for bias → trigger → managementwithout mixing unrelated indicators. Each module is internally linked rather than layered cosmetically, making it a true analytical framework—not.
Acknowledgment
Special thanks to Dynamic Swing Anchored VWAP by Zeiierman, whose swing-anchoring concept inspired a part of the SWAV module’s implementation and adaptation logic.
Support and Resistance Levels with Breaks by LuxAlgo for S/R breakout logic.
How this helps traders
Trend clarity – CE color-codes direction and provides evolving stops.
Context value – SWAV traces adaptive mean paths so traders see where price is heavy or light.
Action filter – Pivot+volume logic highlights true structural breaks, filtering false moves.
Discipline tool – Optional R:R boxes visualize risk and target zones to enforce planning.
Entry / Exit guidelines (for study purposes only)
Bias Use CE direction: green = long bias red = short bias
Entry
1. Breakout method– Trade in CE direction when a pivot level breaks on valid volume.
2. VWAP confirmation– Prefer breaks occurring around the nearest SWAV path (fair-value cross or re-test).
Exit
Stop = CE line / recent swing HL / ATR × (multiplier)
Target = R-multiple × risk (default 2 R)
Optional live update keeps SL/TP aligned with current CE state.
Core formula concepts
ATR Stop: Stop = High/Low – ATR × multiplier
VWAP calc: Σ(price × vol) / Σ(vol) anchored at swing pivot, adapted by APT (Adaptive Price Tracking) ratio ∝ ATR volatility.
Volume oscillator: 100 × (EMA₅ – EMA₁₀)/EMA₁₀; valid break when threshold %.
Input configuration (high-level)
Master Controls
Show CE / SWAV modules Theme & Fill opacity
CE Section
ATR period & multiplier Use Close for extremums
Show buy/sell labels Await bar confirmation
Risk-Reward overlay: R-multiple, Stop basis (CE/Swing/ATR×), Live update toggle
SWAV Section
Swing period Adaptive Price Tracking length Volatility bias (ATR-based adaptation) Line width
Pivot & Volume Breaks
Left/Right bar windows Volume threshold % Show Break labels and alerts
Best timeframes
Intraday: 5 m – 30 m for breakout confirmation
Swing: 1 h – 4 h for trend context
Settings scale with instrument volatility—adjust ATR period and volume threshold to match liquidity.
Glossary
ATR: Average True Range (volatility metric)
CE: Chandelier Exit (trailing stop/trend filter)
SWAV: Swing-Anchored VWAP (anchored mean price path)
Pivot H/L: Confirmed local extrema using left/right bar windows
R-multiple: Profit target as a multiple of initial risk
FAQ
Q: Does it repaint? A: No—pivots wait for confirmation and VWAP updates forward-only.
Q: Can modules be disabled? A: Yes—each section has its own toggle.
Q: Can it trade automatically? A: This is an indicator/study, not an auto-strategy.
Q: Is this financial advice? A: No—educational use only.
Disclaimer
This script is for educational and analytical purposes only.
It is not financial advice. Trading involves risk of loss. Past performance does not guarantee future results. Always apply sound risk management.






















