1-3-1 Strat Combo with 50% Level (12h)Logic Explanation
1-3-1 Combo Detection:
The script detects the 1-3-1 pattern using the previous 3 candles:
Candle 4: Inside Bar (Type 1).
Candle 3: Outside Bar (Type 3).
Candle 2: Inside Bar (Type 1).
4th Candle Behavior:
If the 4th candle (current bar):
Stays an inside bar (Type 1) → isFourthInsideBar is true.
Becomes a directional bar (Type 2) → isFourthDirectional is true.
If either of these conditions is true, the script stops calculating and waits for the next valid 1-3-1 setup.
50% Level Calculation:
If the conditions are not met (e.g., the 4th candle doesn’t stop the pattern), the script:
Plots a dotted line at the 50% level of the 3rd candle.
Adds a label showing the 50% level.
Stop Calculations:
No line, box, or label is drawn if the 4th candle is a Type 1 (inside bar) or Type 2 (directional bar).
Visual Outputs:
Dotted Box: Marks the 1-3-1 combo setup.
50% Line: Drawn only if the 4th candle does not invalidate the pattern.
Label: Displays the 50% level of the 3rd candle.
How to Use:
Apply this script on the 12-hour chart.
The script will:
Detect valid 1-3-1 patterns.
Stop drawing any calculations if the 4th candle is an inside bar (1) or a directional bar (2).
Wait for the next valid 1-3-1 combo.
Cari dalam skrip untuk "bar"
Advanced Pattern Detector**Script Overview**
**Indicator Name:** Advanced Pattern Detector
**Pine Script Version:** v5
**Indicator Type:** Overlaid on the chart (overlay=true)
**Main Features:**
- Detection and visualization of various technical patterns.
- Generation of BUY and SELL signals based on detected patterns.
- Display of Fibonacci levels to identify potential support and resistance levels.
- Ability to enable or disable each pattern through the indicator settings.
---
**Indicator Settings**
**Switches to Enable/Disable Patterns**
At the top of the indicator, there are parameters that allow the user to select which patterns will be displayed on the chart:
- Three Drives
- Rounding Top
- Rounding Bottom
- ZigZag Pattern
- Inverse Head and Shoulders
- Fibonacci Retracement
**Parameters for ZigZag**
Settings are also available for the ZigZag pattern, such as the depth of peak and trough detection, allowing the user to adjust the indicator's sensitivity to price changes.
---
**Pattern Detection**
Each pattern is implemented with its own logic, which checks specific conditions on the current bar (candle). Below are the main patterns:
1. **Three Drives**
- **Description:** This pattern consists of three consecutive price movements in one direction (up or down). It can signal the continuation of the current trend or its reversal.
- **How It Works:**
- **Upward Drive:** The indicator checks that the closing price of each subsequent candle is higher than the previous one for three bars.
- **Downward Drive:** The indicator checks that the closing price of each subsequent candle is lower than the previous one for three bars.
2. **Rounding Top**
- **Description:** A pattern representing a smooth decrease in maximum prices over several bars, which may indicate a potential downward trend reversal.
- **How It Works:**
- The indicator checks that the maximum prices of the last five bars are gradually decreasing, and the current bar shows a decrease in the maximum price.
3. **Rounding Bottom**
- **Description:** A pattern characterized by a smooth increase in minimum prices over several bars, signaling a possible upward trend reversal.
- **How It Works:**
- The indicator checks that the minimum prices of the last five bars are gradually increasing, and the current bar shows an increase in the minimum price.
4. **ZigZag Pattern**
- **Description:** Used to identify corrective movements on the chart. The pattern shows peak and trough points connected by lines, helping to visualize the main price movement.
- **How It Works:**
- The indicator uses a function to determine local maxima and minima based on the specified depth.
- Detected peaks and troughs are connected by lines to create a visual zigzag structure.
5. **Inverse Head and Shoulders**
- **Description:** An inverted head and shoulders formation signals a possible reversal of a downward trend to an upward one.
- **How It Works:**
- The indicator looks for three local minima: the left shoulder, the head (the lowest minimum), and the right shoulder.
- It checks that the left and right shoulders are approximately at the same level and below the head.
6. **Fibonacci Retracement Levels**
- **Description:** Automatically builds key Fibonacci levels based on the maximum and minimum prices over the last 50 bars. These levels are often used as potential support and resistance levels.
- **How It Works:**
- Daily, the minimum and maximum prices over the last 50 bars are calculated.
- Based on these values, Fibonacci levels are drawn: 100%, 23.6%, 38.2%, 50%, 61.8%, and 0%.
- Old levels are removed when a new day begins to keep the chart clean and up-to-date.
---
**Generation of Buy and Sell Signals**
The indicator combines the results of detected patterns to generate trading signals:
- **Buy Signals (BUY):**
- Rounding Bottom
- Three Drives Up
- Inverse Head and Shoulders
- ZigZag Low
- **Sell Signals (SELL):**
- Rounding Top
- Three Drives Down
- Inverse Head and Shoulders
- ZigZag High
**How It Works:**
- If one or more buy conditions are met, a "BUY" label is displayed below the corresponding bar on the chart.
- If one or more sell conditions are met, a "SELL" label is displayed above the corresponding bar on the chart.
---
**Visualization of Patterns on the Chart**
Each detected pattern is visualized using various graphical elements, allowing traders to easily identify them on the chart:
- **Three Drives Up:** Green upward triangle below the bar.
- **Three Drives Down:** Red downward triangle above the bar.
- **Rounding Top:** Orange "RT" label above the bar.
- **Rounding Bottom:** Blue "RB" label below the bar.
- **Inverse Head and Shoulders:** Turquoise "iH&S" label below the bar.
- **ZigZag High/Low:** Purple circles at the peaks and troughs of the zigzag.
---
**Displaying Fibonacci Levels**
Fibonacci levels are displayed as horizontal lines on the chart with corresponding labels. These levels help traders determine potential entry and exit points, as well as support and resistance levels.
---
**Drawing ZigZag Lines**
ZigZag lines connect the detected peaks and troughs, visualizing corrective movements. To avoid cluttering the chart, the number of lines is limited, and old lines are automatically removed as new ones are added.
B-Xtrender By Neal inspired from @PuppytherapyThanks to @puppytherapy for creating the original B-Xtrender indicator, available at this link: B-Xtrender by @QuantTherapy
I played around the code to have entry and exit condition. The B-Xtrender @QuantTherapy
indicator is a momentum-based tool designed to help traders identify potential trade opportunities by tracking shifts in market momentum. Using a smoothed momentum oscillator, it detects changes in trend direction and provides clear signals for entry and exit points.
Features
Momentum Detection:
Tracks market momentum using the BX-Trender Oscillator.
Green bars indicate bullish momentum, while red bars indicate bearish momentum.
Lighter shades of green/red reflect weakening momentum.
Entry and Exit Signals:
Entry Condition: A long trade is triggered when the oscillator changes from red to green .
Exit Condition: A long trade exit is triggered when the oscillator changes from green to red .
Dynamic PnL Calculation:
Automatically calculates profit or loss in percentage (%) when a trade is exited.
Positive PnL values are prefixed with `+`, and negative values are shown as `-`.
Clear Visualization:
Bar chart-style oscillator in a separate pane for better trend visualization.
Trade labels on the main price chart for clear entry and exit points.
Inputs
Short-Term Momentum Parameters:
Short - L1: Length of the first EMA for short-term momentum calculations.
Short - L2: Length of the second EMA for short-term momentum calculations.
Short - L3: RSI smoothing period applied to the short-term momentum.
Long-Term Momentum Parameters:
Long - L1: Length of the EMA for long-term momentum calculations.
Long - L2: RSI smoothing period applied to the long-term momentum.
Entry and Exit Logic
Entry Condition:
A long trade is triggered when:
The BX-Trender Oscillator changes from red to green .
This shift indicates bullish momentum.
Exit Condition:
A long trade exit is triggered when:
The BX-Trender Oscillator changes from green to red .
This shift indicates a loss of bullish momentum or the start of bearish momentum.
PnL Calculation:
When exiting a trade, the indicator calculates the profit or loss as a percentage of the entry price.
Example:
A profit is displayed as +5.67% .
A loss is displayed as -3.21% .
Visualization
Oscillator Bars:
Green Bars: Represent increasing bullish momentum.
Light Green Bars: Represent weakening bullish momentum.
Red Bars: Represent increasing bearish momentum.
Light Red Bars: Represent weakening bearish momentum.
Just make sure that you checked off the B-Xtrend oscillator off from the style so chart can be active
Trade Labels:
Entry Labels: Displayed below the candle with the text Entry, long .
Exit Labels: Displayed above the candle with the text Exit .
Bar Chart Pane:
The oscillator is displayed in a separate pane for clear trend visualization.
Default Style
Oscillator Colors:
Green for bullish momentum.
Red for bearish momentum.
Light green and light red for weaker momentum.
Trade Labels:
Green labels for entries.
Red labels for exits, with percentage PnL displayed.
Use Cases
Momentum-Based Entries:
Detects shifts in momentum from bearish to bullish for precise trade entry points.
Trend Reversal Detection:
Identifies when bullish momentum weakens, signaling an exit opportunity.
Visual Simplicity:
Offers an intuitive way to track trends with its bar chart-style oscillator and clear trade labels.
This indicator doesn't indicate that it will work perfectly. More updates on the way.
Optimus trader Optimus Trader
Indicator Description:
The Optimus Trader indicator is designed for technical traders looking for entry and exit points in financial markets. It combines signals based on volume, moving averages, VWAP (Volume Weighted Average Price), as well as the recognition of candlestick patterns such as Pin Bar and Inside Bars. This indicator helps identify opportune moments to buy or sell based on trends, volumes, and recent liquidity zones.
Parameters and Features:
1. Simple Moving Average (MA) and VWAP:
- Optimus Trader uses a 50-period simple moving average to determine the underlying trend. It also includes VWAP for precise price analysis based on traded volumes.
- These two indicators help identify whether the market is in an uptrend or downtrend, enhancing the reliability of buy and sell signals.
2. Volume :
- To avoid false signals, a volume threshold is set using a 20-period moving average, adjusted to 1.2 times the average volume. This filters signals by considering only high-volume periods, indicating heightened market interest.
3. Candlestick Pattern Recognition:
- Pin Bar: This sought-after candlestick pattern is detected for both bullish and bearish setups. A bullish or bearish *Pin Bar* often signals a possible reversal or continuation.
- *Inside Bar*: This price compression pattern is also detected, indicating a zone of indecision before a potential movement.
4. Trend:
- An uptrend is confirmed when the price is above the MA and VWAP, while a downtrend is identified when the price is below both indicators.
5. Liquidity Zones:
- Optimus Trader includes an approximate liquidity zone detection feature. By identifying recent support and resistance levels, the indicator detects if the price is near these zones. This feature strengthens the relevance of buy or sell signals.
6. Buy and Sell Signals:
- Buy: A buy signal is generated when the indicator detects a bullish *Pin Bar* or *Inside Bar* in an uptrend with high volume, and the price is close to a liquidity zone.
- Sell: A sell signal is generated when a bearish *Pin Bar* or *Inside Bar* is detected in a downtrend with high volume, and the price is near a liquidity zone.
Signal Display:
The signals are visible directly on the chart:
- A "BUY" label in green is displayed below the bar for buy signals.
- A "SELL" label in red is displayed above the bar for sell signals.
Summary:
This indicator is intended for traders seeking precise entry and exit points by integrating trend analysis, volume, and candlestick patterns. With liquidity zones, *Optimus Trader* helps minimize false signals, providing clear and accurate alerts.
---
This description can be directly added to TradingView to help users quickly understand the features and logic of this indicator.
WillStop Pro [tradeviZion]WillStop Pro : A Step-by-Step Guide for Beginners to Master Trend Trading
Welcome to an in-depth guide to the WillStop Pro indicator. This article will walk you through the key features, how to use them effectively, and how this tool can help you navigate the markets confidently. WillStop Pro is based on principles established by Larry Williams, a well-known figure in trading, and aims to help you manage trades more effectively without overcomplicating things.
This guide will help you understand the basics of the WillStop Pro indicator, how to interpret its signals, and how to use it step-by-step to manage risk and identify opportunities in your trading journey. We will also cover the underlying logic and calculations for advanced users interested in more details.
What is the WillStop Pro Indicator?
The WillStop Pro indicator is a user-friendly tool that helps traders establish stop levels dynamically. It helps you figure out optimal points to enter or exit trades, while managing risk effectively during changing market conditions. The indicator tracks trending markets and sets price levels as stops for ongoing trades, making it suitable both for deciding when to enter and exit trades.
The indicator is beginner-friendly because it simplifies complex calculations and presents the results visually. This allows traders to focus more on their decision-making process instead of spending time with complex analysis.
WillStop Pro adapts to different market conditions, whether you're trading stocks, forex, commodities, or cryptocurrencies. It adjusts stop levels dynamically based on current market momentum, providing a practical way to manage both risk and reward.
Another significant benefit of WillStop Pro is that it works well with other indicators. Beginners can use it on its own or combine it with other tools like moving averages or oscillators to form a comprehensive trading strategy. Whether you are trading daily or looking at longer-term trends, WillStop Pro helps you manage your trades effectively.
Key Features of WillStop Pro
Dynamic Stop Levels : WillStop Pro calculates real-time stop levels for both long (buy) and short (sell) positions. This helps you protect your profits and reduce risk. The stop levels adjust based on the current market environment, making them more adaptable compared to fixed stop levels.
Advanced Stop Settings : There are optional settings to make the stop calculations more advanced, which take into consideration previous price movements to refine where the stops should be placed. These settings provide more precise control over your trades.
Break Signals and Alerts : The indicator provides visual signals, like arrows, to show when a stop level has been broken. This makes it easier for you to identify possible reversals and understand when the market direction is changing.
Comprehensive Table Display : A small table on the chart shows the current trend, the stop level, and whether advanced mode is active. This simple display provides an overview of the market, making decision-making easier.
Based on Larry Williams' Methodology : WillStop Pro builds upon Larry Williams' ideas, which are designed to capture major market trends while managing risk effectively. It provides a systematic way to follow these strategies without requiring deep technical analysis skills.
How Are Stop Levels Calculated? (For Advanced Users)
The WillStop Pro indicator determines stop levels by evaluating highs, lows, and closing prices over a specific lookback period. It uses this information to identify key points that justify adjusting your stop level, and there are separate approaches for both long and short positions.
Below, we explain the mathematical logic behind the stop calculations, along with some code snippets to give advanced users a clearer understanding.
For Long Stops (buy positions): The indicator looks for the highest closing price within the lookback period and continues until it finds three valid bars that meet certain criteria. Stops are adjusted to skip bars that have consecutive upward closes to ensure that the stop is placed at a level that offers solid support. Specifically, the function iterates over recent bars to determine the highest closing value, and checks for specific conditions before finalizing the stop level. Here is an excerpt of the relevant code:
getTrueLow(idx) => math.min(low , close )
findStopLevels() =>
float highestClose = close
int highestCloseIndex = 0
for i = 0 to lookback
if close > highestClose
highestClose := close
highestCloseIndex := i
// Logic to adjust based on up close skipping
int longCount = 0
int longCurrentIndex = highestCloseIndex
while longCount < 3 and longCurrentIndex < 100
if not isInsideBar(longCurrentIndex)
longCount += 1
longCurrentIndex += 1
// Determine the lowest low for the stop level
float longStopLevel = high * 2
for i = searchIndex to highestCloseIndex
longStopLevel := math.min(longStopLevel, getTrueLow(i))
// Apply offset
longStopLevel := longStopLevel - (offsetTicks * tickSize)
In this code snippet, the function findStopLevels() calculates the long stop level by first identifying the highest close within the lookback period and then finding a suitable support level while skipping certain conditions, such as inside bars or consecutive upward closes. Finally, the user-defined offset ( offsetTicks ) is applied to determine the stop level.
For Short Stops (sell positions): Similarly, the indicator finds the lowest closing price within the lookback period and then identifies three bars that fit the conditions for a short stop. It avoids using bars with consecutive down closes to help find a more robust resistance level. Here's a relevant code snippet:
getTrueHigh(idx) => math.max(high , close )
findStopLevels() =>
float lowestClose = close
int lowestCloseIndex = 0
for i = 0 to lookback
if close < lowestClose
lowestClose := close
lowestCloseIndex := i
// Logic to adjust based on down close skipping
int shortCount = 0
int shortCurrentIndex = lowestCloseIndex
while shortCount < 3 and shortCurrentIndex < 100
if not isInsideBar(shortCurrentIndex)
shortCount += 1
shortCurrentIndex += 1
// Determine the highest high for the stop level
float shortStopLevel = 0
for i = searchIndex to lowestCloseIndex
shortStopLevel := math.max(shortStopLevel, getTrueHigh(i))
// Apply offset
shortStopLevel := shortStopLevel + (offsetTicks * tickSize)
Here, findStopLevels() calculates the short stop level by finding the lowest closing price within the lookback period. It then determines the highest value that acts as a resistance level, excluding bars that do not fit certain criteria.
Volume Confirmation for Alert Accuracy : To further enhance the stop level accuracy, volume is used as a confirmation filter. The average volume (volAvg) is calculated over a 20-period moving average, and alerts are only generated if the volume exceeds a defined threshold (volMultiplier). This ensures that price movements are significant enough to consider as meaningful signals.
volAvg = ta.sma(volume, 20)
isVolumeConfirmed() =>
result = requireVolumeConfirmation ? volume > (volAvg * volMultiplier) : true
result
This additional logic ensures that stop level breaks or adjustments are not triggered during periods of low trading activity, thus enhancing the reliability of the generated signals.
These calculations are at the core of WillStop Pro's ability to determine dynamic stop levels that respond effectively to market movements, helping traders manage risk by placing stops at levels that make sense given historical price and volume data.
How to Identify Opportunities with WillStop Pro
WillStop Pro provides various signals that help you decide when to enter or exit a trade:
When a Stop Level is Broken: If a stop level (support for long positions or resistance for short positions) is broken, it may indicate a reversal. WillStop Pro visually plots arrows whenever a stop level is breached, making it easy for you to see where changes might occur. This feature helps traders identify momentum shifts quickly.
Support and Resistance Levels: The indicator plots support and resistance levels, which show key zones to watch for opportunities. These levels often act as psychological barriers in the market, where price action may either reverse or stall temporarily.
Dynamic State Management: The indicator shifts between long and short states based on price action, providing real-time feedback. This helps traders stick to their trading plan without second-guessing the market.
A major advantage of WillStop Pro is that it responds well to changing market conditions. By identifying when key support or resistance levels break, it allows you to adjust your strategies and react to new opportunities accordingly. Whether the market is trending strongly or staying within a range, WillStop Pro provides valuable information to help guide your trades.
Setting Up Alerts
Alerts are an important feature in trading, especially when you can’t be in front of your charts all the time. WillStop Pro has been enhanced to include flexible alert settings to help you stay on top of your trades without constantly monitoring the charts.
Enable Alerts: There is a master switch to enable or disable all alerts. This way, you can control whether you want to be notified of events at any time.
Alert Frequency: Choose between receiving alerts Once Per Bar or Once Per Bar Close . This helps you manage the frequency of alerts and decide if you need real-time updates or want confirmation after a bar closes.
Break Alerts: These alerts notify you when a stop level has been broken. This can help you catch potential reversals or trading opportunities as soon as they happen.
Strong Break Alerts: Alerts are available for strong breaks, which occur when the price breaks stop levels with confirmation based on additional price, volume, and momentum criteria. These alerts help identify significant shifts in the market.
Level Change Alerts: These alerts tell you whenever a new stop level is calculated, keeping you updated about changes in market dynamics. You can set a Minimum Level Change % to ensure that alerts are only triggered when the stop level changes significantly.
Require Volume Confirmation: You can opt to receive alerts only if the volume is above a certain threshold. This confirmation helps reduce false signals by ensuring that significant price changes are backed by increased trading activity.
Volume Multiplier: The volume multiplier allows you to set a minimum volume requirement that must be met for an alert to trigger. This ensures that alerts are triggered only when there is sufficient trading interest.
Here is a part of the updated alert logic that has been implemented in the indicator:
// Alert on break conditions
if alertsEnabled
if alertOnBreaks
if longStopBroken and isVolumeConfirmed()
alert(createAlertMessage("Support Break - Short Signal", useAdvancedStops), alertFreq)
if shortStopBroken and isVolumeConfirmed()
alert(createAlertMessage("Resistance Break - Long Signal", useAdvancedStops), alertFreq)
// Strong break alerts
if alertOnStrongBreaks
if longStopBroken and isStrongBreak(false)
alert(createAlertMessage("Strong Support Break - Short Signal", useAdvancedStops), alertFreq)
if shortStopBroken and isStrongBreak(true)
alert(createAlertMessage("Strong Resistance Break - Long Signal", useAdvancedStops), alertFreq)
// Level change alerts
if alertOnLevelChanges and isSignificantChange() and isVolumeConfirmed()
alert(createAlertMessage("Significant Level Change", useAdvancedStops), alertFreq)
Setting alerts allows you to react to market changes without having to watch the charts constantly. Alerts are particularly helpful if you have other responsibilities and can’t be actively monitoring your trades all day.
Understanding the Table Display
The WillStop Pro indicator provides a status table that gives an overview of the current market state. Here’s what the table shows:
Indicator Status: The table indicates whether the indicator is in a LONG or SHORT state. This helps you quickly understand the market trend.
Stop Level: The active stop level is shown, whether it is acting as support (long) or resistance (short). This is important for knowing where to set your protective stops.
Mode: The table also displays whether the advanced calculation mode is being used. This keeps you informed about how stop levels are being calculated and why they are positioned where they are.
Empowering Messages: The table also includes motivational messages that rotate periodically, such as 'Trade with Clarity, Stop with Precision' and 'Let Winners Run, Cut Losses Short.' These messages are designed to keep you focused, motivated, and disciplined during your trading journey.
The table is simple and easy to follow, helping you maintain discipline in your trading plan. By having all the essential information in one place, the table reduces the need to make quick, emotional decisions and promotes more thoughtful analysis.
Tips for Using WillStop Pro Effectively
Here are some practical ways to make the most of the WillStop Pro indicator:
Start with Default Settings: If you’re new to the indicator, start with the default settings. This will give you an idea of how stop levels are determined and how they adjust to different markets.
Experiment with Advanced Settings: Once you are comfortable, try using the advanced stop settings to see how they refine the stop levels. This can be useful in certain market conditions to improve accuracy.
Use Alerts to Stay Updated: Set up alerts for when a stop level is broken or when new levels are calculated. This helps you take action without constantly watching the chart. Swing traders may find alerts especially helpful for monitoring longer-term moves.
Monitor the Status Table: Keep an eye on the status table to understand the current market condition. Whether the indicator is in a LONG or SHORT state can help you make more informed decisions.
Focus on Risk Management: WillStop Pro is designed to help you manage risk by dynamically adjusting stop levels. Make sure you are using these levels to protect your trades, especially during strong trends or volatile periods.
Acknowledging Larry Williams' Influence
WillStop Pro is inspired by the work of Larry Williams, who described the approach as one of his best trading techniques. His method aims to ride major market trends while reducing the risk of giving back gains during corrections. WillStop Pro builds upon this approach, adding features like advanced stop settings and visual alerts that make it easier to apply in modern markets.
By using WillStop Pro, you are essentially leveraging a well-established trading strategy with additional tools that help improve its effectiveness. The indicator is designed to provide a reliable way to manage trades, stay on top of market conditions, and reduce emotional decision-making.
Conclusion: Why WillStop Pro is Great for Beginners and Advanced Users
The WillStop Pro is a powerful yet easy-to-use tool that helps traders ride trends while managing risk during market corrections. It can be used both for entering and exiting trades, and its visual features make it accessible for those who are new to trading, while the underlying logic appeals to advanced users seeking greater control and understanding.
WillStop Pro is more than just a tool for setting stops. It is a comprehensive solution for managing trades, with features like dynamic stop levels, customizable alerts, and an easy-to-understand status table. This combination of simplicity and advanced features makes it suitable for beginners as well as more experienced traders.
We hope this guide helps you get started with WillStop Pro and improves your trading confidence. Remember to start with the basics, explore the advanced features, and set alerts to stay informed without getting overwhelmed. Whether you’re just beginning or want to simplify your strategy, WillStop Pro is a valuable tool to have in your trading arsenal.
Trading can be challenging, but the right tools make it more manageable. WillStop Pro helps you keep track of market movements, identify opportunities, and manage risk effectively. Give it a try and see how it can improve your trading decisions and help you navigate the markets more efficiently.
By incorporating WillStop Pro into your strategy, you are following a systematic approach that has been refined over time. It’s designed to help you make sense of the markets, plan your trades, and manage your risks with greater clarity and confidence.
Note: Always practice proper risk management and thoroughly test the indicator to ensure it aligns with your trading strategy. Past performance is not indicative of future results.
Trade smarter with TradeVizion—unlock your trading potential today!
Trading IQ - ICT LibraryLibrary "ICTlibrary"
Used to calculate various ICT related price levels and strategies. An ongoing project.
Hello Coders!
This library is meant for sourcing ICT related concepts. While some functions might generate more output than you require, you can specify "Lite Mode" as "true" in applicable functions to slim down necessary inputs.
isLastBar(userTF)
Identifies the last bar on the chart before a timeframe change
Parameters:
userTF (simple int) : the timeframe you wish to calculate the last bar for, must be converted to integer using 'timeframe.in_seconds()'
Returns: bool true if bar on chart is last bar of higher TF, dalse if bar on chart is not last bar of higher TF
necessaryData(atrTF)
returns necessaryData UDT for historical data access
Parameters:
atrTF (float) : user-selected timeframe ATR value.
Returns: logZ. log return Z score, used for calculating order blocks.
method gradBoxes(gradientBoxes, idColor, timeStart, bottom, top, rightCoordinate)
creates neon like effect for box drawings
Namespace types: array
Parameters:
gradientBoxes (array) : an array.new() to store the gradient boxes
idColor (color)
timeStart (int) : left point of box
bottom (float) : bottom of box price point
top (float) : top of box price point
rightCoordinate (int) : right point of box
Returns: void
checkIfTraded(tradeName)
checks if recent trade is of specific name
Parameters:
tradeName (string)
Returns: bool true if recent trade id matches target name, false otherwise
checkIfClosed(tradeName)
checks if recent closed trade is of specific name
Parameters:
tradeName (string)
Returns: bool true if recent closed trade id matches target name, false otherwise
IQZZ(atrMult, finalTF)
custom ZZ to quickly determine market direction.
Parameters:
atrMult (float) : an atr multiplier used to determine the required price move for a ZZ direction change
finalTF (string) : the timeframe used for the atr calcuation
Returns: dir market direction. Up => 1, down => -1
method drawBos(id, startPoint, getKeyPointTime, getKeyPointPrice, col, showBOS, isUp)
calculates and draws Break Of Structure
Namespace types: array
Parameters:
id (array)
startPoint (chart.point)
getKeyPointTime (int) : the actual time of startPoint, simplystartPoint.time
getKeyPointPrice (float) : the actual time of startPoint, simplystartPoint.price
col (color) : color of the BoS line / label
showBOS (bool) : whether to show label/line. This function still calculates internally for other ICT related concepts even if not drawn.
isUp (bool) : whether BoS happened during price increase or price decrease.
Returns: void
method drawMSS(id, startPoint, getKeyPointTime, getKeyPointPrice, col, showMSS, isUp, upRejections, dnRejections, highArr, lowArr, timeArr, closeArr, openArr, atrTFarr, upRejectionsPrices, dnRejectionsPrices)
calculates and draws Market Structure Shift. This data is also used to calculate Rejection Blocks.
Namespace types: array
Parameters:
id (array)
startPoint (chart.point)
getKeyPointTime (int) : the actual time of startPoint, simplystartPoint.time
getKeyPointPrice (float) : the actual time of startPoint, simplystartPoint.price
col (color) : color of the MSS line / label
showMSS (bool) : whether to show label/line. This function still calculates internally for other ICT related concepts even if not drawn.
isUp (bool) : whether MSS happened during price increase or price decrease.
upRejections (array)
dnRejections (array)
highArr (array) : array containing historical highs, should be taken from the UDT "necessaryData" defined above
lowArr (array) : array containing historical lows, should be taken from the UDT "necessaryData" defined above
timeArr (array) : array containing historical times, should be taken from the UDT "necessaryData" defined above
closeArr (array) : array containing historical closes, should be taken from the UDT "necessaryData" defined above
openArr (array) : array containing historical opens, should be taken from the UDT "necessaryData" defined above
atrTFarr (array) : array containing historical atr values (of user-selected TF), should be taken from the UDT "necessaryData" defined above
upRejectionsPrices (array) : array containing up rejections prices. Is sorted and used to determine selective looping for invalidations.
dnRejectionsPrices (array) : array containing down rejections prices. Is sorted and used to determine selective looping for invalidations.
Returns: void
method getTime(id, compare, timeArr)
gets time of inputted price (compare) in an array of data
this is useful when the user-selected timeframe for ICT concepts is greater than the chart's timeframe
Namespace types: array
Parameters:
id (array) : the array of data to search through, to find which index has the same value as "compare"
compare (float) : the target data point to find in the array
timeArr (array) : array of historical times
Returns: the time that the data point in the array was recorded
method OB(id, highArr, signArr, lowArr, timeArr, sign)
store bullish orderblock data
Namespace types: array
Parameters:
id (array)
highArr (array) : array of historical highs
signArr (array) : array of historical price direction "math.sign(close - open)"
lowArr (array) : array of historical lows
timeArr (array) : array of historical times
sign (int) : orderblock direction, -1 => bullish, 1 => bearish
Returns: void
OTEstrat(OTEstart, future, closeArr, highArr, lowArr, timeArr, longOTEPT, longOTESL, longOTElevel, shortOTEPT, shortOTESL, shortOTElevel, structureDirection, oteLongs, atrTF, oteShorts)
executes the OTE strategy
Parameters:
OTEstart (chart.point)
future (int) : future time point for drawings
closeArr (array) : array of historical closes
highArr (array) : array of historical highs
lowArr (array) : array of historical lows
timeArr (array) : array of historical times
longOTEPT (string) : user-selected long OTE profit target, please create an input.string() for this using the example below
longOTESL (int) : user-selected long OTE stop loss, please create an input.string() for this using the example below
longOTElevel (float) : long entry price of selected retracement ratio for OTE
shortOTEPT (string) : user-selected short OTE profit target, please create an input.string() for this using the example below
shortOTESL (int) : user-selected short OTE stop loss, please create an input.string() for this using the example below
shortOTElevel (float) : short entry price of selected retracement ratio for OTE
structureDirection (string) : current market structure direction, this should be "Up" or "Down". This is used to cancel pending orders if market structure changes
oteLongs (bool) : input.bool() for whether OTE longs can be executed
atrTF (float) : atr of the user-seleceted TF
oteShorts (bool) : input.bool() for whether OTE shorts can be executed
@exampleInputs
oteLongs = input.bool(defval = false, title = "OTE Longs", group = "Optimal Trade Entry")
longOTElevel = input.float(defval = 0.79, title = "Long Entry Retracement Level", options = , group = "Optimal Trade Entry")
longOTEPT = input.string(defval = "-0.5", title = "Long TP", options = , group = "Optimal Trade Entry")
longOTESL = input.int(defval = 0, title = "How Many Ticks Below Swing Low For Stop Loss", group = "Optimal Trade Entry")
oteShorts = input.bool(defval = false, title = "OTE Shorts", group = "Optimal Trade Entry")
shortOTElevel = input.float(defval = 0.79, title = "Short Entry Retracement Level", options = , group = "Optimal Trade Entry")
shortOTEPT = input.string(defval = "-0.5", title = "Short TP", options = , group = "Optimal Trade Entry")
shortOTESL = input.int(defval = 0, title = "How Many Ticks Above Swing Low For Stop Loss", group = "Optimal Trade Entry")
Returns: void (0)
displacement(logZ, atrTFreg, highArr, timeArr, lowArr, upDispShow, dnDispShow, masterCoords, labelLevels, dispUpcol, rightCoordinate, dispDncol, noBorders)
calculates and draws dispacements
Parameters:
logZ (float) : log return of current price, used to determine a "significant price move" for a displacement
atrTFreg (float) : atr of user-seleceted timeframe
highArr (array) : array of historical highs
timeArr (array) : array of historical times
lowArr (array) : array of historical lows
upDispShow (int) : amount of historical upside displacements to show
dnDispShow (int) : amount of historical downside displacements to show
masterCoords (map) : a map to push the most recent displacement prices into, useful for having key levels in one data structure
labelLevels (string) : used to determine label placement for the displacement, can be inside box, outside box, or none, example below
dispUpcol (color) : upside displacement color
rightCoordinate (int) : future time for displacement drawing, best is "last_bar_time"
dispDncol (color) : downside displacement color
noBorders (bool) : input.bool() to remove box borders, example below
@exampleInputs
labelLevels = input.string(defval = "Inside" , title = "Box Label Placement", options = )
noBorders = input.bool(defval = false, title = "No Borders On Levels")
Returns: void
method getStrongLow(id, startIndex, timeArr, lowArr, strongLowPoints)
unshift strong low data to array id
Namespace types: array
Parameters:
id (array)
startIndex (int) : the starting index for the timeArr array of the UDT "necessaryData".
this point should start from at least 1 pivot prior to find the low before an upside BoS
timeArr (array) : array of historical times
lowArr (array) : array of historical lows
strongLowPoints (array) : array of strong low prices. Used to retrieve highest strong low price and see if need for
removal of invalidated strong lows
Returns: void
method getStrongHigh(id, startIndex, timeArr, highArr, strongHighPoints)
unshift strong high data to array id
Namespace types: array
Parameters:
id (array)
startIndex (int) : the starting index for the timeArr array of the UDT "necessaryData".
this point should start from at least 1 pivot prior to find the high before a downside BoS
timeArr (array) : array of historical times
highArr (array) : array of historical highs
strongHighPoints (array)
Returns: void
equalLevels(highArr, lowArr, timeArr, rightCoordinate, equalHighsCol, equalLowsCol, liteMode)
used to calculate recent equal highs or equal lows
Parameters:
highArr (array) : array of historical highs
lowArr (array) : array of historical lows
timeArr (array) : array of historical times
rightCoordinate (int) : a future time (right for boxes, x2 for lines)
equalHighsCol (color) : user-selected color for equal highs drawings
equalLowsCol (color) : user-selected color for equal lows drawings
liteMode (bool) : optional for a lite mode version of an ICT strategy. For more control over drawings leave as "True", "False" will apply neon effects
Returns: void
quickTime(timeString)
used to quickly determine if a user-inputted time range is currently active in NYT time
Parameters:
timeString (string) : a time range
Returns: true if session is active, false if session is inactive
macros(showMacros, noBorders)
used to calculate and draw session macros
Parameters:
showMacros (bool) : an input.bool() or simple bool to determine whether to activate the function
noBorders (bool) : an input.bool() to determine whether the box anchored to the session should have borders
Returns: void
po3(tf, left, right, show)
use to calculate HTF po3 candle
@tip only call this function on "barstate.islast"
Parameters:
tf (simple string)
left (int) : the left point of the candle, calculated as bar_index + left,
right (int) : :the right point of the candle, calculated as bar_index + right,
show (bool) : input.bool() whether to show the po3 candle or not
Returns: void
silverBullet(silverBulletStratLong, silverBulletStratShort, future, userTF, H, L, H2, L2, noBorders, silverBulletLongTP, historicalPoints, historicalData, silverBulletLongSL, silverBulletShortTP, silverBulletShortSL)
used to execute the Silver Bullet Strategy
Parameters:
silverBulletStratLong (simple bool)
silverBulletStratShort (simple bool)
future (int) : a future time, used for drawings, example "last_bar_time"
userTF (simple int)
H (float) : the high price of the user-selected TF
L (float) : the low price of the user-selected TF
H2 (float) : the high price of the user-selected TF
L2 (float) : the low price of the user-selected TF
noBorders (bool) : an input.bool() used to remove the borders from box drawings
silverBulletLongTP (series silverBulletLevels)
historicalPoints (array)
historicalData (necessaryData)
silverBulletLongSL (series silverBulletLevels)
silverBulletShortTP (series silverBulletLevels)
silverBulletShortSL (series silverBulletLevels)
Returns: void
method invalidFVGcheck(FVGarr, upFVGpricesSorted, dnFVGpricesSorted)
check if existing FVGs are still valid
Namespace types: array
Parameters:
FVGarr (array)
upFVGpricesSorted (array) : an array of bullish FVG prices, used to selective search through FVG array to remove invalidated levels
dnFVGpricesSorted (array) : an array of bearish FVG prices, used to selective search through FVG array to remove invalidated levels
Returns: void (0)
method drawFVG(counter, FVGshow, FVGname, FVGcol, data, masterCoords, labelLevels, borderTransp, liteMode, rightCoordinate)
draws FVGs on last bar
Namespace types: map
Parameters:
counter (map) : a counter, as map, keeping count of the number of FVGs drawn, makes sure that there aren't more FVGs drawn
than int FVGshow
FVGshow (int) : the number of FVGs to show. There should be a bullish FVG show and bearish FVG show. This function "drawFVG" is used separately
for bearish FVG and bullish FVG.
FVGname (string) : the name of the FVG, "FVG Up" or "FVG Down"
FVGcol (color) : desired FVG color
data (FVG)
masterCoords (map) : a map containing the names and price points of key levels. Used to define price ranges.
labelLevels (string) : an input.string with options "Inside", "Outside", "Remove". Determines whether FVG labels should be inside box, outside,
or na.
borderTransp (int)
liteMode (bool)
rightCoordinate (int) : the right coordinate of any drawings. Must be a time point.
Returns: void
invalidBlockCheck(bullishOBbox, bearishOBbox, userTF)
check if existing order blocks are still valid
Parameters:
bullishOBbox (array) : an array declared using the UDT orderBlock that contains bullish order block related data
bearishOBbox (array) : an array declared using the UDT orderBlock that contains bearish order block related data
userTF (simple int)
Returns: void (0)
method lastBarRejections(id, rejectionColor, idShow, rejectionString, labelLevels, borderTransp, liteMode, rightCoordinate, masterCoords)
draws rejectionBlocks on last bar
Namespace types: array
Parameters:
id (array) : the array, an array of rejection block data declared using the UDT rejection block
rejectionColor (color) : the desired color of the rejection box
idShow (int)
rejectionString (string) : the desired name of the rejection blocks
labelLevels (string) : an input.string() to determine if labels for the block should be inside the box, outside, or none.
borderTransp (int)
liteMode (bool) : an input.bool(). True = neon effect, false = no neon.
rightCoordinate (int) : atime for the right coordinate of the box
masterCoords (map) : a map that stores the price of key levels and assigns them a name, used to determine price ranges
Returns: void
method OBdraw(id, OBshow, BBshow, OBcol, BBcol, bullishString, bearishString, isBullish, labelLevels, borderTransp, liteMode, rightCoordinate, masterCoords)
draws orderblocks and breaker blocks for data stored in UDT array()
Namespace types: array
Parameters:
id (array) : the array, an array of order block data declared using the UDT orderblock
OBshow (int) : the number of order blocks to show
BBshow (int) : the number of breaker blocks to show
OBcol (color) : color of order blocks
BBcol (color) : color of breaker blocks
bullishString (string) : the title of bullish blocks, which is a regular bullish orderblock or a bearish orderblock that's converted to breakerblock
bearishString (string) : the title of bearish blocks, which is a regular bearish orderblock or a bullish orderblock that's converted to breakerblock
isBullish (bool) : whether the array contains bullish orderblocks or bearish orderblocks. If bullish orderblocks,
the array will naturally contain bearish BB, and if bearish OB, the array will naturally contain bullish BB
labelLevels (string) : an input.string() to determine if labels for the block should be inside the box, outside, or none.
borderTransp (int)
liteMode (bool) : an input.bool(). True = neon effect, false = no neon.
rightCoordinate (int) : atime for the right coordinate of the box
masterCoords (map) : a map that stores the price of key levels and assigns them a name, used to determine price ranges
Returns: void
FVG
UDT for FVG calcualtions
Fields:
H (series float) : high price of user-selected timeframe
L (series float) : low price of user-selected timeframe
direction (series string) : FVG direction => "Up" or "Down"
T (series int) : => time of bar on user-selected timeframe where FVG was created
fvgLabel (series label) : optional label for FVG
fvgLineTop (series line) : optional line for top of FVG
fvgLineBot (series line) : optional line for bottom of FVG
fvgBox (series box) : optional box for FVG
labelLine
quickly pair a line and label together as UDT
Fields:
lin (series line) : Line you wish to pair with label
lab (series label) : Label you wish to pair with line
orderBlock
UDT for order block calculations
Fields:
orderBlockData (array) : array containing order block x and y points
orderBlockBox (series box) : optional order block box
vioCount (series int) : = 0 violation count of the order block. 0 = Order Block, 1 = Breaker Block
traded (series bool)
status (series string) : = "OB" status == "OB" => Level is order block. status == "BB" => Level is breaker block.
orderBlockLab (series label) : options label for the order block / breaker block.
strongPoints
UDT for strong highs and strong lows
Fields:
price (series float) : price of the strong high or strong low
timeAtprice (series int) : time of the strong high or strong low
strongPointLabel (series label) : optional label for strong point
strongPointLine (series line) : optional line for strong point
overlayLine (series line) : optional lines for strong point to enhance visibility
overlayLine2 (series line) : optional lines for strong point to enhance visibility
displacement
UDT for dispacements
Fields:
highPrice (series float) : high price of displacement
lowPrice (series float) : low price of displacement
timeAtPrice (series int) : time of bar where displacement occurred
displacementBox (series box) : optional box to draw displacement
displacementLab (series label) : optional label for displacement
po3data
UDT for po3 calculations
Fields:
dHigh (series float) : higher timeframe high price
dLow (series float) : higher timeframe low price
dOpen (series float) : higher timeframe open price
dClose (series float) : higher timeframe close price
po3box (series box) : box to draw po3 candle body
po3line (array) : line array to draw po3 wicks
po3Labels (array) : label array to label price points of po3 candle
macros
UDT for session macros
Fields:
sessions (array) : Array of sessions, you can populate this array using the "quickTime" function located above "export macros".
prices (matrix) : Matrix of session data -> open, high, low, close, time
sessionTimes (array) : Array of session names. Pairs with array sessions.
sessionLines (matrix) : Optional array for sesion drawings.
OTEtimes
UDT for data storage and drawings associated with OTE strategy
Fields:
upTimes (array) : time of highest point before trade is taken
dnTimes (array) : time of lowest point before trade is taken
tpLineLong (series line) : line to mark tp level long
tpLabelLong (series label) : label to mark tp level long
slLineLong (series line) : line to mark sl level long
slLabelLong (series label) : label to mark sl level long
tpLineShort (series line) : line to mark tp level short
tpLabelShort (series label) : label to mark tp level short
slLineShort (series line) : line to mark sl level short
slLabelShort (series label) : label to mark sl level short
sweeps
UDT for data storage and drawings associated with liquidity sweeps
Fields:
upSweeps (matrix) : matrix containing liquidity sweep price points and time points for up sweeps
dnSweeps (matrix) : matrix containing liquidity sweep price points and time points for down sweeps
upSweepDrawings (array) : optional up sweep box array. Pair the size of this array with the rows or columns,
dnSweepDrawings (array) : optional up sweep box array. Pair the size of this array with the rows or columns,
raidExitDrawings
UDT for drawings associated with the Liquidity Raid Strategy
Fields:
tpLine (series line) : tp line for the liquidity raid entry
tpLabel (series label) : tp label for the liquidity raid entry
slLine (series line) : sl line for the liquidity raid entry
slLabel (series label) : sl label for the liquidity raid entry
m2022
UDT for data storage and drawings associated with the Model 2022 Strategy
Fields:
mTime (series int) : time of the FVG where entry limit order is placed
mIndex (series int) : array index of FVG where entry limit order is placed. This requires an array of FVG data, which is defined above.
mEntryDistance (series float) : the distance of the FVG to the 50% range. M2022 looks for the fvg closest to 50% mark of range.
mEntry (series float) : the entry price for the most eligible fvg
fvgHigh (series float) : the high point of the eligible fvg
fvgLow (series float) : the low point of the eligible fvg
longFVGentryBox (series box) : long FVG box, used to draw the eligible FVG
shortFVGentryBox (series box) : short FVG box, used to draw the eligible FVG
line50P (series line) : line used to mark 50% of the range
line100P (series line) : line used to mark 100% (top) of the range
line0P (series line) : line used to mark 0% (bottom) of the range
label50P (series label) : label used to mark 50% of the range
label100P (series label) : label used to mark 100% (top) of the range
label0P (series label) : label used to mark 0% (bottom) of the range
sweepData (array)
silverBullet
UDT for data storage and drawings associated with the Silver Bullet Strategy
Fields:
session (series bool)
sessionStr (series string) : name of the session for silver bullet
sessionBias (series string)
sessionHigh (series float) : = high high of session // use math.max(silverBullet.sessionHigh, high)
sessionLow (series float) : = low low of session // use math.min(silverBullet.sessionLow, low)
sessionFVG (series float) : if applicable, the FVG created during the session
sessionFVGdraw (series box) : if applicable, draw the FVG created during the session
traded (series bool)
tp (series float) : tp of trade entered at the session FVG
sl (series float) : sl of trade entered at the session FVG
sessionDraw (series box) : optional draw session with box
sessionDrawLabel (series label) : optional label session with label
silverBulletDrawings
UDT for trade exit drawings associated with the Silver Bullet Strategy
Fields:
tpLine (series line) : tp line drawing for strategy
tpLabel (series label) : tp label drawing for strategy
slLine (series line) : sl line drawing for strategy
slLabel (series label) : sl label drawing for strategy
unicornModel
UDT for data storage and drawings associated with the Unicorn Model Strategy
Fields:
hPoint (chart.point)
hPoint2 (chart.point)
hPoint3 (chart.point)
breakerBlock (series box) : used to draw the breaker block required for the Unicorn Model
FVG (series box) : used to draw the FVG required for the Unicorn model
topBlock (series float) : price of top of breaker block, can be used to detail trade entry
botBlock (series float) : price of bottom of breaker block, can be used to detail trade entry
startBlock (series int) : start time of the breaker block, used to set the "left = " param for the box
includes (array) : used to store the time of the breaker block, or FVG, or the chart point sequence that setup the Unicorn Model.
entry (series float) : // eligible entry price, for longs"math.max(topBlock, FVG.get_top())",
tpLine (series line) : optional line to mark PT
tpLabel (series label) : optional label to mark PT
slLine (series line) : optional line to mark SL
slLabel (series label) : optional label to mark SL
rejectionBlocks
UDT for data storage and drawings associated with rejection blocks
Fields:
rejectionPoint (chart.point)
bodyPrice (series float) : candle body price closest to the rejection point, for "Up" rejections => math.max(open, close),
rejectionBox (series box) : optional box drawing of the rejection block
rejectionLabel (series label) : optional label for the rejection block
equalLevelsDraw
UDT for data storage and drawings associated with equal highs / equal lows
Fields:
connector (series line) : single line placed at the first high or low, y = avgerage of distinguished equal highs/lows
connectorLab (series label) : optional label to be placed at the highs or lows
levels (array) : array containing the equal highs or lows prices
times (array) : array containing the equal highs or lows individual times
startTime (series int) : the time of the first high or low that forms a sequence of equal highs or lows
radiate (array) : options label to "radiate" the label in connector lab. Can be used for anything
necessaryData
UDT for data storage of historical price points.
Fields:
highArr (array) : array containing historical high points
lowArr (array) : array containing historical low points
timeArr (array) : array containing historical time points
logArr (array) : array containing historical log returns
signArr (array) : array containing historical price directions
closeArr (array) : array containing historical close points
binaryTimeArr (array) : array containing historical time points, uses "push" instead of "unshift" to allow for binary search
binaryCloseArr (array) : array containing historical close points, uses "push" instead of "unshift" to allow the correct
binaryOpenArr (array) : array containing historical optn points, uses "push" instead of "unshift" to allow the correct
atrTFarr (array) : array containing historical user-selected TF atr points
openArr (array) : array containing historical open points
Periodic Linear Regressions [LuxAlgo]The Periodic Linear Regressions (PLR) indicator calculates linear regressions periodically (similar to the VWAP indicator) based on a user-set period (anchor).
This allows for estimating underlying trends in the price, as well as providing potential supports/resistances.
🔶 USAGE
The Periodic Linear Regressions indicator calculates a linear regression over a user-selected interval determined from the selected "Anchor Period".
The PLR can be visualized as a regular linear regression (Static), with a fit readjusting for new data points until the end of the selected period, or as a moving average (Rolling), with new values obtained from the last point of a linear regression fitted over the calculation interval. While the static method line is prone to repainting, it has value since it can further emphasize the linearity of an underlying trend, as well as suggest future trend directions by extrapolating the fit.
Extremities are included in the indicator, these are obtained from the root mean squared error (RMSE) between the price and calculated linear regression. The Multiple setting allows the users to control how far each extremity is from the other.
Periodic Linear Regressions can be helpful in finding support/resistance areas or even opportunities when ranging in a channel.
The anchor - where a new period starts - can be shown (in this case in the top right corner).
The shown bands can be visualized by enabling Show Extremities in settings ( Rolling or Static method).
The script includes a background gradient color option for the bands, which only applies when using the Rolling method.
The indicator colors can be suggestive of the detected trend and are determined as follows:
Method Rolling: a gradient color between red and green indicates the trend; more green if the output is rising, suggesting an uptrend, and more red if it is decreasing, suggesting a downtrend.
Method Static: green if the slope of the line is positive, suggesting an uptrend, red if negative, suggesting a downtrend.
🔶 DETAILS
🔹 Anchor Type
When the Anchor Type is set to Periodic , the indicator will be reset when the "Anchor Period" changes, after which calculations will start again.
An anchored rolling line set at First Bar won't reset at a new session; it will continue calculating the linear regression from the first bar to the last; in other words, every bar is included in the calculation. This can be useful to detect potential long-term tops/bottoms.
Note that a linear regression needs at least two values for its calculation, which explains why you won't see a static line at the first bar of the session. The rolling linear regression will only show from the 3rd bar of the session since it also needs a previous value.
🔹 Rolling/Static
When Anchor Type is set at Periodic , a linear regression is calculated between the first bar of the chosen session and the current bar, aiming to find the line that best fits the dataset.
The example above shows the lines drawn during the session. The offered script, though, shows the last calculated point connected to the previous point when the Rolling method is chosen, while the Static method shows the latest line.
Note that linear regression needs at least two values, which explains why you won't see a static line at the first bar of the session. The rolling line will only show from the 3rd bar of the session since it also needs a previous value.
🔶 SETTINGS
Method: Indicator method used, with options: "Static" (straight line) / "Rolling" (rolling linear regression).
Anchor Type: "Periodic / First Bar" (the latter works only when "Method" is set to "Rolling").
Anchor Period: Only applicable when "Anchor Type" is set at "Periodic".
Source: open, high, low, close, ...
Multiple: Alters the width of the bands when "Show Extremities" is enabled.
Show Extremities: Display one upper and one lower extremity.
🔹 Color Settings
Mono Color: color when "Bicolor" is disabled
Bicolor: Toggle on/off + Colors
Gradient: Background color when "Show extremities" is enabled + level of gradient
🔹 Dashboard
Show Dashboard
Location of dashboard
Text size
Pivot Data [QuantVue]The Pivot Data Indicator is designed to provide traders with valuable insights by identifying and analyzing pivot points on the price chart. It calculates both pivot highs and lows, then presents detailed statistics on the distance and time between these pivots.
a pivot point is defined as a specific point on the chart where the price either reaches a high or a low, with no bars higher or lower than it for a set number of bars on both sides (left and right). Essentially, it's a local high or low point, with the market moving in the opposite direction after the pivot forms.
For example:
A pivot high occurs when there are no bars with higher prices for a specified number of bars before and after that point.
A pivot low occurs when there are no bars with lower prices for the same number of bars on either side.
The number of bars to the left and right is adjustable via the Pivot Lookback Bars setting, allowing you to define how many bars are used to determine these pivot points.
Key features include:
Pivot Highs and Lows Identification: Automatically marks significant pivot highs and lows based on a user-defined lookback period, helping traders identify potential trend reversals or continuation points.
Prediction Labels: Provides forecasted pivot levels based on historical pivot price and time patterns, with options to show predictions for pivot highs, lows, or any pivot point.
Customizable Table Display: Displays a table summarizing important statistics, such as the average price percentage and the number of bars between pivots, along with the distance and time from the most recent pivot.
Traders can use this tool to map out potential levels of support and resistance based on historical data on pivot points.
Uptrick: Imbalance MA Trailing System
### **Overview**
The "Uptrick: Imbalance MA Trailing System" is a complex trading indicator designed to help traders identify potential bullish and bearish imbalances in the market, coupled with a trailing stop mechanism to manage trades. The indicator uses a combination of moving averages, Average True Range (ATR), and custom logic to detect trading signals and plot various levels on the chart to assist traders in making informed decisions.
### **Key Components and Functionality**
#### 1. **Inputs and Configuration**
- **Imbalance Filter (`imbalanceFilter`)**: This input sets the filter for detecting imbalances based on the difference between two price points. The value is a float and can be adjusted to fine-tune the sensitivity of imbalance detection. The default value is `0.0`, with a step size of `0.1`.
- **Moving Average Settings (`maLength1`, `maLength2`, `maColor1`, `maColor2`)**:
- `maLength1` and `maLength2` define the lengths of the two moving averages used in the indicator. By default, they are set to `50` and `200` periods, respectively.
- `maColor1` and `maColor2` specify the colors of these moving averages on the chart. The first MA is colored blue, and the second is red.
- **Take Profit and Stop Loss Settings (`displayTP`, `tpMultiplier`, `tpColor`, `displaySL`, `slMultiplier`, `slColor`)**:
- `displayTP` and `displaySL` are boolean inputs that control whether the TP and SL areas are displayed on the chart.
- `tpMultiplier` and `slMultiplier` are multipliers used to calculate the TP and SL levels relative to the detected imbalance level using the ATR value.
- `tpColor` and `slColor` define the colors of these areas. The TP area is green (with a transparency of 50), and the SL area is red (with a transparency of 50).
- **Trailing Stop Settings (`trailMultiplier`)**: This setting determines the multiplier used to calculate the trailing stop level based on the ATR value. The default multiplier is `2.5`.
- **Style Settings (`bullishColor`, `bearishColor`)**:
- `bullishColor` and `bearishColor` set the colors for bullish and bearish zones created when an imbalance is detected. The bullish zone is green, and the bearish zone is red.
- **Signal Label Size (`labelSizeOption`)**: The size of the signal labels displayed on the chart can be adjusted. The options include `Tiny`, `Small`, `Normal`, `Large`, and `Huge`. The selected size affects the visual prominence of the labels.
#### 2. **ATR Calculation (`atrValue`)**
- The ATR value is calculated using a period of 14, which is a standard setting for measuring market volatility. This value is used extensively throughout the indicator to calculate TP, SL, and trailing stop levels.
#### 3. **Imbalance Detection and Zone Creation**
- The indicator detects potential imbalances in the market by comparing certain price points, using a custom function (`imbalanceCondition`).
- **Bullish Imbalance Detection (`bullishSignal`)**:
- A bullish imbalance is detected when the low of three bars ago is higher than the high of one bar ago, and the current close is above the low of three bars ago.
- Additional conditions include checking that the current close is above the calculated average of the two moving averages (`ma1` and `ma2`), and that the imbalance exceeds the threshold set by the `imbalanceFilter`.
- **Bearish Imbalance Detection (`bearishSignal`)**:
- A bearish imbalance is detected under conditions where the low of one bar ago is higher than the high of three bars ago, and the current close is below the high of three bars ago.
- Like the bullish signal, the close must also be below the average of the two moving averages, and the imbalance must exceed the `imbalanceFilter` threshold.
- Upon detection of an imbalance (either bullish or bearish), the indicator creates a zone using `box.new` that highlights the price range of the imbalance. The box color corresponds to the bullish or bearish nature of the signal.
- The center of the imbalance range is marked with a dashed line, and a corresponding label (`🔴` for bearish and `🟢` for bullish) is placed on the chart to indicate the detected signal.
#### 4. **Take Profit and Stop Loss Calculation (`calculateTPSL`)**
- When an imbalance is detected, the indicator calculates potential TP and SL levels based on the ATR value and the respective multipliers.
- If the TP or SL areas are enabled, the indicator plots these areas as colored boxes on the chart.
- The function also tracks whether these levels are hit by subsequent price action, updating the status (`reached`) as appropriate.
#### 5. **Trailing Stop Logic (`applyTrailingStop`)**
- The trailing stop feature is a dynamic mechanism that adjusts the stop level as the price moves in the trader's favor.
- The trailing stop is calculated using the ATR value multiplied by the `trailMultiplier`.
- If the trailing stop is triggered (i.e., the price crosses the trailing stop level), the indicator marks the trade as stopped out.
#### 6. **Plotting and Visualization**
- The indicator plots the two moving averages on the chart with the specified colors and line width.
- If a trailing stop is active, it plots the trailing stop level on the chart, updating as the stop moves.
- The bar color changes based on the status of the current signal and whether the trailing stop or TP/SL levels have been hit.
### **Detailed Execution Flow**
1. **Initialization**: The indicator initializes several variables, including lines, boxes, and the current signal state. This setup ensures that the script can dynamically update these elements as new price data comes in.
2. **Moving Average Calculation**: The moving averages (`ma1` and `ma2`) are calculated using simple moving average (SMA) functions, which are foundational for many of the indicator's conditions.
3. **Imbalance Detection**: The script evaluates price action to detect potential bullish or bearish imbalances, applying filters based on the user-defined `imbalanceFilter`.
4. **Zone Creation and Labeling**: Upon detecting an imbalance, the script creates visual zones on the chart using the `box.new` function and labels the zones for easy identification.
5. **Take Profit and Stop Loss Logic**: The TP and SL areas are calculated and plotted if the relevant settings are enabled. The script continuously checks if these levels are reached as new bars form.
6. **Trailing Stop Calculation**: The script dynamically adjusts the trailing stop level based on the price movement and ATR value. The trailing stop helps lock in profits as the trade progresses.
7. **Plotting**: The moving averages, trailing stop levels, and bar colors are plotted on the chart, providing a visual representation of the indicator's signals and trade management levels.
8. **Final Checks and Updates**: The script concludes each bar's processing by updating the status of various elements, such as whether levels have been reached or if the trailing stop has been triggered.
### **Conclusion**
The "Uptrick: Imbalance MA Trailing System" is a highly versatile indicator designed for traders who want to identify market imbalances and manage their trades effectively using a combination of moving averages, ATR-based calculations, and custom logic. The indicator offers a wide range of customization options, allowing traders to adjust the sensitivity of imbalance detection, the size of the signal labels, and the visibility of various trade management levels (TP, SL, and trailing stop).
The combination of these features makes it a powerful tool for both novice and experienced traders, providing clear visual cues and robust trade management capabilities directly on the chart.
Candlestick Structure [LuxAlgo]The Candlestick Structure indicator detects major market trends and displays various candlestick patterns aligning with the detected trend, filtering out potentially unwanted patterns as a result. Multiple trend detection methods are included and can be selected by the users.
A dashboard showing the alignment percentage of each individual pattern is also provided.
🔶 USAGE
By distinguishing major and minor trend detection, we can still detect patterns based on minor trends, yet filter out the patterns that do not align with the major trend.
By detecting candlestick patterns that align with a major trend, we can effectively detect the ending points of retracements, potentially providing various entry points of interest within a trend.
Users are able to track the alignment of each candlestick pattern in the dashboard to reveal which patterns typically align with the trend and which may not.
Note: Alignment % only checks if the pattern's direction is the same as the current trend direction. These are only raw readings and not any type of confidence score.
🔶 DETAILS
In this indicator, we are identifying and tracking 16 different Candlestick Patterns.
🔹 Bullish Patterns
Hammer: Identified by a small upper wick (or no upper wick) with a small body, and an elongated lower wick whose length is 2X greater than the candle body’s width.
Inverted Hammer: Identified by a small lower wick (or no lower wick) with a small body, and an elongated upper wick whose length is 2X greater than the candle body’s width.
Bullish Engulfing: A 2 bar pattern identified by a large bullish candle body fully encapsulating (opening lower and closing higher) the previous small (bearish) candle body.
Rising 3: A 5 bar pattern identified by an initial full-bodied bullish candle, followed by 3 bearish candles that trade within the high and low of the initial candle, followed by another full-bodied bullish candle closing above the high of the initial candle.
3 White Soldiers: Identified by 3 full-bodied bullish candles, each opening within the body and closing below the high, of the previous candle.
Morning Star: A 3 bar pattern identified by a full-bodied bearish candle, followed by a small-bodied bearish candle, followed by a full-bodied bullish candle that closes above the halfway point of the first candle.
Bullish Harami: A 2 bar pattern, identified by an initial bearish candle, followed by a small bullish candle whose range is entirely contained within the body of the initial candle.
Tweezer Bottom: A 2 bar pattern identified by an initial bearish candle, followed by a bullish candle, both having equal lows.
🔹 Bearish Patterns
Hanging Man: Identified by a small upper wick (or no upper wick) with a small body, and an elongated lower wick whose length is 2X greater than the candle body’s width.
Shooting Star: Identified by a small lower wick (or no lower wick) with a small body, and an elongated upper wick whose length is 2X greater than the candle body’s width.
Bearish Engulfing: A 2 bar pattern identified by a large bearish candle body fully encapsulating (opening higher and closing lower) the previous small (bullish) candle body.
Falling 3: A 5 bar pattern identified by an initial full-bodied bearish candle, followed by 3 bullish candles that trade within the high and low of the initial candle, followed by another full-bodied bearish candle closing below the low of the initial candle.
3 Black Crows: Identified by 3 full-bodied bearish candles, each open within the body and closing below the low, of the previous candle.
Evening Star: A 3 bar pattern identified by a full-bodied bullish candle, followed by a small-bodied bullish candle, followed by a full-bodied bearish candle that closes below the halfway point of the first candle.
Bearish Harami: A 2 bar pattern, identified by an initial bullish candle, followed by a small bearish candle whose range is entirely contained within the body of the initial candle.
Tweezer Top: A 2 bar pattern identified by an initial bullish candle, followed by a bearish candle, both having equal highs.
🔹 Trend Types
Major trend is displayed at all times, the display will change depending on the trend method selected.
The minor trend can also be visualized; to avoid confusion, the minor trend can optionally be displayed through the candle colors.
Supertrend: Displays Upper and Lower SuperTrend, When we break above the upper, it is considered an Uptrend. When we break below the lower, it is considered a Downtrend.
EMAs: Displays Fast and Slow EMAs, When Fast>Slow, it is considered an Uptrend. When Fast<Slow, it is considered a Downtrend.
ChoCh: Displays ChoCh Lines and Labels, When a Bullish ChoCh occurs, it is now considered as an Uptrend. When a Bearish ChoCh occurs, it is now considered a Downtrend.
Donchian Channel: Displays the Highest and Lowest Values, When we break above the Highest, it is considered an Uptrend. When we break below the Lowest, it is considered a Downtrend.
Below is an example of the Change of Character (ChoCh) method of trend detection.
Note: In this description, each screenshot has a different trend method in use, scroll through if you are looking for a specific one.
🔶 SETTINGS
Candlestick Patterns: Choose which candlestick patterns to include in calculations.
Minor Trend Length: Determines the Donchian Channel length to use for minor trend identification.
Major Trend Method: Determines which trend method to use for identifying Major Trend.
Major Trend Parameters: Various inputs for controlling Major trends, depending on the specific method you have selected.
Color Candles: Colors the chart candles based on minor trend.
Dashboard: Control display size and location of Alignment Dashboard.
Fresh Zones The indicator is named "Fresh Zones"
Bullish Fresh Zone:
- This part looks for a specific pattern in the price movement that indicates a potential bullish (upward) trend.
- It checks if the current bar's low price is higher than the previous bar's opening price.
- It also checks if the previous bar's closing price was higher than its opening price.
- Additionally, it checks if the bar before the previous one had a closing price lower than its opening price.
- If all these conditions are met, it identifies a bullish fresh zone.
Bearish Fresh Zone:
- This part looks for a specific pattern in the price movement that indicates a potential bearish (downward) trend.
- It checks if the current bar's high price is lower than the previous bar's opening price.
- It also checks if the previous bar's closing price was lower than its opening price.
- Additionally, it checks if the bar before the previous one had a closing price higher than its opening price.
- If all these conditions are met, it identifies a bearish fresh zone.
Color Coding:
- When a bullish fresh zone is identified, it colors the candlestick from two bars ago with a specific yellowish color (`color.rgb(240, 243, 33)`).
- When a bearish fresh zone is identified, it colors the candlestick from two bars ago with a specific pink color (`color.rgb(255, 0, 191)`).
Alert:
- The script creates an alert condition.
- If either a bullish or bearish fresh zone pattern appears, it triggers an alert with the message "A Fresh zone has appeared!".
Fractals [NT-DIGITALS]Description:
The Fractals Detector indicator in Pine Script version 5 identifies potential turning points using specific candlestick patterns. Fractals are significant in technical analysis as they indicate potential highs or lows in price. A fractal high forms when the highest price of a candlestick is surrounded by two lower highs on either side. Conversely, a fractal low forms when the lowest price of a candlestick is surrounded by two higher lows on either side.
Features:
Detects fractal highs and lows on the chart.
Customizable parameters for the number of bars to the left and right required to form a fractal.
Displays distinct symbols for fractal highs (red upward arrows) and fractal lows (green downward arrows).
Parameters:
Bars to the Left: Number of bars to the left to form a fractal (default: 2).
Bars to the Right: Number of bars to the right to form a fractal (default: 2).
Usage:
This indicator is useful for traders looking to identify potential turning points in prices. Fractals can serve as entry or exit points based on the detected reversals.Description:
The Fractals Detector indicator in Pine Script version 5 identifies potential turning points using specific candlestick patterns. Fractals are significant in technical analysis as they indicate potential highs or lows in price. A fractal high forms when the highest price of a candlestick is surrounded by two lower highs on either side. Conversely, a fractal low forms when the lowest price of a candlestick is surrounded by two higher lows on either side.
Features:
Detects fractal highs and lows on the chart.
Customizable parameters for the number of bars to the left and right required to form a fractal.
Displays distinct symbols for fractal highs (red upward arrows) and fractal lows (green downward arrows).
Parameters:
Bars to the Left: Number of bars to the left to form a fractal (default: 2).
Bars to the Right: Number of bars to the right to form a fractal (default: 2).
Usage:
This indicator is useful for traders looking to identify potential turning points in prices. Fractals can serve as entry or exit points based on the detected reversals.
Trend Deviation strategy - BTC [IkkeOmar]Intro:
This is an example if anyone needs a push to get started with making strategies in pine script. This is an example on BTC, obviously it isn't a good strategy, and I wouldn't share my own good strategies because of alpha decay.
This strategy integrates several technical indicators to determine market trends and potential trade setups. These indicators include:
Directional Movement Index (DMI)
Bollinger Bands (BB)
Schaff Trend Cycle (STC)
Moving Average Convergence Divergence (MACD)
Momentum Indicator
Aroon Indicator
Supertrend Indicator
Relative Strength Index (RSI)
Exponential Moving Average (EMA)
Volume Weighted Average Price (VWAP)
It's crucial for you guys to understand the strengths and weaknesses of each indicator and identify synergies between them to improve the strategy's effectiveness.
Indicator Settings:
DMI (Directional Movement Index):
Length: This parameter determines the number of bars used in calculating the DMI. A higher length may provide smoother results but might lag behind the actual price action.
Bollinger Bands:
Length: This parameter specifies the number of bars used to calculate the moving average for the Bollinger Bands. A longer length results in a smoother average but might lag behind the price action.
Multiplier: The multiplier determines the width of the Bollinger Bands. It scales the standard deviation of the price data. A higher multiplier leads to wider bands, indicating increased volatility, while a lower multiplier results in narrower bands, suggesting decreased volatility.
Schaff Trend Cycle (STC):
Length: This parameter defines the length of the STC calculation. A longer length may result in smoother but slower-moving signals.
Fast Length: Specifies the length of the fast moving average component in the STC calculation.
Slow Length: Specifies the length of the slow moving average component in the STC calculation.
MACD (Moving Average Convergence Divergence):
Fast Length: Determines the number of bars used to calculate the fast EMA (Exponential Moving Average) in the MACD.
Slow Length: Specifies the number of bars used to calculate the slow EMA in the MACD.
Signal Length: Defines the number of bars used to calculate the signal line, which is typically an EMA of the MACD line.
Momentum Indicator:
Length: This parameter sets the number of bars over which momentum is calculated. A longer length may provide smoother momentum readings but might lag behind significant price changes.
Aroon Indicator:
Length: Specifies the number of bars over which the Aroon indicator calculates its values. A longer length may result in smoother Aroon readings but might lag behind significant market movements.
Supertrend Indicator:
Trendline Length: Determines the length of the period used in the Supertrend calculation. A longer length results in a smoother trendline but might lag behind recent price changes.
Trendline Factor: Specifies the multiplier used in calculating the trendline. It affects the sensitivity of the indicator to price changes.
RSI (Relative Strength Index):
Length: This parameter sets the number of bars over which RSI calculates its values. A longer length may result in smoother RSI readings but might lag behind significant price changes.
EMA (Exponential Moving Average):
Fast EMA: Specifies the number of bars used to calculate the fast EMA. A shorter period results in a more responsive EMA to recent price changes.
Slow EMA: Determines the number of bars used to calculate the slow EMA. A longer period results in a smoother EMA but might lag behind recent price changes.
VWAP (Volume Weighted Average Price):
Default settings are typically used for VWAP calculations, which consider the volume traded at each price level over a specific period. This indicator provides insights into the average price weighted by trading volume.
backtest range and rules:
You can specify the start date for backtesting purposes.
You can can select the desired trade direction: Long, Short, or Both.
Entry and Exit Conditions:
LONG:
DMI Cross Up: The Directional Movement Index (DMI) indicates a bullish trend when the positive directional movement (+DI) crosses above the negative directional movement (-DI).
Bollinger Bands (BB): The price is below the upper Bollinger Band, indicating a potential reversal from the upper band.
Momentum Indicator: Momentum is positive, suggesting increasing buying pressure.
MACD (Moving Average Convergence Divergence): The MACD line is above the signal line, indicating bullish momentum.
Supertrend Indicator: The Supertrend indicator signals an uptrend.
Schaff Trend Cycle (STC): The STC indicates a bullish trend.
Aroon Indicator: The Aroon indicator signals a bullish trend or crossover.
When all these conditions are met simultaneously, the strategy considers it a favorable opportunity to enter a long trade.
SHORT:
DMI Cross Down: The Directional Movement Index (DMI) indicates a bearish trend when the negative directional movement (-DI) crosses above the positive directional movement (+DI).
Bollinger Bands (BB): The price is above the lower Bollinger Band, suggesting a potential reversal from the lower band.
Momentum Indicator: Momentum is negative, indicating increasing selling pressure.
MACD (Moving Average Convergence Divergence): The MACD line is below the signal line, signaling bearish momentum.
Supertrend Indicator: The Supertrend indicator signals a downtrend.
Schaff Trend Cycle (STC): The STC indicates a bearish trend.
Aroon Indicator: The Aroon indicator signals a bearish trend or crossover.
When all these conditions align, the strategy considers it an opportune moment to enter a short trade.
Disclaimer:
THIS ISN'T AN OPTIMAL STRATEGY AT ALL! It was just an old project from when I started learning pine script!
The backtest doesn't promise the same results in the future, always do both in-sample and out-of-sample testing when backtesting a strategy. And make sure you forward test it as well before implementing it!
Furthermore this strategy uses both trend and mean-reversion systems, that is usually a no-go if you want to build robust trend systems .
Don't hesitate to comment if you have any questions or if you have some good notes for a beginner.
VPQuantLibLibrary "VPQuantLib"
Misc of math, position size and consolidation detection functions that can be used accross various scripts.
isPercentAboveReference(current, percent, reference, or_equal)
Checks if the current value is bigger (or equal) with the provided percent value to the reference
Parameters:
current (float) : - what to check against the reference
percent (float) : - what is the percent to check for difference
reference (float) : - what to compare against
or_equal (bool) : - enables checking for bigger or equal
Returns: true if the current is percent bigger (or equal) to the reference
isPercentBelowReference(current, percent, reference, or_equal)
Checks if the current value is smaller (or equal) with the provided percent value to the reference
Parameters:
current (float) : - what to check against the reference
percent (float) : - what is the percent to check for difference
reference (float) : - what to compare against
or_equal (bool) : - enables checking for smaller or equal
Returns: true if the current is percent smaller (or equal) to the reference
isInRange(current, reference, min_percent, max_percent, below)
Checks if the current value is greater/smaller than the reference value within the provided percent range
Parameters:
current (float) : - what to check for being in range against the refenence
reference (float) : - what to compare against
min_percent (float) : - the min percent range border
max_percent (float) : - the max percent range border
below (bool) : - check if below or above the reference
@return true if the current is bigger/smaller than the reference withing the percent range provided
GetRiskBasedPositionSize(account_balance, equity_risk_perc, max_loss_per_share)
Calculates and returns the positins size based on risk of the equity
Parameters:
account_balance (float) : - total account balance
equity_risk_perc (int) : - percent of equity to risk in the trade
max_loss_per_share (float) : - maximum loss per share (in currency, not in %) that we're willing to loose (calc based on the entry_price-stop_loss_price)
@return number of shares to buy
CheckInRangeConsolidation(consolidation_period, allowed_consolidation_range, ref_high, ref_low, prev_bar_consolidaton, draw_consolidation_lines)
Checks if the current bar is in a consolidation range
Parameters:
consolidation_period (int) : - the number of bars to consider for consolidation range calculation
allowed_consolidation_range (int) : - the percentage range allowed for the current consolidation range to be considered valid
ref_high (float) : - the reference high value to use for consolidation range calculation
ref_low (float) : - the reference low value to use for consolidation range calculation
prev_bar_consolidaton (bool)
draw_consolidation_lines (bool) : - a boolean indicating if consolidation range lines should be drawn on the chart
@return a tuple of three values:
1. _curr_consolidation - a boolean indicating if the current bar is in consolidation range
2. _curr_consolidation_low - the current consolidation low value
3. _curr_consolidation_high - the current consolidation high value
FindBasicConsolidation(loopback_period, consolidation_length, ref_high, ref_low, draw_consolidation_lines)
Finds a basic consolidation areas, looking back 1000 bars to find the pivot of the trend and checks if the current bar is in consolidation area counting the
number of bars that have not broken the consolidation high/low levels
Parameters:
loopback_period (int) : - the number of bars to look back to determine the high/low watermark
consolidation_length (int) : - minimum number of bars required to establish a consolidation period
ref_high (float) : - user input for high (can be based on the bar or wicks)
ref_low (float) : - user input for high (can be based on the bar or wicks)
draw_consolidation_lines (bool) : - enable/disable drawing of the consolidation lines
Returns: _pivot_point - pivot point
Volume Profile with a few polylinesThe base of "Volume Profile with a few polylines" is another script of mine, Volume Profile (Maps) .
The structure of maps is used to gather the data. However, the drawings is done with polylines.
This enables coders to draw an entire volume profile with just a few polylines, while the range is broader.
This results in the benefit to draw more "lines" than with line.new() / box.new() alone.
🔶 CONCEPTS
🔹 Polylines
polyline.new creates a new polyline instance and displays it on the chart, sequentially connecting all of the points in the `points` array with line segments.
The segments in the drawing can be straight or curved depending on the `curved` parameter.
In this script, points are connected, starting from the bottom. The created line moves up until there is a price level where a volume value needs to be displayed,
at which the line goes to the left to the concerning volume value, coming back at the same price level until the line returns to its initial x-axis,
after which the line will continue to rise until all values are displayed.
A polyline can contain maximum 10000 points (10K).
Since the line has to go back and forth, each price/volume line takes 3 points.
In the case that 20K bars all have a different price, we would need 60K points, or just 6 polylines. A maximum of 100 polylines can be displayed.
The 3 highest volume values are displayed with line.new(), each with their own colour.
🔹 Maps
A map object is a collection that consists of key - value pairs
Each key is unique and can only appear once. When adding a new value with a key that the map already contains, that value replaces the old value associated with the key .
You can change the value of a particular key though, for example adding volume (value) at the same price (key), the latter technique is used in this script.
Volume is added to the map, associated with a particular price (default close, can be set at high, low, open,...)
When the map already contains the same price (key), the value (volume) is added to the existing volume at the associated price.
A map can contain maximum 50K values, which is more than enough to hold 20K bars (Basic 5K - Premium plan 20K), so the whole history can be put into a map.
🔹 Rounding function
This publication contains 2 round functions, which can be used to widen the Volume Profile
Round
• "Round" set at zero -> nothing changes to the source number
• "Round" set below zero -> x digit(s) after the decimal point, starting from the right side, and rounded.
• "Round" set above zero -> x digit(s) before the decimal point, starting from the right side, and rounded.
Example: 123456.789
0->123456.789
1->123456.79
2->123456.8
3->123457
-1->123460
-2->123500
Step
Another option is custom steps.
After setting "Round" to "Step", choose the desired steps in price,
Examples
• 2 -> 1234.00, 1236.00, 1238.00, 1240.00
• 5 -> 1230.00, 1235.00, 1240.00, 1245.00
• 100 -> 1200.00, 1300.00, 1400.00, 1500.00
• 0.05 -> 1234.00, 1234.05, 1234.10, 1234.15
•••
🔶 FEATURES
🔹 Volume * currency
Let's take as example BTCUSD, relative to USD, 10 volume at a price of 100 BTCUSD will be very different than 10 volume at a price of 30000 (1K vs. 300K)
If you want volume to be associated with USD, enable Volume * currency . Volume will then be multiplied by the price:
• 10 volume, 1 BTC = 100 -> 1000
• 10 volume, 1 BTC = 30K -> 300K
Polylines has the attributes curved & closed.
When "curved" is enabled the drawing will connect all points from the `points` array using curved line segments.
When "closed" is enabled the drawing will also connect the first point to the last point from the `points` array, resulting in a closed polyline.
They are default disabled, but can be enabled:
🔶 DETAILS
🔹 Put
When the map doesn't contain a price, it will be added, using map.put(id, key, value)
In our code:
map.put(originalMap, price, volume)
or
originalMap.put(price, volume)
A key (price) is now associated with a value (volume) -> key : value
Since all keys are unique, we don't have to know its position to extract the value, we just need to know the key -> map.get(id, key)
We use map.get() when a certain key already exists in the map, and we want to add volume with that value.
if originalMap.contains(price)
originalMap.put(price, originalMap.get(price) + volume)
-> At the last bar, all prices (source) are now associated with volume.
🔶 SETTINGS
Source : Set source of choice; default close , can be set as high , low , open , ...
Volume & currency : Enable to multiply volume with price (see Features )
Amount of bars : Set amount of bars which you want to include in the Volume Profile
🔹 Round -> ' Round/Step '
Round -> see Concepts
Step -> see Concepts
🔹 Display Volume Profile
Offset: shifts the Volume Profile (max. 500 bars to the right of last bar, see Features )
Max width Volume Profile: largest volume will be x bars wide, the rest is displayed as a ratio against largest volume (see Features )
Colours
Curved: make lines curved
Closed: connect last with first point
🔶 LIMITATIONS
• Lines won't go further than first bar (coded).
• The Volume Profile can be placed maximum 500 bar to the right of last price.
Multiperiod Volume Pressure Indicator
Description:
The Volume Pressure Indicator is a powerful tool designed to assess market sentiment based on a combination of price and volume data. By analyzing buy and sell pressure within specific lookback periods, this indicator provides valuable insights into the intensity of market buying and selling activities. Traders can use this information to make informed decisions, especially during periods of price consolidation or trend reversal.
Key Features:
- **Multi-Period Analysis:** Utilizes multiple lookback periods (1, 2, and 4) to calculate buy and sell pressures, offering a nuanced view of market dynamics over different timeframes.
- **Pressure Calculation:** Computes buy and sell pressures based on price range and closing values, providing a comprehensive understanding of market participant behavior.
- **Color-Coded Bars:** Visualizes market sentiment by coloring bars according to the number of positive (buy pressure > sell pressure) periods observed within the specified lookback periods.
How to Use:
- **Color Coding:** Green bars represent periods where buy pressure dominates, indicating potential buying interest. Yellow bars suggest a balance between buy and sell pressures. Red bars signal periods dominated by sell pressure, indicating potential selling interest.
- **Lookback Periods:** Shorter lookback periods (e.g., 1) offer insights into immediate market sentiment, while longer periods (e.g., 4) provide a broader perspective. Analyzing multiple periods can help traders confirm trends and anticipate reversals.
Customization:
- **Lookback Periods:** Adjust the length of the lookback periods (1, 2, and 4) to match your trading style and timeframe preferences.
Disclaimer:
Trading involves risk, and past performance is not indicative of future results. Always conduct thorough analysis and apply proper risk management techniques before making trading decisions.
Usage Scenarios:
- **Trend Confirmation:** Use the indicator to confirm the strength of an ongoing trend. Consistent green bars can validate a bullish trend, while red bars may confirm a bearish trend.
- **Reversal Signals:** Look for transitions in bar colors to identify potential trend reversals. A shift from green to yellow/red or vice versa can indicate changing market sentiment.
- **Divergence Analysis:** Compare price movements with the indicator's bar colors. Divergence between price trends and bar colors may signal upcoming price movements.
Interactive MA Stop Loss [TANHEF]This indicator is "Interactive." Once added to the chart, you need to click the start point for the moving average stoploss. Dragging it afterward will modify its position.
Why choose this indicator over a traditional Moving Average?
To accurately determine that a wick has crossed a moving average, you must examine the moving average's range on that bar (blue area on this indicator) and ensure the wick fully traverses this area.
When the price moves away from a moving average, the average also shifts towards the price. This can make it look like the wick crossed the average, even if it didn't.
How is the moving average area calculated?
For each bar, the moving average calculation is standard, but when the current bar is involved, its high or low is used instead of the close. For precise results, simply setting the source in a typical moving average calculation to 'Low' or 'High' is not sufficient in calculating the moving average area on a current bar.
Moving Average Options:
Simple Moving Average
Exponential Moving Average
Relative Moving Average
Weighted Moving Average
Indicator Explanation
After adding indicator to chart, you must click on a location to begin an entry.
The moving average type can be set and length modified to adjust the stoploss. An optional profit target may be added.
A symbol is display when the stoploss and profit target are hit. If a position is create that is not valid, "Overlapping MA and Bar" is displayed.
Alerts
'Check' alerts to use within indicator settings (stop hit and/or profit target hit).
Select 'Create Alert'
Set the condition to 'Interactive MA''
Select create.
Alert messages can have additional details using these words in between two Curly (Brace) Brackets:
{{stop}} = MA stop-loss (price)
{{upper}} = Upper MA band (price)
{{lower}} = Lower MA band (price)
{{band}} = Lower or Upper stoploss (word)
{{type}} = Long or Short stop-loss (word)
{{stopdistance}} = Stoploss Distance (%)
{{targetdistance}} = Target Distance (%)
{{starttime}} = Start time of stoploss (day:hour:minute)
{{maLength}} = MA Length (input)
{{maType}} = MA Type (input)
{{target}} = Price target (price)
{{trigger}} = Wick or Close Trigger input (input)
{{ticker}} = Ticker of chart (word)
{{exchange}} = Exchange of chart (word)
{{description}} = Description of ticker (words)
{{close}} = Bar close (price)
{{open}} = Bar open (price)
{{high}} = Bar high (price)
{{low}} = Bar low (price)
{{hl2}} = Bar HL2 (price)
{{volume}} = Bar volume (value)
{{time}} = Current time (day:hour:minute)
{{interval}} = Chart timeframe
{{newline}} = New line for text
I will add further moving averages types in the future. If you suggestions post them below.
Realtime Divergence for Any Indicator - By John BartleThe main purpose of this script is to show historical and real-time divergences for any oscillating indicator. The secondary purpose is to give the user a lot of precise control over identifying divergences and determining what they are. This is an improved version of my other script which is similarly called "Realtime Divergence for Any Indicator"
There are four types of divergences that are offered:
Bull divergence
Hidden bull divergence
Bear divergence
Hidden Bear divergence
There are three types of potential(real-time) divergences which include:
1) Without right side bars for rightside pivots. Plus without waiting for the rightside pivot bar to complete
2) Without right side bars for rightside pivots. Plus with waiting for the rightside pivot bar to complete
3) With right side bars for rightside pivots. Plus without waiting for the rightside pivot right-most bar to complete
A definite divergence occurs when all specified bars are accounted for and fully formed.
Potential divergences use dashed lines and definite(historical) divergences use solid lines.
In addition to several other categories of settings to filter out unwanted divergences or manipulate the search process, this script also offers Alerts. Remember that alerts must not only be set within this scripts settings but also your "Alerts" panel on your right. It's strange but BOTH must be set for alerts to work...
Other interesting Things To Know:
1)I actually don't trade and so I have no need of a paid account. Unpaid accounts don't have the playback feature so I haven't really tested this script out very well. Sorry. Just let me know if something seems off and IF I have time I'll try to fix it.
2)Keep in mind that Pinescript limits the number of lines that can be shown at one time. This means that if your settings allow for a large number of divergence lines they will be removed from the leftward side of your chart but appear in the rightward side.
3) The time and the values for the price or oscillator are not the same things as each other nor are they physical things with physical space. This means that slopes of lines using the time as X and value as Y can not have definite angles. Consequently, under the setting "DIVERGENCES: SLOPE ANGLE EXCLUSION" YOU have to decide what slope equals what angle by using the setting called "Normalization Factor".
4) Remember that some individual settings apply to both the oscillator and price chart. This means that even if the setting's conditions are fulfilled in one they may not be fulfilled in the other.
5) Under the category "DIVERGENCES: INTERSECTION ALLOWANCE", if you set the "Measurement Type" to Relative Percentage then FYI any single given length will equate to an increasingly smaller percentage the further away from zero it is. Because of this, I think "Reletive Percentage" is probably only useful for price charts or oscillators with big values. Maybe >200 is OK ?
Errors:
1) If you get the error mentioning that the script must complete execution within X amount of time, this is because this is a big script and sometimes takes longer than your service plan's allotted time limit. You can just disable some of the settings to reduce the scripts amount of work and time. The biggest time savers will be to disable some lines and labels
2) If you get an error saying the script accessed a negative index(e.g. ) then try temporarily increasing the "Add More Array Elements" setting to 100-200. Sometimes it fixes the problem.
3) You may sometimes temporarily get an error that reads: "Pine cannot determine the referencing length of a series. Try using max_bars_back in the study or strategy function".
If this happens there are several things that you can do:
3A) Create a copy of my script. Then edit the section of code that looks like this ")//, max_bars_back = INSERT_YOUR_QUANTITY_HERE)" and transform it to look like this new code ", max_bars_back = INSERT_YOUR_QUANTITY_HERE)" then repeatedly try replacing "INSERT_YOUR_QUANTITY_HERE" with an increasingly larger number greater than 244 but less than 5000.
This method will increase your system resources and could cause other problems. Try changing the code back after a few hours and see if all is well again. It is a Pinescript limitation issue and happens when certain functions or variables don't get used at least once within the first 244 bars.
3B) Adjust your settings to hopefully find a divergence within the first 244 bars. If one is found then the problematic variables or functions should get used and the Pinescript 244 bar limitation should be temporarily resolved.
3C) Wait for X number of new bars to occur. If a divergence is eventually found within the first 244 bars that should solve the issue.
Tips:
1) If the amount that a setting changes value is undesirable for each time you click it then you can change that amount in the code. To do that, you'll need your own copy of my script. To make your own copy just click on "create a working copy" in the brown colored strip area above the code. Then within approximately the first 108 lines find the title of the setting you want to change. Then look to it's right to find the parameter called "step =". Change what the step equals to whatever you want. FYI, you can hover your mouse over the blue colored code and a popup will tell you what parameters(i.e. settings) that function(e.g. "input.int()") has available.
Directional Volume EStimate from Price Action (RedK D_VESPA)The "Directional Volume EStimate from Price Action (RedK D_VESPA)" is another weapon for the VPA (Volume Price Analysis) enthusiasts and traders who like to include volume-based insights & signals to their trading. The basic concept is to estimate the sell and buy split of the traded volume by extrapolating the price action represented by the shape of the associated price bar. We then create and plot an average of these "estimated buy & sell volumes" - the estimated average Net Volume is the balance between these 2 averages.
D_VESPA uses clear visualizations to represent the outcomes in a less distracting and more actionable way.
How does D_VESPA work?
-------------------------------------
The key assumption is that when price moves up, this is caused by "buy" volume (or increasing demand), and when the price moves down, this is due to "selling" volume (or increasing supply). Important to note that we are making our Buy/sell volume estimates here based on the shape of the price bar, and not looking into lower time frame volume data - This is a different approach and is still aligned to the key concepts of VPA.
Originally this work started as an improvement to my Supply/Demand Volume Viewer (V.Viewer) , I ended up re-writing the whole thing after some more research and work on VPA, to improve the estimation, visualization and usability / tradability.
Think of D_VESPA as the "Pro" version of V.Viewer -- and please go back and review the details of V.Viewer as the root concepts are the same so I won't repeat them here (as it comes to exploring Balance Zone and finding Price Convergence/Divergence)
Main Features of D_VESPA
--------------------------------------
- Update Supply/Demand calculation to include 2-bar gaps (improved algo)
- Add multiple options for the moving average (MA type) for the calculation - my preference is to use WMA
- Add option to show Net Volume as 3-color bars
- Visual simplification and improvements to be less distracting & more actionable
- added options to display/hide main visuals while maintaining the status line consistency (Avg Supply, Avg Demand, Avg Net)
- add alerts for NetVol moving into Buy (crosses 0 up) or Sell (crosses 0 down) modes - or swing from one mode to the other
(there are actually 2 sets of alerts, one set for the main NetVol plot, and the other for the secondary TF NetVol - give user more options on how to utilize D_VESPA)
Quick techie piece, how does the estimated buy/sell volume algo work ?
------------------------------------------------------------------------------------------
* per our assumption, buy volume is associated with price up-moves, sell volume is associated with price down-moves
* so each of the bulls and bears will get the equivalent of the top & bottom wicks,
* for up bars, bulls get the value of the "body", else the bears get the "body"
* open gaps are allocated to bulls or bears depending on the gap direction
The below sketch explains how D_VESPA estimates the Buy/Sell Volume split based on the bar shape (including gap) - the example shows a bullish bar with an opening gap up - but the concept is the same for a down-bar or a down-gap.
I kept both the "Volume Weighted" and "2-bar Gap Impact" as options in the indicator settings - these 2 options should be always kept selected. They are there for those who would like to experiment with the difference these changes have on the buy/sell estimation. The indicator will handle cases where there is no volume data for the selected symbol, and in that case, it will simply reflect Average Estimated Bull/Bear ratio of the price bar
The Secondary TF Est Average Net Volume:
---------------------------------------------------------
I added the ability to plot the Estimate Average Net Volume for a secondary timeframe - options 1W, 1D, 1H, or Same as Chart.
- this feature provides traders the confidence to trade the lower timeframes in the same direction as the prevailing "market mode"
- this also adds more MTF support beyond the existing TradingView's built-in MTF support capability - experiment with various settings between exposing the indicator's secondary TF plot, and changing the TF option in the indicator settings.
Note on the secondary TF NetVol plot:
- the secondary TF needs to be set to same as or higher TF than the chart's TF - if not, a warning sign would show and the plot will not be enabled. for example, a day trader may set the secondary TF to 1Hr or 1Day, while looking at 5min or 15min chart. A swing/trend trader who frequently uses the daily chart may set the secondary TF to weekly, and so on..
- the secondary TF NetVol plot is hidden by default and needs to be exposed thru the indicator settings.
the below chart shows D_VESPA on a the same (daily) chart, but with secondary TF plot for the weekly TF enabled
Final Thoughts
-------------------
* RedK D_VESPA is a volume indicator, that estimates buy/sell and net volume averages based on the price action reflected by the shape of the price bars - this can provide more insight on volume compared to the classic volume/VolAverage indicator and assist traders in exploring the market mode (buyers/sellers - bullish/bearish) and align trades to it.
* Because D_VESPA is a volume indicator, it can't be used alone to generate a trading signal - and needs to be combined with other indicators that analysis price value (range), momentum and trend. I recommend to at least combine D_VESPA with a variant of MACD and RSI to get a full view of the price action relative to the prevailing market and the broader trend.
* I found it very useful to take note and "read" how the Est Buy vs Est Sell lines move .. they sort of "tell a story" - experiment with this on your various chart and note the levels of estimate avg demand vs estimate avg supply that this indicator exposes for some very valuable insight about how the chart action is progressing. Please feel free to share feedback below.
Limit Order + ATR Stop-Loss [TANHEF]This indicator enables interactive placement of limit or stop-limit orders with a trailing ATR stop-loss and optional profit target (with alerts). Refer to the images below for further clarification.
Why use a trailing stop-loss?
A trailing stop-loss serves as an exit strategy when price moves against you, while also allowing you to adjust the exit point further into profit when price moves favorably. The ATR (Average True Range), a reliable measure of volatility, acts as an effective risk management tool, functioning as a trailing stop-loss.
Indicator Explanation
Initial indicator placement: Select Long Limit or Long-Stop Limit order.
Change Entry Type: Switch between Long and Short within settings.
Modify entry price: Drag circle, adjust in settings, or re-add indicator to chart.
Optional Profit Target: Use Risk/Reward ratio or specify price.
Entry anticipation: Estimated ATR stop-loss and profit target as blue circles (fluctuates with volatility changes).
Entry triggered: Actual ATR stop-loss and profit target plotted.
Exit conditions: Stop-loss or profit target hit, exit entry.
Update Frequency: Continuously, Bar Open, or Bar Open on entry then continuously.
ATR Overlap: no entry occurs if the ATR overlaps with price (stop-loss 'hit' already on entry bar)
Table: Displays input settings selected.
Show Only On Ticker: Ability to hide indicator on other tickers.
Long Limit
Long Stop-Limit
Short Limit
Short Stop-Limit
Alerts
1. 'Check' alerts to use within indicator settings (entry, trailing stop hit, profit target hit, and failed entry).
2. Select 'Create Alert'
3. Set the condition to 'Limit Order + ATR Stop-Loss''
4. Select create.
Additional details can be added to the alert message using these words in between Curly (Brace) Brackets:
{{trail}} = ATR trailing stop-loss (price)
{{target}} = Price target (price)
{{type}} = Long or Short stop-loss (word)
{{traildistance}} = Trailing Distance (%)
{{targetdistance}} = Target Distance (%)
{{starttime}} = Start time of position (day:hr:min)
{{maxdrawdown}} = max loss
{{maxprofit}} = max profit
{{update}} = stoploss update frequency
{{entrysource}} = entry as 1st bar source (yes/no)
{{triggerentry}} = Wick/Close Trigger entry input
{{triggerexit}} = Wick/Close Trigger exit input
{{triggertarget}} = Wick/Close Trigger target input
{{atrlength}} = ATR length input
{{atrmultiplier}} = ATR multiplier input
{{atrtype}} = ATR type input
{{ticker}} = Ticker of chart (word)
{{exchange}} = Exchange of chart (word)
{{description}} = Description of ticker (words)
{{close}} = Bar close (price)
{{open}} = Bar open (price)
{{high}} = Bar high (price)
{{low}} = Bar low (price)
{{hl2}} = Bar HL2 (price)
{{volume}} = Bar volume (value)
{{time}} = Current time (day:hr:min)
{{interval}} = Chart timeframe
{{newline}} = New line for text
Volume Candlesticks [cajole]
This script lets you create the equivalent of "volume candlesticks" in TradingView.
"Volume candlesticks" normally vary their width according to the bar's volume. This script varies COLOUR instead of WIDTH.
Bar charts are also supported.
Candles/Bars are coloured by their distance from the average volume. You can also add a "huge volume" colour to further highlight the most extremely-high volume bars.
Note that volume is extrapolated for incomplete bars by default. So, if the average volume of the past 10 days is 5M shares, and 5M shares trade in the first 10% of today's session, that bar will be coloured as though 50M shares have traded. Set the "Extrapolate" option to 1.0 to disable this.
For this script to work properly, you should set TradingView's default candle/bar colours to be at least 20% transparent. By default, TradingView tends to overlay its own bars on top of indicators.
Nerdy details:
The script works best on a dark background, because it is easier to change the hue of white bars than of black bars. If you find a set of colours that work for white backgrounds, please comment with them!
The geometric mean is used instead of the arithmetic mean, to keep the 'average' from being strongly influenced by spikes. Bars are
then coloured by assuming a normal probability distribution and highlighting outliers. (This means that the first high-volume bars are coloured differently to later ones.)
Fair Value Gap - FVG - HistogramThis indicator uses a histogram to represent "fair value gaps" ("FVG"). FVG is a popular pattern among modern traders.
This document describes the purpose of the script and discusses the conceptual meaning of "fair value," as well as the connotations attached to it.
█🚀 Based on the previous script - improved clarity
This indicator is a modified version of the "Three Bar Gap (Simple Price Action - with 1 line plot)" indicator, which is also available as open source and can be applied to a chart as a complementary tool along with this indicator.
Differences:
The previous version introduced a "Threshold filter" to reduce the number of lines plotted on charts. This filter introduced two additional parameters for users to consider (ATR length and multiplier). These parameters made the indicator more complicated than intended.
To address this issue of having too many lines in the former version, I proposed a spin-off on this version: It's to consider plotting the magnitude of the FVGs on a histogram instead of using lines on a price chart. In my opinion, a histogram is more suitable for decision-making because it lays out data points side-by-side as bins, which makes comparisons much clearer.
Minor FVGs are expected to have smaller bins compared to their neighboring bins, and in extreme cases, the bins will become seemingly invisible due to the auto-adjusted scale of the y-axis. Therefore, there is no need to filter out any data, and all FVGs can be included in this spin-off version.
█🚀 Candlestick patterns - revisited
This script calculates the displacement of highs and lows over three consecutive bars.
A) Down move: When the high of the recent-confirmed bar is lower than the low of the previous-previous candle.
B) Up move: When the low of the recently-confirmed bar is higher than the high of the previous-previous candle.
█🚀 Parameters
Core Functionality
The purpose of this indicator is to generate bins representing the magnitude of FVGs in the form of a histogram to facilitate the visualization of price movements.
The act of "finding FVGs" does not require any inputs, but users can still customize the colors of the bins to indicate the direction of movement.
Auxiliary functionality: “Key level finder” by searching for large FVGs
The following inputs are optional, in fact, the entire feature can be toggled on/off.
In this example, setting the lookback at 20 means the script will generate a signal if the current histogram bin is taller than all previous bins over the past 20 bars.
█🚀 Applications
Tall histogram bins = key levels .
Traders should observe key levels for entry or exit opportunities.
It is important to note that this indicator was designed for standard time-based charts.
On a separate note, FVGs will not appear in Renko charts with fixed-size bricks. This is because the bricks align with their neighboring bricks. When the bricks are fixed, any displacement between highs and lows within less than or equal to three bars will be zero.
The concept of a "gap" is used to illustrate that price follows a jump-diffusion process, and time intervals can be assigned arbitrarily on the x-axis without needing fixed intervals. This idea was briefly discussed in the previous script's write-up.
█🚀 FAQ: Does it repaint?
No. And please continue reading.
Bins are plotted with a one-bar delay. It only takes one bar for the FVG to become confirmed. Lag is beneficial because it clarifies the need for traders to wait for the bar to close and for the signals to become confirmed before entering or exiting a trade. Experienced traders know that prices tend to retrace, so there is no need to chase. An added bar of delay proves to be useful.
█🚀 Opinion: The term “fair value” can be misleading
Those who come from traditional finance may find the term "fair value gap" somewhat insulting. When encountering the phrase, it can feel like a group of aliens from "Planet Technical Analysis" have intrusively landed on your planet and assertively redefined what "fair value" is supposed to mean.
So, what does "fair value" mean in the realm of technical analysis?
In the world of corporate finance, "fair value" is a subjective estimate of what buyers and sellers are hypothetically willing to pay or accept. Buy-side and sell-side analysts use their own methodologies to determine what constitutes "fair value". These approaches may be based on income, asset, or market comparables. Regardless of the approach used, subjectivity is inherent, and results depend on fundamental data provided by the numbers on financial statements. Valuations are unrelated to candlestick patterns .
When dealing with financial statements, finance professionals who are non-market-participants, such as those working in group reporting practices for reporting issuers, or those hired as external auditors, as required by regulators, may also question what constitutes "fair value". The main concerns always revolve around the assumptions used in valuation models; these are inputs that ultimately require management's judgment, and if not critically questioned, valuations as reported in the statements could end up becoming materially bogus. Both IFRS and U.S. GAAP define "fair value" with the same intended meaning in terms of definitions. We will not delve into the details here. The main point is that "fair value" from a financial reporting perspective has nothing to do with candlesticks .
If a price is already quoted in an actively traded market, you can refer to it to obtain what is known as "mark-to-market". This involves simply referring to the bid or ask price on the reporting date, and you're done - there's no need to read candlesticks !
"Fair value" is a neutral term used by finance professionals in all domains. It is not meant to imply that something is actually "fair." Paying the "fair value" for an asset can still result in overpaying or underpaying for what the asset is worth, depending on different model assumptions. The point is, candlesticks are irrelevant to the analysis of what is considered "fair value" in the realm of traditional finance.
That being said, there is no definitive answer as to why people refer to this pattern as a "fair value gap". It's like one of those oddball interview questions asking you to explain why tennis balls are fuzzy. Whatever answer you give, it's important to note that the subject itself is trivial.
Emphasis of matter on why "fair value" can be misleading
The previous paragraphs were not intended to attack ideas from the realm of technical analysis, nor to assert the true meaning, or lack of meaning, of the term "fair value". Words are constantly evolving. If the term "fair value gap" becomes more widely used to describe the displacement of highs and lows over three bars, then let's call it a "fair value gap".
To be clear, I argue that the term "fair value gap" should not be given a positive connotation. Traders should interpret the word "fair" neutrally. Although these signals occur frequently, if you trade every time there is a signal, you will overtrade and incur astronomical transaction costs over the long run, which can lead to losses.
█🚀 Conclusion:
In the end, what matters is how you apply FVG to trading. As mentioned in the "Applications" section above, traders should look for large FVGs - indicated by tall histogram bins - to identify key levels.
MARS - Moving Average Relative StrengthThe original idea from this script is from the script " Percentage Relative Strength " by dman103 . The original script compared a symbol to an index by their everyday percentage change. The symbol percentage was subtracted from percentage change of the index, & the results were then smoothed by moving averages.
Instead of daily percentage changes, this script directly calculates relative strength via a moving average. We call this simpler approach as MARS (Moving Average Relative Strength) .
MARS compares a symbol to the index by making use of the price's distance from a moving average. By default, we compare the distance from the 50-day simple moving average of the stock vs that of the index. Both the type & the length of the moving average is customisable.
Background color indicates the index being above or below its moving average.
Blue background: index is above its moving average
Pink background: index is below its moving average
The histogram indicates whether the stock is under-performing or out-performing the index.
Up-bars : stock is out-performing the index i.e. between the stock & the index, the difference between the distance to/from the 50-day moving average is a positive value.
Down-bars : stock is under-performing the index i.e. between the stock & the index, the difference between the distance to/from the 50-day moving average is a negative value.
The color of the histogram indicates the type of out-performance or under-performance. There can be a total of 6 such colors:
Relative out-performance : both index & stock are bearish, but stock is less bearish. The script prints light green up-bars on a pink background.
Gross out-performance : both index & stock are bullish, but stock is more bullish. The script prints green up-bars on a blue background.
Absolute out-performance : index is bearish, but stock is bullish! The script prints blue up-bars on a pink background.
Relative under-performance : both index & stock are bullish, but stock is less bullish. The script prints light red bars on a blue background.
Gross under-performance : both index & stock are bearish, but stock is more bearish. The script prints dark red bars on a pink background.
Absolute under-performance : index is bullish, but stock is bearish! The script prints black down-bars on a blue background.
Additional customisation options:
Paint bars option changes the bar colors to mirror the histogram colors.
Easy colors option just changes the histogram colors to either blue or pink, indicating out-performance or under-performance, respectively. This is when the trader does not wish to demarcate between the above-mentioned 6 conditions.