Converts a money-market discount yield (e.g. quoted for Treasury bills) into a bond-equivalent yield (BEY). Money-market instruments are often quoted on a discount-yield basis, which understates the actual return an investor earns because it is computed on face value rather than the (lower) purchase price, and uses a 360-day rather than a 365-day year. The bond-equivalent yield restates the discount yield on a basis that is comparable to coupon-bearing bonds and notes.

The bond-equivalent yield is calculated using the following formula:

\[\text{BEY} = 365 \cdot \text{Discount Yield} / (360 - \text{Days to Maturity} \cdot \text{Discount Yield})\]

for a bill with half a year or less remaining. Beyond that an equivalent coupon-bearing note would have paid a coupon at the six month point, so the U.S. Treasury’s semi-annually compounded solution (31 CFR 356, Appendix B) is used instead - see bond_model.get_bond_equivalent_yield. Applying the simple formula to a 52-week bill instead overstates its yield by roughly seven basis points.

Also known as: BEY, coupon-equivalent yield, investment rate.

No programming experience? With the Finance Toolkit MCP server, AI assistants such as Claude and ChatGPT can calculate the Bond-Equivalent Yield for you. Just ask in plain English.

Calculate the Bond-Equivalent Yield in Python

The Bond-Equivalent Yield is available in the Fixed Income module of the open-source Finance Toolkit. Install it with:

pip install financetoolkit -U

Then call get_bond_equivalent_yield as shown below.

from financetoolkit import FixedIncome

fixedincome = FixedIncome()

fixedincome.get_bond_equivalent_yield(
    discount_yield=[0.03, 0.05, 0.07],
    days_to_maturity=[90, 180, 360],
    show_input_info=False,
)

Which returns:

Discount Yield 90 180 360
0.03 0.0306 0.0309 0.0311
0.05 0.0513 0.052 0.0527
0.07 0.0722 0.0735 0.0749

The 360-day column is computed with the Treasury’s semi-annually compounded formula rather than the simple one, because a bill of that length would have paid a coupon halfway through if it were a note.

Parameters

get_bond_equivalent_yield accepts the following parameters:

  • discount_yield (float | list, optional): The money-market discount yield of the instrument (in decimal). If not provided, a range of discount yields will be used.
  • days_to_maturity (float | list, optional): The number of days until the instrument matures. If not provided, a range of typical T-bill maturities will be used.
  • show_input_info (bool, optional): Whether to display input information. Defaults to True.

The Fixed Income module page introduces the module, and the sidebar lists all of its functions.

Share