Advanced Multi-Timeframe Trend DetectorThis script is designed to provide a multi-timeframe trend analysis, combining moving averages (MAs) and the Relative Strength Index (RSI) to determine market direction across different timeframes. Here's a breakdown of what the script does:
Key Components of the Script
Inputs:
Moving Averages: Short and long moving average lengths (9 and 21 periods).
ATR and RSI Lengths: ATR (Average True Range) and RSI (Relative Strength Index) lengths set to 14 periods.
RSI Levels: Overbought and oversold levels for the RSI set to 70 and 30, respectively.
Trend Determination:
A function called trendDirection evaluates the trend based on the closing prices of the current and previous periods, as well as the RSI value.
It classifies the trend as "Up", "Down", or "Sideways" based on the conditions:
Up: Current close is higher than the previous close and RSI is below the overbought level.
Down: Current close is lower than the previous close and RSI is above the oversold level.
Sideways: If neither condition is met.
Table Creation:
A table is created at the bottom right of the chart to display the trend for different timeframes (5m, 15m, 60m, 240m, and Daily).
The table is initialized with headers and then populated with the trend results for each timeframe.
Calculating Trends for Each Timeframe:
The script fetches the current and previous close prices for each timeframe using request.security().
It calculates the RSI for each timeframe and then calls the trendDirection function to determine the trend.
Displaying Trends:
The results are displayed in a table format, with each timeframe and its corresponding trend.
Summary
Overall, this script provides a concise way to visualize market trends across multiple timeframes, using MAs and RSI to offer a more nuanced view of potential market movements. This can help traders make more informed decisions based on the prevailing trends.
Komut dosyalarını "trend" için ara
Universal Trend Following Strategy | QuantumRsearchUniversal All Assets Strategy by Rocheur
The Universal All Assets Strategy is a cutting-edge, trend-following algorithm designed to operate seamlessly across multiple asset classes, including equities, commodities, forex, and cryptocurrencies. This strategy leverages the power of eight unique indicators, offering traders robust, adaptive signals. Its dynamic logic, combined with a comprehensive risk management framework, allows for precision trading in a variety of market conditions.
Core Methodologies and Features
1. Eight Integrated Trend Indicators
At the heart of the Universal All Assets Strategy are eight sophisticated trend-following indicators, each designed to capture different facets of market behavior. These indicators work together to provide a multi-dimensional analysis of price trends, filtering out noise and reacting only to significant movements:
Directional Moving Averages : Tracks the primary market trend, offering a clear indication of long-term price direction, ideal for identifying sustained upward or downward movements.
Smoothed Moving Averages : Reduces short-term volatility and noise to reveal the underlying trend, enhancing signal clarity and helping traders avoid reacting to temporary price spikes.
RSI Loops : Utilizes the Relative Strength Index (RSI) to assess market momentum, using a unique for loop mechanism to smooth out data and enhance precision.
Supertrend Filters : This indicator dynamically adjusts to market volatility, closely following price action to detect significant breakouts or reversals. The Supertrend is a core component for identifying shifts in trend direction with minimal lag.
RVI for Loop : The Relative Volatility Index (RVI) measures the strength of market volatility. It is optimized with a for loop mechanism, which smooths out the data and improves directional cues, especially in choppy or sideways markets.
Hull for Loop : The Hull Moving Average is designed to minimize lag while offering a smooth, responsive trend line. The for loop mechanism further enhances this by making the Hull even more sensitive to trend shifts, ensuring faster reaction to market movements without generating excessive noise.
These indicators evaluate market conditions independently, assigning a score of 1 for bullish trends and -1 for bearish trends. The average score across all eight indicators is calculated for each time frame (or bar), and this score determines whether the strategy should enter, exit, or remain neutral in a trade.
2. Scoring and Signal Confirmation
The strategy’s confirmation system ensures that trades are initiated only when there is strong alignment across multiple indicators:
A Long Position (Buy) is initiated when the majority of indicators generate a bullish signal, i.e., the average score exceeds a predefined upper threshold.
A Short Position or Exit is triggered when the average score falls below a lower threshold, signaling a bearish trend or neutral market.
By using a majority-rule confirmation system, the strategy filters out weak signals, reducing the chances of reacting to market noise or false positives. This ensures that only robust trends—those supported by multiple indicators—trigger trades.
Adaptive Logic for All Asset Classes
The Universal All Assets Strategy stands out for its ability to adapt dynamically across different asset classes. Whether it’s applied to highly volatile assets like cryptocurrencies or more stable instruments like equities, the strategy fine-tunes its behavior to match the asset’s volatility profile and price behavior.
Volatility Filters : The system incorporates volatility-sensitive filters, such as the Average True Range (ATR) and standard deviation metrics, which dynamically adjust its sensitivity based on market conditions. This ensures the strategy remains responsive to significant price movements while filtering out inconsequential fluctuations.
This adaptability makes the Universal All Assets Strategy effective across diverse markets, providing consistent performance whether the market is trending, range-bound, or experiencing high volatility.
Customization and Flexibility
1. Directional Bias
The strategy offers traders the flexibility to set a customizable directional bias, allowing it to focus on:
Long-only trades during bullish markets.
Short-only trades during bear markets.
Bi-directional trades for those looking to capitalize on both uptrends and downtrends.
This bias can be fine-tuned based on market conditions, trader preference, or risk tolerance, without compromising the integrity of the overall signal-generation process.
2. Volatility Sensitivity
Traders can adjust the strategy’s volatility sensitivity through customizable settings. By modifying how the system reacts to volatility, traders can make the strategy more aggressive in high-volatility environments or more conservative in quieter markets, depending on their individual trading style.
Visual Representation of Component Behavior
One of the unique features of the strategy is its real-time visual representation of the eight indicators through a component table displayed on the chart. This table provides a clear overview of the current status of each indicator:
A score of 1 indicates a bullish signal.
A score of -1 indicates a bearish signal.
The table is updated at each time frame (bar), showing how each indicator is contributing to the overall trend decision. This real-time feedback allows traders to monitor the exact composition of the strategy’s signal, helping them better understand market dynamics.
Oscillator Visualization for Trend Detection
To complement the component table, the strategy includes a trend oscillator displayed beneath the price chart, offering a visual summary of the overall market direction:
Green bars represent bullish trends when the majority of indicators signal an uptrend.
Red bars represent bearish trends or a neutral (cash) position when the majority of indicators detect a downtrend.
This oscillator allows traders to quickly assess the market’s overall direction at a glance, without needing to analyze each individual indicator, providing a clear and immediate visual of the market trend.
Backtested and Forward-Tested for Real-World Conditions
The Universal All Assets Strategy has been thoroughly tested under real-world trading conditions, incorporating key factors like:
Slippage : Set at 20 ticks to represent real market fluctuations.
Order Size : Calculated as 10% of equity, ensuring appropriate risk exposure for realistic capital management.
Commission : A fee of 0.05% has been factored in to account for trading costs.
These settings ensure that the strategy’s performance metrics—such as the Sortino Ratio , Sharpe Ratio , Omega Ratio , and Profit Factor —are reflective of actual trading environments. The rigorous backtesting and forward-testing processes ensure that the strategy produces realistic results, making it compatible with the markets it is written for and demonstrating how the system would behave in live conditions. It also includes robust risk management tools to minimize drawdowns and preserve capital, making it suitable for both professional and retail traders.
Anti-Fragile Design and Realistic Expectations
The Universal All Assets Strategy is engineered to be anti-fragile, thriving in volatile markets by adjusting to turbulence rather than being damaged by it. This is a crucial feature that ensures the strategy remains effective even during times of significant market instability.
Moreover, the strategy is transparent about realistic expectations, acknowledging that no system can guarantee a 100% win rate and that past performance is not indicative of future results. This transparency fosters trust and provides traders with a realistic framework for long-term success, making it an ideal choice for traders looking to navigate complex market conditions with confidence.
Acknowledgment of External Code
Special credit goes to bii_vg, whose invite-only code was used with permission in the development of the Universal All Assets Strategy. Their contributions have been instrumental in refining certain aspects of this strategy, ensuring its robustness and adaptability across various markets.
Conclusion
The Universal All Assets Strategy by Rocheur offers traders a powerful, adaptable tool for capturing trends across a wide range of asset classes. Its eight-indicator confirmation system, combined with customizable settings and real-time visual representations, provides a comprehensive solution for traders seeking precision, flexibility, and consistency. Whether used in high-volatility markets or more stable environments, the strategy’s dynamic adaptability, transparent logic, and robust testing make it an excellent choice for traders aiming to maximize performance while managing risk effectively.
cphelperLibrary "cphelper"
ACPU helper library - for private use. Not so meaningful for others.
calculate_rr(targetArray, rrArray, breakevenOnTarget1)
calculates risk reward for given targets
Parameters:
targetArray (float ) : array of targets
rrArray (float ) : array of risk reward
breakevenOnTarget1 (simple bool) : option to breakeven
Returns: array rrArray
trendPairs(l1StartX, l1StartY, l1EndX, l1EndY, l2StartX, l2StartY, l2EndX, l2EndY, zgColor)
creates trendline pairs
Parameters:
l1StartX (int) : startX of first line
l1StartY (float) : startY of first line
l1EndX (int) : endX of first line
l1EndY (float) : endY of first line
l2StartX (int) : startX of second line
l2StartY (float) : startY of second line
l2EndX (int) : endX of second line
l2EndY (float) : endY of second line
zgColor (color) : line color
Returns:
find_type(l1t, l2t, channelThreshold)
Finds type based on trendline pairs
Parameters:
l1t (line) : line1
l2t (line) : line2
channelThreshold (simple float) : theshold for channel identification
Returns: pattern type and flags
getFlags(flags)
Flatten flags
Parameters:
flags (bool ) : array of flags
Returns: - flattened flags isChannel, isTriangle, isWedge, isExpanding, isContracting, isFlat, isRising, isFalling
getType(typeNum)
Get type based on type number
Parameters:
typeNum (int) : number representing type
Returns: String value of type
getStatus(status, maxStatus)
Get status based on integer value representations
Parameters:
status (int) : integer representing current status
maxStatus (int) : integer representing max status
Returns: String status value
calculate_simple_targets(trendLines, settingsMatrix, patternTypeMapping, patternType)
Calculate targets based on trend lines
Parameters:
trendLines (line ) : trendline pair array
settingsMatrix (matrix) : matrix containing settings
patternTypeMapping (string ) : array containing pattern type mapping
patternType (int) : pattern type
Returns: arrays containing long and short calculated targets
recalculate_position(patternTypeAndStatusMatrix, targetMatrix, index, pIndex, status, maxStatus, targetValue, stopValue, dir, breakevenOnTarget1)
Recalculate position values
Parameters:
patternTypeAndStatusMatrix (matrix) : matrix containing pattern type and status
targetMatrix (matrix) : matrix containing targets
index (int) : current index
pIndex (int) : pattern index
status (int) : current status
maxStatus (int) : max status reached
targetValue (float) : current target value
stopValue (float) : current stop value
dir (int) : direction
breakevenOnTarget1 (simple bool) : flag to breakeven upon target1
Returns: new status and maxStatus values
draw_targets(longTargets, shortTargets, index, labelColor, patternName, positionIndex, longMaxStatus, longStatus, shortMaxStatus, shortStatus, tempBoxes, tempLines, tempLabels)
Draw targets on chart
Parameters:
longTargets (matrix) : matrix containing long targets
shortTargets (matrix) : matrix containing short targets
index (int) : current index
labelColor (color) : color of lines and labels
patternName (string) : Pattern name
positionIndex (int) : position on the chart
longMaxStatus (int) : max status for long
longStatus (int) : long status value
shortMaxStatus (int) : max status for short
shortStatus (int) : short status value
tempBoxes (box ) : temporary box array
tempLines (line ) : temporary lines array
tempLabels (label ) : temporary labels array
Returns: void
populate_open_stats(patternIdArray, barMatrix, patternTypeAndStatusMatrix, patternColorArray, longTargets, shortTargets, patternRRMatrix, OpenStatPosition, lblSizeOpenTrades)
Populate open stats table
Parameters:
patternIdArray (int ) : pattern Ids
barMatrix (matrix) : matrix containing bars
patternTypeAndStatusMatrix (matrix) : matrix containing pattern type and status
patternColorArray (color ) : array containing current patter colors
longTargets (matrix) : matrix of long targets
shortTargets (matrix) : matrix of short targets
patternRRMatrix (matrix) : pattern risk reward matrix
OpenStatPosition (simple string) : table position
lblSizeOpenTrades (simple string) : text size
Returns: void
draw_pattern_label(trendLines, patternFlagMatrix, patternTypeAndStatusMatrix, patternColorArray, patternFlags, patternLabelArray, zgColor, patternType, drawLabel, clearOldPatterns, safeRepaint, maxPatternsReference)
Parameters:
trendLines (line )
patternFlagMatrix (matrix)
patternTypeAndStatusMatrix (matrix)
patternColorArray (color )
patternFlags (bool )
patternLabelArray (label )
zgColor (color)
patternType (int)
drawLabel (simple bool)
clearOldPatterns (simple bool)
safeRepaint (simple bool)
maxPatternsReference (simple int)
populate_closed_stats(patternTypeAndStatusMatrix, bullishCounts, bearishCounts, bullishRetouchCounts, bearishRetouchCounts, bullishSizeMatrix, bearishSizeMatrix, bullishRR, bearishRR, ClosedStatsPosition, lblSizeClosedTrades, showSelectivePatternStats, showPatternStats, showStatsInPercentage)
Parameters:
patternTypeAndStatusMatrix (matrix)
bullishCounts (matrix)
bearishCounts (matrix)
bullishRetouchCounts (matrix)
bearishRetouchCounts (matrix)
bullishSizeMatrix (matrix)
bearishSizeMatrix (matrix)
bullishRR (matrix)
bearishRR (matrix)
ClosedStatsPosition (simple string)
lblSizeClosedTrades (simple string)
showSelectivePatternStats (simple bool)
showPatternStats (simple bool)
showStatsInPercentage (simple bool)
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.
reversalchartpatternsLibrary "reversalchartpatterns"
User Defined Types and Methods for reversal chart patterns - Double Top, Double Bottom, Triple Top, Triple Bottom, Cup and Handle, Inverted Cup and Handle, Head and Shoulders, Inverse Head and Shoulders
method delete(this)
Deletes the drawing components of ReversalChartPatternDrawing object
Namespace types: ReversalChartPatternDrawing
Parameters:
this (ReversalChartPatternDrawing) : ReversalChartPatternDrawing object
Returns: current ReversalChartPatternDrawing object
method delete(this)
Deletes the drawing components of ReversalChartPattern object. In turn calls the delete of ReversalChartPatternDrawing
Namespace types: ReversalChartPattern
Parameters:
this (ReversalChartPattern) : ReversalChartPattern object
Returns: current ReversalChartPattern object
method lpush(this, obj, limit, deleteOld)
Array push with limited number of items in the array. Old items are deleted when new one comes and exceeds the limit
Namespace types: array
Parameters:
this (array) : array object
obj (ReversalChartPattern) : ReversalChartPattern object which need to be pushed to the array
limit (int) : max items on the array. Default is 10
deleteOld (bool) : If set to true, also deletes the drawing objects. If not, the drawing objects are kept but the pattern object is removed from array. Default is false.
Returns: current ReversalChartPattern object
method draw(this)
Draws the components of ReversalChartPatternDrawing
Namespace types: ReversalChartPatternDrawing
Parameters:
this (ReversalChartPatternDrawing) : ReversalChartPatternDrawing object
Returns: current ReversalChartPatternDrawing object
method draw(this)
Draws the components of ReversalChartPatternDrawing within the ReversalChartPattern object.
Namespace types: ReversalChartPattern
Parameters:
this (ReversalChartPattern) : ReversalChartPattern object
Returns: current ReversalChartPattern object
method scan(zigzag, patterns, errorPercent, shoulderStart, shoulderEnd, allowedPatterns, offset)
Scans zigzag for ReversalChartPattern occurences
Namespace types: zg.Zigzag
Parameters:
zigzag (Zigzag type from Trendoscope/Zigzag/11) : ZigzagTypes.Zigzag object having array of zigzag pivots and other information on each pivots
patterns (array) : Existing patterns array. Used for validating duplicates
errorPercent (float) : Error threshold for considering ratios. Default is 13
shoulderStart (float) : Starting range of shoulder ratio. Used for identifying shoulders, handles and necklines
shoulderEnd (float) : Ending range of shoulder ratio. Used for identifying shoulders, handles and necklines
allowedPatterns (array) : array of int containing allowed pattern types
offset (int) : Offset of zigzag to consider only confirmed pivots
Returns: int pattern type
method createPattern(zigzag, patternType, patternColor, properties, offset)
Create Pattern from ZigzagTypes.Zigzag object
Namespace types: zg.Zigzag
Parameters:
zigzag (Zigzag type from Trendoscope/Zigzag/11) : ZigzagTypes.Zigzag object having array of zigzag pivots and other information on each pivots
patternType (int) : Type of pattern being created. 1 - Double Tap, 2 - Triple Tap, 3 - Cup and Handle, 4 - Head and Shoulders
patternColor (color) : Color in which the patterns are drawn
properties (ReversalChartTradeProperties)
offset (int)
Returns: ReversalChartPattern object created
method getName(this)
get pattern name of ReversalChartPattern object
Namespace types: ReversalChartPattern
Parameters:
this (ReversalChartPattern) : ReversalChartPattern object
Returns: string name of the pattern
method getDescription(this)
get consolidated description of ReversalChartPattern object
Namespace types: ReversalChartPattern
Parameters:
this (ReversalChartPattern) : ReversalChartPattern object
Returns: string consolidated description
method init(this)
initializes the ReversalChartPattern object and creates sub object types
Namespace types: ReversalChartPattern
Parameters:
this (ReversalChartPattern) : ReversalChartPattern object
Returns: ReversalChartPattern current object
ReversalChartPatternDrawing
Type which holds the drawing objects for Reversal Chart Pattern Types
Fields:
patternLines (array type from Trendoscope/Drawing/2) : array of Line objects representing pattern
entry (Line type from Trendoscope/Drawing/2) : Entry price Line
targets (array type from Trendoscope/Drawing/2)
stop (Line type from Trendoscope/Drawing/2) : Stop price Line
patternLabel (Label type from Trendoscope/Drawing/2)
ReversalChartTradeProperties
Trade properties of ReversalChartPattern
Fields:
riskAdjustment (series float) : Risk Adjustment for calculation of stop
useFixedTarget (series bool) : Boolean flag saying use fixed target type wherever possible. If fixed target type is not possible, then risk reward/fib ratios are used for calculation of targets
variableTargetType (series int) : Integer value which defines whether to use fib based targets or risk reward based targets. 1 - Risk Reward, 2 - Fib Ratios
variableTargetRatios (array) : Risk reward or Fib Ratios to be used for calculation of targets when fixed target is not possible or not enabled
entryPivotForWm (series int) : which Pivot should be considered as entry point for WM patterns. 0 refers to the latest breakout pivot where as 5 refers to initial pivot of the pattern
ReversalChartPattern
Reversal Chart Pattern master type which holds the pattern components, drawings and trade details
Fields:
pivots (array type from Trendoscope/Zigzag/11) : Array of Zigzag Pivots forming the pattern
patternType (series int) : Defines the main type of pattern 1 - Double Tap, 1 - Triple Tap, 3 - Cup and Handle, 4 - Head and Shoulders, 5- W/M Patterns, 6 - Full Trend, 7 - Half Trend
patternColor (series color) : Color in which the pattern will be drawn on chart
properties (ReversalChartTradeProperties)
drawing (ReversalChartPatternDrawing) : ReversalChartPatternDrawing object which holds the drawing components
trade (Trade type from Trendoscope/TradeTracker/1) : TradeTracker.Trade object holding trade components
Market Structure - HH, HL, LH, LL with Trendlines & AlertsMarket Structure Script – HH, HL, LH, LL with Trendlines & Alerts
This Pine Script is designed to help identify key market structure patterns such as Higher Highs (HH), Higher Lows (HL), Lower Highs (LH), and Lower Lows (LL) on price charts. It also draws trendlines connecting the respective swing points and provides alerts when these important price patterns occur.
Key Features:
Swing High and Low Detection:
The script uses the ta.pivothigh and ta.pivotlow functions to identify significant swing highs and swing lows based on the pivot length (pivotLen). These points mark local peaks and troughs in the price action.
Dynamic Pivot Length:
The script adjusts the pivotLen (which defines the number of bars used to calculate swing points) based on the current timeframe of the chart. For example, for a 15-minute chart, it uses a pivot length of 5 bars, while for a daily chart, it uses 10 bars. This dynamic adjustment ensures that the script works across different timeframes.
Higher Highs (HH), Higher Lows (HL), Lower Highs (LH), Lower Lows (LL):
Higher High (HH): Identifies a price peak that is higher than the previous swing high, indicating an uptrend.
Higher Low (HL): Identifies a price trough that is higher than the previous swing low, supporting the idea of an ongoing uptrend.
Lower High (LH): Identifies a price peak that is lower than the previous swing high, suggesting a potential reversal or downtrend.
Lower Low (LL): Identifies a price trough that is lower than the previous swing low, indicating a downtrend.
Trendlines:
For each identified Higher High, Higher Low, Lower High, or Lower Low, the script automatically draws a trendline connecting the corresponding swing points. These trendlines provide a visual representation of the market’s price structure, showing support and resistance levels.
Labels:
The script places labels on the chart next to the respective swing points. These labels mark whether the point is a Higher High (HH), Higher Low (HL), Lower High (LH), or Lower Low (LL). This helps traders easily visualize the price pattern at a glance.
Alerts:
Alert conditions are set for when a Higher High (HH), Higher Low (HL), Lower High (LH), or Lower Low (LL) is detected. Users can set up alerts to be notified whenever one of these key market structure patterns forms. Alerts are an essential feature for traders who want to act quickly when important trend changes are happening.
TrendLibrary "Trend"
calculateSlopeTrend(source, length, thresholdMultiplier)
Parameters:
source (float)
length (int)
thresholdMultiplier (float)
Purpose:
The primary goal of this function is to determine the short-term trend direction of a given data series (like closing prices). It does this by calculating the slope of the data over a specified period and then comparing that slope against a dynamic threshold based on the data's recent volatility. It classifies the trend into one of three states: Upward, Downward, or Flat.
Parameters:
`source` (Type: `series float`): This is the input data series you want to analyze. It expects a series of floating-point numbers, typically price data like `close`, `open`, `hl2` (high+low)/2, etc.
`length` (Type: `int`): This integer defines the lookback period. The function will analyze the `source` data over the last `length` bars to calculate the slope and standard deviation.
`thresholdMultiplier` (Type: `float`, Default: `0.1`): This is a sensitivity factor. It's multiplied by the standard deviation to determine how steep the slope needs to be before it's considered a true upward or downward trend. A smaller value makes it more sensitive (detects trends earlier, potentially more false signals), while a larger value makes it less sensitive (requires a stronger move to confirm a trend).
Calculation Steps:
Linear Regression: It first calculates the value of a linear regression line fitted to the `source` data over the specified `length` (`ta.linreg(source, length, 0)`). Linear regression finds the "best fit" straight line through the data points.
Slope Calculation: It then determines the slope of this linear regression line. Since `ta.linreg` gives the *value* of the line on the current bar, the slope is calculated as the difference between the current bar's linear regression value (`linRegValue`) and the previous bar's value (`linRegValue `). A positive difference means an upward slope, negative means downward.
Volatility Measurement: It calculates the standard deviation (`ta.stdev(source, length)`) of the `source` data over the same `length`. Standard deviation is a measure of how spread out the data is, essentially quantifying its recent volatility.
Adaptive Threshold: An adaptive threshold (`threshold`) is calculated by multiplying the standard deviation (`stdDev`) by the `thresholdMultiplier`. This is crucial because it means the definition of a "flat" trend adapts to the market's volatility. In volatile times, the threshold will be wider, requiring a larger slope to signal a trend. In quiet times, the threshold will be narrower.
Trend Determination: Finally, it compares the calculated `slope` to the adaptive `threshold`:
If the `slope` is greater than the positive `threshold`, the trend is considered **Upward**, and the function returns `1`.
If the `slope` is less than the negative `threshold` (`-threshold`), the trend is considered **Downward**, and the function returns `-1`.
If the `slope` falls between `-threshold` and `+threshold` (inclusive of 0), the trend is considered **Flat**, and the function returns `0`.
Return Value:
The function returns an integer representing the determined trend direction:
`1`: Upward trend
`-1`: Downward trend
`0`: Flat trend
In essence, this library function provides a way to gauge trend direction using linear regression, but with a smart filter (the adaptive threshold) to avoid classifying minor noise or low-volatility periods as significant trends.
Future Trend Indicator (FTI)Future Trend Indicator (FTI)
The Future Trend Indicator (FTI) is a versatile and innovative tool designed to analyze market trends, smooth out noise, and provide a forward-looking forecast of potential price movements. Built with advanced features such as polynomial regression, EMA smoothing, confidence bands, and cross-validation metrics, this indicator offers a comprehensive approach for traders to gain insights into future price trends while maintaining realistic error margins.
Key Features:
Exponential Moving Average (EMA) Integration
The FTI incorporates a user-configurable EMA to smooth out short-term price fluctuations and highlight the overall market trend. This provides a stable and reliable reference for assessing price action.
Noise Reduction via Median Filter
To improve signal clarity, the source data is processed using a Median Filter, effectively reducing the impact of outliers and market noise. This ensures that the forecast focuses on meaningful price movements.
Polynomial Regression Forecast
A polynomial regression model is used to project future price movements based on historical data. This advanced statistical approach models potential non-linear trends, offering a sophisticated and adaptive forecast for the next specified period.
Confidence Bands for Forecast Accuracy
Upper and lower confidence bands are calculated using standard deviation, visually representing the potential error margin around the forecast. This feature provides traders with an understanding of the forecast's reliability and the expected price range.
Dynamic Visualization
The indicator uses visually appealing and intuitive plotting techniques:
A forecast line dynamically shifts based on polynomial regression and historical data.
Confidence bands are displayed with semi-transparent green (upper) and red (lower) shading for quick visual interpretation.
The EMA is displayed as a blue line for smooth trend observation.
Cross-Validation with RMSE (Root Mean Square Error)
The indicator includes an error metric to measure the accuracy of its forecast against actual future price movements. The RMSE is displayed as a yellow label on the chart, helping traders evaluate the forecast's historical precision.
Flexible Data Source
By default, the FTI uses hlc3 (the average of high, low, and close prices) as its source, providing a balanced view of market activity. Traders can easily customize this input to suit their preferences.
Forecast Customization
Users can configure the length of the forecast, moving average, and EMA to tailor the indicator to different trading styles and timeframes.
EMA Length
Purpose: Smoothens the price action to identify the primary trend.
Recommendation:
Short-term traders (scalping/day trading): Use a shorter EMA length (e.g., 10 or 20) to make the indicator more responsive to recent price movements.
Medium-term traders (swing trading): Use a moderate EMA length (e.g., 50) to capture broader trends while avoiding short-term noise.
Long-term traders (position trading): Use a longer EMA length (e.g., 100 or 200) to focus on the dominant trend over a longer period.
Default Value: 20
Moving Average Length
Purpose: Used in trend calculations to smooth out data further.
Recommendation:
Similar to the EMA, shorter lengths provide faster signals but are more sensitive to noise, while longer lengths offer smoother signals but may lag.
For crypto or forex (volatile markets): Start with 10 to 20.
For stocks or indices (less volatile): Use 20 to 50 for more stable trends.
Default Value: 10
Forecast Length
Purpose: Determines how many bars into the future the indicator projects.
Recommendation:
Short-term trading: Use a smaller forecast length (e.g., 50) to project near-term price movements.
Medium- to long-term trading: Use a higher value (e.g., 100 to 200) to focus on longer-term forecasts.
Keep in mind that longer forecasts tend to have greater uncertainty. Confidence bands (enabled in this script) will widen as the forecast length increases, reflecting higher error potential.
Default Value: 100
EMA 50 + 200 Trend Signal TableEMA 50 + 200 Trend Signal Table (ETT)
This indicator provides a multi-timeframe trend signal table based on the 50-period and 200-period Exponential Moving Averages (EMAs). It visually plots the EMA 50 and EMA 200 on the chart, along with a customizable, compact table that indicates the trend direction across multiple timeframes. This tool is useful for traders looking to quickly identify market trends and momentum on various timeframes.
How It Works
- EMA Trend Analysis: The script compares the EMA 50 and EMA 200 values to determine the trend. When EMA 50 is above EMA 200, the trend is considered Bullish; if EMA 50 is below EMA 200, the trend is Bearish. If EMA 200 data is unavailable (e.g., on very short timeframes), the trend status will display as Neutral.
- Multi-Timeframe Trend Signals: The table displays the trend signals across five user-defined timeframes, updating in real time. Each timeframe row shows either Bullish, Bearish, or Neutral, with colors customizable to your preference.
Features
- EMA 50 and EMA 200 Visualization: Plots EMA 50 and EMA 200 lines directly on the chart. Users can customize the color and line thickness for each EMA to fit their charting style.
- Trend Signal Table: A table positioned on the chart (with options for positioning in the corners) shows the trend direction for the selected timeframes.
Bullish Trend: Highlighted in green (default) with 50% opacity.
Bearish Trend: Highlighted in red (default) with 50% opacity.
Neutral Trend: Highlighted in gray (default) with 50% opacity.
- Customizable Table Appearance: Allows users to select the position of the table (top-right, top-left, bottom-right, or bottom-left) and choose between compact sizes (Extra Small, Small, Normal).
- Adjustable Colors: Users can specify custom colors for each trend status (Bullish, Bearish, Neutral) as well as for the text and table border colors.
Inputs and Customizations
- Timeframes: Choose up to five different timeframes for trend analysis.
- EMA Colors and Line Widths: Customize the color and line width of EMA 50 and EMA 200 plotted on the chart.
- Table Settings: Control the position, size, and color options of the trend signal table for improved visibility and integration with your chart layout.
Use Case This indicator is ideal for traders who employ a multi-timeframe approach to confirm trends and filter entries. By monitoring the relative positions of EMA 50 and EMA 200 across various timeframes, traders can get a quick snapshot of trend strength and direction, aiding in informed trading decisions.
TP RSITP RSI - Integrated Trend, Momentum, and Volatility Analyzer
The TP RSI indicator is an innovative 3-in-1 technical analysis tool that combines RSI, Bollinger Bands, and an EMA ribbon to provide traders with a comprehensive view of trend, momentum, and volatility in a single, easy-to-interpret visual display.
Why This Combination? This mashup addresses three critical aspects of market analysis simultaneously:
Trend identification and strength (EMA ribbon)
Momentum measurement (RSI)
Volatility assessment (Bollinger Bands)
By integrating these components, traders can make more informed decisions based on multiple factors without switching between different indicators.
How Components Work Together:
1. EMA Ribbon (Trend):
10 EMAs form 5 color-coded bands
Blue: Uptrend, Red: Downtrend
Provides a nuanced view of trend strength and potential reversals
2. RSI (Momentum):
Color-coded for quick interpretation
Blue: Upward momentum, Red: Downward momentum, White: Neutral
Position relative to the ribbon offers additional insight
3. Bollinger Bands (Volatility):
Applied to RSI for dynamic overbought/oversold levels
Narrow bands indicate low volatility, suggesting potential breakouts
Unique Aspects and Originality:
Synergistic visual cues: Color coordination between ribbon and RSI
Multi-factor confirmation: Requires alignment of trend, momentum, and volatility for strong signals
Volatility-adjusted momentum: RSI interpreted within the context of Bollinger Bands
How these components work together:
Buy Signal: Blue ribbon with blue RSI outside the ribbon.
Sell Signal: Red ribbon with red RSI outside the ribbon.
Neutral: White RSI or RSI inside the ribbon (not recommended for trading)
Increasing Momentum: RSI crossing above upper Bollinger Band (upward) or below lower Band (downward).
Trend Strength: RSI rejection by the ribbon, while all bands are colored along with the trend direction, identifies a strong trend.
abstractchartpatternsLibrary "abstractchartpatterns"
Library having abstract types and methods for chart pattern implementations
checkBarRatio(p1, p2, p3, properties)
checks if three zigzag pivot points are having uniform bar ratios
Parameters:
p1 (chart.point) : First pivot point
p2 (chart.point) : Second pivot point
p3 (chart.point) : Third pivot point
properties (ScanProperties)
Returns: true if points are having uniform bar ratio
getRatioDiff(p1, p2, p3)
gets ratio difference between 3 pivot combinations
Parameters:
p1 (chart.point)
p2 (chart.point)
p3 (chart.point)
Returns: returns the ratio difference between pivot2/pivot1 ratio and pivot3/pivot2 ratio
method inspect(points, stratingBar, endingBar, direction, ohlcArray)
Creates a trend line between 2 or 3 points and validates and selects best combination
Namespace types: chart.point
Parameters:
points (chart.point ) : Array of chart.point objects used for drawing trend line
stratingBar (int) : starting bar of the trend line
endingBar (int) : ending bar of the trend line
direction (float) : direction of the last pivot. Tells whether the line is joining upper pivots or the lower pivots
ohlcArray (OHLC type from Trendoscope/ohlc/1) : Array of OHLC values
Returns: boolean flag indicating if the trend line is valid and the trend line object as tuple
method draw(this)
draws pattern on the chart
Namespace types: Pattern
Parameters:
this (Pattern) : Pattern object that needs to be drawn
Returns: Current Pattern object
method erase(this)
erase the given pattern on the chart
Namespace types: Pattern
Parameters:
this (Pattern) : Pattern object that needs to be erased
Returns: Current Pattern object
method push(this, p, maxItems)
push Pattern object to the array by keeping maxItems limit
Namespace types: Pattern
Parameters:
this (Pattern ) : array of Pattern objects
p (Pattern) : Pattern object to be added to array
@oaram maxItems Max number of items the array can hold
maxItems (int)
Returns: Current Pattern array
method deepcopy(this)
Perform deep copy of a chart point array
Namespace types: chart.point
Parameters:
this (chart.point ) : array of chart.point objects
Returns: deep copy array
DrawingProperties
Object containing properties for pattern drawing
Fields:
patternLineWidth (series int) : Line width of the pattern trend lines
showZigzag (series bool) : show zigzag associated with pattern
zigzagLineWidth (series int) : line width of the zigzag lines. Used only when showZigzag is set to true
zigzagLineColor (series color) : color of the zigzag lines. Used only when showZigzag is set to true
showPatternLabel (series bool) : display pattern label containing the name
patternLabelSize (series string) : size of the pattern label. Used only when showPatternLabel is set to true
showPivotLabels (series bool) : Display pivot labels of the patterns marking 1-6
pivotLabelSize (series string) : size of the pivot label. Used only when showPivotLabels is set to true
pivotLabelColor (series color) : color of the pivot label outline. chart.bg_color or chart.fg_color are the appropriate values.
deleteOnPop (series bool) : delete the pattern when popping out from the array of Patterns.
Pattern
Object containing Individual Pattern data
Fields:
points (chart.point )
originalPoints (chart.point )
trendLine1 (Line type from Trendoscope/LineWrapper/1) : First trend line joining pivots 1, 3, 5
trendLine2 (Line type from Trendoscope/LineWrapper/1) : Second trend line joining pivots 2, 4 (, 6)
properties (DrawingProperties) : DrawingProperties Object carrying common properties
patternColor (series color) : Individual pattern color. Lines and labels will be using this color.
ratioDiff (series float) : Difference between trendLine1 and trendLine2 ratios
zigzagLine (series polyline) : Internal zigzag line drawing Object
pivotLabels (label ) : array containning Pivot labels
patternLabel (series label) : pattern label Object
patternType (series int) : integer representing the pattern type
patternName (series string) : Type of pattern in string
ScanProperties
Object containing properties for pattern scanning
Fields:
offset (series int) : Zigzag pivot offset. Set it to 1 for non repainting scan.
numberOfPivots (series int) : Number of pivots to be used in pattern search. Can be either 5 or 6
errorRatio (series float) : Error Threshold to be considered for comparing the slope of lines
flatRatio (series float) : Retracement ratio threshold used to determine if the lines are flat
checkBarRatio (series bool) : Also check bar ratio are within the limits while scanning the patterns
barRatioLimit (series float) : Bar ratio limit used for checking the bars. Used only when checkBarRatio is set to true
avoidOverlap (series bool) : avoid overlapping patterns.
allowedPatterns (bool ) : array of bool encoding the allowed pattern types.
allowedLastPivotDirections (int ) : array of int representing allowed last pivot direction for each pattern types
themeColors (color ) : color array of themes to be used.
Follow The Trend - The Lazy Indicator**Understanding the 'Follow The Trend - The Lazy Indicator'**
This indicator is designed to help traders visualize the trend direction over both short-term and long-term periods. Let's dive deeper into understanding how it's designed and how it can be beneficial.
**1. How It's Designed:**
* **User Inputs:**
The first few lines ask the user for specific inputs related to the Average True Range (ATR) length and values for both short-term and long-term trends. ATR is a volatility indicator and, in this context, is used as part of the SuperTrend calculation.
* **SuperTrend Calculations:**
This indicator uses the SuperTrend, a popular trend-following indicator. Here, two SuperTrends are being calculated – one for short-term trends and another for long-term trends. The direction of the SuperTrend is also determined, signaling whether the trend is upwards or downwards.
* **Visual Representations:**
* The short-term SuperTrend is represented using green lines (for uptrend) and red lines (for downtrend).
* The indicator also provides a "cloud" between a Simple Moving Average (SMA) of the closing price (over the past 10 periods) and the long-term SuperTrend. This cloud changes color based on the direction of the long-term trend, providing another visual cue about market direction.
* **Signal Evaluation:**
This part of the code interprets the combination of short-term and long-term trends and assigns trading signals like "Strong Buy," "Weak Buy," "Strong Sell," "Weak Sell," and so on. This can act as a guide for traders, suggesting potential trading actions based on the prevailing trends.
* **Signal Coloration:**
The indicator also assigns colors to each signal. For instance, "Strong Buy" is green, "Strong Sell" is red, and there are transparency adjustments for weak signals to differentiate them from strong ones.
* **Tabular Presentation:**
At the end of the script, there’s a table displayed on the chart, summarizing the direction of both the long-term and short-term trends, as well as the overall trading signal. It provides a quick snapshot for traders to understand the current market scenario.
**2. How It May Be Helpful:**
* **Simplicity:**
The "Follow The Trend" indicator, despite its underlying complexity, is presented in a very user-friendly way. By just looking at the color cues and the table, traders can quickly understand the market's trend and potential direction.
* **Dual Trend Analysis:**
By analyzing both short-term and long-term trends, traders get a comprehensive view. This helps in understanding if the market is just having a short-term retracement (temporary reverse in direction) or if there's a genuine change in the long-term trend.
* **Adaptability:**
Traders can adjust the ATR values and lengths to customize the sensitivity of the indicator. This means it can be adapted to different assets or varying market conditions.
* **Actionable Signals:**
The signals like "Strong Buy" or "Weak Sell" are direct suggestions that can help in decision-making. Especially for beginners or those who might be overwhelmed by complex charts, such signals can be very beneficial.
* **Visual Appeal:**
The combination of trend lines, cloud coloring, and tabulated information provides a visually pleasing and easy-to-understand representation of market data. This can help reduce analysis fatigue and make chart reading more enjoyable.
In conclusion, the "Follow The Trend - The Lazy Indicator" is designed to make trend-following more accessible and actionable. By providing clear visual cues and combining short-term and long-term trend analysis, it offers traders a tool that's both comprehensive and user-friendly. Whether you're a beginner looking for clear signals or an experienced trader wanting an overview of the market trend, this indicator might be a useful addition to your toolkit.
Recursive Micro Zigzag🎲 Overview
Zigzag is basic building block for any pattern recognition algorithm. This indicator is a research-oriented tool that combines the concepts of Micro Zigzag and Recursive Zigzag to facilitate a comprehensive analysis of price patterns. This indicator focuses on deriving zigzag on multiple levels in more efficient and enhanced manner in order to support enhanced pattern recognition.
The Recursive Micro Zigzag Indicator utilises the Micro Zigzag as the foundation and applies the Recursive Zigzag technique to derive higher-level zigzags. By integrating these techniques, this indicator enables researchers to analyse price patterns at multiple levels and gain a deeper understanding of market behaviour.
🎲 Concept:
Micro Zigzag Base : The indicator utilises the Micro Zigzag concept to capture detailed price movements within each candle. It allows for the visualisation of the sequential price action within the candle, aiding in pattern recognition at a micro level.
Basic implementation of micro zigzag can be found in this link - Micro-Zigzag
Recursive Zigzag Expansion : Building upon the Micro Zigzag base, the indicator applies the Recursive Zigzag concept to derive higher-level zigzags. Through recursive analysis of the Micro Zigzag's pivots, the indicator uncovers intricate patterns and trends that may not be evident in single-level zigzags.
Earlier implementations of recursive zigzag can be found here:
Recursive Zigzag
Recursive Zigzag - Trendoscope
And the libraries
rZigzag
ZigzagMethods
The major differences in this implementation are
Micro Zigzag Base - Earlier implementation made use of standard zigzag as base whereas this implementation uses Micro Zigzag as base
Not cap on Pivot depth - Earlier implementation was limited by the depth of level 0 zigzag. In this implementation, we are trying to build the recursive algorithm progressively so that there is no cap on the depth of level 0 zigzag. But, if we go for higher levels, there is chance of program timing out due to pine limitations.
These algorithms are useful in automatically spotting patterns on the chart including Harmonic Patterns, Chart Patterns, Elliot Waves and many more.
Chatterjee CorrelationThis is my first attempt on implementing a statistical method. This problem was given to me by @lejmer (who also helped me later on building more efficient code to achieve this) when we were debating on the need for higher resource allocation to run scripts so it can run longer and faster. The major problem faced by those who want to implement statistics based methods is that they run out of processing time or need to limit the data samples. My point was that such things need be implemented with an algorithm which suits pine instead of trying to port a python code directly. And yes, I am able to demonstrate that by using this implementation of Chatterjee Correlation.
🎲 What is Chatterjee Correlation?
The Chatterjee rank Correlation Coefficient (CCC) is a method developed by Sourav Chatterjee which can be used to study non linear correlation between two series.
Full documentation on the method can be found here:
arxiv.org
In short, the formula which we are implementing here is:
Algorithm can be simplified as follows:
1. Get the ranks of X
2. Get the ranks of Y
3. Sort ranks of Y in the order of X (Lets call this SortedYIndices)
4. Calculate the sum of adjacent Y ranks in SortedYIndices (Lets call it as SumOfAdjacentSortedIndices)
5. And finally the correlation coefficient can be calculated by using simple formula
CCC = 1 - (3*SumOfAdjacentSortedIndices)/(n^2 - 1)
🎲 Looks simple? What is the catch?
Mistake many people do here is that they think in Python/Java/C etc while coding in Pine. This makes code less efficient if it involves arrays and loops. And the simple code may look something like this.
var xArray = array.new()
var yArray = array.new()
array.push(xArray, x)
array.push(yArray, y)
sortX = array.sort_indices(xArray)
sortY = array.sort_indices(yArray)
SumOfAdjacentSortedIndices = 0.0
index = array.get(xSortIndices, 0)
for i=1 to n > 1? n -1 : na
indexNext = array.get(sortX, i)
SumOfAdjacentSortedIndices += math.abs(array.get(sortY, indexNext)-array.get(sortY, index))
index := indexNext
correlation := 1 - 3*SumOfAdjacentSortedIndices/(math.pow(n,2)-1)
But, problem here is the number of loops run. Remember pine executes the code on every bar. There are loops run in array.sort_indices and another loop we are running to calculate SumOfAdjacentSortedIndices. Due to this, chances of program throwing runtime errors due to script running for too long are pretty high. This limits greatly the number of samples against which we can run the study. The options to overcome are
Limit the sample size and calculate only between certain bars - this is not ideal as smaller sets are more likely to yield false or inconsistent results.
Start thinking in pine instead of python and code in such a way that it is optimised for pine. - This is exactly what we have done in the published code.
🎲 How to think in Pine?
In order to think in pine, you should try to eliminate the loops as much as possible. Specially on the data which is continuously growing.
My first thought was that sorting takes lots of time and need to find a better way to sort series - specially when it is a growing data set. Hence, I came up with this library which implements Binary Insertion Sort.
Replacing array.sort_indices with binary insertion sort will greatly reduce the number of loops run on each bar. In binary insertion sort, the array will remain sorted and any item we add, it will keep adding it in the existing sort order so that there is no need to run separate sort. This allows us to work with bigger data sets and can utilise full 20,000 bars for calculation instead of few 100s.
However, last loop where we calculate SumOfAdjacentSortedIndices is not replaceable easily. Hence, we only limit these iterations to certain bars (Even though we use complete sample size). Plots are made for only those bars where the results need to be printed.
🎲 Implementation
Current implementation is limited to few combinations of x and fixed y. But, will be converting this into library soon - which means, programmers can plug any x and y and get the correlation.
Our X here can be
Average volume
ATR
And our Y is distance of price from moving average - which identifies trend.
Thus, the indicator here helps to understand the correlation coefficient between volume and trend OR volatility and trend for given ticker and timeframe. Value closer to 1 means highly correlated and value closer to 0 means least correlated. Please note that this method will not tell how these values are correlated. That is, we will not be able to know if higher volume leads to higher trend or lower trend. But, we can say whether volume impacts trend or not.
Please note that values can differ by great extent for different timeframes. For example, if you look at 1D timeframe, you may get higher value of correlation coefficient whereas lower value for 1m timeframe. This means, volume to trend correlation is higher in 1D timeframe and lower in lower timeframes.
Wolfe Scanner (Multi - zigzag) [HeWhoMustNotBeNamed]Before getting into the script, I would like to explain bit of history around this project. Wolfe was in the back of my mind for some time and I had several attempts so far.
🎯Initial Attempt
When I first developed harmonic patterns, I got many requests from users to develop script to automatically detect Wolfe formation. I thought it would be easy and started boasting everywhere that I am going to attempt this next. However I miserably failed that time and started realising it is not as simple as I thought it would be. I started with Wolfe in mind. But, ran into issues with loops. Soon figured out that finding and drawing wedge is more trickier. I decided will explore trendline first so that it can help find wedge better. Soon, the project turned into something else and resulted in Auto-TrendLines-HeWhoMustNotBeNamed and Wolfe left forgotten.
🎯Using predefined ratios
Wolfe also has predefined fib ratios which we can use to calculate the formation. But, upon initial development, it did not convince me that it matches visual inspection of Wolfe all the time. Hence, I decided to fall back on finding wedge first.
🎯 Further exploration in finding wedge
This attempt was not too bad. I did not try to jump into Wolfe and nor I bragged anywhere about attempting anything of this sort. My target this time was to find how to derive wedge. I knew then that if I manage to calculate wedge in efficient way, it can help further in finding Wolfe. While doing that, ended up deriving Wedge-and-Flag-Finder-Multi-zigzag - which is not a bad outcome. I got few reminders on Wolfe after this both in comments and in PM.
🎯You never fail until you stop trying!!
After 2 back to back hectic 50hr work weeks + other commitments, I thought I will spend some time on this. Took less than half weekend and here we are. I was surprised how much little time it took in this attempt. But, the plan was running in my subconscious for several weeks or even months. Last two days were just putting these plans into an action.
Now, let's discuss about the script.
🎲 Wolfe Concept
Wolfe concept is simple. Whenever a wedge is formed, draw a line joining pivot 1 and 4 as shown in the chart below:
Converging trendline forms the stop loss whereas line joining pivots 1 and 4 form the profit taking points.
🎲 Settings
Settings are pretty straightforward. Explained in the chart below.
Strategy Template - V2This is an educational script created to demonstrate few basic building blocks of a trend based strategy and how to achieve different entry and exit types. My initial intention was to create a comprehensive strategy template which covers all the aspects of strategy. But, ended up creating fully fledged strategy based on trend following.
This is an enhancement on Strategy-Template But this script is comparitively more complex. Hence I decided to create new version instead of updating the existing one.
Lets dive deep.
SIMPLE COMPONENTS OF TREND FOLLOWING STRATEGY
TREND BIAS - This defines the direction of trend. Idea is not to trade against the trend direction. If the bias is bullish, look for long opportunities and if bias is bearish, look for short opportunities. Stay out of the market when the bias is neutral.
Often, trend bias is determined based on longer timeframe conditions. Example - 200 Moving Average, Higher timeframe moving averages, Higher timeframe high-lows etc. can be used for determining the trend bias.
In this script, I am using Weekly donchian channels combined with daily donchian channels to define trend bias.
Long Bias - 40 Day donchian channel sits completely in upper portion of 40 Week dochnial channel.
Short Bias - 40 Day donchian channel sits completely in lower portion of 40 Week donchian channel.
ENTRY CONDITION - Entry signals are generated only in the direction of bias. Hence, when in LongBias, we only get Long signals and when in short bias, we only get short signals.
In our case, when in Long Bias - if price hits 40 day high for the first time, this creates our long entry signal. Similarly when in Short Bias , price hitting 40 day low will create signal for going short. Since we do not take trades opposite to trend, no entry conditions are formed when price hits 40 day high in Short Bias or 40 day low in Long Bias.
EXIT CONDITION - Exit conditions are formed when we get signals of trend failure.
In our case, when in long trade, price hitting 40 day low creates exit signal. Similarly when in short trade price hitting 40 day high creates exit signal for short trade.
DIFFERENT TYPES OF ENTRY AND EXIT
In this script, I have tried to demonstrate different entry and exit types.
Entry types
Market - Enter immediately when entry signal is received. That is, in this case when price crossover over high in long bias and crosses under low in short bias
Stop - This method includes estimating at what level new highs are made and creating a stop buy order at that level. This way, we do not miss if the break out is stronger. But, susciptible to fail during fakeouts.
Limit - This method includes executing a limit order to buy at lower price or sell at higher price. In trend following methods, downside of limit order is when there is genuine breakout, these limit orders may not hit and during trend failures the limit orders are likely to hit and go straight to stop.
Stop-Limit - this is same as stop order but will also place a limit condition to avoid buying on overextended breakout or with lots of slippage.
Exit types
Market - whether to keep the existing trade running or whether to close it is determined after close of each bar and exit orders are executed manually upon receiving exit signal.
Stop - We place stop loss orders beforehand when there is a trade in place. This can help in avoiding big movements against trade within bar. But, this may also stop on false signals or fakeouts.
Take profit
Stop - No take profits are configured.
Target - 30% of the positions are closed when take profit levels are hit. Take profit levels are defined by risk reward.
USING THE CODE AS TEMPLATE
As mentioned earlier, I intended to create a fully fledged strategy template. But, ended up creating a fully fledged stratgy. However, you can take some part of this code and use it to start your own strategy. Will explain what all things can be adopted without worrying about the strategy implementation within
Strategy definition : This can be copied as is and just change the title of strategy. This defines some of the commonly used parameters of strategy which can help with close to realistic backtesting results for your coded strategy and comparison with buy and hold.
Generic Strategy Parameters : The parameter which defines controlling alllowed trade direction and trading window are present here. This again can be copied as is and variable inDateRange can be directly used in entry conditions.
Generic Methods : f_getMovingAverage and f_secureSecurity are handy and can be used as is. atr method provideded by pine gives you ATR based on RMA. If you want SMA or any other moving average based ATR, you can use the method f_getCustomAtr
Trade Statements : This section has all types of trading instructions which includes market/stop/limit/stop-limit type of entries and exits and take profit statements. You can adopt the type of entry you are interested in and change when condition to suit your strategy.
Trade conditions and levels : This section is required. But, cannot be copied. All the trade logic goes here which also sets parameters which are used in when of Trade Statements.
Hope this helps.
TrendMaAlignmentStrategy - Long term tradesThis is another strategy based on moving average alignment and HighLow periods. This is more suitable for long term trend traders and mainly for stocks.
Candle is colored lime if : Lookback Period has at least one bar with moving averages fully aligned OR None of the bars in Lookback periods has negatively aligned moving averages (More than half are positively aligned).
Candle is colored orange if : Lookback Period has at least one bar with moving averages fully aligned in negative way OR none of the bars in lookback has positively aligned moving averages (More than half are negatively aligned).
If either of above conditions are met, candle is colored silver.
Moving average alignment parameters:
Moving Average Type : MA Type for calculating Aligned Moving Average Index
Lookback Period : Lookback period to check highest and lowest Moving Average index.
HighLow parameters:
Short High/Low Period: Short period to check highs and lows
Long High/Low Period: Longer Period to check highs and lows.
If short period high == long period high, which means, instrument has made new high in the short period.
ATR Parameters:
ATR Length: ATR periods
StopMultiplyer: To set stop loss.
ReentryStopMultiplyer: This is used when signal is green buy stop loss on previous trade is hit. In such cases, new order will not be placed until it has certain distance from stop line.
Trade Prameters:
Exit on Signal : To be used with caution. Enabling it will allow us to get out on bad trades early and helps exit trades in long consolidation periods. But, this may also cause early exit in the trend. If instrument is trending nicely, it is better to keep this setting unchecked.
Trade direction : Default is long only. Short trades are not so successful in backtest. Use it with caution.
Backtest years : limit backtesting to certain years.
Part of the logic used from study's below:
Other strategies based on these two studies are below (which are meant for short - medium terms):
Quantum TrendsOne of the oldest maxims in trading is ‘let the trend be your friend’. You must have come across it. This is easier said than done. First, you have to identify one, then you have to stay in – not easy. Staying in a trend to maximise your profits is extremely difficult. In addition, how do you know when a trend has started?
It’s very easy to look back and identify the trend. Not so easy at the live edge of the market.
The Quantum Trends indicator is the ‘sister’ indicator of the Quantum Trend Monitor. Together they go hand in hand to keep you in and surfing the trend. The Quantum Trends catches the shorter term trend, the Quantum Trend Monitor keeps you in for the longer term. A match made in heaven.
The Quantum Trends indicator paints a series of dots on the price chart as follows:
Bullish trend – blue
Bearish trend – red
Congestion – grey
Once a new trend starts, the dots change colour dynamically, from blue to red or grey.
Contrary to what you may have read, currency markets spend more time in congestion, than they do trending. Congestion phases are the most important aspect of price action. This is where trends pause, die or are reborn.
Now, you no longer need to guess if a new trend is starting. The Quantum Trends indicator will tell you, simply and clearly. When combined with the Quantum Trend Monitor, and trading in multiple timeframes, you will never again suffer from emotional trading decisions. Your trading account will grow, as will your confidence.
And of course, as with all Quantum indicators, there is always more. Again, the Quantum Trends indicator can be fine-tuned to match your own trading style. No two traders are the same. No two trading styles are the same. Strange then, most indicators are designed on the ‘one size fits all’ principle. Not with Quantum Trading.
The Quantum Trends indicator can be fine-tuned, giving you the right tools for the right job. If you prefer scalping, simply adjust the settings accordingly and increase the sensitivity. A precision tool for precision trading. If your approach is longer term, perhaps swing or trend trading, simply adjust the control and decrease the sensitivity. It ’s like the thermostat on your boiler. Choose your strategy, adjust your indicator, and watch your profits increase.
The Quantum Trends indicator works in all timeframes.
[blackcat] L3 Trend BoxOVERVIEW
The L3 Trend Box indicator is a sophisticated technical analysis tool designed to assist traders in identifying trends and pinpointing potential entry and exit points within the market. By leveraging multiple moving averages and price level analyses, this indicator provides a detailed view of market dynamics. It plots several key lines and labels directly onto the chart, offering clear visual signals for both bullish and bearish scenarios. Its adaptability through customizable parameters makes it suitable for various trading strategies and market conditions 📊✅.
FEATURES
Comprehensive Parameter Customization: Tailor the indicator to match specific trading preferences:
High Length: Defines the period over which the highest prices are considered.
Low Length: Specifies the period for evaluating the lowest prices.
Upper Box Length: Smoothes out the upper boundary of the trend box using a specified period.
Lower Box Length: Smoothes out the lower boundary of the trend box similarly.
Trend Line Length: Determines the period for calculating the overall trend line.
Fast EMA Length: Sets the period for the fast-moving exponential moving average (EMA), crucial for capturing short-term movements.
MA15 EMA Length: Configures the period for the medium-term moving average (MA15 EMA) to provide a balanced perspective.
Short Spirit Length: Influences how quickly the indicator responds to recent price changes.
Golden EMA Length: Fine-tunes the long-term EMA for stability and reliability.
Buy Price Length: Establishes the lookback period for determining optimal buy prices.
Var1 Length & Var2 Length: Adjusts periods for variance calculations, enhancing the accuracy of trend detection.
Detailed Chart Plots:
Upper Box Top: A fuchsia-colored line representing the smoothed highest prices, marking resistance levels.
Lower Box Bottom: A green-colored line showing the smoothed lowest prices, highlighting support zones.
MA15 Up/Down: Dynamic red and green lines illustrating the directionality of the 15-period EMA, helping gauge momentum shifts.
Conditional Plots: Multiple lines based on intricate price actions and computed values, such as closing below the lower box while also closing at or above/below the opening price, ensuring nuanced insights into market behavior.
Buy/Sell Labels: Clearly marked 'Buy' and 'Sell' labels positioned strategically on the chart, facilitating quick decision-making without missing critical signals 🎯.
Alert System: Automatically generates alerts based on predefined buy and sell conditions, enabling timely responses to market changes 🛎️.
HOW TO USE
Adding the Indicator: Start by adding the L3 Trend Box to your TradingView chart via the indicators menu.
Parameter Configuration: Adjust each parameter according to your trading style and market volatility. For instance, increasing the High Length can make the indicator less sensitive to minor fluctuations but more responsive to significant trends.
Monitoring Signals: Keep an eye on the plotted lines and labels. Pay special attention to the crossover events between the fast EMA and the lower box bottom, as these often signify strong buy signals.
Setting Alerts: Configure alerts based on the buy/sell conditions provided by the indicator. This ensures you never miss an opportunity due to inattention.
Combining Strategies: While powerful on its own, combining this indicator with others like RSI or Bollinger Bands can enhance its predictive power and reduce false positives.
LIMITATIONS
Market Volatility: In extremely volatile or sideways-trending markets, the indicator might produce false signals. Always verify with additional confirmations.
Asset-Specific Performance: Different assets and timeframes will yield varying results; thorough backtesting across diverse instruments is recommended.
Over-Reliance Risk: Avoid relying solely on this indicator. Integrate it into a broader analytical framework that includes fundamental analysis and other technical indicators.
NOTES
Data Sufficiency: Ensure ample historical data is available for precise computations. Lack of data can skew results and lead to inaccurate signals.
Demo Testing: Before deploying the indicator in real trades, rigorously test it on demo accounts under varied market conditions to understand its strengths and weaknesses.
Customization Flexibility: Feel free to tweak the parameters continuously until they align perfectly with your unique trading approach and risk tolerance.
Multi-Timeframe Trend Table📊 Multi-Timeframe Trend Table
Overview
This powerful trend-tracking tool gives you a real-time snapshot of market trends across multiple timeframes — all in one compact and color-coded table. Designed for traders who want fast, clean, and multi-timeframe awareness at a glance.
⸻
✅ Features
• 7 Key Timeframes Monitored:
2min · 5min · 15min · 1h · 4h · 1d · 1w
• Trend Detection Based on EMAs
Uses a fast (default 20) and slow (default 200) EMA to determine if a timeframe is trending:
• 🟢 Uptrend: Fast EMA is above slow EMA
• 🔴 Downtrend: Slow EMA is above fast EMA
• 🟠 Sideways: EMAs are close (configurable threshold)
• Raw EMA Distance
See the actual difference between fast and slow EMAs for each timeframe — great for gauging trend strength.
• EMA Slope Analysis
A unique “Slope” column tells you the current behavior of EMAs:
• 📈 Pointing Up
• 📉 Pointing Down
• 🔄 Crossing Up/Down
• ➡️ Lateral
• Instant Alerts
Alerts fire the moment a trend flips on any timeframe, keeping you ahead of market shifts.
• Optional Chart EMAs
Toggle on/off the fast and slow EMAs on your active chart for extra clarity.
⸻
🧠 Use Case Examples
• Confirm trades with alignment across multiple timeframes
• Spot early trend reversals with crossing behavior
• Add a higher-timeframe filter to your scalping system
• Monitor key EMAs without changing your chart timeframe
⸻
⚙️ Configuration
• EMA lengths and sideways threshold are fully adjustable
• Enable/disable chart overlays for EMAs
• Table dynamically updates in real time
⸻
💡 Pro Tip: Use this indicator alongside your entry strategy to only trade in the direction of the dominant trends.
⸻
projectiontrackingLibrary "projectiontracking"
Library contains few data structures and methods for tracking harmonic patterns and projections via pinescript.
method erase(this)
erase Harmonic Projection Drawing
Namespace types: HarmonicProjectionDrawing
Parameters:
this (HarmonicProjectionDrawing) : HarmonicProjectionDrawing object
Returns: void
method erase(this)
erase HarmonicProjection
Namespace types: HarmonicProjection
Parameters:
this (HarmonicProjection) : HarmonicProjection object
Returns: void
method draw(this)
draw HarmonicProjection
Namespace types: HarmonicProjection
Parameters:
this (HarmonicProjection) : HarmonicProjection object
Returns: HarmonicProjection object
method getRanges(projectionPrzRanges, dir)
Convert PRZRange to Projection ranges
Namespace types: array
Parameters:
projectionPrzRanges (array type from Trendoscope/HarmonicMapLib/1) : array of PrzRange objects
dir (int) : Projection direction
Returns: array
ProjectionRange
Harmonic Projection Range
Fields:
patterns (array) : array of pattern names
start (series float) : Start Range
end (series float) : End Range
status (series int) : Projection Status
ProjectionProperties
Harmonic Projection Properties
Fields:
fillMajorTriangles (series bool) : Use linefill for major triangles
fillMinorTriangles (series bool) : Use linefill for minor triangles
majorFillTransparency (series int) : transparency of major triangles
minorFillTransparency (series int) : transparency of minor triangles
showXABC (series bool) : Show XABC labels
lblSizePivots (series string) : Pivot labels size
showRatios (series bool) : Show ratio labels
useLogScaleForScan (series bool) : Log scale is used for scanning projections
activateOnB (series bool) : Activate projections on reaching B
activationRatio (series float) : Use activation ratio for activation
confirmationRatio (series float) : Confirmation ratio of projection before removal
HarmonicProjectionDrawing
Harmonic Projection Projection drawing objects
Fields:
xa (series line) : line xa
ab (series line) : line ab
bc (series line) : line bc
xb (series line) : line xb
ac (series line) : line ac
x (series label) : Pivot label x
a (series label) : Pivot label a
b (series label) : Pivot label b
c (series label) : Pivot label c
xabRatio (series label) : Label XAB Ratio
abcRatio (series label) : Label ABC Ratio
HarmonicProjection
Harmonic Projection Projection object
Fields:
patternId (series int) : id of the pattern
dir (series int) : projection direction
x (chart.point) : Pivot X
a (chart.point) : Pivot A
b (chart.point) : Pivot B
c (chart.point) : Pivot C
patternColor (series color) : Color in which pattern is displayed
przRange (PrzRange type from Trendoscope/HarmonicMapLib/1) : PRZ Range
activationPrice (series float) : Projection activation price
reversalPrice (series float) : Projection reversal price
status (series int) : Projection status
properties (ProjectionProperties) : Projection properties
projectionRanges (array) : array of Projection Ranges
initialD (series float) : Initial D pivot
d (chart.point) : Pivot D
drawing (HarmonicProjectionDrawing) : HarmonicProjectionDrawing Object
ACCURATE TREND LEVELS - TABLE PSv6.1Accurate Trend Level Indicator
Description:
The "Accurate Trend Level" indicator is a powerful tool designed to identify market trends and potential reversals with precision. Built on the concept (foundation) of Swing Highs and Swing Lows, this indicator easily detects uptrends and downtrends, providing traders with clear signals for trend continuation or reversal. Whether you are a swing trader or a trend follower, this indicator offers customization options to suit your trading style.
Key Features:
Trend Identification: Accurately identifies uptrends and downtrends based on Swing High and Swing Low points. This indicator provides signals for Up after Down and Down after Up.
Percentage Adjustment: Includes a customizable percentage factor that reduces false signals and helps identify accurate and strong trends.
Trend Table: Displays essential data in a table, such as:
Last and running Trend Position (Uptrend/Downtrend)
Date and Time of the last and running trend change
Reversal Level (price level for the next potential trend change)
Max. Run-up feature is also provided, which shows how much the market has moved according to the trend.
How It Works:
The indicator analyzes price action using Swing Highs and Lows to determine the current trend direction. A user-defined percentage threshold filters out minor fluctuations, ensuring only significant trends are highlighted. The table provides a quick snapshot of the latest trend data, while reversal levels help traders anticipate the next move.
Future Trend Indicator (FTI) with Heiken AshiDescription: Future Trend Indicator (FTI)
The Future Trend Indicator (FTI) is a versatile and innovative tool designed to analyze market trends, smooth out noise, and provide a forward-looking forecast of potential price movements. Built with advanced features such as polynomial regression, EMA smoothing, confidence bands, and cross-validation metrics, this indicator offers a comprehensive approach for traders to gain insights into future price trends while maintaining realistic error margins.
Key Features:
Exponential Moving Average (EMA) Integration
The FTI incorporates a user-configurable EMA to smooth out short-term price fluctuations and highlight the overall market trend. This provides a stable and reliable reference for assessing price action.
Noise Reduction via Median Filter
To improve signal clarity, the source data is processed using a Median Filter, effectively reducing the impact of outliers and market noise. This ensures that the forecast focuses on meaningful price movements.
Polynomial Regression Forecast
A polynomial regression model is used to project future price movements based on historical data. This advanced statistical approach models potential non-linear trends, offering a sophisticated and adaptive forecast for the next specified period.
Confidence Bands for Forecast Accuracy
Upper and lower confidence bands are calculated using standard deviation, visually representing the potential error margin around the forecast. This feature provides traders with an understanding of the forecast's reliability and the expected price range.
Dynamic Visualization
The indicator uses visually appealing and intuitive plotting techniques:
A forecast line dynamically shifts based on polynomial regression and historical data.
Confidence bands are displayed with semi-transparent green (upper) and red (lower) shading for quick visual interpretation.
The EMA is displayed as a blue line for smooth trend observation.
Cross-Validation with RMSE (Root Mean Square Error)
The indicator includes an error metric to measure the accuracy of its forecast against actual future price movements. The RMSE is displayed as a yellow label on the chart, helping traders evaluate the forecast's historical precision.
Flexible Data Source
By default, the FTI uses hlc3 (the average of high, low, and close prices) as its source, providing a balanced view of market activity. Traders can easily customize this input to suit their preferences.
Forecast Customization
Users can configure the length of the forecast, moving average, and EMA to tailor the indicator to different trading styles and timeframes.
Short-Term Traders (Scalping/Day Trading)
EMA Length: 10
Moving Average Length: 5 to 10
Forecast Length: 50
Source: hlc3 (default)
Adjust noise filter (src_filtered) only if necessary.
Medium-Term Traders (Swing Trading)
EMA Length: 20
Moving Average Length: 10 to 20
Forecast Length: 100
Source: hlc3 (default)
Confidence bands can help manage risk for swing trades.
Long-Term Traders (Position Trading)
EMA Length: 50 to 200
Moving Average Length: 20 to 50
Forecast Length: 200
Source: hlc3 or ohlc4 for smoothing.
General Adjustments for Specific Markets:
Crypto (Highly Volatile)
EMA Length: 10 to 20
Moving Average Length: 10
Forecast Length: 50 to 100
Median filter length: 5
Forex (Moderately Volatile)
EMA Length: 20 to 50
Moving Average Length: 20
Forecast Length: 100
Median filter length: 5
Stocks/Indices (Less Volatile)
EMA Length: 50
Moving Average Length: 20
Forecast Length: 100 to 200
Median filter length: 5