← All ideas
#039MomentumPosition

Dual momentum: absolute first, then relative

Once a month: if the stock market beats T-bills, hold the strongest of the index ETFs, otherwise move to bonds. Leslie Masonson's variant: each month hold QQQ or TLT, whichever has the higher 3-month return.

The Algorithmic Advantage · Gary Antonacci · Watch video

Markets

Indices, Bonds

Timeframe

MN, D1

Data

OHLC, Instrument universe

Rules

Partly formalised

Difficulty

Medium

Status

Untested

Some rules were added by us and are marked in the text.

TradingView needs data or workarounds
EasyLanguage has pitfalls
MetaTrader 5 has pitfalls

Idea in brief

Gary Antonacci combined two kinds of momentum. Absolute momentum answers whether you should be in the stock market at all: has it risen more than the risk-free rate over the last period. Relative momentum answers which part of the market to be in: which of the candidates has risen more than the others. If absolute momentum is negative, capital moves to bonds or T-bills.

Trades are long only, without shorts or inverse ETFs. There is no stop: its role is played by the switch of assets itself. Antonacci's simple models are calculated on monthly data and review the position once a month. In Antonacci's words, the approach works best on stock indices from different regions.

Variant B, from Leslie Masonson's book (as retold by the Financial Wisdom channel), is simpler. Each month hold QQQ or TLT, whichever has the higher three-month return. There is no check against T-bills: bonds serve both as the defensive asset and as the benchmark.

Antonacci did not name the window length or the ETF list in the interview. We set them and marked them as ours.

Why it might work

Antonacci explains momentum through investor behavior. People sell winning positions early and hold losing ones for a long time, and this stretches price moves out over time. The second effect: investors prefer their home market and miss opportunities in other regions. A rule that looks at the whole world in the same way can capture this premium. The interview describes the mechanism in words, without numbers.

Relative momentum without absolute momentum always holds some risky asset, even when the whole market is falling. The absolute filter adds an exit from stocks in prolonged declines. Antonacci adds an argument against permanent diversification: correlations between stocks and bonds are unstable (in 2022 they fell together), and weak assets in a portfolio drag the result down. Dual momentum holds only what is rising now.

The author openly names the weak spot: sideways markets, where the trend changes often and the model gets whipsawed.

Rules

Main model (author's logic, Finetiq settings)

// decision at the close of the last trading day of the month, execution at the next day's open
// Finetiq: the author talks about monthly rebalancing but does not name the day

RiskAssets = [SPY, EFA, EEM]   // author: stock indices from different regions; Finetiq: US, developed markets, emerging markets
Bills      = BIL               // Finetiq: a T-bill ETF as the measure of the risk-free return
Safe       = AGG               // Finetiq: defensive asset; author: bonds or T-bills

N = 12 months                  // Finetiq: starting value, the author did not name the length
Ret(x) = return of x over N months including dividends   // Finetiq: total return

// step 1: absolute momentum of the stock market (author, 07:57)
IF Ret(SPY) > Ret(Bills)
    // step 2: relative momentum (author)
    Hold = the asset from RiskAssets with the highest Ret
ELSE
    Hold = Safe

IF Hold <> current position
    SELL current position AT NEXT BAR OPEN
    BUY Hold with all capital AT NEXT BAR OPEN      // Finetiq: one position at 100%
// author: long only, no stop, the exit happens through the asset switch

Second reading of the order of checks

The interview describes the order in two ways. Antonacci says the trend is checked on the stock market as a whole. The host retells it differently: each candidate is compared with the risk-free rate, and the strongest is chosen among those that pass. Antonacci agrees with the retelling.

// reading 2 (host's retelling, 14:17)
Passed = [x in RiskAssets : Ret(x) > Ret(Bills)]
IF Passed is not empty
    Hold = the asset from Passed with the highest Ret
ELSE
    Hold = Safe
// the only difference from the main model is in months when SPY is below T-bills
// and another region is above: here we hold that region, in the main model we move to Safe

Variant B. Masonson: QQQ or TLT by three months

// monthly rotation, always in one of the two assets
R3(x) = Close(x) / Close(x, 63 trading days ago) - 1
// author: return over the previous 90 days (3 months); Finetiq: 63 trading days

IF R3(QQQ) > R3(TLT)
    Hold = QQQ
ELSE
    Hold = TLT
// the rebalancing day is not named in the video.
// Finetiq: last trading day of the month, execution at the next day's open

Parameters

Parameter Value Source
Absolute filter stock market return above T-bills author
Asset selection highest return among the candidates author
Direction long only author
Frequency once a month and on a position change author
Data monthly author
Candidates SPY, EFA, EEM Finetiq (author: indices from different regions)
Risk-free benchmark BIL Finetiq
Defensive asset AGG Finetiq (author: bonds or T-bills)
Return window 12 months Finetiq
Return including dividends Finetiq
Rebalancing day last trading day of the month Finetiq
Variant B: assets QQQ and TLT author
Variant B: window 3 months (90 days) author
Variant B: window in bars 63 trading days Finetiq

What to test

  1. Window neighborhood. 3, 6, 9 and 12 months, and an average over several windows. Antonacci mentions that their balanced model adds several windows to the book version. If the result holds only for one length, that length was fitted.
  2. Order of checks. The main model versus reading 2. Look at the months when they diverge and at what happened next.
  3. Variant B with and without an absolute filter. Add a rule to QQQ/TLT: if both returns are below BIL, hold BIL. Look separately at 2022, when stocks and long bonds fell together.
  4. Rebalancing day and frequency. End of month versus the beginning and middle, once a month versus every three weeks (this is how the author's AGM model rebalances). If the result depends strongly on the day of the month, the edge is fragile.
  5. Total return versus price. Run the signal on prices without dividends and on adjusted prices. For TLT and AGG, distributions are a significant part of the return, and on bare prices bonds will be selected less often.
  6. Start of the period. Masonson's test starts in December 2009, after the crisis. Run variant B from 2003 (after TLT launched) so that 2008 is in the sample.
  7. Number of switches and costs. Count position changes per year and back-and-forth switches within two months. Sideways markets produce the most of them, and that is also where slippage and taxes go.

Platform notes

TradingView (Pine Script)

  • A strategy trades only the chart symbol. A rotation among three or four ETFs cannot be tested as a strategy: the signal can be calculated, but trades in other symbols cannot.
  • For QQQ/TLT on a QQQ chart, the tester will show only the periods in QQQ, and the months in TLT will look like cash. That is a different result. The rotation equity curve has to be calculated manually in an indicator.
  • Data for other ETFs is read via request.security. Last month's values without lookahead: request.security(sym, "M", close[1], lookahead = barmerge.lookahead_on). The last trading day of the month is not known in advance on history, so in practice the signal shifts to the first bar of the new month.
  • Check the dividend adjustment: the chart setting and the adjustment.dividends parameter in ticker.modify. Without it, bond ETFs look weaker than they were.

MultiCharts and TradeStation (EasyLanguage)

  • Orders are sent only to Data1. A rotation is done in the portfolio module (TradeStation Portfolio Maestro, MultiCharts Portfolio Trader) or with a separate strategy per ETF: the strategy on the SPY chart reads the other ETFs as Data2-Data4 and holds SPY only when it is the winner.
  • With separate strategies, each has its own capital. The combined result resembles the rotation only if position size is calculated from the total account; otherwise the curves will not match.
  • Month change on daily bars: Month(Date) <> Month(Date[1]) triggers on the first bar of the new month. A decision based on the previous month's close is executed one day later than in the rules.
  • Check whether your data provider's ETF series are adjusted for dividends.

MetaTrader 5 (MQL5)

  • An EA can trade several symbols, and the tester's multi-symbol mode supports this. But ETFs are rare at MT5 brokers, usually as CFDs with a short history. A T-bill ETF is almost nowhere to be found.
  • Replacing ETFs with index CFDs changes the strategy: there are no dividends, and there is swap for holding. On a CFD on a bond ETF, swap can eat the interest income for which the asset is held.
  • "Cash" on an MT5 account is free margin without interest. The defensive part of the model does not earn the T-bill rate.
  • Take monthly bars from the closed bar: iClose(sym, PERIOD_MN1, 1). Month boundaries follow broker server time and are shifted by a few hours from exchange time.

Where the idea can break

  • Antonacci described the logic, but not the parameters. The window, the ETF list and the defensive asset in the main model are ours. The results of Antonacci's commercial models do not apply to this configuration.
  • The variant B figures come from a retelling of the book on a YouTube channel. The period starts right after the 2008 crisis, with falling rates, when both QQQ and TLT rose. The 56.3% drawdown is higher than buy and hold, and the conclusion about risk-adjusted outperformance belongs to the host.
  • Choosing QQQ as the risky asset is hindsight: it is one of the strongest indices of the period.
  • Rotating between stocks and bonds does not protect you when both assets fall at the same time. Antonacci cites 2022 as an example.
  • Over 15 years, monthly rotation accumulates few switches. The statistical weight of such a test is lower than that of strategies with hundreds of trades.
  • In sideways markets the monthly window lags. The signal enters after a rise and exits after a decline, and the whipsaw costs more than the final equity curve suggests.

Sources

Author's claims

These figures and statements are the author's. We have not verified them.

  • Antonacci: since 1970 the author's bond market model (from T-bills to high yield, without the long end of the curve) has delivered returns comparable to the stock market with noticeably lower volatility. The interview gives no exact figures.
  • According to Antonacci, their proprietary trend models have 50-60% winning trades, while typical trend following has 30-40%. This is about the author's own models, not about simple dual momentum.
  • Antonacci keeps about 95% of their own capital in these models.
  • From Leslie Masonson's book as retold by Financial Wisdom: rotating QQQ and TLT by 3-month return from December 2009 to March 2025 returned 7471% versus 1142% for buy and hold QQQ, an annual return of 33.1% versus 18.1%. The maximum drawdown was higher: 56.3% versus 35.1%.

Related ideas

Updated: 2026-09-10