Asymmetric Decay Oscillator Asymmetric Decay · 4-Year Cycle · Full Projection to 2037
Asymmetric Decay Model | T = 4.00yr | t₀ = Nov 2013
Cycle period
4.00 yr
Top-to-top confirmed
Equilibrium μ
0.380
Long-run mean
Next bottom
Oct 2026
Target 0.265–0.295
Next major top
Oct 2029
Target 0.460–0.490
Skew factor α
-0.460
Temporal phase warp
Four-year cycle timeline — 2011 to 2037
Full cycle model — 2010 to 2032
Historical oscillator
Projection (model)
Decay envelope ±
Model curve
Equilibrium μ = 0.380
Historical floor 0.22
Bottom zone
Top zone
Amplitude compression — cycle peaks
C1 Nov 2013
0.880
Δ +0.500
C2 Dec 2017
0.750
Δ +0.370
C3 Nov 2021
0.620
Δ +0.240
C4 Oct 2025
0.540
Δ +0.160
C5 Oct 2029 ⟶
~0.47
~+0.090
Convergence horizon — envelope collapse
Oscillator regime phases
HIGH AMPLITUDE 2011–2022
TRANSITION '22–'30
COMPRESSION '30–'36
EQUIL '36+
Top decay: 68% per 4yr cycle
Bottom rise: 9% per 4yr cycle
Equilibrium convergence ≈ 2036
Major cycle tops — descending envelope
Date
Actual
Env. Top
Delta
Miss
Status
Apr 2013 *
0.950
—
—
—
Sub-peak
Nov 2013 C1
0.880
0.897
−0.017
0
Touched
Dec 2017 C2
0.750
0.732
+0.018
0
Touched
Feb 2021 **
0.660
—
—
—
Local top
Nov 2021 C3
0.620
0.619
+0.001
−0.028
−0.028 miss
Mar 2024 **
0.570
—
—
—
Local top
Oct 2025 C4
0.540
0.543
−0.003
−0.052
−0.052 miss
Oct 2029 C5 ⟶
~0.460–0.490
0.491
TBD
~−0.065
Projected
Oct 2033 C6 ⟶
~0.430–0.460
0.455
TBD
~−0.080
Projected
* Apr 2013: sub-peak within C1, not a structural top ** Local tops within cycle
Major cycle bottoms — rising floor
Date
Actual
Env. Bot
Delta
Status
Nov 2011 C0
0.220
0.211
+0.009
Floor hit
Jan 2015 C1
0.220
0.224
−0.004
Floor hit
Dec 2018 C2
0.220
0.238
−0.018
Floor hit
Jul 2022 C3
0.260
0.250
+0.010
+0.04 above
Jun 2026 → now
~0.448
0.527
declining
Descending
Oct 2026 C4 ⟶
~0.265–0.295
0.262
~+0.02
Projected
Oct 2030 C5 ⟶
~0.290–0.320
0.273
~+0.03
Projected
Oct 2034 C6 ⟶
~0.315–0.345
0.283
~+0.04
Projected
Bottom floor rising ~0.01–0.02 per cycle · Asymmetric decay confirmed
Cycle 5 forward projection · Jun 2026 → Oct 2029
Current phase
↓ Declining
Post Oct '25 major top Osc ~0.448 · Jun 2026
Next bottom
Oct 2026
Target range: 0.265–0.295 ~4 months away · most critical
Recovery peak
Oct 2029
Major top C5 confirmed Target: 0.460–0.490
Next bottom C5
Oct 2030
Post-peak pullback Target: ~0.290–0.320
Model validation threshold: The Oct 2026 bottom is the most important near-term data point. If the oscillator troughs between 0.265–0.295, the asymmetric decay model is confirmed for another cycle. A reading below 0.240 signals an accelerating regime change (macro shock/flush reset analogous to 2018). A reading above 0.320 means the bottom envelope is rising faster than modeled — bullish structural compression.
Oct 2029 top miss factor: The growing divergence between actual tops and the upper envelope is accelerating: C3 missed by −0.028, C4 by −0.052, C5 projected miss ~−0.065. This means the envelope top at Oct 2029 (~0.491) will not be reached — expect the actual oscillator peak near 0.460–0.475. After this, the oscillator converges to μ ≈ 0.380 by approximately 2035–2037 and the signal loses its cyclical predictive power.
The 4-year cycle is top-to-top: Nov 2013 → Nov 2017 → Nov 2021 → Oct 2025 → Oct 2029. All major structural peaks fall within ±1 month of the T=4.00yr rhythm. This is the fundamental clock of the instrument.
02
Decay is deeply asymmetric: λ_top = 0.0963 vs λ_bot = 0.0242 — the top envelope decays 3.98× faster than the bottom envelope rises. The market is losing upside potential far faster than it is building downside resilience.
03
The historical floor 0.22 is permanently broken: The model lower envelope no longer reaches 0.22 after 2020. 2022's bottom at 0.260 was the first signal. Oct 2026 projects to 0.265–0.295. The instrument will never touch 0.22 again under normal conditions.
04
A secondary miss factor is emerging: Starting C3 (2021), actual tops miss the envelope by growing amounts: −0.028, −0.052, projected −0.065. This represents a momentum decay layer above the envelope — the market peaks earlier and lower than the theoretical maximum each cycle.
05
The double-peak structure (Apr → Nov 2013, Feb → Nov 2021, Mar 2024 → Oct 2025) is a recurring feature: Each major 4-year top is preceded by a local top ~6–8 months prior that touches or slightly exceeds the cycle high. This is a reliable signal that the structural top is forming.
06
Equilibrium convergence by ~2035–2037: At the current asymmetric decay rates, the oscillating amplitude collapses to below 0.05 around 2035. After this point, the oscillator value flatlines near 0.38 and loses its cyclical signal entirely — the instrument enters terminal maturity.
Pine Script v6 — complete asymmetric model with projection zones
Paste into TradingView on your SMA Division indicator pane. Paints both envelopes, oscillator, all historical labels, future projection zones, and a live readout table.
Pine Script · v6 · Asymmetric Dampened Oscillation Model
//@version=6
indicator("SMA Division · Decay Model v2 — Asymmetric", overlay=false, max_lines_count=500, max_labels_count=200)
// ════════════════════════════════════════════════════════════════════
// INPUTS
// ════════════════════════════════════════════════════════════════════
i_fast = input.int(5, "Fast SMA length", minval=1, group="Oscillator")
i_slow = input.int(350, "Slow SMA length", minval=1, group="Oscillator")
i_env = input.bool(true, "Show asymmetric envelopes", group="Display")
i_model = input.bool(true, "Show model oscillator curve", group="Display")
i_eq = input.bool(true, "Show equilibrium line", group="Display")
i_floor = input.bool(true, "Show historical floor 0.22", group="Display")
i_labels = input.bool(true, "Show cycle labels", group="Display")
i_zones = input.bool(true, "Show projection zones", group="Display")
i_table = input.bool(true, "Show live data table", group="Display")
// ════════════════════════════════════════════════════════════════════
// OSCILLATOR CALCULATION
// ════════════════════════════════════════════════════════════════════
sma_fast = ta.sma(close, i_fast)
sma_slow = ta.sma(close, i_slow)
osc = sma_fast / (sma_slow * 2)
// ════════════════════════════════════════════════════════════════════
// ASYMMETRIC DAMPENED OSCILLATION MODEL
//
// TOPS: E_top(t) = μ + A_top · exp(−λ_top · Δt)
// BOTTOMS: E_bot(t) = μ − A_bot · exp(−λ_bot · Δt)
// CURVE: f(t) = μ + A_eff(t) · cos(ω · Δt)
//
// Key insight: λ_top = 3.98 × λ_bot (asymmetric decay)
// This means tops compress 4x faster than bottoms rise
// ════════════════════════════════════════════════════════════════════
// Parameters (calibrated from MSE fit to all 4 confirmed cycle tops & 4 bottoms)
mu = 0.380 // Long-run equilibrium
A_top = 0.5000 // Top envelope initial amplitude
lam1 = 0.0690 // Top linear decay constant
lam2 = 0.00240 // Top quadratic decay acceleration
A_bot = 0.1610 // Bottom envelope initial amplitude
lam_bot = 0.0242 // Bottom decay constant (per year)
T = 4.0 // Cycle period (years)
omega = 2 * math.pi / T // Angular frequency = 1.5708 rad/yr
t0 = 2013.875 // Epoch: Nov 2013 (first confirmed major top)
alpha = -0.46 // Phase-skew time warping (asymmetric rise/fall)
// Current time in decimal years
bar_yr = year(time) + (month(time) - 1) / 12.0 + (dayofmonth(time) - 1) / 365.25
dt = bar_yr - t0
// Envelope values (Continuous Quadratic Decay for Tops)
e_top = mu + A_top * math.exp(-lam1 * dt - lam2 * math.pow(dt, 2))
e_bot = mu - A_bot * math.exp(-lam_bot * dt)
e_top_adj = e_top // Fully integrated into e_top, no separate miss factor needed!
// Effective amplitude for smooth oscillator curve (geometric blend)
A_eff = 0.5 * (A_top * math.exp(-lam1 * dt - lam2 * math.pow(dt, 2)) + A_bot * math.exp(-lam_bot * dt))
mid_shift = 0.5 * (A_top * math.exp(-lam1 * dt - lam2 * math.pow(dt, 2)) - A_bot * math.exp(-lam_bot * dt))
// Skewed Phase Harmonics (Time Warping for Escalator Up, Elevator Down)
phase = omega * dt - alpha * math.cos(omega * dt)
model_v = mu + mid_shift + A_eff * math.cos(phase)
miss = 0.0 // Deprecated in V2
// ════════════════════════════════════════════════════════════════════
// COLORS
// ════════════════════════════════════════════════════════════════════
c_gold = color.new(#e8b84b, 0)
c_cyan = color.new(#00e5cc, 0)
c_blue = color.new(#3d8ef8, 0)
c_green = color.new(#39d98a, 0)
c_red = color.new(#ff4d6d, 0)
c_purple = color.new(#b57bee, 0)
c_ghost = color.new(#3d5570, 0)
c_mist = color.new(#7a9bb5, 40)
// ════════════════════════════════════════════════════════════════════
// PLOTS
// ════════════════════════════════════════════════════════════════════
// Live oscillator (color-coded: above/below equilibrium)
osc_col = osc > e_top_adj ? color.new(c_gold, 10) :
osc < e_bot ? color.new(c_green, 10) :
osc > mu ? color.new(c_cyan, 20) :
color.new(c_blue, 30)
plot(osc, "SMA Division", color=osc_col, linewidth=2, title="Oscillator")
// Equilibrium line
plot(i_eq ? mu : na, "Equilibrium μ", color=color.new(c_green, 40), linewidth=1, style=plot.style_line)
// Historical floor
plot(i_floor ? 0.22 : na, "Hist. Floor", color=color.new(c_red, 55), linewidth=1, style=plot.style_line)
// Decay envelopes (asymmetric)
p_top = plot(i_env ? e_top : na, "Upper envelope", color=color.new(c_gold, 25), linewidth=1.5, style=plot.style_line)
p_adj = plot(i_env ? e_top_adj : na, "Adj. upper (miss)", color=color.new(c_gold, 55), linewidth=1, style=plot.style_line, linestyle=plot.style_dotted)
p_bot = plot(i_env ? e_bot : na, "Lower envelope", color=color.new(c_green, 25), linewidth=1.5, style=plot.style_line)
fill(p_top, p_bot, color=color.new(c_gold, 93), title="Envelope fill")
// Model oscillator curve
plot(i_model ? model_v : na, "Model curve", color=color.new(c_ghost, 0), linewidth=1, style=plot.style_line, linestyle=plot.style_dashed)
// ════════════════════════════════════════════════════════════════════
// HORIZONTAL REFERENCE LINES
// ════════════════════════════════════════════════════════════════════
hline(0.380, "Equilibrium", color=color.new(#39d98a, 50), linestyle=hline.style_dashed, linewidth=1)
hline(0.220, "Hist. Floor", color=color.new(#ff4d6d, 60), linestyle=hline.style_dotted, linewidth=1)
hline(0.265, "Proj. Bot Low", color=color.new(#3d8ef8, 70), linestyle=hline.style_dotted, linewidth=1)
hline(0.295, "Proj. Bot Hi", color=color.new(#3d8ef8, 70), linestyle=hline.style_dotted, linewidth=1)
// ════════════════════════════════════════════════════════════════════
// PROJECTION ZONES (future shading)
// ════════════════════════════════════════════════════════════════════
// Bottom zone: Aug–Dec 2026 (0.265–0.295)
in_bot_zone = i_zones and bar_yr >= 2026.55 and bar_yr <= 2027.0
bgcolor(in_bot_zone ? color.new(c_blue, 88) : na, title="Proj. bottom zone")
// Top zone: Jul–Dec 2029 (0.460–0.490)
in_top_zone = i_zones and bar_yr >= 2029.5 and bar_yr <= 2030.0
bgcolor(in_top_zone ? color.new(c_cyan, 88) : na, title="Proj. top zone")
// Next bottom zone bands
plot(i_zones and bar_yr >= 2026.3 ? 0.295 : na, "Proj bot upper", color=color.new(c_blue, 45), linewidth=1, style=plot.style_line)
plot(i_zones and bar_yr >= 2026.3 ? 0.265 : na, "Proj bot lower", color=color.new(c_blue, 45), linewidth=1, style=plot.style_line)
// Next top zone bands
plot(i_zones and bar_yr >= 2028.5 ? 0.490 : na, "Proj top upper", color=color.new(c_cyan, 45), linewidth=1, style=plot.style_line)
plot(i_zones and bar_yr >= 2028.5 ? 0.460 : na, "Proj top lower", color=color.new(c_cyan, 45), linewidth=1, style=plot.style_line)
// ════════════════════════════════════════════════════════════════════
// CYCLE LABELS — Historical events
// ════════════════════════════════════════════════════════════════════
lbg = color.new(#05070a, 10)
if i_labels
// Structural major tops (4-yr cycle)
if year(time)==2013 and month(time)==11 and dayofmonth(time)<=7
label.new(bar_index, 0.900, "▲ C1 TOP\nNov 2013\n0.880", style=label.style_label_down, color=lbg, textcolor=c_gold, size=size.small)
if year(time)==2017 and month(time)==12 and dayofmonth(time)<=7
label.new(bar_index, 0.770, "▲ C2 TOP\nDec 2017\n0.750", style=label.style_label_down, color=lbg, textcolor=c_gold, size=size.small)
if year(time)==2021 and month(time)==11 and dayofmonth(time)<=7
label.new(bar_index, 0.640, "▲ C3 TOP\nNov 2021\n0.620 (−0.028)", style=label.style_label_down, color=lbg, textcolor=color.new(c_gold, 20), size=size.small)
if year(time)==2025 and month(time)==10 and dayofmonth(time)<=7
label.new(bar_index, 0.560, "▲ C4 TOP\nOct 2025\n0.540 (−0.052)", style=label.style_label_down, color=lbg, textcolor=color.new(c_gold, 35), size=size.small)
// Local sub-peaks
if year(time)==2013 and month(time)==4 and dayofmonth(time)<=7
label.new(bar_index, 0.970, "◆ Sub-peak\nApr 2013 · 0.950", style=label.style_label_down, color=lbg, textcolor=c_mist, size=size.tiny)
if year(time)==2021 and month(time)==2 and dayofmonth(time)<=7
label.new(bar_index, 0.680, "◆ Local top\nFeb 2021 · 0.660", style=label.style_label_down, color=lbg, textcolor=c_mist, size=size.tiny)
if year(time)==2024 and month(time)==3 and dayofmonth(time)<=7
label.new(bar_index, 0.588, "◆ Local top\nMar 2024 · 0.570", style=label.style_label_down, color=lbg, textcolor=c_mist, size=size.tiny)
// Major bottoms
if year(time)==2011 and month(time)==11 and dayofmonth(time)<=7
label.new(bar_index, 0.196, "▼ C0 BOT\nNov 2011 · 0.220", style=label.style_label_up, color=lbg, textcolor=c_green, size=size.small)
if year(time)==2015 and month(time)==1 and dayofmonth(time)<=7
label.new(bar_index, 0.196, "▼ C1 BOT\nJan 2015 · 0.220", style=label.style_label_up, color=lbg, textcolor=c_green, size=size.small)
if year(time)==2018 and month(time)==12 and dayofmonth(time)<=7
label.new(bar_index, 0.196, "▼ C2 BOT\nDec 2018 · 0.220", style=label.style_label_up, color=lbg, textcolor=c_green, size=size.small)
if year(time)==2022 and month(time)==7 and dayofmonth(time)<=7
label.new(bar_index, 0.236, "▼ C3 BOT\nJul 2022 · 0.260", style=label.style_label_up, color=lbg, textcolor=color.new(c_green, 25), size=size.small)
// Projected events
if year(time)==2026 and month(time)==10 and dayofmonth(time)<=7
label.new(bar_index, 0.240, "⟶ PROJ C4 BOT\nOct 2026\n0.265–0.295", style=label.style_label_up, color=color.new(#0a1830, 0), textcolor=c_blue, size=size.normal)
if year(time)==2029 and month(time)==10 and dayofmonth(time)<=7
label.new(bar_index, 0.500, "⟶ PROJ C5 TOP\nOct 2029\n0.460–0.490", style=label.style_label_down, color=color.new(#0a1830, 0), textcolor=c_cyan, size=size.normal)
if year(time)==2030 and month(time)==10 and dayofmonth(time)<=7
label.new(bar_index, 0.265, "⟶ PROJ C5 BOT\nOct 2030 · ~0.290", style=label.style_label_up, color=color.new(#0a1830, 0), textcolor=c_blue, size=size.small)
if year(time)==2033 and month(time)==10 and dayofmonth(time)<=7
label.new(bar_index, 0.468, "⟶ PROJ C6 TOP\nOct 2033 · ~0.440", style=label.style_label_down, color=color.new(#0a1830, 0), textcolor=color.new(c_cyan, 30), size=size.small)
// ════════════════════════════════════════════════════════════════════
// LIVE DATA TABLE (top-right)
// ════════════════════════════════════════════════════════════════════
var table T = table.new(position.top_right, 2, 12,
bgcolor=color.new(#050709, 5),
border_width=1, border_color=color.new(#1a2d42, 0),
frame_width=1, frame_color=color.new(#1a2d42, 0))
if barstate.islast and i_table
// Header
table.cell(T,0,0,"DECAY MODEL", text_color=c_gold, text_size=size.tiny, bgcolor=color.new(#0d1520,0))
table.cell(T,1,0,"VALUE", text_color=c_gold, text_size=size.tiny, bgcolor=color.new(#0d1520,0))
// Oscillator
table.cell(T,0,1,"Oscillator", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,1,str.tostring(osc,"#.####"), text_color=c_cyan, text_size=size.tiny)
// Model
table.cell(T,0,2,"Model f(t)", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,2,str.tostring(model_v,"#.####"), text_color=color.new(#7a9bb5,0), text_size=size.tiny)
// Upper envelope (raw)
table.cell(T,0,3,"E_top", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,3,str.tostring(e_top,"#.####"), text_color=c_gold, text_size=size.tiny)
// Upper envelope (adj)
table.cell(T,0,4,"E_top adj", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,4,str.tostring(e_top_adj,"#.####"), text_color=color.new(c_gold,40), text_size=size.tiny)
// Lower envelope
table.cell(T,0,5,"E_bot", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,5,str.tostring(e_bot,"#.####"), text_color=c_green, text_size=size.tiny)
// Equilibrium
table.cell(T,0,6,"Equil. μ", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,6,"0.380", text_color=c_cyan, text_size=size.tiny)
// Amplitude
table.cell(T,0,7,"A_eff(t)", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,7,str.tostring(A_eff,"#.####"), text_color=c_purple, text_size=size.tiny)
// Miss factor
table.cell(T,0,8,"Miss factor", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,8,str.tostring(miss,"#.####"), text_color=miss<0?c_red:c_green, text_size=size.tiny)
// Dist to equilibrium
d_eq = osc - mu
table.cell(T,0,9,"Δ to μ", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,9,str.tostring(d_eq,"#.####"), text_color=d_eq>0?c_gold:c_blue, text_size=size.tiny)
// Cycle phase
phase_rad = math.mod(omega*dt, 2*math.pi)
phase_pct = phase_rad / (2*math.pi) * 100
table.cell(T,0,10,"Cycle phase", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,10,str.tostring(phase_pct,"#.#")+"%", text_color=c_purple, text_size=size.tiny)
// Year
table.cell(T,0,11,"Bar year", text_color=c_mist, text_size=size.tiny)
table.cell(T,1,11,str.tostring(bar_yr,"####.###"), text_color=color.new(#7a9bb5,0), text_size=size.tiny)