GKD-C PA Adaptive Fisher Transform [Loxx]The Giga Kaleidoscope GKD-C PA Adaptive Fisher Transform is a confirmation module included in Loxx's "Giga Kaleidoscope Modularized Trading System."
█ GKD-C PA Adaptive Fisher Transform
Phase Accumulation Adaptive Fisher Transform is an adaptive Fisher Transform using a modified version of Ehlers Phase Accumulation Cycle Period. This version of Phase Accumulation Cylce Period accepts as inputs: 1) total number of cycles you wish to inject into the calculation, this works as a multiplier so the higher this number, the longer the period output; 2) filter is to change the alpha value of the final smother before returning the period output.
What is the Phase Accumulation Cycle?
The phase accumulation method of computing the dominant cycle is perhaps the easiest to comprehend. In this technique, we measure the phase at each sample by taking the arctangent of the ratio of the quadrature component to the in-phase component. A delta phase is generated by taking the difference of the phase between successive samples. At each sample we can then look backwards, adding up the delta phases.When the sum of the delta phases reaches 360 degrees, we must have passed through one full cycle, on average.The process is repeated for each new sample.
The phase accumulation method of cycle measurement always uses one full cycle’s worth of historical data.This is both an advantage and a disadvantage.The advantage is the lag in obtaining the answer scales directly with the cycle period.That is, the measurement of a short cycle period has less lag than the measurement of a longer cycle period. However, the number of samples used in making the measurement means the averaging period is variable with cycle period. longer averaging reduces the noise level compared to the signal.Therefore, shorter cycle periods necessarily have a higher out- put signal-to-noise ratio.
What is Fisher Transform?
The Fisher Transform is a technical indicator created by John F. Ehlers that converts prices into a Gaussian normal distribution.
The indicator highlights when prices have moved to an extreme, based on recent prices. This may help in spotting turning points in the price of an asset. It also helps show the trend and isolate the price waves within a trend.
█ Giga Kaleidoscope Modularized Trading System
Core components of an NNFX algorithmic trading strategy
The NNFX algorithm is built on the principles of trend, momentum, and volatility. There are six core components in the NNFX trading algorithm:
1. Volatility - price volatility; e.g., Average True Range, True Range Double, Close-to-Close, etc.
2. Baseline - a moving average to identify price trend
3. Confirmation 1 - a technical indicator used to identify trends
4. Confirmation 2 - a technical indicator used to identify trends
5. Continuation - a technical indicator used to identify trends
6. Volatility/Volume - a technical indicator used to identify volatility/volume breakouts/breakdown
7. Exit - a technical indicator used to determine when a trend is exhausted
8. Metamorphosis - a technical indicator that produces a compound signal from the combination of other GKD indicators*
*(not part of the NNFX algorithm)
What is Volatility in the NNFX trading system?
In the NNFX (No Nonsense Forex) trading system, ATR (Average True Range) is typically used to measure the volatility of an asset. It is used as a part of the system to help determine the appropriate stop loss and take profit levels for a trade. ATR is calculated by taking the average of the true range values over a specified period.
True range is calculated as the maximum of the following values:
-Current high minus the current low
-Absolute value of the current high minus the previous close
-Absolute value of the current low minus the previous close
ATR is a dynamic indicator that changes with changes in volatility. As volatility increases, the value of ATR increases, and as volatility decreases, the value of ATR decreases. By using ATR in NNFX system, traders can adjust their stop loss and take profit levels according to the volatility of the asset being traded. This helps to ensure that the trade is given enough room to move, while also minimizing potential losses.
Other types of volatility include True Range Double (TRD), Close-to-Close, and Garman-Klass
What is a Baseline indicator?
The baseline is essentially a moving average, and is used to determine the overall direction of the market.
The baseline in the NNFX system is used to filter out trades that are not in line with the long-term trend of the market. The baseline is plotted on the chart along with other indicators, such as the Moving Average (MA), the Relative Strength Index (RSI), and the Average True Range (ATR).
Trades are only taken when the price is in the same direction as the baseline. For example, if the baseline is sloping upwards, only long trades are taken, and if the baseline is sloping downwards, only short trades are taken. This approach helps to ensure that trades are in line with the overall trend of the market, and reduces the risk of entering trades that are likely to fail.
By using a baseline in the NNFX system, traders can have a clear reference point for determining the overall trend of the market, and can make more informed trading decisions. The baseline helps to filter out noise and false signals, and ensures that trades are taken in the direction of the long-term trend.
What is a Confirmation indicator?
Confirmation indicators are technical indicators that are used to confirm the signals generated by primary indicators. Primary indicators are the core indicators used in the NNFX system, such as the Average True Range (ATR), the Moving Average (MA), and the Relative Strength Index (RSI).
The purpose of the confirmation indicators is to reduce false signals and improve the accuracy of the trading system. They are designed to confirm the signals generated by the primary indicators by providing additional information about the strength and direction of the trend.
Some examples of confirmation indicators that may be used in the NNFX system include the Bollinger Bands, the MACD (Moving Average Convergence Divergence), and the MACD Oscillator. These indicators can provide information about the volatility, momentum, and trend strength of the market, and can be used to confirm the signals generated by the primary indicators.
In the NNFX system, confirmation indicators are used in combination with primary indicators and other filters to create a trading system that is robust and reliable. By using multiple indicators to confirm trading signals, the system aims to reduce the risk of false signals and improve the overall profitability of the trades.
What is a Continuation indicator?
In the NNFX (No Nonsense Forex) trading system, a continuation indicator is a technical indicator that is used to confirm a current trend and predict that the trend is likely to continue in the same direction. A continuation indicator is typically used in conjunction with other indicators in the system, such as a baseline indicator, to provide a comprehensive trading strategy.
What is a Volatility/Volume indicator?
Volume indicators, such as the On Balance Volume (OBV), the Chaikin Money Flow (CMF), or the Volume Price Trend (VPT), are used to measure the amount of buying and selling activity in a market. They are based on the trading volume of the market, and can provide information about the strength of the trend. In the NNFX system, volume indicators are used to confirm trading signals generated by the Moving Average and the Relative Strength Index. Volatility indicators include Average Direction Index, Waddah Attar, and Volatility Ratio. In the NNFX trading system, volatility is a proxy for volume and vice versa.
By using volume indicators as confirmation tools, the NNFX trading system aims to reduce the risk of false signals and improve the overall profitability of trades. These indicators can provide additional information about the market that is not captured by the primary indicators, and can help traders to make more informed trading decisions. In addition, volume indicators can be used to identify potential changes in market trends and to confirm the strength of price movements.
What is an Exit indicator?
The exit indicator is used in conjunction with other indicators in the system, such as the Moving Average (MA), the Relative Strength Index (RSI), and the Average True Range (ATR), to provide a comprehensive trading strategy.
The exit indicator in the NNFX system can be any technical indicator that is deemed effective at identifying optimal exit points. Examples of exit indicators that are commonly used include the Parabolic SAR, and the Average Directional Index (ADX).
The purpose of the exit indicator is to identify when a trend is likely to reverse or when the market conditions have changed, signaling the need to exit a trade. By using an exit indicator, traders can manage their risk and prevent significant losses.
In the NNFX system, the exit indicator is used in conjunction with a stop loss and a take profit order to maximize profits and minimize losses. The stop loss order is used to limit the amount of loss that can be incurred if the trade goes against the trader, while the take profit order is used to lock in profits when the trade is moving in the trader's favor.
Overall, the use of an exit indicator in the NNFX trading system is an important component of a comprehensive trading strategy. It allows traders to manage their risk effectively and improve the profitability of their trades by exiting at the right time.
What is an Metamorphosis indicator?
The concept of a metamorphosis indicator involves the integration of two or more GKD indicators to generate a compound signal. This is achieved by evaluating the accuracy of each indicator and selecting the signal from the indicator with the highest accuracy. As an illustration, let's consider a scenario where we calculate the accuracy of 10 indicators and choose the signal from the indicator that demonstrates the highest accuracy.
The resulting output from the metamorphosis indicator can then be utilized in a GKD-BT backtest by occupying a slot that aligns with the purpose of the metamorphosis indicator. The slot can be a GKD-B, GKD-C, or GKD-E slot, depending on the specific requirements and objectives of the indicator. This allows for seamless integration and utilization of the compound signal within the GKD-BT framework.
How does Loxx's GKD (Giga Kaleidoscope Modularized Trading System) implement the NNFX algorithm outlined above?
Loxx's GKD v2.0 system has five types of modules (indicators/strategies). These modules are:
1. GKD-BT - Backtesting module (Volatility, Number 1 in the NNFX algorithm)
2. GKD-B - Baseline module (Baseline and Volatility/Volume, Numbers 1 and 2 in the NNFX algorithm)
3. GKD-C - Confirmation 1/2 and Continuation module (Confirmation 1/2 and Continuation, Numbers 3, 4, and 5 in the NNFX algorithm)
4. GKD-V - Volatility/Volume module (Confirmation 1/2, Number 6 in the NNFX algorithm)
5. GKD-E - Exit module (Exit, Number 7 in the NNFX algorithm)
6. GKD-M - Metamorphosis module (Metamorphosis, Number 8 in the NNFX algorithm, but not part of the NNFX algorithm)
(additional module types will added in future releases)
Each module interacts with every module by passing data to A backtest module wherein the various components of the GKD system are combined to create a trading signal.
That is, the Baseline indicator passes its data to Volatility/Volume. The Volatility/Volume indicator passes its values to the Confirmation 1 indicator. The Confirmation 1 indicator passes its values to the Confirmation 2 indicator. The Confirmation 2 indicator passes its values to the Continuation indicator. The Continuation indicator passes its values to the Exit indicator, and finally, the Exit indicator passes its values to the Backtest strategy.
This chaining of indicators requires that each module conform to Loxx's GKD protocol, therefore allowing for the testing of every possible combination of technical indicators that make up the six components of the NNFX algorithm.
What does the application of the GKD trading system look like?
Example trading system:
Backtest: Multi-Ticker CC Backtest
Baseline: Hull Moving Average
Volatility/Volume: Hurst Exponent
Confirmation 1: Advance Trend Pressure as shown on the chart above
Confirmation 2: uf2018
Continuation: Coppock Curve
Exit: Rex Oscillator
Metamorphosis: Baseline Optimizer
Each GKD indicator is denoted with a module identifier of either: GKD-BT, GKD-B, GKD-C, GKD-V, GKD-M, or GKD-E. This allows traders to understand to which module each indicator belongs and where each indicator fits into the GKD system.
? Giga Kaleidoscope Modularized Trading System Signals
Standard Entry
1. GKD-C Confirmation gives signal
2. Baseline agrees
3. Price inside Goldie Locks Zone Minimum
4. Price inside Goldie Locks Zone Maximum
5. Confirmation 2 agrees
6. Volatility/Volume agrees
1-Candle Standard Entry
1a. GKD-C Confirmation gives signal
2a. Baseline agrees
3a. Price inside Goldie Locks Zone Minimum
4a. Price inside Goldie Locks Zone Maximum
Next Candle
1b. Price retraced
2b. Baseline agrees
3b. Confirmation 1 agrees
4b. Confirmation 2 agrees
5b. Volatility/Volume agrees
Baseline Entry
1. GKD-B Baseline gives signal
2. Confirmation 1 agrees
3. Price inside Goldie Locks Zone Minimum
4. Price inside Goldie Locks Zone Maximum
5. Confirmation 2 agrees
6. Volatility/Volume agrees
7. Confirmation 1 signal was less than 'Maximum Allowable PSBC Bars Back' prior
1-Candle Baseline Entry
1a. GKD-B Baseline gives signal
2a. Confirmation 1 agrees
3a. Price inside Goldie Locks Zone Minimum
4a. Price inside Goldie Locks Zone Maximum
5a. Confirmation 1 signal was less than 'Maximum Allowable PSBC Bars Back' prior
Next Candle
1b. Price retraced
2b. Baseline agrees
3b. Confirmation 1 agrees
4b. Confirmation 2 agrees
5b. Volatility/Volume agrees
Volatility/Volume Entry
1. GKD-V Volatility/Volume gives signal
2. Confirmation 1 agrees
3. Price inside Goldie Locks Zone Minimum
4. Price inside Goldie Locks Zone Maximum
5. Confirmation 2 agrees
6. Baseline agrees
7. Confirmation 1 signal was less than 7 candles prior
1-Candle Volatility/Volume Entry
1a. GKD-V Volatility/Volume gives signal
2a. Confirmation 1 agrees
3a. Price inside Goldie Locks Zone Minimum
4a. Price inside Goldie Locks Zone Maximum
5a. Confirmation 1 signal was less than 'Maximum Allowable PSVVC Bars Back' prior
Next Candle
1b. Price retraced
2b. Volatility/Volume agrees
3b. Confirmation 1 agrees
4b. Confirmation 2 agrees
5b. Baseline agrees
Confirmation 2 Entry
1. GKD-C Confirmation 2 gives signal
2. Confirmation 1 agrees
3. Price inside Goldie Locks Zone Minimum
4. Price inside Goldie Locks Zone Maximum
5. Volatility/Volume agrees
6. Baseline agrees
7. Confirmation 1 signal was less than 7 candles prior
1-Candle Confirmation 2 Entry
1a. GKD-C Confirmation 2 gives signal
2a. Confirmation 1 agrees
3a. Price inside Goldie Locks Zone Minimum
4a. Price inside Goldie Locks Zone Maximum
5a. Confirmation 1 signal was less than 'Maximum Allowable PSC2C Bars Back' prior
Next Candle
1b. Price retraced
2b. Confirmation 2 agrees
3b. Confirmation 1 agrees
4b. Volatility/Volume agrees
5b. Baseline agrees
PullBack Entry
1a. GKD-B Baseline gives signal
2a. Confirmation 1 agrees
3a. Price is beyond 1.0x Volatility of Baseline
Next Candle
1b. Price inside Goldie Locks Zone Minimum
2b. Price inside Goldie Locks Zone Maximum
3b. Confirmation 1 agrees
4b. Confirmation 2 agrees
5b. Volatility/Volume agrees
Continuation Entry
1. Standard Entry, 1-Candle Standard Entry, Baseline Entry, 1-Candle Baseline Entry, Volatility/Volume Entry, 1-Candle Volatility/Volume Entry, Confirmation 2 Entry, 1-Candle Confirmation 2 Entry, or Pullback entry triggered previously
2. Baseline hasn't crossed since entry signal trigger
4. Confirmation 1 agrees
5. Baseline agrees
6. Confirmation 2 agrees
Cari dalam skrip untuk "Cycle"
Markov Chain [3D] | FractalystWhat exactly is a Markov Chain?
This indicator uses a Markov Chain model to analyze, quantify, and visualize the transitions between market regimes (Bull, Bear, Neutral) on your chart. It dynamically detects these regimes in real-time, calculates transition probabilities, and displays them as animated 3D spheres and arrows, giving traders intuitive insight into current and future market conditions.
How does a Markov Chain work, and how should I read this spheres-and-arrows diagram?
Think of three weather modes: Sunny, Rainy, Cloudy.
Each sphere is one mode. The loop on a sphere means “stay the same next step” (e.g., Sunny again tomorrow).
The arrows leaving a sphere show where things usually go next if they change (e.g., Sunny moving to Cloudy).
Some paths matter more than others. A more prominent loop means the current mode tends to persist. A more prominent outgoing arrow means a change to that destination is the usual next step.
Direction isn’t symmetric: moving Sunny→Cloudy can behave differently than Cloudy→Sunny.
Now relabel the spheres to markets: Bull, Bear, Neutral.
Spheres: market regimes (uptrend, downtrend, range).
Self‑loop: tendency for the current regime to continue on the next bar.
Arrows: the most common next regime if a switch happens.
How to read: Start at the sphere that matches current bar state. If the loop stands out, expect continuation. If one outgoing path stands out, that switch is the typical next step. Opposite directions can differ (Bear→Neutral doesn’t have to match Neutral→Bear).
What states and transitions are shown?
The three market states visualized are:
Bullish (Bull): Upward or strong-market regime.
Bearish (Bear): Downward or weak-market regime.
Neutral: Sideways or range-bound regime.
Bidirectional animated arrows and probability labels show how likely the market is to move from one regime to another (e.g., Bull → Bear or Neutral → Bull).
How does the regime detection system work?
You can use either built-in price returns (based on adaptive Z-score normalization) or supply three custom indicators (such as volume, oscillators, etc.).
Values are statistically normalized (Z-scored) over a configurable lookback period.
The normalized outputs are classified into Bull, Bear, or Neutral zones.
If using three indicators, their regime signals are averaged and smoothed for robustness.
How are transition probabilities calculated?
On every confirmed bar, the algorithm tracks the sequence of detected market states, then builds a rolling window of transitions.
The code maintains a transition count matrix for all regime pairs (e.g., Bull → Bear).
Transition probabilities are extracted for each possible state change using Laplace smoothing for numerical stability, and frequently updated in real-time.
What is unique about the visualization?
3D animated spheres represent each regime and change visually when active.
Animated, bidirectional arrows reveal transition probabilities and allow you to see both dominant and less likely regime flows.
Particles (moving dots) animate along the arrows, enhancing the perception of regime flow direction and speed.
All elements dynamically update with each new price bar, providing a live market map in an intuitive, engaging format.
Can I use custom indicators for regime classification?
Yes! Enable the "Custom Indicators" switch and select any three chart series as inputs. These will be normalized and combined (each with equal weight), broadening the regime classification beyond just price-based movement.
What does the “Lookback Period” control?
Lookback Period (default: 100) sets how much historical data builds the probability matrix. Shorter periods adapt faster to regime changes but may be noisier. Longer periods are more stable but slower to adapt.
How is this different from a Hidden Markov Model (HMM)?
It sets the window for both regime detection and probability calculations. Lower values make the system more reactive, but potentially noisier. Higher values smooth estimates and make the system more robust.
How is this Markov Chain different from a Hidden Markov Model (HMM)?
Markov Chain (as here): All market regimes (Bull, Bear, Neutral) are directly observable on the chart. The transition matrix is built from actual detected regimes, keeping the model simple and interpretable.
Hidden Markov Model: The actual regimes are unobservable ("hidden") and must be inferred from market output or indicator "emissions" using statistical learning algorithms. HMMs are more complex, can capture more subtle structure, but are harder to visualize and require additional machine learning steps for training.
A standard Markov Chain models transitions between observable states using a simple transition matrix, while a Hidden Markov Model assumes the true states are hidden (latent) and must be inferred from observable “emissions” like price or volume data. In practical terms, a Markov Chain is transparent and easier to implement and interpret; an HMM is more expressive but requires statistical inference to estimate hidden states from data.
Markov Chain: states are observable; you directly count or estimate transition probabilities between visible states. This makes it simpler, faster, and easier to validate and tune.
HMM: states are hidden; you only observe emissions generated by those latent states. Learning involves machine learning/statistical algorithms (commonly Baum–Welch/EM for training and Viterbi for decoding) to infer both the transition dynamics and the most likely hidden state sequence from data.
How does the indicator avoid “repainting” or look-ahead bias?
All regime changes and matrix updates happen only on confirmed (closed) bars, so no future data is leaked, ensuring reliable real-time operation.
Are there practical tuning tips?
Tune the Lookback Period for your asset/timeframe: shorter for fast markets, longer for stability.
Use custom indicators if your asset has unique regime drivers.
Watch for rapid changes in transition probabilities as early warning of a possible regime shift.
Who is this indicator for?
Quants and quantitative researchers exploring probabilistic market modeling, especially those interested in regime-switching dynamics and Markov models.
Programmers and system developers who need a probabilistic regime filter for systematic and algorithmic backtesting:
The Markov Chain indicator is ideally suited for programmatic integration via its bias output (1 = Bull, 0 = Neutral, -1 = Bear).
Although the visualization is engaging, the core output is designed for automated, rules-based workflows—not for discretionary/manual trading decisions.
Developers can connect the indicator’s output directly to their Pine Script logic (using input.source()), allowing rapid and robust backtesting of regime-based strategies.
It acts as a plug-and-play regime filter: simply plug the bias output into your entry/exit logic, and you have a scientifically robust, probabilistically-derived signal for filtering, timing, position sizing, or risk regimes.
The MC's output is intentionally "trinary" (1/0/-1), focusing on clear regime states for unambiguous decision-making in code. If you require nuanced, multi-probability or soft-label state vectors, consider expanding the indicator or stacking it with a probability-weighted logic layer in your scripting.
Because it avoids subjectivity, this approach is optimal for systematic quants, algo developers building backtested, repeatable strategies based on probabilistic regime analysis.
What's the mathematical foundation behind this?
The mathematical foundation behind this Markov Chain indicator—and probabilistic regime detection in finance—draws from two principal models: the (standard) Markov Chain and the Hidden Markov Model (HMM).
How to use this indicator programmatically?
The Markov Chain indicator automatically exports a bias value (+1 for Bullish, -1 for Bearish, 0 for Neutral) as a plot visible in the Data Window. This allows you to integrate its regime signal into your own scripts and strategies for backtesting, automation, or live trading.
Step-by-Step Integration with Pine Script (input.source)
Add the Markov Chain indicator to your chart.
This must be done first, since your custom script will "pull" the bias signal from the indicator's plot.
In your strategy, create an input using input.source()
Example:
//@version=5
strategy("MC Bias Strategy Example")
mcBias = input.source(close, "MC Bias Source")
After saving, go to your script’s settings. For the “MC Bias Source” input, select the plot/output of the Markov Chain indicator (typically its bias plot).
Use the bias in your trading logic
Example (long only on Bull, flat otherwise):
if mcBias == 1
strategy.entry("Long", strategy.long)
else
strategy.close("Long")
For more advanced workflows, combine mcBias with additional filters or trailing stops.
How does this work behind-the-scenes?
TradingView’s input.source() lets you use any plot from another indicator as a real-time, “live” data feed in your own script (source).
The selected bias signal is available to your Pine code as a variable, enabling logical decisions based on regime (trend-following, mean-reversion, etc.).
This enables powerful strategy modularity : decouple regime detection from entry/exit logic, allowing fast experimentation without rewriting core signal code.
Integrating 45+ Indicators with Your Markov Chain — How & Why
The Enhanced Custom Indicators Export script exports a massive suite of over 45 technical indicators—ranging from classic momentum (RSI, MACD, Stochastic, etc.) to trend, volume, volatility, and oscillator tools—all pre-calculated, centered/scaled, and available as plots.
// Enhanced Custom Indicators Export - 45 Technical Indicators
// Comprehensive technical analysis suite for advanced market regime detection
//@version=6
indicator('Enhanced Custom Indicators Export | Fractalyst', shorttitle='Enhanced CI Export', overlay=false, scale=scale.right, max_labels_count=500, max_lines_count=500)
// |----- Input Parameters -----| //
momentum_group = "Momentum Indicators"
trend_group = "Trend Indicators"
volume_group = "Volume Indicators"
volatility_group = "Volatility Indicators"
oscillator_group = "Oscillator Indicators"
display_group = "Display Settings"
// Common lengths
length_14 = input.int(14, "Standard Length (14)", minval=1, maxval=100, group=momentum_group)
length_20 = input.int(20, "Medium Length (20)", minval=1, maxval=200, group=trend_group)
length_50 = input.int(50, "Long Length (50)", minval=1, maxval=200, group=trend_group)
// Display options
show_table = input.bool(true, "Show Values Table", group=display_group)
table_size = input.string("Small", "Table Size", options= , group=display_group)
// |----- MOMENTUM INDICATORS (15 indicators) -----| //
// 1. RSI (Relative Strength Index)
rsi_14 = ta.rsi(close, length_14)
rsi_centered = rsi_14 - 50
// 2. Stochastic Oscillator
stoch_k = ta.stoch(close, high, low, length_14)
stoch_d = ta.sma(stoch_k, 3)
stoch_centered = stoch_k - 50
// 3. Williams %R
williams_r = ta.stoch(close, high, low, length_14) - 100
// 4. MACD (Moving Average Convergence Divergence)
= ta.macd(close, 12, 26, 9)
// 5. Momentum (Rate of Change)
momentum = ta.mom(close, length_14)
momentum_pct = (momentum / close ) * 100
// 6. Rate of Change (ROC)
roc = ta.roc(close, length_14)
// 7. Commodity Channel Index (CCI)
cci = ta.cci(close, length_20)
// 8. Money Flow Index (MFI)
mfi = ta.mfi(close, length_14)
mfi_centered = mfi - 50
// 9. Awesome Oscillator (AO)
ao = ta.sma(hl2, 5) - ta.sma(hl2, 34)
// 10. Accelerator Oscillator (AC)
ac = ao - ta.sma(ao, 5)
// 11. Chande Momentum Oscillator (CMO)
cmo = ta.cmo(close, length_14)
// 12. Detrended Price Oscillator (DPO)
dpo = close - ta.sma(close, length_20)
// 13. Price Oscillator (PPO)
ppo = ta.sma(close, 12) - ta.sma(close, 26)
ppo_pct = (ppo / ta.sma(close, 26)) * 100
// 14. TRIX
trix_ema1 = ta.ema(close, length_14)
trix_ema2 = ta.ema(trix_ema1, length_14)
trix_ema3 = ta.ema(trix_ema2, length_14)
trix = ta.roc(trix_ema3, 1) * 10000
// 15. Klinger Oscillator
klinger = ta.ema(volume * (high + low + close) / 3, 34) - ta.ema(volume * (high + low + close) / 3, 55)
// 16. Fisher Transform
fisher_hl2 = 0.5 * (hl2 - ta.lowest(hl2, 10)) / (ta.highest(hl2, 10) - ta.lowest(hl2, 10)) - 0.25
fisher = 0.5 * math.log((1 + fisher_hl2) / (1 - fisher_hl2))
// 17. Stochastic RSI
stoch_rsi = ta.stoch(rsi_14, rsi_14, rsi_14, length_14)
stoch_rsi_centered = stoch_rsi - 50
// 18. Relative Vigor Index (RVI)
rvi_num = ta.swma(close - open)
rvi_den = ta.swma(high - low)
rvi = rvi_den != 0 ? rvi_num / rvi_den : 0
// 19. Balance of Power (BOP)
bop = (close - open) / (high - low)
// |----- TREND INDICATORS (10 indicators) -----| //
// 20. Simple Moving Average Momentum
sma_20 = ta.sma(close, length_20)
sma_momentum = ((close - sma_20) / sma_20) * 100
// 21. Exponential Moving Average Momentum
ema_20 = ta.ema(close, length_20)
ema_momentum = ((close - ema_20) / ema_20) * 100
// 22. Parabolic SAR
sar = ta.sar(0.02, 0.02, 0.2)
sar_trend = close > sar ? 1 : -1
// 23. Linear Regression Slope
lr_slope = ta.linreg(close, length_20, 0) - ta.linreg(close, length_20, 1)
// 24. Moving Average Convergence (MAC)
mac = ta.sma(close, 10) - ta.sma(close, 30)
// 25. Trend Intensity Index (TII)
tii_sum = 0.0
for i = 1 to length_20
tii_sum += close > close ? 1 : 0
tii = (tii_sum / length_20) * 100
// 26. Ichimoku Cloud Components
ichimoku_tenkan = (ta.highest(high, 9) + ta.lowest(low, 9)) / 2
ichimoku_kijun = (ta.highest(high, 26) + ta.lowest(low, 26)) / 2
ichimoku_signal = ichimoku_tenkan > ichimoku_kijun ? 1 : -1
// 27. MESA Adaptive Moving Average (MAMA)
mama_alpha = 2.0 / (length_20 + 1)
mama = ta.ema(close, length_20)
mama_momentum = ((close - mama) / mama) * 100
// 28. Zero Lag Exponential Moving Average (ZLEMA)
zlema_lag = math.round((length_20 - 1) / 2)
zlema_data = close + (close - close )
zlema = ta.ema(zlema_data, length_20)
zlema_momentum = ((close - zlema) / zlema) * 100
// |----- VOLUME INDICATORS (6 indicators) -----| //
// 29. On-Balance Volume (OBV)
obv = ta.obv
// 30. Volume Rate of Change (VROC)
vroc = ta.roc(volume, length_14)
// 31. Price Volume Trend (PVT)
pvt = ta.pvt
// 32. Negative Volume Index (NVI)
nvi = 0.0
nvi := volume < volume ? nvi + ((close - close ) / close ) * nvi : nvi
// 33. Positive Volume Index (PVI)
pvi = 0.0
pvi := volume > volume ? pvi + ((close - close ) / close ) * pvi : pvi
// 34. Volume Oscillator
vol_osc = ta.sma(volume, 5) - ta.sma(volume, 10)
// 35. Ease of Movement (EOM)
eom_distance = high - low
eom_box_height = volume / 1000000
eom = eom_box_height != 0 ? eom_distance / eom_box_height : 0
eom_sma = ta.sma(eom, length_14)
// 36. Force Index
force_index = volume * (close - close )
force_index_sma = ta.sma(force_index, length_14)
// |----- VOLATILITY INDICATORS (10 indicators) -----| //
// 37. Average True Range (ATR)
atr = ta.atr(length_14)
atr_pct = (atr / close) * 100
// 38. Bollinger Bands Position
bb_basis = ta.sma(close, length_20)
bb_dev = 2.0 * ta.stdev(close, length_20)
bb_upper = bb_basis + bb_dev
bb_lower = bb_basis - bb_dev
bb_position = bb_dev != 0 ? (close - bb_basis) / bb_dev : 0
bb_width = bb_dev != 0 ? (bb_upper - bb_lower) / bb_basis * 100 : 0
// 39. Keltner Channels Position
kc_basis = ta.ema(close, length_20)
kc_range = ta.ema(ta.tr, length_20)
kc_upper = kc_basis + (2.0 * kc_range)
kc_lower = kc_basis - (2.0 * kc_range)
kc_position = kc_range != 0 ? (close - kc_basis) / kc_range : 0
// 40. Donchian Channels Position
dc_upper = ta.highest(high, length_20)
dc_lower = ta.lowest(low, length_20)
dc_basis = (dc_upper + dc_lower) / 2
dc_position = (dc_upper - dc_lower) != 0 ? (close - dc_basis) / (dc_upper - dc_lower) : 0
// 41. Standard Deviation
std_dev = ta.stdev(close, length_20)
std_dev_pct = (std_dev / close) * 100
// 42. Relative Volatility Index (RVI)
rvi_up = ta.stdev(close > close ? close : 0, length_14)
rvi_down = ta.stdev(close < close ? close : 0, length_14)
rvi_total = rvi_up + rvi_down
rvi_volatility = rvi_total != 0 ? (rvi_up / rvi_total) * 100 : 50
// 43. Historical Volatility
hv_returns = math.log(close / close )
hv = ta.stdev(hv_returns, length_20) * math.sqrt(252) * 100
// 44. Garman-Klass Volatility
gk_vol = math.log(high/low) * math.log(high/low) - (2*math.log(2)-1) * math.log(close/open) * math.log(close/open)
gk_volatility = math.sqrt(ta.sma(gk_vol, length_20)) * 100
// 45. Parkinson Volatility
park_vol = math.log(high/low) * math.log(high/low)
parkinson = math.sqrt(ta.sma(park_vol, length_20) / (4 * math.log(2))) * 100
// 46. Rogers-Satchell Volatility
rs_vol = math.log(high/close) * math.log(high/open) + math.log(low/close) * math.log(low/open)
rogers_satchell = math.sqrt(ta.sma(rs_vol, length_20)) * 100
// |----- OSCILLATOR INDICATORS (5 indicators) -----| //
// 47. Elder Ray Index
elder_bull = high - ta.ema(close, 13)
elder_bear = low - ta.ema(close, 13)
elder_power = elder_bull + elder_bear
// 48. Schaff Trend Cycle (STC)
stc_macd = ta.ema(close, 23) - ta.ema(close, 50)
stc_k = ta.stoch(stc_macd, stc_macd, stc_macd, 10)
stc_d = ta.ema(stc_k, 3)
stc = ta.stoch(stc_d, stc_d, stc_d, 10)
// 49. Coppock Curve
coppock_roc1 = ta.roc(close, 14)
coppock_roc2 = ta.roc(close, 11)
coppock = ta.wma(coppock_roc1 + coppock_roc2, 10)
// 50. Know Sure Thing (KST)
kst_roc1 = ta.roc(close, 10)
kst_roc2 = ta.roc(close, 15)
kst_roc3 = ta.roc(close, 20)
kst_roc4 = ta.roc(close, 30)
kst = ta.sma(kst_roc1, 10) + 2*ta.sma(kst_roc2, 10) + 3*ta.sma(kst_roc3, 10) + 4*ta.sma(kst_roc4, 15)
// 51. Percentage Price Oscillator (PPO)
ppo_line = ((ta.ema(close, 12) - ta.ema(close, 26)) / ta.ema(close, 26)) * 100
ppo_signal = ta.ema(ppo_line, 9)
ppo_histogram = ppo_line - ppo_signal
// |----- PLOT MAIN INDICATORS -----| //
// Plot key momentum indicators
plot(rsi_centered, title="01_RSI_Centered", color=color.purple, linewidth=1)
plot(stoch_centered, title="02_Stoch_Centered", color=color.blue, linewidth=1)
plot(williams_r, title="03_Williams_R", color=color.red, linewidth=1)
plot(macd_histogram, title="04_MACD_Histogram", color=color.orange, linewidth=1)
plot(cci, title="05_CCI", color=color.green, linewidth=1)
// Plot trend indicators
plot(sma_momentum, title="06_SMA_Momentum", color=color.navy, linewidth=1)
plot(ema_momentum, title="07_EMA_Momentum", color=color.maroon, linewidth=1)
plot(sar_trend, title="08_SAR_Trend", color=color.teal, linewidth=1)
plot(lr_slope, title="09_LR_Slope", color=color.lime, linewidth=1)
plot(mac, title="10_MAC", color=color.fuchsia, linewidth=1)
// Plot volatility indicators
plot(atr_pct, title="11_ATR_Pct", color=color.yellow, linewidth=1)
plot(bb_position, title="12_BB_Position", color=color.aqua, linewidth=1)
plot(kc_position, title="13_KC_Position", color=color.olive, linewidth=1)
plot(std_dev_pct, title="14_StdDev_Pct", color=color.silver, linewidth=1)
plot(bb_width, title="15_BB_Width", color=color.gray, linewidth=1)
// Plot volume indicators
plot(vroc, title="16_VROC", color=color.blue, linewidth=1)
plot(eom_sma, title="17_EOM", color=color.red, linewidth=1)
plot(vol_osc, title="18_Vol_Osc", color=color.green, linewidth=1)
plot(force_index_sma, title="19_Force_Index", color=color.orange, linewidth=1)
plot(obv, title="20_OBV", color=color.purple, linewidth=1)
// Plot additional oscillators
plot(ao, title="21_Awesome_Osc", color=color.navy, linewidth=1)
plot(cmo, title="22_CMO", color=color.maroon, linewidth=1)
plot(dpo, title="23_DPO", color=color.teal, linewidth=1)
plot(trix, title="24_TRIX", color=color.lime, linewidth=1)
plot(fisher, title="25_Fisher", color=color.fuchsia, linewidth=1)
// Plot more momentum indicators
plot(mfi_centered, title="26_MFI_Centered", color=color.yellow, linewidth=1)
plot(ac, title="27_AC", color=color.aqua, linewidth=1)
plot(ppo_pct, title="28_PPO_Pct", color=color.olive, linewidth=1)
plot(stoch_rsi_centered, title="29_StochRSI_Centered", color=color.silver, linewidth=1)
plot(klinger, title="30_Klinger", color=color.gray, linewidth=1)
// Plot trend continuation
plot(tii, title="31_TII", color=color.blue, linewidth=1)
plot(ichimoku_signal, title="32_Ichimoku_Signal", color=color.red, linewidth=1)
plot(mama_momentum, title="33_MAMA_Momentum", color=color.green, linewidth=1)
plot(zlema_momentum, title="34_ZLEMA_Momentum", color=color.orange, linewidth=1)
plot(bop, title="35_BOP", color=color.purple, linewidth=1)
// Plot volume continuation
plot(nvi, title="36_NVI", color=color.navy, linewidth=1)
plot(pvi, title="37_PVI", color=color.maroon, linewidth=1)
plot(momentum_pct, title="38_Momentum_Pct", color=color.teal, linewidth=1)
plot(roc, title="39_ROC", color=color.lime, linewidth=1)
plot(rvi, title="40_RVI", color=color.fuchsia, linewidth=1)
// Plot volatility continuation
plot(dc_position, title="41_DC_Position", color=color.yellow, linewidth=1)
plot(rvi_volatility, title="42_RVI_Volatility", color=color.aqua, linewidth=1)
plot(hv, title="43_Historical_Vol", color=color.olive, linewidth=1)
plot(gk_volatility, title="44_GK_Volatility", color=color.silver, linewidth=1)
plot(parkinson, title="45_Parkinson_Vol", color=color.gray, linewidth=1)
// Plot final oscillators
plot(rogers_satchell, title="46_RS_Volatility", color=color.blue, linewidth=1)
plot(elder_power, title="47_Elder_Power", color=color.red, linewidth=1)
plot(stc, title="48_STC", color=color.green, linewidth=1)
plot(coppock, title="49_Coppock", color=color.orange, linewidth=1)
plot(kst, title="50_KST", color=color.purple, linewidth=1)
// Plot final indicators
plot(ppo_histogram, title="51_PPO_Histogram", color=color.navy, linewidth=1)
plot(pvt, title="52_PVT", color=color.maroon, linewidth=1)
// |----- Reference Lines -----| //
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dashed, linewidth=1)
hline(50, "Midline", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(-50, "Lower Midline", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(25, "Upper Threshold", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(-25, "Lower Threshold", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
// |----- Enhanced Information Table -----| //
if show_table and barstate.islast
table_position = position.top_right
table_text_size = table_size == "Tiny" ? size.tiny : table_size == "Small" ? size.small : size.normal
var table info_table = table.new(table_position, 3, 18, bgcolor=color.new(color.white, 85), border_width=1, border_color=color.gray)
// Headers
table.cell(info_table, 0, 0, 'Category', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
table.cell(info_table, 1, 0, 'Indicator', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
table.cell(info_table, 2, 0, 'Value', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
// Key Momentum Indicators
table.cell(info_table, 0, 1, 'MOMENTUM', text_color=color.purple, text_size=table_text_size, bgcolor=color.new(color.purple, 90))
table.cell(info_table, 1, 1, 'RSI Centered', text_color=color.purple, text_size=table_text_size)
table.cell(info_table, 2, 1, str.tostring(rsi_centered, '0.00'), text_color=color.purple, text_size=table_text_size)
table.cell(info_table, 0, 2, '', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 1, 2, 'Stoch Centered', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 2, str.tostring(stoch_centered, '0.00'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 3, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 3, 'Williams %R', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 3, str.tostring(williams_r, '0.00'), text_color=color.red, text_size=table_text_size)
table.cell(info_table, 0, 4, '', text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 1, 4, 'MACD Histogram', text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 2, 4, str.tostring(macd_histogram, '0.000'), text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 0, 5, '', text_color=color.green, text_size=table_text_size)
table.cell(info_table, 1, 5, 'CCI', text_color=color.green, text_size=table_text_size)
table.cell(info_table, 2, 5, str.tostring(cci, '0.00'), text_color=color.green, text_size=table_text_size)
// Key Trend Indicators
table.cell(info_table, 0, 6, 'TREND', text_color=color.navy, text_size=table_text_size, bgcolor=color.new(color.navy, 90))
table.cell(info_table, 1, 6, 'SMA Momentum %', text_color=color.navy, text_size=table_text_size)
table.cell(info_table, 2, 6, str.tostring(sma_momentum, '0.00'), text_color=color.navy, text_size=table_text_size)
table.cell(info_table, 0, 7, '', text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 1, 7, 'EMA Momentum %', text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 2, 7, str.tostring(ema_momentum, '0.00'), text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 0, 8, '', text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 1, 8, 'SAR Trend', text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 2, 8, str.tostring(sar_trend, '0'), text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 0, 9, '', text_color=color.lime, text_size=table_text_size)
table.cell(info_table, 1, 9, 'Linear Regression', text_color=color.lime, text_size=table_text_size)
table.cell(info_table, 2, 9, str.tostring(lr_slope, '0.000'), text_color=color.lime, text_size=table_text_size)
// Key Volatility Indicators
table.cell(info_table, 0, 10, 'VOLATILITY', text_color=color.yellow, text_size=table_text_size, bgcolor=color.new(color.yellow, 90))
table.cell(info_table, 1, 10, 'ATR %', text_color=color.yellow, text_size=table_text_size)
table.cell(info_table, 2, 10, str.tostring(atr_pct, '0.00'), text_color=color.yellow, text_size=table_text_size)
table.cell(info_table, 0, 11, '', text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 1, 11, 'BB Position', text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 2, 11, str.tostring(bb_position, '0.00'), text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 0, 12, '', text_color=color.olive, text_size=table_text_size)
table.cell(info_table, 1, 12, 'KC Position', text_color=color.olive, text_size=table_text_size)
table.cell(info_table, 2, 12, str.tostring(kc_position, '0.00'), text_color=color.olive, text_size=table_text_size)
// Key Volume Indicators
table.cell(info_table, 0, 13, 'VOLUME', text_color=color.blue, text_size=table_text_size, bgcolor=color.new(color.blue, 90))
table.cell(info_table, 1, 13, 'Volume ROC', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 13, str.tostring(vroc, '0.00'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 14, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 14, 'EOM', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 14, str.tostring(eom_sma, '0.000'), text_color=color.red, text_size=table_text_size)
// Key Oscillators
table.cell(info_table, 0, 15, 'OSCILLATORS', text_color=color.purple, text_size=table_text_size, bgcolor=color.new(color.purple, 90))
table.cell(info_table, 1, 15, 'Awesome Osc', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 15, str.tostring(ao, '0.000'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 16, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 16, 'Fisher Transform', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 16, str.tostring(fisher, '0.000'), text_color=color.red, text_size=table_text_size)
// Summary Statistics
table.cell(info_table, 0, 17, 'SUMMARY', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 17, 'Total Indicators: 52', text_color=color.black, text_size=table_text_size)
regime_color = rsi_centered > 10 ? color.green : rsi_centered < -10 ? color.red : color.gray
regime_text = rsi_centered > 10 ? "BULLISH" : rsi_centered < -10 ? "BEARISH" : "NEUTRAL"
table.cell(info_table, 2, 17, regime_text, text_color=regime_color, text_size=table_text_size)
This makes it the perfect “indicator backbone” for quantitative and systematic traders who want to prototype, combine, and test new regime detection models—especially in combination with the Markov Chain indicator.
How to use this script with the Markov Chain for research and backtesting:
Add the Enhanced Indicator Export to your chart.
Every calculated indicator is available as an individual data stream.
Connect the indicator(s) you want as custom input(s) to the Markov Chain’s “Custom Indicators” option.
In the Markov Chain indicator’s settings, turn ON the custom indicator mode.
For each of the three custom indicator inputs, select the exported plot from the Enhanced Export script—the menu lists all 45+ signals by name.
This creates a powerful, modular regime-detection engine where you can mix-and-match momentum, trend, volume, or custom combinations for advanced filtering.
Backtest regime logic directly.
Once you’ve connected your chosen indicators, the Markov Chain script performs regime detection (Bull/Neutral/Bear) based on your selected features—not just price returns.
The regime detection is robust, automatically normalized (using Z-score), and outputs bias (1, -1, 0) for plug-and-play integration.
Export the regime bias for programmatic use.
As described above, use input.source() in your Pine Script strategy or system and link the bias output.
You can now filter signals, control trade direction/size, or design pairs-trading that respect true, indicator-driven market regimes.
With this framework, you’re not limited to static or simplistic regime filters. You can rigorously define, test, and refine what “market regime” means for your strategies—using the technical features that matter most to you.
Optimize your signal generation by backtesting across a universe of meaningful indicator blends.
Enhance risk management with objective, real-time regime boundaries.
Accelerate your research: iterate quickly, swap indicator components, and see results with minimal code changes.
Automate multi-asset or pairs-trading by integrating regime context directly into strategy logic.
Add both scripts to your chart, connect your preferred features, and start investigating your best regime-based trades—entirely within the TradingView ecosystem.
References & Further Reading
Ang, A., & Bekaert, G. (2002). “Regime Switches in Interest Rates.” Journal of Business & Economic Statistics, 20(2), 163–182.
Hamilton, J. D. (1989). “A New Approach to the Economic Analysis of Nonstationary Time Series and the Business Cycle.” Econometrica, 57(2), 357–384.
Markov, A. A. (1906). "Extension of the Limit Theorems of Probability Theory to a Sum of Variables Connected in a Chain." The Notes of the Imperial Academy of Sciences of St. Petersburg.
Guidolin, M., & Timmermann, A. (2007). “Asset Allocation under Multivariate Regime Switching.” Journal of Economic Dynamics and Control, 31(11), 3503–3544.
Murphy, J. J. (1999). Technical Analysis of the Financial Markets. New York Institute of Finance.
Brock, W., Lakonishok, J., & LeBaron, B. (1992). “Simple Technical Trading Rules and the Stochastic Properties of Stock Returns.” Journal of Finance, 47(5), 1731–1764.
Zucchini, W., MacDonald, I. L., & Langrock, R. (2017). Hidden Markov Models for Time Series: An Introduction Using R (2nd ed.). Chapman and Hall/CRC.
On Quantitative Finance and Markov Models:
Lo, A. W., & Hasanhodzic, J. (2009). The Heretics of Finance: Conversations with Leading Practitioners of Technical Analysis. Bloomberg Press.
Patterson, S. (2016). The Man Who Solved the Market: How Jim Simons Launched the Quant Revolution. Penguin Press.
TradingView Pine Script Documentation: www.tradingview.com
TradingView Blog: “Use an Input From Another Indicator With Your Strategy” www.tradingview.com
GeeksforGeeks: “What is the Difference Between Markov Chains and Hidden Markov Models?” www.geeksforgeeks.org
What makes this indicator original and unique?
- On‑chart, real‑time Markov. The chain is drawn directly on your chart. You see the current regime, its tendency to stay (self‑loop), and the usual next step (arrows) as bars confirm.
- Source‑agnostic by design. The engine runs on any series you select via input.source() — price, your own oscillator, a composite score, anything you compute in the script.
- Automatic normalization + regime mapping. Different inputs live on different scales. The script standardizes your chosen source and maps it into clear regimes (e.g., Bull / Bear / Neutral) without you micromanaging thresholds each time.
- Rolling, bar‑by‑bar learning. Transition tendencies are computed from a rolling window of confirmed bars. What you see is exactly what the market did in that window.
- Fast experimentation. Switch the source, adjust the window, and the Markov view updates instantly. It’s a rapid way to test ideas and feel regime persistence/switch behavior.
Integrate your own signals (using input.source())
- In settings, choose the Source . This is powered by input.source() .
- Feed it price, an indicator you compute inside the script, or a custom composite series.
- The script will automatically normalize that series and process it through the Markov engine, mapping it to regimes and updating the on‑chart spheres/arrows in real time.
Credits:
Deep gratitude to @RicardoSantos for both the foundational Markov chain processing engine and inspiring open-source contributions, which made advanced probabilistic market modeling accessible to the TradingView community.
Special thanks to @Alien_Algorithms for the innovative and visually stunning 3D sphere logic that powers the indicator’s animated, regime-based visualization.
Disclaimer
This tool summarizes recent behavior. It is not financial advice and not a guarantee of future results.
Bitcoin Power Law [LuxAlgo]The Bitcoin Power Law tool is a representation of Bitcoin prices first proposed by Giovanni Santostasi, Ph.D. It plots BTCUSD daily closes on a log10-log10 scale, and fits a linear regression channel to the data.
This channel helps traders visualise when the price is historically in a zone prone to tops or located within a discounted zone subject to future growth.
🔶 USAGE
Giovanni Santostasi, Ph.D. originated the Bitcoin Power-Law Theory; this implementation places it directly on a TradingView chart. The white line shows the daily closing price, while the cyan line is the best-fit regression.
A channel is constructed from the linear fit root mean squared error (RMSE), we can observe how price has repeatedly oscillated between each channel areas through every bull-bear cycle.
Excursions into the upper channel area can be followed by price surges and finishing on a top, whereas price touching the lower channel area coincides with a cycle low.
Users can change the channel areas multipliers, helping capture moves more precisely depending on the intended usage.
This tool only works on the daily BTCUSD chart. Ticker and timeframe must match exactly for the calculations to remain valid.
🔹 Linear Scale
Users can toggle on a linear scale for the time axis, in order to obtain a higher resolution of the price, (this will affect the linear regression channel fit, making it look poorer).
🔶 DETAILS
One of the advantages of the Power Law Theory proposed by Giovanni Santostasi is its ability to explain multiple behaviors of Bitcoin. We describe some key points below.
🔹 Power-Law Overview
A power law has the form y = A·xⁿ , and Bitcoin’s key variables follow this pattern across many orders of magnitude. Empirically, price rises roughly with t⁶, hash-rate with t¹² and the number of active addresses with t³.
When we plot these on log-log axes they appear as straight lines, revealing a scale-invariant system whose behaviour repeats proportionally as it grows.
🔹 Feedback-Loop Dynamics
Growth begins with new users, whose presence pushes the price higher via a Metcalfe-style square-law. A richer price pool funds more mining hardware; the Difficulty Adjustment immediately raises the hash-rate requirement, keeping profit margins razor-thin.
A higher hash rate secures the network, which in turn attracts the next wave of users. Because risk and Difficulty act as braking forces, user adoption advances as a power of three in time rather than an unchecked S-curve. This circular causality repeats without end, producing the familiar boom-and-bust cadence around the long-term power-law channel.
🔹 Scale Invariance & Predictions
Scale invariance means that enlarging the timeline in log-log space leaves the trajectory unchanged.
The same geometric proportions that described the first dollar of value can therefore extend to a projected million-dollar bitcoin, provided no catastrophic break occurs. Institutional ETF inflows supply fresh capital but do not bend the underlying slope; only a persistent deviation from the line would falsify the current model.
🔹 Implications
The theory assigns scarcity no direct role; iterative feedback and the Difficulty Adjustment are sufficient to govern Bitcoin’s expansion. Long-term valuation should focus on position within the power-law channel, while bubbles—sharp departures above trend that later revert—are expected punctuations of an otherwise steady climb.
Beyond about 2040, disruptive technological shifts could alter the parameters, but for the next order of magnitude the present slope remains the simplest, most robust guide.
Bitcoin behaves less like a traditional asset and more like a self-organising digital organism whose value, security, and adoption co-evolve according to immutable power-law rules.
🔶 SETTINGS
🔹 General
Start Calculation: Determine the start date used by the calculation, with any prior prices being ignored. (default - 15 Jul 2010)
Use Linear Scale for X-Axis: Convert the horizontal axis from log(time) to linear calendar time
🔹 Linear Regression
Show Regression Line: Enable/disable the central power-law trend line
Regression Line Color: Choose the colour of the regression line
Mult 1: Toggle line & fill, set multiplier (default +1), pick line colour and area fill colour
Mult 2: Toggle line & fill, set multiplier (default +0.5), pick line colour and area fill colour
Mult 3: Toggle line & fill, set multiplier (default -0.5), pick line colour and area fill colour
Mult 4: Toggle line & fill, set multiplier (default -1), pick line colour and area fill colour
🔹 Style
Price Line Color: Select the colour of the BTC price plot
Auto Color: Automatically choose the best contrast colour for the price line
Price Line Width: Set the thickness of the price line (1 – 5 px)
Show Halvings: Enable/disable dotted vertical lines at each Bitcoin halving
Halvings Color: Choose the colour of the halving lines
bands ⚡ What This Script Does
This is a structured trading system specifically designed for navigating Bitcoin cycles and identifying higher-probability buy setups.
It is not a simple combination of public indicators instead, it applies a rules-based logic to adapt signals dynamically depending on the current market phase (bull/bear), while also using a triple confirmation framework (macro trend + volatility bands + buy signals).
This approach aims to reduce false signals and align trading decisions with Bitcoin’s well-known cyclical behavior.
⚡ Core Concept & Components
The system combines three complementary elements:
A macro trend filter band (red/green), shown at the bottom of the chart, representing Bitcoin’s macro trend environment.
Adaptive volatility bands using advanced smoothing techniques including HMA, KAMA, WVMA, combined with moving average (MA) and average true range (ATR) logic to capture dynamic “cheap” and “expensive” price zones. These bands adapt to Bitcoin’s volatility structure better than standard Bollinger Bands or SMA plus ATR setups.
Multi-timeframe RSI-based Buy Signals on 8h, 1D, 1W, and 1M timeframes historically calibrated for Bitcoin cycles.
These components work together through a rules-based process, dynamically adapting signal validity depending on the macro trend state.
⚡ Signal System and how to use
The red and green band at the bottom of the chart represents Bitcoin’s macro trend environment:
Light Green → Likely start of a bull market
Dark Green → Market is bullish but becoming extended; potentially nearing a local top
Red → Bear market conditions
Our trading approach uses four distinct BUY signals, depending on the market phase:
Red (8h) → weak buy signal
Yellow (1D) → medium buy signal
Green (1W) → strong buy signal
Blue (1M) → strongest buy signal
However, Day Trading and Swing Trading signals are automatically blocked during bear markets (Red Band).
Reason: low timeframe signals (1 minute to 1 day) tend to perform poorly in bear markets, as major bottoms typically form on higher timeframes (1 week or 1 month).
Therefore, during Red Band conditions, only Buy Bear Market and Buy Recession signals remain active.
to use it correctly you must go to configuration of the indicator, section input and enable 4 buy signals and check every day timefarme 8h 1d 1w and 1m.
⚡ Invalidation Conditions
To exit the bear market, the system includes an invalidation condition:
If the price closes above a specific SMA on a defined timeframe, the Red Band switches to Green → signaling a potential market recovery.
Additionally, for the Red Band to activate initially, the system requires that:
Price must break below a specific Hull Moving Average (HMA) on a defined timeframe and length.
⚡ Why These 3 Indicators Work Well Together
If the band is green (bull market conditions) and a Buy signal (any color) appears → it is generally safer to buy in a bull market than in a bear market.
(I’m trying to apply the famous phrase "the trend is your friend" in this trading indicator and trading strategy.)
If the price is also touching the lower green band, and a Buy signal appears → the buy becomes even more reliable, as you are combining big trend plus band support plus signal confirmation.
This gives you triple confirmation:
Band color plus band level touch plus Buy signal → increasing the probability that the trade is going to work.
By combining:
Blocking low timeframe signals during bear markets
Using a clear invalidation point to detect recovery
Requiring a structural break via HMA to enter a bear market phase, and requiring a break above a specific SMA (length and timeframe) to enter a bull market
Applying a triple confirmation logic when conditions are favorable
→ this framework helps you navigate Bitcoin markets more securely and profitably than using unfiltered signals alone.
⚡ Why It’s Not a Simple Mashup
The logic of the system is not just an overlay of RSI, moving averages and bands:
It applies a structured "state machine" logic:
Macro Band determines which signals are allowed.
Band-level touches condition the strength of signals.
Triple confirmation (macro trend plus band level plus signal) governs high-probability setups.
Invalidation points (SMA breakouts) dynamically switch macro state, ensuring no lagging bull signals in a bear market or vice versa.
This makes the system superior to using public domain components in isolation, as those do not provide dynamic signal filtering nor respect Bitcoin’s macro cyclicality explicitly.
⚡ Why This is Invite-Only
This script reflects deep backtesting and original integration of state logic specific to Bitcoin cycles, I also tried to choose the the correct conditions and invalidation points by using hma and smas in specific timeframes and lengths,
it has a system that also block many wrong buy signals during bearmarkets.
It encapsulates a rules-based trading process which goes beyond simply combining public indicators. The aim is to provide traders with a coherent framework that reduces false signals, adapts to bitcoin cycles, and promotes risk-aware participation in Bitcoin markets.
I also refined the line aesthetics and thicknesses to improve chart readability and help users quickly identify key levels.
⚡ Disclaimer
This is an analytical tool, not financial advice. Use with appropriate risk management and as part of a broader trading strategy.
Past positive results this indicator achieved do NOT guarantee future success !!
Per TradingView rules:
The logic is described sufficiently so that traders understand what it does and how it works.
This is not a simple mashup, but an original framework applying structured logic to Bitcoin macro trading.
This is a COMPLEMENTARY tool designed for use by my existing clients who are already familiar with my trading strategy and risk management approach. If you are not one of my clients or do not know my trading strategy, please do NOT request access or attempt to purchase it !!
⚡ Conformance
This description is written to comply with TradingView’s script publishing rules (tradingview.com/pine-script-docs/en/v5/writing/Publishing.html), as per recent moderator feedback.
If further clarification is required, I welcome additional feedback.
Global M2 YoY % Increase signalThe script produces a signal each time the global M2 increases more than 2.5%. This usually coincides with bitcoin prices pumps, except when it is late in the business cycle or the bitcoin price / halving cycle.
It leverages dylanleclair Global M2 YoY % change, with several modifications:
adding a 10 week lead at the YoY Change plot for better visibility, so that the bitcoin pump moreless coincides with the YoY change.
signal increases > 2.5 in Global M2 at the point at which they occur with a green triangle up.
Moon+Lunar Cycle Vertical Delineation & Projection
Automatically highlights the exact candle in which Moonphase shifts occur.
Optionally including shifts within the Microphases of the total Lunar Cycle.
This allow traders to pre-emptively identify time-based points of volatility,
focusing on mean-reversion; further simplified via the use of projections.
Projections are calculated via candle count, values displayed in "Debug";
these are useful in understanding the function & underlying mechanics.
AHR999X IndexAHR999X Index - A Tool to Watch BITSTAMP:BTCUSD Bitcoin Tops
The AHR999X Index is designed as an extension of the well-known AHR999 Index, specifically to help identify Bitcoin's market tops. This index combines two critical components:
200-Day Fixed Investment Cost:
The average cost if you invested a fixed amount into Bitcoin every day over the last 200 days (using a geometric mean).
Growth Estimate:
A price estimate derived from a logarithmic regression model based on Bitcoin's age.
The formula for AHR999X is:
AHR999X = (Bitcoin Price ÷ 200-Day Fixed Investment Cost) × (Bitcoin Price ÷ Growth Estimate) × 3
How to Interpret AHR999X
Above 8: Accumulation Zone – Bitcoin is historically undervalued.
Between 0.45 and 8: Neutral Zone – Bitcoin is within a reasonable price range.
Below 0.45: Exit Zone – Historically signals market tops and high-risk areas.
A Cycle Observation
One important point to note:
The bottom value of AHR999X increases with every Bitcoin market cycle.
This reflects Bitcoin's long-term price appreciation and diminishing volatility over time.
Altcoins vs BTC Market Cap HeatmapAltcoins vs BTC Market Cap Heatmap
"Ground control to major Tom" 🌙 👨🚀 🚀
This indicator provides a visual heatmap for tracking the relationship between the market cap of altcoins (TOTAL3) and Bitcoin (BTC). The primary goal is to identify potential market cycle tops and bottoms by analyzing how the TOTAL3 market cap (all cryptocurrencies excluding Bitcoin and Ethereum) compares to Bitcoin’s market cap.
Key Features:
• Market Cap Ratio: Plots the ratio of TOTAL3 to BTC market caps to give a clear visual representation of altcoin strength versus Bitcoin.
• Heatmap: Colors the background red when altcoins are overheating (TOTAL3 market cap equals or exceeds BTC) and blue when altcoins are cooling (TOTAL3 market cap is half or less than BTC).
• Threshold Levels: Includes horizontal lines at 1 (Overheated), 0.75 (Median), and 0.5 (Cooling) for easy reference.
• Alerts: Set alert conditions for when the ratio crosses key levels (1.0, 0.75, and 0.5), enabling timely notifications for potential market shifts.
How It Works:
• Overheated (Ratio ≥ 1): Indicates that the altcoin market cap is on par or larger than Bitcoin's, which could signal a top in the cycle.
• Cooling (Ratio < 0.5): Suggests that the altcoin market cap is half or less than Bitcoin's, potentially signaling a market bottom or cooling phase.
• Median (Ratio ≈ 0.75): A midpoint that provides insight into the market's neutral zone.
Use this tool to monitor market extremes and adjust your strategy accordingly when the altcoin market enters overheated or cooling phases.
SeasonsThis code represents a seasonal indicator that has a number of unique functions to help traders better understand the market and make informed decisions. Let's take a closer look at each of them:
1. **Chart background shading for each season:** This function allows you to visually see seasonal changes in the market. You'll be able to easily track how the market changes in different seasons, thanks to the color labeling: blue for winter, green for summer, orange for autumn, and yellow for spring.
2. **Vertical markings for each month:** Additional markers on the chart help you orient yourself in time and better understand price dynamics throughout the year. This is especially useful when analyzing seasonal changes and identifying market cyclicality.
3. **Halving timers:** Connecting halving timers on the chart allows you to track important events, such as the reduction of bitcoin mining rewards. Knowing the timing of halving can be a key moment for decision-making and can affect asset prices.
These functions help traders better analyze the market, identify trends and cyclicality, and optimize their trading strategy. Use this indicator in your trading practice to unleash its full potential and reach new heights in your trading career. Don't miss the opportunity to improve your results - apply the seasonal indicator today!
The seasonal indicator is a powerful tool for traders, helping them analyze the market and make informed decisions based on seasonal and cyclical changes. Here are a few reasons why using this indicator can be advantageous:
1. **Identifying seasonal trends:** The seasonal indicator helps identify seasonal trends in the market, such as changes in activity during different seasons or months. For example, some markets may be more volatile or predictable at certain times of the year, and knowing these trends can help in making decisions about entering or exiting positions.
2. **Optimizing trading strategy:** Understanding seasonal changes in the market allows traders to optimize their trading strategy based on the time of year. For example, they may adjust their risk management approaches or choose specific types of trades according to the current season.
3. **Predicting market cyclicality:** The seasonal indicator can also help in predicting market cyclicality and identifying recurring price movement patterns. This enables traders to build their strategies based on past market behavior within specific time intervals.
How to use the seasonal indicator:
1. **Study seasonal changes:** Use the indicator to analyze how the market changes throughout the year. Pay attention to changes in volatility, trading volumes, and price directions depending on the season.
2. **Optimize trading strategy:** Use the data obtained to optimize your trading strategy. Consider entering or exiting positions within specific time intervals to account for seasonal factors.
3. **Predict cyclicality:** Analyze past market behavior using the seasonal indicator to identify cyclicality and recurring patterns. This will help you make more informed decisions based on expected price movements in the future.
Ultimately, using the seasonal indicator allows traders to better understand the market, adapt their strategies, and make more informed decisions based on seasonal and cyclical changes.
All elements on the chart of a particular color will be attributed to the corresponding season. For example, trend lines or levels marked in blue will be associated with winter.
______________________________________________________
Winter
Explanation of price movement during the winter season:
1. Number 1 and the blue line denote the maximum price of Bitcoin. Note that they always form at the peaks, which is consistent.
2. Number 2 and the blue line represent the minimum price specifically during the winter period. This is indeed the minimum price and the bottom point in the cycle.
3. Number 3 and the blue line indicate a local maximum after the breakthrough, after which the price starts to rise towards line number 1, which acts as global resistance.
4. Number 4 denotes the last winter cycle before the breakthrough of the global maximum. It should be noted that in 2017, the resistance was not broken immediately - first in spring, and then at the beginning of 2018, the maximum was set, and the asset growth occurred in winter.
Additionally, it's worth noting that numbers 1 form the maximum, numbers 2 form the minimum, and since the trend is descending, I have marked its line in blue.
______________________________________________________
Summer
Now let's consider the price behavior chart for the summer. To make the situation clearer, I've left a descending trend in blue on the graph. I reiterate that the elements shown in green on the graph pertain specifically to the summer period.
1. Number 1 on the graph denotes the first summer period! The price during this period remains within a narrow range 90% of the time; however, it's worth noting that impulsive movements can occur at the beginning, middle, or end. Thus, 90% of the time the price is in a low volatility zone, while the remaining percentage is in a high volatility zone.
2. Number 2 on the graph represents the second summer period, where a pattern is observed: the price tends to rise at the beginning of the summer period and fall towards the end. Therefore, I've marked this time with an arc, and there's a pattern to it. It's worth noting that during the period of the descending trend from 2014 to 2016, the situation after the downward trend differs from the situation in 2018 and 2023, when changes in the arrangement of this situation occur after the breakout of the descending trend based on wave analysis and the price of the asset itself.
3. Number 3 represents the third summer period! During this period, the price movement direction is upward and then downward, forming a correction in the upward trend. It should be noted that in this movement, all lows gradually rise, while highs renew all previous local highs of the asset price. This period exhibits increased volatility and impulsive movements, with the asset price mostly staying within a range of minimal volatility, with volatility not exceeding 1-2% on some stretches.
4. Under number 4, the fourth summer period is indicated, which has an overall upward direction. In this period, the movement is aggressively upward. Starting from the first month until the middle of summer, the price moves downward, forming a correction in the upward trend. Then, during the next month, the price moves aggressively upward, renewing price highs. Volatility in this period is anomalously high, resembling a hot July summer.
Additionally, based on the price movement in the summer period, we can assume that fractals are evident here, which we can use to our advantage for profit.
______________________________________________________
Shark Trading - We urge all traders to delve deeper into this indicator and incorporate it into their trading practices. It can become an invaluable aid in market analysis and help traders reach new heights in their trading endeavors.
APA-Adaptive, Ehlers Early Onset Trend [Loxx]APA-Adaptive, Ehlers Early Onset Trend is Ehlers Early Onset Trend but with Autocorrelation Periodogram Algorithm dominant cycle period input.
What is Ehlers Early Onset Trend?
The Onset Trend Detector study is a trend analyzing technical indicator developed by John F. Ehlers , based on a non-linear quotient transform. Two of Mr. Ehlers' previous studies, the Super Smoother Filter and the Roofing Filter, were used and expanded to create this new complex technical indicator. Being a trend-following analysis technique, its main purpose is to address the problem of lag that is common among moving average type indicators.
The Onset Trend Detector first applies the EhlersRoofingFilter to the input data in order to eliminate cyclic components with periods longer than, for example, 100 bars (default value, customizable via input parameters) as those are considered spectral dilation. Filtered data is then subjected to re-filtering by the Super Smoother Filter so that the noise (cyclic components with low length) is reduced to minimum. The period of 10 bars is a default maximum value for a wave cycle to be considered noise; it can be customized via input parameters as well. Once the data is cleared of both noise and spectral dilation, the filter processes it with the automatic gain control algorithm which is widely used in digital signal processing. This algorithm registers the most recent peak value and normalizes it; the normalized value slowly decays until the next peak swing. The ratio of previously filtered value to the corresponding peak value is then quotiently transformed to provide the resulting oscillator. The quotient transform is controlled by the K coefficient: its allowed values are in the range from -1 to +1. K values close to 1 leave the ratio almost untouched, those close to -1 will translate it to around the additive inverse, and those close to zero will collapse small values of the ratio while keeping the higher values high.
Indicator values around 1 signify uptrend and those around -1, downtrend.
What is an adaptive cycle, and what is Ehlers Autocorrelation Periodogram Algorithm?
From his Ehlers' book Cycle Analytics for Traders Advanced Technical Trading Concepts by John F. Ehlers , 2013, page 135:
"Adaptive filters can have several different meanings. For example, Perry Kaufman’s adaptive moving average ( KAMA ) and Tushar Chande’s variable index dynamic average ( VIDYA ) adapt to changes in volatility . By definition, these filters are reactive to price changes, and therefore they close the barn door after the horse is gone.The adaptive filters discussed in this chapter are the familiar Stochastic , relative strength index ( RSI ), commodity channel index ( CCI ), and band-pass filter.The key parameter in each case is the look-back period used to calculate the indicator. This look-back period is commonly a fixed value. However, since the measured cycle period is changing, it makes sense to adapt these indicators to the measured cycle period. When tradable market cycles are observed, they tend to persist for a short while.Therefore, by tuning the indicators to the measure cycle period they are optimized for current conditions and can even have predictive characteristics.
The dominant cycle period is measured using the Autocorrelation Periodogram Algorithm. That dominant cycle dynamically sets the look-back period for the indicators. I employ my own streamlined computation for the indicators that provide smoother and easier to interpret outputs than traditional methods. Further, the indicator codes have been modified to remove the effects of spectral dilation.This basically creates a whole new set of indicators for your trading arsenal."
Adaptive, Double Jurik Filter Moving Average (AJFMA) [Loxx]Adaptive, Double Jurik Filter Moving Average (AJFMA) is moving average like Jurik Moving Average but with the addition of double smoothing and adaptive length (Autocorrelation Periodogram Algorithm) and power/volatility {Juirk Volty) inputs to further reduce noise and identify trends.
What is Jurik Volty?
One of the lesser known qualities of Juirk smoothing is that the Jurik smoothing process is adaptive. "Jurik Volty" (a sort of market volatility ) is what makes Jurik smoothing adaptive. The Jurik Volty calculation can be used as both a standalone indicator and to smooth other indicators that you wish to make adaptive.
What is the Jurik Moving Average?
Have you noticed how moving averages add some lag (delay) to your signals? ... especially when price gaps up or down in a big move, and you are waiting for your moving average to catch up? Wait no more! JMA eliminates this problem forever and gives you the best of both worlds: low lag and smooth lines.
Ideally, you would like a filtered signal to be both smooth and lag-free. Lag causes delays in your trades, and increasing lag in your indicators typically result in lower profits. In other words, late comers get what's left on the table after the feast has already begun.
That's why investors, banks and institutions worldwide ask for the Jurik Research Moving Average ( JMA ). You may apply it just as you would any other popular moving average. However, JMA's improved timing and smoothness will astound you.
What is adaptive Jurik volatility?
One of the lesser known qualities of Juirk smoothing is that the Jurik smoothing process is adaptive. "Jurik Volty" (a sort of market volatility ) is what makes Jurik smoothing adaptive. The Jurik Volty calculation can be used as both a standalone indicator and to smooth other indicators that you wish to make adaptive.
What is an adaptive cycle, and what is Ehlers Autocorrelation Periodogram Algorithm?
From his Ehlers' book Cycle Analytics for Traders Advanced Technical Trading Concepts by John F. Ehlers , 2013, page 135:
"Adaptive filters can have several different meanings. For example, Perry Kaufman’s adaptive moving average ( KAMA ) and Tushar Chande’s variable index dynamic average ( VIDYA ) adapt to changes in volatility . By definition, these filters are reactive to price changes, and therefore they close the barn door after the horse is gone.The adaptive filters discussed in this chapter are the familiar Stochastic , relative strength index ( RSI ), commodity channel index ( CCI ), and band-pass filter.The key parameter in each case is the look-back period used to calculate the indicator. This look-back period is commonly a fixed value. However, since the measured cycle period is changing, it makes sense to adapt these indicators to the measured cycle period. When tradable market cycles are observed, they tend to persist for a short while.Therefore, by tuning the indicators to the measure cycle period they are optimized for current conditions and can even have predictive characteristics.
The dominant cycle period is measured using the Autocorrelation Periodogram Algorithm. That dominant cycle dynamically sets the look-back period for the indicators. I employ my own streamlined computation for the indicators that provide smoother and easier to interpret outputs than traditional methods. Further, the indicator codes have been modified to remove the effects of spectral dilation.This basically creates a whole new set of indicators for your trading arsenal."
Included
- Double calculation of AJFMA for even smoother results
Adaptive Look-back/Volatility Phase Change Index on Jurik [Loxx]Adaptive Look-back, Adaptive Volatility Phase Change Index on Jurik is a Phase Change Index but with adaptive length and volatility inputs to reduce phase change noise and better identify trends. This is an invese indicator which means that small values on the oscillator indicate bullish sentiment and higher values on the oscillator indicate bearish sentiment
What is the Phase Change Index?
Based on the M.H. Pee's TASC article "Phase Change Index".
Prices at any time can be up, down, or unchanged. A period where market prices remain relatively unchanged is referred to as a consolidation. A period that witnesses relatively higher prices is referred to as an uptrend, while a period of relatively lower prices is called a downtrend.
The Phase Change Index (PCI) is an indicator designed specifically to detect changes in market phases.
This indicator is made as he describes it with one deviation: if we follow his formula to the letter then the "trend" is inverted to the actual market trend. Because of that an option to display inverted (and more logical) values is added.
What is the Jurik Moving Average?
Have you noticed how moving averages add some lag (delay) to your signals? ... especially when price gaps up or down in a big move, and you are waiting for your moving average to catch up? Wait no more! JMA eliminates this problem forever and gives you the best of both worlds: low lag and smooth lines.
Ideally, you would like a filtered signal to be both smooth and lag-free. Lag causes delays in your trades, and increasing lag in your indicators typically result in lower profits. In other words, late comers get what's left on the table after the feast has already begun.
That's why investors, banks and institutions worldwide ask for the Jurik Research Moving Average ( JMA ). You may apply it just as you would any other popular moving average. However, JMA's improved timing and smoothness will astound you.
What is adaptive Jurik volatility
One of the lesser known qualities of Juirk smoothing is that the Jurik smoothing process is adaptive. "Jurik Volty" (a sort of market volatility ) is what makes Jurik smoothing adaptive. The Jurik Volty calculation can be used as both a standalone indicator and to smooth other indicators that you wish to make adaptive.
What is an adaptive cycle, and what is Ehlers Autocorrelation Periodogram Algorithm?
From his Ehlers' book Cycle Analytics for Traders Advanced Technical Trading Concepts by John F. Ehlers, 2013, page 135:
"Adaptive filters can have several different meanings. For example, Perry Kaufman’s adaptive moving average (KAMA) and Tushar Chande’s variable index dynamic average (VIDYA) adapt to changes in volatility. By definition, these filters are reactive to price changes, and therefore they close the barn door after the horse is gone.The adaptive filters discussed in this chapter are the familiar Stochastic, relative strength index (RSI), commodity channel index (CCI), and band-pass filter.The key parameter in each case is the look-back period used to calculate the indicator. This look-back period is commonly a fixed value. However, since the measured cycle period is changing, it makes sense to adapt these indicators to the measured cycle period. When tradable market cycles are observed, they tend to persist for a short while.Therefore, by tuning the indicators to the measure cycle period they are optimized for current conditions and can even have predictive characteristics.
The dominant cycle period is measured using the Autocorrelation Periodogram Algorithm. That dominant cycle dynamically sets the look-back period for the indicators. I employ my own streamlined computation for the indicators that provide smoother and easier to interpret outputs than traditional methods. Further, the indicator codes have been modified to remove the effects of spectral dilation.This basically creates a whole new set of indicators for your trading arsenal."
Included
-Your choice of length input calculation, either fixed or adaptive cycle
-Invert the signal to match the trend
-Bar coloring to paint the trend
Happy trading!
CCI with Signals & Divergence [AIBitcoinTrend]👽 CCI with Signals & Divergence (AIBitcoinTrend)
The Hilbert Adaptive CCI with Signals & Divergence takes the traditional Commodity Channel Index (CCI) to the next level by dynamically adjusting its calculation period based on real-time market cycles using Hilbert Transform Cycle Detection. This makes it far superior to standard CCI, as it adapts to fast-moving trends and slow consolidations, filtering noise and improving signal accuracy.
Additionally, the indicator includes real-time divergence detection and an ATR-based trailing stop system, helping traders identify potential reversals and manage risk effectively.
👽 What Makes the Hilbert Adaptive CCI Unique?
Unlike the traditional CCI, which uses a fixed-length lookback period, this version automatically adjusts its lookback period using Hilbert Transform to detect the dominant cycle in the market.
✅ Hilbert Transform Adaptive Lookback – Dynamically detects cycle length to adjust CCI sensitivity.
✅ Real-Time Divergence Detection – Instantly identifies bullish and bearish divergences for early reversal signals.
✅ Implement Crossover/Crossunder signals tied to ATR-based trailing stops for risk management
👽 The Math Behind the Indicator
👾 Hilbert Transform Cycle Detection
The Hilbert Transform estimates the dominant market cycle length based on the frequency of price oscillations. It is computed using the in-phase and quadrature components of the price series:
tp = (high + low + close) / 3
smooth = (tp + 2 * tp + 2 * tp + tp ) / 6
detrender = smooth - smooth
quadrature = detrender - detrender
inPhase = detrender + quadrature
outPhase = quadrature - inPhase
instPeriod = 0.0
deltaPhase = math.abs(inPhase - inPhase ) + math.abs(outPhase - outPhase )
instPeriod := nz(3.25 / deltaPhase, instPeriod )
dominantCycle = int(math.min(math.max(instPeriod, cciMinPeriod), 500))
Where:
In-Phase & Out-Phase Components are derived from a detrended version of the price series.
Instantaneous Frequency measures the rate of cycle change, allowing the CCI period to adjust dynamically.
The result is bounded within a user-defined min/max range, ensuring stability.
👽 How Traders Can Use This Indicator
👾 Divergence Trading Strategy
Bullish Divergence Setup:
Price makes a lower low, while CCI forms a higher low.
Buy signal is confirmed when CCI shows upward momentum.
Bearish Divergence Setup:
Price makes a higher high, while CCI forms a lower high.
Sell signal is confirmed when CCI shows downward momentum.
👾 Trailing Stop & Signal-Based Trading
Bullish Setup:
✅ CCI crosses above -100 → Buy signal.
✅ A bullish trailing stop is placed at Low - (ATR × Multiplier).
✅ Exit if the price crosses below the stop.
Bearish Setup:
✅ CCI crosses below 100 → Sell signal.
✅ A bearish trailing stop is placed at High + (ATR × Multiplier).
✅ Exit if the price crosses above the stop.
👽 Why It’s Useful for Traders
Hilbert Adaptive Period Calculation – No more fixed-length periods; the indicator dynamically adapts to market conditions.
Real-Time Divergence Alerts – Helps traders anticipate market reversals before they occur.
ATR-Based Risk Management – Stops automatically adjust based on volatility.
Works Across Multiple Markets & Timeframes – Ideal for stocks, forex, crypto, and futures.
👽 Indicator Settings
Min & Max CCI Period – Defines the adaptive range for Hilbert-based lookback.
Smoothing Factor – Controls the degree of smoothing applied to CCI.
Enable Divergence Analysis – Toggles real-time divergence detection.
Lookback Period – Defines the number of bars for detecting pivot points.
Enable Crosses Signals – Turns on CCI crossover-based trade signals.
ATR Multiplier – Adjusts trailing stop sensitivity.
Disclaimer: This indicator is designed for educational purposes and does not constitute financial advice. Please consult a qualified financial advisor before making investment decisions.
Trend Titan Neutronstar [QuantraSystems]Trend Titan NEUTRONSTAR
Credits
The Trend Titan NEUTRONSTAR is a comprehensive aggregation of nearly 100 unique indicators and custom combinations, primarily developed from unique and public domain code.
We'd like to thank our TradingView community members: @IkKeOmar for allowing us to add his well-built "Normalized KAMA Oscillator" and "Adaptive Trend Lines " indicators to the aggregation, as well as @DojiEmoji for his valuable "Drift Study (Inspired by Monte Carlo Simulations with BM)".
Introduction
The Trend Titan NEUTRONSTAR is a robust trend following algorithm meticulously crafted to meet the demands of crypto investors. Designed with a multi layered aggregation approach, NEUTRONSTAR excels in navigating the unique volatility and rapid shifts of the cryptocurrency market. By stacking and refining a variety of carefully selected indicators, it combines their individual strengths while reducing the impact of noise or false signals. This "aggregation of aggregators" approach enables NEUTRONSTAR to produce a consistently reliable trend signal across assets and timeframes, making it an exceptional tool for investors focused on medium to long term market positioning.
NEUTRONSTAR ’s powerful trend following capabilities provide investors with straightforward, data driven analysis. It signals when tokens exhibit sustained upward momentum and systematically removes allocations from assets showing signs of weakness. This structure aids investors in recognizing peak market phases. In fact, one of NEUTRONSTAR ’s most valuable applications is its potential to help investors time exits near the peak of bull markets. This aims to maximize gains while mitigating exposure to downturns.
Ultimately, NEUTRONSTAR equips investors with a high precision, adaptable framework for strategic decision making. It offers robust support to identify strong trends, manage risk, and navigate the dynamic crypto market landscape.
With over a year of rigorous forward testing and live trading, NEUTRONSTAR demonstrates remarkable robustness and effectiveness, maintaining its performance without succumbing to overfitting. The system has been purposefully designed to avoid unnecessary optimization to past data, ensuring it can adapt as market conditions evolve. By focusing on aggregating valuable trend signals rather than tuning to historical performance, the NEUTRONSTAR serves as a reliable universal trend following system that aligns with the natural market cycles of growth and correction.
Core Methodology
The foundation of the NEUTRONSTAR lies in its multi aggregated structure, where five custom developed trend models are combined to capture the dominant market direction. Each of these aggregates has been carefully crafted with a specific trend signaling period in mind, allowing it to adapt seamlessly across various timeframes and asset classes. Here’s a breakdown of the key components:
FLARE - The original Quantra Signaling Matrix (QSM) model, best suited for timeframes above 12 hours. It forms the foundation of long term trend detection, providing stable signals.
FLAREV2 - A refined and more sophisticated model that performs well across both high and low timeframes, adding a layer of adaptability to the system.
NEBULA - An advanced model combining FLARE and FLAREV2. NEBULA brings the advantages of both components together, enhancing reliability and capturing smoother, more accurate trends.
SPARK - A high speed trend aggregator based on the QSM Universal model. It focuses on fast moving trends, providing early signals of potential shifts.
SUNBURST - A balanced aggregate that combines elements of SPARK and FLARE, confirming SPARK’s signals while minimizing false positives.
Each of these models contributes its own unique perspective on market movement. By layering fast, medium, and slower trend following signals, NEUTRONSTAR can confirm strong trends while filtering out shorter term noise. The result is a comprehensive tool that signals clear market direction with minimized false signals.
A Unique Approach to Trend Aggregation
One of the defining characteristics of NEUTRONSTAR is its deliberate choice to avoid perfectly time coherent indicators within its aggregation. In simpler terms, NEUTRONSTAR purposefully incorporates trend following indicators with slightly different signal periods, rather than synchronizing all components to a single signaling period. This choice brings significant benefits in terms of diversification, adaptability, and robustness of the overall trend signal.
When aggregating multiple trend following components, if all indicators were perfectly time coherent - meaning they responded to market changes in exactly the same way and over the time periods - the resulting signal would effectively be no different from a single trend following indicator. This uniformity would limit the system’s ability to capture a variety of market conditions, leaving it vulnerable to the same noise or false signals that any single indicator might encounter. Instead, NEUTRONSTAR leverages a balanced mix of indicators with varied timing: some fast, some slower, and some in the medium range. This choice allows the system to extract the unique strengths of each component, creating a combined signal that is stronger and more reliable than any single indicator.
By incorporating different signal periods, NEUTRONSTAR achieves what can be thought of as a form of edge accumulation. The fast components within NEUTRONSTAR , for example, are highly sensitive to quick shifts in market direction. These indicators excel at identifying early trend signals, enabling NEUTRONSTAR to react swiftly to emerging momentum. However, these fast indicators alone would be prone to reacting to market noise, potentially generating too many premature signals. This is where the medium term indicators come into play. These components operate with a slower reaction time, filtering out the short term fluctuations and confirming the direction of the trend established by the faster indicators. The combination of these varying signal speeds results in a balanced, adaptive response to market changes.
This approach also allows NEUTRONSTAR to adapt to different market regimes seamlessly. In fast moving, volatile markets, the faster indicators provide an early alert to potential trend shifts, while the slower components offer a stabilizing influence, preventing overreaction to temporary noise. Conversely, in steadier or trending markets, the medium and slower indicators sustain the trend signal, reducing the likelihood of premature exits. This flexible design enhances NEUTRONSTAR ’s ability to operate effectively across multiple asset classes and timeframes, from short term fluctuations to longer term market cycles.
The result is a powerful, multi-layered trend following tool that remains adaptive, capturing the benefits of both fast and medium paced reactions without becoming overly sensitive to short term noise. This unique aggregation methodology also supports NEUTRONSTAR ’s robustness, reducing the risk of overfitting to historical data and ensuring that the system can perform reliably in forward testing and live trading environments. The slightly staggered signal periods provide a greater degree of resilience, making NEUTRONSTAR a dependable choice for traders looking to capitalize on sustained trends while minimizing exposure during periods of market uncertainty.
In summary, the lack of perfect time coherence among NEUTRONSTAR ’s sub components is not a flaw - but a deliberate, robust design choice.
Risk Management through Market Mode Analysis
An essential part of NEUTRONSTAR is its ability to assess the market's underlying behavior and adapt accordingly. It employs a Market Mode Analysis mechanism that identifies when the market is either in a “Trending State” or a “Mean Reverting State.” When enough confidence is established that the market is trending, the system confirms and signals a “Trending State,” which is optimal for maintaining positions in the direction of the trend. Conversely, if there’s insufficient confidence, it labels the market as “Mean Reverting,” alerting traders to potentially avoid trend trades during likely sideways movement.
This distinction is particularly valuable in crypto, where asset prices often oscillate between aggressive trends and consolidation periods. The Market Mode Analysis keeps traders aligned with the broader market conditions, minimizing exposure during periods of potential whipsaws and maximizing gains during sustained trends.
Zero Overfitting: Design and Testing for Real World Resilience
Unlike many trend following indicators that rely heavily on backtesting and optimization, NEUTRONSTAR was built to perform well in forward testing and live trading without post design adjustments. Over a year of live market exposure has all but proven its robustness, with the system’s methodology focused on universal applicability and simplicity rather than curve fitting to past data. This approach ensures the aggregator remains effective across different market cycles and maintains relevance as new data unfolds.
By avoiding overfitting, NEUTRONSTAR is inherently more resistant to the common issue of strategy degradation over time, making it a valuable tool for traders seeking reliable market analysis you can trust for the long term.
Settings and Customization Options
To accommodate a range of trading styles and market conditions, NEUTRONSTAR includes adjustable settings that allow for fine tuning sensitivity and signal generation:
Calculation Method - Users can choose between calculating the NEUTRONSTAR score based on aggregated scores or by using the state of individual aggregates (long, neutral, short). The score method provides faster signals with slightly more noise, while the state based approach offers a smoother signal.
Sensitivity Threshold - This setting adjusts the system’s sensitivity, defining the width of the neutral zone. Higher thresholds reduce sensitivity, allowing for a broader range of volatility before triggering a trend reversal.
Market Regime Sensitivity - A sensitivity adjustment, ranging from 0 to 100, that affects the sensitivity of the sub components in market regime calculation.
These settings offer flexibility for users to tailor NEUTRONSTAR to their specific needs, whether for medium term investment strategies or shorter term trading setups.
Visualization and Legend
For intuitive usability, NEUTRONSTAR uses color coded bar overlays to indicate trend direction:
Green - indicates an uptrend.
Gray - signals a neutral or transition phase.
Purple - denotes a downtrend.
An optional background color can be enabled for market mode visualization, indicating the overall market state as either trending or mean reverting. This feature allows traders to assess trend direction and strength at a glance, simplifying decision making.
Additional Metrics Table
To support strategic decision making, NEUTRONSTAR includes an additional metrics table for in depth analysis:
Performance Ratios - Sharpe, Sortino, and Omega ratios assess the asset’s risk adjusted returns.
Volatility Insights - Provides an average volatility measure, valuable for understanding market stability.
Beta Measurement - Calculates asset beta against BTC, offering insight into asset volatility in the context of the broader market.
These metrics provide deeper insights into individual asset behavior, supporting more informed trend based allocations. The table is fully customizable, allowing traders to adjust the position and size for a seamless integration into their workspace.
Final Summary
The Trend Titan NEUTRONSTAR indicator is a powerful and resilient trend following system for crypto markets, built with a unique aggregation of high performance models to deliver dependable, noise reduced trend signals. Its robust design, free from overfitting, ensures adaptability across various assets and timeframes. With customizable sensitivity settings, intuitive color coded visualization, and an advanced risk metrics table, NEUTRONSTAR provides traders with a comprehensive tool for identifying and riding profitable trends, while safeguarding capital during unfavorable market phases.
HSI - Halving Seasonality Index for Bitcoin (BTC) [Logue]Halving Seasonality Index (HSI) for Bitcoin (BTC) - The HSI takes advantage of the consistency of BTC cycles. Past cycles have formed macro tops around 538 days after each halving. Past cycles have formed macro bottoms every 948 days after each halving. Therefore, a linear "risk" curve can be created between the bottom and top dates to measure how close BTC might be to a bottom or a top. The default triggers are set at 98% risk for tops and 5% risk for bottoms. Extensions are also added as defaults to allow easy identification of the dates of the next top or bottom according to the HSI.
CSI - Calendar Seasonality Index for Bitcoin (BTC) [Logue]Calendar Seasonality Index (CSI) for Bitcoin (BTC) - The CSI takes advantage of the consistency of BTC cycles. Past cycles have formed macro tops every four years near November 21st, starting from in 2013. Past cycles have formed macro bottoms every four years near January 15th, starting from 2011. Therefore, a linear "risk" curve can be created between the bottom and top dates to measure how close BTC might be to a bottom or a top. The default triggers are at 98% risk for tops and 5% risk for bottoms. Extensions are also added as defaults to allow easy identification of the dates of the next top or bottom according to the CSI.
Triple Ehlers Market StateClear trend identification is an important aspect of finding the right side to trade, another is getting the best buying/selling price on a pullback, retracement or reversal. Triple Ehlers Market State can do both.
Three is always better
Ehlers’ original formulation produces bullish, bearish and trendless signals. The indicator presented here gate stages three correlation cycles of adjustable lengths and degree thresholds, displaying a more refined view of bullish, bearish and trendless markets, in a compact and novel way.
Stick with the default settings, or experiment with the cycle period and threshold angle of each cycle, then choose whether ‘Recent trend weighting’ is included in candle colouring.
John Ehlers is a highly respected trading maths head who may need no introduction here. His idea for Market State was published in TASC June 2020 Traders Tips. The awesome interpretation of Ehlers’ work on which Triple Ehlers Market State’s correlation cycle calculations are based can be found at:
DISCLAIMER: None of this is financial advice.
Path of the Planets🪐 Path of the Planets
Path of the Planets is an open-source Pine Script™ v6 indicator. It is inspired by W.D. Gann’s Path of Planets chart, specifically the Chart 5-9 artistic replica by Patrick Mikula "shown below". The script visualizes planetary positions so you can explore possible correlations with price. It overlays geocentric and heliocentric longitudes and declinations using the AstroLib library and includes an optional positions table that shows, at a glance, each body’s geocentric longitude, heliocentric longitude, and declination. This is an educational tool only and not trading advice.
Key Features
Start point: Choose a date and time to begin plotting so studies can align with market events.
Adjustments: Mirror longitudes and shift by 360° multiples to re-frame cycles.
Planets: Toggle geocentric and heliocentric longitudes and declinations for Sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, and Pluto. Moon declination is available.
Positions table: Optional color-coded table (bottom-right) with three columns labeled Geo, Helio, and Dec. Values show degrees with the zodiac sign for the longitudes and degrees for declinations.
Visualization: Solid lines for geocentric longitudes, circles for heliocentric longitudes, and columns for declinations. Includes a zero-declination reference line.
How It Works
Converts bar timestamps to Julian days via AstroLib.
Fetches positions with AstroLib types: geocentric (0), heliocentric (1), and declination (3).
Normalizes longitudes to the −180° to +180° range, applies optional mirroring and 360° shifts, and converts longitudes to zodiac sign labels for the table.
Plots and the table update only on and after the selected start time.
Usage Tips
Apply on daily or higher timeframes when studying broader cycles. For degrees, use the left scale.
Limitations at the moment: default latitude, longitude, and timezone are set to 0; aspects and retrogrades are not included; the focus is on raw paths.
License and Credits
Dependency: @BarefootJoey Astrolib
Contributions and observations are welcome.
Gabriel's Squeeze Momentum PRO“Gabriel’s Squeeze Momentum PRO” is a next-generation evolution of the classic SQZMOM concept. It layers multiple John Ehlers filters, Jurik smoothing, adaptive cycle-detection, and a Cauchy-weighted price filter on top of the familiar Bollinger-Band-inside-Keltner-Channel squeeze logic. The goal is to pinpoint volatility contractions and immediately gauge whether forthcoming expansion is likely to break bullish or bearish—while screening out noise, lag, and regime shifts across any symbol or timeframe.
1 · What the script plots
Plot What it represents Why it matters
Momentum line (teal/red) Price-de-trended linear-regression of a Cauchy-filtered source, optionally normalized. Measures directional thrust during / after a squeeze.
Signal line (white JMA) Jurik moving average of the momentum line. Smooth trigger for crossovers / reversals.
Squeeze dots (blue, black, red, yellow, purple, green) Real-time volatility state: No squeeze → Wide → Normal → Narrow → Very Narrow → Fired. Helps anticipate explosive moves as BB exits KC.
Cyclic RSI bands (cyan / fuchsia) Dynamic overbought / oversold bands derived by MESA dominant-cycle analysis. Contextualizes momentum extremes—no fixed 70/30.
Rate-of-Change (optional) (orange / blue shading) ROC of the momentum-signal spread, scaled. Highlights acceleration / deceleration.
Reversal guide lines (optional colored rays) Drawn when momentum crosses its JMA and reversal-mode is on. Visual confirmation of early trend change.
2 · Key engine components
Cauchy PDF-weighted moving average
Creates a heavy-tailed weighting curve; center bars dominate while still capturing fat-tail outliers—excellent for choppy instruments or volume-weighting (Volume weighted?).
Butterworth High-Pass & Super-Smoother Low-Pass
Strip out drift, then smooth what’s left. This isolates true cyclic motion before momentum is computed.
Fast RMS normalizer
Converts the band-pass output into a unit-scale “power” reading—vital for adaptive thresholds.
Goertzel + MESA dominant-cycle
Auto-detects fast & slow cycles, then blends them to size overbought / oversold bands and to set the adaptiveLength (if Use Adaptive Length? is enabled).
Jurik RSX & JMA
Provide ultra-low-lag smoothing for momentum and for reversal detection.
3 · Input groups and how to tune them
Group Why change it Tips
Normalization (Unbounded / Min-Max / Standard Deviations) Puts momentum & signal on the scale that best suits the asset. Crypto / small-caps: StdDev (handles volatility).
FX / indices: Min-Max or leave unbounded for raw juice.
Cauchy Distribution Tailors the Cauchy filter. Gamma ↓ (0.1-0.4) ⇒ faster / riskier. Use Adaptive Length pairs it with MESA cycle length for auto speed control.
Rate of Change Visual momentum acceleration. Leave off (Show Rate of Change = false) if you want a cleaner pane.
Momentum Colors / Directional Momentum? Switch between classic SQZMOM coloring and trend-biased histogram. Turn on when you prefer “green-gets-greener / red-gets-redder” style signals.
Squeeze Colors & Thresholds Fine-tune what “wide / normal / narrow” mean. Larger assets (SPX, BTC-Perp): raise the thresholds a touch. Thin or low-ATR symbols: lower them.
Multi-Time-frame blocks (1 h, 4 h, D, W, M) Pre-sets for BB/KC length, squeeze thresholds, and reversal MA length per TF. The script auto-detects the chart timeframe and loads the matching row—just adjust each block once.
Reversal Signals Whether to draw vertical rays on momentum crossovers. Use on swing-trading timeframes (≥1 h) to catch early momentum flips.
4 · How to read & trade it
Scan for purple / yellow / red dots
These indicate Very-Narrow, Narrow, and Normal squeezes—markets are coiling.
Wait for a fired squeeze (green dot)
BB has pushed outside KC; volatility is expanding. Momentum direction often dictates breakout bias.
Check momentum relative to zero & signal
Bullish setup: Momentum > 0 and crossing above signal. Bearish setup: Momentum < 0 and crossing below signal. Alerts “Bullish / Bearish Trend Reversal” are raised here if enabled.
Validate with cyclic bands
If momentum launches from near the lower cyan band, bullish moves are higher-probability (symmetrical for upper fuchsia band).
Confirm trend strength
Directional-momentum histogram keeps turning brighter in trend direction; ROC is above zero and rising.
Manage the trade
First target = prior squeeze mid-range or recent swing high/low.
Consider scaling out when momentum weakens (histogram fades) or reverses through signal line.
Optional: draw the reversal rays to highlight exit zones automatically.
5 · Practical workflows
Scalpers (1-5 min)
Uncheck Use Adaptive Length, set main Length to 10-12, Gamma to 0.3.
Use ROC for ultra-fast divergences.
Treat Normal squeezes (red) as tradable; ignore Wide. Healthy Volume is ideal.
Swing traders (1 h – 4 h)
Keep default adaptive length; enable 1-H/4-H reversal blocks.
Trade only after Very-Narrow/Narrow squeezes; ride until weekly/daily reversal ray prints.
Position / Trend followers (Daily+)
Raise Wide/Normal thresholds a bit (e.g., 2.2 / 1.7).
Momentum normalization = Standard Deviations to filter regime shifts.
Combine with higher-timeframe MTF panel or moving-average ribbons.
6 · Built-in alert catalog
Alert name Fires when Typical action
🟢 Fired Squeeze Green dot appears (vol expansion already under way) Stay in trend or add on pullbacks.
🟠 Low / 🔴 Normal / 🟡 Tight / 🟣 Very Tight Respective squeeze engages Get your watch-list ready; plan trades.
🐂 Bullish / 🐻 Bearish Trend Reversal Momentum crosses signal in requested direction Entry / exit / scale adds.
Set alerts on “Once Per Bar Close” for reliable signals.
7 · Best practices & caveats
Context is king – Use higher-timeframe structure (support/resistance, VWAP, market profile) to avoid false breakouts.
Data quality – On illiquid symbols, consider turning volume weighting off (pre-market gaps distort results).
Normalization choice – Mixing different normalizations across charts can confuse muscle memory; pick one style per asset class.
Lag vs. noise – If entries feel late, lower Gamma or disable adaptive length. If too jumpy, increase Length or choose Standard-Deviation normalization.
Not a stand-alone holy grail – Combine with risk management (ATR-based stops, Kelly-fraction sizing) and confirm with price action.
Harness the script’s adaptive filtering, multi-TF presets, and rich alert suite to spot compression, time breakouts, and stay on the right side of momentum—whether you’re scalping ES futures or swing-trading alt-coins.
Bitcoin: The Puell MultipleBitcoin: The Puell Multiple Indicator Overview
The Puell Multiple is an indicator originally used to analyze Bitcoin's valuation based on mining revenue. However, this approximate version uses Bitcoin's current price to give us a similar perspective. It’s helpful for understanding whether Bitcoin’s price is currently high or low compared to its historical trend.
Recommended Timeframe:
For optimal insights, it’s recommended to use this indicator on the weekly timeframe. This timeframe smooths out daily fluctuations, making it easier to capture long-term valuation trends and better understand market cycles.
What Does the Indicator Show?
This indicator compares the current price of Bitcoin to its average price over the past 365 days. Here’s what it helps you see:
When Bitcoin Might Be Undervalued:
If the indicator value is below a certain low threshold (e.g., 0.51 by default), it suggests that Bitcoin might be undervalued compared to its long-term trend. Historically, periods where the indicator is low have sometimes coincided with good buying opportunities, as Bitcoin is seen as “cheap” in relation to its recent average.
When Bitcoin Might Be Overvalued:
If the indicator value is above a certain high threshold (e.g., 3.4 by default), it suggests that Bitcoin might be overvalued. In the past, these high points have sometimes signaled times to consider selling, as Bitcoin is viewed as “expensive” relative to its recent trend.
How to Read the Indicator
Indicator Line: The main line in the indicator panel shows the value of the Puell Multiple over time, fluctuating based on the comparison between current and past prices.
Threshold Lines: Two horizontal lines represent the high and low thresholds:
Bottom Threshold (Red Line): Indicates a high value, suggesting that Bitcoin might be overvalued.
Top Threshold (Green Line): Indicates a low value, suggesting that Bitcoin might be undervalued.
Color Coding:
The background may appear green when the indicator is below the low threshold (suggesting undervaluation) or red when it’s above the high threshold (suggesting overvaluation).
How You Can Use This Indicator
Long-Term Investment Insights: This indicator can help you identify favorable buying or selling conditions based on historical price trends. When the value is low, Bitcoin might be in a more attractive price range; when it’s high, the price might be inflated compared to its yearly trend.
Market Timing: This tool is best used alongside other indicators, as it’s primarily helpful for understanding broader trends rather than predicting short-term movements.
The Puell Multiple (Approximate) indicator thus offers a historical lens on Bitcoin’s valuation, helping you make decisions informed by past price trends. For best results, keep in mind the weekly timeframe recommendation to capture meaningful market cycles.
π Cycle Market Tops & Bottoms Performante IndicatorWhy is it called the Pi Cycle Tops & Bottoms Indicator?
When the 111-Day moving average crosses over the (350-Day moving average X 2), we've seen the price come to a key top or bottom within the Bitcoin market for the past 3 cycles.
350 divided by 111 is very close to π - hence the name the Pie cycle!
Yes, we are selecting arbitrary numbers initially, but through the use of proper back-testing, we are able to find key cycle shifts using mathematical numbers (fibs, Pi, etc)
We use this topping & bottoming signal when things look overbought over oversold within the market.
The "topping" label turns on as soon as we see the 111-Day moving average cross above the 350-Day moving average.
The "bottoming" signal turns on as soon as we see the 111-day moving average cross below the 350-Day moving average.
This indicator should only be used on the daily timeframe!
Historically speaking, we've seen this indicator become impressively accurate.
HHT Signal Analyzer (Refined)HHT Signal Analyzer
The HHT Signal Analyzer provides a real-time, smoothed approximation of the Hilbert-Huang Transform (HHT), designed to reveal adaptive cycles and phase changes in price action. It emulates Intrinsic Mode Functions (IMFs) using a double exponential moving average (EMA) filter to extract short-term oscillatory signals from price.
This indicator is helpful for identifying subtle shifts in market behavior, such as when a trend is transitioning or weakening, and is especially effective when paired with trend-based tools like GRJMOM.
How it works:
Applies a double EMA to the price (EMA of EMA)
Calculates the difference between the fast and slow EMA to emulate IMF behavior
Amplifies the signal for clear visual feedback
Highlights cycle slope changes with background coloring (green = rising, red = falling)
Use Cases:
Use slope direction to detect early phase shifts in the market
Combine with trend indicators to confirm or fade moves
Helps visualize when the market is entering a cycle crest or trough
Best for:
Traders looking to capture short-term reversals, cycle timing, or divergence with smooth and adaptive signals
Can be used on any timeframe
Fast Fourier Transform [ScorsoneEnterprises]The SCE Fast Fourier Transform (FFT) is a tool designed to analyze periodicities and cyclical structures embedded in price. This is a Fourier analysis to transform price data from the time domain into the frequency domain, showing the rhythmic behaviors that are otherwise invisible on standard charts.
Instead of merely observing raw prices, this implementation applies the FFT on the logarithmic returns of the asset:
Log Return(𝑚) = log(close / close )
This ensures stationarity and stabilizes variance, making the analysis statistically robust and less influenced by trends or large price swings.
For a user-defined lookback window 𝑁:
Each frequency component 𝑘 is computed by summing real and imaginary projections of log-returns multiplied by complex exponential functions:
𝑒^−𝑖𝜃 = cos(𝜃)−𝑖sin(𝜃)
where:
θ = 2πkm / N
he result is the magnitude spectrum, calculated as:
Magnitude(𝑘) = sqrt(Real_Sum(𝑘)^2 + Imag_Sum(𝑘)^2)
This spectrum represents the strength of oscillations at each frequency over the lookback period, helping traders identify dominant cycles.
Visual Analysis & Interpretation
To give traders context for the FFT spectrum’s values, this script calculates:
25th Percentile (Purple Line)
Represents relatively low cyclical intensity.
Values below this threshold may signal quiet, noisy, or trendless periods.
75th Percentile (Red Line)
Represents heightened cyclical dominance.
Values above this threshold may indicate significant periodic activity and potential trend formation or rhythm in price action.
The FFT magnitude of the lowest frequency component (index 0) is plotted directly on the chart in teal. Observing how this signal fluctuates relative to its percentile bands provides a dynamic measure of cyclical market activity.
Chart examples
In this NYSE:CL chart, we see the regime of the price accurately described in the spectral analysis. We see the price above the 75th percentile continue to trend higher until it breaks back below.
In long trending markets like NYSE:PL has been, it can give a very good explanation of the strength. There was confidence to not switch regimes as we never crossed below the 75th percentile early in the move.
The script is also usable on the lower timeframes. There is no difference in the usability from the different timeframes.
Script Parameters
Lookback Value (N)
Default: 30
Defines how many bars of data to analyze. Larger N captures longer-term cycles but may smooth out shorter-term oscillations.