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.
Cerca negli script per "Cycle"
My-Indicator - Global Liquidity & Money Supply M2 + Time OffsetThis script is designed to visualize a global liquidity and money supply index by combining data from various regions and, optionally, central bank activity. Visualizing this data on a chart allows you to see how central banks are intervening in the financial system and how the total amount of money in the economy is changing. Let’s take a look at how it works:
Central Bank Liquidity
Shows the actions of central banks (e.g. FED, ECB) providing short-term cash to commercial banks. If you see spikes or a steady increase in these indicators, it may suggest that liquidity is being increased through intervention, which often stimulates the market.
Money Supply
M2 money supply is a monetary aggregate that includes M1 (cash and current deposits) plus savings deposits, small term deposits, and other financial instruments that, while not as liquid as M1, can be quickly converted into cash. As a result, M2 provides a broader picture of the available money in the economy, which is useful for analyzing market conditions and potential economic trends.
How does it help investors?
It allows you to quickly see when central banks are injecting additional liquidity, which could signal higher prices.
It allows you to see trends in the money supply, which informs potential changes in inflation and the economic cycle.
Combining both sets of data provides a more complete picture – both in the short and long term – which makes it easier to predict upcoming price movements.
This allows investors to better respond to changes in central bank policy and broader monetary trends, increasing their chances of making better investment decisions.
Data Collection
The script retrieves money supply data for key markets such as the USA (USM2), Europe (EUM2), China (CNM2), and Japan (JPM2). It also offers additional money supply series for other markets—like Canada (CAM2), Great Britain (GBM2), Russia (RUM2), Brazil (BRM2), Mexico (MXM2), and New Zealand (NZM2)—with extra options (e.g., Australia, India, Korea, Indonesia, Malaysia, Sweden) disabled by default. Moreover, you can enable data for central bank liquidity (such as FED, RRP, TGA, ECB, PBC, BOJ, and other central banks), which are also disabled by default.
Index Calculation
The indicator calculates the index by adding together all the enabled money supply series (and the central bank data if activated) and then scales the sum by dividing it by 1,000,000,000,000 (one trillion). This scaling makes the resulting values more manageable and easier to read on the chart.
Time Offset Feature
A key feature of the script is the time offset. With the input parameter "Time Offset (days)", the user can shift the plotted index line by a specific number of days. The script converts the given offset in days into a number of bars based on the current chart's timeframe. This allows you to adjust for the delay between liquidity changes and their effect on asset prices.
Overall, the indicator plots a line on your chart representing the global liquidity and money supply index, allowing you to visually monitor trends and better understand how liquidity and central bank actions may influence market movements.
What makes this script different from others?
Every supported market—both major regions (USA, Eurozone, China, Japan, etc.) and additional ones—is available. You can toggle each series on or off, so you can view only Money Supply data, only Central Bank Liquidity, or any custom combination.
Separated Data Groups. Inputs are organized into clear groups (“Money Supply”, “Other Money Supply”, “Central Bank Liquidity”), making it easy to focus on just the data you need without clutter.
True Day‑Based Offset. This script converts your chosen “Time Offset (days)” into actual days regardless of timeframe. Whether you’re on a 5‑minute or daily chart, the index is always shifted by exactly the number of days you specify.
[iQ]PRO Ultimate Financial Analysis Tool And System SynergyUltimate Financial Analysis Tool And System Synergy (UFATASS)
Advanced Market Insights with Cycle Analysis, Trend Forecasting, and Risk Monitoring
The Ultimate Financial Analysis Tool And System Synergy (UFATASS) is a powerful indicator designed to give traders a deeper understanding of market dynamics. By blending cutting-edge techniques from signal processing, statistics, and dynamical systems theory, UFATASS provides a unique, all-in-one solution for technical analysis.
Key Features
Cycle Detection:
Pinpoints dominant market cycles using advanced spectral analysis, helping you identify potential turning points.
Trend Analysis:
Delivers multiple regression lines to capture short-term and long-term market trends, with a customizable complexity setting for precision.
Probability Forecasts:
Uses Monte Carlo simulations to estimate the likelihood of future price movements, offering a probabilistic edge for decision-making.
Risk Monitoring:
Tracks volatility and market stability, featuring an experimental chaos indicator based on Lyapunov exponents to assess price predictability.
Customization Options
Adjust the indicator to fit your trading style:
Cycle and regression lookback periods
Complexity factor for regression sensitivity
Volatility calculation window
Forecast horizon for price predictions
Visual Outputs
Price and regression lines plotted on the main chart
Cycle details and wave visuals in a separate pane
A summary label on the last bar with key metrics (e.g., cycle length, probabilities)
Background color alerts to signal risk levels
How to Use
Incorporate UFATASS into your strategy to:
Anticipate reversals with cycle analysis
Confirm trends using regression insights
Plan entries and exits with probability forecasts
Monitor market conditions and adjust risk exposure
TradingWolf Premium OscillatorsThe TradingWolf Premium Oscillators is a unique and enhanced selection of oscillators designed to help give you an edge on the markets.
Within this one indicator you will have access to RSI, Stochastic, MACD, Awesome Oscillator, Wavetrend, Zig Zag Pivots and DPO.
Including Divergence and Hidden Divergence signals for them.
Below each indicator is explained along with its enhancements to help you understand it better.
This script comes with the 'TradingWolf Premium' to get access, read the Author’s Instructions below.
There are extensive explanations on how to use these oscillators in our documentation on the website but we will give a simple overview here.
RSI
We try not to mess with these too much because if used correctly, they are very powerful tools. The main differences you will notice is that we have highlighted the areas where you should be paying attention to the oscillator with reversal/continuation zones.
The most popular feature from these will be the 4 divergences which can be toggled on or off in the settings.
Stochastic
Stochastic we have tried to keep as similar to the original as possible, main features are being able to select alternate timeframes for it to be calculated on as well as displaying divergences.
We have created a highlighted zone for when price enters the overbought/sold territory. A lot of traders will look for crossovers happening in these areas however from our tests we have discovered entering trades as the Stochastic comes out of these areas has hugely reduced losing trades, still not a perfect strategy but it does often show that the trend is showing weakening momentum and its commonly followed by a period of sideways action before continuing in a new direction.
MACD
We have calculated a dynamic extreme range for the MACD, you will notice the green/red bars as the bottom and top of the Oscillator. These levels help adjust with the assets volatility so they will work universally on all assets and timeframes. When these levels get more narrow, this indicates there is a potential larger move to come, similar thought process to a Bollinger band squeeze.
We like the Divergence signals you receive whilst in this OB/OS range as they give more confluence behind the divergence signal that price has over extended and is looking to retrace or consolidate.
Awesome Oscillator
The Awesome Oscillator is based on some pretty simple calculations but is hugely powerful.
The 3 main use cases are crossing the 0 value, showing weakening momentum and divergence signals.
We Particularly like the Divergence signals it gives us as they tend to be more accurate than any other oscillator.
Wavetrend
Wavetrend we try describe as a more dynamic Stochastic/MACD, it moves smoother and quicker without giving too many false signals.
Conditions we use the Wavetrend for are similar to the MACD where we are looking for crossovers or divergences in the extreme bands, these shouldn’t be used to trade alone and should be paired with other pieces of confluence for a higher probability trade however this is one of our favourites.
We also have a VWAP extreme detector which we pair with the Wavetrend, helping us identify areas where price should start cooling off.
Zig Zag
The main purpose of the standard Zig Zag is to analyse historical data to be able to observe cycle's in a market's movement, this requires a bit more explanation than we can include here so please refer to our documentation on the website for further guidance.
DPO
The detrended price oscillator is unlike other oscillators, such as the Stochastic or MACD the DPO is not a momentum indicator. It instead highlights peaks and troughs in price, which are used to estimate buy and sell points in line with the historical cycle.
We personally think this is the most under-rated oscillator out there, if you simply followed the DPO above 0 for long and below for short on higher timeframes you can outperform the buy and hold return of Bitcoin (BTCUSDT)...
This is just one simple way of using the DPO there are other more in depth methods of using it within our documentation.
Financial Astrology Mercury LongitudeMercury energy influence the mind, the intellect and mental temperament, in mundane astrology is well know that rules: news, science, debating, trading, commerce, contracts. telecommunication, short-distance travels, among others. W. D. Gann discovered that the Mercury speed phases (stationary, retrograde, direct) transitions was very relevant as trading signals, he used the Sun conjunction retrograde Mercury to confirm the formation of top and bottoms that seems to be a relevant leading indicator in multiples markets.
As part of the Financial Astrology Research Group experiments, we created hundreds of machine learning models that try to predict daily trend direction for a research portfolio of 10 crypto-currencies and is confirmed that including the Mercury speed and aspects features (variables) in the models increase the accuracy in a consistent manner. Therefore, there is enough evidence that Mercury is one of the most powerful mid term trading cycles.
This is the first open source PIneScript indicator that is able to plot the Mercury Tropical Longitude for the years 2010-2030, we publish as open source in order to support and simplify the research of the amazing astro-traders community at TradingView that have been working manually with annotations and lines to represent the Mercury longitude zodiac signs entries and the speed phases transitions. That manual work is over. Let's move faster in our cycles research!
We encourage all astro traders to continue researching and sharing your ideas of astro cycles trading strategies with us and contribute your experiments at our Github Financial Stats exploration project
so we can improve the cosmic energy models that influence traders behaviours.
Note: The Mercury longitude is based on an ephemeris array that covers years 2010 to 2030, prior or after this years the longitude is not available, this daily ephemeris are based on UTC time so in order to align properly with the price bars times you should set UTC as your chart reference timezone.
Others astro trading indicators from Financial Astrology Research Group:
Bitcoin: Top & Bottom Mini-AlgoHere we have a mini-algorithm that tries to show absolute 4-year-cycle top and bottom zones for the case of the BraveNewCoin Liquid Index (BLX) for Bitcoin on the weekly (W) timeframe by using several oscillators as RSI, VPCI etc. employed with a custom logic. When the background gets red we might be near to a cycle peak, and when it gets green we might be near to the absolute bottom of the current cycle. Note that only absolute top/bottoms are indicated (at least since the end of 2013), so that the current strong drop in March 2020 was correctly not tagged, as it wasn't the lowest price of the current cycle.
It is best to combine this mini-algorithm with some of my boundary indicators for BLX, e.g. "Bitcoin: Price Action Integrals", for confluence . For the next peak one could then watch for the mini-algo to go red and for the price to hit the boundary. You can change the background transparency if you like to have this indicator be more unobstrusive on the chart.
For access please contact me via DM on TradingView or on Twitter (linked on my TradingView profile and my signature).
oscillator fast cryptosmart (Bands on Scale)The oscillator fast cryptosmart is a high-sensitivity momentum indicator designed to generate signals more rapidly than many traditional oscillators, such as the MACD. It is engineered to detect potential price breakouts by analyzing short-term market cycles.
At its core, the indicator uses a Detrended Price Oscillator (DPO) to remove the longer-term trend from price action, allowing it to focus purely on the underlying momentum cycles. It then calculates dynamic volatility bands around this oscillator line.
Signals are generated when momentum breaks out from a normal range, providing traders with an early warning of a potential acceleration in price.
How to Interpret the Signals:
Buy Signal (Green Vertical Line): A buy signal is generated when the oscillator's main line (yellow) crosses above its upper statistical band. This indicates a sharp surge in positive momentum, suggesting a potential upward move is beginning.
Sell Signal (Red Vertical Line): A sell signal is generated when the oscillator's main line crosses below its lower statistical band. This indicates a significant increase in negative momentum, suggesting a potential downward move is starting.
By focusing on momentum breakouts rather than lagging moving average crossovers, the oscillator fast cryptosmart aims to provide an edge in identifying opportunities in fast-moving markets.
Stacey Burke Signal Day LTE“Previously published as ‘Day Zero Fakeout Detector MTF’”
Stacey Burke Signal Day LTE
Automatic detection of Day Zero, Inside Days, and Outside Days for Stacey Burke’s intraday playbook
🔎 Stacey Burke’s Signal Days
This indicator highlights the key daily patterns that often lead to high-probability intraday setups in Stacey Burke’s methodology:
1️⃣ Day Zero
The reset days within a 3-day cycle (e.g. breakout → continuation → exhaustion/reversal).
Can mark the beginning of a new directional phase.
Trades back inside the prior range after a Peak Formation High (PFH) or Peak Formation Low (PFL).
Bias: Look for measured parabolic session moves. When combined with trend following indicators, these signal days can be very powerful.
2️⃣ Inside Day
A day where the entire range is contained within the prior day’s range.
Signals consolidation and energy build-up.
Often leads to explosive breakouts in the next session.
Bias: Trade breakouts of the inside day’s high/low or breakout reversal in the session at key timings in the direction of higher timeframe bias. When combined with trend following indicators, these signal days can be very powerful.
3️⃣ Outside Day (Engulfing Day)
`
A day where the range is larger than the prior day’s range, engulfing both high and low.
Marks trapped traders and fakeouts on both sides.
Often precedes strong continuations or sharp reversals from outside of the ranges.
Bias: Align trades with the true continuation move. When combined with trend following indicators, these signal days can be very powerful.
📌 How They Work Together
Day Zero → Signals the new cycle after PFH/PFL.
Inside Day → Signals compression → expect breakout setups.
Outside Day → Signals exhaustion/fakeouts → expect reversals or continuations.
Together, they give traders a clear daily roadmap for where liquidity sits and when to expect the highest-probability setups.
✅ Example in Practice
Market rallies for 3 days → PFH forms → Day Zero short bias.
Next day prints an Inside Day → watch for breakout continuation short, and breakout reversals.
Later, an Outside Day traps both longs and shorts → the following session offers a clean intraday reversal or continuation trade in line with the underlying MTF trend/bias.
⚙️ Features of This Indicator
Automatic detection of Day Zero, Inside Days, and Outside Days
Multi-Timeframe (MTF) support for cycle alignment
Visual markers for PFH/PFL and consolidation zones
Measured move projections for breakout targets
👉 Stacey Burke Signal Day LTE gives traders just a few of the most important signal days — Day Zero, Inside Day, and Outside Day — to structure their intraday trades around fake outs, breakouts, and reversals within the daily cycles of the week. (This is work in progress: Next up, FRD/FGD's, 3-day cycle detecting, 3DLs, 3DSs).
Bitcoin Pi Cycle Top Indicator - Daily Timeframe Only1 Day Timeframe Only
The Bitcoin Pi Cycle Top Indicator has garnered attention for its historical effectiveness in identifying the timing of Bitcoin's market cycle peaks with remarkable precision, typically within a margin of 3 days.
It utilizes a specific combination of moving averages—the 111-day moving average and a 2x multiple of the 350-day moving average—to signal potential tops in the Bitcoin market.
The 111-day moving average (MA): This shorter-term MA is chosen to reflect more recent price action and trends within the Bitcoin market.
The 350-day moving average (MA) multiplied by 2: This longer-term MA is adjusted to capture broader market trends and cycles over an extended period.
The key premise behind the Bitcoin Pi Cycle Top Indicator is that a potential market top for Bitcoin can be signaled when the 111-day MA crosses above the 350-day MA (which has been doubled). Historically, this crossover event has shown a remarkable correlation with the peaks of Bitcoin's price cycles, making it a tool of interest for traders and investors aiming to anticipate significant market shifts.
#Bitcoin
WaveTrend 3D█ OVERVIEW
WaveTrend 3D (WT3D) is a novel implementation of the famous WaveTrend (WT) indicator and has been completely redesigned from the ground up to address some of the inherent shortcomings associated with the traditional WT algorithm.
█ BACKGROUND
The WaveTrend (WT) indicator has become a widely popular tool for traders in recent years. WT was first ported to PineScript in 2014 by the user @LazyBear, and since then, it has ascended to become one of the Top 5 most popular scripts on TradingView.
The WT algorithm appears to have origins in a lesser-known proprietary algorithm called Trading Channel Index (TCI), created by AIQ Systems in 1986 as an integral part of their commercial software suite, TradingExpert Pro. The software’s reference manual states that “TCI identifies changes in price direction” and is “an adaptation of Donald R. Lambert’s Commodity Channel Index (CCI)”, which was introduced to the world six years earlier in 1980. Interestingly, a vestige of this early beginning can still be seen in the source code of LazyBear’s script, where the final EMA calculation is stored in an intermediate variable called “tci” in the code.
█ IMPLEMENTATION DETAILS
WaveTrend 3D is an alternative implementation of WaveTrend that directly addresses some of the known shortcomings of the indicator, including its unbounded extremes, susceptibility to whipsaw, and lack of insight into other timeframes.
In the canonical WT approach, an exponential moving average (EMA) for a given lookback window is used to assess the variability between price and two other EMAs relative to a second lookback window. Since the difference between the average price and its associated EMA is essentially unbounded, an arbitrary scaling factor of 0.015 is typically applied as a crude form of rescaling but still fails to capture 20-30% of values between the range of -100 to 100. Additionally, the trigger signal for the final EMA (i.e., TCI) crossover-based oscillator is a four-bar simple moving average (SMA), which further contributes to the net lag accumulated by the consecutive EMA calculations in the previous steps.
The core idea behind WT3D is to replace the EMA-based crossover system with modern Digital Signal Processing techniques. By assuming that price action adheres approximately to a Gaussian distribution, it is possible to sidestep the scaling nightmare associated with unbounded price differentials of the original WaveTrend method by focusing instead on the alteration of the underlying Probability Distribution Function (PDF) of the input series. Furthermore, using a signal processing filter such as a Butterworth Filter, we can eliminate the need for consecutive exponential moving averages along with the associated lag they bring.
Ideally, it is convenient to have the resulting probability distribution oscillate between the values of -1 and 1, with the zero line serving as a median. With this objective in mind, it is possible to borrow a common technique from the field of Machine Learning that uses a sigmoid-like activation function to transform our data set of interest. One such function is the hyperbolic tangent function (tanh), which is often used as an activation function in the hidden layers of neural networks due to its unique property of ensuring the values stay between -1 and 1. By taking the first-order derivative of our input series and normalizing it using the quadratic mean, the tanh function performs a high-quality redistribution of the input signal into the desired range of -1 to 1. Finally, using a dual-pole filter such as the Butterworth Filter popularized by John Ehlers, excessive market noise can be filtered out, leaving behind a crisp moving average with minimal lag.
Furthermore, WT3D expands upon the original functionality of WT by providing:
First-class support for multi-timeframe (MTF) analysis
Kernel-based regression for trend reversal confirmation
Various options for signal smoothing and transformation
A unique mode for visualizing an input series as a symmetrical, three-dimensional waveform useful for pattern identification and cycle-related analysis
█ SETTINGS
This is a summary of the settings used in the script listed in roughly the order in which they appear. By default, all default colors are from Google's TensorFlow framework and are considered to be colorblind safe.
Source: The input series. Usually, it is the close or average price, but it can be any series.
Use Mirror: Whether to display a mirror image of the source series; for visualizing the series as a 3D waveform similar to a soundwave.
Use EMA: Whether to use an exponential moving average of the input series.
EMA Length: The length of the exponential moving average.
Use COG: Whether to use the center of gravity of the input series.
COG Length: The length of the center of gravity.
Speed to Emphasize: The target speed to emphasize.
Width: The width of the emphasized line.
Display Kernel Moving Average: Whether to display the kernel moving average of the signal. Like PCA, an unsupervised Machine Learning technique whereby neighboring vectors are projected onto the Principal Component.
Display Kernel Signal: Whether to display the kernel estimator for the emphasized line. Like the Kernel MA, it can show underlying shifts in bias within a more significant trend by the colors reflected on the ribbon itself.
Show Oscillator Lines: Whether to show the oscillator lines.
Offset: The offset of the emphasized oscillator plots.
Fast Length: The length scale factor for the fast oscillator.
Fast Smoothing: The smoothing scale factor for the fast oscillator.
Normal Length: The length scale factor for the normal oscillator.
Normal Smoothing: The smoothing scale factor for the normal frequency.
Slow Length: The length scale factor for the slow oscillator.
Slow Smoothing: The smoothing scale factor for the slow frequency.
Divergence Threshold: The number of bars for the divergence to be considered significant.
Trigger Wave Percent Size: How big the current wave should be relative to the previous wave.
Background Area Transparency Factor: Transparency factor for the background area.
Foreground Area Transparency Factor: Transparency factor for the foreground area.
Background Line Transparency Factor: Transparency factor for the background line.
Foreground Line Transparency Factor: Transparency factor for the foreground line.
Custom Transparency: Transparency of the custom colors.
Total Gradient Steps: The maximum amount of steps supported for a gradient calculation is 256.
Fast Bullish Color: The color of the fast bullish line.
Normal Bullish Color: The color of the normal bullish line.
Slow Bullish Color: The color of the slow bullish line.
Fast Bearish Color: The color of the fast bearish line.
Normal Bearish Color: The color of the normal bearish line.
Slow Bearish Color: The color of the slow bearish line.
Bullish Divergence Signals: The color of the bullish divergence signals.
Bearish Divergence Signals: The color of the bearish divergence signals.
█ ACKNOWLEDGEMENTS
@LazyBear - For authoring the original WaveTrend port on TradingView
@PineCoders - For the beautiful color gradient framework used in this indicator
@veryfid - For the inspiration of using mirrored signals for cycle analysis and using multiple lookback windows as proxies for other timeframes
[blackcat] L2 Ehlers Cyber Cycle Trading StrategyLevel: 2
Background
John F. Ehlers introuced Cyber Cycle Trading Strategy in his "Cybernetic Analysis for Stocks and Futures" chapter 4 on 2004.
Function
With cyber cycle alone, the Trigger lags the Cycle by one bar, so that their crossing introduces at least another bar of lag. Finally, Dr Ehler concluded that we can’t execute the trade until the bar after the signal is observed. In total, that means our trade execution will be at least four bars late. If we are working with an eight-bar cycle, that means the signal will be exactly wrong. We could do better to buy when the signal says sell, and vice versa.
The difficulties arising from the lag suggest a way to build an automatic trading strategy. Suppose we choose to use the trading signal in the opposite direction of the signal. That will work if we can introduce lag so the correct signal will be given in the more general case, not just the case of an eight-bar cycle. Therefore, the Cyber Cycle trading strategy was introduced by Dr. Ehlers. It starts exactly the same as the Cyber Cycle Indicator. Dr. Ehlers then introduce the variable Signal, which is an exponential moving average of the Cycle variable. The exponential moving average generates the desired lag in the trading signal. The relationship between the alpha of an exponential moving average and lag is alpha2 = 1/ (Lag+1). This relationship is used to create the variable alpha2 in the code and the variable Signal using the exponential moving average. The trading signals using the variable Signal crossing itself delayed by one bar are exactly the opposite of the trading signals I would have used if there were no delay. But, since the variable Signal is delayed such that the net delay is less than half a cycle, the trading signals are correct to catch the next cyclic reversal. The idea of betting against the correct direction by waiting for the next cycle reversal can be pretty scary because that reversal may “never” happen because the market takes off in a trend. For this reason Dr. Ehlers included two lines of code that are escape mechanisms if we were wrong in our entry signal. These last two Signal lines of code reverse the trading position if we have been in the trade for more than eight bars and the trade has an open position loss.
Key Signal
Cycle ---> Cyber Cycle fast line
Cycle (2) ---> Cyber Cycle slow line
Signal ---> Trading signal fast line
Signal(1) ---> Trading signal slow line
Pros and Cons
100% John F. Ehlers definition translation of original work, even variable names are the same. This help readers who would like to use pine to read his book. If you had read his works, then you will be quite familiar with my code style.
Remarks
The 25th script for Blackcat1402 John F. Ehlers Week publication.
Readme
In real life, I am a prolific inventor. I have successfully applied for more than 60 international and regional patents in the past 12 years. But in the past two years or so, I have tried to transfer my creativity to the development of trading strategies. Tradingview is the ideal platform for me. I am selecting and contributing some of the hundreds of scripts to publish in Tradingview community. Welcome everyone to interact with me to discuss these interesting pine scripts.
The scripts posted are categorized into 5 levels according to my efforts or manhours put into these works.
Level 1 : interesting script snippets or distinctive improvement from classic indicators or strategy. Level 1 scripts can usually appear in more complex indicators as a function module or element.
Level 2 : composite indicator/strategy. By selecting or combining several independent or dependent functions or sub indicators in proper way, the composite script exhibits a resonance phenomenon which can filter out noise or fake trading signal to enhance trading confidence level.
Level 3 : comprehensive indicator/strategy. They are simple trading systems based on my strategies. They are commonly containing several or all of entry signal, close signal, stop loss, take profit, re-entry, risk management, and position sizing techniques. Even some interesting fundamental and mass psychological aspects are incorporated.
Level 4 : script snippets or functions that do not disclose source code. Interesting element that can reveal market laws and work as raw material for indicators and strategies. If you find Level 1~2 scripts are helpful, Level 4 is a private version that took me far more efforts to develop.
Level 5 : indicator/strategy that do not disclose source code. private version of Level 3 script with my accumulated script processing skills or a large number of custom functions. I had a private function library built in past two years. Level 5 scripts use many of them to achieve private trading strategy.
Ehlers Stable Dominant Cycle Length [graylange]Stable Dominant Cycle Length – Adaptive Cycle Detection for Market Timing
This script calculates the dominant cycle length of the market using an improved version of John Ehlers' Hilbert Transform approach. Unlike traditional implementations, this version includes advanced smoothing techniques to reduce noise and prevent erratic spikes, making it more reliable for adaptive cycle-based strategies.
🔥 Key Features:
✅ Noise-Reduced Cycle Detection – Uses a Weighted Moving Average (WMA) detrending method instead of raw Hilbert Transform values to enhance stability.
✅ Adaptive Smoothing – Applies an Exponential Moving Average (EMA) to the instantaneous period, reducing excessive volatility in cycle length calculations.
✅ Phase Wrapping & Constraints – Clamps phase changes to prevent unrealistic cycle swings and division errors.
✅ Dynamic Cycle Adjustment – The dominant cycle length updates in real time, constrained within a reasonable range (6 to 50 bars) to avoid extreme peaks.
📌 How to Use It:
Identify Market Cycles – Use the dominant cycle length to determine optimal trend-following vs. mean-reversion strategies.
Enhance MESA Filters – Apply the detected cycle length to adjust Ehlers’ MESA Adaptive Moving Average (MAMA) dynamically.
Fine-Tune Alpha Settings – Reduce overfitting in cycle-based indicators by basing parameters on a stable dominant cycle estimate.
AuriumFlowAURIUM (GOLD-Weighted Average with Fractal Dynamics)
Aurium is a cutting-edge indicator that blends volume-weighted moving averages (VWMA), fractal geometry, and Fibonacci-inspired calculations to deliver a precise and holistic view of market trends. By dynamically adjusting to price and volume, Aurium uncovers key levels of confluence for trend reversals and continuations, making it a powerful tool for traders.
Key Features:
Dynamic Trendline (GOLD):
The central trendline is a weighted moving average based on price and volume, tuned using Fibonacci-based fast (34) and slow (144) exponential moving average lengths. This ensures the trendline adapts seamlessly to the flow of market dynamics.
Formula:
GOLD = VWMA(34) * Volume Factor + VWMA(144) * (1 - Volume Factor)
Fractal Highs and Lows:
Detects pivotal market points using a fractal lookback period (default 5, odd-numbered). Fractals identify local highs and lows over a defined window, capturing the structure of market cycles.
Trend Background Highlighting:
Bullish Zone: Price above the GOLD line with a green background.
Bearish Zone: Price below the GOLD line with a red background.
Buy and Sell Alerts:
Generates actionable signals when fractals align with GOLD. Bullish fractals confirm continuation or reversal in an uptrend, while bearish fractals validate a downtrend.
The Math Behind Aurium:
Volume-Weighted Adjustments:
By integrating volume into the calculation, Aurium dynamically emphasizes price levels with greater participation, giving traders insight into zones of institutional interest.
Formula:
VWMA = EMA(Close * Volume) / EMA(Volume)
Fractal Calculations:
Fractals are identified as local maxima (highs) or minima (lows) based on the surrounding bars, leveraging the natural symmetry in price behavior.
Fibonacci Relationships:
The 34 and 144 EMA lengths are Fibonacci numbers, offering a natural alignment with price cycles and market rhythms.
Ideal For:
Traders seeking a precise and intuitive indicator for aligning with trends and detecting reversals.
Strategies inspired by Bill Williams, with added volume and fractal-based insights.
Short-term scalpers and long-term trend-followers alike.
Unlock deeper market insights and trade with precision using Aurium!
Fight Or Flight Index [log] - LTF [MethodAlgo]Introduction:
"Fight Or Flight" is a robust yet user-friendly indicator designed for long-term cycle analysis and gauging market sentiment. Excluded from our Premium Indicator Collection, we are delighted to offer this tool to the community for free.
Before Use:
- This is a first-layer analysis tool, identifying potential over/under-valued price areas, not predicting future market movements.
- Tailored for long-term investment analysis. Designed for use on timeframes "1D" and above; unsupported timeframes will display nothing.
- If the asset has less 2 years of data, indicator will display nothing.
Concept:
Fight Or Flight utilizes a 2-year Moving Average (MA) as a baseline (neon white), with reference lines at 2.5x and 5x of the MA (white and neon red). By tracking asset movements through bear and bull market cycles, the indicator simplifies the identification of these cycles for long-term investors.
Instructions:
- Supported timeframes: 1D, 3D, 1W, 2W, 3W, 9W, 1M, 3M, 6M, 12M; auto-adjusts MA parameters for listed timeframes for the same result.
- Recommended to use log chart for clearer views; supports all chart types but functions optimally in log mode. or the upper channel line will look odd (but not wrong).
- Set up advice: Use the indicator in a separate chart with a fixed timeframe.
UI:
- Neon White: Indicates market bottom, a 2-year MA auto-adjusted for the supported timeframe.
- Neon Red: Indicates market top, set at 5x the 2-year MA.
- White: Sits between the top and bottom lines, serving as a support, resistance, or equilibrium line.
- Filled Area: Red (Flight) signals an overheated market, suggesting an exit; White (Fight) denotes an undervalued market, suggesting an possible entry.
Use Case:
Traders can observe price levels in comparison to the MA levels provided by the indicator for cycle analysis:
- Below Neon White: Indicates undervalue, over-pessimistic market conditions; potential for outsized returns.
- Near or above Neon Red: Suggests an overvalued or overexcited market; plan your exit strategy.
Risk Disclaimer:
Trading is inherently risky; this indicator provides indications based on historical data, and past performance does not guarantee future results. Use it as part of your confluence reference and avoid making trading decisions solely based on one indicator.
AMD-PO3-Goldbach levels [promuckaj]This script is developed on time & price, algorithmic market theory that is well explained in the book "Demystifying ICT" by Hopiplaka.
Indicators main features:
*PO3 - Goldbach(IPDA) levels which is based on the size of a price range (dealing range) as a factor of power of three (3^n).
There is PO3 numbers starting from 3 to 177147 as predefined, but also there is field for custom one so that users can experiment.
By selecting the PO3 number script calculate range low and range high using PO3 formula based on the current price and represent it on the chart into multiple levels of Goldbach numbers. At each this levels it is expected to see price that form block, fair value gap etc..., as defined in concept by ICT.
Levels:
Ext => External range
Low => Range low
High => Range high
FVG => Fair value gap
RB => Rejection block
OB => Order block
LV => Liquidity void
BR => Breaker
MB => Mitigation block
*AMD (Accumulation, Manipulation, Distribution) cycles, that can be modified by changing timings and colors.
Using PO3-Goldbach levels to identify where at the current time profile price is, there can be done trades in line with AMD cycles.
Default timings are set for Forex pairs.
*FVG, HIPPO, Displacement is well known parts of a market structure, so those three are also implemented here with some possible changes for them (colors, extension, labels...).
FVG => Fair value gap, imbalances in the market, or when buying and selling are not equal, in most cases can become a magnet for the price.
HIPPO => Hidden interbank price point objective, invention by Hopiplaka to demonstrate meaning of this "hidden" order block. It basically take the wicks of 2 consecutive bars that create a fair value gap.
DISPLACEMENT => It is practically similar to FVG but with option to measure length and strength, where in combination it will calculate and mark candle by looking back to the bars to determine the candle range standard deviation.
FEATURES:
-Multiple PO3 numbers, including special option to set your custom one
-Color and style customization
-Main levels mode, only Low, High and Equilibrium levels
-PO3 table with all PO3 calcs from multiple numbers, and mark the same levels from multiple
-Option to shift DR up or down
-Option to show you always upper/lower main DR levels (Low/High/Eq.)
NOTE:
-First of all special thanks to fxdmn that gives me idea from his indicator, how to present this through my own script.
-GB levels requires the correct symbols price calculation to work properly, everything is done by auto calc, tested well on EURUSD,SP500,DXY,Gold and BTC.
Moonhub Cycle IndexMoonhub Cycle Index is a composite index derived from three popular technical analysis indicators: Moving Average Convergence Divergence (MACD), Schaff Trend Cycle (STC), and Detrended Price Oscillator (DPO). The indicator is designed to help identify potential trends and market sentiment by combining the unique characteristics of each indicator.
Key components of the indicator include:
Input Parameters:
COEMA Length (len_DIema): The length of the Exponential Moving Average (EMA) applied to the Custom Index. Default is set to 9.
COSMA Length (len_DIsma): The length of the Simple Moving Average (SMA) applied to the Custom Index. Default is set to 30.
Indicators:
MACD: A momentum oscillator that shows the relationship between two moving averages of a security's price. It is calculated using the difference between the 12-period and 26-period EMA, and a 9-period EMA (signal line) of the MACD.
STC: A cyclic indicator that identifies cyclical trends in the market. It is calculated using the Stochastic oscillator formula applied to the close, high, and low prices over a 10-period lookback window.
DPO: A price oscillator that eliminates the trend from price data to focus on underlying cycles. It is calculated using a custom function that shifts the price by half the length and subtracts the SMA from the shifted price.
Custom Index: The composite index is calculated by taking the average of the MACD line, STC, and DPO.
COEMA and COSMA: Exponential and Simple Moving Averages applied to the Custom Index using the lengths specified by the input parameters (len_DIema and len_DIsma).
Plots: The Custom Index, COEMA, and COSMA are plotted with different colors and line widths to visualize their interaction and provide insights into potential market trends.
This Custom Index Indicator can be useful for traders who want to analyze the market using a combination of these indicators to make more informed decisions. It can also help identify potential trends and market sentiment by combining the unique characteristics of each indicator.
Price Action AverageThis indicator is perfect for scalping in 1 minute, it consists of a channel and a line that is made up of the average of the highs and lows of the price in 12 and 64 cycles.
The channel has as its center a 7 cycles SMA, when the average line (Called Signal, the purple one) crosses the upper band it is time to make a Long.
If it crosses the lower band it is time to make a short, if the line returns to the channel a signal appears to close the operation.
The indicator works with all timeframes, I use it on the 1 hour chart and I do the trades in 1 minute.
PA-Adaptive TRIX Log [Loxx]PA-Adaptive TRIX Log is a Phase Accumulation Adaptive TRIX Log indicator. This adaptation smooths the signal to catch larger trends.
What is TRIX?
TRIX is a momentum oscillator that displays the percent rate of change of a TEMA . It was developed in the early 1980's by Jack Hutson, an editor for "Technical Analysis of Stocks and Commodities" magazine. With its triple smoothing, TRIX is designed to filter insignificant price movements. In his article he uses a logarithm of a price (which is in many versions, left out).
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.
Included
Bar coloring
2 signal options
Alerts
Cyclic Smoothed RSI MTFAdaptive cyclic smoothed Relative Strength Indicator (csRSI MTF)
The cyclic smoothed RSI MTF indicator is an enhancement of the RSI , adding zero-lag smoothing, adaptive oversold/overbought bands and period color highlighting from higher timeframe to filter signals.
Providing the following advanced features:
using the current dominant cycle length as input for the indicator to ensure more accurate change in trends,
additional smoothing without introducing lag and maintaining clear sharp turns for signal generation,
adaptive upper and lower bands to avoid whipsaw trades and adapt the indicator to trending/cyclic conditions,
using higher time-frame csRSI oversold/overbought conditions to automatically highlight time windows with green/red backgrounds on the indicator panel for signal filtering and/or alert rules,
can be used to trigger alerts on your key symbols to get informed when a red/green windows are reached.
The following common problems with standard indicators are solved by this indicator:
First, normal indicators introduce a lot of false signals due to their noisy signal line. Second, to compensate for the noise, one would normally try to add some smoothing. But this only results in adding more delay to the indicator, which makes it almost useless. Third, oscillators contain static threshold levels to define oversold/overbought conditions. However, the market is not static and changes between trending and cycling periods. In trending periods, these static oversold/overbought levels are useless ore will trigger too much whipsaw trades. Finally, indicators don't take their state from other timeframes into account to filter signals.
All four problems described above are solved by the developed adaptive cyclic RSI with embedded MTF period highlighting.
Examples
S&P500 EMini Futures - csRSI 2H chart / 1D filter example signals
S&P E-Mini Futures 2h chart with daily higher time-frame filtering period for the csRSI, showing the standard RSI in the lower panel for signal comparison, signals from the csRSI are marked on the price chart
Bitcoin BTC /USD - csRSI 2H chart / 1D filter example signals
Bitcoin BTC /USD 2h chart with daily higher time-frame filtering period for the csRSI, signals marked
EUR/USD Forex - csRSI 20min chart / 2h filter example signals
EUR/USD 20min chart with 2H higher time-frame filtering period for the csRSI, signals marked
Info:
All three examples are setup with the basic standard settings and no additional parameter adjustments. The placed arrows on the price/indicator panel and the projection price areas have been added manually to visualize the signals for an discretionary trading approach. They are derived based on standard technical indicator oscillator readings (signal turn above/below bands). Due to the nature of the indicator (ultra-smooth, sharp curves, dynamic bands), these signals are easy to spot, and will help to avoid whipsaw trades in volatile conditions.
Settings & Parameter
The Inputs section allows you to select the time frame for the indicator signals. We recommend keeping the indicator time-frame according to your chart time frame ("Same as chart"). The cycle length allows to improve the signals by entering the dominant cycle length of the analyzed dataset. This parameter is optional if the current dominant cycle is not known. In that case, leave it at 20. The dominant cycle length can even improve the indicator signal generation. The examples above have not been optimized by using the dominant cycle length and just used the standard setting of 20.
The MTF CYCLE FILTER area is used to set the time-frame used as filter to plot the colored indicator background in red and green areas when the higher time-frame indicator is above (red) or below (green) the dynamic bands. These indicate the period of time with high probability to look for signals on the main indicator line.
The MTF Resolution parameter input is important for generating the highlighted red/green areas on the indicator panel. You must enter a higher time-frame than your indicator time-frame in order to get the reliable highlighting. We recommend the following combinations of trading time-frame and filter time-frame resolutions:
Chart Timeframe | MTF Indicator Highlighting Resolution
------------------------------------------------------------------------
20 min | 2 h
2 h | 1 d
You can enter the current dominant cycle length on the chosen higher time-frame resolution to even further optimize the indicator accuracy in the field "MTF CYCLE FILTER - Cycle Length".
The Style sections allows to active/de-active individual plots. The standard setting disables the higher time-frame csRSI indicator which is only used to indicate the colored areas. If required, you can also enable the MTF indicator and adaptive bands to be plotted in the same indicator panel. The values shown in the style section also indicate which values are available for individual alert generation.
Automatic Signals & Alerts
It is possible to create your own automatic signals with the csRSI MTF indicator using the TradingView alert function. Click on the three dots "More" beside the indicator name label and select "Add Alert on csRSI ..." from the context menu. For example, if you want to receive an alert when the high probability periods (red/green highlighted areas) have been reached for a symbol without manually watching the indicator panel, you can set up a custom alert. The csRSI indicator provides the raw values necessary to set up your alarm conditions. Set the "CSRSI MTF" as the value for the "Out of Channel" condition and select the "HigBand MTF" and "LowBand MTF" indicator values as the upper and lower limit parameters in the alarm's dialog box. Once you have set up this alarm, you will not need to monitor your charts manually. The TradingView alert will inform you as soon as an important time zone is reached. These are the situations when you would open the chart and watch for trigger signals on the indicator line. If you set up this alert as an email, you can even focus on other things and let the csRSI MTF highlighter condition alert you when you should pay attention to the trading chart.
Usage & Trade Signals
Classic rules apply as with every technical oscillator. In addition use this indicator to identify the following conditions:
Indicator turns above/below the adaptive upper and lower bands (expected trend reversals)
Indicator crosses below upper band / crossed above lower band (start of trend reversal)
Indicator crosses above upper band / crossed below lower band (trend continuation/confirmation)
Divergence between price / indicator indicate strong signal confidence
Hidden divergences between price/indicator indicate string signal confidence
After strong price movements, wait for the second signal confirmed by a divergence
Use the mentioned conditions in the highlighted red/green periods indicated by the MTF settings
Purpose & Disclaimer
This indicator is not designed for use as an automated trading strategy. This is an improved technical indicator using the dominant cycle to provide its advanced features. The basic applications of technical analysis for using oscillators apply. The script is intended for use in discretionary trading and can be used as a part of automated systems. Indicator signal failures will occur as you should expect with every technical indicator. If you are not sure if this indicator might help your trading style, please try and check our open source public version which will give you basic understanding upfront.
Basic open-source public version
This indicator is an advanced version of our public available open-source cyclic smoothed RSI indicator named "RSI cyclic smoothed v2". The advanced invite-only version provides fully automatic time frame highlighting by using a cyclically smoothed RSI from a higher time frame to indicate time frames with high probability signals. These high probability windows are highlighted when the indicator from the higher time frame is in dynamic overbought or oversold territory. You will find the basic open-source public version here below for your own review:
How to get access
Please check the "authors instructions" section for further details.
Morphed Sine WaveIntroduction
If you rescale a sine wave to the price you will need to correlate it with it in order to show good results, today i present a different method that does not involve correlation to "morph" a sine wave to the price in order to provide forecast's and highlight market periodic patterns.
Parameters
length control the period of the sine wave, power control the "morphing" amount, if you see for example that the results are going nuts try to increase power , if the results are just the price and the delayed price try to decrease power .
power = 1
power = 100
Those settings might be different depending on which market you are in.
Various Uses
You can do a lot of things with this indicator, use filters as source :
Use the indicator as source for oscillators in order to create cycles indicators :
And certainly many more things
Conclusion
I presented a way to morph a sine wave to the price i order to highlight cycles. You can use any function that return a value between -1 and 1 instead of sin , this can be a scaled rsi/stochastic or correlation coefficient, its up to you :)
If you need help don't hesitate to commend or pm me. I hope you will like the indicator and that it will inspire you to make great things.
Thanks for reading !
VACPWelles Wilder (delta phenomenon) a 4-day rotation indicator
PVAC is the acronym Alan uses for a four-day rotation cycle. The cycle itself is circularly continuous every days of the week, forever, including every holiday. Thus if, for instance, Monday was a P, Tuesday is V, Wednesday is A, Thursday is C. At this point the cycle repeats, with Friday being P, Saturday being V, Sunday being A, and the following Monday being C.
Having started, the cycle never changes. While each day tends to have the characteristics shown below, like all cycle tools, there are inversions, which will last a cycle or at times even more, and have reasonable odds of inverting regularly.
A trader who wants to incorporate a four-day rotation cycle into their work is encouraged to study for themselves whether this adds value.
Day: V-day Color: Red Characteristics: Closes well for bulls; Use your fleece bars Bar8 and Bar11; Bar8 open often a V-day return target; 'V' return comes early in day in bear moves, late in day in bullish moves
Day: A-day Color: Blue Characteristics: Closes poorly for bulls; Use your fleece bars 8 and 11; Generally 'A' shaped, but may have a kick-leg after 3pm
Day: C-day Color: Orange Characteristics: Consolidation day, aka 'consoly' day. It may not chop, but it may have an
accumulation or distribution quality to the action; Trade often and trade fast; Pattern traders fade 4HHs and 4LLs with backfill/pullbacks 3 bars later; Apexes and angulars tend to have less importance; Numerical traders trade after Bar8 open and use support one horizontal below, resistance one horizontal above; C-day opens often at the 25%; The afternoon action tends to be opposite to the morning action
Day: P-day Color: Green Characteristics: Often a trend day. Find the trend and enter it; Often opens at the 75%; Trade P-days against a quartile; Watch for price to be above/below the first apex: buy above or sell below ; Do not fade dead zone, minimal trading
Bitcoin Halving Cycle Strategy ProBitcoin Halving Cycle Strategy Pro - Advanced Market Cycle Analysis Tool
This professional indicator analyzes Bitcoin's 4-year halving cycles using precise mathematical calculations. It identifies bull and bear market phases based on 500 days before and 560 days after each halving event, providing traders with data-driven market cycle insights.
Key Features:
• Automatic Bull/Bear Market Zone Detection with color-coded areas
• Historical Halving Analysis (2012-2028) with future projections
• Live Performance Tracking during bull phases (returns, max drawdown)
• Customizable cycle parameters (days before/after halving)
• Interactive info table showing current cycle phase and metrics
• Visual timeline markers for halving dates and cycle boundaries
Perfect for long-term Bitcoin investors, cycle analysts, and traders who want to understand market psychology and timing based on historical halving patterns. Uses proven 1060-day cycle theory backed by empirical data.
Wyckoff PhaseMap Overlay [FxalgoxPro]📊 Wyckoff PhaseMap Overlay
Professional Wyckoff Market Cycle Indicator for TradingView
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 OVERVIEW
The Wyckoff PhaseMap Overlay is a sophisticated indicator that automatically identifies and visualizes the four phases of the Wyckoff Market Cycle on your price chart, combining price action analysis with volume confirmation to detect:
Phase 1: Accumulation (Cause)
Phase 2: Mark Up (Effect)
Phase 3: Distribution (Cause)
Phase 4: Mark Down (Effect)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 KEY FEATURES
📈 Phase Detection
Accumulation : Identifies selling climax (SC), automatic rally (AR), secondary tests (ST), and springs
Mark Up : Detects sustained uptrend with higher highs/higher lows structure
Distribution : Recognizes buying climax (BC), UTAD (upthrust after distribution), and range formation
Mark Down : Confirms breakdown with volume and downtrend structure
🎨 Visual Elements
Phase Background Colors : Optional color-coded backgrounds for each phase
Range Lines : Dynamic support/resistance levels during accumulation and distribution
Event Markers : Clear labels for Spring, UTAD, JTC (Jump the Creek), and breakdowns
Trend MA Overlay : Moving average for trend confirmation
Phase Labels : Large, descriptive labels when phases change
📊 Dashboard
Real-time phase status
Volume climax indicator
Event counters (Spring, UTAD, JTC)
Customizable position and size
🔔 Alerts
Phase change notifications
Spring detection
UTAD detection
Jump the Creek confirmation
Breakdown signals
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚙️ CONFIGURATION
Wyckoff Phases (Main Settings)
Parameter | Default | Description
---------------------------- | ------- | -------------
Trend MA Length | 50 | Moving average for trend detection
Volume Climax Threshold | 1.5 | Multiplier for average volume to detect climax events
Range Detection Length | 14 | Lookback period for range identification
Phase 1: Accumulation
Toggle accumulation phase display
Show/hide Spring events
Show/hide AR (Automatic Rally) and ST (Secondary Test)
Customize phase and spring colors
Phase 2: Mark Up
Toggle mark up phase display
Show/hide Jump The Creek (JTC) events
Customize phase and JTC colors
Phase 3: Distribution
Toggle distribution phase display
Show/hide UTAD events
Show/hide BC (Buying Climax)
Customize phase and UTAD colors
Phase 4: Mark Down
Toggle mark down phase display
Customize phase and breakdown colors
Visual Settings
Show Phase Labels : Display large phase transition labels
Show Event Markers : Display Spring, UTAD, JTC markers
Show Phase Background : Color-code background by current phase
Dashboard
Show Dashboard : Toggle statistics panel
Position : Top Right / Bottom Right / Bottom Left
Size : Tiny / Small / Normal
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🧠 HOW IT WORKS
Phase Detection Logic
1️⃣ Accumulation (Cause)
Triggers:
- Selling climax detected (high volume + down move)
- Price enters range-bound consolidation
- Low volume compression
- Spring: False breakdown below support with low volume
2️⃣ Mark Up (Effect)
Triggers:
- Jump The Creek (JTC): Breakout from accumulation range
- Volume confirms breakout (>1.3x average)
- Higher highs and higher lows structure
- Price above trend MA
3️⃣ Distribution (Cause)
Triggers:
- Buying climax detected (high volume + up move)
- Price enters range-bound consolidation after uptrend
- UTAD: False breakout above resistance with volume
- Range compression
4️⃣ Mark Down (Effect)
Triggers:
- Breakdown from distribution range
- Volume confirms breakdown (>1.3x average)
- Lower lows and lower highs structure
- Price below trend MA
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 EVENT DEFINITIONS
Event | Phase | Description | Visual
-------- | ------------- | ------------------------------------------------ | -------------------------
SC | Accumulation | Selling Climax - panic selling with high volume | Volume spike + price drop
AR | Accumulation | Automatic Rally - bounce from oversold | Recovery move
ST | Accumulation | Secondary Test - retest of lows | Low volume test
Spring | Accumulation | False breakdown below support | 🟢 Label below
JTC | Mark Up | Jump The Creek - confirmed breakout | 🔵 Label (transition)
BC | Distribution | Buying Climax - euphoric buying with high volume | Volume spike + price rise
UTAD | Distribution | Upthrust After Distribution - false breakout | 🟠 Label above
SOW | Mark Down | Sign of Weakness - confirmed breakdown | 🔴 Label (transition)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 USE CASES
For Traders
Identify accumulation zones for potential long entries
Recognize distribution zones for potential short entries or exits
Confirm trend changes with phase transitions
Avoid false breakouts (Springs and UTADs)
Time entries using Jump The Creek signals
For Analysts
Market structure analysis across multiple timeframes
Volume-price divergence identification
Institutional behavior tracking (accumulation/distribution)
Cycle completion analysis
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎨 RECOMMENDED SETTINGS
For Swing Trading (Daily/4H)
Trend MA Length: 50
Volume Climax Threshold: 1.5
Range Detection Length: 14
For Intraday Trading (1H/15m)
Trend MA Length: 20
Volume Climax Threshold: 2.0
Range Detection Length: 10
For Long-term Investors (Weekly)
Trend MA Length: 100
Volume Climax Threshold: 1.3
Range Detection Length: 20
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 WYCKOFF METHOD RESOURCES
The indicator is based on Richard Wyckoff's market cycle theory:
Accumulation → Smart money accumulates while retail panics
Mark Up → Price rises as smart money distributes to late buyers
Distribution → Smart money exits while retail buys
Mark Down → Price falls as retail holds losing positions
Learn More:
Wyckoff Analytics
Market cycle analysis
Volume Spread Analysis (VSA)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ IMPORTANT NOTES
Volume Required : Indicator requires volume data (won't work on some Forex brokers without volume)
Timeframe : Best results on 1H, 4H, Daily, Weekly
Confirmation : Always combine with other analysis methods
Context : Phase detection improves with clean, trending markets
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🐛 TROUBLESHOOTING
Q: Why aren't any phases showing?
Ensure volume data is available for your symbol
Try adjusting Volume Climax Threshold (lower = more sensitive)
Check if Show Phase Background is enabled
Q: Too many false signals?
Increase Volume Climax Threshold for stricter detection
Increase Range Detection Length for better range identification
Use higher timeframes (4H/Daily)
Q: Dashboard not showing?
Check Show Dashboard is enabled in settings
Ensure panel isn't off-screen (try different position)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
👨💻 CREDITS
Developer : Fxalgox
Method : Richard Wyckoff Market Cycle Theory
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 TIPS FOR BEST RESULTS
Combine with Market Context : Use alongside market structure analysis
Multi-timeframe Confirmation : Check higher timeframe phase alignment
Volume is Key : Pay attention to volume climax indicators in dashboard
Be Patient : Wait for phase confirmations before taking action
Use Alerts : Set up alerts for phase changes and key events
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Happy Trading! 📈
Remember: This indicator is a tool for analysis, not financial advice. Always manage risk appropriately.