Volume Spread Analysis [TANHEF]Volume Spread Analysis: Understanding Market Intentions through the Interpretation of Volume and Price Movements.
█ Simple Explanation:
The Volume Spread Analysis (VSA) indicator is a comprehensive tool that helps traders identify key market patterns and trends based on volume and spread data. This indicator highlights significant VSA patterns and provides insights into market behavior through color-coded volume/spread bars and identification of bars indicating strength, weakness, and neutrality between buyers and sellers. It also includes powerful volume and spread forecasting capabilities.
█ Laws of Volume Spread Analysis (VSA):
The origin of VSA begins with Richard Wyckoff, a pivotal figure in its development. Wyckoff made significant contributions to trading theory, including the formulation of three basic laws:
The Law of Supply and Demand: This fundamental law states that supply and demand balance each other over time. High demand and low supply lead to rising prices until demand falls to a level where supply can meet it. Conversely, low demand and high supply cause prices to fall until demand increases enough to absorb the excess supply.
The Law of Cause and Effect: This law assumes that a 'cause' will result in an 'effect' proportional to the 'cause'. A strong 'cause' will lead to a strong trend (effect), while a weak 'cause' will lead to a weak trend.
The Law of Effort vs. Result: This law asserts that the result should reflect the effort exerted. In trading terms, a large volume should result in a significant price move (spread). If the spread is small, the volume should also be small. Any deviation from this pattern is considered an anomaly.
█ Volume and Spread Analysis Bars:
Display: Volume and/or spread bars that consist of color coded levels. If both of these are displayed, the number of spread bars can be limited for visual appeal and understanding, with the spread bars scaled to match the volume bars. While automatic calculation of the number of visual bars for auto scaling is possible, it is avoided to prevent the indicator from reloading whenever the number of visual price bars on the chart is adjusted, ensuring uninterrupted analysis. A displayable table (Legend) of bar colors and levels can give context and clarify to each volume/spread bar.
Calculation: Levels are calculated using multipliers applied to moving averages to represent key levels based on historical data: low, normal, high, ultra. This method smooths out short-term fluctuations and focuses on longer-term trends.
Low Level: Indicates reduced volatility and market interest.
Normal Level: Reflects typical market activity and volatility.
High Level: Indicates increased activity and volatility.
Ultra Level: Identifies extreme levels of activity and volatility.
This illustrates the appearance of Volume and Spread bars when scaled and plotted together:
█ Forecasting Capabilities:
Display: Forecasted volume and spread levels using predictive models.
Calculation: Volume and Spread prediction calculations differ as volume is linear and spread is non-linear.
Volume Forecast (Linear Forecasting): Predicts future volume based on current volume rate and bar time till close.
Spread Forecast (Non-Linear Dynamic Forecasting): Predicts future spread using a dynamic multiplier, less near midpoint (consolidation) and more near low or high (trending), reflecting non-linear expansion.
Moving Averages: In forecasting, moving averages utilize forecasted levels instead of actual levels to ensure the correct level is forecasted (low, normal, high, or ultra).
The following compares forecasted volume with actual resulting volume, highlighting the power of early identifying increased volume through forecasted levels:
█ VSA Patterns:
Criteria and descriptions for each VSA pattern are available as tooltips beside them within the indicator’s settings. These tooltips provide explanations of potential developments based on the volume and spread data.
Signs of Strength (🟢): Patterns indicating strong buying pressure and potential market upturns.
Down Thrust
Selling Climax
No Effort → Bearish Result
Bearish Effort → No Result
Inverse Down Thrust
Failed Selling Climax
Bull Outside Reversal
End of Falling Market (Bag Holder)
Pseudo Down Thrust
No Supply
Signs of Weakness (🔴): Patterns indicating strong selling pressure and potential market downturns.
Up Thrust
Buying Climax
No Effort → Bullish Result
Bullish Effort → No Result
Inverse Up Thrust
Failed Buying Climax
Bear Outside Reversal
End of Rising Market (Bag Seller)
Pseudo Up Thrust
No Demand
Neutral Patterns (🔵): Patterns indicating market indecision and potential for continuation or reversal.
Quiet Doji
Balanced Doji
Strong Doji
Quiet Spinning Top
Balanced Spinning Top
Strong Spinning Top
Quiet High Wave
Balanced High Wave
Strong High Wave
Consolidation
Bar Patterns (🟡): Common candlestick patterns that offer insights into market sentiment. These are required in some VSA patterns and can also be displayed independently.
Bull Pin Bar
Bear Pin Bar
Doji
Spinning Top
High Wave
Consolidation
This demonstrates the acronym and descriptive options for displaying bar patterns, with the ability to hover over text to reveal the descriptive text along with what type of pattern:
█ Alerts:
VSA Pattern Alerts: Notifications for identified VSA patterns at bar close.
Volume and Spread Alerts: Alerts for confirmed and forecasted volume/spread levels (Low, High, Ultra).
Forecasted Volume and Spread Alerts: Alerts for forecasted volume/spread levels (High, Ultra) include a minimum percent time elapsed input to reduce false early signals by ensuring sufficient bar time has passed.
█ Inputs and Settings:
Display Volume and/or Spread: Choose between displaying volume bars, spread bars, or both with different lookback periods.
Indicator Bar Color: Select color schemes for bars (Normal, Detail, Levels).
Indicator Moving Average Color: Select schemes for bars (Fill, Lines, None).
Price Bar Colors: Options to color price bars based on VSA patterns and volume levels.
Legend: Display a table of bar colors and levels for context and clarity of volume/spread bars.
Forecast: Configure forecast display and prediction details for volume and spread.
Average Multipliers: Define multipliers for different levels (Low, High, Ultra) to refine the analysis.
Moving Average: Set volume and spread moving average settings.
VSA: Select the VSA patterns to be calculated and displayed (Strength, Weakness, Neutral).
Bar Patterns: Criteria for bar patterns used in VSA (Doji, Bull Pin Bar, Bear Pin Bar, Spinning Top, Consolidation, High Wave).
Colors: Set exact colors used for indicator bars, indicator moving averages, and price bars.
More Display Options: Specify how VSA pattern text is displayed (Acronym, Descriptive), positioning, and sizes.
Alerts: Configure alerts for VSA patterns, volume, and spread levels, including forecasted levels.
█ Usage:
The Volume Spread Analysis indicator is a helpful tool for leveraging volume spread analysis to make informed trading decisions. It offers comprehensive visual and textual cues on the chart, making it easier to identify market conditions, potential reversals, and continuations. Whether analyzing historical data or forecasting future trends, this indicator provides insights into the underlying factors driving market movements.
Cerca negli script per "wave"
VolumeSpreadAnalysisLibrary "VolumeSpreadAnalysis"
A library for Volume Spread Analysis (VSA).
spread(_barIndex)
Calculates the spread of a bar.
Parameters:
_barIndex (int) : (int) The index of the bar.
Returns: (float) The spread of the bar.
volume(_barIndex)
Retrieves the volume of a bar.
Parameters:
_barIndex (int) : (int) The index of the bar.
Returns: (float) The volume of the bar.
body(_barIndex)
Calculates the body of a bar.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (float) The body size of the bar.
wickUpper(_barIndex)
Calculates the upper wick of a bar (upper shadow).
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (float) The upper wick size of the bar.
wickLower(_barIndex)
Calculates the lower wick of a bar (lower shadow).
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (float) The lower wick size of the bar.
calcForecastedSMA(_source, _length, _forecastedLevel)
Calculates the forecasted Simple Moving Average (SMA).
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the SMA.
_forecastedLevel (float) : (float) The forecasted level to include in the calculation.
Returns: (float) The forecasted SMA value.
calcForecastedEMA(_source, _length, _forecastedLevel)
Calculates the forecasted Exponential Moving Average (EMA).
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the EMA.
_forecastedLevel (float) : (float) The forecasted level to include in the calculation.
Returns: (float) The forecasted EMA value.
calcForecastedRMA(_source, _length, _forecastedLevel)
Calculates the forecasted Relative Moving Average (RMA).
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the RMA.
_forecastedLevel (float) : (float) The forecasted level to include in the calculation.
Returns: (float) The forecasted RMA value.
calcForecastedWMA(_source, _length, _forecastedLevel)
Calculates the forecasted Weighted Moving Average (WMA).
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the WMA.
_forecastedLevel (float) : (float) The forecasted level to include in the calculation.
Returns: (float) The forecasted WMA value.
calcElapsedTimePercent()
Calculates the elapsed time percent of the current bar.
Returns: (float) The elapsed time percent.
calcForecastedSpread(multiplierAtMidpoints, multiplierAtPeaks)
Calculates the forecasted spread using elapsed time and dynamic multipliers, handling spread's non-linear nature.
Parameters:
multiplierAtMidpoints (float) : (float) The multiplier value at midpoints.
multiplierAtPeaks (float) : (float) The multiplier value at peaks.
Returns: (float) The forecasted spread value.
calcForecastedVolume()
Calculates the forecasted volume using elapsed time, satisfying volume's linear nature.
Returns: (float) The forecasted volume value.
calcForecastedMA(_source, _length, _forecastedSource, _type)
Calculates the forecasted Moving Average (MA) based on the specified type.
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the MA.
_forecastedSource (float) : (float) The forecasted level to include in the calculation.
_type (simple string) : (string) The type of the MA ("SMA", "EMA", "SMMA (RMA)", "WMA").
Returns: (float) The forecasted MA value.
calcMA(_source, _length, _type)
Calculates the Moving Average (MA) based on the specified type.
Parameters:
_source (float) : (series float) Source data for calculation.
_length (simple int) : (int) The length of the MA.
_type (simple string) : (string) The type of the MA ("SMA", "EMA", "SMMA (RMA)", "WMA").
Returns: (float) The MA value.
bullBar(_barIndex)
Determines if the bar is bullish.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (bool) True if the bar is bullish, otherwise false.
bearBar(_barIndex)
Determines if the bar is bearish.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (bool) True if the bar is bearish, otherwise false.
breakout(_barIndex)
Determines if there is a breakout above the previous bar.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (bool) True if there is a breakout, otherwise false.
breakdown(_barIndex)
Determines if there is a breakdown below the previous bar.
Parameters:
_barIndex (simple int) : (int) The index of the bar.
Returns: (bool) True if there is a breakdown, otherwise false.
rejectionWickUpper(_rejectionWick)
Determines if the upper wick is a rejection wick.
Parameters:
_rejectionWick (simple float) : (float) The rejection wick percentage.
Returns: (bool) True if the upper wick is a rejection wick, otherwise false.
rejectionWickLower(_rejectionWick)
Determines if the lower wick is a rejection wick.
Parameters:
_rejectionWick (simple float) : (float) The rejection wick percentage.
Returns: (bool) True if the lower wick is a rejection wick, otherwise false.
setupDataVolume(_data, _mult_Low, _mult_High, _mult_Ultra, _maLengthVolume, _maTypeVolume)
Sets up data for volume levels.
Parameters:
_data (map) : (map) The map to store the levels.
_mult_Low (simple float) : (float) The multiplier for low level.
_mult_High (simple float) : (float) The multiplier for high level.
_mult_Ultra (simple float) : (float) The multiplier for ultra level.
_maLengthVolume (simple int) : (int) The length for MA.
_maTypeVolume (simple string) : (string) The type for MA.
Returns: (void) Nothing.
setupDataSpread(_data, _mult_Low, _mult_High, _mult_Ultra, _maLengthSpread, _maTypeSpread)
Sets up data for spread levels.
Parameters:
_data (map) : (map) The map to store the levels.
_mult_Low (simple float) : (float) The multiplier for low level.
_mult_High (simple float) : (float) The multiplier for high level.
_mult_Ultra (simple float) : (float) The multiplier for ultra level.
_maLengthSpread (simple int) : (int) The length for MA.
_maTypeSpread (simple string) : (string) The type for MA.
Returns: (void) Nothing.
setupDataForecastVolume(_dataForecast, _mult_Low, _mult_High, _mult_Ultra, _maLengthVolume, _predictedLevelVolume, _maTypeVolume)
Sets up data for volume and spread levels for forecast.
Parameters:
_dataForecast (map)
_mult_Low (simple float) : (float) The multiplier for low level.
_mult_High (simple float) : (float) The multiplier for high level.
_mult_Ultra (simple float) : (float) The multiplier for ultra level.
_maLengthVolume (simple int) : (int) The length for MA.
_predictedLevelVolume (float) : (float) The predicted level for MA.
_maTypeVolume (simple string) : (string) The type for MA.
Returns: (void) Nothing.
setupDataForecastSpread(_dataForecast, _mult_Low, _mult_High, _mult_Ultra, _maLengthSpread, _predictedLevelSpread, _maTypeSpread)
Sets up data for spread levels for forecast.
Parameters:
_dataForecast (map)
_mult_Low (simple float) : (float) The multiplier for low level.
_mult_High (simple float) : (float) The multiplier for high level.
_mult_Ultra (simple float) : (float) The multiplier for ultra level.
_maLengthSpread (simple int) : (int) The length for MA.
_predictedLevelSpread (float) : (float) The predicted level for MA.
_maTypeSpread (simple string) : (string) The type for MA.
Returns: (void) Nothing.
isVolumeLow(_data, _barIndex)
Determines if the volume is low.
Parameters:
_data (map) : (map) The data map with volume levels.
_barIndex (int)
Returns: (bool) True if the volume is low, otherwise false.
isVolumeNormal(_data, _barIndex)
Determines if the volume is normal.
Parameters:
_data (map) : (map) The data map with volume levels.
_barIndex (int)
Returns: (bool) True if the volume is normal, otherwise false.
isVolumeHigh(_data, _barIndex)
Determines if the volume is high.
Parameters:
_data (map) : (map) The data map with volume levels.
_barIndex (int)
Returns: (bool) True if the volume is high, otherwise false.
isVolumeUltra(_data, _barIndex)
Determines if the volume is ultra.
Parameters:
_data (map) : (map) The data map with volume levels.
_barIndex (int)
Returns: (bool) True if the volume is ultra, otherwise false.
isSpreadLow(_data, _barIndex)
Determines if the spread is low.
Parameters:
_data (map) : (map) The data map with spread levels.
_barIndex (int)
Returns: (bool) True if the spread is low, otherwise false.
isSpreadNormal(_data, _barIndex)
Determines if the spread is normal.
Parameters:
_data (map) : (map) The data map with spread levels.
_barIndex (int)
Returns: (bool) True if the spread is normal, otherwise false.
isSpreadHigh(_data, _barIndex)
Determines if the spread is high.
Parameters:
_data (map) : (map) The data map with spread levels.
_barIndex (int)
Returns: (bool) True if the spread is high, otherwise false.
isSpreadUltra(_data, _barIndex)
Determines if the spread is ultra.
Parameters:
_data (map) : (map) The data map with spread levels.
_barIndex (int)
Returns: (bool) True if the spread is ultra, otherwise false.
isVolumeText(_data)
Determines text string representing the volume area level.
Parameters:
_data (map) : (map) The data map with volume levels.
Returns: (string) Text string of Low, Normal, High, or Ultra.
isSpreadText(_data)
Determines text string representing the spread area level.
Parameters:
_data (map) : (map) The data map with spread levels.
Returns: (string) Text string of Low, Normal, High, or Ultra.
calcBarColor(_value, _level)
Calculates the color based level.
Parameters:
_value (float) : (float) The value to check.
_level (float) : (float) The value level for comparison.
Returns: (color) The color for the bar.
bullPinBar(_maxBodyPercent, _minWickPercent)
Determines if the bar is a bull pin bar.
Parameters:
_maxBodyPercent (simple float) : (float) The maximum body percentage.
_minWickPercent (simple float) : (float) The minimum wick percentage.
Returns: (bool) True if the bar is a bull pin bar, otherwise false.
bearPinBar(_maxBodyPercent, _minWickPercent)
Determines if the bar is a bear pin bar.
Parameters:
_maxBodyPercent (simple float) : (float) The maximum body percentage.
_minWickPercent (simple float) : (float) The minimum wick percentage.
Returns: (bool) True if the bar is a bear pin bar, otherwise false.
dojiBar(_maxBodyPercent)
Determines if the bar is a doji.
Parameters:
_maxBodyPercent (simple float) : (float) The maximum body percentage.
Returns: (bool) True if the bar is a doji, otherwise false.
spinningTopBar(_minWicksPercent, _emaLength)
Determines if the bar is a spinning top.
Parameters:
_minWicksPercent (simple float) : (float) The minimum wicks percentage.
_emaLength (simple int) : (int) The length for EMA calculation.
Returns: (bool) True if the bar is a spinning top, otherwise false.
highWaveBar(_minBodyPercent, _minWickPercent, _bars)
Determines if the bar is a high wave bar.
Parameters:
_minBodyPercent (simple float) : (float) The minimum body percentage.
_minWickPercent (simple float) : (float) The minimum wick percentage.
_bars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if the bar is a high wave bar, otherwise false.
consolidationBar(_data, _spread, _bars)
Determines if the bars are in consolidation.
Parameters:
_data (map) : (map) The data map with spread levels.
_spread (simple float) : (float) The spread percentage for comparison.
_bars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if the bars are in consolidation, otherwise false.
S_DownThrust(_data, _bullPinBarMaxBody, _bullPinBarMinWick)
Determines if there is a sign of strength (DownThrust).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_bullPinBarMaxBody (simple float) : (float) The maximum body percentage for bull pin bar.
_bullPinBarMinWick (simple float) : (float) The minimum wick percentage for bull pin bar.
Returns: (bool) True if there is a sign of strength (DownThrust), otherwise false.
S_SellingClimax(_data, _rejectionWick)
Determines if there is a sign of strength (Selling Climax).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_rejectionWick (simple float) : (float) The rejection wick percentage.
Returns: (bool) True if there is a sign of strength (Selling Climax), otherwise false.
S_NoEffortBearishResult()
Determines if there is a sign of strength (No Effort Bearish Result).
Returns: (bool) True if there is a sign of strength (No Effort Bearish Result), otherwise false.
S_BearishEffortNoResult()
Determines if there is a sign of strength (Bearish Effort No Result).
Returns: (bool) True if there is a sign of strength (Bearish Effort No Result), otherwise false.
S_InverseDownThrust(_data, _bearPinBarMaxBody, _bearPinBarMinWick)
Determines if there is a sign of strength (Inverse DownThrust).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_bearPinBarMaxBody (simple float) : (float) The maximum body percentage for bear pin bar.
_bearPinBarMinWick (simple float) : (float) The minimum wick percentage for bear pin bar.
Returns: (bool) True if there is a sign of strength (Inverse DownThrust), otherwise false.
S_FailedSellingClimax()
Determines if there is a sign of strength (Failed Selling Climax).
Returns: (bool) True if there is a sign of strength (Failed Selling Climax), otherwise false.
S_BullOutsideReversal(_data)
Determines if there is a sign of strength (Bull Outside Reversal).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
Returns: (bool) True if there is a sign of strength (Bull Outside Reversal), otherwise false.
S_EndOfFallingMarket(_data)
Determines if there is a sign of strength (End of Falling Market).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
Returns: (bool) True if there is a sign of strength (End of Falling Market), otherwise false.
S_PseudoDownThrust(_bullPinBarMaxBody, _bullPinBarMinWick)
Determines if there is a sign of strength (Pseudo DownThrust).
Parameters:
_bullPinBarMaxBody (simple float) : (float) The maximum body percentage for bull pin bar.
_bullPinBarMinWick (simple float) : (float) The minimum wick percentage for bull pin bar.
Returns: (bool) True if there is a sign of strength (Pseudo DownThrust), otherwise false.
S_NoSupply(_bullPinBarMaxBody, _bullPinBarMinWick)
Determines if there is a sign of strength (No Supply).
Parameters:
_bullPinBarMaxBody (simple float) : (float) The maximum body percentage for bull pin bar.
_bullPinBarMinWick (simple float) : (float) The minimum wick percentage for bull pin bar.
Returns: (bool) True if there is a sign of strength (No Supply), otherwise false.
W_UpThrust(_data, _bearPinBarMaxBody, _bearPinBarMinWick)
Determines if there is a sign of weakness (UpThrust).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_bearPinBarMaxBody (simple float) : (float) The maximum body percentage for bear pin bar.
_bearPinBarMinWick (simple float) : (float) The minimum wick percentage for bear pin bar.
Returns: (bool) True if there is a sign of weakness (UpThrust), otherwise false.
W_BuyingClimax(_data, _rejectionWick)
Determines if there is a sign of weakness (Buying Climax).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_rejectionWick (simple float) : (float) The rejection wick percentage.
Returns: (bool) True if there is a sign of weakness (Buying Climax), otherwise false.
W_NoEffortBullishResult()
Determines if there is a sign of weakness (No Effort Bullish Result).
Returns: (bool) True if there is a sign of weakness (No Effort Bullish Result), otherwise false.
W_BullishEffortNoResult()
Determines if there is a sign of weakness (Bullish Effort No Result).
Returns: (bool) True if there is a sign of weakness (Bullish Effort No Result), otherwise false.
W_InverseUpThrust(_data, _bullPinBarMaxBody, _bullPinBarMinWick)
Determines if there is a sign of weakness (Inverse UpThrust).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_bullPinBarMaxBody (simple float) : (float) The maximum body percentage for bull pin bar.
_bullPinBarMinWick (simple float) : (float) The minimum wick percentage for bull pin bar.
Returns: (bool) True if there is a sign of weakness (Inverse UpThrust), otherwise false.
W_FailedBuyingClimax()
Determines if there is a sign of weakness (Failed Buying Climax).
Returns: (bool) True if there is a sign of weakness (Failed Buying Climax), otherwise false.
W_BearOutsideReversal(_data)
Determines if there is a sign of weakness (Bear Outside Reversal).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
Returns: (bool) True if there is a sign of weakness (Bear Outside Reversal), otherwise false.
W_EndOfRisingMarket(_data)
Determines if there is a sign of weakness (End of Rising Market).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
Returns: (bool) True if there is a sign of weakness (End of Rising Market), otherwise false.
W_PseudoUpThrust(_bearPinBarMaxBody, _bearPinBarMinWick)
Determines if there is a sign of weakness (Pseudo UpThrust).
Parameters:
_bearPinBarMaxBody (simple float) : (float) The maximum body percentage for bear pin bar.
_bearPinBarMinWick (simple float) : (float) The minimum wick percentage for bear pin bar.
Returns: (bool) True if there is a sign of weakness (Pseudo UpThrust), otherwise false.
W_NoDemand(_bearPinBarMaxBody, _bearPinBarMinWick)
Determines if there is a sign of weakness (No Demand).
Parameters:
_bearPinBarMaxBody (simple float) : (float) The maximum body percentage for bear pin bar.
_bearPinBarMinWick (simple float) : (float) The minimum wick percentage for bear pin bar.
Returns: (bool) True if there is a sign of weakness (No Demand), otherwise false.
N_QuietDoji(_dojiBarMaxBody)
Determines if there is a neutral signal (Quiet Doji).
Parameters:
_dojiBarMaxBody (simple float) : (float) The maximum body percentage for doji bar.
Returns: (bool) True if there is a neutral signal (Quiet Doji), otherwise false.
N_BalancedDoji(_data, _dojiBarMaxBody)
Determines if there is a neutral signal (Balanced Doji).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_dojiBarMaxBody (simple float) : (float) The maximum body percentage for doji bar.
Returns: (bool) True if there is a neutral signal (Balanced Doji), otherwise false.
N_StrongDoji(_dojiBarMaxBody)
Determines if there is a neutral signal (Strong Doji).
Parameters:
_dojiBarMaxBody (simple float) : (float) The maximum body percentage for doji bar.
Returns: (bool) True if there is a neutral signal (Strong Doji), otherwise false.
N_QuietSpinningTop(_spinningTopBarMinWicks, _spinningTopBarEmaLength)
Determines if there is a neutral signal (Quiet Spinning Top).
Parameters:
_spinningTopBarMinWicks (simple float) : (float) The minimum wicks percentage for spinning top bar.
_spinningTopBarEmaLength (simple int) : (int) The length for EMA calculation.
Returns: (bool) True if there is a neutral signal (Quiet Spinning Top), otherwise false.
N_BalancedSpinningTop(_data, _spinningTopBarMinWicks, _spinningTopBarEmaLength)
Determines if there is a neutral signal (Balanced Spinning Top).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_spinningTopBarMinWicks (simple float) : (float) The minimum wicks percentage for spinning top bar.
_spinningTopBarEmaLength (simple int) : (int) The length for EMA calculation.
Returns: (bool) True if there is a neutral signal (Balanced Spinning Top), otherwise false.
N_StrongSpinningTop(_spinningTopBarMinWicks, _spinningTopBarEmaLength)
Determines if there is a neutral signal (Strong Spinning Top).
Parameters:
_spinningTopBarMinWicks (simple float) : (float) The minimum wicks percentage for spinning top bar.
_spinningTopBarEmaLength (simple int) : (int) The length for EMA calculation.
Returns: (bool) True if there is a neutral signal (Strong Spinning Top), otherwise false.
N_QuietHighWave(_highWaveBarMinBody, _highWaveBarMinWick, _highWaveBarBars)
Determines if there is a neutral signal (Quiet High Wave).
Parameters:
_highWaveBarMinBody (simple float) : (float) The minimum body percentage for high wave bar.
_highWaveBarMinWick (simple float) : (float) The minimum wick percentage for high wave bar.
_highWaveBarBars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if there is a neutral signal (Quiet High Wave), otherwise false.
N_BalancedHighWave(_data, _highWaveBarMinBody, _highWaveBarMinWick, _highWaveBarBars)
Determines if there is a neutral signal (Balanced High Wave).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_highWaveBarMinBody (simple float) : (float) The minimum body percentage for high wave bar.
_highWaveBarMinWick (simple float) : (float) The minimum wick percentage for high wave bar.
_highWaveBarBars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if there is a neutral signal (Balanced High Wave), otherwise false.
N_StrongHighWave(_highWaveBarMinBody, _highWaveBarMinWick, _highWaveBarBars)
Determines if there is a neutral signal (Strong High Wave).
Parameters:
_highWaveBarMinBody (simple float) : (float) The minimum body percentage for high wave bar.
_highWaveBarMinWick (simple float) : (float) The minimum wick percentage for high wave bar.
_highWaveBarBars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if there is a neutral signal (Strong High Wave), otherwise false.
N_Consolidation(_data, _consolidationBarSpread, _consolidationBarBars)
Determines if there is a neutral signal (Consolidation).
Parameters:
_data (map) : (map) The data map with volume and spread levels.
_consolidationBarSpread (simple float) : (float) The spread percentage for consolidation bar.
_consolidationBarBars (simple int) : (int) The number of bars for comparison.
Returns: (bool) True if there is a neutral signal (Consolidation), otherwise false.
Alligator + MA Trend Catcher [TradeDots]The "Alligator + MA Trend Catcher" is a trading strategy that integrates the William Alligator indicator with a Moving Average (MA) to establish robust entry and exit conditions, optimized for capturing trends.
HOW IT WORKS
This strategy combines the traditional William Alligator set up with an additional Moving Average indicator for enhanced trend confirmation, creating a user-friendly backtesting tool for traders who prefer the Alligator method.
The original Alligator strategy can frequently present fluctuations, even in well-established trends, leading to potentially premature exits. To mitigate this, we incorporate a Moving Average as a secondary confirmation measure to ensure the market trend has indeed shifted.
Here’s the operational flow for long orders:
Entry Signal: When the price rises above the Moving Average, it confirms a bullish market state. Enter if Alligator spread in an upward direction. The trade remains active even if the Alligator indicator suggests a trend reversal.
Exit Signal: The position is closed when the price falls below the Moving Average, and the Alligator spreads in the downward direction. This setup helps traders to maintain positions through the entirety of the trend for maximum gain.
APPLICATION
This strategy is tailored for assets with significant, well-defined trends, such as Bitcoin and Ethereum, which are known for their high volatility and substantial price movements.
This strategy offers a low win-rate but high reward configuration, making asset selection critical for long-term profitability. If you choose assets that lack strong price momentum, there's a high chance that this strategy may not be effective.
For traders seeking to maximize gains from large trends without exiting prematurely, this strategy provides an aggressive yet controlled approach to riding out substantial market waves.
DEFAULT SETUP
Commission: 0.01%
Initial Capital: $10,000
Equity per Trade: 80%
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.
AWR_WaveTrend Multitimeframe [adapted from LazyBear]I've adapted a script from Lazy Bear (WT trend oscillator)
WaveTrend Oscillator is a port of a famous TS/MT indicator.
When the oscillator (WT1 designed as a line) is above the overbought band (50 to 60) and crosses down the WT2 (dotted line), it is usually a good SELL signal. Similarly, when the oscillator crosses above the signal when below the Oversold band ( (-50 to -60)), it is a good BUY signal.
In this indicator, you can display at the same time, different time frames.
Choice possible are 1 mn, 15 mn, 30 mn, 60 mn, 120 mn, 240 mn, 1D, Week, Month.
Small time frames (1 to 30 mn) are represented by a blue lines (light to dark)
1H is in grey
2H & 4H are in purple (light to dark)
1D is in green
1W is in orange
1M is in black
You can choose which timeframes you want to display for the current period or for the last period closed.
In a few seconds, you perfectly see the selected timeframes trends.
There is also at the bottom right a table summing up all the different values of WT1, WT2 and difference between them.
Positive difference means an upside trend
Negative difference means a downside trend.
Another way of using this indicator is displaying only the difference between WT1 & WT2. It's giving the speed & the direction of all trends. Trends are our friends ...
You can observe the significent times frames and look if they are all positives or negatives or if the speed of lower timeframe cross a longer timeframe of if the speed is decreasing or increasing...
Difference values goes generaly from -20 to 20 (it can exceed a bit but really rare). 12 is already high level of speed.
Many uses possible.
In the exemple posted, I've selected WT1 and WT2 for timeframes 4H, Daily & Weekly.
Marker 1:
Orange lines (WT1) are far below - 50 (-67 here) and cross WT2 pointed lines : weekly buy signal
But this buy signal is balanced by 4H & Daily sell signal = it's marking start of hesitations of main trend !!!!
Marker 2 :
Next buy signal in 4H or daily would normaly confirm the start
Marker 3 :
Sell signal in 4H and daily but weekly has an upside trend ! Start of a counter trend in the trend. To find the perfect timing of that you have to look to lower time frames, because 4H and daily are giving many hesitations signals crossing down & crossing up many times in an overbought zone.
Marker 4 :
End of the counter trend. Most of the time, the countertrend don't go in the "over" zone. That's why if you trading in an counter trend, you have to keep it in mind.
Then a few days later you can see the sell signal. And what a sell signal ! 4H & daily are smashed down really fastly ! Trends change warning !
Marker 5
Long hesitation/change of the trend. Daily WT and 4H are below the weekly trends. Weekly start to go down.
Start of a counter trend inside the trend giving us the best selling signal at her end !
Marker 6 :
Long hesitation/change of the trend.
You have to look in lower time frames to identify the short trend. Difficult to find the best timing to get in. ....
I've add many alerts. When a time frame become positive or negative. When many time frames are positive or negative or above or below 47 level...
Please feel free to explore.
Hope it will help you.
Thanks to Lazybear ! Thousands thanks to Lazybear !
Exemple with difference
Squeeze Momentum DeluxeThe Squeeze Momentum Deluxe is a comprehensive trading toolkit built with features of momentum, volatility, and price action. This script offers a suite for both mean reversion and trend-following analysis. Developed based on the original TTM Squeeze implementation by @LazyBear, this indicator introduces several innovative components to enhance your trading insights.
🔲 Components and Features
Momentum Oscillator - as rooted in the TTM Squeeze, quantifies the relationship between price and its extremes over a defined period. By normalizing the calculation, the values become comparable throughout time and across securities, allowing for a nuanced assessment of Bullish and Bearish momentum. Furthermore, by presenting it as a ribbon with a signal line we gain additional information about the direction of price swings.
Squeeze Bars - The original squeeze concept is based on the relationship between the Bollinger Bands and Keltner Channel , once the BB resides inside the KC a squeeze occurs. By understanding their fundamentals a new form of calculation can be inferred.
method bb(float src, simple int len, simple float mult) => method kc(float src, simple int len, simple float mult) =>
float basis = ta.sma (src, len) float basis = ta.sma (src, len)
float dev = ta.stdev(src, len) float rng = ta.atr ( len)
float upper = basis + dev * mult float upper = basis + rng * mult
float lower = basis - dev * mult float lower = basis - rng * mult
Both BB and KC are constructed upon a moving average with the addition of Standard Deviation and Average True Range respectively. Therefore, the calculation can be transformed to when the Stdev is lower than the ATR a squeeze occurs.
method sqz(float src, simple int len) =>
float dev = ta.stdev(src, len)
float atr = ta.atr ( len)
dev < atr ? true : false
This indicator uses three different thresholds for the ATR to gain three levels of price "Squeeze" for further analysis.
Directional Flux- This component measures the overall direction of price volatility, offering insights into trend sentiment. Presented as waves in the background, it includes an OverFlux feature to signal extreme market bias in a particular direction which can signal either exhaustion or vital continuation. Additionally, the user can choose if to base the calculation on Heikin-Ashi Candles to bias the tool toward trend assessment.
Confluence Gauges - Placed at the top and bottom of the indicator, these gauges measure confluence in the relationship between the Momentum Oscillator and Directional Flux. They provide traders with an easily interpretable visual aid for detecting market sentiment. Reversal doritos displayed alongside them contribute to mean reversion analysis.
Divergences (Real-Time) - Equipped with a custom algorithm, the indicator detects real-time divergences between price and the oscillator. This dynamic feature enhances your ability to spot potential trend reversals as they occur.
🔲 Settings
Directional Flux Length - Adjusts the period of which the background volatility waves operate on.
Trend Bias - Bases the calculation of the Flux to HA candles to bias its behavior toward the trend of price action.
Squeeze Momentum Length - Calibrates the length of the main oscillator ribbon as well as the period for the squeeze algorithm.
Signal - Controls the width of the ribbon. Lower values result in faster responsiveness at the cost of premature positives.
Divergence Sensitivity - Adjusts a threshold to limit the amount of divergences detected based on strength. Higher values result in less detections, stronger structure.
🔲 Alerts
Sell Signal
Buy Signal
Bullish Momentum
Bearish Momentum
Bullish Flux
Bearish Flux
Bullish Swing
Bearish Swing
Strong Bull Gauge
Strong Bear Gauge
Weak Bull Gauge
Weak Bear Gauge
High Squeeze
Normal Squeeze
Low Squeeze
Bullish Divergence
Bearish Divergence
As well as the option to trigger 'any alert' call.
The Squeeze Momentum Deluxe is a comprehensive tool that goes beyond traditional momentum indicators, offering a rich set of features to elevate your trading strategy. I recommend using toolkit alongside other indicators to have a wide variety of confluence to therefore gain higher probabilistic and better informed decisions.
Flags and Pennants [Trendoscope®]🎲 An extension to Chart Patterns based on Trend Line Pairs - Flags and Pennants
After exploring Algorithmic Identification and Classification of Chart Patterns and developing Auto Chart Patterns Indicator , we now delve into extensions of these patterns, focusing on Flag and Pennant Chart Patterns. These patterns evolve from basic trend line pair-based structures, often influenced by preceding market impulses.
🎲 Identification rules for the Extension Patterns
🎯 Identify the existence of Base Chart Patterns
Before identifying the flag and pennant patterns, we first need to identify the existence of following base trend line pair based converging or parallel patterns.
Ascending Channel
Descending Channel
Rising Wedge (Contracting)
Falling Wedge (Contracting)
Converging Triangle
Descending Triangle (Contracting)
Ascending Triangle (Contracting)
🎯 Identifying Extension Patterns.
The key to pinpointing these patterns lies in spotting a strong impulsive wave – akin to a flagpole – preceding a base pattern. This setup suggests potential for an extension pattern:
A Bullish Flag emerges from a positive impulse followed by a descending channel or a falling wedge
A Bearish Flag appears after a negative impulse leading to an ascending channel or a rising wedge.
A Bullish Pennant is indicated by a positive thrust preceding a converging triangle or ascending triangle.
A Bearish Pennant follows a negative impulse and a converging or descending triangle.
🎲 Pattern Classifications and Characteristics
🎯 Bullish Flag Pattern
Characteristics of Bullish Flag Pattern are as follows
Starts with a positive impulse wave
Immediately followed by either a short descending channel or a falling wedge
Here is an example of Bullish Flag Pattern
🎯 Bearish Flag Pattern
Characteristics of Bearish Flag Pattern are as follows
Starts with a negative impulse wave
Immediately followed by either a short ascending channel or a rising wedge
Here is an example of Bearish Flag Pattern
🎯 Bullish Pennant Pattern
Characteristics of Bullish Pennant Pattern are as follows
Starts with a positive impulse wave
Immediately followed by either a converging triangle or ascending triangle pattern.
Here is an example of Bullish Pennant Pattern
🎯 Bearish Pennant Pattern
Characteristics of Bearish Pennant Pattern are as follows
Starts with a negative impulse wave
Immediately followed by either a converging triangle or a descending converging triangle pattern.
Here is an example of Bearish Pennant Pattern
🎲 Trading Extension Patterns
In a strong market trend, it's common to see temporary periods of consolidation, forming patterns that either converge or range, often counter to the ongoing trend direction. Such pauses may lay the groundwork for the continuation of the trend post-breakout. The assumption that the trend will resume shapes the underlying bias of Flag and Pennant patterns
It's important, however, not to base decisions solely on past trends. Conducting personal back testing is crucial to ascertain the most effective entry and exit strategies for these patterns. Remember, the behavior of these patterns can vary significantly with the volatility of the asset and the specific timeframe being analyzed.
Approach the interpretation of these patterns with prudence, considering that market dynamics are subject to a wide array of influencing factors that might deviate from expected outcomes. For investors and traders, it's essential to engage in thorough back testing, establishing entry points, stop-loss orders, and target goals that align with your individual trading style and risk appetite. This step is key to assessing the viability of these patterns in line with your personal trading strategies and goals.
It's fairly common to witness a breakout followed by a swift price reversal after these patterns have formed. Additionally, there's room for innovation in trading by going against the bias if the breakout occurs in the opposite direction, specially when the trend before the formation of the pattern is in against the pattern bias.
🎲 Cheat Sheet
🎲 Indicator Settings
Custom Source : Enables users to set custom OHLC - this means, the indicator can also be applied on oscillators and other indicators having OHLC values.
Zigzag Settings : Allows users to enable different zigzag base and set length and depth for each zigzag.
Scanning Settings : Pattern scanning settings set some parameters that define the pattern recognition process.
Display Settings : Determine the display of indicators including colors, lines, labels etc.
Backtest Settings : Allows users to set a predetermined back test bars so that the indicator will not time out while trying to run for all available bars.
Triple Confirmation Kernel Regression Overlay [QuantraSystems]Kernel Regression Oscillator - Overlay
Introduction
The Kernel Regression Oscillator (ᏦᏒᎧ) represents an advanced tool for traders looking to capitalize on market trends.
This Indicator is valuable in identifying and confirming trend directions, as well as probabilistic and dynamic oversold and overbought zones.
It achieves this through a unique composite approach using three distinct Kernel Regressions combined in an Oscillator.
The additional Chart Overlay Indicator adds confidence to the signal.
Which is this Indicator.
This methodology helps the trader to significantly reduce false signals and offers a more reliable indication of market movements than more widely used indicators can.
Legend
The upper section is the Overlay. It features the Signal Wave to display the current trend.
Its Overbought and Oversold zones start at 50% and end at 100% of the selected Standard Deviation (default σ = 3), which can indicate extremely rare situations which can lead to either a softening momentum in the trend or even a mean reversion situation.
The lower one is the Base Chart.
The Indicator is linked here
It features the Kernel Regression Oscillator to display a composite of three distinct regressions, also displaying current trend.
Its Overbought and Oversold zones start at 50% and end at 100% of the selected Standard Deviation (default σ = 2), which can indicate extremely rare situations.
Case Study
To effectively utilize the ᏦᏒᎧ, traders should use both the additional Overlay and the Base
Chart at the same time. Then focus on capturing the confluence in signals, for example:
If the 𝓢𝓲𝓰𝓷𝓪𝓵 𝓦𝓪𝓿𝓮 on the Overlay and the ᏦᏒᎧ on the Base Chart both reside near the extreme of an Oversold zone the probability is higher than normal that momentum in trend may soften or the token may even experience a reversion soon.
If a bar is characterized by an Oversold Shading in both the Overlay and the Base Chart, then the probability is very high to experience a reversion soon.
In this case the trader may want to look for appropriate entries into a long position, as displayed here.
If a bar is characterized by an Overbought Shading in either Overlay or Base Chart, then the probability is high for momentum weakening or a mean reversion.
In this case the trade may have taken profit and closed his long position, as displayed here.
Please note that we always advise to find more confluence by additional indicators.
Recommended Settings
Swing Trading (1D chart)
Overlay
Bandwith: 45
Width: 2
SD Lookback: 150
SD Multiplier: 2
Base Chart
Bandwith: 45
SD Lookback: 150
SD Multiplier: 2
Fast-paced, Scalping (4min chart)
Overlay
Bandwith: 75
Width: 2
SD Lookback: 150
SD Multiplier: 3
Base Chart
Bandwith: 45
SD Lookback: 150
SD Multiplier: 2
Notes
The Kernel Regression Oscillator on the Base Chart is also sensitive to divergences if that is something you are keen on using.
For maximum confluence, it is recommended to use the indicator both as a chart overlay and in its Base Chart.
Please pay attention to shaded areas with Standard Deviation settings of 2 or 3 at their outer borders, and consider action only with high confidence when both parts of the indicator align on the same signal.
This tool shows its best performance on timeframes lower than 4 hours.
Traders are encouraged to test and determine the most suitable settings for their specific trading strategies and timeframes.
The trend following functionality is indicated through the "𝓢𝓲𝓰𝓷𝓪𝓵 𝓦𝓪𝓿𝓮" Line, with optional "Up" and "Down" arrows to denote trend directions only (toggle “Show Trend Signals”).
Methodology
The Kernel Regression Oscillator takes three distinct kernel regression functions,
used at similar weight, in order to calculate a balanced and smooth composite of the regressions. Part of it are:
The Epanechnikov Kernel Regression: Known for its efficiency in smoothing data by assigning less weight to data points further away from the target point than closer data points, effectively reducing variance.
The Wave Kernel Regression: Similarly assigning weight to the data points based on distance, it captures repetitive and thus wave-like patterns within the data to smoothen out and reduce the effect of underlying cyclical trends.
The Logistic Kernel Regression: This uses the logistic function in order to assign weights by probability distribution on the distance between data points and target points. It thus avoids both bias and variance to a certain level.
kernel(source, bandwidth, kernel_type) =>
switch kernel_type
"Epanechnikov" => math.abs(source) <= 1 ? 0.75 * (1 - math.pow(source, 2)) : 0.0
"Logistic" => 1/math.exp(source + 2 + math.exp(-source))
"Wave" => math.abs(source) <= 1 ? (1 - math.abs(source)) * math.cos(math.pi * source) : 0.
kernelRegression(src, bandwidth, kernel_type) =>
sumWeightedY = 0.
sumKernels = 0.
for i = 0 to bandwidth - 1
base = i*i/math.pow(bandwidth, 2)
kernel = kernel(base, 1, kernel_type)
sumWeightedY += kernel * src
sumKernels += kernel
(src - sumWeightedY/sumKernels)/src
// Triple Confirmations
Ep = kernelRegression(source, bandwidth, 'Epanechnikov' )
Lo = kernelRegression(source, bandwidth, 'Logistic' )
Wa = kernelRegression(source, bandwidth, 'Wave' )
By combining these regressions in an unbiased average, we follow our principle of achieving confluence for a signal or a decision, by stacking several edges to increase the probability that we are correct.
// Average
AV = math.avg(Ep, Lo, Wa)
The Standard Deviation bands take defined parameters from the user, in this case sigma of ideally between 2 to 3,
to help the indicator detect extremely improbable conditions and thus take an inversely probable signal from it to forward to the user.
The parameter settings and also the visualizations allow for ample customizations by the trader. The indicator comes with default and recommended settings.
For questions or recommendations, please feel free to seek contact in the comments.
Triple Confirmation Kernel Regression Base [QuantraSystems]Kernel Regression Oscillator - BASE
Introduction
The Kernel Regression Oscillator (ᏦᏒᎧ) represents an advanced tool for traders looking to capitalize on market trends.
This Indicator is valuable in identifying and confirming trend directions, as well as probabilistic and dynamic oversold and overbought zones.
It achieves this through a unique composite approach using three distinct Kernel Regressions combined in an Oscillator. The additional Chart Overlay Indicator adds confidence to the signal.
This methodology helps the trader to significantly reduce false signals and offers a more reliable indication of market movements than more widely used indicators can.
Legend
The upper section is the Overlay. It features the Signal Wave to display the current trend.
Its Overbought and Oversold zones start at 50% and end at 100% of the selected Standard Deviation (default σ = 3), which can indicate extremely rare situations which can lead to either a softening momentum in the trend or even a mean reversion situation.
The lower one is the Base Chart - This Indicator.
It features the Kernel Regression Oscillator to display a composite of three distinct regressions, also displaying current trend.
Its Overbought and Oversold zones start at 50% and end at 100% of the selected Standard Deviation (default σ = 2), which can indicate extremely rare situations.
Case Study
To effectively utilize the ᏦᏒᎧ, traders should use both the additional Overlay and the Base
Chart at the same time. Then focus on capturing the confluence in signals, for example:
If the 𝓢𝓲𝓰𝓷𝓪𝓵 𝓦𝓪𝓿𝓮 on the Overlay and the ᏦᏒᎧ on the Base Chart both reside near the extreme of an Oversold zone the probability is higher than normal that momentum in trend may soften or the token may even experience a reversion soon.
If a bar is characterized by an Oversold Shading in both the Overlay and the Base Chart, then the probability is very high to experience a reversion soon.
In this case the trader may want to look for appropriate entries into a long position, as displayed here.
If a bar is characterized by an Overbought Shading in either Overlay or Base Chart, then the probability is high for momentum weakening or a mean reversion.
In this case the trade may have taken profit and closed his long position, as displayed here.
Please note that we always advise to find more confluence by additional indicators.
Recommended Settings
Swing Trading (1D chart)
Overlay
Bandwith: 45
Width: 2
SD Lookback: 150
SD Multiplier: 2
Base Chart
Bandwith: 45
SD Lookback: 150
SD Multiplier: 2
Fast-paced, Scalping (4min chart)
Overlay
Bandwith: 75
Width: 2
SD Lookback: 150
SD Multiplier: 3
Base Chart
Bandwith: 45
SD Lookback: 150
SD Multiplier: 2
Notes
The Kernel Regression Oscillator on the Base Chart is also sensitive to divergences if that is something you are keen on using.
For maximum confluence, it is recommended to use the indicator both as a chart overlay and in its Base Chart.
Please pay attention to shaded areas with Standard Deviation settings of 2 or 3 at their outer borders, and consider action only with high confidence when both parts of the indicator align on the same signal.
This tool shows its best performance on timeframes lower than 4 hours.
Traders are encouraged to test and determine the most suitable settings for their specific trading strategies and timeframes.
The trend following functionality is indicated through the "𝓢𝓲𝓰𝓷𝓪𝓵 𝓦𝓪𝓿𝓮" Line, with optional "Up" and "Down" arrows to denote trend directions only (toggle “Show Trend Signals”).
Methodology
The Kernel Regression Oscillator takes three distinct kernel regression functions,
used at similar weight, in order to calculate a balanced and smooth composite of the regressions. Part of it are:
The Epanechnikov Kernel Regression: Known for its efficiency in smoothing data by assigning less weight to data points further away from the target point than closer data points, effectively reducing variance.
The Wave Kernel Regression: Similarly assigning weight to the data points based on distance, it captures repetitive and thus wave-like patterns within the data to smoothen out and reduce the effect of underlying cyclical trends.
The Logistic Kernel Regression: This uses the logistic function in order to assign weights by probability distribution on the distance between data points and target points. It thus avoids both bias and variance to a certain level.
kernel(source, bandwidth, kernel_type) =>
switch kernel_type
"Epanechnikov" => math.abs(source) <= 1 ? 0.75 * (1 - math.pow(source, 2)) : 0.0
"Logistic" => 1/math.exp(source + 2 + math.exp(-source))
"Wave" => math.abs(source) <= 1 ? (1 - math.abs(source)) * math.cos(math.pi * source) : 0.
kernelRegression(src, bandwidth, kernel_type) =>
sumWeightedY = 0.
sumKernels = 0.
for i = 0 to bandwidth - 1
base = i*i/math.pow(bandwidth, 2)
kernel = kernel(base, 1, kernel_type)
sumWeightedY += kernel * src
sumKernels += kernel
(src - sumWeightedY/sumKernels)/src
// Triple Confirmations
Ep = kernelRegression(source, bandwidth, 'Epanechnikov' )
Lo = kernelRegression(source, bandwidth, 'Logistic' )
Wa = kernelRegression(source, bandwidth, 'Wave' )
By combining these regressions in an unbiased average, we follow our principle of achieving confluence for a signal or a decision, by stacking several edges to increase the probability that we are correct.
// Average
AV = math.avg(Ep, Lo, Wa)
The Standard Deviation bands take defined parameters from the user, in this case sigma of ideally between 2 to 3,
to help the indicator detect extremely improbable conditions and thus take an inversely probable signal from it to forward to the user.
The parameter settings and also the visualizations allow for ample customizations by the trader. The indicator comes with default and recommended settings.
For questions or recommendations, please feel free to seek contact in the comments.
Trailing Stop-Loss Indicator (FinnoVent)The Dynamic 9 EMA Trailing Stop-Loss Indicator is a specialized tool designed for the TradingView community to enhance risk management in trading. This script dynamically adjusts a trailing stop-loss level based on the position of the price relative to a 9-period Exponential Moving Average (EMA), offering traders a systematic approach to protect potential profits and limit downside risk.
Functionality:
Adaptive Trailing Stop: The indicator calculates a trailing stop-loss that adjusts with the 9 EMA, providing a responsive method to secure gains or prevent extensive losses.
EMA Trend Indicator: The 9-period EMA serves as a momentum indicator, with the script adjusting the trailing stop-loss accordingly — above the EMA for short positions and below for long positions.
Entry Signal Visualization: Entry signals are visualized on the chart, indicating potential long and short positions based on price crossovers with the EMA.
Application:
This indicator is ideal for traders who utilize technical analysis to make informed decisions. By automatically adjusting the stop-loss level to the evolving market conditions, it is particularly useful for:
Day traders looking to capitalize on short-term price movements.
Swing traders aiming to secure positions during more extended market waves.
Any trading strategy that benefits from dynamic stop-loss management.
Usage:
To use the indicator, simply add it to your TradingView chart, and it will automatically plot the trailing stop levels. The green and red lines represent the trailing stops for long and short positions, respectively, providing clear visual cues for potential exit points.
Compliance with TradingView House Rules:
This script is provided for educational purposes and does not constitute investment advice. It is a unique creation that has been developed to contribute to the TradingView community by offering a tool that helps traders manage their trades more effectively.
Fibonacci TradingFibonacci Trading
This simple script draw Fibonacci Retracement to define pullback level and draw Fibonacci Extension to define target level of a upward wave or doward wave
1. Upward wave
1.1 Fibonacci Retracement
+ Fibonacci Retracement measuare from support to nearest resistance on the right.
+ Retracement Level 0 named as "Breake Even"
+ Retracement Level 100 named as "Long Invalidation"
+ Retracement Level 50 and 61.8 is ploted as blue line
+ The zone between Retracement Level 50 and 100 is filled by blue color and named as "Buy zone"
1.2 Fibonacci Extension
+ Fibonacci Extension measuare from Retracement Level 61.8 to Retracement Level 0
+ Fibonacci Extension Level 161.8 named as "Tp1 (Target point 1)"
+ Fibonacci Extension Level 261.8 named as "Tp2 (Target point 2)"
2. Doward wave
2.1 Fibonacci Retracement
+ Fibonacci Retracement measuare from resistance to nearest support on the right.
+ Retracement Level 0 named as "Breake Even"
+ Retracement Level 100 named as "Short Invalidation"
+ Retracement Level 50 and 61.8 is ploted as red line
+ The zone between Retracement Level 50 and 100 is filled by red color and named as "Sell zone"
2.2 Fibonacci Extension
+ Fibonacci Extension measuare from Retracement Level 61.8 to Retracement Level 0
+ Fibonacci Extension Level 161.8 named as "Tp1 (Target point 1)"
+ Fibonacci Extension Level 261.8 named as "Tp2 (Target point 2)"
3. Trading Setup
3.1 Long Only: Only display Fibonacci of Upward wave
3.2 Short Only: Only display Fibonacci of Doward wave
3.3 Both: Display both Fibonacci of Upward wave and Doward wave
MA Slope : New Method1 . Introduction
Hello, traders.
This indicator is designed to measure the slope of a moving average line.
I imagine many of you who use Pine Script have struggled with this; measuring the slope of a moving average line can be quite challenging.
Firstly, this is because while the x-axis is fixed to the 'number of candles', the price scale on the y-axis can be adjusted freely.
Secondly, while the concept of differentiation could simplify the measurement process, the resulting value will differ from the conventional derivative we are familiar with since 'delta x' is fixed to '1'.
Consequently, I've put a lot of thought into how to configure the x-axis and y-axis in order to measure a slope that aligns with our perception of 'slope'.
After some reflection, I, like many others, realized that many people measure the slope based on the pivot of the moving average line.
This indicator is the product of that reflection.
2. Description
A. Setting
First, select the moving average line for which you want to check the slope. While SMA is commonly used, T3 is set as the default because it best visualizes the slope.
If you check 'Show MA Slope Average Pivot Range?' in the input window, it displays the average of the recent 30 slope pivot highs and pivot lows.
In other words, it shows 'On average, this level of slope was produced in the recent 30 waves.'
B. Usage
A cross from 0 in the slope indicates a 'reversal in the slope of the curve', which is the most crucial value when observing the slope.
Thus, fundamentally, it's important to look at the points where the slope becomes "0". Furthermore, when the slope starts to curve after rising, it signifies a change in acceleration, suggesting an imminent slope reversal.
(Note that acceleration was omitted from the indicator representation due to its tendency to overly complicate the data.)
While a shorter length of the moving average line may provide more useful slope data for actual trading, a less smooth moving average line may cross around 0 too often, making it less useful.
Therefore, it's crucial to adjust the 'Smoothing Length' in the input values to find a value that you believe is appropriate.
3. Conclusion
I always contemplate how to find a value in Pine Script that is similar to the perceived slope.
I made this script thinking that it might be a novel approach, but there are still many areas that need improvement.
If you have any innovative ideas about the slope, please feel free to provide feedback anytime.
Thank you.
--------
1. 서론
트레이더 여러분 안녕하세요. 이 지표는 이동평균선의 기울기를 측정하는 지표입니다.
아마 파인스크립트를 다루는 많은 분들이 같은 고민을 하셨을 것 같은데, 이동평균선의 기울기를 측정하는 것은 매우 어렵습니다.
그 이유로 첫번째는 x축은 '캔들 갯수'로 고정되어있는 반면, y축의 가격 스케일은 유동적으로 바꿀 수 있기 때문입니다.
두번째로는, 미분 개념을 이용하면 훨씬 수월하게 구할 수 있을테지만, 델타x가 '1'로 고정되어있기 때문에 우리가 알고있는 미분과 다른 값이 나옵니다.
따라서 x축과 y축을 어떻게 하면 실제 우리가 인식하는 '기울기'에 가깝도록 구성할 수 있을지에 대해 고민해보았습니다.
고민해본 결과 저 역시 그러하고, 많은 사람들이 이동평균선의 피벗을 기준으로 기울기를 측정한다는 사실을 알게되었습니다.
이 지표는 그 고민의 결과물입니다.
2. 내용 설명
A. 셋팅
먼저, 기울기를 확인하고싶은 이동평균선을 선택해주세요.
일반적으로 SMA를 많이 보시겠지만, T3가 기울기로 표현할 때 가장 아름다운 모습이 나오기 때문에 기본 설정을 T3로 설정했습니다.
Input창에 있는 'Show MA Slope Average Pivot Range?'를 체크하면, 최근 30개의 기울기 피벗 하이와 피벗 로우의 평균을 보여줍니다.
즉, '평균적으로, 최근 30개의 파동에서는 이 정도의 기울기가 만들어졌다'라는 것을 보여줍니다
B. 사용법
기울기가 0에서 크로스 된다는 것은, "곡선의 기울기가 반전"된다는 것이기에 기울기를 봄에 있어서 가장 중요한 값입니다. 따라서 가장 기본적으로는, 기울기가 "0"이 되는 곳을 보는 것이 중요하고
또 기울기가 올라갔다 꺾이기 시작할 때는, 가속도가 바뀌고 있다는 뜻이므로, 곧 기울기가 반전될 것을 의미합니다.
(다만 가속도를 지표로 표현하기엔, 너무나도 데이터가 지저분해져서 생략하였습니다)
이동평균선의 길이를 짧게 할수록 더 실제 트레이딩에 유용한 기울기 데이터를 얻을 수 있으나,
부드럽지 못한 이동평균선은 기울기가 0 근처에서 크로스 되는 모습이 지나치게 많이 나올 것이기에 유용하지 않을 수 있습니다.
따라서, input값에 있는 'Smoothing Length'를 조절해가면서 자신이 생각하기에 맞는 값을 고르는 것이 중요합니다.
3. 맺음말
파인스크립트에서 어떻게하면 실제 인식하는 기울기와 유사한 값을 찾을 수 있을까를 항상 고민합니다. 나름 새로운 접근방법이라 생각해서 이렇게 스크립트로 만들었으나, 여전히 아쉬운 부분이 많이 존재합니다.
기울기에 대한 좋은 아이디어가 있다면 언제든 피드백 해주세요.
감사합니다.
Range of a source displayed in thirdsThis indicator will take the value of any external source input and display how it has changed over time (the lookback period in settings). For the purposes of display here I'm using the WT1 line from Wavetrend with Crosses by LazyBear to provide a source input.
The highest and lowest value of the source over the lookback period are used to determine the highest and lowest point - the green and red lines at the top and bottom of the bands. This region is then mathematically split into three, such that the source (and its optional moving average line) can be defined as being in the top third, the middle or the bottom third.
Applications for this could be in risk management where you may wish to take on a larger position size when a certain indicator is in the top third, or decide that you want to enter / leave positions when the source crosses in / out of the extreme points.
Variety MA Cluster Filter Crosses [Loxx]What is a Cluster Filter?
One of the approaches to determining a useful signal (trend) in stream data. Small filtering (smoothing) tests applied to market quotes demonstrate the potential for creating non-lagging digital filters (indicators) that are not redrawn on the last bars.
Standard Approach
This approach is based on classical time series smoothing methods. There are lots of articles devoted to this subject both on this and other websites. The results are also classical:
1. The changes in trends are displayed with latency;
2. Better indicator (digital filter) response achieved at the expense of smoothing quality decrease;
3. Attempts to implement non-lagging indicators lead to redrawing on the last samples (bars).
And whereas traders have learned to cope with these things using persistence of economic processes and other tricks, this would be unacceptable in evaluating real-time experimental data, e.g. when testing aerostructures.
The Main Problem
It is a known fact that the majority of trading systems stop performing with the course of time, and that the indicators are only indicative over certain intervals. This can easily be explained: market quotes are not stationary. The definition of a stationary process is available in Wikipedia:
A stationary process is a stochastic process whose joint probability distribution does not change when shifted in time.
Judging by this definition, methods of analysis of stationary time series are not applicable in technical analysis. And this is understandable. A skillful market-maker entering the market will mess up all the calculations we may have made prior to that with regard to parameters of a known series of market quotes.
Even though this seems obvious, a lot of indicators are based on the theory of stationary time series analysis. Examples of such indicators are moving averages and their modifications. However, there are some attempts to create adaptive indicators. They are supposed to take into account non-stationarity of market quotes to some extent, yet they do not seem to work wonders. The attempts to "punish" the market-maker using the currently known methods of analysis of non-stationary series (wavelets, empirical modes and others) are not successful either. It looks like a certain key factor is constantly being ignored or unidentified.
The main reason for this is that the methods used are not designed for working with stream data. All (or almost all) of them were developed for analysis of the already known or, speaking in terms of technical analysis, historical data. These methods are convenient, e.g., in geophysics: you feel the earthquake, get a seismogram and then analyze it for few months. In other words, these methods are appropriate where uncertainties arising at the ends of a time series in the course of filtering affect the end result.
When analyzing experimental stream data or market quotes, we are focused on the most recent data received, rather than history. These are data that cannot be dealt with using classical algorithms.
Cluster Filter
Cluster filter is a set of digital filters approximating the initial sequence. Cluster filters should not be confused with cluster indicators.
Cluster filters are convenient when analyzing non-stationary time series in real time, in other words, stream data. It means that these filters are of principal interest not for smoothing the already known time series values, but for getting the most probable smoothed values of the new data received in real time.
Unlike various decomposition methods or simply filters of desired frequency, cluster filters create a composition or a fan of probable values of initial series which are further analyzed for approximation of the initial sequence. The input sequence acts more as a reference than the target of the analysis. The main analysis concerns values calculated by a set of filters after processing the data received.
In the general case, every filter included in the cluster has its own individual characteristics and is not related to others in any way. These filters are sometimes customized for the analysis of a stationary time series of their own which describes individual properties of the initial non-stationary time series. In the simplest case, if the initial non-stationary series changes its parameters, the filters "switch" over. Thus, a cluster filter tracks real time changes in characteristics.
Cluster Filter Design Procedure
Any cluster filter can be designed in three steps:
1. The first step is usually the most difficult one but this is where probabilistic models of stream data received are formed. The number of these models can be arbitrary large. They are not always related to physical processes that affect the approximable data. The more precisely models describe the approximable sequence, the higher the probability to get a non-lagging cluster filter.
2. At the second step, one or more digital filters are created for each model. The most general condition for joining filters together in a cluster is that they belong to the models describing the approximable sequence.
3. So, we can have one or more filters in a cluster. Consequently, with each new sample we have the sample value and one or more filter values. Thus, with each sample we have a vector or artificial noise made up of several (minimum two) values. All we need to do now is to select the most appropriate value.
An Example of a Simple Cluster Filter
For illustration, we will implement a simple cluster filter corresponding to the above diagram, using market quotes as input sequence. You can simply use closing prices of any time frame.
1. Model description. We will proceed on the assumption that:
The aproximate sequence is non-stationary, i.e. its characteristics tend to change with the course of time.
The closing price of a bar is not the actual bar price. In other words, the registered closing price of a bar is one of the noise movements, like other price movements on that bar.
The actual price or the actual value of the approximable sequence is between the closing price of the current bar and the closing price of the previous bar.
The approximable sequence tends to maintain its direction. That is, if it was growing on the previous bar, it will tend to keep on growing on the current bar.
2. Selecting digital filters. For the sake of simplicity, we take two filters:
The first filter will be a variety filter calculated based on the last closing prices using the slow period. I believe this fits well in the third assumption we specified for our model.
Since we have a non-stationary filter, we will try to also use an additional filter that will hopefully facilitate to identify changes in characteristics of the time series. I've chosen a variety filter using the fast period.
3. Selecting the appropriate value for the cluster filter.
So, with each new sample we will have the sample value (closing price), as well as the value of MA and fast filter. The closing price will be ignored according to the second assumption specified for our model. Further, we select the МА or ЕМА value based on the last assumption, i.e. maintaining trend direction:
For an uptrend, i.e. CF(i-1)>CF(i-2), we select one of the following four variants:
if CF(i-1)fastfilter(i), then CF(i)=slowfilter(i);
if CF(i-1)>slowfilter(i) and CF(i-1)slowfilter(i) and CF(i-1)>fastfilter(i), then CF(i)=MAX(slowfilter(i),fastfilter(i)).
For a downtrend, i.e. CF(i-1)slowfilter(i) and CF(i-1)>fastfilter(i), then CF(i)=MAX(slowfilter(i),fastfilter(i));
if CF(i-1)>slowfilter(i) and CF(i-1)fastfilter(i), then CF(i)=fastfilter(i);
if CF(i-1)<slowfilter(i) and CF(i-1)<fastfilter(i), then CF(i)=MIN(slowfilter(i),fastfilter(i)).
Where:
CF(i) – value of the cluster filter on the current bar;
CF(i-1) and CF(i-2) – values of the cluster filter on the previous bars;
slowfilter(i) – value of the slow filter
fastfilter(i) – value of the fast filter
MIN – the minimum value;
MAX – the maximum value;
What is Variety MA Cluster Filter Crosses?
For this indicator we calculate a fast and slow filter of the same filter and then we run a cluster filter between the fast and slow filter outputs to detect areas of chop/noise. The output is the uptrend is denoted by green color, downtrend by red color, and chop/noise/no-trade zone by white color. As a trader, you'll likely want to avoid trading during areas of chop/noise so you'll want to avoid trading when the color turns white.
Extras
Bar coloring
Alerts
Loxx's Expanded Source Types, see here:
Loxx's Moving Averages, see here:
An example of filtered chop, see the yellow circles. The cluster filter identifies chop zones so you don't get stuck in a sideways market.
RSI Overbought/Oversold + Divergence IndicatorDESCRIPTION:
This script combines the Relative Strength Index ( RSI ), Moving Average and Divergence indicator to make a better decision when to enter or exit a trade.
- The Moving Average line (MA) has been made hidden by default but enhanced with an RSIMA cloud.
- When the RSI is above the selected MA it turns into green and when the RSI is below the select MA it turns into red.
- When the RSI is moving into the Overbought or Oversold area, some highlighted areas will appear.
- When some divergences or hidden divergences are detected an extra indication will be highlighted.
- When the divergence appear in the Overbought or Oversold area the more weight it give to make a decision.
- The same color pallet has been used as the default candlestick colors so it looks familiar.
HOW TO USE:
The prerequisite is that we have some knowledge about the Elliot Wave Theory, the Fibonacci Retracement and the Fibonacci Extension tools.
Wave 1
(1) When we receive some buy signals we wait until we receive some extra indications.
(2) On the RSI Overbought/Oversold + Divergence Indicator we can see a Bullish Divergence and our RSI is changing from red to green ( RSI is higher then the MA).
(3) If we are getting here into the trade then we need to use a stop loss. We put our stop loss 1 a 2 pips just below the lowest wick. We also invest maximum 50% of the total amount we want to invest.
Wave 2
(4) Now we wait until we see a clear reversal and here we starting to use the Fibonacci Retracement tool. We draw a line from the lowest point of wave(1) till the highest point of wave (1). When we are retraced till the 0.618 fib also called the golden ratio we check again the RSI Overbought/Oversold + Divergence Indicator. When we see a reversal we do our second buy. We set again a stop loss just below the lowest wick (this is the yellow line on the chart). We also move the stop loss we have set in step (3) to this level.
Wave 3
(5) To identify how far the uptrend can go we need to use the Fibonacci Extension tool. We draw a line from the lowest point of wave(1) till the highest point of wave (1) and draw it back to the lowest point of wave (2). Wave (3) is most of the time the longest wave and can go till it has reached the 1.618 or 2.618 fib. On the 1.618 we can take some profit. If we don't want to sell we move our stop loss to the 1 fib line (yellow line on the chart).
(6) We wait until we see a clear reversal on the Overbought/Oversold + Divergence Indicator and sell 33% to 50% of our investment.
Wave 4
(7) Now we wait again until we see a clear reversal and here we starting to use the Fibonacci Retracement tool. We draw a line from the lowest point of wave(2) till the highest point of wave (3). When we are retraced till the 0.618 fib also called the golden ratio we check again the RSI Overbought/Oversold + Divergence Indicator. When we see a reversal we buy again. We set again a stop loss just below the lowest wick (this is the yellow line on the chart).
(8) If we bought at the first reversal ours stop los was triggered (9) and we got out of the trade.
(9) If we did not bought at step (7) because our candle did not hit the 0.618 fib or we got stopped out of the trade we buy again at the reversal.
Wave 5
(10) To identify how far the uptrend can go we need to use the Fibonacci Extension tool. We draw a line from the lowest point of wave(2) till the highest point of wave (3) and draw it back to the lowest point of wave (4). Most of the time wave 5 goes up till it has reached the 1 fib. And that is the point where we got out of the trade with all of our investment. In this trade we got out of the trade a bit earlier. We received the sell signals and got a reversal on the Overbought/Oversold + Divergence Indicator.
We are hoping you learned something so you can make better decisions when to get into or out of a trade.
If you have any question just drop it into the comments below.
FEATURES:
• You can show/hide the RSI .
• You can show/hide the MA.
• You can show/hide the lRSIMA cloud.
• You can show/hide the Stoch RSI cloud.
• You can show/hide and adjust the Overbought and Oversold zones.
• You can show/hide and adjust the Overbought Extended and Oversold Extended zones.
• You can show/hide the Overbought and Oversold highlighted zones.
• Etc...
HOW TO GET ACCESS TO THE SCRIPT:
• Favorite the script and add it to your chart.
REMARKS:
• This advice is NOT financial advice.
• We do not provide personal investment advice and we are not a qualified licensed investment advisor.
• All information found here, including any ideas, opinions, views, predictions, forecasts, commentaries, suggestions, or stock picks, expressed or implied herein, are for informational, entertainment or educational purposes only and should not be construed as personal investment advice.
• We will not and cannot be held liable for any actions you take as a result of anything you read here.
• We only provide this information to help you make a better decision.
• While the information provided is believed to be accurate, it may include errors or inaccuracies.
Good Luck and have fun,
The CryptoSignalScanner Team
SeongMo_MA_V3(Elliot_helper)Made to make it easier to count Elliott waves.
If you renew your new high price, you'll continue your new high price
When the new low is renewed, the new low is continued.
If you are within the range of the previous candle, use the ratio of the difference between the median value of the previous candle and the closing price of the current candle to determine whether to continue the high or low price.
If a can with a tail that updates a new high price and a new low price at the same time comes out, the phrase "Check_candle!" appears to mean that you should check it with a lower time zone candle.
Musashi_Katana=== Musashi-Katana ===
This tool was designed to fit my particular trading style and personal theories about the "Alchemy of the markets" and ''Harmonic Structure'.
Context
When following a Technical approach to to surf the markets, there are teachings that must be understood before reaching a confort-zone, this usually happen the possible worst way by constant experimentation, it hurts.
Here few technical hints:
- Align High timeframes with lower timeframes:
This simple concept relax a lot complexity of finding of a trend bias. Musashi-Katana allows you to use technical indicator corresponding to specific timeframes, like daily weekly or yearly. They wont change when you change the chart's timeframe, its very useful as you know where you're standing in the long term, Its quite relaxing.
- Use volume:
The constant usage of volume will allow you to sync with the market's breathing. This shows you the mass of money flowing into and out of the market, is key if you want to understand momentum. This tool can help here, as it have multi-period vwaps. You can use yearly, monthly for swing trading, and even weekly if you enjoy scalping.
Useful stuff:
- You have access to baselines, AMA and Kijun-sen with the possibility of adding ATR bands.
- AMAs come as two lines strategies for different approaches, fast medium or slow.
- You can experiment with normal and multi timeframe moving averages and other trend tools.
Final Note
If used correctly Musashi-Katana is a very powerful tool, which makes no sense as there is no correct usage. Don't add everything at the same time, experiment, combine stuff, every market is different.
Backtest every possible strategy before using it, see what works and doesn't. This gives you a lot of peace, specially while you're at the tip of the spear surfing the markets
--> I personally use this in combination with 'Musashi_Slasher (Mometum+Volatility)', as it gives me volatility and momentum in a very precise way.
Unified Composite Index [UCI] [KuraiBlu] [LazyBear]The purpose of this indicator is to combine the four basic types of indicators (Trend, Volatility, Momentum and Volume) to create a singular, composite index in order to provide a more holistic means of observing potential changes within the market, known as the Unified Composite Index . The indicators used in this index are as follows:
Trend - Trend Composite Index
Volatility - Bollinger Bands %b
Momentum - Relative Strength Index
Volume - Money Flow Index
The average price source can’t be altered as I’ve made it an average between ((open + close) / 2) and ((high + low) / 2).
The best way to use this is by observing several of the indicators at once in conjunction with the average, rather than simply using the average produced to determine the right moment to enter, or exit a trade by itself. I've found when one indicator goes way out of bounds relative to the other three (and subsequently, the average array), then it presents a good buying, or selling opportunity.
Some adjustments were made to several of the indicators in order to standardize them on a scale of 1-100 so that they could better accommodate the average array that was finally produced. Thanks to LazyBear for letting me strip down the WaveTrend Oscillator.
Possible RSI [Loxx]Possible RSI is a normalized, variety second-pass normalized, Variety RSI with Dynamic Zones and optionl High-Pass IIR digital filtering of source price input. This indicator includes 7 types of RSI.
High-Pass Fitler (optional)
The Ehlers Highpass Filter is a technical analysis tool developed by John F. Ehlers. Based on aerospace analog filters, this filter aims at reducing noise from price data. Ehlers Highpass Filter eliminates wave components with periods longer than a certain value. This reduces lag and makes the oscialltor zero mean. This turns the RSI output into something more similar to Stochasitc RSI where it repsonds to price very quickly.
First Normalization Pass
RSI (Relative Strength Index) is already normalized. Hence, making a normalized RSI seems like a nonsense... if it was not for the "flattening" property of RSI. RSI tends to be flatter and flatter as we increase the calculating period--to the extent that it becomes unusable for levels trading if we increase calculating periods anywhere over the broadly recommended period 8 for RSI. In order to make that (calculating period) have less impact to significant levels usage of RSI trading style in this version a sort of a "raw stochastic" (min/max) normalization is applied.
Second-Pass Variety Normalization Pass
There are three options to choose from:
1. Gaussian (Fisher Transform), this is the default: The Fisher Transform is a function created by John F. Ehlers that converts prices into a Gaussian normal distribution. The normaliztion helps highlights when prices have moved to an extreme, based on recent prices. This may help in spotting turning points in the price of an asset. It also helps show the trend and isolate the price waves within a trend.
2. Softmax: The softmax function, also known as softargmax: or normalized exponential function, converts a vector of K real numbers into a probability distribution of K possible outcomes. It is a generalization of the logistic function to multiple dimensions, and used in multinomial logistic regression. The softmax function is often used as the last activation function of a neural network to normalize the output of a network to a probability distribution over predicted output classes, based on Luce's choice axiom.
3. Regular Normalization (devaitions about the mean): Converts a vector of K real numbers into a probability distribution of K possible outcomes without using log sigmoidal transformation as is done with Softmax. This is basically Softmax without the last step.
Dynamic Zones
As explained in "Stocks & Commodities V15:7 (306-310): Dynamic Zones by Leo Zamansky, Ph .D., and David Stendahl"
Most indicators use a fixed zone for buy and sell signals. Here’ s a concept based on zones that are responsive to past levels of the indicator.
One approach to active investing employs the use of oscillators to exploit tradable market trends. This investing style follows a very simple form of logic: Enter the market only when an oscillator has moved far above or below traditional trading lev- els. However, these oscillator- driven systems lack the ability to evolve with the market because they use fixed buy and sell zones. Traders typically use one set of buy and sell zones for a bull market and substantially different zones for a bear market. And therein lies the problem.
Once traders begin introducing their market opinions into trading equations, by changing the zones, they negate the system’s mechanical nature. The objective is to have a system automatically define its own buy and sell zones and thereby profitably trade in any market — bull or bear. Dynamic zones offer a solution to the problem of fixed buy and sell zones for any oscillator-driven system.
An indicator’s extreme levels can be quantified using statistical methods. These extreme levels are calculated for a certain period and serve as the buy and sell zones for a trading system. The repetition of this statistical process for every value of the indicator creates values that become the dynamic zones. The zones are calculated in such a way that the probability of the indicator value rising above, or falling below, the dynamic zones is equal to a given probability input set by the trader.
To better understand dynamic zones, let's first describe them mathematically and then explain their use. The dynamic zones definition:
Find V such that:
For dynamic zone buy: P{X <= V}=P1
For dynamic zone sell: P{X >= V}=P2
where P1 and P2 are the probabilities set by the trader, X is the value of the indicator for the selected period and V represents the value of the dynamic zone.
The probability input P1 and P2 can be adjusted by the trader to encompass as much or as little data as the trader would like. The smaller the probability, the fewer data values above and below the dynamic zones. This translates into a wider range between the buy and sell zones. If a 10% probability is used for P1 and P2, only those data values that make up the top 10% and bottom 10% for an indicator are used in the construction of the zones. Of the values, 80% will fall between the two extreme levels. Because dynamic zone levels are penetrated so infrequently, when this happens, traders know that the market has truly moved into overbought or oversold territory.
Calculating the Dynamic Zones
The algorithm for the dynamic zones is a series of steps. First, decide the value of the lookback period t. Next, decide the value of the probability Pbuy for buy zone and value of the probability Psell for the sell zone.
For i=1, to the last lookback period, build the distribution f(x) of the price during the lookback period i. Then find the value Vi1 such that the probability of the price less than or equal to Vi1 during the lookback period i is equal to Pbuy. Find the value Vi2 such that the probability of the price greater or equal to Vi2 during the lookback period i is equal to Psell. The sequence of Vi1 for all periods gives the buy zone. The sequence of Vi2 for all periods gives the sell zone.
In the algorithm description, we have: Build the distribution f(x) of the price during the lookback period i. The distribution here is empirical namely, how many times a given value of x appeared during the lookback period. The problem is to find such x that the probability of a price being greater or equal to x will be equal to a probability selected by the user. Probability is the area under the distribution curve. The task is to find such value of x that the area under the distribution curve to the right of x will be equal to the probability selected by the user. That x is the dynamic zone.
7 Types of RSI
See here to understand which RSI types are included:
Included:
Bar coloring
4 signal types
Alerts
Loxx's Expanded Source Types
Loxx's Variety RSI
Loxx's Dynamic Zones
Mark StructureMark Structure is building the market swing structure, minor and sub structure and marks all possible insignificant pivots
Building such structure is really complex task to do, that has a lot of obstacles and challenges. I'm doing my best to develop this indicator behaving in absolutely expectable and right way. Fill free to leave any comments or bug reports.
it supports:
- Marking all pivots with labels or join them continuously with trend lines.
- Marking minor and sub structured swings with labels or join them continuously with trend lines. Marking BOS or SMS BOS, which are mbos. Minor and substructure are structures inside swing structure and it can differ from the structure of lower timeframe
- Marking swings of swing structure with labels or join them continuously with trend lines. Marking BOS or SMS BOS of swing structure
- Changing bullish and bearish colors of each kind of structures
- Changing pivot labelings
- Changing colors of BOSs
Remarks:
- As I told you guys before, it has a lot of challenging cases. eg we have swing low and high on the same candle and in order to decide which pivot goes first I take lower time frame data to figure out what pivot is the first, but it happens that on lower time frame the same issue takes place, due to limitation of TradingView I can't go infinitely to lower timeframes to solve this issue, so I mark those cases with labels
- Another issue is very beginning of the trend its hard to detect swing structure there due to missing historical data. so skip a few waves in the very beginning
- Don't expect to have minor and sub structure in each swing waves, its totally fine when you don't have them at all
- Swing structure is the most significant structure and shows real price direction. Trend change is confirmed when for bull->bear the last HLbull LH>HH and HH-HL-HH are confirmed. You can change labelling for unconfirmed swing trend in the settings. By default its already done
Cumulative ATR Distance Oscillator// A Price/ATR oscillator with cumulative waves.
// Based on Cumulative Volume Delta, but using price movement alone.
// Public Domain
// By Jolly Wizard
Abraham Trend [Loxx]Indicator based on "Trading the Trend" article by Andrew Abraham published in TASC.
There has been a lot of "reincarnations" and renamed versions of this system, but since the indicator is quite good, it seemed useful to create the original version.
What is the Abraham Trend?
New traders quickly become familiar with two adages: "The trend is your friend," and "Let your profits run and cut your losses." Many of us, however, have learned the hard way that these things are easier said than done. Why is that? One reason is lack of recognition, since the trend itself is rarely clarified and defined, let alone where it starts and ends. So we need a clear explication of what a trend is as well as where its beginning and its end are.
SIMPLE ENOUGH
Simply, if the trend is considered up, then the trend of prices are composed of upwaves and the downwaves are countertrend movements. Downward trends are the opposite, seen as downwaves with countertrend upwaves. Using several tools and functions, we can design a quantifiable approach to defining these waves. My favorite is the volatility indicator, which is a formula that measures the market volatility by plotting a smoothed average of the true range. The true range indicator originates from the work of J. Welles Wilder Jr. from his New Concepts in Technical Trading Systems. The definition of the true range is defined as the largest of the following:
The difference between today's high and today's low
The difference between today's high and yesterday's close, or
The difference between today's low and yesterday's close.
The calculation uses a 21-period weighted average of the true range, giving higher weight to the true range of the most recent bar. The final value is then multiplied by 3.
The volatility indicator is used as a stop-and-reverse method. Let's say the market has been rising, then the volatility indicator is calculated each day and subtracted from the highest close during the rising market. The highest close is always used, even if there has been a series of lower closes since the highest close. If the market closes below the volatility indicator, then for the next day, the current reading of the volatility indicator is added to the lowest close. This step is followed each day until the market closes above the trailing volatility indicator.
We now have a definition of the trend. An upward trend exists as long as the volatility indicator is below the market and a downtrend is in force if the volatility indicator is above the market.
Jurik Filtered, Composite Fractal Behavior (CFB) Channels [Loxx]Double Jurik-Filtered Composite Fractal Behavior (CFB) Channels is a channel indicator that acts as both a baseline, similar to Donchian, and as support and resistance levels. This indicator is price time adaptive meaning it flexes to price volatility waves. The indicators adaptive nature is calculated using the Composite Fractal Behavior (CFB) algorithm. The result of this adaptive calculation is then smoothed using Jurik Filtering, and then it's normalized to conform to a range of values. This helps better identify trends.
What is Composite Fractal Behavior (CFB)?
All around you mechanisms adjust themselves to their environment. From simple thermostats that react to air temperature to computer chips in modern cars that respond to changes in engine temperature, r.p.m.'s, torque, and throttle position. It was only a matter of time before fast desktop computers applied the mathematics of self-adjustment to systems that trade the financial markets.
Unlike basic systems with fixed formulas, an adaptive system adjusts its own equations. For example, start with a basic channel breakout system that uses the highest closing price of the last N bars as a threshold for detecting breakouts on the up side. An adaptive and improved version of this system would adjust N according to market conditions, such as momentum, price volatility or acceleration.
Since many systems are based directly or indirectly on cycles, another useful measure of market condition is the periodic length of a price chart's dominant cycle, (DC), that cycle with the greatest influence on price action.
The utility of this new DC measure was noted by author Murray Ruggiero in the January '96 issue of Futures Magazine. In it. Mr. Ruggiero used it to adaptive adjust the value of N in a channel breakout system. He then simulated trading 15 years of D-Mark futures in order to compare its performance to a similar system that had a fixed optimal value of N. The adaptive version produced 20% more profit!
This DC index utilized the popular MESA algorithm (a formulation by John Ehlers adapted from Burg's maximum entropy algorithm, MEM). Unfortunately, the DC approach is problematic when the market has no real dominant cycle momentum, because the mathematics will produce a value whether or not one actually exists! Therefore, we developed a proprietary indicator that does not presuppose the presence of market cycles. It's called CFB (Composite Fractal Behavior) and it works well whether or not the market is cyclic.
CFB examines price action for a particular fractal pattern, categorizes them by size, and then outputs a composite fractal size index. This index is smooth, timely and accurate
Essentially, CFB reveals the length of the market's trending action time frame. Long trending activity produces a large CFB index and short choppy action produces a small index value. Investors have found many applications for CFB which involve scaling other existing technical indicators adaptively, on a bar-to-bar basis.
What is Jurik Volty used in the Juirk Filter?
One of the lesser known qualities of Juirk smoothing is that the Jurik smoothing process is adaptive. "Jurik Volty" (a sort of market volatility ) is what makes Jurik smoothing adaptive. The Jurik Volty calculation can be used as both a standalone indicator and to smooth other indicators that you wish to make adaptive.
What is the Jurik Moving Average?
Have you noticed how moving averages add some lag (delay) to your signals? ... especially when price gaps up or down in a big move, and you are waiting for your moving average to catch up? Wait no more! JMA eliminates this problem forever and gives you the best of both worlds: low lag and smooth lines.
Ideally, you would like a filtered signal to be both smooth and lag-free. Lag causes delays in your trades, and increasing lag in your indicators typically result in lower profits. In other words, late comers get what's left on the table after the feast has already begun.
Bollinger but BetterA better Bollinger Band with an average of 20 EMAs as pivot price, which makes its standard deviation way more sensitive compared to traditional Bollinger Band.
-- My Tips --
Long flat convergence suggests a big potential price movement.
Short quick convergence of short supportive ema(default: 10days) and upper band suggests a safe middle entry point.
Recommended auxiliary indicator: Wavetrend by Lazybear, which points out entry and exit points quite accurately in bull market.
-- PS --
This system is a hybrid of EMA Ribbons and Bollinger Band.