Faber Timing Model (Trend)

Faber's tactical timing model: holds while the close sits above its 10-month (210-bar) simple moving average, but only checks the rule once every 21-bar month — the monthly review keeps turnover minimal.

How It Works

  1. Compute a 10-month simple moving average of the close — 210 bars, treating every 21 bars as one month.
  2. Check the rule only once a month, on every 21st bar; between reviews, nothing the market does matters. This monthly cadence is Faber's key idea — it ignores intra-month noise entirely and is what keeps the trade count tiny.
  3. At a review: if the close is above the 10-month average, be in the market; if below, be out. Buy or sell only when the answer changes from the previous review.

Worked example. At this month's review the close is 108 against a 10-month average of 104 — above, so buy. The next four reviews price stays above the (rising) average, including a mid-month crash that recovered before review day — the model never saw it. At the fifth review the close is 111 against an average of 113 — below — so the position is sold after roughly five months held with zero trades in between.

The Math Behind The Indicators

Everything runs on closing prices of the traded timeframe: P is a close, Pt today's close, and N counts bars — one bar is one candle of that timeframe, so 20 bars on a 1h chart is 20 hours.

Simple Moving Average (SMA)
The plain average of the last N closing prices: add them up, divide by N. It smooths out bar-to-bar noise so the underlying direction is easier to see — a rising SMA means recent prices sit above where they used to be.
2026-07-17T19:28:07.652959 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/
Example: With N = 3 and closes 100, 102, 104 the SMA is (100 + 102 + 104) / 3 = 102.

Example Chart

Real Data — Score 55 / 100

Metrics Per Trade

Final Metrics

Scores

Resampled Data — Score 64 / 100

Metrics Per Trade

Final Metrics

Scores