Color█ OVERVIEW
This library is a Pine Script® programming tool for advanced color processing. It provides a comprehensive set of functions for specifying and analyzing colors in various color spaces, mixing and manipulating colors, calculating custom gradients and schemes, detecting contrast, and converting colors to or from hexadecimal strings.
█ CONCEPTS
Color
Color refers to how we interpret light of different wavelengths in the visible spectrum . The colors we see from an object represent the light wavelengths that it reflects, emits, or transmits toward our eyes. Some colors, such as blue and red, correspond directly to parts of the spectrum. Others, such as magenta, arise from a combination of wavelengths to which our minds assign a single color.
The human interpretation of color lends itself to many uses in our world. In the context of financial data analysis, the effective use of color helps transform raw data into insights that users can understand at a glance. For example, colors can categorize series, signal market conditions and sessions, and emphasize patterns or relationships in data.
Color models and spaces
A color model is a general mathematical framework that describes colors using sets of numbers. A color space is an implementation of a specific color model that defines an exact range (gamut) of reproducible colors based on a set of primary colors , a reference white point , and sometimes additional parameters such as viewing conditions.
There are numerous different color spaces — each describing the characteristics of color in unique ways. Different spaces carry different advantages, depending on the application. Below, we provide a brief overview of the concepts underlying the color spaces supported by this library.
RGB
RGB is one of the most well-known color models. It represents color as an additive mixture of three primary colors — red, green, and blue lights — with various intensities. Each cone cell in the human eye responds more strongly to one of the three primaries, and the average person interprets the combination of these lights as a distinct color (e.g., pure red + pure green = yellow).
The sRGB color space is the most common RGB implementation. Developed by HP and Microsoft in the 1990s, sRGB provided a standardized baseline for representing color across CRT monitors of the era, which produced brightness levels that did not increase linearly with the input signal. To match displays and optimize brightness encoding for human sensitivity, sRGB applied a nonlinear transformation to linear RGB signals, often referred to as gamma correction . The result produced more visually pleasing outputs while maintaining a simple encoding. As such, sRGB quickly became a standard for digital color representation across devices and the web. To this day, it remains the default color space for most web-based content.
TradingView charts and Pine Script `color.*` built-ins process color data in sRGB. The red, green, and blue channels range from 0 to 255, where 0 represents no intensity, and 255 represents maximum intensity. Each combination of red, green, and blue values represents a distinct color, resulting in a total of 16,777,216 displayable colors.
CIE XYZ and xyY
The XYZ color space, developed by the International Commission on Illumination (CIE) in 1931, aims to describe all color sensations that a typical human can perceive. It is a cornerstone of color science, forming the basis for many color spaces used today. XYZ, and the derived xyY space, provide a universal representation of color that is not tethered to a particular display. Many widely used color spaces, including sRGB, are defined relative to XYZ or derived from it.
The CIE built the color space based on a series of experiments in which people matched colors they perceived from mixtures of lights. From these experiments, the CIE developed color-matching functions to calculate three components — X, Y, and Z — which together aim to describe a standard observer's response to visible light. X represents a weighted response to light across the color spectrum, with the highest contribution from long wavelengths (e.g., red). Y represents a weighted response to medium wavelengths (e.g., green), and it corresponds to a color's relative luminance (i.e., brightness). Z represents a weighted response to short wavelengths (e.g., blue).
From the XYZ space, the CIE developed the xyY chromaticity space, which separates a color's chromaticity (hue and colorfulness) from luminance. The CIE used this space to define the CIE 1931 chromaticity diagram , which represents the full range of visible colors at a given luminance. In color science and lighting design, xyY is a common means for specifying colors and visualizing the supported ranges of other color spaces.
CIELAB and Oklab
The CIELAB (L*a*b*) color space, derived from XYZ by the CIE in 1976, expresses colors based on opponent process theory. The L* component represents perceived lightness, and the a* and b* components represent the balance between opposing unique colors. The a* value specifies the balance between green and red , and the b* value specifies the balance between blue and yellow .
The primary intention of CIELAB was to provide a perceptually uniform color space, where fixed-size steps through the space correspond to uniform perceived changes in color. Although relatively uniform, the color space has been found to exhibit some non-uniformities, particularly in the blue part of the color spectrum. Regardless, modern applications often use CIELAB to estimate perceived color differences and calculate smooth color gradients.
In 2020, a new LAB-oriented color space, Oklab , was introduced by Björn Ottosson as an attempt to rectify the non-uniformities of other perceptual color spaces. Similar to CIELAB, the L value in Oklab represents perceived lightness, and the a and b values represent the balance between opposing unique colors. Oklab has gained widespread adoption as a perceptual space for color processing, with support in the latest CSS Color specifications and many software applications.
Cylindrical models
A cylindrical-coordinate model transforms an underlying color model, such as RGB or LAB, into an alternative expression of color information that is often more intuitive for the average person to use and understand.
Instead of a mixture of primary colors or opponent pairs, these models represent color as a hue angle on a color wheel , with additional parameters that describe other qualities such as lightness and colorfulness (a general term for concepts like chroma and saturation). In cylindrical-coordinate spaces, users can select a color and modify its lightness or other qualities without altering the hue.
The three most common RGB-based models are HSL (Hue, Saturation, Lightness), HSV (Hue, Saturation, Value), and HWB (Hue, Whiteness, Blackness). All three define hue angles in the same way, but they define colorfulness and lightness differently. Although they are not perceptually uniform, HSL and HSV are commonplace in color pickers and gradients.
For CIELAB and Oklab, the cylindrical-coordinate versions are CIELCh and Oklch , which express color in terms of perceived lightness, chroma, and hue. They offer perceptually uniform alternatives to RGB-based models. These spaces create unique color wheels, and they have more strict definitions of lightness and colorfulness. Oklch is particularly well-suited for generating smooth, perceptual color gradients.
Alpha and transparency
Many color encoding schemes include an alpha channel, representing opacity . Alpha does not help define a color in a color space; it determines how a color interacts with other colors in the display. Opaque colors appear with full intensity on the screen, whereas translucent (semi-opaque) colors blend into the background. Colors with zero opacity are invisible.
In Pine Script, there are two ways to specify a color's alpha:
• Using the `transp` parameter of the built-in `color.*()` functions. The specified value represents transparency (the opposite of opacity), which the functions translate into an alpha value.
• Using eight-digit hexadecimal color codes. The last two digits in the code represent alpha directly.
A process called alpha compositing simulates translucent colors in a display. It creates a single displayed color by mixing the RGB channels of two colors (foreground and background) based on alpha values, giving the illusion of a semi-opaque color placed over another color. For example, a red color with 80% transparency on a black background produces a dark shade of red.
Hexadecimal color codes
A hexadecimal color code (hex code) is a compact representation of an RGB color. It encodes a color's red, green, and blue values into a sequence of hexadecimal ( base-16 ) digits. The digits are numerals ranging from `0` to `9` or letters from `a` (for 10) to `f` (for 15). Each set of two digits represents an RGB channel ranging from `00` (for 0) to `ff` (for 255).
Pine scripts can natively define colors using hex codes in the format `#rrggbbaa`. The first set of two digits represents red, the second represents green, and the third represents blue. The fourth set represents alpha . If unspecified, the value is `ff` (fully opaque). For example, `#ff8b00` and `#ff8b00ff` represent an opaque orange color. The code `#ff8b0033` represents the same color with 80% transparency.
Gradients
A color gradient maps colors to numbers over a given range. Most color gradients represent a continuous path in a specific color space, where each number corresponds to a mix between a starting color and a stopping color. In Pine, coders often use gradients to visualize value intensities in plots and heatmaps, or to add visual depth to fills.
The behavior of a color gradient depends on the mixing method and the chosen color space. Gradients in sRGB usually mix along a straight line between the red, green, and blue coordinates of two colors. In cylindrical spaces such as HSL, a gradient often rotates the hue angle through the color wheel, resulting in more pronounced color transitions.
Color schemes
A color scheme refers to a set of colors for use in aesthetic or functional design. A color scheme usually consists of just a few distinct colors. However, depending on the purpose, a scheme can include many colors.
A user might choose palettes for a color scheme arbitrarily, or generate them algorithmically. There are many techniques for calculating color schemes. A few simple, practical methods are:
• Sampling a set of distinct colors from a color gradient.
• Generating monochromatic variants of a color (i.e., tints, tones, or shades with matching hues).
• Computing color harmonies — such as complements, analogous colors, triads, and tetrads — from a base color.
This library includes functions for all three of these techniques. See below for details.
█ CALCULATIONS AND USE
Hex string conversion
The `getHexString()` function returns a string containing the eight-digit hexadecimal code corresponding to a "color" value or set of sRGB and transparency values. For example, `getHexString(255, 0, 0)` returns the string `"#ff0000ff"`, and `getHexString(color.new(color.red, 80))` returns `"#f2364533"`.
The `hexStringToColor()` function returns the "color" value represented by a string containing a six- or eight-digit hex code. The `hexStringToRGB()` function returns a tuple containing the sRGB and transparency values. For example, `hexStringToColor("#f23645")` returns the same value as color.red .
Programmers can use these functions to parse colors from "string" inputs, perform string-based color calculations, and inspect color data in text outputs such as Pine Logs and tables.
Color space conversion
All other `get*()` functions convert a "color" value or set of sRGB channels into coordinates in a specific color space, with transparency information included. For example, the tuple returned by `getHSL()` includes the color's hue, saturation, lightness, and transparency values.
To convert data from a color space back to colors or sRGB and transparency values, use the corresponding `*toColor()` or `*toRGB()` functions for that space (e.g., `hslToColor()` and `hslToRGB()`).
Programmers can use these conversion functions to process inputs that define colors in different ways, perform advanced color manipulation, design custom gradients, and more.
The color spaces this library supports are:
• sRGB
• Linear RGB (RGB without gamma correction)
• HSL, HSV, and HWB
• CIE XYZ and xyY
• CIELAB and CIELCh
• Oklab and Oklch
Contrast-based calculations
Contrast refers to the difference in luminance or color that makes one color visible against another. This library features two functions for calculating luminance-based contrast and detecting themes.
The `contrastRatio()` function calculates the contrast between two "color" values based on their relative luminance (the Y value from CIE XYZ) using the formula from version 2 of the Web Content Accessibility Guidelines (WCAG) . This function is useful for identifying colors that provide a sufficient brightness difference for legibility.
The `isLightTheme()` function determines whether a specified background color represents a light theme based on its contrast with black and white. Programmers can use this function to define conditional logic that responds differently to light and dark themes.
Color manipulation and harmonies
The `negative()` function calculates the negative (i.e., inverse) of a color by reversing the color's coordinates in either the sRGB or linear RGB color space. This function is useful for calculating high-contrast colors.
The `grayscale()` function calculates a grayscale form of a specified color with the same relative luminance.
The functions `complement()`, `splitComplements()`, `analogousColors()`, `triadicColors()`, `tetradicColors()`, `pentadicColors()`, and `hexadicColors()` calculate color harmonies from a specified source color within a given color space (HSL, CIELCh, or Oklch). The returned harmonious colors represent specific hue rotations around a color wheel formed by the chosen space, with the same defined lightness, saturation or chroma, and transparency.
Color mixing and gradient creation
The `add()` function simulates combining lights of two different colors by additively mixing their linear red, green, and blue components, ignoring transparency by default. Users can calculate a transparency-weighted mixture by setting the `transpWeight` argument to `true`.
The `overlay()` function estimates the color displayed on a TradingView chart when a specific foreground color is over a background color. This function aids in simulating stacked colors and analyzing the effects of transparency.
The `fromGradient()` and `fromMultiStepGradient()` functions calculate colors from gradients in any of the supported color spaces, providing flexible alternatives to the RGB-based color.from_gradient() function. The `fromGradient()` function calculates a color from a single gradient. The `fromMultiStepGradient()` function calculates a color from a piecewise gradient with multiple defined steps. Gradients are useful for heatmaps and for coloring plots or drawings based on value intensities.
Scheme creation
Three functions in this library calculate palettes for custom color schemes. Scripts can use these functions to create responsive color schemes that adjust to calculated values and user inputs.
The `gradientPalette()` function creates an array of colors by sampling a specified number of colors along a gradient from a base color to a target color, in fixed-size steps.
The `monoPalette()` function creates an array containing monochromatic variants (tints, tones, or shades) of a specified base color. Whether the function mixes the color toward white (for tints), a form of gray (for tones), or black (for shades) depends on the `grayLuminance` value. If unspecified, the function automatically chooses the mix behavior with the highest contrast.
The `harmonyPalette()` function creates a matrix of colors. The first column contains the base color and specified harmonies, e.g., triadic colors. The columns that follow contain tints, tones, or shades of the harmonic colors for additional color choices, similar to `monoPalette()`.
█ EXAMPLE CODE
The example code at the end of the script generates and visualizes color schemes by processing user inputs. The code builds the scheme's palette based on the "Base color" input and the additional inputs in the "Settings/Inputs" tab:
• "Palette type" specifies whether the palette uses a custom gradient, monochromatic base color variants, or color harmonies with monochromatic variants.
• "Target color" sets the top color for the "Gradient" palette type.
• The "Gray luminance" inputs determine variation behavior for "Monochromatic" and "Harmony" palette types. If "Auto" is selected, the palette mixes the base color toward white or black based on its brightness. Otherwise, it mixes the color toward the grayscale color with the specified relative luminance (from 0 to 1).
• "Harmony type" specifies the color harmony used in the palette. Each row in the palette corresponds to one of the harmonious colors, starting with the base color.
The code creates a table on the first bar to display the collection of calculated colors. Each cell in the table shows the color's `getHexString()` value in a tooltip for simple inspection.
Look first. Then leap.
█ EXPORTED FUNCTIONS
Below is a complete list of the functions and overloads exported by this library.
getRGB(source)
Retrieves the sRGB red, green, blue, and transparency components of a "color" value.
getHexString(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channel values to a string representing the corresponding color's hexadecimal form.
getHexString(source)
(Overload 2 of 2) Converts a "color" value to a string representing the sRGB color's hexadecimal form.
hexStringToRGB(source)
Converts a string representing an sRGB color's hexadecimal form to a set of decimal channel values.
hexStringToColor(source)
Converts a string representing an sRGB color's hexadecimal form to a "color" value.
getLRGB(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channel values to a set of linear RGB values with specified transparency information.
getLRGB(source)
(Overload 2 of 2) Retrieves linear RGB channel values and transparency information from a "color" value.
lrgbToRGB(lr, lg, lb, t)
Converts a set of linear RGB channel values to a set of sRGB values with specified transparency information.
lrgbToColor(lr, lg, lb, t)
Converts a set of linear RGB channel values and transparency information to a "color" value.
getHSL(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channels to a set of HSL values with specified transparency information.
getHSL(source)
(Overload 2 of 2) Retrieves HSL channel values and transparency information from a "color" value.
hslToRGB(h, s, l, t)
Converts a set of HSL channel values to a set of sRGB values with specified transparency information.
hslToColor(h, s, l, t)
Converts a set of HSL channel values and transparency information to a "color" value.
getHSV(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channels to a set of HSV values with specified transparency information.
getHSV(source)
(Overload 2 of 2) Retrieves HSV channel values and transparency information from a "color" value.
hsvToRGB(h, s, v, t)
Converts a set of HSV channel values to a set of sRGB values with specified transparency information.
hsvToColor(h, s, v, t)
Converts a set of HSV channel values and transparency information to a "color" value.
getHWB(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channels to a set of HWB values with specified transparency information.
getHWB(source)
(Overload 2 of 2) Retrieves HWB channel values and transparency information from a "color" value.
hwbToRGB(h, w, b, t)
Converts a set of HWB channel values to a set of sRGB values with specified transparency information.
hwbToColor(h, w, b, t)
Converts a set of HWB channel values and transparency information to a "color" value.
getXYZ(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channels to a set of XYZ values with specified transparency information.
getXYZ(source)
(Overload 2 of 2) Retrieves XYZ channel values and transparency information from a "color" value.
xyzToRGB(x, y, z, t)
Converts a set of XYZ channel values to a set of sRGB values with specified transparency information
xyzToColor(x, y, z, t)
Converts a set of XYZ channel values and transparency information to a "color" value.
getXYY(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channels to a set of xyY values with specified transparency information.
getXYY(source)
(Overload 2 of 2) Retrieves xyY channel values and transparency information from a "color" value.
xyyToRGB(xc, yc, y, t)
Converts a set of xyY channel values to a set of sRGB values with specified transparency information.
xyyToColor(xc, yc, y, t)
Converts a set of xyY channel values and transparency information to a "color" value.
getLAB(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channels to a set of CIELAB values with specified transparency information.
getLAB(source)
(Overload 2 of 2) Retrieves CIELAB channel values and transparency information from a "color" value.
labToRGB(l, a, b, t)
Converts a set of CIELAB channel values to a set of sRGB values with specified transparency information.
labToColor(l, a, b, t)
Converts a set of CIELAB channel values and transparency information to a "color" value.
getOKLAB(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channels to a set of Oklab values with specified transparency information.
getOKLAB(source)
(Overload 2 of 2) Retrieves Oklab channel values and transparency information from a "color" value.
oklabToRGB(l, a, b, t)
Converts a set of Oklab channel values to a set of sRGB values with specified transparency information.
oklabToColor(l, a, b, t)
Converts a set of Oklab channel values and transparency information to a "color" value.
getLCH(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channels to a set of CIELCh values with specified transparency information.
getLCH(source)
(Overload 2 of 2) Retrieves CIELCh channel values and transparency information from a "color" value.
lchToRGB(l, c, h, t)
Converts a set of CIELCh channel values to a set of sRGB values with specified transparency information.
lchToColor(l, c, h, t)
Converts a set of CIELCh channel values and transparency information to a "color" value.
getOKLCH(r, g, b, t)
(Overload 1 of 2) Converts a set of sRGB channels to a set of Oklch values with specified transparency information.
getOKLCH(source)
(Overload 2 of 2) Retrieves Oklch channel values and transparency information from a "color" value.
oklchToRGB(l, c, h, t)
Converts a set of Oklch channel values to a set of sRGB values with specified transparency information.
oklchToColor(l, c, h, t)
Converts a set of Oklch channel values and transparency information to a "color" value.
contrastRatio(value1, value2)
Calculates the contrast ratio between two colors values based on the formula from version 2 of the Web Content Accessibility Guidelines (WCAG).
isLightTheme(source)
Detects whether a background color represents a light theme or dark theme, based on the amount of contrast between the color and the white and black points.
grayscale(source)
Calculates the grayscale version of a color with the same relative luminance (i.e., brightness).
negative(source, colorSpace)
Calculates the negative (i.e., inverted) form of a specified color.
complement(source, colorSpace)
Calculates the complementary color for a `source` color using a cylindrical color space.
analogousColors(source, colorSpace)
Calculates the analogous colors for a `source` color using a cylindrical color space.
splitComplements(source, colorSpace)
Calculates the split-complementary colors for a `source` color using a cylindrical color space.
triadicColors(source, colorSpace)
Calculates the two triadic colors for a `source` color using a cylindrical color space.
tetradicColors(source, colorSpace, square)
Calculates the three square or rectangular tetradic colors for a `source` color using a cylindrical color space.
pentadicColors(source, colorSpace)
Calculates the four pentadic colors for a `source` color using a cylindrical color space.
hexadicColors(source, colorSpace)
Calculates the five hexadic colors for a `source` color using a cylindrical color space.
add(value1, value2, transpWeight)
Additively mixes two "color" values, with optional transparency weighting.
overlay(fg, bg)
Estimates the resulting color that appears on the chart when placing one color over another.
fromGradient(value, bottomValue, topValue, bottomColor, topColor, colorSpace)
Calculates the gradient color that corresponds to a specific value based on a defined value range and color space.
fromMultiStepGradient(value, steps, colors, colorSpace)
Calculates a multi-step gradient color that corresponds to a specific value based on an array of step points, an array of corresponding colors, and a color space.
gradientPalette(baseColor, stopColor, steps, strength, model)
Generates a palette from a gradient between two base colors.
monoPalette(baseColor, grayLuminance, variations, strength, colorSpace)
Generates a monochromatic palette from a specified base color.
harmonyPalette(baseColor, harmonyType, grayLuminance, variations, strength, colorSpace)
Generates a palette consisting of harmonious base colors and their monochromatic variants.
"wave"に関するスクリプトを検索
Topological Market Stress (TMS) - Quantum FabricTopological Market Stress (TMS) - Quantum Fabric
What Stresses The Market?
Topological Market Stress (TMS) represents a revolutionary fusion of algebraic topology and quantum field theory applied to financial markets. Unlike traditional indicators that analyze price movements linearly, TMS examines the underlying topological structure of market data—detecting when the very fabric of market relationships begins to tear, warp, or collapse.
Drawing inspiration from the ethereal beauty of quantum field visualizations and the mathematical elegance of topological spaces, this indicator transforms complex mathematical concepts into an intuitive, visually stunning interface that reveals hidden market dynamics invisible to conventional analysis.
Theoretical Foundation: Topology Meets Markets
Topological Holes in Market Structure
In algebraic topology, a "hole" represents a fundamental structural break—a place where the normal connectivity of space fails. In markets, these topological holes manifest as:
Correlation Breakdown: When traditional price-volume relationships collapse
Volatility Clustering Failure: When volatility patterns lose their predictive power
Microstructure Stress: When market efficiency mechanisms begin to fail
The Mathematics of Market Topology
TMS constructs a topological space from market data using three key components:
1. Correlation Topology
ρ(P,V) = correlation(price, volume, period)
Hole Formation = 1 - |ρ(P,V)|
When price and volume decorrelate, topological holes begin forming.
2. Volatility Clustering Topology
σ(t) = volatility at time t
Clustering = correlation(σ(t), σ(t-1), period)
Breakdown = 1 - |Clustering|
Volatility clustering breakdown indicates structural instability.
3. Market Efficiency Topology
Efficiency = |price - EMA(price)| / ATR
Measures how far price deviates from its efficient trajectory.
Multi-Scale Topological Analysis
Markets exist across multiple temporal scales simultaneously. TMS analyzes topology at three distinct scales:
Micro Scale (3-15 periods): Immediate structural changes, market microstructure stress
Meso Scale (10-50 periods): Trend-level topology, medium-term structural shifts
Macro Scale (50-200 periods): Long-term structural topology, regime-level changes
The final stress metric combines all scales:
Combined Stress = 0.3×Micro + 0.4×Meso + 0.3×Macro
How TMS Works
1. Topological Space Construction
Each market moment is embedded in a multi-dimensional topological space where:
- Price efficiency forms one dimension
- Correlation breakdown forms another
- Volatility clustering breakdown forms the third
2. Hole Detection Algorithm
The indicator continuously scans this topological space for:
Hole Formation: When stress exceeds the formation threshold
Hole Persistence: How long structural breaks maintain
Hole Collapse: Sudden topology restoration (regime shifts)
3. Quantum Visualization Engine
The visualization system translates topological mathematics into intuitive quantum field representations:
Stress Waves: Main line showing topological stress intensity
Quantum Glow: Surrounding field indicating stress energy
Fabric Integrity: Background showing structural health
Multi-Scale Rings: Orbital representations of different timeframes
4. Signal Generation
Stable Topology (✨): Normal market structure, standard trading conditions
Stressed Topology (⚡): Increased structural tension, heightened volatility expected
Topological Collapse (🕳️): Major structural break, regime shift in progress
Critical Stress (🌋): Extreme conditions, maximum caution required
Inputs & Parameters
🕳️ Topological Parameters
Analysis Window (20-200, default: 50)
Primary period for topological analysis
20-30: High-frequency scalping, rapid structure detection
50: Balanced approach, recommended for most markets
100-200: Long-term position trading, major structural shifts only
Hole Formation Threshold (0.1-0.9, default: 0.3)
Sensitivity for detecting topological holes
0.1-0.2: Very sensitive, detects minor structural stress
0.3: Balanced, optimal for most market conditions
0.5-0.9: Conservative, only major structural breaks
Density Calculation Radius (0.1-2.0, default: 0.5)
Radius for local density estimation in topological space
0.1-0.3: Fine-grained analysis, sensitive to local changes
0.5: Standard approach, balanced sensitivity
1.0-2.0: Broad analysis, focuses on major structural features
Collapse Detection (0.5-0.95, default: 0.7)
Threshold for detecting sudden topology restoration
0.5-0.6: Very sensitive to regime changes
0.7: Balanced, reliable collapse detection
0.8-0.95: Conservative, only major regime shifts
📊 Multi-Scale Analysis
Enable Multi-Scale (default: true)
- Analyzes topology across multiple timeframes simultaneously
- Provides deeper insight into market structure at different scales
- Essential for understanding cross-timeframe topology interactions
Micro Scale Period (3-15, default: 5)
Fast scale for immediate topology changes
3-5: Ultra-fast, tick/minute data analysis
5-8: Fast, 5m-15m chart optimization
10-15: Medium-fast, 30m-1H chart focus
Meso Scale Period (10-50, default: 20)
Medium scale for trend topology analysis
10-15: Short trend structures
20-25: Medium trend structures (recommended)
30-50: Long trend structures
Macro Scale Period (50-200, default: 100)
Slow scale for structural topology
50-75: Medium-term structural analysis
100: Long-term structure (recommended)
150-200: Very long-term structural patterns
⚙️ Signal Processing
Smoothing Method (SMA/EMA/RMA/WMA, default: EMA) Method for smoothing stress signals
SMA: Simple average, stable but slower
EMA: Exponential, responsive and recommended
RMA: Running average, very smooth
WMA: Weighted average, balanced approach
Smoothing Period (1-10, default: 3)
Period for signal smoothing
1-2: Minimal smoothing, noisy but fast
3-5: Balanced, recommended for most applications
6-10: Heavy smoothing, slow but very stable
Normalization (Fixed/Adaptive/Rolling, default: Adaptive)
Method for normalizing stress values
Fixed: Static 0-1 range normalization
Adaptive: Dynamic range adjustment (recommended)
Rolling: Rolling window normalization
🎨 Quantum Visualization
Fabric Style Options:
Quantum Field: Flowing energy visualization with smooth gradients
Topological Mesh: Mathematical topology with stepped lines
Phase Space: Dynamical systems view with circular markers
Minimal: Clean, simple display with reduced visual elements
Color Scheme Options:
Quantum Gradient: Deep space blue → Quantum red progression
Thermal: Black → Hot orange thermal imaging style
Spectral: Purple → Gold full spectrum colors
Monochrome: Dark gray → Light gray elegant simplicity
Multi-Scale Rings (default: true)
- Display orbital rings for different time scales
- Visualizes how topology changes across timeframes
- Provides immediate visual feedback on cross-scale dynamics
Glow Intensity (0.0-1.0, default: 0.6)
Controls the quantum glow effect intensity
0.0: No glow, pure line display
0.6: Balanced, recommended setting
1.0: Maximum glow, full quantum field effect
📋 Dashboard & Alerts
Show Dashboard (default: true)
Real-time topology status display
Current market state and trading recommendations
Stress level visualization and fabric integrity status
Show Theory Guide (default: true)
Educational panel explaining topological concepts
Dashboard interpretation guide
Trading strategy recommendations
Enable Alerts (default: true)
Extreme stress detection alerts
Topological collapse notifications
Hole formation and recovery signals
Visual Logic & Interpretation
Main Visualization Elements
Quantum Stress Line
Primary indicator showing topological stress intensity
Color intensity reflects current market state
Line style varies based on selected fabric style
Glow effect indicates stress energy field
Equilibrium Line
Silver line showing average stress level
Reference point for normal market conditions
Helps identify when stress is elevated or suppressed
Upper/Lower Bounds
Red upper bound: High stress threshold
Green lower bound: Low stress threshold
Quantum fabric fill between bounds shows stress field
Multi-Scale Rings
Aqua circles : Micro-scale topology (immediate changes)
Orange circles: Meso-scale topology (trend-level changes)
Provides cross-timeframe topology visualization
Dashboard Information
Topology State Icons:
✨ STABLE: Normal market structure, standard trading conditions
⚡ STRESSED: Increased structural tension, monitor closely
🕳️ COLLAPSE: Major structural break, regime shift occurring
🌋 CRITICAL: Extreme conditions, reduce risk exposure
Stress Bar Visualization:
Visual representation of current stress level (0-100%)
Color-coded based on current topology state
Real-time percentage display
Fabric Integrity Dots:
●●●●● Intact: Strong market structure (0-30% stress)
●●●○○ Stressed: Weakening structure (30-70% stress)
●○○○○ Fractured: Breaking down structure (70-100% stress)
Action Recommendations:
✅ TRADE: Normal conditions, standard strategies apply
⚠️ WATCH: Monitor closely, increased vigilance required
🔄 ADAPT: Change strategy, regime shift in progress
🛑 REDUCE: Lower risk exposure, extreme conditions
Trading Strategies
In Stable Topology (✨ STABLE)
- Normal trading conditions apply
- Use standard technical analysis
- Regular position sizing appropriate
- Both trend-following and mean-reversion strategies viable
In Stressed Topology (⚡ STRESSED)
- Increased volatility expected
- Widen stop losses to account for higher volatility
- Reduce position sizes slightly
- Focus on high-probability setups
- Monitor for potential regime change
During Topological Collapse (🕳️ COLLAPSE)
- Major regime shift in progress
- Adapt strategy immediately to new market character
- Consider closing positions that rely on previous regime
- Wait for new topology to stabilize before major trades
- Opportunity for contrarian plays if collapse is extreme
In Critical Stress (🌋 CRITICAL)
- Extreme market conditions
- Significantly reduce risk exposure
- Avoid new positions until stress subsides
- Focus on capital preservation
- Consider hedging existing positions
Advanced Techniques
Multi-Timeframe Topology Analysis
- Use higher timeframe TMS for regime context
- Use lower timeframe TMS for precise entry timing
- Alignment across timeframes = highest probability trades
Topology Divergence Trading
- Most powerful at regime boundaries
- Price makes new high/low but topology stress decreases
- Early warning of potential reversals
- Combine with key support/resistance levels
Stress Persistence Analysis
- Long periods of stable topology often precede major moves
- Extended stress periods often resolve in regime changes
- Use persistence tracking for position sizing decisions
Originality & Innovation
TMS represents a genuine breakthrough in applying advanced mathematics to market analysis:
True Topological Analysis: Not a simplified proxy but actual topological space construction and hole detection using correlation breakdown, volatility clustering analysis, and market efficiency measurement.
Quantum Aesthetic: Transforms complex topology mathematics into an intuitive, visually stunning interface inspired by quantum field theory visualizations.
Multi-Scale Architecture: Simultaneous analysis across micro, meso, and macro timeframes provides unprecedented insight into market structure dynamics.
Regime Detection: Identifies fundamental market character changes before they become obvious in price action, providing early warning of structural shifts.
Practical Application: Clear, actionable signals derived from advanced mathematical concepts, making theoretical topology accessible to practical traders.
This is not a combination of existing indicators or a cosmetic enhancement of standard tools. It represents a fundamental reimagining of how we measure, visualize, and interpret market dynamics through the lens of algebraic topology and quantum field theory.
Best Practices
Start with defaults: Parameters are optimized for broad market applicability
Match timeframe: Adjust scales based on your trading timeframe
Confirm with price action: TMS shows market character, not direction
Respect topology changes: Reduce risk during regime transitions
Use appropriate strategies: Adapt approach based on current topology state
Monitor persistence: Track how long topology states maintain
Cross-timeframe analysis: Align multiple timeframes for highest probability trades
Alerts Available
Extreme Topological Stress: Market fabric under severe deformation
Topological Collapse Detected: Regime shift in progress
Topological Hole Forming: Market structure breakdown detected
Topology Stabilizing: Market structure recovering to normal
Chart Requirements
Recommended Markets: All liquid markets (forex, stocks, crypto, futures)
Optimal Timeframes: 5m to Daily (adaptable to any timeframe)
Minimum History: 200 bars for proper topology construction
Best Performance: Markets with clear regime characteristics
Academic Foundation
This indicator draws from cutting-edge research in:
- Algebraic topology and persistent homology
- Quantum field theory visualization techniques
- Market microstructure analysis
- Multi-scale dynamical systems theory
- Correlation topology and network analysis
Disclaimer
This indicator is for educational and research purposes only. It does not constitute financial advice or provide direct buy/sell signals. Topological analysis reveals market structure characteristics, not future price direction. Always use proper risk management and combine with your own analysis. Past performance does not guarantee future results.
See markets through the lens of topology. Trade the structure, not the noise.
Bringing advanced mathematics to practical trading through quantum-inspired visualization.
Trade with insight. Trade with structure.
— Dskyz , for DAFE Trading Systems
MLExtensions_CoreLibrary "MLExtensions_Core"
A set of extension methods for a novel implementation of a Approximate Nearest Neighbors (ANN) algorithm in Lorentzian space, focused on computation.
normalizeDeriv(src, quadraticMeanLength)
Returns the smoothed hyperbolic tangent of the input series.
Parameters:
src (float) : The input series (i.e., the first-order derivative for price).
quadraticMeanLength (int) : The length of the quadratic mean (RMS).
Returns: nDeriv The normalized derivative of the input series.
normalize(src, min, max)
Rescales a source value with an unbounded range to a target range.
Parameters:
src (float) : The input series
min (float) : The minimum value of the unbounded range
max (float) : The maximum value of the unbounded range
Returns: The normalized series
rescale(src, oldMin, oldMax, newMin, newMax)
Rescales a source value with a bounded range to anther bounded range
Parameters:
src (float) : The input series
oldMin (float) : The minimum value of the range to rescale from
oldMax (float) : The maximum value of the range to rescale from
newMin (float) : The minimum value of the range to rescale to
newMax (float) : The maximum value of the range to rescale to
Returns: The rescaled series
getColorShades(color)
Creates an array of colors with varying shades of the input color
Parameters:
color (color) : The color to create shades of
Returns: An array of colors with varying shades of the input color
getPredictionColor(prediction, neighborsCount, shadesArr)
Determines the color shade based on prediction percentile
Parameters:
prediction (float) : Value of the prediction
neighborsCount (int) : The number of neighbors used in a nearest neighbors classification
shadesArr (array) : An array of colors with varying shades of the input color
Returns: shade Color shade based on prediction percentile
color_green(prediction)
Assigns varying shades of the color green based on the KNN classification
Parameters:
prediction (float) : Value (int|float) of the prediction
Returns: color
color_red(prediction)
Assigns varying shades of the color red based on the KNN classification
Parameters:
prediction (float) : Value of the prediction
Returns: color
tanh(src)
Returns the the hyperbolic tangent of the input series. The sigmoid-like hyperbolic tangent function is used to compress the input to a value between -1 and 1.
Parameters:
src (float) : The input series (i.e., the normalized derivative).
Returns: tanh The hyperbolic tangent of the input series.
dualPoleFilter(src, lookback)
Returns the smoothed hyperbolic tangent of the input series.
Parameters:
src (float) : The input series (i.e., the hyperbolic tangent).
lookback (int) : The lookback window for the smoothing.
Returns: filter The smoothed hyperbolic tangent of the input series.
tanhTransform(src, smoothingFrequency, quadraticMeanLength)
Returns the tanh transform of the input series.
Parameters:
src (float) : The input series (i.e., the result of the tanh calculation).
smoothingFrequency (int)
quadraticMeanLength (int)
Returns: signal The smoothed hyperbolic tangent transform of the input series.
n_rsi(src, n1, n2)
Returns the normalized RSI ideal for use in ML algorithms.
Parameters:
src (float) : The input series (i.e., the result of the RSI calculation).
n1 (simple int) : The length of the RSI.
n2 (simple int) : The smoothing length of the RSI.
Returns: signal The normalized RSI.
n_cci(src, n1, n2)
Returns the normalized CCI ideal for use in ML algorithms.
Parameters:
src (float) : The input series (i.e., the result of the CCI calculation).
n1 (simple int) : The length of the CCI.
n2 (simple int) : The smoothing length of the CCI.
Returns: signal The normalized CCI.
n_wt(src, n1, n2)
Returns the normalized WaveTrend Classic series ideal for use in ML algorithms.
Parameters:
src (float) : The input series (i.e., the result of the WaveTrend Classic calculation).
n1 (simple int)
n2 (simple int)
Returns: signal The normalized WaveTrend Classic series.
n_adx(highSrc, lowSrc, closeSrc, n1)
Returns the normalized ADX ideal for use in ML algorithms.
Parameters:
highSrc (float) : The input series for the high price.
lowSrc (float) : The input series for the low price.
closeSrc (float) : The input series for the close price.
n1 (simple int) : The length of the ADX.
regime_filter(src, threshold, useRegimeFilter)
Parameters:
src (float)
threshold (float)
useRegimeFilter (bool)
filter_adx(src, length, adxThreshold, useAdxFilter)
filter_adx
Parameters:
src (float) : The source series.
length (simple int) : The length of the ADX.
adxThreshold (int) : The ADX threshold.
useAdxFilter (bool) : Whether to use the ADX filter.
Returns: The ADX.
filter_volatility(minLength, maxLength, sensitivityMultiplier, useVolatilityFilter)
filter_volatility
Parameters:
minLength (simple int) : The minimum length of the ATR.
maxLength (simple int) : The maximum length of the ATR.
sensitivityMultiplier (float) : Multiplier for the historical ATR to control sensitivity.
useVolatilityFilter (bool) : Whether to use the volatility filter.
Returns: Boolean indicating whether or not to let the signal pass through the filter.
Rate of Change HistogramExplanation of Modifications
Converting ROC to Histogram:
Original ROC: The ROC is calculated as roc = 100 * (source - source ) / source , plotted as a line oscillating around zero.
Modification: Instead of plotting roc as a line, it’s now plotted as a histogram using style=plot.style_columns. This makes the ROC values visually resemble the MACD histogram, with bars extending above or below the zero line based on momentum.
Applying MACD’s Four-Color Scheme:
Logic: The histogram’s color is determined by:
Above Zero (roc >= 0): Bright green (#26A69A) if ROC is rising (roc > roc ), light green (#B2DFDB) if falling (roc < roc ).
Below Zero (roc < 0): Bright red (#FF5252) if ROC is falling (roc < roc ), light red (#FFCDD2) if rising (roc > roc ).
Implementation: Used the exact color logic and hex codes from the MACD code, applied to the ROC histogram. This highlights momentum ebbs (falling ROC, fading waves) and flows (rising ROC, strengthening waves).
Removing Signal Line:
Unlike the previous attempt, no signal line is added. The histogram is purely the ROC value, ensuring it directly reflects price change momentum without additional smoothing, making it faster and more responsive to pulse waves, as you indicated ROC performs better than other oscillators.
Alert Conditions:
Added alerts to match the MACD’s logic, triggering when the ROC histogram crosses the zero line:
Rising to Falling: When roc >= 0 and roc < 0, signaling a potential wave peak (e.g., end of Wave 3 or C).
Falling to Rising: When roc <= 0 and roc > 0, indicating a potential wave bottom (e.g., start of Wave 1 or rebound).
These alerts help identify transitions in 3-4 wave pulse patterns.
Plotting:
Histogram: Plotted as columns (plot.style_columns) with the four-color scheme, directly representing ROC momentum.
Zero Line: Kept the gray zero line (#787B86) for reference, consistent with the MACD.
Removed ROC Line/Signal Line: Since you want the ROC to act as the histogram itself, no additional lines are plotted.
Inputs:
Retained the original length (default 9) and source (default close) inputs for consistency.
Removed signal-related inputs (e.g., signal_length, sma_signal) as they’re not needed for a pure ROC histogram.
How This ROC Histogram Works for Wave Pulses
Wave Alignment:
Above Zero (Bullish Momentum): Positive ROC bars indicate flows (e.g., impulse Waves 1, 3, or rebounds in Wave B/C). Bright green bars show accelerating momentum (strong pulses), while light green bars suggest fading momentum (potential wave tops).
Below Zero (Bearish Momentum): Negative ROC bars indicate ebbs (e.g., corrective Waves 2, 4, A, or C). Bright red bars show increasing bearish momentum (strong pullbacks), while light red bars suggest slowing declines (potential wave bottoms).
3-4 Wave Pulses:
In a 3-wave A-B-C correction: Wave A (down) shows bright red bars (falling ROC), Wave B (up) shows bright/light green bars (rising ROC), and Wave C (down) shifts back to red bars.
In a 4-wave consolidation: Alternating green/red bars highlight the rhythmic ebbs and flows as momentum oscillates.
Timing:
Zero-line crossovers mark wave transitions (e.g., from Wave 2 to Wave 3).
Color changes (e.g., bright to light green) signal momentum shifts within waves, helping identify pulse peaks/troughs.
Advantages Over MACD:
The ROC histogram is more responsive than the MACD histogram because ROC directly measures price change percentage, while MACD relies on moving average differences, which introduce lag. This makes the ROC histogram better for capturing rapid 3-4 wave pulses, as you noted.
Example Usage
For a stock with 3-4 wave pulses on a 5-minute chart:
Wave 1 (Flow): ROC rises above zero, histogram turns bright green (rising momentum), indicating a strong bullish pulse.
Wave 2 (Ebb): ROC falls below zero, histogram shifts to bright red (falling momentum), signaling a corrective pullback.
Wave 3 (Flow): ROC crosses back above zero, histogram becomes bright green again, confirming a powerful pulse.
Wave 4 (Ebb): ROC dips slightly, histogram turns light green (falling momentum above zero) or light red (rising momentum below zero), indicating consolidation.
Alerts trigger on zero-line crosses (e.g., from Wave 2 to Wave 3), helping time trades.
Settings Recommendations
Default (length=9): Works well for most time frames, balancing sensitivity and smoothness.
Intraday Pulses: Use length=5 or length=7 for faster signals on 5-minute or 15-minute charts.
Daily Charts: Try length=12 or length=14 for broader wave cycles.
Testing: Apply to a stock with clear wave patterns (e.g., tech stocks like AAPL or TSLA) and adjust length to match the pulse frequency you observe.
Notes
Confirmation: Pair the ROC histogram with price action (e.g., Fibonacci retracements, support/resistance) to validate wave counts, as momentum oscillators can be noisy in choppy markets.
Divergences: Watch for divergences (e.g., price makes a higher high, but ROC histogram bars are lower) to spot wave reversals, especially at Wave 3 or C ends.
Comparison to MACD: The ROC histogram is faster and more direct, making it ideal for short-term pulse waves, but it may be more volatile, so use with technical levels for precision.
Quantum Flow Navigator @DaviddTechQuantum Flow Navigator – DaviddTech
Precision Strategy Builder Powered by Adaptive Filters, Statistical Noise Reduction & Multi-Modal Confirmation
🚀 Bullish Signal : Enter when ALMA, FluxWave, and QuickSilver all confirm bullish trend, with high volume and valid noise filter state.
🔻 Bearish Signal : Enter short when all components align bearishly and filters validate the signal.
🚪 Exit : Automatically managed by dynamic SL/TP or indicator-based reversal logic.
✅ Overview & DaviddTech Methodology
Quantum Flow Navigator is an advanced, multi-component trading system engineered around the strict modular logic of the DaviddTech methodology .
It integrates every core component required for a fully rule-based and signal-driven strategy—baseline, confirmations, volume filter, exit system, and noise filter.
Designed for traders who demand structure, clarity, and data-backed decision-making on 15M, 1H, and 4H charts.
🔍 Indicator Components
Baseline: Adaptive ALMA Filter
Smooth and responsive dynamic trend detection, with momentum validation and optional filled zones for enhanced visual feedback.
Confirmation #1: FluxWave Oscillator
Developed from an enhanced Trendlio concept by @dudeowns , FluxWave uses ALMA-smoothed rate-of-change logic with configurable signal behavior.
Confirmation #2: QuickSilver Band System
Custom breakout engine that maps volatility envelopes using multi-layered deviation bands for clear confirmation of structure breaks and trend direction.
Volume Filter: Normalized Volume Energy
Innovative volume filter inspired by @ceyhun 's work. Filters trades by classifying energy into High, Normal, or Low based on normalized volume context.
Exit System: Dynamic Momentum Stop Loss
Choose from Smart Adaptive, Trailing, Stepped, Percentage, ATR, or Volatility-adjusted logic. Supports TP via risk/reward, ATR multiples, or percentage targets.
Noise Filtration: Quantum Statistical Noise Reduction
Fuses Kalman smoothing with wavelet decomposition to eliminate non-signal noise and improve trade quality and confidence.
🎨 Visual System & Dashboard
🚀/🔻/🚪 Emoji Labels : Buy, sell, and exit trades clearly marked for instant recognition.
Color-Shifting Bars : Reflect FluxWave’s trend bias in real-time.
ALMA Fill Zone : Visual trend envelope between price and ALMA baseline.
QuickSilver Bands : Volatility envelopes with graduated depth for support/resistance awareness.
SL & TP Visuals : Dynamic stop-loss and take-profit zones plotted directly on chart.
Navigator Panel : In-chart dashboard displays real-time trend status, volume energy, noise filter state, signal strength, and active position tracking.
📈 How to Trade with It
Entry Mode Selection : Choose between Combined, ALMA, FluxWave, QuickSilver, or Custom scoring logic.
Final Signals : Trigger only when confirmations align, volume energy is valid, and noise is low.
Dashboard Summary : Use real-time signal display to validate entry strength.
Timeframes : 15M–1H recommended for swing/intraday setups; 5M–15M for automation.
💡 Advanced Features
Entry Strength Scoring: Composite weight of all active components + filters.
Cooldown System: Limits excessive signals in volatile periods.
Multiple Exit Strategies: SL & TP modes with optional indicator-based exits.
Statistical Filtering: Wavelet + Kalman combination optimizes entry confidence.
Full Alert Suite: Covers entries, exits, filter triggers, volume states, and more.
🧠 Suggested Strategy Usage
Wait for full confirmation from ALMA, FluxWave, and QuickSilver.
Ensure volume energy is High and noise filter confirms trend clarity.
Use adaptive SL/TP or indicator-based exits.
Monitor dashboard for live signal strength ≥ threshold.
Use “Balanced” mode for general use; switch to “Aggressive” for tighter signals.
📝 Credits & Originality
Concept based on DaviddTech’s component-driven methodology .
FluxWave Oscillator built as an evolved version of Trendlio with full signal customization — credit @dudeowns .
Volume Energy Filter adapted from the work of @ceyhun .
Noise filtration and system architecture developed independently using Pine Script v6.
All code and logic is original, non-rehashed, and completely refactored to ensure uniqueness.
Quantum Flow Navigator fuses adaptive baselines, confirmation logic, energy-based filters, and statistical refinement into a precision signal engine—optimized for traders who value structure, clarity, and control.
TASC 2025.04 The Ultimate Oscillator█ OVERVIEW
This script implements an alternative, refined version of the Ultimate Oscillator (UO) designed to reduce lag and enhance responsiveness in momentum indicators, as introduced by John F. Ehlers in his article "Less Lag In Momentum Indicators, The Ultimate Oscillator" from the April 2025 edition of TASC's Traders' Tips .
█ CONCEPTS
In his article, Ehlers states that indicators are essentially filters that remove unwanted noise (i.e., unnecessary information) from market data. Simply put, they process a series of data to place focus on specific information, providing a different perspective on price dynamics. Various filter types attenuate different periodic signals within the data. For instance, a lowpass filter allows only low-frequency signals, a highpass filter allows only high-frequency signals, and a bandpass filter allows signals within a specific frequency range .
Ehlers explains that the key to removing indicator lag is to combine filters of different types in such a way that the result preserves necessary, useful signals while minimizing delay (lag). His proposed UltimateOscillator aims to maintain responsiveness to a specific frequency range by measuring the difference between two highpass filters' outputs. The oscillator uses the following formula:
UO = (HP1 - HP2) / RMS
Where:
HP1 is the first highpass filter.
HP2 is another highpass filter that allows only shorter wavelengths than the critical period of HP1.
RMS is the root mean square of the highpass filter difference, used as a scaling factor to standardize the output.
The resulting oscillator is similar to a bandpass filter , because it emphasizes wavelengths between the critical periods of the two highpass filters. Ehlers' UO responds quickly to value changes in a series, providing a responsive view of momentum with little to no lag.
█ USAGE
Ehlers' UltimateOscillator sets the critical periods of its highpass filters using two parameters: BandEdge and Bandwidth :
The BandEdge sets the critical period of the second highpass filter, which determines the shortest wavelengths in the response.
The Bandwidth is a multiple of the BandEdge used for the critical period of the first highpass filter, which determines the longest wavelengths in the response. Ehlers suggests that a Bandwidth value of 2 works well for most applications. However, traders can use any value above or equal to 1.4.
Users can customize these parameters with the "Bandwidth" and "BandEdge" inputs in the "Settings/Inputs" tab.
The script plots the UO calculated for the specified "Source" series in a separate pane, with a color based on the chart's foreground color. Positive UO values indicate upward momentum or trends, and negative UO values indicate the opposite.
Additionally, this indicator provides the option to display a "cloud" from 10 additional UO series with different settings for an aggregate view of momentum. The "Cloud" input offers four display choices: "Bandwidth", "BandEdge", "Bandwidth + BandEdge", or "None".
The "Bandwidth" option calculates oscillators with different Bandwidth values based on the main oscillator's setting. Likewise, the "BandEdge" option calculates oscillators with varying BandEdge values. The "Bandwidth + BandEdge" option calculates the extra oscillators with different values for both parameters.
When a user selects any of these options, the script plots the maximum and minimum oscillator values and fills their space with a color gradient. The fill color corresponds to the net sum of each UO's sign , indicating whether most of the UOs reflect positive or negative momentum. Green hues mean most oscillators are above zero, signifying stronger upward momentum. Red hues mean most are below zero, indicating stronger downward momentum.
SemiCircle Cycle Notation PivotsFor decades, traders have sought to decode the rhythm of the markets through cycle theory. From the groundbreaking work of HM Gartley in the 1930s to modern-day cycle trading tools on TradingView, the concept remains the same: markets move in repeating waves with larger cycles influencing smaller ones in a fractal-like structure, and understanding their timing gives traders an edge to better anticipate future price movements🔮.
Traditional cycle analysis has always been manual, requiring traders to painstakingly plot semicircles, diamonds, or sine waves to estimate pivot points and time reversals. Drawing tools like semicircle & sine wave projections exist on TradingView, but they lack automation—forcing traders to adjust cycle lengths by eye, often leading to inconsistencies.
This is where SemiCircle Cycle Notation Pivots indicator comes in. Semicircle cycle chart notation appears to have evolved as a practical visualization tool among cycle theorists rather than being pioneered by a single individual; some key influences include HM Gartley, WD Gann, JM Hurst, Walter Bressert, and RayTomes. Built upon LonesomeTheBlue's foundational ZigZag Waves indicator , this indicator takes cycle visualization to the next level by dynamically detecting price pivots and then automatically plotting semicircles based on real-time cycle length calculations & expected rhythm of price action over time.
Key Features:
Automated Cycle Detection: The indicator identifies pivot points based on your preference—highs, lows, or both—and plots semicircle waves that correspond to Hurst's cycle notation.
Customizable Cycle Lengths: Tailor the analysis to your trading strategy with adjustable cycle lengths, defaulting to 10, 20, and 40 bars, allowing for flexibility across various timeframes and assets.
Dynamic Wave Scaling: The semicircle waves adapt to different price structures, ensuring that the visualization remains proportional to the detected cycle lengths and aiding in the identification of potential reversal points.
Automated Cycle Detection: Dynamically identifies price pivot points and automatically adjusts offsets based on real-time cycle length calculations, ensuring precise semicircle wave alignment with market structure.
Color-Coded Cycle Tiers: Each cycle tier is distinctly color-coded, enabling quick differentiation and a clearer understanding of nested market cycles.
TASC 2025.02 Autocorrelation Indicator█ OVERVIEW
This script implements the Autocorrelation Indicator introduced by John Ehlers in the "Drunkard's Walk: Theory And Measurement By Autocorrelation" article from the February 2025 edition of TASC's Traders' Tips . The indicator calculates the autocorrelation of a price series across several lags to construct a periodogram , which traders can use to identify market cycles, trends, and potential reversal patterns.
█ CONCEPTS
Drunkard's walk
A drunkard's walk , formally known as a random walk , is a type of stochastic process that models the evolution of a system or variable through successive random steps.
In his article, John Ehlers relates this model to market data. He discusses two first- and second-order partial differential equations, modified for discrete (non-continuous) data, that can represent solutions to the discrete random walk problem: the diffusion equation and the wave equation. According to Ehlers, market data takes on a mixture of two "modes" described by these equations. He theorizes that when "diffusion mode" is dominant, trading success is almost a matter of luck, and when "wave mode" is dominant, indicators may have improved performance.
Pink spectrum
John Ehlers explains that many recent academic studies affirm that market data has a pink spectrum , meaning the power spectral density of the data is proportional to the wavelengths it contains, like pink noise . A random walk with a pink spectrum suggests that the states of the random variable are correlated and not independent. In other words, the random variable exhibits long-range dependence with respect to previous states.
Autocorrelation function (ACF)
Autocorrelation measures the correlation of a time series with a delayed copy, or lag , of itself. The autocorrelation function (ACF) is a method that evaluates autocorrelation across a range of lags , which can help to identify patterns, trends, and cycles in stochastic market data. Analysts often use ACF to detect and characterize long-range dependence in a time series.
The Autocorrelation Indicator evaluates the ACF of market prices over a fixed range of lags, expressing the results as a color-coded heatmap representing a dynamic periodogram. Ehlers suggests the information from the periodogram can help traders identify different market behaviors, including:
Cycles : Distinguishable as repeated patterns in the periodogram.
Reversals : Indicated by sharp vertical changes in the periodogram when the indicator uses a short data length .
Trends : Indicated by increasing correlation across lags, starting with the shortest, over time.
█ USAGE
This script calculates the Autocorrelation Indicator on an input "Source" series, smoothed by Ehlers' UltimateSmoother filter, and plots several color-coded lines to represent the periodogram's information. Each line corresponds to an analyzed lag, with the shortest lag's line at the bottom of the pane. Green hues in the line indicate a positive correlation for the lag, red hues indicate a negative correlation (anticorrelation), and orange or yellow hues mean the correlation is near zero.
Because Pine has a limit on the number of plots for a single indicator, this script divides the periodogram display into three distinct ranges that cover different lags. To see the full periodogram, add three instances of this script to the chart and set the "Lag range" input for each to a different value, as demonstrated in the chart above.
With a modest autocorrelation length, such as 20 on a "1D" chart, traders can identify seasonal patterns in the price series, which can help to pinpoint cycles and moderate trends. For instance, on the daily ES1! chart above, the indicator shows repetitive, similar patterns through fall 2023 and winter 2023-2024. The green "triangular" shape rising from the zero lag baseline over different time ranges corresponds to seasonal trends in the data.
To identify turning points in the price series, Ehlers recommends using a short autocorrelation length, such as 2. With this length, users can observe sharp, sudden shifts along the vertical axis, which suggest potential turning points from upward to downward or vice versa.
TASC 2025.01 Linear Predictive Filters█ OVERVIEW
This script implements a suite of tools for identifying and utilizing dominant cycles in time series data, as introduced by John Ehlers in the "Linear Predictive Filters And Instantaneous Frequency" article featured in the January 2025 edition of TASC's Traders' Tips . Dominant cycle information can help traders adapt their indicators and strategies to changing market conditions.
█ CONCEPTS
Conventional technical indicators and strategies often rely on static, unchanging parameters, which may fail to account for the dynamic nature of market data. In his article, John Ehlers applies digital signal processing principles to address this issue, introducing linear predictive filters to identify cyclic information for adapting indicators and strategies to evolving market conditions.
This approach treats market data as a complex series in the time domain. Analyzing the series in the frequency domain reveals information about its cyclic components. To reduce the impact of frequencies outside a range of interest and focus on a specific range of cycles, Ehlers applies second-order highpass and lowpass filters to the price data, which attenuate or remove wavelengths outside the desired range. This band-limited analysis isolates specific parts of the frequency spectrum for various trading styles, e.g., longer wavelengths for position trading or shorter wavelengths for swing trading.
After filtering the series to produce band-limited data, Ehlers applies a linear predictive filter to predict future values a few bars ahead. The filter, calculated based on the techniques proposed by Lloyd Griffiths, adaptively minimizes the error between the latest data point and prediction, successively adjusting its coefficients to align with the band-limited series. The filter's coefficients can then be applied to generate an adaptive estimate of the band-limited data's structure in the frequency domain and identify the dominant cycle.
█ USAGE
This script implements the following tools presented in the article:
Griffiths Predictor
This tool calculates a linear predictive filter to forecast future data points in band-limited price data. The crosses between the prediction and signal lines can provide potential trade signals.
Griffiths Spectrum
This tool calculates a partial frequency spectrum of the band-limited price data derived from the linear predictive filter's coefficients, displaying a color-coded representation of the frequency information in the pane. This mode's display represents the data as a periodogram . The bottom of each plotted bar corresponds to a specific analyzed period (inverse of frequency), and the bar's color represents the presence of that periodic cycle in the time series relative to the one with the highest presence (i.e., the dominant cycle). Warmer, brighter colors indicate a higher presence of the cycle in the series, whereas darker colors indicate a lower presence.
Griffiths Dominant Cycle
This tool compares the cyclic components within the partial spectrum and identifies the frequency with the highest power, i.e., the dominant cycle . Traders can use this dominant cycle information to tune other indicators and strategies, which may help promote better alignment with dynamic market conditions.
Notes on parameters
Bandpass boundaries:
In the article, Ehlers recommends an upper bound of 125 bars or higher to capture longer-term cycles for position trading. He recommends an upper bound of 40 bars and a lower bound of 18 bars for swing trading. If traders use smaller lower bounds, Ehlers advises a minimum of eight bars to minimize the potential effects of aliasing.
Data length:
The Griffiths predictor can use a relatively small data length, as autocorrelation diminishes rapidly with lag. However, for optimal spectrum and dominant cycle calculations, the length must match or exceed the upper bound of the bandpass filter. Ehlers recommends avoiding excessively long lengths to maintain responsiveness to shorter-term cycles.
Gaussian RSI For Loop [TrendX_]The Gaussian RSI For Loop indicator is a sophisticated tool designed for trend-following traders seeking to identify strong uptrends in the market. By integrating a Gaussian and Weighted-MA (GWMA) with the Relative Strength Index (RSI), this indicator employs a loop-based scoring system to provide clear signals for potential trading opportunities. The combination of Gaussian smoothing techniques and overbought/oversold filtering enhances the indicator's ability to capture significant price movements while reducing noise, making it an optimal choice for traders aiming to capitalize on robust upward trends.
💎 KEY FEATURES
Gaussian Weighted Moving Average (GWMA): Smooths price data to reduce noise and enhance responsiveness to significant price changes.
Filtered RSI: Applies the RSI to Gaussian-filtered data, allowing for more accurate momentum readings.
Wavetrend Analysis: Calculates the difference between the Filtered RSI and its short-term moving average, providing additional insights into momentum shifts.
Loop-Based Scoring System: Evaluates the strength and direction of uptrends through a systematic analysis of the Filtered RSI against defined thresholds.
⚙️ USAGES
Identifying Strong Uptrends: Traders can use this indicator to pinpoint periods of strong upward momentum, helping them make informed decisions about entering long positions and its exits.
Trend and Signal Confirmation: The Score confirms Long and Exit signals which traders can see through the Dots on the Gaussian RSI.
🔎 BREAKDOWN
Gaussian-Filtered Data:
The first component of the Gaussian RSI For Loop is the application of a GWMA to the sourced price data. This smoothing technique uses weighted averages based on a Gaussian distribution, which emphasizes more recent prices while diminishing the impact of older prices. This GWMA effectively reduces market noise, allowing traders to focus on significant price movements. By adjusting weights using sigma parameters, traders can fine-tune the sensitivity of the indicator, making it more responsive to genuine market trends while filtering out minor fluctuations that could lead to misleading signals.
Filtered RSI:
Next, the RSI is applied to the Gaussian-filtered data. The RSI measures the speed and change of price movements, providing insights into overbought or oversold conditions. By applying the RSI to smoothed price data, traders obtain a clearer view of momentum without the distortion caused by sudden price spikes or drops. This results in more reliable readings that help identify potential trend reversals or continuations.
Wavetrend Analysis:
The Wavetrend component calculates the difference between the Filtered RSI and its short-term moving average (MA). This difference serves as an additional momentum indicator. When the Filtered RSI is above its short-term MA, it suggests that upward momentum is strengthening; conversely, when it falls below, it indicates weakening momentum. This analysis helps traders confirm whether an uptrend is gaining strength or losing traction.
Loop-Based Scoring System:
Range Analysis: The system evaluates the Filtered RSI by comparing its current value against overbought (OB) and oversold (OS) thresholds over a defined range. This systematic approach ensures that each value within this range contributes to understanding overall trend strength.
Score Calculation: As the loop iterates through values within the defined range, it adjusts a score based on whether the current Filtered RSI and its previous values are higher or lower than established OB and OS levels. This scoring mechanism quantifies trend strength and direction.
Strong Uptrend Trigger: A strong uptrend signal is generated when the score exceeds a predefined Score Threshold (Long). This indicates that bullish momentum is robust enough to warrant entry into long positions.
None Trend: Conversely, if the score falls below the Score Threshold (Short), it suggests that upward momentum has weakened significantly, signaling potential exit points and it can be consolidated or downtrend.
DISCLAIMER
This indicator is not financial advice, it can only help traders make better decisions. There are many factors and uncertainties that can affect the outcome of any endeavor, and no one can guarantee or predict with certainty what will occur. Therefore, one should always exercise caution and judgment when making decisions based on past performance.
Bat Harmonic Pattern [TradingFinder] Bat Chart Indicator🔵 Introduction
The Bat Harmonic Pattern, created by Scott Carney in the 1990s, is a sophisticated tool in technical analysis, used to identify potential reversal points in price movements by leveraging Fibonacci ratios.
This pattern is classified into two primary types: the Bullish Bat Pattern, which signals the end of a downtrend and the beginning of an uptrend, and the Bearish Bat Pattern, which indicates the conclusion of an uptrend and the onset of a downtrend.
🟣 Bullish Bat Pattern
The Bullish Bat Pattern is designed to identify when a downtrend is likely to end and a new uptrend is about to begin. The key feature of this pattern is Point D, which typically aligns near the 88.6% Fibonacci retracement of the XA leg.
This point is considered a strong buy zone. When the price reaches Point D after a significant downtrend, it often indicates a potential reversal, presenting a buying opportunity for traders anticipating the start of an upward movement.
🟣 Bearish Bat Pattern
In contrast, the Bearish Bat Pattern forms when an uptrend is nearing its conclusion. Point D, which also typically aligns near the 88.6% Fibonacci retracement of the XA leg, serves as a critical point for traders.
This point is regarded as a strong sell zone, signaling that the uptrend may be ending, and a downtrend could be imminent. Traders often open short positions when they identify this pattern, aiming to capitalize on the anticipated downward movement.
🔵 How to Use
The Bat Pattern consists of five key points: X, A, B, C, and D, and four waves: XA, AB, BC, and CD. Fibonacci ratios play a crucial role in this pattern, helping traders pinpoint precise entry and exit points. In both the Bullish and Bearish Bat Patterns, the 88.6% retracement of the XA leg is a critical level for identifying potential reversal points.
🟣 Bullish Bat Pattern
Traders typically enter buy positions after Point D forms, expecting the downtrend to end and a new uptrend to start. This point, located near the 88.6% retracement of the XA leg, serves as a reliable buy signal.
🟣 Bearish Bat Pattern
Traders usually open short positions after identifying Point D, expecting the uptrend to end and a downtrend to begin. This point, also near the 88.6% retracement of the XA leg, acts as a valid sell signal.
🟣 Trading Tips for the Bat Pattern
Accurate Fibonacci Point Identification : Accurately identify Points X, A, B, C, and D, and calculate the Fibonacci ratios between these points. Point D should ideally be near the 88.6% retracement of the XA leg.
Signal Confirmation with Other Tools : To enhance the pattern's accuracy, avoid trading solely based on the Bat Pattern.
Risk Management : Always use stop-loss orders. In a Bullish Bat Pattern, place the stop-loss below Point X, and in a Bearish Bat Pattern, above Point X. This helps limit potential losses if the pattern fails.
Wait for Price Movement Confirmation : After identifying Point D, wait for the price to move in the anticipated direction to confirm the pattern's validity before entering a trade.
Set Realistic Profit Targets : Use Fibonacci retracement levels to set realistic profit targets, such as 38.2%, 50%, and 61.8% retracement levels of the CD leg. This strategy helps maximize profits and prevents premature exits.
🔵 Setting
🟣 Logical Setting
ZigZag Pivot Period : You can adjust the period so that the harmonic patterns are adjusted according to the pivot period you want. This factor is the most important parameter in pattern recognition.
Show Valid Forma t: If this parameter is on "On" mode, only patterns will be displayed that they have exact format and no noise can be seen in them. If "Off" is, the patterns displayed that maybe are noisy and do not exactly correspond to the original pattern.
Show Formation Last Pivot Confirm : if Turned on, you can see this ability of patterns when their last pivot is formed. If this feature is off, it will see the patterns as soon as they are formed. The advantage of this option being clear is less formation of fielded patterns, and it is accompanied by the latest pattern seeing and a sharp reduction in reward to risk.
Period of Formation Last Pivot : Using this parameter you can determine that the last pivot is based on Pivot period.
🟣 Genaral Setting
Show : Enter "On" to display the template and "Off" to not display the template.
Color : Enter the desired color to draw the pattern in this parameter.
LineWidth : You can enter the number 1 or numbers higher than one to adjust the thickness of the drawing lines. This number must be an integer and increases with increasing thickness.
LabelSize : You can adjust the size of the labels by using the "size.auto", "size.tiny", "size.smal", "size.normal", "size.large" or "size.huge" entries.
🟣 Alert Setting
Alert : On / Off
Message Frequency : This string parameter defines the announcement frequency. Choices include: "All" (activates the alert every time the function is called), "Once Per Bar" (activates the alert only on the first call within the bar), and "Once Per Bar Close" (the alert is activated only by a call at the last script execution of the real-time bar upon closing). The default setting is "Once per Bar".
Show Alert Time by Time Zone : The date, hour, and minute you receive in alert messages can be based on any time zone you choose. For example, if you want New York time, you should enter "UTC-4". This input is set to the time zone "UTC" by default.
🔵 Conclusion
The Bat Harmonic Pattern is a powerful tool in technical analysis, offering traders the ability to identify critical reversal points using Fibonacci ratios. By recognizing the Bullish and Bearish Bat Patterns, traders can anticipate potential trend reversals and make informed trading decisions.
However, it is essential to combine the Bat Pattern with other technical analysis tools and confirm signals for better trading outcomes. With proper use, this pattern can help traders minimize risk and optimize their entry and exit points in the market.
ZigzagLibrary "Zigzag"
Zigzag related user defined types. Depends on DrawingTypes library for basic types
method tostring(this, sortKeys, sortOrder, includeKeys)
Converts ZigzagTypes/Pivot object to string representation
Namespace types: Pivot
Parameters:
this (Pivot) : ZigzagTypes/Pivot
sortKeys (bool) : If set to true, string output is sorted by keys.
sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
includeKeys (string ) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
Returns: string representation of ZigzagTypes/Pivot
method tostring(this, sortKeys, sortOrder, includeKeys)
Converts Array of Pivot objects to string representation
Namespace types: Pivot
Parameters:
this (Pivot ) : Pivot object array
sortKeys (bool) : If set to true, string output is sorted by keys.
sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
includeKeys (string ) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
Returns: string representation of Pivot object array
method tostring(this)
Converts ZigzagFlags object to string representation
Namespace types: ZigzagFlags
Parameters:
this (ZigzagFlags) : ZigzagFlags object
Returns: string representation of ZigzagFlags
method tostring(this, sortKeys, sortOrder, includeKeys)
Converts ZigzagTypes/Zigzag object to string representation
Namespace types: Zigzag
Parameters:
this (Zigzag) : ZigzagTypes/Zigzagobject
sortKeys (bool) : If set to true, string output is sorted by keys.
sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
includeKeys (string ) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
Returns: string representation of ZigzagTypes/Zigzag
method calculate(this, ohlc, indicators, indicatorNames)
Calculate zigzag based on input values and indicator values
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
ohlc (float ) : Array containing OHLC values. Can also have custom values for which zigzag to be calculated
indicators (matrix) : Array of indicator values
indicatorNames (string ) : Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
Returns: current Zigzag object
method calculate(this)
Calculate zigzag based on properties embedded within Zigzag object
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
Returns: current Zigzag object
method nextlevel(this)
Calculate Next Level Zigzag based on the current calculated zigzag object
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
Returns: Next Level Zigzag object
method clear(this)
Clears zigzag drawings array
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing ) : array
Returns: void
method drawplain(this)
draws fresh zigzag based on properties embedded in ZigzagDrawing object without trying to calculate
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
Returns: ZigzagDrawing object
method drawfresh(this, ohlc, indicators, indicatorNames)
draws fresh zigzag based on properties embedded in ZigzagDrawing object
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
indicators (matrix) : Array of indicator values
indicatorNames (string ) : Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
Returns: ZigzagDrawing object
method drawcontinuous(this, ohlc, indicators, indicatorNames)
draws zigzag based on the zigzagmatrix input
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
indicators (matrix) : Array of indicator values
indicatorNames (string ) : Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
Returns:
method getPrices(pivots)
Namespace types: Pivot
Parameters:
pivots (Pivot )
method getBars(pivots)
Namespace types: Pivot
Parameters:
pivots (Pivot )
Indicator
Indicator is collection of indicator values applied on high, low and close
Fields:
indicatorHigh (series float) : Indicator Value applied on High
indicatorLow (series float) : Indicator Value applied on Low
PivotCandle
PivotCandle represents data of the candle which forms either pivot High or pivot low or both
Fields:
_high (series float) : High price of candle forming the pivot
_low (series float) : Low price of candle forming the pivot
length (series int) : Pivot length
pHighBar (series int) : represents number of bar back the pivot High occurred.
pLowBar (series int) : represents number of bar back the pivot Low occurred.
pHigh (series float) : Pivot High Price
pLow (series float) : Pivot Low Price
indicators (Indicator ) : Array of Indicators - allows to add multiple
Pivot
Pivot refers to zigzag pivot. Each pivot can contain various data
Fields:
point (chart.point) : pivot point coordinates
dir (series int) : direction of the pivot. Valid values are 1, -1, 2, -2
level (series int) : is used for multi level zigzags. For single level, it will always be 0
componentIndex (series int) : is the lower level zigzag array index for given pivot. Used only in multi level Zigzag Pivots
subComponents (series int) : is the number of sub waves per each zigzag wave. Only applicable for multi level zigzags
microComponents (series int) : is the number of base zigzag components in a zigzag wave
ratio (series float) : Price Ratio based on previous two pivots
sizeRatio (series float)
subPivots (Pivot )
indicatorNames (string ) : Names of the indicators applied on zigzag
indicatorValues (float ) : Values of the indicators applied on zigzag
indicatorRatios (float ) : Ratios of the indicators applied on zigzag based on previous 2 pivots
ZigzagFlags
Flags required for drawing zigzag. Only used internally in zigzag calculation. Should not set the values explicitly
Fields:
newPivot (series bool) : true if the calculation resulted in new pivot
doublePivot (series bool) : true if the calculation resulted in two pivots on same bar
updateLastPivot (series bool) : true if new pivot calculated replaces the old one.
Zigzag
Zigzag object which contains whole zigzag calculation parameters and pivots
Fields:
length (series int) : Zigzag length. Default value is 5
numberOfPivots (series int) : max number of pivots to hold in the calculation. Default value is 20
offset (series int) : Bar offset to be considered for calculation of zigzag. Default is 0 - which means calculation is done based on the latest bar.
level (series int) : Zigzag calculation level - used in multi level recursive zigzags
zigzagPivots (Pivot ) : array which holds the last n pivots calculated.
flags (ZigzagFlags) : ZigzagFlags object which is required for continuous drawing of zigzag lines.
ZigzagObject
Zigzag Drawing Object
Fields:
zigzagLine (series line) : Line joining two pivots
zigzagLabel (series label) : Label which can be used for drawing the values, ratios, directions etc.
ZigzagProperties
Object which holds properties of zigzag drawing. To be used along with ZigzagDrawing
Fields:
lineColor (series color) : Zigzag line color. Default is color.blue
lineWidth (series int) : Zigzag line width. Default is 1
lineStyle (series string) : Zigzag line style. Default is line.style_solid.
showLabel (series bool) : If set, the drawing will show labels on each pivot. Default is false
textColor (series color) : Text color of the labels. Only applicable if showLabel is set to true.
maxObjects (series int) : Max number of zigzag lines to display. Default is 300
xloc (series string) : Time/Bar reference to be used for zigzag drawing. Default is Time - xloc.bar_time.
ZigzagDrawing
Object which holds complete zigzag drawing objects and properties.
Fields:
zigzag (Zigzag) : Zigzag object which holds the calculations.
properties (ZigzagProperties) : ZigzagProperties object which is used for setting the display styles of zigzag
drawings (ZigzagObject ) : array which contains lines and labels of zigzag drawing.
LibrarySupertrendLibrary "LibrarySupertrend"
selective_ma(condition, source, length)
Parameters:
condition (bool)
source (float)
length (int)
trendUp(source)
Parameters:
source (float)
smoothrng(source, sampling_period, range_mult)
Parameters:
source (float)
sampling_period (simple int)
range_mult (float)
rngfilt(source, smoothrng)
Parameters:
source (float)
smoothrng (float)
fusion(overallLength, rsiLength, mfiLength, macdLength, cciLength, tsiLength, rviLength, atrLength, adxLength)
Parameters:
overallLength (simple int)
rsiLength (simple int)
mfiLength (simple int)
macdLength (simple int)
cciLength (simple int)
tsiLength (simple int)
rviLength (simple int)
atrLength (simple int)
adxLength (simple int)
zonestrength(amplitude, wavelength)
Parameters:
amplitude (int)
wavelength (simple int)
atr_anysource(source, atr_length)
Parameters:
source (float)
atr_length (simple int)
supertrend_anysource(source, factor, atr_length)
Parameters:
source (float)
factor (float)
atr_length (simple int)
Best Support And Resistance Indicator V1 [ForexBee]This Indicator Identifies and draws the support and resistance Zones On the Chart
🔶Overview
The support and resistance indicator is a technical indicator that will plot the support zone and resistance zone on the candlestick chart. It determines the price touches to find the strong support resistance zones.
The support and resistance indicator is the most basic technical analysis in trading. Instead of drawing zones manually, this indicator can save you time by plotting zones automatically.
🔶Working
There are specific characteristics of a valid support and resistance zone. Price always bounces upward from the support zone while it bounces downward from the resistance zone. On the other hand, when a breakout of the support or resistance zone happens, the price trends toward the breakout.
🔶Valid support zone
When the price touches a zone two to three times and bounces in a bullish direction, it is a good support zone.
The main point is that you should always find the bounces in clear price swings. The touches or bounces of the price must not be in the form of a choppy market. Price always moves in the form of swings or waves.
🔶Valid resistance zone
When the price touches a zone two to three times with a bounce in a bearish direction, then a valid resistance zone forms.
Here the price bounces must be in the form of swings or waves. You must avoid a choppy market.
So the support and resistance zone indicator finds these parameters on the chart and draws only valid zones.
🔶Settings of indicator
There are two inputs available in the indicator.
Number of bars for swing
The number of bars for the swing bars represents the size of the swing for a valid support or resistance touch. This parameter helps to filter the ranging price. the default value is 10.
Number of Tests for valid support and resistance
In this indicator, the number of pivots represents the support or resistance touches. so if you select the number 3, the indicator will only draw a zone with three touches.
🔶Features
There are the following features that this indicator identifies automatically, so you don’t need to do manual work.
Identify the valid support and resistance zones
Add the confluence of swings or waves during zone identification
Choppy market filter
We are also adding the feature of a candlestick pattern at the zone, which will be added in the next update.
Mad_MATHLibrary "MAD_MATH"
This is a mathematical library where I store useful kernels, filters and selectors for the different types of computations.
This library also contains opensource code from other scripters.
Future extensions are very likely, there are some functions I would like to add, but I have to wait for approvals so i can include them.
Ehlers_EMA(_src, _length)
Calculates the Ehlers Exponential Moving Average (Ehlers_EMA)
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers EMA
Returns: The Ehlers EMA value
Ehlers_Gaussian(_src, _length)
Calculates the Ehlers Gaussian Filter
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers Gaussian Filter
Returns: The Ehlers Gaussian Filter value
Ehlers_supersmoother(_src, _length)
Calculates the Ehlers Supersmoother
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers Supersmoother
Returns: The Ehlers Supersmoother value
Ehlers_SMA_fast(_src, _length)
Calculates the Ehlers Simple Moving Average (SMA) Fast
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers SMA Fast
Returns: The Ehlers SMA Fast value
Ehlers_EMA_fast(_src, _length)
Calculates the Ehlers Exponential Moving Average (EMA) Fast
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers EMA Fast
Returns: The Ehlers EMA Fast value
Ehlers_RSI_fast(_src, _length)
Calculates the Ehlers Relative Strength Index (RSI) Fast
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers RSI Fast
Returns: The Ehlers RSI Fast value
Ehlers_Band_Pass_Filter(_src, _length)
Calculates the Ehlers BandPass Filter
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers BandPass Filter
Returns: The Ehlers BandPass Filter value
Ehlers_Butterworth(_src, _length)
Calculates the Ehlers Butterworth Filter
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers Butterworth Filter
Returns: The Ehlers Butterworth Filter value
Ehlers_Two_Pole_Gaussian_Filter(_src, _length)
Calculates the Ehlers Two-Pole Gaussian Filter
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers Two-Pole Gaussian Filter
Returns: The Ehlers Two-Pole Gaussian Filter value
Ehlers_Two_Pole_Butterworth_Filter(_src, _length)
Calculates the Ehlers Two-Pole Butterworth Filter
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers Two-Pole Butterworth Filter
Returns: The Ehlers Two-Pole Butterworth Filter value
Ehlers_Band_Stop_Filter(_src, _length)
Calculates the Ehlers Band Stop Filter
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers Band Stop Filter
Returns: The Ehlers Band Stop Filter value
Ehlers_Smoother(_src)
Calculates the Ehlers Smoother
Parameters:
_src (float) : The source series for calculation
Returns: The Ehlers Smoother value
Ehlers_High_Pass_Filter(_src, _length)
Calculates the Ehlers High Pass Filter
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers High Pass Filter
Returns: The Ehlers High Pass Filter value
Ehlers_2_Pole_High_Pass_Filter(_src, _length)
Calculates the Ehlers Two-Pole High Pass Filter
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the Ehlers Two-Pole High Pass Filter
Returns: The Ehlers Two-Pole High Pass Filter value
pr(_src, _length)
pr Calculates the percentage rank (PR) of a value within a range.
Parameters:
_src (float) : The source value for which the percentage rank is calculated. It represents the value to be ranked within the range.
_length (simple int) : The _length of the range over which the percentage rank is calculated. It determines the number of bars considered for the calculation.
Returns: The percentage rank (PR) of the source value within the range, adjusted by adding 50 to the result.
smma(_src, _length)
Calculates the SMMA (Smoothed Moving Average)
Parameters:
_src (float) : The source series for calculation
_length (simple int)
Returns: The SMMA value
hullma(_src, _length)
Calculates the Hull Moving Average (HullMA)
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The _length of the HullMA
Returns: The HullMA value
tma(_src, _length)
Calculates the Triple Moving Average (TMA)
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The _length of the TMA
Returns: The TMA value
dema(_src, _length)
Calculates the Double Exponential Moving Average (DEMA)
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The _length of the DEMA
Returns: The DEMA value
tema(_src, _length)
Calculates the Triple Exponential Moving Average (TEMA)
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The _length of the TEMA
Returns: The TEMA value
w2ma(_src, _length)
Calculates the Normalized Double Moving Average (N2MA)
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The _length of the N2MA
Returns: The N2MA value
wma(_src, _length)
Calculates the Normalized Moving Average (NMA)
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The _length of the NMA
Returns: The NMA value
nma(_open, _close, _length)
Calculates the Normalized Moving Average (NMA)
Parameters:
_open (float) : The open price series
_close (float) : The close price series
_length (simple int) : The _length for finding the highest and lowest values
Returns: The NMA value
lma(_src, _length)
Parameters:
_src (float)
_length (simple int)
zero_lag(_src, _length, gamma1, zl)
Calculates the Zero Lag Moving Average (ZeroLag)
Parameters:
_src (float) : The source series for calculation
_length (simple int) : The length for the moving average
gamma1 (simple int) : The coefficient for calculating 'd'
zl (simple bool) : Boolean flag for applying Zero Lag
Returns: An array containing the ZeroLag Moving Average and a boolean flag indicating if it's flat
copyright HPotter, thanks for that great function
chebyshevI(src, len, ripple)
Calculates the Chebyshev Type I Filter
Parameters:
src (float) : The source series for calculation
len (int) : The length of the filter
ripple (float) : The ripple factor for the filter
Returns: The output of the Chebyshev Type I Filter
math from Pafnuti Lwowitsch Tschebyschow (1821–1894)
Thanks peacefulLizard50262 for the find and translation
chebyshevII(src, len, ripple)
Calculates the Chebyshev Type II Filter
Parameters:
src (float) : The source series for calculation
len (int) : The length of the filter
ripple (float) : The ripple factor for the filter
Returns: The output of the Chebyshev Type II Filter
math from Pafnuti Lwowitsch Tschebyschow (1821–1894)
Thanks peacefulLizard50262 for the find
wavetrend(_src, _n1, _n2)
Calculates the WaveTrend indicator
Parameters:
_src (float) : The source series for calculation
_n1 (simple int) : The period for the first EMA calculation
_n2 (simple int) : The period for the second EMA calculation
Returns: The WaveTrend value
f_getma(_type, _src, _length, ripple)
Calculates various types of moving averages
Parameters:
_type (simple string) : The type of indicator to calculate
_src (float) : The source series for calculation
_length (simple int) : The length for the moving average or indicator
ripple (simple float)
Returns: The calculated moving average or indicator value
f_getfilter(_type, _src, _length)
Calculates various types of filters
Parameters:
_type (simple string) : The type of indicator to calculate
_src (float) : The source series for calculation
_length (simple int) : The length for the moving average or indicator
Returns: The filtered value
f_getoszillator(_type, _src, _length)
Calculates various types of Deviations and other indicators
Parameters:
_type (simple string) : The type of indicator to calculate
_src (float) : The source series for calculation
_length (simple int) : The length for the moving average or indicator
Returns: The calculated moving average or indicator value
wbburgin_utilsLibrary "wbburgin_utils"
trendUp(source)
Parameters:
source
smoothrng(source, sampling_period, range_mult)
Parameters:
source
sampling_period
range_mult
rngfilt(source, smoothrng)
Parameters:
source
smoothrng
fusion(overallLength, rsiLength, mfiLength, macdLength, cciLength, tsiLength, rviLength, atrLength, adxLength)
Parameters:
overallLength
rsiLength
mfiLength
macdLength
cciLength
tsiLength
rviLength
atrLength
adxLength
zonestrength(amplitude, wavelength)
Parameters:
amplitude
wavelength
atr_anysource(source, atr_length)
Parameters:
source
atr_length
supertrend_anysource(source, factor, atr_length)
Parameters:
source
factor
atr_length
Hurst Spectral Analysis Oscillator"It is a true fact that any given time history of any event (including the price history of a stock) can always be considered as reproducible to any desired degree of accuracy by the process of algebraically summing a particular series of sine waves. This is intuitively evident if you start with a number of sine waves of differing frequencies, amplitudes, and phases, and then sum them up to get a new and more complex waveform." (Spectral Analysis chapter of J M Hurst's book, Profit Magic )
Background: A band-pass filter or bandpass filter is a device that passes frequencies within a certain range and rejects (attenuates) frequencies outside that range. Bandpass filters are widely used in wireless transmitters and receivers. Well-designed bandpass filters (having the optimum bandwidth) maximize the number of signal transmitters that can exist in a system while minimizing the interference or competition among signals. Outside of electronics and signal processing, other examples of the use of bandpass filters include atmospheric sciences, neuroscience, astronomy, economics, and finance.
About the indicator: This indicator will accept float/decimal length inputs to display a spectrum of 11 bandpass filters. The trader can select a single bandpass for analysis that includes future high/low predictions. The trader can also select which bandpasses contribute to a composite model of expected price action.
10 Statements to describe the 5 elements of Hurst's price-motion model:
Random events account for only 2% of the price change of the overall market and of individual issues.
National and world historical events influence the market to a negligible degree.
Foreseeable fundamental events account for about 75% of all price motion. The effect is smooth and slow changing.
Unforeseeable fundamental events influence price motion. They occur relatively seldom, but the effect can be large and must be guarded against.
Approximately 23% of all price motion is cyclic in nature and semi-predictable (basis of the "cyclic model").
Cyclicality in price motion consists of the sum of a number of (non-ideal) periodic cyclic "waves" or "fluctuations" (summation principle).
Summed cyclicality is a common factor among all stocks (commonality principle).
Cyclic component magnitude and duration fluctuate slowly with the passage of time. In the course of such fluctuations, the greater the magnitude, the longer the duration and vice-versa (variation principle).
Principle of nominality: an element of commonality from which variation is expected.
The greater the nominal duration of a cyclic component, the larger the nominal magnitude (principle of proportionality).
Shoutouts & Credits for all the raw code, helpful information, ideas & collaboration, conversations together, introductions, indicator feedback, and genuine/selfless help:
🏆 @TerryPascoe
🏅 DavidF at Sigma-L, and @HPotter
👏 @Saviolis, parisboy, and @upslidedown
MLExtensionsLibrary "MLExtensions"
normalizeDeriv(src, quadraticMeanLength)
Returns the smoothed hyperbolic tangent of the input series.
Parameters:
src : The input series (i.e., the first-order derivative for price).
quadraticMeanLength : The length of the quadratic mean (RMS).
Returns: nDeriv The normalized derivative of the input series.
normalize(src, min, max)
Rescales a source value with an unbounded range to a target range.
Parameters:
src : The input series
min : The minimum value of the unbounded range
max : The maximum value of the unbounded range
Returns: The normalized series
rescale(src, oldMin, oldMax, newMin, newMax)
Rescales a source value with a bounded range to anther bounded range
Parameters:
src : The input series
oldMin : The minimum value of the range to rescale from
oldMax : The maximum value of the range to rescale from
newMin : The minimum value of the range to rescale to
newMax : The maximum value of the range to rescale to
Returns: The rescaled series
color_green(prediction)
Assigns varying shades of the color green based on the KNN classification
Parameters:
prediction : Value (int|float) of the prediction
Returns: color
color_red(prediction)
Assigns varying shades of the color red based on the KNN classification
Parameters:
prediction : Value of the prediction
Returns: color
tanh(src)
Returns the the hyperbolic tangent of the input series. The sigmoid-like hyperbolic tangent function is used to compress the input to a value between -1 and 1.
Parameters:
src : The input series (i.e., the normalized derivative).
Returns: tanh The hyperbolic tangent of the input series.
dualPoleFilter(src, lookback)
Returns the smoothed hyperbolic tangent of the input series.
Parameters:
src : The input series (i.e., the hyperbolic tangent).
lookback : The lookback window for the smoothing.
Returns: filter The smoothed hyperbolic tangent of the input series.
tanhTransform(src, smoothingFrequency, quadraticMeanLength)
Returns the tanh transform of the input series.
Parameters:
src : The input series (i.e., the result of the tanh calculation).
smoothingFrequency
quadraticMeanLength
Returns: signal The smoothed hyperbolic tangent transform of the input series.
n_rsi(src, n1, n2)
Returns the normalized RSI ideal for use in ML algorithms.
Parameters:
src : The input series (i.e., the result of the RSI calculation).
n1 : The length of the RSI.
n2 : The smoothing length of the RSI.
Returns: signal The normalized RSI.
n_cci(src, n1, n2)
Returns the normalized CCI ideal for use in ML algorithms.
Parameters:
src : The input series (i.e., the result of the CCI calculation).
n1 : The length of the CCI.
n2 : The smoothing length of the CCI.
Returns: signal The normalized CCI.
n_wt(src, n1, n2)
Returns the normalized WaveTrend Classic series ideal for use in ML algorithms.
Parameters:
src : The input series (i.e., the result of the WaveTrend Classic calculation).
n1
n2
Returns: signal The normalized WaveTrend Classic series.
n_adx(highSrc, lowSrc, closeSrc, n1)
Returns the normalized ADX ideal for use in ML algorithms.
Parameters:
highSrc : The input series for the high price.
lowSrc : The input series for the low price.
closeSrc : The input series for the close price.
n1 : The length of the ADX.
regime_filter(src, threshold, useRegimeFilter)
Parameters:
src
threshold
useRegimeFilter
filter_adx(src, length, adxThreshold, useAdxFilter)
filter_adx
Parameters:
src : The source series.
length : The length of the ADX.
adxThreshold : The ADX threshold.
useAdxFilter : Whether to use the ADX filter.
Returns: The ADX.
filter_volatility(minLength, maxLength, useVolatilityFilter)
filter_volatility
Parameters:
minLength : The minimum length of the ATR.
maxLength : The maximum length of the ATR.
useVolatilityFilter : Whether to use the volatility filter.
Returns: Boolean indicating whether or not to let the signal pass through the filter.
backtest(high, low, open, startLongTrade, endLongTrade, startShortTrade, endShortTrade, isStopLossHit, maxBarsBackIndex, thisBarIndex)
Performs a basic backtest using the specified parameters and conditions.
Parameters:
high : The input series for the high price.
low : The input series for the low price.
open : The input series for the open price.
startLongTrade : The series of conditions that indicate the start of a long trade.`
endLongTrade : The series of conditions that indicate the end of a long trade.
startShortTrade : The series of conditions that indicate the start of a short trade.
endShortTrade : The series of conditions that indicate the end of a short trade.
isStopLossHit : The stop loss hit indicator.
maxBarsBackIndex : The maximum number of bars to go back in the backtest.
thisBarIndex : The current bar index.
Returns: A tuple containing backtest values
init_table()
init_table()
Returns: tbl The backtest results.
update_table(tbl, tradeStatsHeader, totalTrades, totalWins, totalLosses, winLossRatio, winrate, stopLosses)
update_table(tbl, tradeStats)
Parameters:
tbl : The backtest results table.
tradeStatsHeader : The trade stats header.
totalTrades : The total number of trades.
totalWins : The total number of wins.
totalLosses : The total number of losses.
winLossRatio : The win loss ratio.
winrate : The winrate.
stopLosses : The total number of stop losses.
Returns: Updated backtest results table.
TrendCalculusThis indicator makes visualising some of the core TrendCalculus algorithm's key information and features both fast and easy for casual analysis.
Interpretation:
a) The light blue channel is the lagged price channel calculated over the timeframe of your choosing for a period of N values. When the current price breaks out of this channel the previous price major high/low can be identified as a trend reversal. This helps in counting trend "waves" and is a rolling visual version of ideas I developed for counting Elliot Waves. For EW analysis, your mileage may vary depending on the asset inspected, but the chart allows you to clearly count waves on a particular scale of time (period) ignoring noise on other time scales.
b) The green/red channel is a support/resistance indicator region that shows the relationship of the current price to the key pivot points on this time scale (period) and these make for good visual indication that the current trend is up (green), or down (red). You may find them helpful for identifying breakouts and placing stops - but this was not their original intention. The pink line is the mid point of closing values in the lagged price channel, and the orange line the mid point of closing values in the current price channel.
About TrendCalculus (TC):
TC is implemented in several languages including Lua, Scala and Python. The Lua implementation is the reference and has the most advanced functionality and delivers a powerful data processing tool for both multi-scale trend reversal detection, reversal labelling, as well as trend feature production - all useful things helping it to produce training data for machine learning models that detect trend changes in real time.
This charting tool includes: (1) two consecutive lagged Donchian channels configured to a common period N, (2) the current price, and (3) the mid price of both Donchian channels. These calculations are all part of the TC codebase, and are brought to life in this charting tool.
Motivation:
By creating a TC charting tool - the machine learning model is swapped for *your eyes* and *your brain*. Using the same inputs as the machine, you can use this chart to learn to detect trend changes, and understand how time frame (long periods, short periods) affect your view of trend change. If you choose to use it to trade, or make investment decisions, do so at your own risk. This indicator does not deliver financial advice.
TrendCalculus is the invention of Andrew Morgan, author of Mastering Spark for Data Science (2017).
The original core TrendCalculus (TC) algorithm itself is published as open-source code on github under a GPL licence, and free to use and develop.
CoRA Ribbon - Multiple Compound Ratio Weighted Moving AveragesWhat distinguishes this indicator?
A Compound Ratio Weighted Moving Average ("CoRA") is a Moving Average that, regardless of its length, has very little lag and that can be relied on to accurately track price movements and fluctuations - compared to other types of Moving Averages.
By combining multiple Compound Ratio Weighted Moving Averages you can identify the trend better and more reliably . This is where "CoRA Ribbon" comes in.
The original study, which supported one CoRA Wave, comes from RedKTrader and was introduced as "RedK Compound Ratio Moving Average (CoRa_Wave)” . Thanks to him for the great work!
What was improved or added to this version of the indicator?
With this version of the indicator, up to 5 waves of Compound Ratio Moving Averages with different lengths can be combined and output to one "CoRA Ribbon".
Alerts were implemented. You can be notified e.g. in the event of
changes in direction of each single CoRA Wave
a trend change, which is determined on the basis of all 5 CoRA Waves
A CoRA Wave compared to other Moving Averages - CoRa Waves are less lagging behind
A suggestion for interpretation of “CoRA Ribbon”:
Since CoRA Ribbon can help you to identify the trend better and more reliably, this indicator provides a good baseline for your strategy, but should always be used in conjunction with other indicators or market analysis.
By adjusting the length of each individual wave, you can adapt "CoRA Ribbon" to your trading style - whether it is more aggressive or more cautious.
The following general rules can be formulated:
If the Ribbon changes its color to green, this can be interpreted as a buy signal.
If the Ribbon changes its color to red, this can be interpreted as a sell signal.
Good to know: The default settings have been selected for timeframe lower than 15 minutes. Adjust them and the indicator will do a great job on higher timeframes too. Please remember to test carefully after every change before the changes are applied to your live trading.
Background “Compound Ratio Weighted Average” - provided by "RedKTrader"
A Compound Ratio Weighted Average is a moving average where the weights increase in a "logarithmically linear" way - from the furthest point in the data to the current point.
The formula to calculate these weights work in a similar way to how "compound ratio" works: you start with an initial amount, then add a consistent "ratio of the cumulative prior sum" each period until you reach the end amount. The result is the "step ratio" between the weights is consistent - This is not the case with linear-weighted “Moving Average Weighted” (WMA) or “Exponential Moving Average” (EMA)
For example, if you consider a Weighted Moving Average ( WMA ) of length 5, the weights will be (from the furthest point towards the most current) 1, 2, 3, 4, 5 -- we can see that the ratio between these weights are inconsistent. in fact, the ratio between the 2 furthest points is 2:1, but the ratio between the most recent points is 5:4. the ratio is inconsistent, and in fact, more recent points are not getting the best weights they should get to counter-act the lag effect. Using the Compound Ratio approach addresses that point.
A key advantage here is that we can significantly reduce the "tail weight" - which is "relatively" large in other Moving Averages.
A Compound Ratio Weighted Moving Average is a moving average that has very little lag and that can be relied on to accurately track price movements and fluctuations.
Use or modify the code, invite us for a coffee, ... most importantly: have a lot of fun and success with this indicator
The code is commented - please don't hesitate to use it as needed or customize it further ... and if you are satisfied and even successful with this indicator, maybe buy us a coffee ;-)
The original developer ( RedKTrader ) and I ( consilus ) are curious to see how our indicators will develop through further ideas - so please keep us updated.
Time Wolna_2021_iun3[wozdux] Description of the Time_Wolna indicator
The indicator is designed to study the behavior of time. There are many indicators that study just the price, a little less indicators that study the volume of trading and vanishingly few indicators that study time.
This is not an oscillator, it does not have oversold or overbought levels. This indicator has an indefinite beginning and an indefinite end. Its value is not in the absolute values of the indicator, but in relative ones. This indicator calculates the time of price rise and the time of price decline. It clearly shows how long the price rises and how long the price falls.
The initial idea was to use my RSIVol indicator to study the time. Each bar is counted as a unit of time. If the price rises during the period of one bar, then one is added, if the price falls, then one is subtracted. By default, the blue line shows this time movement according to the RsiVol indicator.
The basic RsiVol indicator is shown at the bottom of the diagram. The bill goes along the blue line, which calculates the movement of the volume price. If the blue RSIVol line is above the yellow level, then the blue Time_Wolna time line is colored green. If the blue line in the base RsiVol indicator falls below the lower yellow level, then the blue time line of the Time_Wolna indicator turns red.
The result is a broken line that clearly shows the waves of rising and falling prices. In principle, the time indicator makes it easier to recognize waves.
It is known that time plays an important role in Elliott wave analysis, although in practice this is almost never done. The mention of Elliott is just a lyrical digression.
Time is very difficult to study. This indicator does not give clear buy or sell signals. This is just an analysis tool to help analysts.
In addition to the RsiVol indicator, simply the Rsi from the price and a simple moving average from the price are also used.
So, the settings of this indicator.
"switch Price == close <==> ( High+Low)/2" -- select the base price in all subsequent calculations
"Key EMA=> True=ema(Price); False=ema(Price*Volume)" --The key for switching the moving average from the price or from the volume price.
"T==> EMA(price, T)" --The period for calculating the moving average
" key red==> Yes/No Rsi")--the key turns on or off the RSI line red line
"key green==> Yes/No Orsi") --the key turns on or off the Volume RSI line green line
" key olive==> Yes/No RsiVol200 " -- the key enables or disables the Volumetric RSIVol200 olive line. This is RsiVol minus the 200-period moving average.
"keyVol blue==> Yes/No " - the key enables or disables the base blue line RSIVol
"keyVol blue==> V->tt(RsiVol) ->tt(ema(Price))"—The blue line selection will be calculated as the time from RSIVol or as the time from the moving average EMA.
"keyVol blue==> : 1=Time, 2=Time* price, 3=Time*(Ci-Ck) 4=Time*Volume, 5=Time*price*Volume")- selection for the blue baseline. By default, the time of the price rise or fall is calculated simply. Key=1. But you can investigate the joint influence of time and price and then the key is=2. If we study the combined effect of time and price changes per bar, then the key=3. If we study the joint influence of time and volume, then the key=4. If we study the joint influence of time, price and volume, then the key=5.
"key RsiO red + green==> : 1=Time, 2=Time*Price, 3=Time*(Ci-Ck) 4=Time*Volume, 5=Time*Price*Volume") - - - similar settings for the red green line. By default, the time of the price rise or fall is calculated simply. Key=1. But you can investigate the joint influence of time and price and then the key is=2. If we study the combined effect of time and price changes per bar, then the key=3. If we study the joint influence of time and volume, then the key=4. If we study the joint influence of time, price and volume, then the key=5.
"Key Color – - here you can disable changing the color of the blue line to green or red when the base indicator RsiVol exits above the upper and below the lower levels.
"Level nul ==> * Down Level Rsi - screen configuration in order to raise or lower chart
"Level nul ==> * Down Level ORsi -- beauty setup in order to raise or lower chart
"Level nul ==> * DownLevel RsiVol200 -- beauty setup in order to raise or lower chart
"blue =volume * price" – period for calculation of volumetric rates
"blue => RSIVOL(Volume*price,len) and EMA" – the period for calculating RsiVol
"blue__o1=> ema ( RSIVOL, o1)" – additional smoothing RsiVol
"red=rsi (Price,14)" – the period for calculating Rsi
"red= ema ( RSI ,3)" -- additional smoothing Rsi
"fuchsia__ => RsiVol200 (vp,200)" - the period for calculating RsiVol200
"fuchsia__o2=> ema ( RSIVOL200 , o2)" -- additional smoothing RsiVol200
To study the time between two fixed dates. Setting the start point of the calculation and the end point of the calculation
"Data(0)=Year" – the year of the start date
"Data(0)= Month" – the month of the start date
"Data (0)=Day" the day of the start date
"Data(1)=Year" – the year of the end date.
"Data(1)=Year" – month of the end date.
"Data(1)=Day" -- the day of the end date.
--------русский вариант описания ------
Описание индикатора Time_Wolna
Индикатор призван изучать поведение времени. Есть много индикаторов изучающих просто цену, немного меньше индикаторов изучающих объем торгов и исчезающе мало индикаторов, изучающих время.
Это не осциллятор у него нет уровней перепроданности или перекупленности. Данный индикатор имеет неопределенное начало и неопределенный конец. Ценность его не в абсолютных значениях индикатора, а в относительных. Этот индикатор высчитывает время подъема цены и время снижения цены. Он наглядно показывает сколько времени цена поднимается и сколько времени цена опускается.
Первоначальная идея была использовать мой индикатор RSIVol для изучения времени. Каждый бар считается за единицу времени. Если цена поднимается за период одного бара, то прибавляется единица, если цена опускается, то вычитается единица. По умолчанию голубая линия показывает такое движения времени по индикатору RsiVol.
Внизу на диаграмме показан базовый индикатор RsiVol. Счёт идет по синей линии, которая вычисляет движение объемной цены. Если синяя линия RSIVol находится выше желтого уровня, то голубая линия времени Time_Wolna окрашивается в зеленый цвет. Если синяя линия в базовом индикаторе RsiVol опускается ниже нижнего желтого уровня, то голубая линия времени индикатора Time_Wolna окрашивается в красный цвет.
В результате получается ломанная линия, четко показывающая волны восхождения и снижения цены. В принципе индикатор времени позволяет легче распознавать волны.
Известно, что время играет важную роль в волновом анализе Эллиотта, хотя на практике это почти никогда не делается. Упоминание Эллиотта это просто лирическое отступление.
Время очень трудно изучать. Этот индикатор не дает четких сигналов на покупку или продажу. Это всего лишь инструмент анализа в помощь аналитикам.
Кроме индикатора RsiVol, используются и просто Rsi от цены и простая скользящая средняя от цены.
Итак, настройки данного индикатора.
"switch Price == close <==> ( High+Low)/2" -- выбираем базовую цену во всех последующих вычислениях
"Key EMA=> True=ema(Price); False=ema(Price*Volume)" --Ключ переключения скользящей средней от цены или от объемной цены.
" T==> EMA(price,T)"--Период вычисления скользящей средней
"key red==> Yes/No Rsi")--ключ включает или выключает линию RSI красная линия
"key green==> Yes/No Orsi") --ключ включает или выключает линию Объемной RSI зеленая линия
"key olive==> Yes/No RsiVol200" -- ключ включает или выключает линию Объемной RSIVol200 оливковая линия. Это RsiVol минус 200-периодная скользящая средняя.
"keyVol blue==> Yes/No " – ключ включает или выключает базовую голубую линию RSIVol
"keyVol blue==> V->tt(RsiVol) ->tt(ema(Price))"—выбор голубая линия будет вычисляться как время от RSIVol или как время от скользящей средней EMA.
"keyVol blue==> : 1=Time, 2=Time* price, 3=Time*(Ci-Ck) 4=Time*Volume, 5=Time*price*Volume")—выбор для голубой базовой линии. По умолчанию вычисляется просто время подъема или опускания цены. Ключ=1. Но можно исследовать совместное влияние времени и цены и тогда ключ=2. Если изучаем совместное влияние времени и изменения цены за один бар, то ключ=3. Если изучаем совместное влияние времени и объема, то ключ=4. Если изучаем совместное влияние времени, цены и объема, то ключ=5.
"key RsiO red + green==> : 1=Time, 2=Time*Price, 3=Time*(Ci-Ck) 4=Time*Volume, 5=Time*Price*Volume") ---аналогичные настройки для красной зеленой линии. По умолчанию вычисляется просто время подъема или опускания цены. Ключ=1. Но можно исследовать совместное влияние времени и цены и тогда ключ=2. Если изучаем совместное влияние времени и изменения цены за один бар, то ключ=3. Если изучаем совместное влияние времени и объема, то ключ=4. Если изучаем совместное влияние времени, цены и объема, то ключ=5.
"Key Color" – здесь можно отключить изменение цвета голубой линии на зеленый или красный в моменты выхода базового индикатора RsiVol выше верхнего и ниже нижнего уровней.
"Level nul ==> * Down Level Rsi - косметическая настройка для того, чтобы поднять или опустить график
"Level nul ==> * Down Level ORsi -- косметическая настройка для того, чтобы поднять или опустить график
"Level nul ==> * DownLevel RsiVol200 -- косметическая настройка для того, чтобы поднять или опустить график
" blue =>volume * price" – период для вычисления объемной цены
" blue => RSIVOL(Volume*price,len) and EMA" – период для вычисления RsiVol
"blue__o1=> ema ( RSIVOL, o1)" – дополнительное сглаживание RsiVol
" red=rsi (Price,14)" – период для вычисления Rsi
" red= ema ( RSI ,3)" -- дополнительное сглаживание Rsi
"fuchsia__ => RsiVol200 (vp,200)" -- период для вычисления RsiVol200
"fuchsia__o2=> ema ( RSIVOL200 , o2)" -- дополнительное сглаживание RsiVol200
Для исследования времени между двумя фиксированными датами. Задаем начальную точку вычисления и конечную точку вычисления
"Data(0)=Year" – год начальной даты
"Data(0)= Month" – месяц начальной даты
"Data(0)=Day" день начальной даты
"Data(1)=Year" – год конечной даты.
"Data(1)=Year" – месяц конечной даты.
"Data(1)=Day" -- день конечной даты.
Amazing Oscillator MTF MulticolorIngles
The amazing multitemporal oscillator, allows you to see in a single graph the Waves that move the market in different temporalities, that is, you will be able to see the market trend, the impulse movement, the forced movement, and the entry and exit points, as well as also how both collide with each other, to understand why the smaller waves succumb to the impulse of the larger waves.
Elliot already described them as such, in his legacy of the Elliot waves and their different sub-waves, just as Wycoff spoke of the theory of effort and result.
Español:
El oscilador asombroso multitemporal, permite ver en una sola grafica las Ondas que mueven el mercado en diferentes temporalidades, es decir, podrás ver la tendencia del mercado, el movimiento de impulso, el movimiento de fuerza y los puntos de entrada y salida, así como también como ambos chocan entre si, para entender porque las ondas mas pequeñas sucumben al impulso de las ondas de mayor tamaño.
Ya Elliot las describía como tal, en su legado de las ondas de Elliot y sus diferentes sub-ondas, al igual que Wycoff hablaba de la teoría de esfuerzo y resultado.
Amazing Oscillator MTF plusIngles
The amazing multitemporal oscillator, allows you to see in a single graph the Waves that move the market in different temporalities, that is, you will be able to see the market trend, the impulse movement, the force movement and the entry and exit points, as well as also how both collide with each other, to understand why the smaller waves succumb to the impulse of the larger waves.
Elliot already described them as such, in his legacy of the Elliot waves and their different sub-waves, just as Wycoff spoke of the theory of effort and result.
Español:
El oscilador asombroso multitemporal, permite ver en una sola grafica las Ondas que mueven el mercado en diferentes temporalidades, es decir, podrás ver la tendencia del mercado, el movimiento de impulso, el movimiento de fuerza y los puntos de entrada y salida, así como también como ambos chocan entre si, para entender porque las ondas mas pequeñas sucumben al impulso de las ondas de mayor tamaño.
Ya Elliot las describía como tal, en su legado de las ondas de Elliot y sus diferentes sub-ondas, al igual que Wycoff hablaba de la teoría de esfuerzo y resultado.






















