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).

On this page

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).
Tap the plateau, the ramp and the tails
Original Fig. XI-1 — A Typical Digital-Filter Response Curve
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 Fig. XI-2 — How To Control Error In A Digital Filter
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.
Tap the series, the extract and the edge

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