VWAP + ADX Trend FilterVWAP + ADX Trend Identifier (Intraday)”
🔹 Description:
Write a short, clear summary like:
“This script combines VWAP and ADX to help identify intraday trend trades. Buy and sell signals appear when price crosses VWAP with ADX strength above a threshold, confirming directional bias.”
You can also include:
Best suited for NIFTY / BNIFTY
Ideal timeframe: 5–15 min
For educational or personal use
🔹 Visibility:
Public: Anyone can find it on TradingView. Must follow Pine Script Publishing Rules.
Invite-only: Useful if you want to share with selected people (like clients or premium users).
Private: Only you can see and use it.
📌 Important Tips for Publishing:
指标和策略
JK's Inside DayEvaluates today’s candle only after it's closed
Keeps screener alignment and alerting accurate for daily after-hours workflows
Clean Support/Resistance Rejection (Strict Filtering)Best buy and Sell signal based on support and resistance levels.
You can edit how many candle rejections you want after rejection on each level.
Enjoy!
MA20 / MA40 / MA100 / MA200LAchi1911@ MA20_MA100
Medias moviles en todos los periodos pra identificar tendencias
Breakout Strategy with EMA & VolumeA breakout strategy combined with EMA and Volume data to give you the best results.
Indicator includes:
EMA 20 and EMA 50
Volume indicator
RSI (14)
EMA Crossover + SuperTrend Retest//@version=5
indicator("EMA Crossover + SuperTrend Retest", overlay=true)
// Inputs for SuperTrend
atrLength = input.int(10, "ATR Length", minval=1)
Factor = input.float(3.0, "SuperTrend Multiplier", step=0.1)
// Calculate EMAs
ema13 = ta.ema(close, 13)
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)
// Calculate SuperTrend
= ta.supertrend(Factor, atrLength)
// Plot EMAs
plot(ema13, "EMA 13", color=color.new(#FF6D00, 0))
plot(ema50, "EMA 50", color=color.new(#2962FF, 0))
plot(ema200, "EMA 200", color=color.new(#00BFA5, 0))
// Plot SuperTrend
plot(supertrend, "SuperTrend",
color=direction == 1 ? color.rgb(230, 13, 13) : color.rgb(17, 255, 0),
linewidth=2)
// Trend Conditions
uptrendFilter = ema50 > ema200 and close > supertrend
downtrendFilter = ema50 < ema200 and close < supertrend
// Crossover Conditions with Trend Filter
bullishCross = ta.crossover(ema13, ema50) and uptrendFilter
bearishCross = ta.crossunder(ema13, ema50) and downtrendFilter
// Retest Conditions (Both EMAs and SuperTrend)
bullishRetest = bullishCross and
(low <= ema50) and
(low <= ema200) and
(low <= supertrend)
bearishRetest = bearishCross and
(high >= ema50) and
(high >= ema200) and
(high >= supertrend)
// Plot Signals
plotshape(bullishRetest, "Bullish Signal", shape.triangleup,
location.belowbar, color=color.green, size=size.small)
plotshape(bearishRetest, "Bearish Signal", shape.triangledown,
location.abovebar, color=color.red, size=size.small)
// Alert Conditions
alertcondition(bullishRetest, "Bullish Alert",
"EMA13↑50 + Retest 50/200/SuperTrend")
alertcondition(bearishRetest, "Bearish Alert",
"EMA13↓50 + Retest 50/200/SuperTrend")
SDCALibraryMy Valuation Library for mostly crypto currency use, but some can be applied to other assets.
There are technical and on-chain indicator functions for use.
Technical Indicators:
1. **drawdown_zscore**
- **Summary**: Calculates the z-score of drawdowns over a specified lookback period.
- **Inputs**:
- `lookback_length` (int): Period for drawdown calculation.
- `zScoreLen` (int): Length for z-score calculation.
2. **sharpe_zscore**
- **Summary**: Computes the z-score of the Sharpe ratio using returns over a period and a smoothing length.
- **Inputs**:
- `length` (int): Period for returns calculation.
- `smalen` (int): Smoothing length for returns.
- `zScoreLen` (int): Length for z-score calculation.
3. **rsi_zscore**
- **Summary**: Calculates the z-score of the Relative Strength Index (RSI) with smoothing.
- **Inputs**:
- `length` (int): Period for RSI calculation.
- `smalen` (int): Smoothing length for RSI.
- `zScoreLen` (int): Length for z-score calculation.
4. **DFATH_zscore**
- **Summary**: Computes the z-score for a specific DFATH metric (details not specified).
- **Inputs**:
- `zScoreLen` (int): Length for z-score calculation.
5. **RTI_zscore**
- **Summary**: Calculates the z-score of a trend indicator based on data count and sensitivity.
- **Inputs**:
- `trend_data_count` (int): Number of data points for trend analysis.
- `trend_sensitivity_percentage` (int): Sensitivity threshold for trend detection.
- `zScoreLen` (int): Length for z-score calculation.
On-Chain (Crypto only, mostly BTC, ETH)
6. **SOPR_zscore**
- **Summary**: Computes the z-score of Spent Output Profit Ratio (SOPR) for a specific coin.
- **Inputs**:
- `zScoreLen` (int): Length for z-score calculation.
- `coin_sopr` (string): SOPR data for the specified coin.
7. **thermocap_zscore**
- **Summary**: Calculates the z-score of the Thermocap metric using moving average and coin-specific data.
- **Inputs**:
- `ma_len` (int): Length of the moving average.
- `ma_type` (string): Type of moving average.
- `zScoreLen` (int): Length for z-score calculation.
- `coin_index` (string): Coin index data.
- `coin_blocks_mined` (string): Data on blocks mined for the coin.
8. **MVRV_zscore**
- **Summary**: Computes the z-score of the Market Value to Realized Value (MVRV) ratio.
- **Inputs**:
- `zScoreLen` (int): Length for z-score calculation.
- `coin_MC` (string): Market capitalization data.
- `coin_MC_real` (string): Realized market capitalization data.
9. **supplyinprofit_zscore**
- **Summary**: Calculates the z-score of the percentage of coin supply in profit or loss, optionally adjusted for alpha decay.
- **Inputs**:
- `isAlphaDecayAdjusted` (bool): Whether to apply alpha decay adjustment.
- `zScoreLen` (int): Length for z-score calculation.
- `coin_profit_address_percent` (string): Percentage of addresses in profit.
- `coin_loss_address_percent` (string): Percentage of addresses in loss.
10. **realized_price_zscore**
- **Summary**: Computes the z-score of the realized price based on realized market cap and supply.
- **Inputs**:
- `zScoreLen` (int): Length for z-score calculation.
- `coin_MC_real` (string): Realized market capitalization data.
- `coin_supply` (string): Coin supply data.
11. **CVVD_zscore**
- **Summary**: Calculates the z-score of Cumulative Value Days Destroyed (CVVD) metric.
- **Inputs**:
- `zScoreLen` (int): Length for z-score calculation.
- `coin_MC_real` (string): Realized market capitalization data.
- `coin_total_volume` (string): Total volume data for the coin.
12. **NUPL_zscore**
- **Summary**: Computes the z-score of Net Unrealized Profit and Loss (NUPL) metric.
- **Inputs**:
- `zScoreLen` (int): Length for z-score calculation.
- `coin_MC` (string): Market capitalization data.
- `coin_MC_real` (string): Realized market capitalization data.
Moving AveragesThis indicator allows you to seamlessly apply one or multiple moving averages simultaneously on your chart. You can easily select from predefined periods: 10, 20, 50, 100, and 200.
It is pre-configured to use Exponential Moving Averages (EMA) by default, so there’s no need to input or adjust the type manually—just enable the ones you need and you're ready to go.
Ideal for traders who rely on dynamic trend analysis and want a quick, clutter-free setup for multiple EMAs
Quad Rotation - StochasticThis Indicator is a step up from the Triad Rotation Indicator previously made, as it has 4 Stochastic signals rather then 3.
It can be used mainly to identify potential reversal periods. If the Instrument becomes overbought, or oversold with all 4 stochastics a horizontal highlight will appear, either green or red. Green indicates the instrument is oversold, and may reverse soon, meaning you should take a buying positions, and red indicates an overbought position, where you may want to sell due to a reversal downward.
Additionally, you can set an alarm if all 4 stochastic indicators signal overbought or oversold. This will help reduce your need to watch each instrument, and reduce the likelihood of overtrading.
If you have comments regarding this indicator, if you found it helpful, or would like other improvements feel free to email me. If you are looking for other custom indicators, also feel free to email me. Email: thejak77@aol.com. This is an email rarely monitored, so please be patient, thank you!
All the best, and stay profitable!
Breakout Entry Signals//@version=5
indicator("Breakout Entry Signals", overlay=true)
length = input.int(20, title="Breakout Period")
highestHigh = ta.highest(high, length)
lowestLow = ta.lowest(low, length)
longCondition = close > highestHigh
shortCondition = close < lowestLow
plotshape(longCondition, location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortCondition, location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
Average True Range (50%)This script is used to calculate and display the Average True Range (ATR) scaled down to 50% of its original value. ATR is a volatility indicator that measures how much the price of an asset moves within a certain period. This script allows users to choose a smoothing method to calculate the ATR, including RMA, SMA, EMA, or WMA.
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.
CPR-NIFTY-BUY-SELL-BY APRThis indicator will enable the Novice traders to find the write entry and exit for nifty option / spot trading.
Traders can use it carefully when the more option towards the expected direction. Take the entry after signal and hold it until you find the red candle close below the previous green candle for buy vice versa for sell trade.
if any updates or suggestion kindly send mail to jsbaskaran1@gmail.com
Double Inside Bar Alert (1-1 Only)Double Inside Bar Alert Indicator
Stay ahead of breakout opportunities with our Double Inside Bar Alert Indicator. This tool automatically scans your watchlist and notifies you in real-time whenever a double inside bar pattern appears—an advanced price action setup known for signaling strong potential breakouts or reversals.
Whether you’re a day trader or swing trader, this indicator helps you:
Spot consolidation zones early before major price moves
Receive instant alerts across your entire watchlist
Filter noise and focus on high-probability chart setups
Perfect for traders who rely on price action and want to catch momentum shifts as they form.
Pionex Signal Bot (Single Position)Pionex Signal Bot (Single Position) Script - Created by Jon (Pionex)
Basic code functionality for Pionex users to get started with Signal Bot
DJZS Session Tracker (PDT-Aligned)//@version=5
indicator("DJZS Session Tracker (PDT-Aligned)", overlay=true, max_lines_count=500)
// Extract current date/time
var int y = year(time)
var int mo = month(time)
var int d = dayofmonth(time)
// Convert local session times (PDT = UTC-7)
asia_start = timestamp("America/Los_Angeles", y, mo, d, 17, 0)
asia_end = timestamp("America/Los_Angeles", y, mo, d + 1, 2, 0)
london_start = timestamp("America/Los_Angeles", y, mo, d + 1, 0, 0)
london_end = timestamp("America/Los_Angeles", y, mo, d + 1, 9, 0)
ny_start = timestamp("America/Los_Angeles", y, mo, d + 1, 5, 0)
ny_end = timestamp("America/Los_Angeles", y, mo, d + 1, 14, 0)
in_session(start, end) =>
time >= start and time < end
asia = in_session(asia_start, asia_end)
london = in_session(london_start, london_end)
ny = in_session(ny_start, ny_end)
// Plot background for sessions
bgcolor(asia ? color.new(color.aqua, 85) : na)
bgcolor(london ? color.new(color.green, 85) : na)
bgcolor(ny ? color.new(color.orange, 85) : na)
// Track session highs/lows
var float asiaHigh = na
var float asiaLow = na
var float londonHigh = na
var float londonLow = na
var float nyHigh = na
var float nyLow = na
if asia
asiaHigh := na(asiaHigh) ? high : math.max(asiaHigh, high)
asiaLow := na(asiaLow) ? low : math.min(asiaLow, low)
else
asiaHigh := na
asiaLow := na
if london
londonHigh := na(londonHigh) ? high : math.max(londonHigh, high)
londonLow := na(londonLow) ? low : math.min(londonLow, low)
else
londonHigh := na
londonLow := na
if ny
nyHigh := na(nyHigh) ? high : math.max(nyHigh, high)
nyLow := na(nyLow) ? low : math.min(nyLow, low)
else
nyHigh := na
nyLow := na
// Plot session highs/lows
plot(asiaHigh, "Asia High", color=color.aqua, style=plot.style_linebr, linewidth=1)
plot(asiaLow, "Asia Low", color=color.aqua, style=plot.style_linebr, linewidth=1)
plot(londonHigh, "London High", color=color.green, style=plot.style_linebr, linewidth=1)
plot(londonLow, "London Low", color=color.green, style=plot.style_linebr, linewidth=1)
plot(nyHigh, "NY High", color=color.orange, style=plot.style_linebr, linewidth=1)
plot(nyLow, "NY Low", color=color.orange, style=plot.style_linebr, linewidth=1)
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!
Avions Ultimate indicator70% wr backtest it yourself. works best on bitcoin 30m timeframe works the best for me
Momentum Contour Pulse [ApexLegion]🌊 Momentum Contour Pulse
*Advanced Multi-Layer Momentum Visualization with High-Precision Trend Reversal Detection*
📖 **OVERVIEW**
The **Momentum Contour Pulse** is a sophisticated momentum analysis tool that combines topographic-style visualization with precision trend reversal signals. This indicator creates dynamic "contour maps" of market momentum, similar to elevation maps, where color intensity and gradient effects reveal the strength and direction of underlying market forces.
**Key Innovation:** Unlike traditional momentum indicators that show simple lines or histograms, this system renders momentum as flowing, gradient-based bands that expand and contract with market volatility, providing an intuitive visual representation of market energy.
✨ **KEY FEATURES**
🎨 **Dynamic Contour Visualization**
- **20-Level Gradient System**: Creates smooth topographic-style momentum bands
- **Adaptive Color Intensity**: Glow effects strengthen with momentum conviction
- **Dual-Color Zones**: Cyan for bullish momentum, Purple for bearish momentum
- **Fade Effects**: Smooth visual transitions during momentum changes
⚡ **Precision Pulse Signals**
- **🟢 Bull Pulse**: Triggered at trend reversal to upward momentum + maximum intensity
- **🔴 Bear Pulse**: Triggered at trend reversal to downward momentum + maximum intensity
- **Professional Glow Effects**: Multi-layer plotshape rendering for premium visual quality
- **ATR-Based Positioning**: Signals placed at precise reversal points with volatility-adjusted spacing
🔧 **Advanced Technical Engine**
- **ATG Filter System**: Proprietary dual-timeframe EMA flow analysis with angular separation
- **Adaptive Volatility Bands**: Dynamic expansion/contraction based on market conditions
- **Multi-Condition Confirmation**: Combines trend detection, breakout analysis, and momentum strength
- **Intensity Filtering**: Only top 25% intensity signals qualify for pulse alerts
🚀 **HOW TO USE**
### **For Visual Analysis:**
1. **Contour Reading**: Brighter bands = stronger momentum, darker bands = weaker momentum
2. **Direction Assessment**: Cyan glow = bullish bias, Purple glow = bearish bias
3. **Momentum Tracking**: Watch band intensity changes to gauge momentum shifts
**For Flow Analysis:**
1. **🟢 Bull Pulse**: Monitor for upside pressure when pulse appears at support levels
2. **🔴 Bear Pulse**: Observe downside flow when pulse appears at resistance levels
3. **Confirmation**: Validate momentum expansion with other technical analysis for optimal engagement zones
**For Educational Purpose:**
1. Enable **"Show Debug Table"** to see all internal calculations
2. Enable **"Show Debug Lines"** to visualize trend zones and breakout levels
3. Study how momentum intensity correlates with price movements
⚙️ **CONFIGURATION GUIDE**
**ATG Filter Settings** 🎯
- **Short-Term Flow Length (21)**: Controls fast EMA sensitivity
- **Long-Term Flow Length (55)**: Controls slow EMA baseline
- **Volatility Expansion Multiplier (1.75)**: Adjusts breakout zone sensitivity
- **Trend Angle Threshold (25°)**: Sets minimum slope requirement for trend detection
**Visual Customization** 🎨
- **Upper Band Color**: Customize bullish momentum color (default: Cyan)
- **Lower Band Color**: Customize bearish momentum color (default: Purple)
- **Base Glow Intensity (3.0)**: Controls overall visual brightness
- **Momentum Boost Multiplier (1.3)**: Amplifies visual response to strong moves
**Learning Tools** 🔧
- **Show Debug Table**: Reveals all calculation steps and decision logic
- **Show Debug Lines**: Displays trend zones and breakout thresholds
- **Intensity Smoothing Period (8)**: Controls signal responsiveness vs stability
📚 **EDUCATIONAL VALUE**
This indicator serves as an excellent learning tool for understanding:
**Momentum Analysis Concepts:**
- How dual-timeframe EMA analysis reveals trend structure
- The relationship between volatility and trend confirmation
- Angular measurement techniques for trend strength assessment
**Advanced Pine Script Techniques:**
- Multi-level gradient rendering using fill() functions
- Dynamic color saturation based on calculated intensity
- Sophisticated fade effect systems using historical arrays
- Professional signal visualization with multi-layer plotshape
**Market Psychology:**
- How momentum builds and dissipates in trending markets
- Visual representation of market conviction through color intensity
- The relationship between breakout patterns and momentum confirmation
⚠️ **IMPORTANT NOTES**
**Analysis Guidelines:**
- Use on multiple timeframes for comprehensive momentum assessment
- Combine with support/resistance levels for enhanced flow initiation accuracy
- Consider overall market context when interpreting directional moves
**Important Notes:**
- Disable debug features for optimal chart performance
- Default settings are optimized for most market conditions
**Signal Interpretation:**
- Pulse signals indicate potential flow reversal points, not guaranteed outcomes
- Higher intensity signals generally show better momentum expansion reliability
- Always practice proper risk management regardless of directional move strength
⚠️ **Limitations**
1. **Backtesting Limitations**
This indicator is not a strategy and cannot perform official backtesting on TradingView's engine.
Pulse signals are visual cues only, not verified historical trades.
2. **Regression Band and ATG Filter Inherent Lag**
Linear regression bands are calculated from past data, creating natural lag.
The dual-timeframe EMA analysis (21/55) also requires sufficient data for trend establishment.
3. **High Intensity Threshold May Miss Signals**
The 75% intensity requirement filters for premium signals but may miss moderate opportunities.
In low-volatility periods, pulse signals may become infrequent.
4. **Single Indicator Dependency Risk**
Momentum Contour Pulse works best when combined with support/resistance analysis.
Relying solely on pulse signals without market context may reduce effectiveness.
5. **Parameter Sensitivity**
Modifying ATG filter settings or intensity thresholds should be done carefully.
Excessive sensitivity may produce false signals; excessive filtering may miss valid setups.
🎓 **TECHNICAL METHODOLOGY**
The indicator employs a sophisticated multi-step process:
1. **Flow Analysis**: Calculates dual-timeframe EMA separation and converts to angular measurements
2. **Threshold Adaptation**: Dynamically adjusts trend strength requirements based on historical volatility
3. **Breakout Detection**: Identifies price movements beyond adaptive volatility bands
4. **Intensity Calculation**: Normalizes momentum strength to 0-1 range with smoothing
5. **Visual Rendering**: Applies 20-level gradient system with dynamic transparency
6. **Signal Generation**: Filters for trend changes meeting maximum intensity criteria
**Core Algorithm:**
flowSeparation = math.atan(flowFast_ATG - flowSlow_ATG) * 180 / math.pi
- Converts dual-timeframe EMA separation into precise angular momentum measurement, enabling topographic-style visualization of market flow intensity.
! (i.imgur.com)
🎨 **Visual Features Showcase**
**Multi-Layer Contour Visualization in Action**
**Dynamic Gradient Bands:** Watch how the 20-level gradient system creates topographic-style momentum maps. The **emerald upper contours** represent bullish flow zones, while **violet lower contours** indicate bearish pressure areas. Notice how band intensity **glows brighter** during strong momentum phases and **fades** during consolidation.
**Precision Pulse Signal:** The **🟢 green pulse** (left side) demonstrates perfect trend reversal detection at the momentum flow initiation point. The multi-layer glow effect creates professional-grade signal visualization that stands out without cluttering the chart.
**Adaptive Band Expansion:** Observe how contour bands dynamically **expand during volatility** and **contract during calm periods**, automatically adjusting to market conditions using ATR-based calculations.
📊 **What You're Seeing:**
• **Emerald Glow Zones** → Bullish momentum dominance
• **Violet Flow Areas** → Bearish pressure regions
• **Gradient Intensity** → Real-time momentum strength
• **Pulse Signals** → High-conviction reversal points
• **Smooth Transitions** → Advanced fade effect system
✅ Usage Disclaimer
Momentum Contour Pulse is a visual analytics tool designed for educational and informational purposes only.
It is not financial advice, nor should its signals be interpreted as trading recommendations.
Users are solely responsible for their own trading decisions.
Always practice appropriate risk management and consult with a licensed financial professional when necessary.
The creator of this tool assumes no liability for any financial losses resulting from its use.
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.
ATR, ADX, RSI TableATR, ADX & RSI Dashboard (Color-Coded)
Overview
This indicator provides a clean, all-in-one dashboard that displays the current values for three of the most popular technical indicators: Average True Range (ATR), Average Directional Index (ADX), and Relative Strength Index (RSI).
To make analysis faster and more intuitive, the values in the table are dynamically color-coded based on key thresholds. This allows you to get an immediate visual summary of market volatility, trend strength, and momentum without cluttering your main chart area.
Features
The indicator displays a simple table in the bottom-right corner of your chart with the following color logic:
ATR (Volatility): Measures the average volatility of an asset.
Green: Low Volatility (ATR is less than 3% of the current price).
Orange: Moderate Volatility (ATR is between 3% and 5%).
Red: High Volatility (ATR is greater than 5%).
ADX (Trend Strength): Measures the strength of the underlying trend, regardless of its direction.
Red: Weak or Non-Trending Market (ADX is below 20).
Orange: Developing or Neutral Trend (ADX is between 20 and 25).
Green: Strong Trend (ADX is above 25).
RSI (Momentum): Measures the speed and change of price movements to identify overbought or oversold conditions.
Green: Potentially Oversold (RSI is below 40).
Orange: Neutral/Normal Conditions (RSI is between 40 and 70).
Red: Potentially Overbought (RSI is above 70).
How to Use
This tool is perfect for traders who want a quick, at-a-glance understanding of the current market state. Instead of analyzing three separate indicators, you can use this dashboard to:
Quickly confirm if a strong trend is present before entering a trade.
Assess volatility to adjust your stop-loss and take-profit levels.
Instantly spot potential overbought or oversold conditions.
Customization
All input lengths for the ATR, ADX, and RSI are fully customizable in the indicator's settings menu, allowing you to tailor the calculations to your specific trading style and timeframe.
BTC Smart Buy/Sell//@version=5
indicator("BTC Smart Buy/Sell", overlay=true)
// === INPUTS ===
rsiPeriod = input.int(14, "RSI Period")
macdFast = input.int(12, "MACD Fast")
macdSlow = input.int(26, "MACD Slow")
macdSignal = input.int(9, "MACD Signal")
atrPeriod = input.int(10, "ATR Period")
atrMultiplier = input.float(3.0, "Supertrend Multiplier")
volMultiplier = input.float(1.5, "Volume Spike Multiplier")
// === CALCULATIONS ===
rsi = ta.rsi(close, rsiPeriod)
= ta.macd(close, macdFast, macdSlow, macdSignal)
macdCrossUp = ta.crossover(macdLine, signalLine)
macdCrossDown = ta.crossunder(macdLine, signalLine)
// Supertrend
= ta.supertrend(atrMultiplier, atrPeriod)
// Volume spike
avgVol = ta.sma(volume, 20)
volSpike = volume > avgVol * volMultiplier
volDrop = volume < avgVol * 0.7
// === CONDITIONS ===
buyCond = (rsi < 30 ? 1 : 0) + (macdCrossUp ? 1 : 0) + (supertrendDir == 1 ? 1 : 0) + (volSpike ? 1 : 0)
sellCond = (rsi > 70 ? 1 : 0) + (macdCrossDown ? 1 : 0) + (supertrendDir == -1 ? 1 : 0) + (volDrop ? 1 : 0)
buySignal = buyCond >= 3
sellSignal = sellCond >= 3
// === PLOT ===
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")