Concepts: reading the cycles
A cycle is a repeating wave in a series: a rise from a trough to a peak and a fall back, over and over, with a roughly constant length. Real series carry several cycles at once, of different lengths and sizes, on top of a trend. Cycles IQ separates them: it removes the trend, measures the spectrum of the rest, keeps the cycles that are statistically genuine and tells you where each one stands.
Your data
- A series of values, oldest first. Closing prices, an indicator, an economic series: any regularly spaced values.
- At least 101 values for every analysis. Longer is better: a cycle is only measured reliably when the series holds several repetitions of it.
- Bars, not days. Every length is counted in bars of your series: a 40-bar cycle on daily data is about two trading months, on weekly data about nine months.
The cycle scan
The cycle scanner returns every significant cycle in a length window you choose (minCycleLength,
maxCycleLength). For each cycle:
| Field | Meaning |
|---|---|
cycleLength |
The period, in bars. |
amplitude |
The size of the wave, in the units of your series. |
strength |
The cycle's weight in the spectrum: a raw number, not a percentage. Compare cycles with each other; a clear gap between the leading cycles and the rest matters more than the absolute value. |
bartelsValue |
The Bartels test: how likely it is that the cycle is genuine and not noise. Higher is more significant. bartelsLimit (0–99) drops cycles below it; lower it to see weaker cycles. |
stabilityScore, dominantRank |
How consistent the cycle's amplitude and phase were over time (0–1; with useStability, every plan), and its rank among the dominant cycles (1 = strongest, 0 = unranked; with dominantPeakFinder, a PRO feature). Without the option each stays 0. |
A cycle can be drawn as a sine wave with its trough at minBarNum (bars counted from the first value you sent):
value(bar) = amplitude × sin(2π × (bar − minBarNum) / cycleLength − π/2)
Detrending. Before the scan the series is detrended; the default is a Hodrick-Prescott filter (dType=0), the
same as in the Cycle Scanner app. A one-sided HP filter (dType=4) avoids the end-of-series bias when the latest
bars matter most; no detrending (dType=9) gives very different strengths and ranks.
Phase: where a cycle stands
The phase is the position on the wave. The scanner names it with ten phase strings, in this order around the cycle:
| Phase | Where | Score |
|---|---|---|
Downtrend_ApproachingBottom |
late fall, nearing the trough | −80 |
BOTTOM_Arrival |
at the trough | −95 |
BOTTOM_Departure |
leaving the trough | −100 |
Uptrend_Starting |
early rise | −95 |
Uptrend_Neutral |
mid rise | +30 to +60 |
Uptrend_ApproachingTop |
late rise, nearing the peak | +80 |
TOP_Arrival |
at the peak | +95 |
TOP_Departure |
leaving the peak | +100 |
Downtrend_Starting |
early fall | +95 |
Downtrend_Neutral |
mid fall | −30 to −60 |
Read the phase string, not the sign of the score, for the direction. The score flips its sign at the trough and
at the peak: an early rise (Uptrend_Starting) scores −95, an early fall (Downtrend_Starting) +95.
Two phase measurements. Every cycle comes with two independent phase fits over the same cycle length:
- the average phase (
avgPhaseStatus,avgPhaseScore,minBarNum), averaged over all repetitions in the series: stable, best for scoring, screening and the structural picture; - the current phase (
phaseStatus,phaseScore,minBarNumCurrent), fitted to the recent bars only: best for timing, projections and a wave drawn over the latest prices.
Use one group or the other, never a field from each. When the two disagree, the cycle is running ahead of or behind its historical rhythm, and that is information in itself.
The dominant cycle and its projection
The cycle explorer (and, through the REST API, the market cycles of a market by id) finds the dominant cycle in a length window and projects it forward:
| Field | Meaning |
|---|---|
length |
The dominant cycle's length, in bars. |
phase_status |
A simple phase: Bottom, Rising, Top or Falling. |
nexttop, nextlow |
Bars from the last value to the next projected top and low. |
lasttop, lastlow |
Bars back to the last top and low. |
timeSeries |
With includeTimeseries=true: the series bar by bar with the dominant cycle and the cycle highlighter, extended forward by plotForward bars. |
Cyclic RSI (CRSI)
The cyclic RSI is an RSI tuned to a cycle, with dynamic upper and lower bands (ub, lb) instead of fixed 70/30
lines. Above the upper band the move is stretched upward, below the lower band downward.
- Tune the period to half the dominant cycle length: the oscillator should turn within the cycle.
- The bands need about three repetitions of that cycle: keep the cycle length at most data length ÷ 3, otherwise the bands come back empty (NaN).
The consensus turns the CRSI position into a signal from −3 to +3:
| Signal | Value | Meaning |
|---|---|---|
BullExit |
+3 | was above the upper band in the last 4 bars, now back inside |
BullFatigue |
+2 | above the upper band and turning down |
BullExhaustion |
+1 | above the upper band and still rising |
Neutral |
0 | inside the bands, no recent extreme |
BearExhaustion |
−1 | below the lower band and still falling |
BearFatigue |
−2 | below the lower band and turning up |
BearExit |
−3 | was below the lower band in the last 4 bars, now back inside |
The names follow the momentum move, not the price: "bull exhaustion" is overbought momentum, a caution for price;
"bear fatigue" is oversold momentum turning up, a constructive sign. With a price-CRSI divergence, the fatigue and exit
states get a ReversalConfirmed variant (the label changes, the value does not).
The cycle consensus
The consensus combines all significant cycles into one reading and answers one question: are the cyclical conditions for a turn present right now, and in which direction? It is an alert, not a price forecast.
| Field | Meaning |
|---|---|
combinedScore |
−100 to +100. Positive is bullish, negative bearish. |
bullishConsensus, bearishConsensus |
The weighted vote of each side: the sum of quality × strength of its cycles (rising and bottoming cycles vote bullish, falling and topping cycles bearish). Raw numbers, not percentages: compare the two. |
toppingCycles, bottomingCycles |
Cycles at the turn, within one eighth of their length of the peak or trough: the reversal is happening now. |
fallingCycles, risingCycles |
Cycles past the turn, in the middle of their fall or rise: the pressure is on. |
breadthFactor |
0–1: how many cycles carry the stronger side (five or more is 1). Information only; it does not change the score. |
crsiScore, crsiSignal |
The CRSI signal above. |
combinedScoreReasoning |
The step-by-step derivation, in words. Every number in it has the sign of combinedScore. |
Which list a cycle is in follows its average phase. Topping is an average phase score of +80 and above: the late
rise, the peak and the early fall (Uptrend_ApproachingTop to Downtrend_Starting). Bottoming is −80 and below
(Downtrend_ApproachingBottom to Uptrend_Starting). Rising and falling are the scores between (Uptrend_Neutral,
Downtrend_Neutral). Every cycle in the lists reports both phases: avgPhaseScore and avgPhaseStatus decide its
vote; currentPhaseScore and currentPhaseStatus show where the recent bars put it. The current phase can already be
one list further: a cycle listed as topping whose current phase reads Downtrend_Neutral is past its peak and falling.
Both readings vote bearish; the score is the same. (phaseScore in these entries is the same number as
avgPhaseScore.)
Falling and rising cycles are past their turn. A falling cycle has its peak behind it and is in the middle of its decline; a rising cycle has left its trough. A bearish reading carried only by falling cycles therefore confirms a decline that is under way; it does not announce a top that is still ahead. With topping and falling cycles together, some cycles are turning now and others have already turned: the strongest case. The same holds for bottoming and rising cycles on the bullish side.
How the score is built: the cycles contribute up to ±80, each voting cycle with its quality × strength (quality is 60%
stability and 40% rank). The CRSI signal contributes up to ±20 with the opposite sign of crsiScore
(−crsiScore ÷ 3 × 20): BullExit (+3) takes 20 off, BearExit (−3) adds 20. The sum is clamped to ±100. Full
conviction therefore needs the CRSI to agree, and the CRSI can only flip the sign when the cycles alone are within ±20.
combinedScore |
Reading |
|---|---|
| above +50 | strong bullish consensus: high alert for a bottom; look for price confirmation |
| +30 to +50 | cycles lean bullish |
| −30 to +30 | neutral or mixed: no cyclical opposition, the trend tends to continue |
| −30 to −50 | cycles lean bearish |
| below −50 | strong bearish consensus: high alert for a top; look for price confirmation |
Which cycles vote on each side matters as much as the number: a bullish vote carried by long, structural cycles is a different signal from one carried by short cycles. Checking the weekly series as well as the daily is more reliable than either alone.
Other measurements
- Turning points (RSD test). A running slope-difference t-test marks the bars where the trend actually turned, at the confidence you choose.
- Smoothing. Savitzky-Golay and modified sinc filters smooth a series without shifting its turns in time.
- Cycle-length clustering (KDE). Groups a list of numbers, such as cycle lengths from many scans, into clusters by kernel density: which lengths recur.
- Market clustering (DTW). Dynamic time warping groups markets whose recent paths look alike, even when shifted in time.
The answers are measurements and projections of cycles, not investment advice.
Answers of Cycles IQ are measurements and projections of cycles, not investment advice. Questions: support.