Commodity Trend Reactor [BigBeluga]
🔵 OVERVIEW
A dynamic trend-following oscillator built around the classic CCI, enhanced with intelligent price tracking and reversal signals.
Commodity Trend Reactor extends the traditional Commodity Channel Index (CCI) by integrating trend-trailing logic and reactive reversal markers. It visualizes trend direction using a trailing stop system and highlights potential exhaustion zones when CCI exceeds extreme thresholds. This dual-level system makes it ideal for both trend confirmation and mean-reversion alerts.
🔵 CONCEPTS
Based on the CCI (Commodity Channel Index) oscillator, which measures deviation from the average price.
Trend bias is determined by whether CCI is above or below user-defined thresholds.
Trailing price bands are used to lock in trend direction visually on the main chart.
Extreme values beyond ±200 are treated as potential reversal zones.
🔵 FEATURES\
CCI-Based Trend Shifts:
Triggers a bullish bias when CCI crosses above the upper threshold, and bearish when it crosses below the lower threshold.
Adaptive Trailing Stops:
In bullish mode, a trailing stop tracks the lowest price; in bearish mode, it tracks the highest.
Top & Bottom Markers:
When CCI surpasses +200 or drops below -200, it plots colored squares both on the oscillator and on price, marking potential reversal zones.
Background Highlights:
Each time a trend shift occurs, the background is softly colored (lime for bullish, orange for bearish) to highlight the change.
🔵 HOW TO USE
Use the oscillator to monitor when CCI crosses above or below threshold values to detect trend activation.
Enter trades in the direction of the trailing band once the trend bias is confirmed.
Watch for +200 and -200 square markers as warnings of potential mean reversals.
Use trailing stop areas as dynamic support/resistance to manage stop loss and exit strategies.
The background color changes offer clean confirmation of trend transitions on chart.
🔵 CONCLUSION
Commodity Trend Reactor transforms the simple CCI into a complete trend-reactive framework. With real-time trailing logic and clear reversal alerts, it serves both momentum traders and contrarian scalpers alike. Whether you’re trading breakouts or anticipating mean reversions, this indicator provides clarity and structure to your decision-making.
Indicators and strategies
The Strat The Strat Bar Type Identifier – Pure Price Action Logic
This open-source indicator implements the foundational bar classification of "The Strat" method developed by Rob Smith. It identifies each candle on the chart as one of the three core types used in The Strat:
* Inside Bar (1): The candle’s range is fully within the previous candle’s range. This indicates consolidation or balance and often precedes breakouts or reversals.
* Two-Up Bar (2U): The current candle breaks the previous high but does not break its low. This is considered bullish directional movement.
* Two-Down Bar (2D): The current candle breaks the previous low but not the high. This signals bearish directional movement.
* Outside Bar (3): The candle breaks both the high and the low of the previous candle, signaling a broadening formation and high volatility.
The script plots a character below each candle based on its type:
* "1" for Inside Bar
* "2" for Two-Up or Two-Down (color-coded)
* "3" for Outside Bar
This tool helps traders quickly identify actionable setups according to The Strat method and serves as a foundation for more advanced strategies like the 3-1-2 reversal or 1-2-2 continuation.
All calculations are based purely on price action—no indicators, no smoothing, no lagging elements. It is ideal for traders looking to understand price structure and bar sequencing from a Strat perspective.
To use:
1. Add the indicator to any chart and timeframe.
2. Look for the numbers below the candles.
3. Analyze the sequence of bar types to spot Strat setups.
This script is educational and can be extended with multi-timeframe context, FTFC logic, actionable signals, or broadening formation detection.
Clean, minimal, and faithful to the core principles of The Strat.
Three Inside Breakout (With 2:1 TP/SL + VWAP Filter)Buy only when the 3-candle breakout pattern is above VWAP.
Sell only when the pattern is below VWAP.
Auto-calculated TP and SL lines drawn on the chart.
VWAP plotted clearly for visual confirmation.
Session-Based Sentiment Oscillator [TradeDots]Track, analyze, and monitor market sentiment across global trading sessions with this advanced multi-session sentiment analysis tool. This script provides session-specific sentiment readings for Asian (Tokyo), European (London), and US (New York) markets, combining price action, volume analysis, and volatility factors into a comprehensive sentiment oscillator. It is an original indicator designed to help traders understand regional market psychology and capitalize on cross-session sentiment shifts directly on TradingView.
📝 HOW IT WORKS
1. Multi-Component Sentiment Engine
Price Action Momentum : Calculates normalized price movement relative to recent trading ranges, providing directional sentiment readings.
Volume-Weighted Analysis : When volume data is available, incorporates volume flow direction to validate price-based sentiment signals.
Volatility-Adjusted Factors : Accounts for changing market volatility conditions by comparing current ATR against historical averages.
Weighted Combination : Merges all components using optimized weightings (Price: 1.0, Volume: 0.3, Volatility: 0.2) for balanced sentiment readings.
2. Session-Segregated Tracking
Automatic Session Detection : Precisely identifies active trading sessions based on user-configured time parameters.
Independent Calculations : Maintains separate sentiment accumulation for each major session, updated only during respective active hours.
Historical Preservation : Stores session-specific sentiment values even when sessions are closed, enabling cross-session comparison.
Real-Time Updates : Continuously processes sentiment during active sessions while preserving inactive session data.
3. Cross-Session Transition Analysis
Sentiment Differential Detection : Monitors sentiment changes when transitioning between trading sessions.
Configurable Thresholds : Generates signals only when sentiment shifts exceed user-defined minimum thresholds.
Directional Signals : Provides distinct bullish and bearish transition alerts with visual markers.
Smart Filtering : Applies smoothing algorithms to reduce false signals from minor sentiment variations.
⚙️ KEY FEATURES
1. Session-Specific Dashboard
Real-Time Status Display : Shows current session activity (ACTIVE/CLOSED) for all three major sessions.
Sentiment Percentages : Displays precise sentiment readings as percentages for easy interpretation.
Strength Classification : Automatically categorizes sentiment as HIGH (>50%), MEDIUM (20-50%), or LOW (<20%).
Customizable Positioning : Place dashboard in any corner with adjustable size options.
2. Advanced Signal Generation
Transition Alerts : Triangle markers indicate significant sentiment shifts between sessions.
Extreme Conditions : Diamond markers highlight overbought/oversold threshold breaches.
Configurable Sensitivity : Adjust signal thresholds from 0.05 to 0.50 based on trading style.
Alert Integration : Built-in TradingView alert conditions for automated notifications.
3. Forex Currency Strength Analysis
Base/Quote Decomposition : For forex pairs, separates sentiment into individual currency strength components.
Major Currency Support : Analyzes USD, EUR, GBP, JPY, CHF, CAD, AUD, NZD strength relationships.
Relative Strength Display : Shows which currency is driving pair movement during active sessions.
4. Visual Enhancement System
Session Background Colors : Distinct background shading for each active trading session.
Overbought/Oversold Zones : Configurable extreme sentiment level visualization with colored zones.
Multi-Timeframe Compatibility : Works across all timeframes while maintaining session accuracy.
Customizable Color Schemes : Full color customization for dashboard, signals, and plot elements.
🚀 HOW TO USE IT
1. Add the Script
Search for "Session-Based Sentiment Oscillator " in the Indicators tab or manually add it to your chart. The indicator will appear in a separate pane below your main chart.
2. Configure Session Times
Asian Session : Set Tokyo market hours (default: 00:00-09:00) based on your chart timezone.
European Session : Configure London market hours (default: 07:00-16:00) for European analysis.
US Session : Define New York market hours (default: 13:00-22:00) for American markets.
Timezone Adjustment : Ensure session times match your broker's specifications and account for daylight saving changes.
3. Optimize Analysis Parameters
Sentiment Period : Choose 5-50 bars (default: 14) for sentiment calculation lookback period.
Smoothing Settings : Select 1-10 bars smoothing (default: 3) with SMA, EMA, or RMA options.
Component Selection : Enable/disable volume analysis, price action, and volatility factors based on available data.
Signal Sensitivity : Adjust threshold from 0.05-0.50 (default: 0.15) for transition signal generation.
4. Interpret Readings and Signals
Positive Values : Indicate bullish sentiment for the active session.
Negative Values : Suggest bearish sentiment conditions.
Dashboard Status : Monitor which session is currently active and their respective sentiment strengths.
Transition Signals : Watch for triangle markers indicating significant cross-session sentiment changes.
Extreme Alerts : Note diamond markers when sentiment reaches overbought (>70%) or oversold (<-70%) levels.
5. Set Up Alerts
Configure TradingView alerts for:
- Bullish session transitions
- Bearish session transitions
- Overbought condition alerts
- Oversold condition alerts
❗️LIMITATIONS
1. Data Dependency
Volume Requirements : Volume-based analysis only functions when volume data is provided by your broker. Many forex brokers do not supply reliable volume data.
Price Action Focus : In absence of volume data, sentiment calculations rely primarily on price movement and volatility factors.
2. Session Time Sensitivity
Manual Adjustment Required : Session times must be manually updated for daylight saving time changes.
Broker Variations : Different brokers may have slightly different session definitions requiring time parameter adjustments.
3. Ranging Market Limitations
Trend Bias : Sentiment calculations may be less reliable during extended sideways or low-volatility market conditions.
Lag Consideration : As with all sentiment indicators, readings may lag during rapid market transitions.
4. Regional Market Focus
Major Session Coverage : Designed primarily for major global sessions; may not capture sentiment from smaller regional markets.
Weekend Gaps : Does not account for weekend gap effects on sentiment calculations.
⚠️ RISK DISCLAIMER
Trading and investing carry significant risk and can result in financial loss. The "Session-Based Sentiment Oscillator " is provided for informational and educational purposes only. It does not constitute financial advice.
- Always conduct your own research and analysis
- Use proper risk management and position sizing in all trades
- Past sentiment patterns do not guarantee future market behavior
- Combine this indicator with other technical and fundamental analysis tools
- Consider overall market context and your personal risk tolerance
This script is an original creation by TradeDots, published under the Mozilla Public License 2.0.
Session-based sentiment analysis should be used as part of a comprehensive trading strategy. No single indicator can predict market movements with certainty. Exercise proper risk management and maintain realistic expectations about indicator performance across varying market conditions.
Flipmeister | Candle Flips / ReversalsOpinionated way to highlight important candle flips and can lead to trading opportunities.
- Green to Red flip needs to break previous candle's high and flip to qualify
- Red to Green flip needs to break previous candle's low and flip to qualify
You can configure:
- Min Wick Size for marker to be shown
- Max lookback in bars to limit the amount of markers on the chart
Alerts! You can setup alert conditions for any flip and it's going to notify you when it happens.
Create alert -> Condition: Flipmeister -> Function: Any Flip (or any other available condition).
Candle Range Trading (CRT) with Alerts
📌 Description:
The Candle Range Trading (CRT) indicator identifies potential reversal or continuation setups based on specific two-candle price action patterns.
It analyzes pairs of candles to detect Bullish or Bearish CRT patterns and provides visual signals (triangles) and alert notifications to support scalp or swing trading strategies.
🔍 How It Works:
🔻 Bearish CRT Pattern:
Candle 1 is bullish
Candle 2 is bearish
Candle 2's high > Candle 1's high
Candle 2 closes within Candle 1’s range
🔺 Red triangle above candle
🔺 Bullish CRT Pattern:
Candle 1 is bearish
Candle 2 is bullish
Candle 2's low < Candle 1's low
Candle 2 closes within Candle 1’s range
🔻 Green triangle below candle
📈 Visual Features:
🔺 Red triangle = Bearish CRT
🔻 Green triangle = Bullish CRT
📏 Optional box showing CRT High and CRT Low
🔔 Built-in Alerts:
Bullish CRT Alert: "Bullish CRT Pattern Detected"
Bearish CRT Alert: "Bearish CRT Pattern Detected"
Set alerts to get notified instantly when a pattern is detected.
⚠️ Note:
Use in conjunction with trend filters, support/resistance, or volume for best results.
Ideal for scalping or short-term trades.
Avoid trading in choppy or low-volume markets.
⚠️ Disclaimer:
This script was generated with the assistance of ChatGPT by OpenAI and is intended for educational and informational purposes only.
All strategies, alerts, and signals derived from this indicator should be thoroughly backtested and validated before using in live trading.
Trading involves substantial risk, and past performance is not indicative of future results. The author and ChatGPT bear no responsibility for any trading losses or financial decisions made using this script.
Users are solely responsible for the risks associated with their trading actions. Always apply proper risk management and perform your own due diligence before making any financial decisions.
Period High/Low Percentage DifferenceCheck for price away from 200 days high/low and from recent high and low. Found it difficult to keep switching from regular to percentage in chart. I use it for ETF investing.
Price Statistical Strategy-Z Score V 1.01
Price Statistical Strategy – Z Score V 1.01
Overview
A technical breakdown of the logic and components of the “Price Statistical Strategy – Z Score V 1.01”.
This script implements a smoothed Z-Score crossover mechanism applied to the closing price to detect potential statistical deviations from local price mean. The strategy operates solely on price data (close) and includes signal spacing control and momentum-based candle filters. No volume-based or trend-detection components are included.
Core Methodology
The strategy is built on the statistical concept of Z-Score, which quantifies how far a value (closing price) is from its recent average, normalized by standard deviation. Two moving averages of the raw Z-Score are calculated: a short-term and a long-term smoothed version. The crossover between them generates long entries and exits.
Signal Conditions
Entry Condition:
A long position is opened when the short-term smoothed Z-Score crosses above the long-term smoothed Z-Score, and additional entry conditions are met.
Exit Condition:
The position is closed when the short-term Z-Score crosses below the long-term Z-Score, provided the exit conditions allow.
Signal Gapping:
A minimum number of bars (Bars gap between identical signals) must pass between repeated entry or exit signals to reduce noise.
Momentum Filter:
Entries are prevented during sequences of three or more consecutively bullish candles, and exits are prevented during three or more consecutively bearish candles.
Z-Score Function
The Z-Score is calculated as:
Z = (Close - SMA(Close, N)) / STDEV(Close, N)
Where N is the base period selected by the user.
Input Parameters
Enable Smoothed Z-Score Strategy
Enables or disables the Z-Score strategy logic. When disabled, no trades are executed.
Z-Score Base Period
Defines the number of bars used to calculate the simple moving average and standard deviation for the Z-Score. This value affects how responsive the raw Z-Score is to price changes.
Short-Term Smoothing
Sets the smoothing window for the short-term Z-Score. Higher values produce smoother short-term signals, reducing sensitivity to short-term volatility.
Long-Term Smoothing
Sets the smoothing window for the long-term Z-Score, which acts as the reference line in the crossover logic.
Bars gap between identical signals
Minimum number of bars that must pass before another signal of the same type (entry or exit) is allowed. This helps reduce redundant or overly frequent signals.
Trade Visualization Table
A table positioned at the bottom-right displays live PnL for open trades:
Entry Price
Unrealized PnL %
Text colors adapt based on whether unrealized profit is positive, negative, or neutral.
Technical Notes
This strategy uses only close prices — no trend indicators or volume components are applied.
All calculations are based on simple moving averages and standard deviation over user-defined windows.
Designed as a minimal, isolated Z-Score engine without confirmation filters or multi-factor triggers.
2-Day Volume Weighted Average Price (VWAP)This indicator extends TradingView’s built-in VWAP by calculating a volume-weighted average price over a continuous two-day window (yesterday + today), anchoring VWAP at the start of yesterday’s session and carrying it through to today’s close, but only plotting the segment that falls within the current trading session—yesterday’s data feeds into the calculation to ensure today’s VWAP reflects the prior session’s volume and price action, while the line drawn on your chart always begins at today’s session open.
Standard Deviation Bands: Optional ±1σ, ±2σ, and ±3σ envelopes, exactly as in the default VWAP, but based on the rolling two-day data.
QQQ Strategy v2 ESL | easy-peasy-x This is a strategy optimized for QQQ (and SPY) for the 1H timeframe. It significantly outperforms passive buy-and-hold approach. With settings adjustments, it can be used on various assets like stocks and cryptos and various timeframes, although the default out of the box settings favor QQQ 1H.
The strategy uses various triggers to take both long and short trades. These can be adjusted in settings. If you try a different asset, see what combination of triggers works best for you.
Some of the triggers employ LuxAlgo's Ultimate RSI - shoutout to him for great script, check it out here .
Other triggers are based on custom signed standard deviation - basically the idea is to trade Bollinger Bands expansions (long to the upside, short to the downside) and fade or stay out of contractions.
There are three key moving averages in the strategy - LONG MA, SHORT MA, BASIC MA. Long and Short MAs are guides to eyes on the chart and also act as possible trend filters (adjustable in settings). Basic MA acts as guide to eye and a possible trade trigger (adjustable in settings).
There are a few trend filters the strategy can use - moving average, signed standard deviation, ultimate RSI or none. The filters act as an additional condition on triggers, making the strategy take trades only if both triggers and trend filter allows. That way one can filter out trades with unfavorable risk/reward (for instance, don't long if price is under the MA200). Different trade filters can be used for long and short trades.
The strategy employs various stop loss types, the default of which is a trailing %-based stop loss type. ATR-based stop loss is also available. The default 1.5% trailing stop loss is suitable for leveraged trading.
Lastly, the strategy can trigger take profit orders if certain conditions are met, adjustable in settings. Also, it can hold onto winning trades and exit only after stop out (in which case, consecutive triggers to take other positions will be ignored until stop out).
Let me know if you like it and if you use it, what kind of tweaks would you like to see.
With kind regards,
easy-peasy-x
NUPL Z-ScoreThis indicator is derived from Market Value and Realized Value, which can be defined as:
Market Value: The current price of Bitcoin multiplied by the number of coins in circulation. This is like market cap in traditional markets i.e. share price multiplied by number of shares.
Realized Value: Rather than taking the current price of Bitcoin, Realized Value takes the price of each Bitcoin when it was last moved i.e. the last time it was sent from one wallet to another wallet. It then adds up all those individual prices and takes an average of them. It then multiplies that average price by the total number of coins in circulation.
By subtracting Realized Value from Market Value we calculate Unrealized Profit/Loss.
Unrealized Profit/Loss estimates the total paper profits/losses in Bitcoin held by investors. This is interesting to know but of greater value is identifying how this changes relatively over time.
To do this we can divide Unrealized Profit/Loss by Market Cap. This creates Net Unrealized Profit/Loss, sometimes referred to as NUPL, which is very useful to track investor sentiment over time for Bitcoin.
Relative Unrealised Profit/Loss is another name used for this analysis.
CVDD Z-ScoreCVDD stands for Cumulative Value Coin Days Destroyed.
Coin Days Destroyed is a term used for bitcoin to identify a value of sorts to UTXO’s (unspent transaction outputs). You can learn more about UTXO’s here. They can be thought of as coins moving between wallets.
int this script you have the option to change the Z-Score length.
Three Candle Bullish Engulfing StrategyThe Three Candle Bullish Engulfing Strategy is a versatile, multi-mode trading system designed for TradingView, combining classic candlestick patterns with momentum confirmation and dynamic risk management. This script supports both swing trading and intraday approaches, as well as an optional RSI-based breakout mode for additional signal filtering.
Key Features:
Three Candle Pattern Detection:
The strategy identifies potential trend reversal points using a three-candle pattern:
The first candle is a strong bullish (or bearish) move.
The second candle is a doji or small-bodied candle, indicating indecision.
The third candle is a bullish (or bearish) engulfing candle that closes above (or below) the previous high (or low), confirming the reversal.
Flexible Trading Modes:
Swing Long Only: Enter long trades on bullish three-candle setups.
Intraday Long & Short: Trade both long and short based on bullish and bearish three-candle patterns, with automatic session-end exits.
RSI Breakout Mode: Enter long trades when the 1-hour RSI exceeds a user-defined threshold (default 80) and a bullish candle forms, with breakout confirmation and a fixed-percentage stop loss.
Visual Aids:
Plots the RSI breakout trigger price and stop loss on the chart for easy monitoring.
How It Works:
Three Candle Pattern Entries:
Long Entry: Triggered when a bullish candle is followed by a doji, then a bullish engulfing candle closes above the previous high.
Short Entry (Intraday only): Triggered by the inverse pattern—bearish candle, doji, then bearish engulfing candle closing below the previous low.
RSI Breakout Entries:
When the RSI on a higher timeframe (default 1 hour) exceeds the set threshold and a bullish candle forms, the script records a trigger price.
A long trade is entered if the price breaks above this trigger, with a stop loss set a fixed percentage below.
Exits:
Positions are closed if the trailing stop is hit, the session ends (for intraday mode), or the stop loss is triggered in RSI breakout mode.
In RSI breakout mode, positions are also closed if a new breakout trigger forms while in position.
Supply In Profit Z-ScoreZ-score of BTC Supply in Profit.
Supply in Profit is an On-Chain BTC indicator that shows the percentage of BTC in profit.
In this indicator you can choose to use a Z-Score or not.
BTC Thermocap Z-ScoreBTC Thermocap Indicator Overview
The BTC Thermocap is a specialized on-chain ratio indicator designed to provide deeper insight into Bitcoin's market valuation relative to its cumulative issuance. By comparing the current market price of Bitcoin to the total value of all BTC ever mined (also known as "thermocap"), this indicator helps identify potential overvaluation or undervaluation periods within the Bitcoin market cycle.
Key Features and Customizable Inputs:
Moving Average Length (MA Length)
Moving Average Type (MA Type) - SMA or EMA
Z-Score Calculation Length
Z-Score Toggle (Use Z-Score)
Mitsos4 RSI + BB + Dispersion + Trendlines + VIX Fix Mitsos4 RSI + BB + Dispersion + Trendlines + VIX Fix
This powerful custom indicator combines two analytical tools into one view:
RSI-based Bollinger Bands with Dispersion and the Vix Fix volatility spike detector.
It is designed for traders who want early volatility signals and precision RSI insights, all in a single pane.
🧩 What's Included:
✅ 1. RSI + BB (EMA) + Dispersion
RSI-Based Bollinger Bands: Tracks the RSI with Bollinger Bands using an EMA as the basis.
Dispersion Zone: A buffer zone around the moving average band for more sensitive overbought/oversold detection.
Dynamic RSI Coloring:
🟢 Green: RSI breaks above the dispersion zone.
🔴 Red: RSI breaks below the dispersion zone.
🟡 Yellow: RSI inside the zone (neutral).
Trendlines at RSI levels: 40 (green), 50 (yellow), 60 (red).
Alerts when RSI crosses dispersion zones.
✅ 2. CM_Williams_Vix_Fix
Designed to simulate VIX-like volatility spikes on non-VIX instruments.
Detects potential market bottoms by measuring price deviation from recent highs.
Includes:
Bollinger Band range on WVF.
Percentile high/low zones to detect significant volatility moves.
Histogram plot of WVF for quick visual alerts.
Color-coded spikes (green when above upper thresholds).
⚙️ User Controls:
Adjustable RSI, Bollinger Band, and dispersion settings.
Toggle options for:
Viewing high/low VIX percentiles.
Showing standard deviation bands for WVF.
Custom trendline display levels at RSI key areas.
📌 Best Use Cases:
Detect early market reversals and volatility spikes.
Combine RSI strength with volatility-based bottom signals.
Layer dispersion-based logic on top of classic RSI strategies.
MACD + RSI + EMA + BB + ATR Day Trading StrategyEntry Conditions and Signals
The strategy implements a multi-layered filtering approach to entry conditions, requiring alignment across technical indicators, timeframes, and market conditions .
Long Entry Requirements
Trend Filter: Fast EMA (9) must be above Slow EMA (21), price must be above Fast EMA, and higher timeframe must confirm uptrend
MACD Signal: MACD line crosses above signal line, indicating increasing bullish momentum
RSI Condition: RSI below 70 (not overbought) but above 40 (showing momentum)
Volume & Volatility: Current volume exceeds 1.2x 20-period average and ATR shows sufficient market movement
Time Filter: Trading occurs during optimal hours (9:30-11:30 AM ET) when market volatility is typically highest
Exit Strategies
The strategy employs multiple exit mechanisms to adapt to changing market conditions and protect profits :
Stop Loss Management
Initial Stop: Placed at 2.0x ATR from entry price, adapting to current market volatility
Trailing Stop: 1.5x ATR trailing stop that moves up (for longs) or down (for shorts) as price moves favorably
Time-Based Exits: All positions closed by end of trading day (4:00 PM ET) to avoid overnight risk
Best Practices for Implementation
Settings
Chart Setup: 5-minute timeframe for execution with 15-minute chart for trend confirmation
Session Times: Focus on 9:30-11:30 AM ET trading for highest volatility and opportunity
Candle Volume Profile Marker# 📊 Candle Volume Profile Marker (CVPM)
**Transform your chart analysis with precision volume profile levels on every candle!**
The Candle Volume Profile Marker displays key volume profile levels (POC, VAH, VAL) for individual candles, giving you granular insights into price acceptance and rejection zones at the micro level.
## 🎯 **Key Features**
### **Core Levels**
- **POC (Point of Control)** - The price level with highest volume concentration
- **VAH (Value Area High)** - Upper boundary of the value area
- **VAL (Value Area Low)** - Lower boundary of the value area
- **Customizable Value Area** - Adjust percentage from 50% to 90%
### **Flexible Display Options**
- **Current Candle Only** or **Historical Lookback** (1-50 candles)
- **Multiple Visual Styles** - Lines, dots, crosses, triangles, squares, diamonds
- **Smart Line Extensions** - Right only, both sides, or left only
- **4 Line Length Modes** - Normal, Short, Ultra Short, Micro (for ultra-clean charts)
- **Full Color Customization** - Colors, opacity, line width
- **Adjustable Marker Sizes** - Tiny to Large
### **Advanced Calculation Methods**
Choose your POC calculation:
- **Weighted** - Smart estimation based on volume distribution (default)
- **Close** - Uses closing price
- **Middle** - High-Low midpoint
- **VWAP** - Volume weighted average price
### **Professional Tools**
- **Real-time Info Table** - Current levels display
- **Smart Alerts** - POC crosses and Value Area breakouts
- **Highlight Current Candle** - Extended dotted lines for current levels
- **Developing Levels** - Real-time updates for active candle
## 🚀 **Why Use CVPM?**
### **Precision Trading**
- Identify exact support/resistance on each candle
- Spot volume acceptance/rejection zones
- Plan entries and exits with micro-level precision
### **Clean & Customizable**
- Lines extend only right (eliminates confusion)
- Ultra-short line options for minimal chart clutter
- Professional appearance with full customization
### **Multiple Timeframes**
- Works on any timeframe from 1-minute to monthly
- Historical analysis with adjustable lookback
- Real-time developing levels
## 📈 **Perfect For**
- **Day Traders** - Micro-level entry/exit points
- **Swing Traders** - Key levels for position management
- **Volume Analysis** - Understanding price acceptance zones
- **Support/Resistance Trading** - Precise level identification
- **Breakout Trading** - Value area breakout alerts
## ⚙️ **Easy Setup**
1. Add indicator to your chart
2. Choose your preferred visual style (lines/dots)
3. Select line extension (right-only recommended)
4. Adjust line length (try "Ultra Short" for clean charts)
5. Customize colors and enable alerts
## 🎨 **Customization Groups**
- **Display Options** - What to show and how many candles
- **Calculation** - POC method and value area percentage
- **POC Visual** - Style, color, width, length for Point of Control
- **Value Area Visual** - Style, color, width, length for VAH/VAL
- **Line Settings** - Extension direction and length modes
- **Size** - Marker sizes and opacity
## 🔔 **Built-in Alerts**
- Price crosses above/below POC
- Value Area breakouts (up/down)
- Fully customizable alert messages
## 💡 **Pro Tips**
- Use "Right Only" extension to avoid confusion about which candle owns the levels
- Try "Ultra Short" or "Micro" line modes for cleaner charts
- Enable "Highlight Current Candle" for extended reference lines
- Combine with volume indicators for enhanced analysis
- Use different colors for easy POC/VAH/VAL identification
---
**Transform your volume analysis today with the most flexible and customizable candle-level volume profile indicator available!**
*Perfect for traders who demand precision and clean, professional charts.*
Bullish Bearish Signal with EMA Color + LabelsThis script generates clear BUY and SELL signals based on a combination of trend direction, momentum, and confirmation from multiple indicators. It is intended to help traders identify strong bullish or bearish conditions using commonly trusted tools: EMA 200, MACD, and RSI.
🔍 How it works:
The strategy combines three key elements:
EMA 200 Trend Filter
Identifies the long-term trend:
Price above EMA200 → Bullish trend bias
Price below EMA200 → Bearish trend bias
The EMA line is color-coded:
🔵 Blue for bullish
🔴 Red for bearish
⚪ Gray for neutral/unclear
MACD Crossover
Detects shifts in market momentum:
Bullish: MACD line crosses above signal line
Bearish: MACD line crosses below signal line
RSI Confirmation
Adds an extra layer of confirmation:
Bullish: RSI is above its signal line
Bearish: RSI is below its signal line
✅ Signal Logic:
BUY Signal appears when:
Price > EMA200
MACD crosses up
RSI > its signal line
SELL Signal appears when:
Price < EMA200
MACD crosses down
RSI < its signal line
Labels will appear on the chart to highlight these events.
🔔 Alerts:
The script includes alerts for both Buy and Sell conditions, so you can be notified in real-time when they occur.
📈 How to Use:
Best used in trending markets.
Recommended for higher timeframes (1H and above).
May be combined with other tools such as support/resistance or candlestick analysis.
⚠️ Disclaimer: This script is intended for educational purposes only and does not constitute financial advice or a trading recommendation.
FVG Premium [no1x]█ OVERVIEW
This indicator provides a comprehensive toolkit for identifying, visualizing, and tracking Fair Value Gaps (FVGs) across three distinct timeframes (current chart, a user-defined Medium Timeframe - MTF, and a user-defined High Timeframe - HTF). It is designed to offer traders enhanced insight into FVG dynamics through detailed state monitoring (formation, partial fill, full mitigation, midline touch), extensive visual customization for FVG representation, and a rich alert system for timely notifications on FVG-related events.
█ CONCEPTS
This indicator is built upon the core concept of Fair Value Gaps (FVGs) and their significance in price action analysis, offering a multi-layered approach to their detection and interpretation across different timeframes.
Fair Value Gaps (FVGs)
A Fair Value Gap (FVG), also known as an imbalance, represents a range in price delivery where one side of the market (buying or selling) was more aggressive, leaving an inefficiency or an "imbalance" in the price action. This concept is prominently featured within Smart Money Concepts (SMC) and Inner Circle Trader (ICT) methodologies, where such gaps are often interpreted as footprints left by "smart money" due to rapid, forceful price movements. These methodologies suggest that price may later revisit these FVG zones to rebalance a prior inefficiency or to seek liquidity before continuing its path. These gaps are typically identified by a three-bar pattern:
Bullish FVG : This is a three-candle formation where the second candle shows a strong upward move. The FVG is the space created between the high of the first candle (bottom of FVG) and the low of the third candle (top of FVG). This indicates a strong upward impulsive move.
Bearish FVG : This is a three-candle formation where the second candle shows a strong downward move. The FVG is the space created between the low of the first candle (top of FVG) and the high of the third candle (bottom of FVG). This indicates a strong downward impulsive move.
FVGs are often watched by traders as potential areas where price might return to "rebalance" or find support/resistance.
Multi-Timeframe (MTF) Analysis
The indicator extends FVG detection beyond the current chart's timeframe (Low Timeframe - LTF) to two higher user-defined timeframes: Medium Timeframe (MTF) and High Timeframe (HTF). This allows traders to:
Identify FVGs that might be significant on a broader market structure.
Observe how FVGs from different timeframes align or interact.
Gain a more comprehensive perspective on potential support and resistance zones.
FVG State and Lifecycle Management
The indicator actively tracks the lifecycle of each detected FVG:
Formation : The initial identification of an FVG.
Partial Fill (Entry) : When price enters but does not completely pass through the FVG. The indicator updates the "current" top/bottom of the FVG to reflect the filled portion.
Midline (Equilibrium) Touch : When price touches the 50% level of the FVG.
Full Mitigation : When price completely trades through the FVG, effectively "filling" or "rebalancing" the gap. The indicator records the mitigation time.
This state tracking is crucial for understanding how price interacts with these zones.
FVG Classification (Large FVG)
FVGs can be optionally classified as "Large FVGs" (LV) if their size (top to bottom range) exceeds a user-defined multiple of the Average True Range (ATR) for that FVG's timeframe. This helps distinguish FVGs that are significantly larger relative to recent volatility.
Visual Customization and Information Delivery
A key concept is providing extensive control over how FVGs are displayed. This control is achieved through a centralized set of visual parameters within the indicator, allowing users to configure numerous aspects (colors, line styles, visibility of boxes, midlines, mitigation lines, labels, etc.) for each timeframe. Additionally, an on-chart information panel summarizes the nearest unmitigated bullish and bearish FVG levels for each active timeframe, providing a quick glance at key price points.
█ FEATURES
This indicator offers a rich set of features designed to provide a highly customizable and comprehensive Fair Value Gap (FVG) analysis experience. Users can tailor the FVG detection, visual representation, and alerting mechanisms across three distinct timeframes: the current chart (Low Timeframe - LTF), a user-defined Medium Timeframe (MTF), and a user-defined High Timeframe (HTF).
Multi-Timeframe FVG Detection and Display
The core strength of this indicator lies in its ability to identify and display FVGs from not only the current chart's timeframe (LTF) but also from two higher, user-selectable timeframes (MTF and HTF).
Timeframe Selection: Users can specify the exact MTF (e.g., "60", "240") and HTF (e.g., "D", "W") through dedicated inputs in the "MTF (Medium Timeframe)" and "HTF (High Timeframe)" settings groups. The visibility of FVGs from these higher timeframes can be toggled independently using the "Show MTF FVGs" and "Show HTF FVGs" checkboxes.
Consistent Detection Logic: The FVG detection logic, based on the classic three-bar imbalance pattern detailed in the 'Concepts' section, is applied consistently across all selected timeframes (LTF, MTF, HTF)
Timeframe-Specific Visuals: Each timeframe's FVGs (LTF, MTF, HTF) can be customized with unique colors for bullish/bearish states and their mitigated counterparts. This allows for easy visual differentiation of FVGs originating from different market perspectives.
Comprehensive FVG Visualization Options
The indicator provides extensive control over how FVGs are visually represented on the chart for each timeframe (LTF, MTF, HTF).
FVG Boxes:
Visibility: Main FVG boxes can be shown or hidden per timeframe using the "Show FVG Boxes" (for LTF), "Show Boxes" (for MTF/HTF) inputs.
Color Customization: Colors for bullish, bearish, active, and mitigated FVG boxes (including Large FVGs, if classified) are fully customizable for each timeframe.
Box Extension & Length: FVG boxes can either be extended to the right indefinitely ("Extend Boxes Right") or set to a fixed length in bars ("Short Box Length" or "Box Length" equivalent inputs).
Box Labels: Optional labels can display the FVG's timeframe and fill percentage on the box. These labels are configurable for all timeframes (LTF, MTF, and HTF). Please note: If FVGs are positioned very close to each other on the chart, their respective labels may overlap. This can potentially lead to visual clutter, and it is a known behavior in the current version of the indicator.
Box Borders: Visibility, width, style (solid, dashed, dotted), and color of FVG box borders are customizable per timeframe.
Midlines (Equilibrium/EQ):
Visibility: The 50% level (midline or EQ) of FVGs can be shown or hidden for each timeframe.
Style Customization: Width, style, and color of the midline are customizable per timeframe. The indicator tracks if this midline has been touched by price.
Mitigation Lines:
Visibility: Mitigation lines (representing the FVG's opening level that needs to be breached for full mitigation) can be shown or hidden for each timeframe. If shown, these lines are always extended to the right.
Style Customization: Width, style, and color of the mitigation line are customizable per timeframe.
Mitigation Line Labels: Optional price labels can be displayed on mitigation lines, with a customizable horizontal bar offset for positioning. For optimal label placement, the following horizontal bar offsets are recommended: 4 for LTF, 8 for MTF, and 12 for HTF.
Persistence After Mitigation: Users can choose to keep mitigation lines visible even after an FVG is fully mitigated, with a distinct color for such lines. Importantly, this option is only effective if the general setting 'Hide Fully Mitigated FVGs' is disabled, as otherwise, the entire FVG and its lines will be removed upon mitigation.
FVG State Management and Behavior
The indicator tracks and visually responds to changes in FVG states.
Hide Fully Mitigated FVGs: This option, typically found in the indicator's general settings, allows users to automatically remove all visual elements of an FVG from the chart once price has fully mitigated it. This helps maintain chart clarity by focusing on active FVGs.
Partial Fill Visualization: When price enters an FVG, the indicator offers a dynamic visual representation: the portion of the FVG that has been filled is shown as a "mitigated box" (typically with a distinct color), while the original FVG box shrinks to clearly highlight the remaining, unfilled portion. This two-part display provides an immediate visual cue about how much of the FVG's imbalance has been addressed and what potential remains within the gap.
Visual Filtering by ATR Proximity: To help users focus on the most relevant price action, FVGs can be dynamically hidden if they are located further from the current price than a user-defined multiple of the Average True Range (ATR). This behavior is controlled by the "Filter Band Width (ATR Multiple)" input; setting this to zero disables the filter entirely, ensuring all detected FVGs remain visible regardless of their proximity to price.
Alternative Usage Example: Mitigation Lines as Key Support/Resistance Levels
For traders preferring a minimalist chart focused on key Fair Value Gap (FVG) levels, the indicator's visualization settings can be customized to display only FVG mitigation lines. This approach leverages these lines as potential support and resistance zones, reflecting areas where price might revisit to address imbalances.
To configure this view:
Disable FVG Boxes: Turn off "Show FVG Boxes" (for LTF) or "Show Boxes" (for MTF/HTF) for the desired timeframes.
Hide Midlines: Disable the visibility of the 50% FVG Midlines (Equilibrium/EQ).
Ensure Mitigation Lines are Visible: Keep "Mitigation Lines" enabled.
Retain All Mitigation Lines:
Disable the "Hide Fully Mitigated FVGs" option in the general settings.
Enable the feature to "keep mitigation lines visible even after an FVG is fully mitigated". This ensures lines from all FVGs (active or fully mitigated) remain on the chart, which is only effective if "Hide Fully Mitigated FVGs" is disabled.
This setup offers:
A Decluttered Chart: Focuses solely on the FVG opening levels.
Precise S/R Zones: Treats mitigation lines as specific points for potential price reactions.
Historical Level Analysis: Includes lines from past, fully mitigated FVGs for a comprehensive view of significant price levels.
For enhanced usability with this focused view, consider these optional additions:
The on-chart Information Panel can be activated to display a quick summary of the nearest unmitigated FVG levels.
Mitigation Line Labels can also be activated for clear price level identification. A customizable horizontal bar offset is available for positioning these labels; for example, offsets of 4 for LTF, 8 for MTF, and 12 for HTF can be effective.
FVG Classification (Large FVG)
This feature allows for distinguishing FVGs based on their size relative to market volatility.
Enable Classification: Users can enable "Classify FVG (Large FVG)" to identify FVGs that are significantly larger than average.
ATR-Based Threshold: An FVG is classified as "Large" if its height (price range) is greater than or equal to the Average True Range (ATR) of its timeframe multiplied by a user-defined "Large FVG Threshold (ATR Multiple)". The ATR period for this calculation is also configurable.
Dedicated Colors: Large FVGs (both bullish/bearish and active/mitigated) can be assigned unique colors, making them easily distinguishable on the chart.
Panel Icon: Large FVGs are marked with a special icon in the Info Panel.
Information Panel
An on-chart panel provides a quick summary of the nearest unmitigated FVG levels.
Visibility and Position: The panel can be shown/hidden and positioned in any of the nine standard locations on the chart (e.g., Top Right, Middle Center).
Content: It displays the price levels of the nearest unmitigated bullish and bearish FVGs for LTF, MTF (if active), and HTF (if active). It also indicates if these nearest FVGs are Large FVGs (if classification is enabled) using a selectable icon.
Styling: Text size, border color, header background/text colors, default text color, and "N/A" cell background color are customizable.
Highlighting: Background and text colors for the cells displaying the overall nearest bullish and bearish FVG levels (across all active timeframes) can be customized to draw attention to the most proximate FVG.
Comprehensive Alert System
The indicator offers a granular alert system for various FVG-related events, configurable for each timeframe (LTF, MTF, HTF) independently. Users can enable alerts for:
New FVG Formation: Separate alerts for new bullish and new bearish FVG formations.
FVG Entry/Partial Fill: Separate alerts for price entering a bullish FVG or a bearish FVG.
FVG Full Mitigation: Separate alerts for full mitigation of bullish and bearish FVGs.
FVG Midline (EQ) Touch: Separate alerts for price touching the midline of a bullish or bearish FVG.
Alert messages are detailed, providing information such as the timeframe, FVG type (bull/bear, Large FVG), relevant price levels, and timestamps.
█ NOTES
This section provides additional information regarding the indicator's usage, performance considerations, and potential interactions with the TradingView platform. Understanding these points can help users optimize their experience and troubleshoot effectively.
Performance and Resource Management
Maximum FVGs to Track : The "Max FVGs to Track" input (defaulting to 25) limits the number of FVG objects processed for each category (e.g., LTF Bullish, MTF Bearish). Increasing this value significantly can impact performance due to more objects being iterated over and potentially drawn, especially when multiple timeframes are active.
Drawing Object Limits : To manage performance, this script sets its own internal limits on the number of drawing objects it displays. While it allows for up to approximately 500 lines (max_lines_count=500) and 500 labels (max_labels_count=500), the number of FVG boxes is deliberately restricted to a maximum of 150 (max_boxes_count=150). This specific limit for boxes is a key performance consideration: displaying too many boxes can significantly slow down the indicator, and a very high number is often not essential for analysis. Enabling all visual elements for many FVGs across all three timeframes can cause the indicator to reach these internal limits, especially the stricter box limit
Optimization Strategies : To help you manage performance, reduce visual clutter, and avoid exceeding drawing limits when using this indicator, I recommend the following strategies:
Maintain or Lower FVG Tracking Count: The "Max FVGs to Track" input defaults to 25. I find this value generally sufficient for effective analysis and balanced performance. You can keep this default or consider reducing it further if you experience performance issues or prefer a less dense FVG display.
Utilize Proximity Filtering: I suggest activating the "Filter Band Width (ATR Multiple)" option (found under "General Settings") to display only those FVGs closer to the current price. From my experience, a value of 5 for the ATR multiple often provides a good starting point for balanced performance, but you should feel free to adjust this based on market volatility and your specific trading needs.
Hide Fully Mitigated FVGs: I strongly recommend enabling the "Hide Fully Mitigated FVGs" option. This setting automatically removes all visual elements of an FVG from the chart once it has been fully mitigated by price. Doing so significantly reduces the number of active drawing objects, lessens computational load, and helps maintain chart clarity by focusing only on active, relevant FVGs.
Disable FVG Display for Unused Timeframes: If you are not actively monitoring certain higher timeframes (MTF or HTF) for FVG analysis, I advise disabling their display by unchecking "Show MTF FVGs" or "Show HTF FVGs" respectively. This can provide a significant performance boost.
Simplify Visual Elements: For active FVGs, consider hiding less critical visual elements if they are not essential for your specific analysis. This could include box labels, borders, or even entire FVG boxes if, for example, only the mitigation lines are of interest for a particular timeframe.
Settings Changes and Platform Limits : This indicator is comprehensive and involves numerous calculations and drawings. When multiple settings are changed rapidly in quick succession, it is possible, on occasion, for TradingView to issue a "Runtime error: modify_study_limit_exceeding" or similar. This can cause the indicator to temporarily stop updating or display errors.
Recommended Approach : When adjusting settings, it is advisable to wait a brief moment (a few seconds) after each significant change. This allows the indicator to reprocess and update on the chart before another change is made
Error Recovery : Should such a runtime error occur, making a minor, different adjustment in the settings (e.g., toggling a checkbox off and then on again) and waiting briefly will typically allow the indicator to recover and resume correct operation. This behavior is related to platform limitations when handling complex scripts with many inputs and drawing objects.
Multi-Timeframe (MTF/HTF) Data and Behavior
HTF FVG Confirmation is Essential: : For an FVG from a higher timeframe (MTF or HTF) to be identified and displayed on your current chart (LTF), the three-bar pattern forming the FVG on that higher timeframe must consist of fully closed bars. The indicator does not draw speculative FVGs based on incomplete/forming bars from higher timeframes.
Data Retrieval and LTF Processing: The indicator may use techniques like lookahead = barmerge.lookahead_on for timely data retrieval from higher timeframes. However, the actual detection of an FVG occurs after all its constituent bars on the HTF have closed.
Appearance Timing on LTF (1 LTF Candle Delay): As a natural consequence of this, an FVG that is confirmed on an HTF (i.e., its third bar closes) will typically become visible on your LTF chart one LTF bar after its confirmation on the HTF.
Example: Assume an FVG forms on a 30-minute chart at 15:30 (i.e., with the close of the 30-minute bar that covers the 15:00-15:30 period). If you are monitoring this FVG on a 15-minute chart, the indicator will detect this newly formed 30-minute FVG while processing the data for the 15-minute bar that starts at 15:30 and closes at 15:45. Therefore, the 30-minute FVG will become visible on your 15-minute chart at the earliest by 15:45 (i.e., with the close of that relevant 15-minute LTF candle). This means the HTF FVG is reflected on the LTF chart with a delay equivalent to one LTF candle.
FVG Detection and Display Logic
Fair Value Gaps (FVGs) on the current chart timeframe (LTF) are detected based on barstate.isconfirmed. This means the three-bar pattern must be complete with closed bars before an FVG is identified. This confirmation method prevents FVGs from being prematurely identified on the forming bar.
Alerts
Alert Setup : To receive alerts from this indicator, you must first ensure you have enabled the specific alert conditions you are interested in within the indicator's own settings (see 'Comprehensive Alert System' under the 'FEATURES' section). Once configured, open TradingView's 'Create Alert' dialog. In the 'Condition' tab, select this indicator's name, and crucially, choose the 'Any alert() function call' option from the dropdown list. This setup allows the indicator to trigger alerts based on the precise event conditions you have activated in its settings
Alert Frequency : Alerts are designed to trigger once per bar close (alert.freq_once_per_bar_close) for the specific event.
User Interface (UI) Tips
Settings Group Icons: In the indicator settings menu, timeframe-specific groups are marked with star icons for easier navigation: 🌟 for LTF (Current Chart Timeframe), 🌟🌟 for MTF (Medium Timeframe), and 🌟🌟🌟 for HTF (High Timeframe).
Dependent Inputs: Some input settings are dependent on others being enabled. These dependencies are visually indicated in the settings menu using symbols like "↳" (dependent setting on the next line), "⟷" (mutually exclusive inline options), or "➜" (directly dependent inline option).
Settings Layout Overview: The indicator settings are organized into logical groups for ease of use. Key global display controls – such as toggles for MTF FVGs, HTF FVGs (along with their respective timeframe selectors), and the Information Panel – are conveniently located at the very top within the '⚙️ General Settings' group. This placement allows for quick access to frequently adjusted settings. Other sections provide detailed customization options for each timeframe (LTF, MTF, HTF), specific FVG components, and alert configurations.
█ FOR Pine Script® CODERS
This section provides a high-level overview of the FVG Premium indicator's internal architecture, data flow, and the interaction between its various library components. It is intended for Pine Script™ programmers who wish to understand the indicator's design, potentially extend its functionality, or learn from its structure.
System Architecture and Modular Design
The indicator is architected moduarly, leveraging several custom libraries to separate concerns and enhance code organization and reusability. Each library has a distinct responsibility:
FvgTypes: Serves as the foundational data definition layer. It defines core User-Defined Types (UDTs) like fvgObject (for storing all attributes of an FVG) and drawSettings (for visual configurations), along with enumerations like tfType.
CommonUtils: Provides utility functions for common tasks like mapping user string inputs (e.g., "Dashed" for line style) to their corresponding Pine Script™ constants (e.g., line.style_dashed) and formatting timeframe strings for display.
FvgCalculations: Contains the core logic for FVG detection (both LTF and MTF/HTF via requestMultiTFBarData), FVG classification (Large FVGs based on ATR), and checking FVG interactions with price (mitigation, partial fill).
FvgObject: Implements an object-oriented approach by attaching methods to the fvgObject UDT. These methods manage the entire visual lifecycle of an FVG on the chart, including drawing, updating based on state changes (e.g., mitigation), and deleting drawing objects. It's responsible for applying the visual configurations defined in drawSettings.
FvgPanel: Manages the creation and dynamic updates of the on-chart information panel, which displays key FVG levels.
The main indicator script acts as the orchestrator, initializing these libraries, managing user inputs, processing data flow between libraries, and handling the main event loop (bar updates) for FVG state management and alerts.
Core Data Flow and FVG Lifecycle Management
The general data flow and FVG lifecycle can be summarized as follows:
Input Processing: User inputs from the "Settings" dialog are read by the main indicator script. Visual style inputs (colors, line styles, etc.) are consolidated into a types.drawSettings object (defined in FvgTypes). Other inputs (timeframes, filter settings, alert toggles) control the behavior of different modules. CommonUtils assists in mapping some string inputs to Pine constants.
FVG Detection:
For the current chart timeframe (LTF), FvgCalculations.detectFvg() identifies potential FVGs based on bar patterns.
For MTF/HTF, the main indicator script calls FvgCalculations.requestMultiTFBarData() to fetch necessary bar data from higher timeframes, then FvgCalculations.detectMultiTFFvg() identifies FVGs.
Newly detected FVGs are instantiated as types.fvgObject and stored in arrays within the main script. These objects also undergo classification (e.g., Large FVG) by FvgCalculations.
State Update & Interaction: On each bar, the main indicator script iterates through active FVG objects to manage their state based on price interaction:
Initially, the main script calls FvgCalculations.fvgInteractionCheck() to efficiently determine if the current bar's price might be interacting with a given FVG.
If a potential interaction is flagged, the main script then invokes methods directly on the fvgObject instance (e.g., updateMitigation(), updatePartialFill(), checkMidlineTouch(), which are part of FvgObject).
These fvgObject methods are responsible for the detailed condition checking and the actual modification of the FVG's state. For instance, the updateMitigation() and updatePartialFill() methods internally utilize specific helper functions from FvgCalculations (like checkMitigation() and checkPartialMitigation()) to confirm the precise nature of the interaction before updating the fvgObject’s state fields (such as isMitigated, currentTop, currentBottom, or isMidlineTouched).
Visual Rendering:
The FvgObject.updateDrawings() method is called for each fvgObject. This method is central to drawing management; it creates, updates, or deletes chart drawings (boxes, lines, labels) based on the FVG's current state, its prev_* (previous bar state) fields for optimization, and the visual settings passed via the drawSettings object.
Information Panel Update: The main indicator script determines the nearest FVG levels, populates a panelData object (defined in FvgPanelLib), and calls FvgPanel.updatePanel() to refresh the on-chart display.
Alert Generation: Based on the updated FVG states and user-enabled alert settings, the main indicator script constructs and triggers alerts using Pine Script's alert() function."
Key Design Considerations
UDT-Centric Design: The fvgObject UDT is pivotal, acting as a stateful container for all information related to a single FVG. Most operations revolve around creating, updating, or querying these objects.
State Management: To optimize drawing updates and manage FVG lifecycles, fvgObject instances store their previous bar's state (e.g., prevIsVisible, prevCurrentTop). The FvgObject.updateDrawings() method uses this to determine if a redraw is necessary, minimizing redundant drawing calls.
Settings Object: A drawSettings object is populated once (or when inputs change) and passed to drawing functions. This avoids repeatedly reading numerous input() values on every bar or within loops, improving performance.
Dynamic Arrays for FVG Storage: Arrays are used to store collections of fvgObject instances, allowing for dynamic management (adding new FVGs, iterating for updates).
CommonUtils█ OVERVIEW
This library is a utility tool for Pine Script™ developers. It provides a collection of helper functions designed to simplify common tasks such as mapping user-friendly string inputs to Pine Script™ constants and formatting timeframe strings for display. The primary goal is to make main scripts cleaner, more readable, and reduce repetitive boilerplate code. It is envisioned as an evolving resource, with potential for new utilities to be added over time based on community needs and feedback.
█ CONCEPTS
The library primarily focuses on two main concepts:
Input Mapping
Pine Script™ often requires specific constants for function parameters (e.g., `line.style_dashed` for line styles, `position.top_center` for table positions). However, presenting these technical constants directly to users in script inputs can be confusing. Input mapping involves:
Allowing users to select options from more descriptive, human-readable strings (e.g., "Dashed", "Top Center") in the script's settings.
Providing functions within this library (e.g., `mapLineStyle`, `mapTablePosition`) that take these user-friendly strings as input.
Internally, these functions use switch statements or similar logic to convert (map) the input string to the corresponding Pine Script™ constant required by built-in functions.
This approach enhances user experience and simplifies the main script's logic by centralizing the mapping process.
Timeframe Formatting
Raw timeframe strings obtained from variables like `timeframe.period` (e.g., "1", "60", "D", "W") or user inputs are not always ideal for direct display in labels or panels. The `formatTimeframe` function addresses this by:
Taking a raw timeframe string as input.
Parsing this string to identify its numerical part and unit (e.g., minutes, hours, days, weeks, months, seconds, milliseconds).
Converting it into a more standardized and readable format (e.g., "1min", "60min", "Daily", "Weekly", "1s", "10M").
Offering an optional `customSuffix` parameter (e.g., " FVG", " Period") to append to the formatted string, making labels more descriptive, especially in multi-timeframe contexts.
The function is designed to correctly interpret various common timeframe notations used in TradingView.
█ NOTES
Ease of Use: The library functions are designed with simple and understandable signatures. They typically take a string input and return the corresponding Pine Script™ constant or a formatted string.
Default Behaviors: Mapping functions (`mapLineStyle`, `mapTablePosition`, `mapTextSize`) generally return a sensible default value (e.g., `line.style_solid` for `mapLineStyle`) in case of a non-matching input. This helps prevent errors in the main script.
Extensibility of Formatting: The `formatTimeframe` function, with its `customSuffix` parameter, allows for flexible customization of timeframe labels to suit the specific descriptive needs of different indicators or contexts.
Performance Considerations: These utility functions primarily use basic string operations and switch statements. For typical use cases, their impact on overall script performance is negligible. However, if a function like `formatTimeframe` were to be called excessively in a loop with dynamic inputs (which is generally not its intended use), performance should be monitored.
No Dependencies: This library is self-contained and does not depend on any other external Pine Script™ libraries.
█ EXPORTED FUNCTIONS
mapLineStyle(styleString)
Maps a user-provided line style string to its corresponding Pine Script™ line style constant.
Parameters:
styleString (simple string) : The input string representing the desired line style (e.g., "Solid", "Dashed", "Dotted" - typically from constants like LS1, LS2, LS3).
Returns: The Pine Script™ constant for the line style (e.g., line.style_solid). Defaults to line.style_solid if no match.
mapTablePosition(positionString)
Maps a user-provided table position string to its corresponding Pine Script™ position constant.
Parameters:
positionString (simple string) : The input string representing the desired table position (e.g., "Top Right", "Top Center" - typically from constants like PP1, PP2).
Returns: The Pine Script™ constant for the table position (e.g., position.top_right). Defaults to position.top_right if no match.
mapTextSize(sizeString)
Maps a user-provided text size string to its corresponding Pine Script™ size constant.
Parameters:
sizeString (simple string) : The input string representing the desired text size (e.g., "Tiny", "Small" - typically from constants like PTS1, PTS2).
Returns: The Pine Script™ constant for the text size (e.g., size.tiny). Defaults to size.small if no match.
formatTimeframe(tfInput, customSuffix)
Formats a raw timeframe string into a more display-friendly string, optionally appending a custom suffix.
Parameters:
tfInput (simple string) : The raw timeframe string from user input or timeframe.period (e.g., "1", "60", "D", "W", "1S", "10M", "2H").
customSuffix (simple string) : An optional suffix to append to the formatted timeframe string (e.g., " FVG", " Period"). Defaults to an empty string.
Returns: The formatted timeframe string (e.g., "1min", "60min", "Daily", "Weekly", "1s", "10min", "2h") with the custom suffix appended.
FvgPanel█ OVERVIEW
This library provides functionalities for creating and managing a display panel within a Pine Script™ indicator. Its primary purpose is to offer a structured way to present Fair Value Gap (FVG) information, specifically the nearest bullish and bearish FVG levels across different timeframes (Current, MTF, HTF), directly on the chart. The library handles the table's structure, header initialization, and dynamic cell content updates.
█ CONCEPTS
The core of this library revolves around presenting summarized FVG data in a clear, tabular format. Key concepts include:
FVG Data Aggregation and Display
The panel is designed to show at-a-glance information about the closest active FVG mitigation levels. It doesn't calculate these FVGs itself but relies on the main script to provide this data. The panel is structured with columns for timeframes (TF), Bullish FVGs, and Bearish FVGs, and rows for "Current" (LTF), "MTF" (Medium Timeframe), and "HTF" (High Timeframe).
The `panelData` User-Defined Type (UDT)
To facilitate the transfer of information to be displayed, the library defines a UDT named `panelData`. This structure is central to the library's operation and is designed to hold all necessary values for populating the panel's data cells for each relevant FVG. Its fields include:
Price levels for the nearest bullish and bearish FVGs for LTF, MTF, and HTF (e.g., `nearestBullMitLvl`, `nearestMtfBearMitLvl`).
Boolean flags to indicate if these FVGs are classified as "Large Volume" (LV) (e.g., `isNearestBullLV`, `isNearestMtfBearLV`).
Color information for the background and text of each data cell, allowing for conditional styling based on the FVG's status or proximity (e.g., `ltfBullBgColor`, `mtfBearTextColor`).
The design of `panelData` allows the main script to prepare all display-related data and styling cues in one object, which is then passed to the `updatePanel` function for rendering. This separation of data preparation and display logic keeps the library focused on its presentation task.
Visual Cues and Formatting
Price Formatting: Price levels are formatted to match the instrument's minimum tick size using an internal `formatPrice` helper function, ensuring consistent and accurate display.
Large FVG Icon: If an FVG is marked as a "Large Volume" FVG in the `panelData` object, a user-specified icon (e.g., an emoji) is prepended to its price level in the panel, providing an immediate visual distinction.
Conditional Styling: The background and text colors for each FVG level displayed in the panel can be individually controlled via the `panelData` object, enabling the main script to implement custom styling rules (e.g., highlighting the overall nearest FVG across all timeframes).
Handling Missing Data: If no FVG data is available for a particular cell (i.e., the corresponding level in `panelData` is `na`), the panel displays "---" and uses a specified background color for "Not Available" cells.
█ CALCULATIONS AND USE
Using the `FvgPanel` typically involves a two-stage process: initialization and dynamic updates.
Step 1: Panel Creation
First, an instance of the panel table is created once, usually during the script's initial setup. This is done using the `createPanel` function.
Call `createPanel()` with parameters defining its position on the chart, border color, border width, header background color, header text color, and header text size.
This function initializes the table with three columns ("TF", "Bull FVG", "Bear FVG") and three data rows labeled "Current", "MTF", and "HTF", plus a header row.
Store the returned `table` object in a `var` variable to persist it across bars.
// Example:
var table infoPanel = na
if barstate.isfirst
infoPanel := panel.createPanel(
position.top_right,
color.gray,
1,
color.new(color.gray, 50),
color.white,
size.small
)
Step 2: Panel Updates
On each bar, or whenever the FVG data changes (typically on `barstate.islast` or `barstate.isrealtime` for efficiency), the panel's content needs to be refreshed. This is done using the `updatePanel` function.
Populate an instance of the `panelData` UDT with the latest FVG information. This includes setting the nearest bullish/bearish mitigation levels for LTF, MTF, and HTF, their LV status, and their desired background and text colors.
Call `updatePanel()`, passing the persistent `table` object (from Step 1), the populated `panelData` object, the icon string for LV FVGs, the default text color for FVG levels, the background color for "N/A" cells, and the general text size for the data cells.
The `updatePanel` function will then clear previous data and fill the table cells with the new values and styles provided in the `panelData` object.
// Example (inside a conditional block like 'if barstate.islast'):
var panelData fvgDisplayData = panelData.new()
// ... (logic to populate fvgDisplayData fields) ...
// fvgDisplayData.nearestBullMitLvl = ...
// fvgDisplayData.ltfBullBgColor = ...
// ... etc.
if not na(infoPanel)
panel.updatePanel(
infoPanel,
fvgDisplayData,
"🔥", // LV FVG Icon
color.white,
color.new(color.gray, 70), // NA Cell Color
size.small
)
This workflow ensures that the panel is drawn only once and its cells are efficiently updated as new data becomes available.
█ NOTES
Data Source: This library is solely responsible for the visual presentation of FVG data in a table. It does not perform any FVG detection or calculation. The calling script must compute or retrieve the FVG levels, LV status, and desired styling to populate the `panelData` object.
Styling Responsibility: While `updatePanel` applies colors passed via the `panelData` object, the logic for *determining* those colors (e.g., highlighting the closest FVG to the current price) resides in the calling script.
Performance: The library uses `table.cell()` to update individual cells, which is generally more efficient than deleting and recreating the table on each update. However, the frequency of `updatePanel` calls should be managed by the main script (e.g., using `barstate.islast` or `barstate.isrealtime`) to avoid excessive processing on historical bars.
`series float` Handling: The price level fields within the `panelData` UDT (e.g., `nearestBullMitLvl`) can accept `series float` values, as these are typically derived from price data. The internal `formatPrice` function correctly handles `series float` for display.
Dependencies: The `FvgPanel` itself is self-contained and does not import other user libraries. It uses standard Pine Script™ table and string functionalities.
█ EXPORTED TYPES
panelData
Represents the data structure for populating the FVG information panel.
Fields:
nearestBullMitLvl (series float) : The price level of the nearest bullish FVG's mitigation point (bottom for bull) on the LTF.
isNearestBullLV (series bool) : True if the nearest bullish FVG on the LTF is a Large Volume FVG.
ltfBullBgColor (series color) : Background color for the LTF bullish FVG cell in the panel.
ltfBullTextColor (series color) : Text color for the LTF bullish FVG cell in the panel.
nearestBearMitLvl (series float) : The price level of the nearest bearish FVG's mitigation point (top for bear) on the LTF.
isNearestBearLV (series bool) : True if the nearest bearish FVG on the LTF is a Large Volume FVG.
ltfBearBgColor (series color) : Background color for the LTF bearish FVG cell in the panel.
ltfBearTextColor (series color) : Text color for the LTF bearish FVG cell in the panel.
nearestMtfBullMitLvl (series float) : The price level of the nearest bullish FVG's mitigation point on the MTF.
isNearestMtfBullLV (series bool) : True if the nearest bullish FVG on the MTF is a Large Volume FVG.
mtfBullBgColor (series color) : Background color for the MTF bullish FVG cell.
mtfBullTextColor (series color) : Text color for the MTF bullish FVG cell.
nearestMtfBearMitLvl (series float) : The price level of the nearest bearish FVG's mitigation point on the MTF.
isNearestMtfBearLV (series bool) : True if the nearest bearish FVG on the MTF is a Large Volume FVG.
mtfBearBgColor (series color) : Background color for the MTF bearish FVG cell.
mtfBearTextColor (series color) : Text color for the MTF bearish FVG cell.
nearestHtfBullMitLvl (series float) : The price level of the nearest bullish FVG's mitigation point on the HTF.
isNearestHtfBullLV (series bool) : True if the nearest bullish FVG on the HTF is a Large Volume FVG.
htfBullBgColor (series color) : Background color for the HTF bullish FVG cell.
htfBullTextColor (series color) : Text color for the HTF bullish FVG cell.
nearestHtfBearMitLvl (series float) : The price level of the nearest bearish FVG's mitigation point on the HTF.
isNearestHtfBearLV (series bool) : True if the nearest bearish FVG on the HTF is a Large Volume FVG.
htfBearBgColor (series color) : Background color for the HTF bearish FVG cell.
htfBearTextColor (series color) : Text color for the HTF bearish FVG cell.
█ EXPORTED FUNCTIONS
createPanel(position, borderColor, borderWidth, headerBgColor, headerTextColor, headerTextSize)
Creates and initializes the FVG information panel (table). Sets up the header rows and timeframe labels.
Parameters:
position (simple string) : The position of the panel on the chart (e.g., position.top_right). Uses position.* constants.
borderColor (simple color) : The color of the panel's border.
borderWidth (simple int) : The width of the panel's border.
headerBgColor (simple color) : The background color for the header cells.
headerTextColor (simple color) : The text color for the header cells.
headerTextSize (simple string) : The text size for the header cells (e.g., size.small). Uses size.* constants.
Returns: The newly created table object representing the panel.
updatePanel(panelTable, data, lvIcon, defaultTextColor, naCellColor, textSize)
Updates the content of the FVG information panel with the latest FVG data.
Parameters:
panelTable (table) : The table object representing the panel to be updated.
data (panelData) : An object containing the FVG data to display.
lvIcon (simple string) : The icon (e.g., emoji) to display next to Large Volume FVGs.
defaultTextColor (simple color) : The default text color for FVG levels if not highlighted.
naCellColor (simple color) : The background color for cells where no FVG data is available ("---").
textSize (simple string) : The text size for the FVG level data (e.g., size.small).
Returns: _void
FvgObject█ OVERVIEW
This library provides a suite of methods designed to manage the visual representation and lifecycle of Fair Value Gap (FVG) objects on a Pine Script™ chart. It extends the `fvgObject` User-Defined Type (UDT) by attaching object-oriented functionalities for drawing, updating, and deleting FVG-related graphical elements. The primary goal is to encapsulate complex drawing logic, making the main indicator script cleaner and more focused on FVG detection and state management.
█ CONCEPTS
This library is built around the idea of treating each Fair Value Gap as an "object" with its own visual lifecycle on the chart. This is achieved by defining methods that operate directly on instances of the `fvgObject` UDT.
Object-Oriented Approach for FVGs
Pine Script™ v6 introduced the ability to define methods for User-Defined Types (UDTs). This library leverages this feature by attaching specific drawing and state management functions (methods) directly to the `fvgObject` type. This means that instead of calling global functions with an FVG object as a parameter, you call methods *on* the FVG object itself (e.g., `myFvg.updateDrawings(...)`). This approach promotes better code organization and a more intuitive way to interact with FVG data.
FVG Visual Lifecycle Management
The core purpose of this library is to manage the complete visual journey of an FVG on the chart. This lifecycle includes:
Initial Drawing: Creating the first visual representation of a newly detected FVG, including its main box and optionally its midline and labels.
State Updates & Partial Fills: Modifying the FVG's appearance as it gets partially filled by price. This involves drawing a "mitigated" portion of the box and adjusting the `currentTop` or `currentBottom` of the remaining FVG.
Full Mitigation & Tested State: Handling how an FVG is displayed once fully mitigated. Depending on user settings, it might be hidden, or its box might change color/style to indicate it has been "tested." Mitigation lines can also be managed (kept or deleted).
Midline Interaction: Visually tracking if the price has touched the FVG's 50% equilibrium level (midline).
Visibility Control: Dynamically showing or hiding FVG drawings based on various criteria, such as user settings (e.g., hide mitigated FVGs, timeframe-specific visibility) or external filters (e.g., proximity to current price).
Deletion: Cleaning up all drawing objects associated with an FVG when it's no longer needed or when settings dictate its removal.
Centralized Drawing Logic
By encapsulating all drawing-related operations within the methods of this library, the main indicator script is significantly simplified. The main script can focus on detecting FVGs and managing their state (e.g., in arrays), while delegating the complex task of rendering and updating them on the chart to the methods herein.
Interaction with `fvgObject` and `drawSettings` UDTs
All methods within this library operate on an instance of the `fvgObject` UDT. This `fvgObject` holds not only the FVG's price/time data and state (like `isMitigated`, `currentTop`) but also the IDs of its associated drawing elements (e.g., `boxId`, `midLineId`).
The appearance of these drawings (colors, styles, visibility, etc.) is dictated by a `drawSettings` UDT instance, which is passed as a parameter to most drawing-related methods. This `drawSettings` object is typically populated from user inputs in the main script, allowing for extensive customization.
Stateful Drawing Object Management
The library's methods manage Pine Script™ drawing objects (boxes, lines, labels) by storing their IDs within the `fvgObject` itself (e.g., `fvgObject.boxId`, `fvgObject.mitigatedBoxId`, etc.). Methods like `draw()` create these objects and store their IDs, while methods like `updateDrawings()` modify them, and `deleteDrawings()` removes them using these stored IDs.
Drawing Optimization
The `updateDrawings()` method, which is the most comprehensive drawing management function, incorporates optimization logic. It uses `prev_*` fields within the `fvgObject` (e.g., `prevIsMitigated`, `prevCurrentTop`) to store the FVG's state from the previous bar. By comparing the current state with the previous state, and also considering changes in visibility or relevant drawing settings, it can avoid redundant and performance-intensive drawing operations if nothing visually significant has changed for that FVG.
█ METHOD USAGE AND WORKFLOW
The methods in this library are designed to be called in a logical sequence as an FVG progresses through its lifecycle. A crucial prerequisite for all visual methods in this library is a properly populated `drawSettings` UDT instance, which dictates every aspect of an FVG's appearance, from colors and styles to visibility and labels. This `settings` object must be carefully prepared in the main indicator script, typically based on user inputs, before being passed to these methods.
Here’s a typical workflow within a main indicator script:
1. FVG Instance Creation (External to this library)
An `fvgObject` instance is typically created by functions in another library (e.g., `FvgCalculations`) when a new FVG pattern is identified. This object will have its core properties (top, bottom, startTime, isBullish, tfType) initialized.
2. Initial Drawing (`draw` method)
Once a new `fvgObject` is created and its initial visibility is determined:
Call the `myFvg.draw(settings)` method on the new FVG object.
`settings` is an instance of the `drawSettings` UDT, containing all relevant visual configurations.
This method draws the primary FVG box, its midline (if enabled in `settings`), and any initial labels. It also initializes the `currentTop` and `currentBottom` fields of the `fvgObject` if they are `na`, and stores the IDs of the created drawing objects within the `fvgObject`.
3. Per-Bar State Updates & Interaction Checks
On each subsequent bar, for every active `fvgObject`:
Interaction Check (External Logic): It's common to first use logic (e.g., from `FvgCalculations`' `fvgInteractionCheck` function) to determine if the current bar's price interacts with the FVG.
State Field Updates (External Logic): Before calling the `FvgObjectLib` methods below, ensure that your `fvgObject`'s state fields (such as `isMitigated`, `currentTop`, `currentBottom`, `isMidlineTouched`) are updated using the current bar's price data and relevant functions from other libraries (e.g., `FvgCalculations`' `checkMitigation`, `checkPartialMitigation`, etc.). This library's methods render the FVG based on these pre-updated state fields.
If interaction occurs and the FVG is not yet fully mitigated:
Full Mitigation Update (`updateMitigation` method): Call `myFvg.updateMitigation(high, low)`. This method updates `myFvg.isMitigated` and `myFvg.mitigationTime` if full mitigation occurs, based on the interaction determined by external logic.
Partial Fill Update (`updatePartialFill` method): If not fully mitigated, call `myFvg.updatePartialFill(high, low, settings)`. This method updates `myFvg.currentTop` or `myFvg.currentBottom` and adjusts drawings to show the filled portion, again based on prior interaction checks and fill level calculations.
Midline Touch Check (`checkMidlineTouch` method): Call `myFvg.checkMidlineTouch(high, low)`. This method updates `myFvg.isMidlineTouched` if the price touches the FVG's 50% level.
4. Comprehensive Visual Update (`updateDrawings` method)
After the FVG's state fields have been potentially updated by external logic and the methods in step 3:
Call `myFvg.updateDrawings(isVisibleNow, settings)` on each FVG object.
`isVisibleNow` is a boolean indicating if the FVG should currently be visible.
`settings` is the `drawSettings` UDT instance.
This method synchronizes the FVG's visual appearance with its current state and settings, managing all drawing elements (boxes, lines, labels), their styles, and visibility. It efficiently skips redundant drawing operations if the FVG's state or visibility has not changed, thanks to its internal optimization using `prev_*` fields, which are also updated by this method.
5. Deleting Drawings (`deleteDrawings` method)
When an FVG object is no longer tracked:
Call `myFvg.deleteDrawings(deleteTestedToo)`.
This method removes all drawing objects associated with that `fvgObject`.
This workflow ensures that FVG visuals are accurately maintained throughout their existence on the chart.
█ NOTES
Dependencies: This library relies on `FvgTypes` for `fvgObject` and `drawSettings` definitions, and its methods (`updateMitigation`, `updatePartialFill`) internally call functions from `FvgCalculations`.
Drawing Object Management: Be mindful of TradingView's limits on drawing objects per script. The main script should manage the number of active FVG objects.
Performance and `updateDrawings()`: The `updateDrawings()` method is comprehensive. Its internal optimization (checking `hasStateChanged` based on `prev_*` fields) is crucial for performance. Call it judiciously.
Role of `settings.currentTime`: The `currentTime` field in `drawSettings` is key for positioning time-dependent elements like labels and the right edge of non-extended drawings.
Mutability of `fvgObject` Instances: Methods in this library directly modify the `fvgObject` instance they are called upon (e.g., its state fields and drawing IDs).
Drawing ID Checks: Methods generally check if drawing IDs are `na` before acting on them, preventing runtime errors.
█ EXPORTED FUNCTIONS
method draw(this, settings)
Draws the initial visual representation of the FVG object on the chart. This includes the main FVG box, its midline (if enabled), and a label
(if enabled for the specific timeframe). This method is typically invoked
immediately after an FVG is first detected and its initial properties are set. It uses drawing settings to customize the appearance based on the FVG's timeframe type.
Namespace types: types.fvgObject
Parameters:
this (fvgObject type from no1x/FvgTypes/1) : The FVG object instance to be drawn. Core properties (top, bottom,
startTime, isBullish, tfType) should be pre-initialized. This method will
initialize boxId, midLineId, boxLabelId (if applicable), and
currentTop/currentBottom (if currently na) on this object.
settings (drawSettings type from no1x/FvgTypes/1) : A drawSettings object providing all visual parameters. Reads display settings (colors, styles, visibility for boxes, midlines, labels,
box extension) relevant to this.tfType. settings.currentTime is used for
positioning labels and the right boundary of non-extended boxes.
method updateMitigation(this, highVal, lowVal)
Checks if the FVG has been fully mitigated by the current bar's price action.
Namespace types: types.fvgObject
Parameters:
this (fvgObject type from no1x/FvgTypes/1) : The FVG object instance. Reads this.isMitigated, this.isVisible,
this.isBullish, this.top, this.bottom. Updates this.isMitigated and
this.mitigationTime if full mitigation occurs.
highVal (float) : The high price of the current bar, used for mitigation check.
lowVal (float) : The low price of the current bar, used for mitigation check.
method updatePartialFill(this, highVal, lowVal, settings)
Checks for and processes partial fills of the FVG.
Namespace types: types.fvgObject
Parameters:
this (fvgObject type from no1x/FvgTypes/1) : The FVG object instance. Reads this.isMitigated, this.isVisible,
this.isBullish, this.currentTop, this.currentBottom, original this.top/this.bottom,
this.startTime, this.tfType, this.isLV. Updates this.currentTop or
this.currentBottom, creates/updates this.mitigatedBoxId, and may update this.boxId's
top/bottom to reflect the filled portion.
highVal (float) : The high price of the current bar, used for partial fill check.
lowVal (float) : The low price of the current bar, used for partial fill check.
settings (drawSettings type from no1x/FvgTypes/1) : The drawing settings. Reads timeframe-specific colors for mitigated
boxes (e.g., settings.mitigatedBullBoxColor, settings.mitigatedLvBullColor),
box extension settings (settings.shouldExtendBoxes, settings.shouldExtendMtfBoxes, etc.),
and settings.currentTime to style and position the mitigatedBoxId and potentially adjust the main boxId.
method checkMidlineTouch(this, highVal, lowVal)
Checks if the FVG's midline (50% level or Equilibrium) has been touched.
Namespace types: types.fvgObject
Parameters:
this (fvgObject type from no1x/FvgTypes/1) : The FVG object instance. Reads this.midLineId, this.isMidlineTouched,
this.top, this.bottom. Updates this.isMidlineTouched if a touch occurs.
highVal (float) : The high price of the current bar, used for midline touch check.
lowVal (float) : The low price of the current bar, used for midline touch check.
method deleteDrawings(this, deleteTestedToo)
Deletes all visual drawing objects associated with this FVG object.
Namespace types: types.fvgObject
Parameters:
this (fvgObject type from no1x/FvgTypes/1) : The FVG object instance. Deletes drawings referenced by boxId,
mitigatedBoxId, midLineId, mitLineId, boxLabelId, mitLineLabelId,
and potentially testedBoxId, keptMitLineId. Sets these ID fields to na.
deleteTestedToo (simple bool) : If true, also deletes drawings for "tested" FVGs
(i.e., testedBoxId and keptMitLineId).
method updateDrawings(this, isVisibleNow, settings)
Manages the comprehensive update of all visual elements of an FVG object
based on its current state (e.g., active, mitigated, partially filled) and visibility. It handles the drawing, updating, or deletion of FVG boxes (main and mitigated part),
midlines, mitigation lines, and their associated labels. Visibility is determined by the isVisibleNow parameter and relevant settings
(like settings.shouldHideMitigated or timeframe-specific show flags). This method is central to the FVG's visual lifecycle and includes optimization
to avoid redundant drawing operations if the FVG's relevant state or appearance
settings have not changed since the last bar. It also updates the FVG object's internal prev_* state fields for future optimization checks.
Namespace types: types.fvgObject
Parameters:
this (fvgObject type from no1x/FvgTypes/1) : The FVG object instance to update. Reads most state fields (e.g.,
isMitigated, currentTop, tfType, etc.) and updates all drawing ID fields
(boxId, midLineId, etc.), this.isVisible, and all this.prev_* state fields.
isVisibleNow (bool) : A flag indicating whether the FVG should be currently visible. Typically determined by external logic (e.g., visual range filter). Affects
whether active FVG drawings are created/updated or deleted by this method.
settings (drawSettings type from no1x/FvgTypes/1) : A fully populated drawSettings object. This method extensively
reads its fields (colors, styles, visibility toggles, timeframe strings, etc.)
to render FVG components according to this.tfType and current state. settings.currentTime is critical for positioning elements like labels and extending drawings.