Custom ATR Trailing StopThis Script creates a custom ATR (Average True Range) trailing stop. It allows traders to set up automated stop-loss levels based on the ATR, which adjusts dynamically to market volatility. The script is designed to support both long and short trades, offering flexibility and precision in trade management.
When loading the indicator to your chart, simply click to set the trade begining time, confirm various settings and you are set.
Check tooltips for more details in the input settigns menu.
User Inputs
Trade Setup: Allows users to set the trade direction (Long or Short), the signal source for entries, and the specific bar time for the trade setup.
ATR Settings: Configurable ATR lookback period, ATR smoothing period, initial ATR multiplier for setting the stop-loss, breakeven ATR multiplier, and a manual breakeven level.
ATR Calculations
Computes the ATR and its moving average.
Determines initial and breakeven stop levels based on the ATR.
Signal Validation
Validates long or short trade signals based on the specified bar time and trade direction.
Triggers alerts when a valid trade signal is detected.
Trailing Stop Logic
For long trades, adjusts the stop-loss level dynamically based on the ATR.
For short trades, performs similar adjustments in the opposite direction.
Updates the trailing stop level to ensure it follows the price, moving closer as the price moves favorably.
Resets the trade state when the stop-loss is hit, triggering an alert.
Plotting
Plots the trailing stop levels on the chart.
Uses green for stop levels indicating profit and red for stop levels indicating a loss.
Volatilty
Internal Bar Strength IBS [Anan]This indicator calculates and displays the Internal Bar Strength (IBS) along with its moving average. The IBS is a measure that represents where the closing price is relative to the high-low range of a given period.
█ Main Formula
The core of this indicator is the Internal Bar Strength (IBS) calculation. The basic IBS formula is:
ibs = (close - low) / (high - low)
I enhanced the original formula by incorporating a user-defined length parameter. This modification allows for greater flexibility in analysis and interpretation. The extended version enables users to adjust the indicator's length according to their specific needs or market conditions. Notably, setting the length parameter to 1 reproduces the behavior of the original formula, maintaining backward compatibility while offering expanded functionality:
ibs = (close - ta.lowest(low, ibs_length)) / (ta.highest(high, ibs_length) - ta.lowest(low, ibs_length))
Where:
- `close` is the closing price of the current bar
- `lowest low` is the lowest low price over the specified IBS length
- `highest high` is the highest high price over the specified IBS length
█ Key Features
- Calculates IBS using a user-defined length
- Applies a moving average to the IBS values
- Offers multiple moving average types
- Includes optional Bollinger Bands or Donchian Channel overlays
- Visualizes bull and bear areas
█ Inputs
- IBS Length: The period used for IBS calculation
- MA Type: The type of moving average applied to IBS (options: SMA, EMA, SMMA, WMA, VWMA, Bollinger Bands, Donchian)
- MA Length: The period used for the moving average calculation
- BB StdDev: Standard deviation multiplier for Bollinger Bands
█ How to Use and Interpret
1. IBS Line Interpretation:
- IBS values range from 0 to 1
- Values close to 1 indicate the close was near the high, suggesting a bullish sentiment
- Values close to 0 indicate the close was near the low, suggesting a bearish sentiment
- Values around 0.5 suggest the close was near the middle of the range
2. Overbought/Oversold Conditions:
- IBS values above 0.8 (teal zone) may indicate overbought conditions
- IBS values below 0.2 (red zone) may indicate oversold conditions
- These zones can be used to identify potential reversal points
3. Trend Identification:
- Consistent IBS values above 0.5 may indicate an uptrend
- Consistent IBS values below 0.5 may indicate a downtrend
4. Using Moving Averages:
- The yellow MA line can help smooth out IBS fluctuations
- Crossovers between the IBS and its MA can signal potential trend changes
5. Bollinger Bands/Donchian Channel:
- When enabled, these can provide additional context for overbought/oversold conditions
- IBS touching or exceeding the upper band may indicate overbought conditions
- IBS touching or falling below the lower band may indicate oversold conditions
Remember that no single indicator should be used in isolation. Always combine IBS analysis with other technical indicators, price action analysis, and broader market context for more reliable trading decisions.
Pivot WebThe Pivot Web is a prototype with its base derived from TradingView's standard pivot point indicator plus inspiration from LuxAlgo's trendline work alongside my own observations/experiences.
The theory is that there's legitimacy, from a technical standpoint, pivot point calculations are an adequate gauge of momentum and sentiment because the same math was used under pressure by floor traders themselves. That calculation is centered on the average of high, low, and closing prices. This indicator creates trendlines connecting the last pivot, support, and resistance levels to the current ones. A dynamic visual cue could make it easier to assess if the price will continue or reverse the current trajectory. This method also shows us an excellent visual for volatility.
Key Takeaways:
This indicator draws new dynamic trendlines.
These new trendlines connect the past and present pivot point levels based on the timeframe you select.
Shorter timeframes = More trendlines
Price adherence to the path of these lines may offer insight for trading.
Lastly, note the first set of data in each new timeframe displays the current original pivot point levels along with the trendlines attached to their ending point. Most of the time this indicator leaves room by briefly highlighting the original static levels with all levels also being optional displays. Also note that a more stable asset may not require the outermost support and resistance levels. Like most time series analysis tools, the Pivot Web requires current data to function properly.
"Nature is pleased with simplicity, and nature is no dummy."
RiskMetrics█ OVERVIEW
This library is a tool for Pine programmers that provides functions for calculating risk-adjusted performance metrics on periodic price returns. The calculations used by this library's functions closely mirror those the Broker Emulator uses to calculate strategy performance metrics (e.g., Sharpe and Sortino ratios) without depending on strategy-specific functionality.
█ CONCEPTS
Returns, risk, and volatility
The return on an investment is the relative gain or loss over a period, often expressed as a percentage. Investment returns can originate from several sources, including capital gains, dividends, and interest income. Many investors seek the highest returns possible in the quest for profit. However, prudent investing and trading entails evaluating such returns against the associated risks (i.e., the uncertainty of returns and the potential for financial losses) for a clearer perspective on overall performance and sustainability.
One way investors and analysts assess the risk of an investment is by analyzing its volatility , i.e., the statistical dispersion of historical returns. Investors often use volatility in risk estimation because it provides a quantifiable way to gauge the expected extent of fluctuation in returns. Elevated volatility implies heightened uncertainty in the market, which suggests higher expected risk. Conversely, low volatility implies relatively stable returns with relatively minimal fluctuations, thus suggesting lower expected risk. Several risk-adjusted performance metrics utilize volatility in their calculations for this reason.
Risk-free rate
The risk-free rate represents the rate of return on a hypothetical investment carrying no risk of financial loss. This theoretical rate provides a benchmark for comparing the returns on a risky investment and evaluating whether its excess returns justify the risks. If an investment's returns are at or below the theoretical risk-free rate or the risk premium is below a desired amount, it may suggest that the returns do not compensate for the extra risk, which might be a call to reassess the investment.
Since the risk-free rate is a theoretical concept, investors often utilize proxies for the rate in practice, such as Treasury bills and other government bonds. Conventionally, analysts consider such instruments "risk-free" for a domestic holder, as they are a form of government obligation with a low perceived likelihood of default.
The average yield on short-term Treasury bills, influenced by economic conditions, monetary policies, and inflation expectations, has historically hovered around 2-3% over the long term. This range also aligns with central banks' inflation targets. As such, one may interpret a value within this range as a minimum proxy for the risk-free rate, as it may correspond to the minimum rate required to maintain purchasing power over time.
The built-in Sharpe and Sortino ratios that strategies calculate and display in the Performance Summary tab use a default risk-free rate of 2%, and the metrics in this library's example code use the same default rate. Users can adjust this value to fit their analysis needs.
Risk-adjusted performance
Risk-adjusted performance metrics gauge the effectiveness of an investment by considering its returns relative to the perceived risk. They aim to provide a more well-rounded picture of performance by factoring in the level of risk taken to achieve returns. Investors can utilize such metrics to help determine whether the returns from an investment justify the risks and make informed decisions.
The two most commonly used risk-adjusted performance metrics are the Sharpe ratio and the Sortino ratio.
1. Sharpe ratio
The Sharpe ratio , developed by Nobel laureate William F. Sharpe, measures the performance of an investment compared to a theoretically risk-free asset, adjusted for the investment risk. The ratio uses the following formula:
Sharpe Ratio = (𝑅𝑎 − 𝑅𝑓) / 𝜎𝑎
Where:
• 𝑅𝑎 = Average return of the investment
• 𝑅𝑓 = Theoretical risk-free rate of return
• 𝜎𝑎 = Standard deviation of the investment's returns (volatility)
A higher Sharpe ratio indicates a more favorable risk-adjusted return, as it signifies that the investment produced higher excess returns per unit of increase in total perceived risk.
2. Sortino ratio
The Sortino ratio is a modified form of the Sharpe ratio that only considers downside volatility , i.e., the volatility of returns below the theoretical risk-free benchmark. Although it shares close similarities with the Sharpe ratio, it can produce very different values, especially when the returns do not have a symmetrical distribution, since it does not penalize upside and downside volatility equally. The ratio uses the following formula:
Sortino Ratio = (𝑅𝑎 − 𝑅𝑓) / 𝜎𝑑
Where:
• 𝑅𝑎 = Average return of the investment
• 𝑅𝑓 = Theoretical risk-free rate of return
• 𝜎𝑑 = Downside deviation (standard deviation of negative excess returns, or downside volatility)
The Sortino ratio offers an alternative perspective on an investment's return-generating efficiency since it does not consider upside volatility in its calculation. A higher Sortino ratio signifies that the investment produced higher excess returns per unit of increase in perceived downside risk.
█ CALCULATIONS
Return period detection
Calculating risk-adjusted performance metrics requires collecting returns across several periods of a given size. Analysts may use different period sizes based on the context and their preferences. However, two widely used standards are monthly or daily periods, depending on the available data and the investment's duration. The built-in ratios displayed in the Strategy Tester utilize returns from either monthly or daily periods in their calculations based on the following logic:
• Use monthly returns if the history of closed trades spans at least two months.
• Use daily returns if the trades span at least two days but less than two months.
• Do not calculate the ratios if the trade data spans fewer than two days.
This library's `detectPeriod()` function applies related logic to available chart data rather than trade data to determine which period is appropriate:
• It returns true if the chart's data spans at least two months, indicating that it's sufficient to use monthly periods.
• It returns false if the chart's data spans at least two days but not two months, suggesting the use of daily periods.
• It returns na if the length of the chart's data covers less than two days, signifying that the data is insufficient for meaningful ratio calculations.
It's important to note that programmers should only call `detectPeriod()` from a script's global scope or within the outermost scope of a function called from the global scope, as it requires the time value from the first bar to accurately measure the amount of time covered by the chart's data.
Collecting periodic returns
This library's `getPeriodicReturns()` function tracks price return data within monthly or daily periods and stores the periodic values in an array . It uses a `detectPeriod()` call as the condition to determine whether each element in the array represents the return over a monthly or daily period.
The `getPeriodicReturns()` function has two overloads. The first overload requires two arguments and outputs an array of monthly or daily returns for use in the `sharpe()` and `sortino()` methods. To calculate these returns:
1. The `percentChange` argument should be a series that represents percentage gains or losses. The values can be bar-to-bar return percentages on the chart timeframe or percentages requested from a higher timeframe.
2. The function compounds all non-na `percentChange` values within each monthly or daily period to calculate the period's total return percentage. When the `percentChange` represents returns from a higher timeframe, ensure the requested data includes gaps to avoid compounding redundant values.
3. After a period ends, the function queues the compounded return into the array , removing the oldest element from the array when its size exceeds the `maxPeriods` argument.
The resulting array represents the sequence of closed returns over up to `maxPeriods` months or days, depending on the available data.
The second overload of the function includes an additional `benchmark` parameter. Unlike the first overload, this version tracks and collects differences between the `percentChange` and the specified `benchmark` values. The resulting array represents the sequence of excess returns over up to `maxPeriods` months or days. Passing this array to the `sharpe()` and `sortino()` methods calculates generalized Information ratios , which represent the risk-adjustment performance of a sequence of returns compared to a risky benchmark instead of a risk-free rate. For consistency, ensure the non-na times of the `benchmark` values align with the times of the `percentChange` values.
Ratio methods
This library's `sharpe()` and `sortino()` methods respectively calculate the Sharpe and Sortino ratios based on an array of returns compared to a specified annual benchmark. Both methods adjust the annual benchmark based on the number of periods per year to suit the frequency of the returns:
• If the method call does not include a `periodsPerYear` argument, it uses `detectPeriod()` to determine whether the returns represent monthly or daily values based on the chart's history. If monthly, the method divides the `annualBenchmark` value by 12. If daily, it divides the value by 365.
• If the method call does specify a `periodsPerYear` argument, the argument's value supersedes the automatic calculation, facilitating custom benchmark adjustments, such as dividing by 252 when analyzing collected daily stock returns.
When the array passed to these methods represents a sequence of excess returns , such as the result from the second overload of `getPeriodicReturns()`, use an `annualBenchmark` value of 0 to avoid comparing those excess returns to a separate rate.
By default, these methods only calculate the ratios on the last available bar to minimize their resource usage. Users can override this behavior with the `forceCalc` parameter. When the value is true , the method calculates the ratio on each call if sufficient data is available, regardless of the bar index.
Look first. Then leap.
█ FUNCTIONS & METHODS
This library contains the following functions:
detectPeriod()
Determines whether the chart data has sufficient coverage to use monthly or daily returns
for risk metric calculations.
Returns: (bool) `true` if the period spans more than two months, `false` if it otherwise spans more
than two days, and `na` if the data is insufficient.
getPeriodicReturns(percentChange, maxPeriods)
(Overload 1 of 2) Tracks periodic return percentages and queues them into an array for ratio
calculations. The span of the chart's historical data determines whether the function uses
daily or monthly periods in its calculations. If the chart spans more than two months,
it uses "1M" periods. Otherwise, if the chart spans more than two days, it uses "1D"
periods. If the chart covers less than two days, it does not store changes.
Parameters:
percentChange (float) : (series float) The change percentage. The function compounds non-na values from each
chart bar within monthly or daily periods to calculate the periodic changes.
maxPeriods (simple int) : (simple int) The maximum number of periodic returns to store in the returned array.
Returns: (array) An array containing the overall percentage changes for each period, limited
to the maximum specified by `maxPeriods`.
getPeriodicReturns(percentChange, benchmark, maxPeriods)
(Overload 2 of 2) Tracks periodic excess return percentages and queues the values into an
array. The span of the chart's historical data determines whether the function uses
daily or monthly periods in its calculations. If the chart spans more than two months,
it uses "1M" periods. Otherwise, if the chart spans more than two days, it uses "1D"
periods. If the chart covers less than two days, it does not store changes.
Parameters:
percentChange (float) : (series float) The change percentage. The function compounds non-na values from each
chart bar within monthly or daily periods to calculate the periodic changes.
benchmark (float) : (series float) The benchmark percentage to compare against `percentChange` values.
The function compounds non-na values from each bar within monthly or
daily periods and subtracts the results from the compounded `percentChange` values to
calculate the excess returns. For consistency, ensure this series has a similar history
length to the `percentChange` with aligned non-na value times.
maxPeriods (simple int) : (simple int) The maximum number of periodic excess returns to store in the returned array.
Returns: (array) An array containing monthly or daily excess returns, limited
to the maximum specified by `maxPeriods`.
method sharpeRatio(returnsArray, annualBenchmark, forceCalc, periodsPerYear)
Calculates the Sharpe ratio for an array of periodic returns.
Callable as a method or a function.
Namespace types: array
Parameters:
returnsArray (array) : (array) An array of periodic return percentages, e.g., returns over monthly or
daily periods.
annualBenchmark (float) : (series float) The annual rate of return to compare against `returnsArray` values. When
`periodsPerYear` is `na`, the function divides this value by 12 to calculate a
monthly benchmark if the chart's data spans at least two months or 365 for a daily
benchmark if the data otherwise spans at least two days. If `periodsPerYear`
has a specified value, the function divides the rate by that value instead.
forceCalc (bool) : (series bool) If `true`, calculates the ratio on every call. Otherwise, ratio calculation
only occurs on the last available bar. Optional. The default is `false`.
periodsPerYear (simple int) : (simple int) If specified, divides the annual rate by this value instead of the value
determined by the time span of the chart's data.
Returns: (float) The Sharpe ratio, which estimates the excess return per unit of total volatility.
method sortinoRatio(returnsArray, annualBenchmark, forceCalc, periodsPerYear)
Calculates the Sortino ratio for an array of periodic returns.
Callable as a method or a function.
Namespace types: array
Parameters:
returnsArray (array) : (array) An array of periodic return percentages, e.g., returns over monthly or
daily periods.
annualBenchmark (float) : (series float) The annual rate of return to compare against `returnsArray` values. When
`periodsPerYear` is `na`, the function divides this value by 12 to calculate a
monthly benchmark if the chart's data spans at least two months or 365 for a daily
benchmark if the data otherwise spans at least two days. If `periodsPerYear`
has a specified value, the function divides the rate by that value instead.
forceCalc (bool) : (series bool) If `true`, calculates the ratio on every call. Otherwise, ratio calculation
only occurs on the last available bar. Optional. The default is `false`.
periodsPerYear (simple int) : (simple int) If specified, divides the annual rate by this value instead of the value
determined by the time span of the chart's data.
Returns: (float) The Sortino ratio, which estimates the excess return per unit of downside
volatility.
[SGM GARCH Volatility]I'm excited to share with you a Pine Script™ that I developed to analyze GARCH (Generalized Autoregressive Conditional Heteroskedasticity) volatility. This script allows you to calculate and plot GARCH volatility on TradingView. Let's see together how it works!
Introduction
Volatility is a key concept in finance that measures the variation in prices of a financial asset. The GARCH model is a statistical method that predicts future volatility based on past volatilities and prediction residuals (errors).
Indicator settings
We define several parameters for our indicator:
length = input.int(20, title="Length")
p = input.int(1, title="Lag order (p)")
q = input.int(1, title="Degree of moving average (q)")
cluster_value = input(0.2,title="cluster value")
length: The period used for the calculations, default 20.
p: The order of the delay for the GARCH model.
q: The degree of the moving average for the GARCH model.
cluster_value: A threshold value used to color the graph.
Calculation of logarithmic returns
We calculate logarithmic returns to capture price changes:
logReturns = math.log(close) - math.log(close )
Initializing arrays
We initialize arrays to store residuals and volatilities:
var float residuals = array.new_float(length, 0)
var float volatilities = array.new_float(length, 0)
We add the new logarithmic returns to the tables and keep their size constant:
array.unshift(residuals, logReturns)
if (array.size(residuals) > length)
array.pop(residuals)
We then calculate the mean and variance of the residuals:
meanResidual = array.avg(residuals)
varianceResidual = array.stdev(residuals, meanResidual)
volatility = math.sqrt(varianceResidual)
We update the volatility table with the new value:
array.unshift(volatilities, volatility)
if (array.size(volatilities) > length)
array.pop(volatilities)
GARCH volatility is calculated from accumulated data:
var float garchVolatility = na
if (array.size(volatilities) >= length and array.size(residuals) >= length)
alpha = 0.1 // Alpha coefficient
beta = 0.85 // Beta coefficient
omega = 0.01 // Omega constant
sumVolatility = 0.0
for i = 0 to p-1
sumVolatility := sumVolatility + beta * math.pow(array.get(volatilities, i), 2)
sumResiduals = 0.0
for j = 0 to q-1
sumResiduals := sumResiduals + alpha * math.pow(array.get(residuals, j), 2)
garchVolatility := math.sqrt(omega + sumVolatility + sumResiduals)
Plot GARCH volatility
We finally plot the GARCH volatility on the chart and add horizontal lines for easier visual analysis:
plt = plot(garchVolatility, title="GARCH Volatility", color=color.rgb(33, 149, 243, 100))
h1 = hline(0.1)
h2 = plot(cluster_value)
h3 = hline(0.3)
colorGarch = garchVolatility > cluster_value ? color.red: color.green
fill(plt, h2, color = colorGarch)
colorGarch: Determines the fill color based on the comparison between garchVolatility and cluster_value.
Using the script in your trading
Incorporating this Pine Script™ into your trading strategy can provide you with a better understanding of market volatility and help you make more informed decisions. Here are some ways to use this script:
Identification of periods of high volatility:
When the GARCH volatility is greater than the cluster value (cluster_value), it indicates a period of high volatility. Traders can use this information to avoid taking large positions or to adjust their risk management strategies.
Anticipation of price movements:
An increase in volatility can often precede significant price movements. By monitoring GARCH volatility spikes, traders can prepare for potential market reversals or accelerations.
Optimization of entry and exit points:
By using GARCH volatility, traders can better identify favorable times to enter or exit a position. For example, entering a position when volatility begins to decrease after a peak can be an effective strategy.
Adjustment of stops and objectives:
Since volatility is an indicator of the magnitude of price fluctuations, traders can adjust their stop-loss and take-profit orders accordingly. Periods of high volatility may require wider stops to avoid being exited from a position prematurely.
That's it for the detailed explanation of this Pine Script™ script. Don’t hesitate to use it, adapt it to your needs and share your feedback! Happy analysis and trading everyone!
Volatility and Volume by Hour EXT(Extended republication, use this instead of the old one)
The goal of this indicator is to show a “characteristic” of the instrument, regarding the price change and trading volume. You can see how the instrument “behaved” throughout the day in the lookback period. I've found this useful for timing in day trading.
The indicator creates a table on the chart to display various statistics for each hour of the day.
Important: ONLY SHOWS THE TABLE IF THE CHART’S TIMEFRAME IS 1H!
Explanation of the columns:
1. Volatility Percentage (Volat): This column shows the volatility of the price as a percentage. For example, a value of "15%" means the price movement was 15% of the total daily price movement within the hour.
2. Hourly Point Change (PointCh): This column shows the change in price points for each hour in the lookback period. For example, a value of "5" means the price has increased by 5 points in the hour, while "-3" means it has decreased by 3 points.
3. Hourly Point Change Percentage (PrCh% (LeverageX)): This column shows the percentage change in price points for each hour, adjusted with leverage multiplier. Displayed green (+) or red (-) accordingly. For example, a value of "10%" with a leverage of 2X means the price has effectively changed by 5% due to the leverage.
4. Trading Volume Percentage (TrVol): This column shows the percentage of the daily total volume that was traded in a specific hour. For example, a value of "10%" would mean that 10% of the day's total trading volume occurred in that hour.
5. Added New! - Relevancy Check: The indicator checks the last 24 candle. If the direction of the price movement was the same in the last 24 hour as the statistical direction in that hour, the background of the relevant hour in the second column goes green.
For example: if today at 9 o'clock the price went lower, so as at 9 o'clock in the loopback period, the instrument "behaves" according to statistics . So the statistics is probably more relevant for today. The more green background row the more relevancy.
Settings:
1. Lookback period: The lookback period is the number of previous bars from which data is taken to perform calculations. In this script, it's used in a loop that iterates over a certain number of past bars to calculate the statistics. TIP: Select a period the contains a trend in one direction, because an upward and a downward trend compensate the price movement in opposite directions.
2. Timezone: This is a string input that represents the user's timezone. The default value is "UTC+2". Adjust it to your timezone in order to view the hours properly.
3. Leverage: The default value is 10(!). This input is used to adjust the hourly point change percentage. For FOREX traders (for example) the statistics can show the leveraged percentage of price change. Set that according the leverage you trade the instrument with.
Use at your own risk, provided “as is” basis!
Hope you find it useful! Cheers!
Volatility_ZigZag_LibraryThis is a Pine Script library for the public indicator "Volatility ZigZag" by brettkind. For further description, please refer to the information available on the original indicator page.
Library "Volatility_ZigZag_Library"
getValues_andStyling_VolatilityZigZag_byBrettkind(hl_src, SOURCE, length, min_dev_input, stdev_fctr, ZigZag, zz_color, zz_width, zz_devline, zz_points, zz_alert_sign, ZZ_Label, ZZ_Label_clr, rev_text, zz_bars_text, pcabs_text, avg_pcabs_text, pcrel_text, avg_pcrel_text, vol_text, avg_vol_text, input_currency)
Parameters:
hl_src (bool)
SOURCE (float)
length (int)
min_dev_input (float)
stdev_fctr (float)
ZigZag (bool)
zz_color (color)
zz_width (int)
zz_devline (bool)
zz_points (bool)
zz_alert_sign (bool)
ZZ_Label (bool)
ZZ_Label_clr (color)
rev_text (bool)
zz_bars_text (bool)
pcabs_text (bool)
avg_pcabs_text (bool)
pcrel_text (bool)
avg_pcrel_text (bool)
vol_text (bool)
avg_vol_text (bool)
input_currency (string)
getStatisticTable_VolatilityZigZag_byBrettkind(x1, Y1_array, draw_tbl)
Parameters:
x1 (int)
Y1_array (array)
draw_tbl (bool)
Buy Sell Strategy With Z-Score [TradeDots]The "Buy Sell Strategy With Z-Score" is a trading strategy that harnesses Z-Score statistical metrics to identify potential pricing reversals, for opportunistic buying and selling opportunities.
HOW DOES IT WORK
The strategy operates by calculating the Z-Score of the closing price for each candlestick. This allows us to evaluate how significantly the current price deviates from its typical volatility level.
The strategy first takes the scope of a rolling window, adjusted to the user's preference. This window is used to compute both the standard deviation and mean value. With these values, the strategic model finalizes the Z-Score. This determination is accomplished by subtracting the mean from the closing price and dividing the resulting value by the standard deviation.
This approach provides an estimation of the price's departure from its traditional trajectory, thereby identifying market conditions conducive to an asset being overpriced or underpriced.
APPLICATION
Firstly, it is better to identify a stable trading pair for this technique, such as two stocks with considerable correlation. This is to ensure conformance with the statistical model's assumption of a normal Gaussian distribution model. The ideal performance is theoretically situated within a sideways market devoid of skewness.
Following pair selection, the user should refine the span of the rolling window. A broader window smoothens the mean, more accurately capturing long-term market trends, while potentially enhancing volatility. This refinement results in fewer, yet precise trading signals.
Finally, the user must settle on an optimal Z-Score threshold, which essentially dictates the timing for buy/sell actions when the Z-Score exceeds with thresholds. A positive threshold signifies the price veering away from its mean, triggering a sell signal. Conversely, a negative threshold denotes the price falling below its mean, illustrating an underpriced condition that prompts a buy signal.
Within a normal distribution, a Z-Score of 1 records about 68% of occurrences centered at the mean, while a Z-Score of 2 captures approximately 95% of occurrences.
The 'cool down period' is essentially the number of bars that await before the next signal generation. This feature is employed to dodge the occurrence of multiple signals in a short period.
DEFAULT SETUP
The following is the default setup on EURUSD 1h timeframe
Rolling Window: 80
Z-Score Threshold: 2.8
Signal Cool Down Period: 5
Commission: 0.03%
Initial Capital: $10,000
Equity per Trade: 30%
RISK DISCLAIMER
Trading entails substantial risk, and most day traders incur losses. All content, tools, scripts, articles, and education provided by TradeDots serve purely informational and educational purposes. Past performances are not definitive predictors of future results.
RSI and ATR Trend Reversal SL/TPQuick History:
I was frustrated with a standard fixed percent TP/SL as they often were not receptive to quick market rallies/reversals. I developed this TP/SL and eventually made it into a full fledge strategy and found it did well enough to publish. This strategy can be used as a standalone or tacked onto another strategy as a TP/SL. It does function as both with a single line. This strategy has been tested with TSLA , AAPL, NVDA, on the 15 minutes timeframe.
HOW IT WORKS:
Inputs:
Length: Simple enough, it determines the length of the RSI and ATR used.
Multiplier: This multiplies the RSI and ATR calculation, more on this later.
Delay to prevent Idealization: TradingView will use the open of the bar the strategy triggers on when calculating the backtest. This can produce unrealistic results depending on the source. If your source is open, set to 0, if anything else, set to 1.
Minimum Difference: This is essentially a traditional SL/TP, it is borderline unnecessary, but if the other parameters are wacky this can be used to ensure the SL/TP. It multiplies the source by the percent, so if it is set to 10, the SL/TP is initialized at src +- 10%.
Source input: Self Explanatory, be sure to update the Delay if you use open.
CALCULATION:
Parameters Initialization:
The strategy uses Heikinashi values for calculations, this is not toggleable in parameters, but can be easily changed by changing hclose to equal src.
FUNCTION INITIALIZATION:
highest_custom and lowest_custom do the same thing as ta.highest and ta.lowest, however the built in ta library does not allow for var int input, so I had to create my own functions to be used here. I actually developed these years ago and have used them in almost every strategy since. Feel especially free to use these in your own scripts.
The rsilev is where the magic happens.
SL/TP min/max are initially calculated to be used later.
Then we begin by establishing variables.
BullGuy is used to determine the length since the last crossup or crossdown, until one happens, it returns na, breaking the function. BearGuy is used in all the calculations, and is the same as BullGuy, unless BullGuy is na, where BearGuy counts up from 1 on each bar from 0.
We create our rsi and have to modify the second one to suit the function. In the case of the upper band, we mirror the lower one. So if the RSI is 80, we want it to be 20 on the upper band.
the upper band and lower band are calculated the exact same way, but mirrored. For the purpose of writing, I'm going to talk about the lower band. Assume everything is mirrored for the upper one. It finds the highest source since the last crossup or crossdown. It then multiplies from 1 / the RSI, this means that a rapid RSI increase will increase the band dramatically, so it is able to capture quick rally/reversals. We add this to the atr to source ratio, as the general volatility is a massive factor to be included. We then multiply this number by our chosen amount, and subtract it from the highest source, creating the band.
We do this same process but mirrored with both bands and compared it to the source. If the source is above the lower band, it suggests an uptrend, so the lower band is outputted, and vice versa for the upper one.
PLOTTING:
We also determine the line color in the same manner as we do the trend direction.
STRATEGY:
We then use the source again, and if it crosses up or down relative to the selected band, we enter a long or short respectively.
This may not be the most superb independent strategy, but it can be very useful as a TP/SL for your chosen entry conditions, especially in volatile markets or tickers.
Thank you for taking the time to read, and please enjoy.
Trend AngleThe "Trend Angle" indicator serves as a tool for traders to decipher market trends through a methodical lens. It quantifies the inclination of price movements within a specified timeframe, making it easy to understand current trend dynamics.
Conceptual Foundation:
Angle Measurement: The essence of the "Trend Angle" indicator is its ability to compute the angle between the price trajectory over a defined period and the horizontal axis. This is achieved through the calculation of the arctangent of the percentage price change, offering a straightforward measure of market directionality.
Smoothing Mechanisms: The indicator incorporates options for "Moving Average" and "Linear Regression" as smoothing mechanisms. This adaptability allows for refined trend analysis, catering to diverse market conditions and individual preferences.
Functional Versatility:
Source Adaptability: The indicator affords the flexibility to select the desired price source, enabling users to tailor the angle calculation to their analytical framework and other indicators.
Detrending Capability: With the detrending feature, the indicator allows for the subtraction of the smoothing line from the calculated angle, highlighting deviations from the main trend. This is particularly useful for identifying potential trend reversals or significant market shifts.
Customizable Period: The 'Length' parameter empowers traders to define the observation window for both the trend angle calculation and its smoothing, accommodating various trading horizons.
Visual Intuition: The optional colorization enhances interpretability, with the indicator's color shifting based on its relation to the smoothing line, thereby providing an immediate visual cue regarding the trend's direction.
Interpretative Results:
Market Flatness: An angle proximate to 0 suggests a flat market condition, indicating a lack of significant directional movement. This insight can be pivotal for traders in assessing market stagnation.
Trending Market: Conversely, a relatively high angle denotes a trending market, signifying strong directional momentum. This distinction is crucial for traders aiming to capitalize on trend-driven opportunities.
Analytical Nuance vs. Simplicity:
While the "Trend Angle" indicator is underpinned by mathematical principles, its utility lies in its simplicity and interpretative clarity. However, it is imperative to acknowledge that this tool should be employed as part of a comprehensive trading strategy , complemented by other analytical instruments for a holistic market analysis.
In essence, the "Trend Angle" indicator exemplifies the harmonization of simplicity and analytical rigor. Its design respects the complexity of market behaviors while offering straightforward, actionable insights, making it a valuable component in the arsenal of both seasoned and novice traders alike.
ATR Bands with Optional Risk/Reward Colors█ OVERVIEW
This indicator projects ATR bands and, optionally, colors them based on a risk/reward advantage for those who trade breakouts/breakdowns using moving averages as partial or full exit points.
█ DEFINITIONS
► True Range
The True Range is a measure of the volatility of a financial asset and is defined as the maximum difference among one of the following values:
- The high of the current period minus the low of the current period.
- The absolute value of the high of the current period minus the closing price of the previous period.
- The absolute value of the low of the current period minus the closing price of the previous period.
► Average True Range
The Average True Range was developed by J. Welles Wilder Jr. and was introduced in his 1978 book titled "New Concepts in Technical Trading Systems". It is calculated as an average of the true range values over a certain number of periods (usually 14) and is commonly used to measure volatility and set stop-loss and profit targets (1).
For example, if you are looking at a daily chart and you want to calculate the 14-day ATR, you would take the True Range of the previous 14 days, calculate their average, and this would be the ATR for that day. The process is then repeated every day to obtain a series of ATR values over time.
The ATR can be smoothed using different methods, such as the Simple Moving Average (SMA), the Exponential Moving Average (EMA), or others, depending on the user's preferences or analysis needs.
► ATR Bands
The ATR bands are created by adding or subtracting the ATR from a reference point (usually the closing price). This process generates bands around the central point that expand and contract based on market volatility, allowing traders to assess dynamic support and resistance levels and to adapt their trading strategies to current market conditions.
█ INDICATOR
► ATR Bands
The indicator provides all the essential parameters for calculating the ATR: period length, time frame, smoothing method, and multiplier.
It is then possible to choose the reference point from which to create the bands. The most commonly used reference points are Open, High, Low, and Close, but you can also choose the commonly used candle averages: HL2, HLC3, HLCC4, OHLC4. Among these, there is also a less common "OC2", which represents the average of the candle body. Additionally, two parameters have been specifically created for this indicator: Open/Close and High/Low.
With the "Open/Close" parameter, the upper band is calculated from the higher value between Open and Close, while the lower one is calculated from the lower value between Open and Close. In the case of bullish candles, therefore, the Close value is taken as the starting point for the upper band and the Open value for the lower one; conversely, in bearish candles, the Open value is used for the upper band and the Close value for the lower band. This setting can be useful for precautionally generating broader bands when trading with candlesticks like hammers or inverted hammers.
The "High/Low" parameter calculates the upper band starting from the High and the lower band starting from the Low. Among all the available options, this one allows drawing the widest bands.
Other possible options to improve the drawing of ATR bands, aligning them with the price action, are:
• Doji Smoothing: When the current candle is a doji (having the same Open and Close price), the bands assume the values they had on the previous candle. This can be useful to avoid steep fluctuations of the bands themselves.
• Extend to High/Low: Extends the bands to the High or Low values when they exceed the value of the band.
• Round Last Cent: Expands the upper band by one cent if the price ends with x.x9, and the lower band if the price ends with x.x1. This function only works when the asset's tick is 0.01.
► Risk/Reward Advantage
The indicator optionally colors the ATR bands after setting a breakpoint, one or two risk/reward ratios, and a series of moving averages. This function allows you to know in advance whether entering a trade can provide an advantage over the risk. The band is colored when the ratio between the distance from the break point to the band and the distance from the break point to the first available moving average reaches at least the set ratio value. It is possible to set two colorings, one for a minimum risk/reward ratio and one for an optimal risk/reward ratio.
The break point can be chosen between High/Low (High in case of breakout, Low in case of breakdown) or Open/Close (on breakouts, Close with bullish candles or Open with bearish candles; on breakdowns, Close with bearish candles or Open with bullish candles).
It is possible to choose up to 10 moving averages of various types, including the VWAP with the Anchor Period (2).
Depending on the "Price to MA" setting, the bands can be individually or simultaneously colored.
By selecting "Single Direction," the risk/reward calculation is performed only when all moving averages are above or below the break point, resulting in only one band being colored at a time. For this reason, when the break point is in between the moving averages, the calculation is not executed. This setting can be useful for strategies involving price movement from a level towards a series of specific moving averages (for example, in reversals starting from a certain level towards the VWAP with possible partial take profits on some previous moving averages, or simply in trend following towards one or more moving averages).
Choosing "Both Directions" the risk/reward ratio is calculated based on the first available moving averages both above and below the price. This setting is useful for those who operate in range bound markets or simply take advantage of movements between moving averages.
█ NOTE
This script may not be suitable for scalping strategies that require immediate entries due to the inability to know the ATR of a candle in advance until its closure. Once the candle is closed, you should have time to place a stop or stop-limit order, so your strategy should not anticipate an immediate start with the next candle. Even more conveniently, if your strategy involves an entry on a pullback, you can place a limit order at the breakout level.
(1) www.tradingview.com
(2) For convenience, the code for the Anchor Period has been entirely copied from the VWAP code provided by TradingView.
ATR Grid Levels [By MUQWISHI]▋ INTRODUCTION :
The “ATR Levels” produces a sequence of horizontal line levels above and below the Center Line (reference level). They are sized based on the instrument's volatility, representing the average historical price movement on a selected higher timeframe using the average true range (ATR) indicator.
_______________________
▋ OVERVIEW:
_______________________
▋ IMPLEMENTATION:
The indicator starts by drawing a Center Line that is selected by the user from a variety of common levels. Then, it draws a sequence of horizontal lines above and below the Center Line, which are sized based on the most confirmed average true range (ATR) at the selected higher timeframe.
In the top right corner of the chart, there is a table displaying both the selected ATR (in the right cell) and the ATR of the current bar (in the left cell). This feature enables users to compare these two values. It's important to note that the ATR of the current bar may not be confirmed yet, as the market is still active.
_______________________
▋ INDICATOR SETTINGS:
# Section (1): ATR Settings
(1) ATR Period & Smoothing.
(2) Timeframe where ATR value imported from.
(3) To show/hide the table comparison between the current ATR and the ATR for the selected period. Also, ability to color the current ATR cell if it’s greater.
# Section (2): Levels Settings
(1) Selecting a Center Line level among a variety of common levels, which is taken as reference level where a sequence of horizontal lines plot above and below it.
(2) Size of grid in ATR unit.
(3) Number of horizontal lines to plot in a single side.
(4) Grid Side. Ability to plot above or below the Center Line.
(5) Lines colors, and mode.
(6) Line style.
(7) Label style.
(8) Ability to remove old lines, from previous HTF.
_____________________
▋ COMMENT:
The ATR Levels should not be taken as a major concept to build a trading decision.
Please let me know if you have any questions.
Thank you.
Scalper's Volatility Filter [QuantraSystems]Scalpers Volatility Filter
Introduction
The 𝒮𝒸𝒶𝓁𝓅𝑒𝓇'𝓈 𝒱𝑜𝓁𝒶𝓉𝒾𝓁𝒾𝓉𝓎 𝐹𝒾𝓁𝓉𝑒𝓇 (𝒮𝒱𝐹) is a sophisticated technical indicator, designed to increase the profitability of lower timeframe trading.
Due to the inherent decrease in the signal-to-noise ratio when trading on lower timeframes, it is critical to develop analysis methods to inform traders of the optimal market periods to trade - and more importantly, when you shouldn’t trade.
The 𝒮𝒱𝐹 uses a blend of volatility and momentum measurements, to signal the dominant market condition - trending or ranging.
Legend
The 𝒮𝒱𝐹 consists of a signal line that moves above and below a central zero line, serving as the indication of market regime.
When the signal line is positioned above zero, it indicates a period of elevated volatility. These periods are more profitable for trading, as an asset will experience larger price swings, and by design, trend-following indicators will give less false signals.
Conversely, when the signal line moves below zero, a low volatility or mean-reverting market regime dominates.
This distinction is critical for traders in order to align strategies with the prevailing market behaviors - leveraging trends in volatile markets and exercising caution or implementing mean-reversion systems in periods of lower volatility.
Case Study
Here we can see the indicator's unique edge in action.
Out of the four potential long entries seen on the chart - displayed via bar coloring, two would result in losses.
However, with the power of the 𝒮𝒱𝐹 a trader can effectively filter false signals by only entering momentum-trades when the signal line is above zero.
In this small sample of four trades, the 𝒮𝒱𝐹 increased the win rate from 50% to 100%
Methodology
The methodology behind the 𝒮𝒱𝐹 is based upon three components:
By calculating and contrasting two ATR’s, the immediate market momentum relative to the broader, established trend is calculated. The original method for this can be credited to the user @xinolia
A modified and smoothed ADX indicator is calculated to further assess the strength and sustainability of trends.
The ‘Linear Regression Dispersion’ measures price deviations from a fitted regression line, adding further confluence to the signals representation of market conditions.
Together, these components synthesize a robust, balanced view of market conditions, enabling traders to help align strategies with the prevailing market environment, in order to potentially increase expected value and win rates.
Gap Removal IndicatorThis gap indicator shows the price of your chosen instrument as if no gaps had occurred overnight. It can be especially useful on highly-volatile exchange-listed instruments that track other 24/7 assets, because the normal candlestick chart of these instruments will create a large amount of noise that may decrease the accuracy of your indicators or make the trend harder to see.
Gaps are determined with the following code:
daychange = ta.change(dayofmonth)
gapup = daychange and open > math.max(open,close)
gapdown = daychange and open < math.min(open,close)
Whereas the gap value is determined by taking the overnight difference in prices:
downgap_change = math.min(open,close) - open
upgap_change = open - math.max(open,close)
The gap changes are cumulatively added and subtracted from the initial closing price to create the gap-adjusted price. The price will depend on how many bars your subscription allows, so pay more attention to the relative differences and/or trend than the cumulative gap-adjusted price itself.
The gap indicator comes pre-built with normal candlestick and Heikin-Ashi candle types, and four indicators (two EMAs, Bollinger bands, and a supertrend). All elements are configurable.
[blackcat] L2 Twisted Pair IndicatorOn the grand stage of the financial market, every trader is looking for a partner who can lead them to dance the tango well. The "Twisted Pair" indicator is that partner who dances gracefully in the market fluctuations. It weaves the rhythm of the market with two lines, helping traders to find the rhythm in the market's dance floor.
Imagine when the market is as calm as water, the "Twisted Pair" is like two ribbons tightly intertwined. They almost overlap on the chart, as if whispering: "Now, let's enjoy these quiet dance steps." This is the market consolidation period, the price fluctuation is not significant, traders can relax and slowly savor every detail of the market.
Now, let's describe the market logic of this code in natural language:
- **HJ_1**: This is the foundation of the market dance steps, by calculating the average price and trading volume, setting the tone for the market rhythm.
- **HJ_2** and **HJ_3**: These two lines are the arms of the dance partner, they help traders identify the long-term trend of the market through smoothing.
- **HJ_4**: This is a magnifying glass for market sentiment, it reveals the tension and excitement of the market by calculating the short-term deviation of the price.
- **A7** and **A9**: These two lines are the guide to the dance steps, they separate when the market volatility increases, guiding the traders in the right direction.
- **WATCH**: This is the signal light of the dance, when the two lines overlap, the market is calm; when they separate, the market is active.
The "Twisted Pair" indicator is like a carefully choreographed dance, it allows traders to find their own rhythm in the market dance floor, whether in a calm slow dance or a passionate tango. Remember, the market is always changing, and the "Twisted Pair" is the perfect dance partner that can lead you to dance out brilliant steps.
The script of this "Twisted Pair" uses three different types of moving averages: EMA (Exponential Moving Average), DEMA (Double EMA), and TEMA (Triple EMA). These types can be selected by the user through exchange input.
Here are the main functions of this code:
1. Defined the DEMA and TEMA functions: These two functions are used to calculate the corresponding moving averages. EMA is the exponential moving average, which is a special type of moving average that gives more weight to recent data. In the first paragraph, ema1 is the EMA of "length", and ema2 is the EMA of ema1. DEMA is 2 times of ema1 minus ema2.
2. Let users choose to use EMA, DEMA or TEMA: This part of the code provides an option for users to choose which type of moving average they want to use.
3. Defined an algorithm called "Twisted Pair algorithm": This part of the code defines a complex algorithm to calculate a value called "HJ". This algorithm involves various complex calculations and applications of EMA, DEMA, TEMA.
4. Plotting charts: The following code is used to plot charts on Tradingview. It uses the plot function to draw lines, the plotcandle function to draw candle (K-line) charts, and yellow and red to represent different conditions.
5. Specify colors: The last two lines of code use yellow and red K-line charts to represent the conditions of HJ_7. If the conditions of HJ_7 are met, the color of the K-line chart will change to the corresponding color.
Squeeze Momentum TD - A Revisited Version of the TTM SqueezeDescription:
The "Squeeze Momentum TD" is our unique take on the highly acclaimed TTM Squeeze indicator, renowned in the trading community for its efficiency in pinpointing market momentum. This script is a tribute and an extension to the foundational work laid by several pivotal figures in the trading industry:
• John Carter, for his creation of the TTM Squeeze and TTM Squeeze Pro, which revolutionized the way traders interpret volatility and momentum.
• Lazybear, whose original interpretation of the TTM Squeeze, known as the "Squeeze Momentum Indicator", provided an invaluable foundation for further development.
• Makit0, who evolved Lazybear's script to incorporate enhancements from the TTM Squeeze Pro, resulting in the "Squeeze PRO Arrows".
Our script, "Squeeze Momentum TD", represents a custom version developed after reviewing all variations of the TTM Squeeze indicator. This iteration focuses on a distinct visualization approach, featuring an overlay band on the chart for an user-friendly experience. We've distilled the essence of the TTM Squeeze and its advanced version, the TTM Squeeze Pro, into a form that emphasizes intuitive usability while retaining comprehensive analytical depth.
Features:
-Customizable Bollinger Bands and Keltner Channels: These core components of the TTM Squeeze.
-Dynamic Squeeze Conditions: Ranging from No Squeeze to High Compression.
-Momentum Oscillator: A linear regression-based momentum calculation, offering clear insights into market trends.
-User-Defined Color Schemes: Personalize your experience with adjustable colors for bands and plot shapes.
-Advanced Alert System: Alerts for key market shifts like Bull Watch Out, Bear Watch Out, and Momentum shifts.
-Adaptive Band Widths: Modify the band widths to suit your preference.
How to use it?
• Transition from Light Green to Dark Green: Indicates a potential end to the bullish momentum. This 'Bull Watch Out' signal suggests that traders should be cautious about continuing bullish trends.
• Transition from Light Red to Dark Red: Signals that the bearish momentum might be fading, triggering a 'Bear Watch Out' alert. It's a hint for traders to be wary of ongoing bearish trends.
• Shift from Dark Green to Light Green: This change suggests an increase in bullish momentum. It's an indicator for traders to consider bullish positions.
• Change from Dark Red to Light Red: Implies that bearish momentum is picking up. Traders might want to explore bearish strategies under this condition.
• Rapid Change from Light Red to Light Green: This swift shift indicates a quick transition from bearish to bullish sentiment. It's a strong signal for traders to consider switching to bullish positions.
• Quick Shift from Light Green to Light Red: Demonstrates a speedy change from bullish to bearish momentum. It suggests that traders might want to adjust their strategies to align with the emerging bearish trend.
Acknowledgements:
Special thanks to Beardy_Fred for the significant contributions to the development of this script. This work stands as a testament to the collaborative spirit of the trading community, continuously evolving to meet the demands of diverse trading strategies.
Disclaimer:
This script is provided for educational and informational purposes only. Users should conduct their own due diligence before making any trading decisions.
ATR Percentage ValuesThis indicator is created to give you the daily ATR 2% and 10% values for any product that you are looking at. The way the indicator is designed is to only show the most recent 2 and 10 percent values on any chart and will not show you any other number. If you are hovering over price that occurred in the past it will show zeros on the values. To get the right values, take your mouse off of the chart and it will show you the values.
The way this indicator is coded will give you the daily ATR numbers no matter what chart timeframe you are currently looking at. The idea is to save time and make sure you do not make a mistake getting the wrong value.
*** To make this show up on the status line, click on the settings, click on the style box and check the box "VALUES IN STATUS LINE" ****
Z-score changeAs a wise man once said that:
1. beginners think in $ change
2. intermediates think in % change
3. pros think in Z change
Here is the "Z-score change" indicator that calculates up/down moves normalized by standard deviation (volatility) displayed as bar chart with 1,2 and 3 stdev levels.
Volume Exhaustion [AlgoAlpha]Introducing the Volume Exhaustion by AlgoAlpha, is an innovative tool that aims to identify potential exhaustion or peaks in trading volume , which can be a key indicator for reversals or continuations in market trends 🔶.
Key Features:
Signal Plotting : A special feature is the plotting of 'Release' signals, marked by orange diamonds, indicating points where the exhaustion index crosses under its previous value and is above a certain boundary. This could signify critical market points 🚨.
Calculation Length Customization : Users can adjust the calculation and Signal lengths to suit their trading style, allowing for flexibility in analysis over different time periods. ☝️
len = input(50, "Calculation Length")
len2 = input(8, "Signal Length")
Visual Appeal : The script offers customizable colors (col for the indicator and col1 for the background) enhancing the visual clarity and user experience 💡.
col = input.color(color.white, "Indicator Color")
col1 = input.color(color.gray, "Background Color")
Advanced Volume Processing : At its core, the script utilizes a combination of Hull Moving Average (HMA) and Exponential Moving Average (EMA) applied to the volume data. This sophisticated approach helps in smoothing out the volume data and reducing lag.
sv = ta.hma(volume, len)
ssv = ta.hma(sv, len)
Volume Exhaustion Detection : The script calculates the difference between the volume and its smoothed version, normalizing this value to create an exhaustion index (fff). Positive values of this index suggest potential volume exhaustion.
f = sv-ssv
ff = (f) / (ta.ema(ta.highest(f, len) - ta.lowest(f, len), len)) * 100
fff = ff > 0 ? ff : 0
Boundary and Zero Line : The script includes a boundary line (boundary) and a zero line (zero), with the area between them filled for enhanced visual interpretation. This helps in assessing the relative position of the exhaustion index.
Customizable Background : The script colors the background of the chart for better readability and to distinguish the indicator’s area clearly.
Overall, Volume Exhaustion is designed for traders who focus on volume analysis. It provides a unique perspective on volume trends and potential exhaustion points, which can be crucial for making informed trading decisions. This script is a valuable addition for traders looking to enhance their trading experience with advanced volume analysis tools.
Squeeze & Release [AlgoAlpha]Introduction:
💡The Squeeze & Release by AlgoAlpha is an innovative tool designed to capture price volatility dynamics using a combination of EMA-based calculations and ATR principles. This script aims to provide traders with clear visual cues to spot potential market squeezes and release scenarios. Hence it is important to note that this indicator shows information on volatility, not direction.
Core Logic and Components:
🔶EMA Calculations: The script utilizes the Exponential Moving Average (EMA) in multiple ways to smooth out the data and provide indicator direction. There are specific lengths for the EMAs that users can modify as per their preference.
🔶ATR Dynamics: Average True Range (ATR) is a core component of the script. The differential between the smoothed ATR and its EMA is used to plot the main line. This differential, when represented as a percentage of the high-low range, provides insights into volatility.
🔶Squeeze and Release Detection: The script identifies and highlights squeeze and release scenarios based on the crossover and cross-under events between our main line and its smoothed version. Squeezes are potential setups where the market may be consolidating, and releases indicate a potential breakout or breakdown.
🔶Hyper Squeeze Detection: A unique feature that detects instances when the main line is rising consistently over a user-defined period. Hyper squeeze marks areas of extremely low volatility.
Visual Components:
The main line (ATR-based) changes color depending on its position relative to its EMA.
A middle line plotted at zero level which provides a quick visual cue about the main line's position. If the main line is above the zero level, it indicates that the price is squeezing on a longer time horizon, even if the indicator indicates a shorter-term release.
"𝓢" and "𝓡" characters are plotted to represent 'Squeeze' and 'Release' scenarios respectively.
Standard Deviation Bands are plotted to help users gauge the extremity and significance of the signal from the indicator, if the indicator is closer to either the upper or lower deviation bands, this means that statistically, the current value is considered to be more extreme and as it is further away from the mean where the indicator is oscillating at for the majority of the time. Thus indicating that the price has experienced an unusual amount or squeeze or release depending on the value of the indicator.
Usage Guidelines:
☝️Traders can use the script to:
Identify potential consolidation (squeeze) zones.
Gauge potential breakout or breakdown scenarios (release).
Fine-tune their entries and exits based on volatility.
Adjust the various lengths provided in the input for better customization based on individual trading styles and the asset being traded.
Volatility ZigZagIt calculates and plots zigzag lines based on volatility and price movements. It has various inputs for customization, allowing you to adjust parameters like source data, length, deviation, line styling, and labeling options.
The indicator identifies pivot points in the price movement, drawing lines between these pivots based on the deviation from certain price levels or volatility measures.
The script labels various data points at the ZigZag pivot points on the chart. These labels provide information about different aspects of the price movement and volume around these pivot points. Here's a breakdown of what gets labeled:
Price Change: Indicates the absolute and average percentage change between the two pivot points. It displays the absolute or relative change in price as a percentage. Additionally, the average absolute price increase or the average rate of increase can also be labeled.
Volume: Shows the total volume and average volume between the two pivot points.
Number of Bars: Indicates the number of bars between the current and the last pivot point.
Reversal Price: Displays the price of the reversal point (the previous pivot).
Logarithmic Volatility Direction Index [IkkeOmar]The LVDI is a Mean-Reversion Indicator. it doesn't detect trends and does not give a signal per se.
What it does is tell you if we have a flashcrash based on the price action and volume that is available. It is not always easy to see with the naked eye, so this indicator can help you DCA into an asset in a smarter way, if you couple it with other trend systems.
Think of this indicator like a form of a volatility index.
Inputs:
len and lenWMA are integers representing different lengths for calculations, and src is the data source
Keep in mind that "Length" is the lookback for the WMA, and the Length smooting is the lookback for the SMA of the "volume_weighted".
WMA Calculation
wma_basic = math.log10(ta.wma(src, len))
This calculates the logarithm (base 10) of the Weighted Moving Average (WMA) of the source data over len periods. WMA is a type of moving average giving more importance to recent data. The reason I use log10, is to make it transformative over a longer timeframe. This makes it easier to see the growth direction. I like to use this for crypto, since there is asymetric upside.
Volume Filter:
average_volume = ta.sma(volume, lenWMA)
volume_weighted = math.log10(wma_basic * (volume / math.log10(average_volume)))
Here, the script first calculates the Simple Moving Average (SMA) of the trading volume over lenWMA periods. Then, it computes a volume-weighted value of the WMA, adjusted by the logarithmic ratio of current volume to average volume.
Distance and Score Calculation:
distance = math.log10(src) - math.log10(volume_weighted)
score = math.sign(distance) * math.pow(math.abs(distance), 2)
The script calculates the logarithmic difference between the source data and the volume-weighted WMA. The score is determined by the sign of this distance multiplied by its square. This potentially amplifies the impact of larger distances.
Plotting:
plot(volume_weighted, title="Volume Weighted WMA", color=color.blue, linewidth = 2)
plot(ta.sma(volume_weighted, lenWMA), title="Volume Weighted WMA", color=color.rgb(189, 160, 0))
Mathematical concepts
Weighted Moving Average (WMA):
WMA is a moving average that assigns more weight to recent data points. The idea is that recent prices are more relevant to the current trend than older prices.
Logarithms:
The use of log10 (logarithm base 10) is interesting. Logarithms help in normalizing data and can make certain patterns more visible, especially when dealing with exponential growth or decay.
Volume Weighting:
Multiplying the WMA by the ratio of current volume to average volume (both logarithmic) integrates volume into the analysis. High trading volume can signify stronger market interest and can thus validate price movements.
Distance and Score:
The distance measures how far the current price is from the volume-weighted WMA on a logarithmic scale. The score squares this distance, potentially highlighting large divergences.
Case example
In the case above (which is a low timeframe that shouldn't be your main system) we see the blue line going up before going below the moving average line (orange). This indicates a local bottom zone. Does that mean that we wont go lower? No! What you can do is calculate a zone range.
We have an average line, you can get that from the POC with the VRVP.
Then you take the low and high of that zone and take the average:
(3.17% + 2.33%) / 2 = 2.75%
This means that we expect that the price can fall an additional 2.75%! Low and behold. When you check the same chart as above:
Hope it makes sense!
Stay safe everyone!
Don't hesitate to ask any questions if you have any!
Advanced Dynamic Threshold RSI [Elysian_Mind]Advanced Dynamic Threshold RSI Indicator
Overview
The Advanced Dynamic Threshold RSI Indicator is a powerful tool designed for traders seeking a unique approach to RSI-based signals. This indicator combines traditional RSI analysis with dynamic threshold calculation and optional Bollinger Bands to generate weighted buy and sell signals.
Features
Dynamic Thresholds: The indicator calculates dynamic thresholds based on market volatility, providing more adaptive signal generation.
Performance Analysis: Users can evaluate recent price performance to further refine signals. The script calculates the percentage change over a specified lookback period.
Bollinger Bands Integration: Optional integration of Bollinger Bands for additional confirmation and visualization of potential overbought or oversold conditions.
Customizable Settings: Traders can easily customize key parameters, including RSI length, SMA length, lookback bars, threshold multiplier, and Bollinger Bands parameters.
Weighted Signals: The script introduces a unique weighting mechanism for signals, reducing false positives and improving overall reliability.
Underlying Calculations and Methods
1. Dynamic Threshold Calculation:
The heart of the Advanced Dynamic Threshold RSI Indicator lies in its ability to dynamically calculate thresholds based on multiple timeframes. Let's delve into the technical details:
RSI Calculation:
For each specified timeframe (1-hour, 4-hour, 1-day, 1-week), the Relative Strength Index (RSI) is calculated using the standard 14-period formula.
SMA of RSI:
The Simple Moving Average (SMA) is applied to each RSI, resulting in the smoothing of RSI values. This smoothed RSI becomes the basis for dynamic threshold calculations.
Dynamic Adjustment:
The dynamically adjusted threshold for each timeframe is computed by adding a constant value (5 in this case) to the respective SMA of RSI. This dynamic adjustment ensures that the threshold reflects changing market conditions.
2. Weighted Signal System:
To enhance the precision of buy and sell signals, the script introduces a weighted signal system. Here's how it works technically:
Signal Weighting:
The script assigns weights to buy and sell signals based on the crossover and crossunder events between RSI and the dynamically adjusted thresholds. If a crossover event occurs, the weight is set to 2; otherwise, it remains at 1.
Signal Combination:
The weighted buy and sell signals from different timeframes are combined using logical operations. A buy signal is generated if the product of weights from all timeframes is equal to 2, indicating alignment across timeframe.
3. Experimental Enhancements:
The Advanced Dynamic Threshold RSI Indicator incorporates experimental features for educational exploration. While not intended as proven strategies, these features aim to offer users a glimpse into unconventional analysis. Some of these features include Performance Calculation, Volatility Calculation, Dynamic Threshold Calculation Using Volatility, Bollinger Bands Module, Weighted Signal System Incorporating New Features.
3.1 Performance Calculation:
The script calculates the percentage change in the price over a specified lookback period (variable lookbackBars). This provides a measure of recent performance.
pctChange(src, length) =>
change = src - src
pctChange = (change / src ) * 100
recentPerformance1H = pctChange(close, lookbackBars)
recentPerformance4H = pctChange(request.security(syminfo.tickerid, "240", close), lookbackBars)
recentPerformance1D = pctChange(request.security(syminfo.tickerid, "1D", close), lookbackBars)
3.2 Volatility Calculation:
The script computes the standard deviation of the closing price to measure volatility.
volatility1H = ta.stdev(close, 20)
volatility4H = ta.stdev(request.security(syminfo.tickerid, "240", close), 20)
volatility1D = ta.stdev(request.security(syminfo.tickerid, "1D", close), 20)
3.3 Dynamic Threshold Calculation Using Volatility:
The dynamic thresholds for RSI are calculated by adding a multiplier of volatility to 50.
dynamicThreshold1H = 50 + thresholdMultiplier * volatility1H
dynamicThreshold4H = 50 + thresholdMultiplier * volatility4H
dynamicThreshold1D = 50 + thresholdMultiplier * volatility1D
3.4 Bollinger Bands Module:
An additional module for Bollinger Bands is introduced, providing an option to enable or disable it.
// Additional Module: Bollinger Bands
bbLength = input(20, title="Bollinger Bands Length")
bbMultiplier = input(2.0, title="Bollinger Bands Multiplier")
upperBand = ta.sma(close, bbLength) + bbMultiplier * ta.stdev(close, bbLength)
lowerBand = ta.sma(close, bbLength) - bbMultiplier * ta.stdev(close, bbLength)
3.5 Weighted Signal System Incorporating New Features:
Buy and sell signals are generated based on the dynamic threshold, recent performance, and Bollinger Bands.
weightedBuySignal = rsi1H > dynamicThreshold1H and rsi4H > dynamicThreshold4H and rsi1D > dynamicThreshold1D and crossOver1H
weightedSellSignal = rsi1H < dynamicThreshold1H and rsi4H < dynamicThreshold4H and rsi1D < dynamicThreshold1D and crossUnder1H
These features collectively aim to provide users with a more comprehensive view of market dynamics by incorporating recent performance and volatility considerations into the RSI analysis. Users can experiment with these features to explore their impact on signal accuracy and overall indicator performance.
Indicator Placement for Enhanced Visibility
Overview
The design choice to position the "Advanced Dynamic Threshold RSI" indicator both on the main chart and beneath it has been carefully considered to address specific challenges related to visibility and scaling, providing users with an improved analytical experience.
Challenges Faced
1. Differing Scaling of RSI Results:
RSI values for different timeframes (1-hour, 4-hour, and 1-day) often exhibit different scales, especially in markets like gold.
Attempting to display these RSIs on the same chart can lead to visibility issues, as the scaling differences may cause certain RSI lines to appear compressed or nearly invisible.
2. Candlestick Visibility vs. RSI Scaling:
Balancing the visibility of candlestick patterns with that of RSI values posed a unique challenge.
A single pane for both candlesticks and RSIs may compromise the clarity of either, particularly when dealing with assets that exhibit distinct volatility patterns.
Design Solution
Placing the buy/sell signals above/below the candles helps to maintain a clear association between the signals and price movements.
By allocating RSIs beneath the main chart, users can better distinguish and analyze the RSI values without interference from candlestick scaling.
Doubling the scaling of the 1-hour RSI (displayed in blue) addresses visibility concerns and ensures that it remains discernible even when compared to the other two RSIs: 4-hour RSI (orange) and 1-day RSI (green).
Bollinger Bands Module is optional, but is turned on as default. When the module is turned on, the users can see the upper Bollinger Band (green) and lower Bollinger Band (red) on the main chart to gain more insight into price actions of the candles.
User Flexibility
This dual-placement approach offers users the flexibility to choose their preferred visualization:
The main chart provides a comprehensive view of buy/sell signals in relation to candlestick patterns.
The area beneath the chart accommodates a detailed examination of RSI values, each in its own timeframe, without compromising visibility.
The chosen design optimizes visibility and usability, addressing the unique challenges posed by differing RSI scales and ensuring users can make informed decisions based on both price action and RSI dynamics.
Usage
Installation
To ensure you receive updates and enhancements seamlessly, follow these steps:
Open the TradingView platform.
Navigate to the "Indicators" tab in the top menu.
Click on "Community Scripts" and search for "Advanced Dynamic Threshold RSI Indicator."
Select the indicator from the search results and click on it to add to your chart.
This ensures that any future updates to the indicator can be easily applied, keeping you up-to-date with the latest features and improvements.
Review Code
Open TradingView and navigate to the Pine Editor.
Copy the provided script.
Paste the script into the Pine Editor.
Click "Add to Chart."
Configuration
The indicator offers several customizable settings:
RSI Length: Defines the length of the RSI calculation.
SMA Length: Sets the length of the SMA applied to the RSI.
Lookback Bars: Determines the number of bars used for recent performance analysis.
Threshold Multiplier: Adjusts the multiplier for dynamic threshold calculation.
Enable Bollinger Bands: Allows users to enable or disable Bollinger Bands integration.
Interpreting Signals
Buy Signal: Generated when RSI values are above dynamic thresholds and a crossover occurs.
Sell Signal: Generated when RSI values are below dynamic thresholds and a crossunder occurs.
Additional Information
The indicator plots scaled RSI lines for 1-hour, 4-hour, and 1-day timeframes.
Users can experiment with additional modules, such as machine-learning simulation, dynamic real-life improvements, or experimental signal filtering, depending on personal preferences.
Conclusion
The Advanced Dynamic Threshold RSI Indicator provides traders with a sophisticated tool for RSI-based analysis, offering a unique combination of dynamic thresholds, performance analysis, and optional Bollinger Bands integration. Traders can customize settings and experiment with additional modules to tailor the indicator to their trading strategy.
Disclaimer: Use of the Advanced Dynamic Threshold RSI Indicator
The Advanced Dynamic Threshold RSI Indicator is provided for educational and experimental purposes only. The indicator is not intended to be used as financial or investment advice. Trading and investing in financial markets involve risk, and past performance is not indicative of future results.
The creator of this indicator is not a financial advisor, and the use of this indicator does not guarantee profitability or specific trading outcomes. Users are encouraged to conduct their own research and analysis and, if necessary, consult with a qualified financial professional before making any investment decisions.
It is important to recognize that all trading involves risk, and users should only trade with capital that they can afford to lose. The Advanced Dynamic Threshold RSI Indicator is an experimental tool that may not be suitable for all individuals, and its effectiveness may vary under different market conditions.
By using this indicator, you acknowledge that you are doing so at your own risk and discretion. The creator of this indicator shall not be held responsible for any financial losses or damages incurred as a result of using the indicator.
Kind regards,
Ely