Skip to content
James Marsden Hurst 1924—2005
Chapter 11.3 Spectral Analysis

The Ormsby numerical filters (Hurst)

The frequency sieve: low-pass, high-pass and band-pass; the lag-precision law; Ormsby's design with the n·t·Δω = 500–700 rule and the book's design (199 weights, 2.8–6.0 years).

Who this entry is for — The tool that produced Fig. IX-4: the band-pass filter that isolates a band of periods from a price series, with zero phase. It is all here: the sieve, the lag law, the frequency response, the weights and Ormsby's design recipe — with the book's exact numbers, recomputed and verified.

Source: J. M. Hurst, The Profit Magic of Stock Transaction Timing, Prentice-Hall, 1970 — Chapter 11, §§ How Numerical Filters Can Help YouApplying Your Numerical Filter to Stock Prices (design by Joseph F. A. Ormsby, paper dated March 1960; pp. 175–183, Figs. XI-1, XI-2).


Prerequisites

Spectral analysis, the cyclic moving averages and the inverse (Ch. 6).


The sieve

In plain words — A sieve separates sand into small and large grains; a frequency filter separates data into short and long cycles. The moving average is the "crude" sieve that keeps the long cycles; the inverse keeps the short ones; and sieving twice with different meshes yields a band: the band-pass.

The centred moving average is a crude low-pass filter: it stops high frequencies (short periods) and passes low ones — the span sets the separation point, like the mesh of a sieve. Ch. 6's inverse is its high-pass complement: it throws away the lows and keeps the highs. And just as sieving sand twice yields three piles, filtering between two bounds yields the band-pass — "particularly useful in the analysis of stock price data": these are the filters that produced Figs. II-13 and IX-4. All three types "belong in your arsenal".

The trade law: precision ↔ lag

Every numerical filter pays the same tax: the more precisely you separate frequencies, the more lag you must tolerate — and the lag is half the filter's span. The moving average separates poorly but lags little: for the real-time work of the operational chapters it "does as good a job for its lag as any filter can do". For research the opposite holds: the past is plentiful, separation matters more than delay — "some of the filters described in the Appendix have time lags of many years".

A filter's behaviour is described by its frequency response: the amplitude ratio (output/input per frequency: 1 = passes intact, 0 = suppressed) and the phase response (how much it slides things in time). The filters described here, with symmetric weights, have zero phase: what passes, passes without sliding.

The weights

Every numerical filter is just this: a row of weights to multiply by the prices and sum. Even the moving average: all weights equal to 1/N — a square-wave weighting function, whose "four square corners cause many of the adverse characteristics" (the lobes of Appendix IV). Improving the filter means rounding those corners in a precise way: that is exactly what Ormsby's design does.


Ormsby's design

In plain words — You draw the response you want on paper — a trapezoid: zero, ramp, flat at one, ramp, zero — and the recipe returns the weights that realize it, with a small, predictable error.

Three decisions first: the data spacing t (it becomes a design parameter: that filter must only be used on data of the same spacing); the number of weights n (odd); the skirt slope Δω. Then the trapezoid's four frequencies: ω₁ (low cutoff, response 0), ω₂ (low rolloff, response 1), ω₃ (high rolloff) and ω₄ (high cutoff) — with Δω = ω₂−ω₁ = ω₄−ω₃.

HURST 1970 · CH. 11 The Ormsby filter’s response Fig. XI-1 recomputed weight by weight: design trapezoid and actual response CYCLEPEDIA DIAGRAM — EMICICLO AMPLITUDE RATIO · RAD/YEAR 1.0 0.5 0.0 ω1 ω2 ω3 ω4 0.0 1.0 2.0 3.0 4.0 4.5 years 6.0 yr 2.8 yr actual response (199 weights) design response WEIGHTS n = 199 N·T·ΔΩ 557.2 → ε ≈ 2% PASSBAND 2.8–6.0 years Error is unavoidable: the design only chooses where to put it.
Fig. XI-1 recomputed weight by weight with the parameters printed on the plate: n=199, Δω=0.4, 7-week data. The actual response (teal) against the design (gold).
Select the highlighted points to explore the detail
Original figure temporarily withheld while publication rights are verified.
The original 1970 plate: Fig. XI-1, with the design parameters printed (n=199, Δω=0.4, t=7, n·t·Δω=557.2, ε=2%, ω₁–ω₄).

The error rule

Design error "is unavoidable": you only decide how much to pay. Fig. XI-2 ties it to the product n·t·Δω (t in weeks, Δω in radians/year): for research work aim for a product between 500 and 700 → error between 2.5% and 1% (up to 5–6% still surprisingly usable). Constraint on t: you want at least 6–7 output points per cycle of the shortest period in the band. More weights = more work but narrower ramps; fewer weights = wider Δω and a less selective filter.

Original figure temporarily withheld while publication rights are verified.
Fig. XI-2: error as a function of the n·t·Δω product — the curve behind the 500–700 rule.

The book's design, verified

The example design of Fig. XI-1: 199 weights, 7-week data, ω₁=0.85 · ω₂=1.25 · ω₃=2.05 · ω₄=2.45 rad/year. Product: 199 × 7 × 0.4 = 557.2 → error ≈2%. The half-ramp points fall at 1.05 and 2.25 rad/year — that is, periods of 5.98 and 2.79 years: exactly the declared "2.8–6.0 year passband", tailor-made for studying the dominant 4.5-year cycle.

Editor's note — We rebuilt the 199 weights from the book's recipe and recomputed the response: the trapezoid holds, the response on the 4.5-year cycle is 1 within 3%, the out-of-band ripple stays below the declared 2%, and the 557.2 product is exact. This entry's figures are drawn with those very weights.

Applying it (and its price)

No shortcut as with the moving average: each output point is the sum of the n products weight×price, centred on the middle datum; then slide one step and repeat. And no output for the last (n−1)/2 datums: "this is normal, and represents the one-half span lag of the filter".

HURST 1970 · CH. 11 The sieve at work A cycle invisible to the eye, isolated by the Ormsby band-pass with zero phase CYCLEPEDIA DIAGRAM — EMICICLO THE SERIES: TREND + THREE CYCLES + NOISE 12–30 BAR BAND-PASS OUTPUT VS THE TRUE 20-BAR CYCLE filter output true cycle (20 bars) PASSBAND 12–30 bars WEIGHTS n = 121 LAG 60 bars The sum can also be taken apart: that is the whole point of Fig. IX-4.
The sieve at work: above, a series with trend, three cycles and noise; below, the 12–30 bar band-pass output against the true 20-bar cycle — zero phase, amplitude intact, and the lag visible at the edges.
Select the highlighted points to explore the detail

Summary card

Element Value
Types low-pass (MA), high-pass (inverse), band-pass (Ormsby)
Law sharper separation ⇔ more lag; lag = ½ span
Phase zero (symmetric weights): nothing slides
Error rule n·t·Δω between 500 and 700 → ε ≈ 2.5%–1%
Constraint ≥6–7 output points per cycle of the shortest in-band period
The book's design n=199, t=7 wk, Δω=0.4 → passband 2.8–6.0 years, ε≈2%
Use research and phasing (Fig. IX-4) — not real-time signals