Nicolas Liebaert Structured products and derivatives Français

The 2s5s10s butterfly: the shape of the Treasury curve

A butterfly measures whether the middle of the yield curve is out of line with its two ends. I tested a simple rule on it over 36 years to find out whether the edge is real after costs.

What I did
I buy the 5-year Treasury and sell the 2-year and 10-year when the butterfly is far above its recent average, and do the opposite when it is far below. I ran this on 36 years of daily yields. On each day I used only what was known that day, and I paid trading costs.
Why it matters to a trader
Rates desks and macro funds trade the shape of the curve, not only its level. A butterfly is sized so that a move of the whole curve does nothing. It only pays if the middle moves against the ends.
What I found
A small edge. The Sharpe ratio (average profit divided by how much it jumps around, scaled to a year) is 0.33 after costs for the simple rule, and 81% of trades win. But the worst trade lost 8 times the average trade. The rule worked less well after 2010, and it does not like quiet markets or inverted curves (when short-term yields are above long-term yields).
What I could not show
That anyone could really have traded it. I use the yields the US Federal Reserve publishes for each maturity, not the prices of bonds or futures. I did not model financing, margin or the cost of moving between contracts.

The trade in plain words

A butterfly compares three points on the US Treasury yield curve: the 2-year, the 5-year and the 10-year. The butterfly is 2 × the 5-year yield minus the 2-year yield minus the 10-year yield, in basis points (one basis point is 0.01 percentage point). It tells you how far the middle of the curve sits above its two ends.

The story: if the 5-year looks too cheap against the 2-year and the 10-year, you buy it and sell the other two. You size the legs so that a move of the whole curve up or down does nothing. You only make or lose money if the middle moves against the ends.

To trade it you buy the belly: buy the 5-year (the belly) and sell the 2-year and the 10-year (the wings). Each sold leg carries half of the 5-year’s DV01, which is the dollar value of one basis point.

The rule is the same as for the crack spread. Look at the last 250 trading days. Measure how many standard deviations today’s spread is from that average: this is the z-score. Enter above 1.5 or below -1.5, and leave inside 0.5. Optionally, add a stop at 2 standard deviations against the trade. It is explained once on the relative value page.

Demo 1

Try the rule on the butterfly

Loading the data

Protective stop

Sharpe ratio
--
after costs
Trades
--
in the whole period
Winning trades
--
share that made money
Average trade
--
of the butterfly, after costs
Worst trade
--
Total profit
--
of the butterfly, all years
Worst drawdown
--
fall from a peak
Time in a trade
--
of all days

Profit of the rule, added up over time. One basis point of the butterfly, costs paid.
Profit in each calendar year. Green made money, red lost money.

Was it the same in every period?

PeriodDaysSharpeProfit
Data. The rule is the same code as in the research repository, rewritten in JavaScript so it is instant on a phone, and checked against the Python on every run.

What the results say

A Sharpe ratio above 1 is good. Around 0.3 to 0.5 is small. The 95% range is a bootstrap range: a margin of error worked out by reshuffling blocks of days in the data.

Simple ruleWith a stop
Sharpe ratio, after costs0.330.27
95% range for the Sharpe0.04 to 0.61-0.02 to 0.56
Trades89107
Winning trades81%71%
Average trade4.8 bp2.8 bp
Worst trade-39 bp-33 bp
Years with a profit24 of 3721 of 37

Three things stand out. First, the edge is small, and with a stop the margin of error includes zero. It may be nothing. Second, the stop lowers the profit and only trims the worst trade a little. Third, most trades win and a few big losers eat the gains. That is the usual shape of a mean-reversion trade (a bet that a gap will close), and it is why the size of the position matters more than the signal.

In which situations could it make sense?

Each point is marked Tested when I measured it in this data, or Idea when it is how the market works in theory and I did not test it. Every slice of data is small, so read the numbers lightly. The Sharpe ratios and the losing years below are for the version with the stop.

When it could make sense

  • Idea When the central bank is on hold and rates move in a range. The curve has no big new story, so a stretched 5-year tends to come back.
  • Idea After a one-off push on a single maturity, such as a heavy 5-year auction or index buying at month end. The gap opens for a few days, then closes.
  • Tested When the curve has a normal shape and rates are moving. The Sharpe was 0.48 when the 10-year was 0 to 100 basis points above the 2-year, and 0.50 in the third of days when rates moved most.

When it can hurt

  • Tested When the curve is inverted (the 2-year yields more than the 10-year). The Sharpe was -0.03. The same is true in quiet markets: -0.06, because the gaps are too small to pay for the costs.
  • Tested In many years. The rule lost money in 15 of 37 years (1991, 1995, 1998, 2000, 2001, 2004, 2010, 2013, 2014, 2016, 2019, 2021, 2022, 2024, 2026). I did not test the cause. My guess is a change in central bank policy, which reprices the whole curve.
  • Tested After 2010. The Sharpe was 0.44 in 2000 to 2009, 0.02 in 2010 to 2019 and 0.18 since 2020. I do not know why. It may be that central bank bond buying kept the curve in place.

What does the rule say today? When this page was built, the butterfly was at -5.0 bp (z-score 2.32). The rule had been stopped out and was waiting for the z-score to come back inside 1.5. The butterfly ticket applies the rule to the latest data and shows these situations next to the signal.

How much should you trust it?

The settings were not picked for being the best. Here is the Sharpe ratio of the simple rule for other windows and thresholds. Across the 12 settings it goes from 0.16 to 0.45.

Window \ entry1.01.52.0
60 days0.450.400.42
120 days0.300.190.29
250 days0.450.330.16
500 days0.340.320.29

Costs matter less than you might think. With a cost of 0, 0.25, 0.5 and 1 basis point each time you trade, the Sharpe ratio (with stop) is 0.36, 0.31, 0.27, 0.17. The rule trades rarely, so the cost per trade is small next to the average move.

The trade is built on yields, not on prices. The butterfly 2 × 5-year minus 2-year minus 10-year is the standard 50/50 DV01 butterfly. It has a small leftover exposure to the slope of the curve, which I did not try to remove.

What I did not do. I did not test on bond or futures prices. The yields are constant-maturity yields, which are worked out from the whole curve and are not prices you can trade. A real trade uses on-the-run bonds (the most recently issued) or futures, with a bid-offer spread, financing, margin and a change of contract every quarter. I did not model any of that. The futures sizes on the ticket are estimates.

What this is not

This is research. Nothing here has been traded, and nothing here is advice. The rule earned a small amount in the past. That is not a promise about the future.

Source and tests at github.com/Nicolas8330/relative-value-strategies. Every figure outside the interactive test comes from one run of examples/make_results.py. The last yield used for the text is from 17 September 2026. See also the crack spread page.