Fear-Greed ThermometerFear-Greed Thermometer
This indicator measures market sentiment between fear and greed by combining three key factors: volatility, average volume, and percentage price change. Each factor is normalized and averaged to produce an index ranging from 0 to 100 that reflects the overall level of market fear or greed.
How to use:
Index above 50: Indicates greed dominance. The market tends to be more optimistic, signaling potential bullish conditions or overbought levels.
Index below 50: Indicates fear dominance. The market is more cautious or pessimistic, pointing to potential bearish conditions or oversold levels.
Neutral line (50): Acts as a reference for transitions between fear and greed phases.
Features:
Dynamic background: The chart background changes color according to sentiment — green for greed, red for fear — making it easy to visually gauge the index.
Customizable: Adjust the calculation periods for volatility, volume, and price change to fit your analysis style.
Tips:
Use alongside other technical tools to confirm entry and exit points.
Watch for divergences between the index and price to anticipate possible reversals.
Monitoring extreme levels can help identify market turning points.
This indicator is not a buy or sell recommendation but an additional tool to help understand the overall market sentiment.
Indicators and strategies
MACD Full [Titans_Invest]MACD Full — A Smarter, More Flexible MACD.
Looking for a MACD with real customization power?
We present one of the most complete public MACD indicators available on TradingView.
It maintains the classic MACD structure but is enhanced with 20 fully customizable long entry conditions and 20 short entry conditions , giving you precise control over your strategy.
Plus, it’s fully automation-ready, making it ideal for quantitative systems and algorithmic trading.
Whether you're a discretionary trader or a bot developer, this tool is built to seamlessly adapt to your style.
⯁ WHAT IS THE MACD❓
The Moving Average Convergence Divergence (MACD) is a technical analysis indicator developed by Gerald Appel. It measures the relationship between two moving averages of a security’s price to identify changes in momentum, direction, and strength of a trend. The MACD is composed of three components: the MACD line, the signal line, and the histogram.
⯁ HOW TO USE THE MACD❓
The MACD is calculated by subtracting the 26-period Exponential Moving Average (EMA) from the 12-period EMA. A 9-period EMA of the MACD line, called the signal line, is then plotted on top of the MACD line. The MACD histogram represents the difference between the MACD line and the signal line.
Here are the primary signals generated by the MACD:
Bullish Crossover: When the MACD line crosses above the signal line, indicating a potential buy signal.
Bearish Crossover: When the MACD line crosses below the signal line, indicating a potential sell signal.
Divergence: When the price of the security diverges from the MACD, suggesting a potential reversal.
Overbought/Oversold Conditions: Indicated by the MACD line moving far away from the signal line, though this is less common than in oscillators like the RSI.
⯁ ENTRY CONDITIONS
The conditions below are fully flexible and allow for complete customization of the signal.
______________________________________________________
🔹 CONDITIONS TO BUY 📈
______________________________________________________
• Signal Validity: The signal will remain valid for X bars .
• Signal Sequence: Configurable as AND or OR .
🔹 MACD > Signal Smoothing
🔹 MACD < Signal Smoothing
🔹 Histogram > 0
🔹 Histogram < 0
🔹 Histogram Positive
🔹 Histogram Negative
🔹 MACD > 0
🔹 MACD < 0
🔹 Signal > 0
🔹 Signal < 0
🔹 MACD > Histogram
🔹 MACD < Histogram
🔹 Signal > Histogram
🔹 Signal < Histogram
🔹 MACD (Crossover) Signal
🔹 MACD (Crossunder) Signal
🔹 MACD (Crossover) 0
🔹 MACD (Crossunder) 0
🔹 Signal (Crossover) 0
🔹 Signal (Crossunder) 0
______________________________________________________
______________________________________________________
🔸 CONDITIONS TO SELL 📉
______________________________________________________
• Signal Validity: The signal will remain valid for X bars .
• Signal Sequence: Configurable as AND or OR .
🔸 MACD > Signal Smoothing
🔸 MACD < Signal Smoothing
🔸 Histogram > 0
🔸 Histogram < 0
🔸 Histogram Positive
🔸 Histogram Negative
🔸 MACD > 0
🔸 MACD < 0
🔸 Signal > 0
🔸 Signal < 0
🔸 MACD > Histogram
🔸 MACD < Histogram
🔸 Signal > Histogram
🔸 Signal < Histogram
🔸 MACD (Crossover) Signal
🔸 MACD (Crossunder) Signal
🔸 MACD (Crossover) 0
🔸 MACD (Crossunder) 0
🔸 Signal (Crossover) 0
🔸 Signal (Crossunder) 0
______________________________________________________
______________________________________________________
🤖 AUTOMATION 🤖
• You can automate the BUY and SELL signals of this indicator.
______________________________________________________
______________________________________________________
⯁ UNIQUE FEATURES
______________________________________________________
Signal Validity: The signal will remain valid for X bars
Signal Sequence: Configurable as AND/OR
Condition Table: BUY/SELL
Condition Labels: BUY/SELL
Plot Labels in the Graph Above: BUY/SELL
Automate and Monitor Signals/Alerts: BUY/SELL
Signal Validity: The signal will remain valid for X bars
Signal Sequence: Configurable as AND/OR
Table of Conditions: BUY/SELL
Conditions Label: BUY/SELL
Plot Labels in the graph above: BUY/SELL
Automate & Monitor Signals/Alerts: BUY/SELL
______________________________________________________
📜 SCRIPT : MACD Full
🎴 Art by : @Titans_Invest & @DiFlip
👨💻 Dev by : @Titans_Invest & @DiFlip
🎑 Titans Invest — The Wizards Without Gloves 🧤
✨ Enjoy!
______________________________________________________
o Mission 🗺
• Inspire Traders to manifest Magic in the Market.
o Vision 𐓏
• To elevate collective Energy 𐓷𐓏
P&L Entry Zone Marker (clean)This indicator is a simple visual calculator for futures traders.
It helps you track your long and short entry zones based on position size and average price.
🔹 Green line – recalculated long entry after averaging down.
🔹 Red line – short entry point.
You can manually input your initial entry, volume, averaging volume, and averaging price.
The script calculates your new average entry for long positions and plots both lines as full horizontal levels across the chart.
✳️ Useful for:
Visualizing break-even zones
Planning P&L zones for hedged positions
Quickly aligning your trades with market structure
✅ Clean version — no labels, just lines.
📉 Works on all symbols and timeframes.
DWMY Opens (for aggr. charts) by Koenigsegg🟣 DWMY Opens (for Aggregated Charts) by Koenigsegg
Revolutionary compatibility with aggregated charts – This indicator represents a significant breakthrough in displaying Daily, Weekly, Monthly, and Yearly opening levels on aggregated chart types where traditional DWMY indicators have historically failed to function properly.
Complete aggregated chart support – Unlike previous Daily Weekly Monthly Yearly Opens indicators that experienced severe limitations when pulling data from non-standard chart types, this version is specifically engineered to work flawlessly with aggregated charts, range bars, Renko charts, Point & Figure charts, and all other non-time-based chart constructions.
Persistent horizontal reference lines – The indicator draws four distinct horizontal lines representing the opening prices of the current Daily, Weekly, Monthly, and Yearly periods, extending these levels forward into future bars to provide clear reference points for key support and resistance analysis.
Advanced customization capabilities – Features comprehensive user controls including custom label naming for each timeframe, adjustable line colors with independent color selection for Daily, Weekly, Monthly, and Yearly levels, configurable line width settings, and variable label font sizes ranging from tiny to huge.
Dynamic label positioning system – Implements a sophisticated label placement mechanism with configurable tick offset positioning and fixed end-bars-ahead projection, ensuring labels remain visible and properly positioned regardless of chart zoom level or timeframe.
Intelligent period detection logic – Utilizes advanced Pine Script time change detection algorithms specifically optimized for aggregated charts, accurately identifying new Daily, Weekly, Monthly, and Yearly periods even when traditional time-based functions fail on non-standard chart types.
Performance-optimized architecture – Built with efficient persistent variable storage using the var keyword, minimizing computational overhead while maintaining real-time updates across all timeframe levels simultaneously.
Professional visual presentation – Delivers clean, uncluttered chart visualization with strategically positioned labels that clearly identify each timeframe level without interfering with price action analysis.
Universal market compatibility – Functions seamlessly across all asset classes including stocks, forex, cryptocurrencies, commodities, and indices, adapting automatically to different tick sizes and price scales through syminfo.mintick integration.
Pine Script v6 foundation – Leverages the latest Pine Script version 6 capabilities, ensuring optimal performance, stability, and compatibility with current and future TradingView platform updates.
This indicator solves a critical limitation that has long plagued traders using aggregated chart types, finally enabling reliable access to essential Daily, Weekly, Monthly, and Yearly opening levels that serve as fundamental support and resistance zones in technical analysis. The breakthrough lies in its ability to maintain accurate period detection and level plotting regardless of the underlying chart construction methodology.
🟣 How It Works
Automatic period detection – The indicator continuously monitors for time changes across four distinct timeframes using ta.change(time()) functions for Daily and Weekly periods, month transitions for Monthly levels, and year changes for Yearly opens, ensuring precise identification of new period beginnings.
Real-time level updates – When a new period is detected, the indicator captures the opening price at that exact moment and immediately establishes a horizontal line from that bar extending forward to a configurable number of bars ahead, creating persistent reference levels.
Dynamic line management – Each timeframe maintains its own dedicated line object and label, with the indicator continuously updating the endpoint coordinates and label positions as new bars form, ensuring the levels always project the specified distance into the future.
Intelligent label placement – Labels are positioned at the end of each line with automatic vertical offset based on the symbol’s minimum tick size, preventing overlap with price action while maintaining clear identification of each timeframe level.
🟣 Pro Tips for Optimal Usage
Multi-timeframe confluence – Look for areas where multiple DWMY levels converge within close proximity, as these zones typically act as stronger support or resistance levels due to increased market participant attention at these psychological price points.
Breakout confirmation strategy – When price breaks above or below a significant DWMY level with strong volume, the broken level often transforms into support (if broken upward) or resistance (if broken downward), providing excellent entry and exit reference points.
Range trading opportunities – On ranging markets, use Daily and Weekly opens as potential reversal zones, especially when price approaches these levels during low-volume periods or near session opens when institutional activity increases.
Timeframe alignment technique – For swing trading, prioritize trades that align with the direction of the break from Weekly or Monthly opens, while using Daily opens for precise entry timing and position management.
Chart type optimization – This indicator excels on Renko, Range, and Point & Figure charts where traditional time-based DWMY indicators fail, making it invaluable for traders who prefer these aggregated chart types for cleaner price action analysis.
Important Disclaimer:
This indicator is provided for educational and informational purposes only. It is not financial advice, investment advice, or a recommendation to buy or sell any financial instrument. All trading involves risk, and past performance does not guarantee future results. Please conduct your own research and consult with a qualified financial advisor before making any trading decisions. The author is not responsible for any losses incurred from using this indicator.
CCO_LibraryLibrary "CCO_Library"
Contrarian Crowd Oscillator (CCO) Library - Multi-oscillator consensus indicator for contrarian trading signals
@author B3AR_Trades
calculate_oscillators(rsi_length, stoch_length, cci_length, williams_length, roc_length, mfi_length, percentile_lookback, use_rsi, use_stochastic, use_williams, use_cci, use_roc, use_mfi)
Calculate normalized oscillator values
Parameters:
rsi_length (simple int) : (int) RSI calculation period
stoch_length (int) : (int) Stochastic calculation period
cci_length (int) : (int) CCI calculation period
williams_length (int) : (int) Williams %R calculation period
roc_length (int) : (int) ROC calculation period
mfi_length (int) : (int) MFI calculation period
percentile_lookback (int) : (int) Lookback period for CCI/ROC percentile ranking
use_rsi (bool) : (bool) Include RSI in calculations
use_stochastic (bool) : (bool) Include Stochastic in calculations
use_williams (bool) : (bool) Include Williams %R in calculations
use_cci (bool) : (bool) Include CCI in calculations
use_roc (bool) : (bool) Include ROC in calculations
use_mfi (bool) : (bool) Include MFI in calculations
Returns: (OscillatorValues) Normalized oscillator values
calculate_consensus_score(oscillators, use_rsi, use_stochastic, use_williams, use_cci, use_roc, use_mfi, weight_by_reliability, consensus_smoothing)
Calculate weighted consensus score
Parameters:
oscillators (OscillatorValues) : (OscillatorValues) Individual oscillator values
use_rsi (bool) : (bool) Include RSI in consensus
use_stochastic (bool) : (bool) Include Stochastic in consensus
use_williams (bool) : (bool) Include Williams %R in consensus
use_cci (bool) : (bool) Include CCI in consensus
use_roc (bool) : (bool) Include ROC in consensus
use_mfi (bool) : (bool) Include MFI in consensus
weight_by_reliability (bool) : (bool) Apply reliability-based weights
consensus_smoothing (int) : (int) Smoothing period for consensus
Returns: (float) Weighted consensus score (0-100)
calculate_consensus_strength(oscillators, consensus_score, use_rsi, use_stochastic, use_williams, use_cci, use_roc, use_mfi)
Calculate consensus strength (agreement between oscillators)
Parameters:
oscillators (OscillatorValues) : (OscillatorValues) Individual oscillator values
consensus_score (float) : (float) Current consensus score
use_rsi (bool) : (bool) Include RSI in strength calculation
use_stochastic (bool) : (bool) Include Stochastic in strength calculation
use_williams (bool) : (bool) Include Williams %R in strength calculation
use_cci (bool) : (bool) Include CCI in strength calculation
use_roc (bool) : (bool) Include ROC in strength calculation
use_mfi (bool) : (bool) Include MFI in strength calculation
Returns: (float) Consensus strength (0-100)
classify_regime(consensus_score)
Classify consensus regime
Parameters:
consensus_score (float) : (float) Current consensus score
Returns: (ConsensusRegime) Regime classification
detect_signals(consensus_score, consensus_strength, consensus_momentum, regime)
Detect trading signals
Parameters:
consensus_score (float) : (float) Current consensus score
consensus_strength (float) : (float) Current consensus strength
consensus_momentum (float) : (float) Consensus momentum
regime (ConsensusRegime) : (ConsensusRegime) Current regime classification
Returns: (TradingSignals) Trading signal conditions
calculate_cco(rsi_length, stoch_length, cci_length, williams_length, roc_length, mfi_length, consensus_smoothing, percentile_lookback, use_rsi, use_stochastic, use_williams, use_cci, use_roc, use_mfi, weight_by_reliability, detect_momentum)
Calculate complete CCO analysis
Parameters:
rsi_length (simple int) : (int) RSI calculation period
stoch_length (int) : (int) Stochastic calculation period
cci_length (int) : (int) CCI calculation period
williams_length (int) : (int) Williams %R calculation period
roc_length (int) : (int) ROC calculation period
mfi_length (int) : (int) MFI calculation period
consensus_smoothing (int) : (int) Consensus smoothing period
percentile_lookback (int) : (int) Percentile ranking lookback
use_rsi (bool) : (bool) Include RSI
use_stochastic (bool) : (bool) Include Stochastic
use_williams (bool) : (bool) Include Williams %R
use_cci (bool) : (bool) Include CCI
use_roc (bool) : (bool) Include ROC
use_mfi (bool) : (bool) Include MFI
weight_by_reliability (bool) : (bool) Apply reliability weights
detect_momentum (bool) : (bool) Calculate momentum and acceleration
Returns: (CCOResult) Complete CCO analysis results
calculate_cco_default()
Calculate CCO with default parameters
Returns: (CCOResult) CCO result with standard settings
cco_consensus_score()
Get just the consensus score with default parameters
Returns: (float) Consensus score (0-100)
cco_consensus_strength()
Get just the consensus strength with default parameters
Returns: (float) Consensus strength (0-100)
is_panic_bottom()
Check if in panic bottom condition
Returns: (bool) True if panic bottom signal active
is_euphoric_top()
Check if in euphoric top condition
Returns: (bool) True if euphoric top signal active
bullish_consensus_reversal()
Check for bullish consensus reversal
Returns: (bool) True if bullish reversal detected
bearish_consensus_reversal()
Check for bearish consensus reversal
Returns: (bool) True if bearish reversal detected
bearish_divergence()
Check for bearish divergence
Returns: (bool) True if bearish divergence detected
bullish_divergence()
Check for bullish divergence
Returns: (bool) True if bullish divergence detected
get_regime_name()
Get current regime name
Returns: (string) Current consensus regime name
get_contrarian_signal()
Get contrarian signal
Returns: (string) Current contrarian trading signal
get_position_multiplier()
Get position size multiplier
Returns: (float) Recommended position sizing multiplier
OscillatorValues
Individual oscillator values
Fields:
rsi (series float) : RSI value (0-100)
stochastic (series float) : Stochastic value (0-100)
williams (series float) : Williams %R value (0-100, normalized)
cci (series float) : CCI percentile value (0-100)
roc (series float) : ROC percentile value (0-100)
mfi (series float) : Money Flow Index value (0-100)
ConsensusRegime
Consensus regime classification
Fields:
extreme_bearish (series bool) : Extreme bearish consensus (<= 20)
moderate_bearish (series bool) : Moderate bearish consensus (20-40)
mixed (series bool) : Mixed consensus (40-60)
moderate_bullish (series bool) : Moderate bullish consensus (60-80)
extreme_bullish (series bool) : Extreme bullish consensus (>= 80)
regime_name (series string) : Text description of current regime
contrarian_signal (series string) : Contrarian trading signal
TradingSignals
Trading signals
Fields:
panic_bottom_signal (series bool) : Extreme bearish consensus with high strength
euphoric_top_signal (series bool) : Extreme bullish consensus with high strength
consensus_reversal_bullish (series bool) : Bullish consensus reversal
consensus_reversal_bearish (series bool) : Bearish consensus reversal
bearish_divergence (series bool) : Bearish price-consensus divergence
bullish_divergence (series bool) : Bullish price-consensus divergence
strong_consensus (series bool) : High consensus strength signal
CCOResult
Complete CCO calculation results
Fields:
consensus_score (series float) : Main consensus score (0-100)
consensus_strength (series float) : Consensus strength (0-100)
consensus_momentum (series float) : Rate of consensus change
consensus_acceleration (series float) : Rate of momentum change
oscillators (OscillatorValues) : Individual oscillator values
regime (ConsensusRegime) : Regime classification
signals (TradingSignals) : Trading signals
position_multiplier (series float) : Recommended position sizing multiplier
Math by Thomas Liquidity PoolDescription
Math by Thomas Liquidity Pool is a TradingView indicator designed to visually identify potential liquidity pools on the chart by detecting areas where price forms clusters of equal highs or equal lows.
Bullish Liquidity Pools (Green Boxes): Marked below price where two adjacent candles have similar lows within a specified difference, indicating potential demand zones or stop loss clusters below support.
Bearish Liquidity Pools (Red Boxes): Marked above price where two adjacent candles have similar highs within the difference threshold, indicating potential supply zones or stop loss clusters above resistance.
This tool helps traders spot areas where smart money might hunt stop losses or where price is likely to react, providing valuable insight for trade entries, exits, and risk management.
Features:
Adjustable box height (vertical range) in points.
Adjustable maximum difference threshold between candle highs/lows to consider them equal.
Boxes automatically extend forward for visibility and delete when price sweeps through or after a defined lifetime.
Separate visual zones for bullish and bearish liquidity with customizable colors.
How to Use
Add the Indicator to your chart (preferably on instruments like Nifty where point-based thresholds are meaningful).
Adjust Inputs:
Box Height: Set the vertical size of the liquidity zones (default 15 points).
Max Difference Between Highs/Lows: Set the max price difference to consider two candle highs or lows as “equal” (default 10 points).
Box Lifetime: How many bars the box stays visible if not swept (default 120 bars).
Interpret Boxes:
Green Boxes (Bullish Liquidity Pools): Areas of potential demand and stop loss clusters below price. Watch for price bounces or accumulation near these zones.
Red Boxes (Bearish Liquidity Pools): Areas of potential supply and stop loss clusters above price. Watch for price rejections or distribution near these zones.
Trading Strategy Tips:
Use these zones to anticipate where stop loss hunting or liquidity sweeps may occur.
Combine with your Order Block, Fair Value Gap, and Market Structure tools for higher probability setups.
Manage risk by avoiding entries into price regions just before large liquidity pools get swept.
Automatic Cleanup:
Boxes delete automatically once price breaks above (for bearish zones) or below (for bullish zones) the zone or after the set lifetime.
AMF_LibraryLibrary "AMF_Library"
Adaptive Momentum Flow (AMF) Library - A comprehensive momentum oscillator that adapts to market volatility
@author B3AR_Trades
f_ema(source, length)
Custom EMA calculation that accepts a series length
Parameters:
source (float) : (float) Source data for calculation
length (float) : (float) EMA length (can be series)
Returns: (float) EMA value
f_dema(source, length)
Custom DEMA calculation that accepts a series length
Parameters:
source (float) : (float) Source data for calculation
length (float) : (float) DEMA length (can be series)
Returns: (float) DEMA value
f_sum(source, length)
Custom sum function for rolling sum calculation
Parameters:
source (float) : (float) Source data for summation
length (int) : (int) Number of periods to sum
Returns: (float) Sum value
get_average(data, length, ma_type)
Get various moving average types for fixed lengths
Parameters:
data (float) : (float) Source data
length (simple int) : (int) MA length
ma_type (string) : (string) MA type: "SMA", "EMA", "WMA", "DEMA"
Returns: (float) Moving average value
calculate_adaptive_lookback(base_length, min_lookback, max_lookback, volatility_sensitivity)
Calculate adaptive lookback length based on volatility
Parameters:
base_length (int) : (int) Base lookback length
min_lookback (int) : (int) Minimum allowed lookback
max_lookback (int) : (int) Maximum allowed lookback
volatility_sensitivity (float) : (float) Sensitivity to volatility changes
Returns: (int) Adaptive lookback length
get_volatility_ratio()
Get current volatility ratio
Returns: (float) Current volatility ratio vs 50-period average
calculate_volume_analysis(vzo_length, smooth_length, smooth_type)
Calculate volume-based buying/selling pressure
Parameters:
vzo_length (int) : (int) Lookback length for volume analysis
smooth_length (simple int) : (int) Smoothing length
smooth_type (string) : (string) Smoothing MA type
Returns: (float) Volume analysis value (-100 to 100)
calculate_amf(base_length, smooth_length, smooth_type, signal_length, signal_type, min_lookback, max_lookback, volatility_sensitivity, medium_multiplier, slow_multiplier, vzo_length, vzo_smooth_length, vzo_smooth_type, price_vs_fast_weight, fast_vs_medium_weight, medium_vs_slow_weight, vzo_weight)
Calculate complete AMF oscillator
Parameters:
base_length (int) : (int) Base lookback length
smooth_length (simple int) : (int) Final smoothing length
smooth_type (string) : (string) Final smoothing MA type
signal_length (simple int) : (int) Signal line length
signal_type (string) : (string) Signal line MA type
min_lookback (int) : (int) Minimum adaptive lookback
max_lookback (int) : (int) Maximum adaptive lookback
volatility_sensitivity (float) : (float) Volatility adaptation sensitivity
medium_multiplier (float) : (float) Medium DEMA length multiplier
slow_multiplier (float) : (float) Slow DEMA length multiplier
vzo_length (int) : (int) Volume analysis lookback
vzo_smooth_length (simple int) : (int) Volume analysis smoothing
vzo_smooth_type (string) : (string) Volume analysis smoothing type
price_vs_fast_weight (float) : (float) Weight for price vs fast DEMA
fast_vs_medium_weight (float) : (float) Weight for fast vs medium DEMA
medium_vs_slow_weight (float) : (float) Weight for medium vs slow DEMA
vzo_weight (float) : (float) Weight for volume analysis component
Returns: (AMFResult) Complete AMF calculation results
calculate_amf_default()
Calculate AMF with default parameters
Returns: (AMFResult) AMF result with standard settings
amf_oscillator()
Get just the main AMF oscillator value with default parameters
Returns: (float) Main AMF oscillator value
amf_signal()
Get just the AMF signal line with default parameters
Returns: (float) AMF signal line value
is_overbought(overbought_level)
Check if AMF is in overbought condition
Parameters:
overbought_level (float) : (float) Overbought threshold (default 70)
Returns: (bool) True if overbought
is_oversold(oversold_level)
Check if AMF is in oversold condition
Parameters:
oversold_level (float) : (float) Oversold threshold (default -70)
Returns: (bool) True if oversold
bullish_crossover()
Detect bullish crossover (main line crosses above signal)
Returns: (bool) True on bullish crossover
bearish_crossover()
Detect bearish crossover (main line crosses below signal)
Returns: (bool) True on bearish crossover
AMFResult
AMF calculation results
Fields:
main_oscillator (series float) : The main AMF oscillator value (-100 to 100)
signal_line (series float) : The signal line for crossover signals
dema_fast (series float) : Fast adaptive DEMA value
dema_medium (series float) : Medium adaptive DEMA value
dema_slow (series float) : Slow adaptive DEMA value
volume_analysis (series float) : Volume-based buying/selling pressure (-100 to 100)
adaptive_lookback (series int) : Current adaptive lookback length
volatility_ratio (series float) : Current volatility ratio vs average
Adaptive MACD Deluxe [AlgoAlpha]OVERVIEW
This script is an advanced rework of the classic MACD indicator, designed to be more adaptive, visually informative, and customizable. It enhances the original MACD formula using a dynamic feedback loop and a correlation-based weighting system that adjusts in real-time based on how deterministic recent price action is. The signal line is flexible, offering several smoothing types including Heiken Ashi, while the histogram is color-coded with gradients to help users visually identify momentum shifts. It also includes optional normalization by volatility, allowing MACD values to be interpreted as relative percentage moves, making the indicator more consistent across different assets and timeframes.
CONCEPTS
This version of MACD introduces a deterministic weight based on R-squared correlation with time, which modulates how fast or slow the MACD adapts to price changes. Higher correlation means smoother, slower MACD responses, and low correlation leads to quicker reaction. The momentum calculation blends traditional EMA math with feedback and damping components to create a smoother, less noisy series. Heiken Ashi is optionally used for signal smoothing to better visualize short-term trend bias. When normalization is enabled, the MACD is scaled by an EMA of the high-low range, converting it into a bounded, volatility-relative indicator. This makes extreme readings more meaningful across markets.
FEATURES
The script offers six distinct options for signal line smoothing: EMA, SMA, SMMA (RMA), WMA, VWMA, and a custom Heiken Ashi mode based on the MACD series. Each option provides a different response speed and smoothing behavior, allowing traders to match the indicator’s behavior to their strategy—whether it's faster reaction or reduced noise.
Normalization is another key feature. When enabled, MACD values are scaled by a volatility proxy, converting the indicator into a relative percentage. This helps standardize the MACD across different assets and timeframes, making overbought and oversold readings more consistent and easier to interpret.
Threshold zones can be customized using upper and lower boundaries, with inner zones for early warnings. These zones are highlighted on the chart with subtle background fills and directional arrows when MACD enters or exits key levels. This makes it easier to spot strong or weak reversals at a glance.
Lastly, the script includes multiple built-in alerts. Users can set alerts for MACD crossovers, histogram flips above or below zero, and MACD entries into strong or weak reversal zones. This allows for hands-free monitoring and quick decision-making without staring at the chart.
USAGE
To use this script, choose your preferred signal smoothing type, enable normalization if you want MACD values relative to volatility, and adjust the threshold zones to fit your asset or timeframe. Use the colored histogram to detect changes in momentum strength—brighter colors indicate rising strength, while faded colors imply weakening. Heiken Ashi mode smooths out noise and provides clearer signals, especially useful in choppy conditions. Use alert conditions for crossover and reversal detection, or monitor the arrow markers for entries into potential exhaustion zones. This setup works well for trend following, momentum trading, and reversal spotting across all market types.
DMI-LuminateIndicator Description: DMI-Luminate (DMI-LMT)
DMI-Luminate is an enhanced version of the Directional Movement Index (DMI) indicator that combines multiple moving averages for smoothing and offers various options to customize the calculation of ADX, +DM, -DM, DX, and ADXR. It is ideal for traders looking to analyze trend strength and equilibrium points between buyers and sellers.
Components and Features
+DM and -DM: Indicators measuring positive and negative directional movement, helping identify trend direction.
DX (Directional Movement Index): Measures the relative difference between +DM and -DM, indicating the current trend strength.
ADX (Average Directional Index): A smoothed line showing trend strength regardless of direction. Values above 25 generally indicate a strong trend.
ADXR (Average Directional Movement Rating): A moving average of ADX that detects trend strength changes with less sensitivity.
Equilibrium Points: Visual markers (blue circles) that appear when +DM and -DM cross, signaling potential reversals or changes in trend strength.
Customizable Settings
DM Length: The period used to calculate directional movements.
ADX Smoothing: The smoothing period for ADX.
MA Type Universal: Select the moving average type used for smoothing calculations. Options include SMA, EMA, WMA, ALMA, T3, and advanced averages like DNA⚡ and RNA🐢.
T3 Hot Factor: Parameter to adjust the intensity of the T3 moving average (when selected).
Show Lines: Toggle the display of ADX, ADXR, DX, and +DM/-DM lines as you prefer.
Show Equilibrium Points: Enable to visualize crossing points between +DM and -DM.
Background Color and Offset: Customize the background color and offset for better visibility.
How to Use
Trend Identification
Watch the ADX line to gauge trend strength. When ADX is above 25, the trend is considered strong. The +DM and -DM lines indicate if the trend is bullish (+DM > -DM) or bearish (-DM > +DM).
Entry/Exit Signals
Use the equilibrium points (blue circles) to identify potential reversals or changes in trend dynamics based on +DM and -DM crossings.
Moving Average Selection
Experiment with different moving averages to smooth the data and tailor the indicator to your trading style and asset. Faster averages like EMA react better in volatile markets, while SMMA and ALMA suit more stable conditions.
Using ADXR
ADXR offers a smoother view of trend strength to avoid false signals during sideways markets.
Visual Customization
Adjust colors and background to improve readability, especially across different chart themes.
Recommendations
Combine DMI-Luminate with other indicators (e.g., volume, RSI, chart patterns) to confirm entries and exits.
Adjust DM Length and ADX Smoothing according to the timeframe you trade.
Use different moving average types to find the setup that works best for your asset and strategy.
Fallback VWAP (No Volume? No Problem!) – Yogi365Fallback VWAP (No Volume? No Problem!) – Yogi365
This script plots Daily, Weekly, and Monthly VWAPs with ±1 Standard Deviation bands. When volume data is missing or zero (common in indices or illiquid assets), it automatically falls back to a TWAP-style calculation, ensuring that your VWAP levels always remain visible and accurate.
Features:
Daily, Weekly, and Monthly VWAPs with ±1 Std Dev bands.
Auto-detection of missing volume and seamless fallback.
Clean, color-coded trend table showing price vs VWAP/bands.
Uses hlc3 for VWAP source.
Labels indicate when fallback is used.
Best Used On:
Any asset or index where volume is unavailable.
Intraday and swing trading.
Works on all timeframes but optimized for overlay use.
How it Works:
If volume == 0, the script uses a constant fallback volume (1), turning the VWAP into a TWAP (Time-Weighted Average Price) — still useful for intraday or index-based analysis.
This ensures consistent plotting on instruments like indices (e.g., NIFTY, SENSEX,DJI etc.) which might not provide volume on TradingView.
Bounce Zone📘 Bounce Zone – Indicator Description
The "Bounce Zone" indicator is a custom tool designed to highlight potential reversal zones on the chart based on volume exhaustion and price structure. It identifies sequences of candles with low volume activity and marks key price levels that could act as "bounce zones", where price is likely to react.
🔍 How It Works
Volume Analysis:
The indicator calculates a Simple Moving Average (SMA) of volume (default: 20 periods).
It looks for at least 6 consecutive candles (configurable) where the volume is below this volume SMA.
Color Consistency:
The candles must all be of the same color:
Green candles (bullish) for potential downward bounce zones.
Red candles (bearish) for potential upward bounce zones.
Zone Detection:
When a valid sequence is found:
For green candles: it draws a horizontal line at the low of the last red candle before the sequence.
For red candles: it draws a horizontal line at the high of the last green candle before the sequence.
Bounce Tracking:
Each horizontal line remains on the chart until it is touched twice by price (high or low depending on direction).
After two touches, the line is automatically removed, indicating the zone has fulfilled its purpose.
📈 Use Cases
Identify areas of price exhaustion after strong directional pushes.
Spot liquidity zones where institutions might step in.
Combine with candlestick confirmation for reversal trades.
Useful in both trending and range-bound markets for entry or exit signals.
⚙️ Parameters
min_consecutive: Minimum number of consecutive low-volume candles of the same color (default: 6).
vol_ma_len: Length of the volume moving average (default: 20).
🧠 Notes
The indicator does not repaint and is based purely on historical candle and volume structure.
Designed for manual strategy confirmation or support for algorithmic setups.
Color Change EMA 200 (4H)200 Color Change EMA (4H Locked)
Overview
This indicator displays a 200-period Exponential Moving Average (EMA) that is locked to the 4-hour timeframe, regardless of what chart timeframe you're currently viewing. The EMA line changes color dynamically based on price action to provide clear visual trend signals.
Key Features
• Multi-Timeframe Capability : Always shows the 4H 200 EMA on any chart timeframe
• Dynamic Color Coding :
- Green: Price is above the 200 EMA (bullish condition)
- Red: Price is below the 200 EMA (bearish condition)
• Clean Visual Design : Bold 2-pixel line width for clear visibility
• Real-time Updates : Colors change instantly as price crosses above or below the EMA
How to Use
1. Add the indicator to any timeframe chart
2. The 4H 200 EMA will appear as a smooth line
3. Watch for color changes:
- When the line turns green, it indicates price strength above the key moving average
- When the line turns red, it suggests price weakness below the moving average
4. Use for trend identification, support/resistance levels, and entry/exit timing
Best Practices
• Combine with other technical analysis tools for confirmation
• Use the color changes as alerts for potential trend shifts
• Consider the 200 EMA as a major support/resistance level
• Works well for swing trading and position sizing decisions
Settings
• Length : Default 200 periods (customizable)
• Source : Default closing price (customizable)
Perfect for traders who want to keep the important 4H 200 EMA visible across all timeframes with instant visual trend feedback.
Year/Quarter Open LevelsDeveloped by ADEL CEZAR and inspired by insights from ERDAL Y, this indicator is designed to give traders a clear edge by automatically plotting the Yearly Open and Quarterly Open levels — two of the most critical institutional reference points in price action.
These levels often act as magnets for liquidity, bias confirmation zones, and support/resistance pivots on higher timeframes. With customizable settings, you can display multiple past opens, fine-tune label positions, and align your strategy with high-timeframe structure — all in a lightweight, non-intrusive design.
If you follow Smart Money Concepts (SMC), ICT models, or build confluence using HTF structures and range theory, this script will integrate seamlessly into your workflow.
Mariam Ichimoku DashboardPurpose
The Mariam Ichimoku Dashboard is designed to simplify the Ichimoku trading system for both beginners and experienced traders. It provides a complete view of trend direction, strength, momentum, and key signals all in one compact dashboard on your chart. This tool helps traders make faster and more confident decisions without having to interpret every Ichimoku element manually.
How It Works
1. Trend Strength Score
Calculates a score from -5 to +5 based on Ichimoku components.
A high positive score means strong bullish momentum.
A low negative score shows strong bearish conditions.
A near-zero score indicates a sideways or unclear market.
2. Future Cloud Bias
Looks 26 candles ahead to determine if the future cloud is bullish or bearish.
This helps identify the longer-term directional bias of the market.
3. Flat Kijun / Flat Senkou B
Detects flat zones in the Kijun or Senkou B lines.
These flat areas act as strong support or resistance and can attract price.
4. TK Cross
Identifies Tenkan-Kijun crosses:
Bullish Cross means Tenkan crosses above Kijun
Bearish Cross means Tenkan crosses below Kijun
5. Last TK Cross Info
Shows whether the last TK cross was bullish or bearish and how many candles ago it happened.
Helps track trend development and timing.
6. Chikou Span Position
Checks if the Chikou Span is above, below, or inside past price.
Above means bullish momentum
Below means bearish momentum
Inside means mixed or indecisive
7. Near-Term Forecast (Breakout)
Warns when price is near the edge of the cloud, preparing for a potential breakout.
Useful for anticipating price moves.
8. Price Breakout
Shows if price has recently broken above or below the cloud.
This can confirm the start of a new trend.
9. Future Kumo Twist
Detects upcoming twists in the cloud, which often signal potential trend reversals.
10. Ichimoku Confluence
Measures how many key Ichimoku signals are in agreement.
The more signals align, the stronger the trend confirmation.
11. Price in or Near the Cloud
Displays if the price is inside the cloud, which often indicates low clarity or a choppy market.
12. Cloud Thickness
Shows whether the cloud is thin or thick.
Thick clouds provide stronger support or resistance.
Thin clouds may allow easier breakouts.
13. Recommendation
Gives a simple trading suggestion based on all major signals.
Strong Buy, Strong Sell, or Hold.
Helps simplify decision-making at a glance.
Features
All major Ichimoku signals summarized in one panel
Real-time trend strength scoring
Detects flat zones, crosses, cloud twists, and breakouts
Visual alerts for trend alignment and signal confluence
Compact, clean design
Built with simplicity in mind for beginner traders
Tips
Best used on 15-minute to 1-hour charts for short-term trading
Avoid entering trades when price is inside the cloud because the market is often indecisive
Wait for alignment between trend score, TK cross, cloud bias, and confluence
Use the dashboard to support your trading strategy, not replace it
Enable alerts for major confluence or upcoming Kumo twists
SMEMA Trend CoreSMEMA Trend Core is a multi-timeframe trend analysis tool designed to provide a clean, adaptive and structured view of the market’s directional bias. It can be used in short term, swing or long term contexts. The internal calculation adjusts automatically based on the selected trading style, while always combining data from six timeframes.
At its core, the indicator uses a SMEMA, which is a Simple Moving Average applied to an EMA. This combination improves smoothness without losing reactivity. The SMEMA is calculated separately on 1H, 4H, 1D, 3D, 1W and 1M timeframes. These six values are then combined using dynamic weights that depend on the trading mode:
Short Term mode gives more influence to 1H and 4H
Swing Trading mode gives more influence to 1D, 3D and 1W
Long Term mode gives more influence to 1W and 1M
However, all six timeframes are always included in the final result. This avoids the tunnel vision of relying on a single resolution and ensures that the indicator captures both local and structural movements.
The result is a synthetic trend line, called Global SMEMA, that adapts to market conditions and offers a realistic view of the ongoing trend. To enhance the reading, the indicator calculates a Trend Score. This score reflects the position of price relative to the Global SMEMA, scaled by a long-term ATR, and adjusted by the slope of the trend line. A hyperbolic tangent function is used to normalize values and reduce distortion from outliers.
The final score is capped between -10 and +10, and used to define the trend state:
Green when the trend is bullish (score > +1.5)
Red when the trend is bearish (score < -1.5)
Brown when the trend is neutral (score between -1.5 and +1.5)
Optional Deviation Bands can be displayed at ±1, ±2 and ±3 ATR distances around the central line. These dynamic zones help identify extended price movements or potential support and resistance areas, depending on the current trend bias.
Main features:
A single, stable trend line based on six timeframes
Automatic rebalancing depending on trading mode
Quantified score integrating distance and slope
No overreaction to short-term noise
Deviation zones for advanced market context
No repainting, no lookahead, 100% real-time
SMEMA Trend Core is not a signal tool. It is a directional framework that helps you stay aligned with the real structure of the market. Use it to confirm setups, filter trades or simply understand where the market stands in its trend cycle.
David_FairPriceCandlestick_calculatedDescription:
This indicator displays the "Typical Price" for each candle as a visual marker (cross) directly on the chart. The Typical Price is calculated as the average of the High, Low, and Close values of each bar:
(High + Low + Close) / 3
The marker provides a quick visual reference to the fair or average price level within every single candle.
Unlike a Point of Control (POC) or volume-based indicators, this script works purely with price data and is independent of volume or order flow.
Use cases:
Identify where most trading activity may have been concentrated within the candle (for price-based strategies)
Support as a reference line for mean-reversion or fair value concepts
Works on all timeframes and instruments
Customization:
You can easily change the marker style (cross, dot, triangle, etc.) and color within the script.
Lucy – 3-Bar Reversal with EMA50 Trend Filter📛 Lucy – 3-Bar Reversal with EMA50 Trend Filter
Purpose:
To detect and highlight bullish and bearish 3-bar reversal patterns on the chart, but only when they align with the dominant trend, defined by the EMA 50.
✅ How It Works
🟢 Bullish 3-Bar Reversal (Buy Setup):
Bar 1 is bearish (close < open)
Bar 2 makes a lower low than Bar 1
Bar 3 is bullish (close > open) and closes above Bar 2’s high
Price must be above EMA 50 (trend filter)
✅ Result: Shows a green triangle below the bar
🔴 Bearish 3-Bar Reversal (Sell Setup):
Bar 1 is bullish (close > open)
Bar 2 makes a higher high than Bar 1
Bar 3 is bearish (close < open) and closes below Bar 2’s low
Price must be below EMA 50
✅ Result: Shows a red triangle above the bar
📊 What It Plots:
🔼 Green triangle below bullish signal bar
🔽 Red triangle above bearish signal bar
🟠 Orange line = EMA50 (trend filter)
🔔 Built-in Alerts:
You’ll get an alert if:
A bullish reversal pattern forms above EMA50
A bearish reversal pattern forms below EMA50
🧠 Use Cases:
Great for trend-following traders who want clean, price-action entries
Works well on intraday (15m/1h) or swing (4h/daily) timeframes
Can be used for manual entries, or converted to strategy for automation
Yearly Performance Table with CAGROverview
This Pine Script indicator provides a clear table displaying the annual performance of an asset, along with two different average metrics: the arithmetic mean and the geometric mean (CAGR).
Core Features
Annual Performance Calculation:
Automatically detects the first trading day of each calendar year.
Calculates the percentage return for each full calendar year.
Based on closing prices from the first to the last trading day of the respective year.
Flexible Display:
Adjustable Period: Displays data for 1-50 years (default: 10 years).
Daily Timeframe Only: Functions exclusively on daily charts.
Automatic Update: Always shows the latest available years.
Two Average Metrics:
AVG (Arithmetic Mean)
A simple average of all annual returns. (Formula: (R₁ + R₂ + ... + Rₙ) ÷ n)
Important: Can be misleading in the presence of volatile returns.
GEO (Geometric Mean / CAGR)
Compound Annual Growth Rate. (Formula: ^(1/n) - 1)
Represents the true average annual growth rate.
Fully accounts for the compounding effect.
Limitations
Daily Charts Only: Does not work on intraday or weekly/monthly timeframes.
Calendar Year Basis: Calculations are based on calendar years, not rolling 12-month periods.
Historical Data: Dependent on the availability of historical data from the broker/data provider.
Interpretation of Results
CAGR as Benchmark: The geometric mean is more suitable for performance comparisons.
Annual Patterns: Individual year figures can reveal seasonal or cyclical trends.
Momentum Trend Bands (MTB)📌 What Is the Momentum Trend Bands (MTB) Indicator?
The Momentum Trend Bands (MTB) is a custom-built trend detection indicator that blends momentum and volatility into a dynamic, visual system. Its core goal is to help traders identify the beginning and strength of a trend earlier than traditional tools like moving averages, while filtering out market noise.
🧠 What Is It Built On?
The indicator is built on two foundational concepts:
1. Rate of Change (ROC): This measures the speed at which the price is moving. We use a fast and a slow version of ROC and then calculate their difference. This difference gives us a momentum signal — it shows whether the price is gaining upward or downward strength.
2. Standard Deviation (Volatility): This shows how much the price fluctuates. By calculating it over a certain period, we can measure market noise and filter out weak, insignificant moves that might otherwise cause false signals.
Together, momentum shows direction, and volatility shows confidence.
🛠️ How Does It Work?
• The core of the indicator is a smoothed momentum signal, representing the net difference between fast and slow momentum.
• Around this signal, we build upper and lower bands — these are dynamic boundaries that expand or contract based on volatility.
• When the momentum breaks above or below these bands, it signals a strong directional move — suggesting the start or continuation of a trend.
The bands also serve a visual filter:
• If momentum stays within the bands, it implies the market is consolidating or ranging.
• When it exits the bands decisively, it implies strength in that direction.
📈 How to Use It?
1. Trend Entry:
o When the momentum signal rises above the upper band, it suggests a strong bullish trend may be starting.
o When the signal drops below the lower band, it indicates a bearish trend.
2. Stay Out of Chop:
o If the signal moves sideways within the bands, it’s best to avoid trading — the market is likely consolidating or ranging.
3. Visual Confirmation:
o The background color changes with the trend: green for bullish, red for bearish, gray for neutral. This makes it quick to read visually.
4. Signal Arrows:
o Small up or down arrows appear when trends begin, serving as early entry points.
⚙️ What Kind of Market Does It Work Best In?
• Trending Markets: MTB shines in markets with strong directional movement — whether up or down. It's designed to pick up momentum early and hold through trend continuation.
• Volatile Instruments: The built-in volatility filter helps in markets like crypto or commodities where price action is fast and erratic.
• Avoid Flat or Low-Volume Conditions: In sideways markets, MTB may stay gray or flip often — these are not ideal times to trade using this indicator alone.
💎 Why Is It Unique?
Unlike many indicators that react slowly (like moving averages) or trigger too often (like raw momentum), MTB balances early detection with reliability. Its unique combination of:
• ROC difference for directional intent,
• Smoothing for signal clarity,
• Bands scaled by volatility for robustness,
…makes it stand apart from commonly available indicators on platforms like TradingView.
Simple Position CalculatorThis indicator provides a real-time position sizing calculator designed for fast momentum trading. It instantly calculates optimal trade size based on your risk parameters, entry/exit prices, and exchange conditions (fees/slippage). Perfect for high-speed entries during candle closes and breakouts.
Choppiness ZONE OverlayPurpose
This script overlays choppiness zones directly onto the price chart to help traders identify whether the market is trending or ranging. It is designed to filter out low-probability trades during high choppiness conditions.
How It Works
Calculates the Choppiness Index over a user-defined period using ATR and price range.
Divides choppiness into four zones:
30 to 40: Low choppiness, possible trend initiation, shown in yellow.
40 to 50: Moderate choppiness, transition zone, shown in orange.
50 to 60: High choppiness, weakening momentum, shown in red.
60 and above: Extreme choppiness, avoid trading, shown in purple.
Highlights each zone with customizable color fills between the high and low of the selected range.
Triggers a real-time alert when choppiness exceeds 60.
Features
Customizable choppiness zones and color settings.
Real-time alert when market becomes extremely choppy (choppiness ≥ 60).
Visual zone overlay on the price chart.
Compatible with all timeframes.
Lightweight and responsive for scalping, intraday, or swing trading.
Tip
Use this tool as a volatility or trend filter. Combine it with momentum or trend-following indicators to improve trade selection.
MA Cross MTF Alert (Miu)This script extends the classic moving average crossover strategy with support for up to 8 user-defined symbols across 4 custom timeframes, combined with a visual and alert system designed for traders who monitor multiple assets simultaneously.
Unlike traditional MA crossover tools, this script enables traders to receive real-time alerts for crossovers across multiple assets and timeframes, even when the script is not actively displayed on the chart — ideal for passive monitoring in multi-asset strategies.
What it does:
This script calculates two customizable moving averages (SMA or EMA) for each selected symbol and timeframe.
It then tracks crossover events:
- Bullish crossover when the fast MA crosses above the slow MA
- Bearish crossunder when the fast MA crosses below the slow MA
On the chart, it also displays the crossover signals for the current symbol and timeframe using color-coded cross icons.
Key features:
- Select SMA or EMA type for both moving averages
- Customize MA lengths and colors
- Works with any asset and timeframe
- Alerts include symbol and timeframe info for easy identification
How to use:
1) Add the indicator to your chart.
2) Choose the moving average type and lengths.
3) Enable/disable any of the 8 symbols and 4 timeframes.
4) Set up TradingView alerts by clicking “Create Alert” and selecting one of the alert() calls.
5) You will receive a message like:
BTC (1h) | MA Crossover ▲ or ETH (15m) | MA Crossunder ▼
Technical note:
This script uses request.security() to retrieve moving average values from up to 8 different symbols and 4 different timeframes in real time.
Feel free to leave your feedback or suggestions in the comments section below.
Enjoy!
DrawZigZag🟩 OVERVIEW
This library draws zigzag lines for existing pivots. It is designed to be simple to use. If your script creates pivots and you want to join them up while handling edge cases, this library does that quickly and efficiently. If you want your pivots created for you, choose one of the many other zigzag libraries that do that.
🟩 HOW TO USE
Pine Script libraries contain reusable code for importing into indicators. You do not need to copy any code out of here. Just import the library and call the function you want.
For example, for version 1 of this library, import it like this:
import SimpleCryptoLife/DrawZigZag/1
See the EXAMPLE USAGE sections within the library for examples of calling the functions.
For more information on libraries and incorporating them into your scripts, see the Libraries section of the Pine Script User Manual.
🟩 WHAT IT DOES
I looked at every zigzag library on TradingView, after finishing this one. They all seemed to fall into two groups in terms of functionality:
• Create the pivots themselves, using a combination of Williams-style pivots and sometimes price distance.
• Require an array of pivot information, often in a format that uses user-defined types.
My library takes a completely different approach.
Firstly, it only does the drawing. It doesn't calculate the pivots for you. This isn't laziness. There are so many ways to define pivots and that should be up to you. If you've followed my work on market structure you know what I think of Williams pivots.
Secondly, when you pass information about your pivots to the library function, you only need the minimum of pivot information -- whether it's a High or Low pivot, the price, and the bar index. Pass these as normal variables -- bools, ints, and floats -- on the fly as your pivots confirm. It is completely agnostic as to how you derive your pivots. If they are confirmed an arbitrary number of bars after they happen, that's fine.
So why even bother using it if all it does it draw some lines?
Turns out there is quite some logic needed in order to connect highs and lows in the right way, and to handle edge cases. This is the kind of thing one can happily outsource.
🟩 THE RULES
• Zigs and zags must alternate between Highs and Lows. We never connect a High to a High or a Low to a Low.
• If a candle has both a High and Low pivot confirmed on it, the first line is drawn to the end of the candle that is the opposite to the previous pivot. Then the next line goes vertically through the candle to the other end, and then after that continues normally.
• If we draw a line up from a Low to a High pivot, and another High pivot comes in higher, we *extend* the line up, and the same for lines down. Yes this is a form of repainting. It is in my opinion the only way to end up with a correct structure.
• We ignore lower highs on the way up and higher lows on the way down.
🟩 WHAT'S COOL ABOUT THIS LIBRARY
• It's simple and lightweight: no exported user-defined types, no helper methods, no matrices.
• It's really fast. In my profiling it runs at about ~50ms, and changing the options (e.g., trimming the array) doesn't make very much difference.
• You only need to call one function, which does all the calculations and draws all lines.
• There are two variations of this function though -- one simple function that just draws lines, and one slightly more advanced method that modifies an array containing the lines. If you don't know which one you want, use the simpler one.
🟩 GEEK STUFF
• There are no dependencies on other libraries.
• I tried to make the logic as clear as I could and comment it appropriately.
• In the `f_drawZigZags` function, the line variable is declared using the `var` keyword *inside* the function, for simplicity. For this reason, it persists between function calls *only* if the function is called from the global scope or a local if block. In general, if a function is called from inside a loop , or multiple times from different contexts, persistent variables inside that function are re-initialised on each call. In this case, this re-initialisation would mean that the function loses track of the previous line, resulting in incorrect drawings. This is why you cannot call the `f_drawZigZags` function from a loop (not that there's any reason to). The `m_drawZigZagsArray` does not use any internal `var` variables.
• The function itself takes a Boolean parameter `_showZigZag`, which turns the drawings on and off, so there is no need to call the function conditionally. In the examples, we do call the functions from an if block, purely as an illustration of how to increase performance by restricting the amount of code that needs to be run.
🟩 BRING ON THE FUNCTIONS
f_drawZigZags(_showZigZag, _isHighPivot, _isLowPivot, _highPivotPrice, _lowPivotPrice, _pivotIndex, _zigzagWidth, _lineStyle, _upZigColour, _downZagColour)
This function creates or extends the latest zigzag line. Takes real-time information about pivots and draws lines. It does not calculate the pivots. It must be called once per script and cannot be called from a loop.
Parameters:
_showZigZag (bool) : Whether to show the zigzag lines.
_isHighPivot (bool) : Whether the current bar confirms a high pivot. Note that pivots are confirmed after the bar in which they occur.
_isLowPivot (bool) : Whether the current bar confirms a low pivot.
_highPivotPrice (float) : The price of the high pivot that was confirmed this bar. It is NOT the high price of the current bar.
_lowPivotPrice (float) : The price of the low pivot that was confirmed this bar. It is NOT the low price of the current bar.
_pivotIndex (int) : The bar index of the pivot that was confirmed this bar. This is not an offset. It's the `bar_index` value of the pivot.
_zigzagWidth (int) : The width of the zigzag lines.
_lineStyle (string) : The style of the zigzag lines.
_upZigColour (color) : The colour of the up zigzag lines.
_downZagColour (color) : The colour of the down zigzag lines.
Returns: The function has no explicit returns. As a side effect, it draws or updates zigzag lines.
method m_drawZigZagsArray(_a_zigZagLines, _showZigZag, _isHighPivot, _isLowPivot, _highPivotPrice, _lowPivotPrice, _pivotIndex, _zigzagWidth, _lineStyle, _upZigColour, _downZagColour, _trimArray)
Namespace types: array
Parameters:
_a_zigZagLines (array)
_showZigZag (bool) : Whether to show the zigzag lines.
_isHighPivot (bool) : Whether the current bar confirms a high pivot. Note that pivots are usually confirmed after the bar in which they occur.
_isLowPivot (bool) : Whether the current bar confirms a low pivot.
_highPivotPrice (float) : The price of the high pivot that was confirmed this bar. It is NOT the high price of the current bar.
_lowPivotPrice (float) : The price of the low pivot that was confirmed this bar. It is NOT the low price of the current bar.
_pivotIndex (int) : The bar index of the pivot that was confirmed this bar. This is not an offset. It's the `bar_index` value of the pivot.
_zigzagWidth (int) : The width of the zigzag lines.
_lineStyle (string) : The style of the zigzag lines.
_upZigColour (color) : The colour of the up zigzag lines.
_downZagColour (color) : The colour of the down zigzag lines.
_trimArray (bool) : If true, the array of lines is kept to a maximum size of two lines (the line elements are not deleted). If false (the default), the array is kept to a maximum of 500 lines (the maximum number of line objects a single Pine script can display).
Returns: This function has no explicit returns but it modifies a global array of zigzag lines.