BondCalc: Matrix Pricing Features
BondCalc can process all corporate bonds and commercial mortgages, and many other types of securities. All securities are converted to cash flows.
Matrix pricing can be run in both the single security and portfolio sections:
Choice of pricing to:
- In the single security section a report shows prices to each call and it is a column choice (no. 98) when using the custom display (when viewing security results switch press F4, press F4 again, add 98 to the first column, then press F5 to return).
- In the portfolio section there is a choice of (1) entering a yield or spread in portfolio yield field and then designating on the Alt-O Override Screen what the input represents, or (2) running the full-blown Portfolio Evaluation as described below.
- Lowest matrix priced call date. The program includes full worst/worst logic (i.e. sinkers doubled and issue called).
For private placement issues BondCalc projects the issue's future cash
flows using the scheduled sinking funds. The cash flows are projected to
all call dates and using the sinking fund double-up option, if any. At
each call date the yield is determined using the average life from the
base yield curve, the spread is then interpolated from the respective
spread matrix, and if also used, an adjustment is made for a sector spread
differential. Adjustments may have also been made for issues with a non-current coupon (generally for one with a coupon lower than current market
conditions). Using this yield as the IRR the present value is calculated
and used as the price. The program then selects and reports the lowest
price calculated. If the security has a tax preference it will be
iteratively solved to get an after tax return to match the matrix yield.
- Option Free Yield. BondCalc iteratively solves for price that gives this yield.
The spread input should be prepared to produce yields for Option-Free
Bonds with average lives matching the holdings. These are bonds with no
calls. The program will iteratively solve until a price is found that has
an option-free price that calculates the target option-free yield. The
option-free price is the bond price plus the option value that is embedded
in the bond. If the issue has a sinking fund double-up then the price
will be calculated a second time with the assumption that maximum double-up are taken. The lower of these two prices is then taken. You can see
this process by entering the option-free yield in the single security
Yield Field and appending with a +F (or +FD for double-up). At this time
it will not give any value to a tax preference that an issue may have.
Suggest moving these issues into a separate portfolio and pricing with
yield-to-worst turned on (on Alt-O Override Screen).
- Static Spread (either to worst or to term) - Yield curve and matrices can be in last period, average life or [duration space].
The program uses the spot curve instead of the nominal curve and interpolates the base rate separately for each cash flow. (The spot curve is
built using the bootstrap method as described in various Fabozzi books.
If coupon is entered with the yield curve (use second yield curve input
screen) it will be used to enhance the spot rate building.) Spreads from
the matrices are also interpolated for each cash flow.
- Does not matrix price if the portfolio has a price, yield, or spread for that security already inputted in the portfolio.
- Maintains a database with an unlimited number of spread matrices. They can be stored nested together under a date name.
- Optionally each security can have a second matrix, which is added to the first before getting the yield. An example of this would be a matrix for public bonds, and a second matrix for the differential between public and private bonds.
- Can also have spread sector differentials for up to 48 market sectors.
- Has optional non-current coupon adjustment which can be either multiplicative or additive. This can be used to give value to a low coupon bond that has call protection.
- Has database of speed tables for mortgages. Six prepayment models are supported.
- In addition to its standard portfolio evaluation report, BondCalc has a custom report writer allowing you to choose what columns to include in reports.
- Has yield curve shift analysis (e.g. entire curve shifts -300, -200, -100, 0, +100, +200, +300 bp). Custom report writer has columns to print reports.
- Has various import formats for getting data from databases and accounting systems. Popular ones are Pam and BondCalc's proprietary format.
- Results can be easily put in standard PAM price record file and imported into PAM.
- All steps can be printed out and audited.
- Distribution of portfolio by rating can be analyzed with either clustered horizontal bar chart or pie chart. Spread matrix distribution has pie chart.
- Prints a report and clones the portfolio inserting the matrix derived prices. Prices in cloned portfolio can then be adjusted and used to run all other portfolio reports in the BondCalc system. Or all processing can be done in one step.
- Cleanly handles after tax pricing of issues with tax preferences, e.g. ESOP and muni bonds.
- Each security can have up to eight ratings. A weighting scheme is available for the matrix pricing when more than one per security. Custom rating scales are available, and user has control over weights given to each rating (when interpolating and calculating average rating for the portfolio).
- The program can store prices and other numbers in a database. At later evaluation dates they can be used for comparisons in the report writer.
- Matrix pricing can be optionally done as of a future date. A projected total return can then be calculated to this horizon.
Procedures for Portfolio Matrix Pricing:
- Calculate performance return and attribution for periods in the past. Attribution has categories for:
See PDF of sample reports.
- change in yield curve
- change in spread matrix
- change in market sector differential
- change in rating
- change in exchange rate.
1. All bonds must be inputted. To correctly calculate yield-to-worst or
OAS the input must include the full call schedule and a sinking fund
double-up percent if any.
Each bond must be assigned at least one rating. By default it will use
the primary rating field or the input on the portfolio input screen
(which overrides the security input). The rating must be a member of
the scale that is designated on Alt-R twice when inside the security.
By default it can be either be S&P or Moody's. BondCalc has eight
rating fields and on Alt-R twice one can designate which are to be used
when matrix pricing and how they are weighted.
Each bond must also be assigned the name of an existing spread matrix
in the "Class" input field (follows primary rating field) unless the
rating is GOVT which assumes that there is no spread over the Trasury
2. A Treasury Yield Curve must be inputted in the ^Y (or ShftF4) yield
curve database. The second of the two input screens will allow for
finer granularity on the short end and allows for entering the maturity
dates having the program calculate the years. The first input screen,
however, has an option for not interpolating between surrounding yields
but for taking the closest yield.
3. Designate yield curve. This can be done in two ways: (1) entering the
name of the Yield Curve Base on ShftF6 Portfolio Parameter Screen, or
(2) entering it on the Portfolio Override Screen (Alt-O when in the
4. Using ^M (or ShftF10) input several Spread Matrices by averaging the
spreads collected from several dealers in the secondary market. If
running OAS pricing then these matrices should be for Option Free Bonds
with the same average lives as the holding with the embedded options.
Suggest building matrices for the Industrial, Financial and Utility
industry sectors. (Could also create matrices for Canadian, Government
guaranteed, Yankee/Euro and Pipeline issues.) You need not fill in all
input fields. Blank spreads within the matrix will be interpolated
from surrounding rows. BondCalc will then interpolate values not
explicitly inputted and extend nearest value for time periods beyond
inputted range. You can print out a copy of the filled in matrix with
F6. Note that these can be stored in nests of matrices by date. Name
matrix with date in CCYYMMDD format to activate.
Non-current Coupon Adjustment - If pricing using security's worst flows
you still can adjust for issues at a discount (i.e. with a coupon lower
than current market conditions) as their value would not necessarily be
the same as an issue with a current coupon. (At the current time they
are worth a premium to market as they are assumed to remain outstanding
to maturity.) The Treasury base plus the spread from the above matrix
will be used as the current coupon. The first row is the difference
(in %) the issue's coupon is away. You have a choice of two methods
for the second row:
0 - Percent Change will change the base by the % entered,
1 - Additive will add basis points interpolated from this row.
If negative entered it will reduce the yield.
5. On the Ctrl-J Sector Spread Differential database you can also set a
spread difference based on a market sector code that is inputted on the
second page of the main input. Inside the Portfolio use Alt-O to popup
the Parameter Override Screen. Designate which sector spread database
you are using.
6. On the ShftF6 Parameter input screen you must designate the interpolation
method. Average life space is the default. The Matrix
Pricing Type field also controls the use of a zero spot curve and the
turning of the yield into an Option Free Yield. (See explanations
7. If OAS Pricing enter Volatility and related control variables on the
Ctrl-O input screen.
8. On a portfolio input screen input the list of bonds to be included.
Use F3 to point and add securities to the portfolio. If you know a
bond's price, yield, or spread input it at the portfolio level and the
program will not create a matrix yield for it. Using inputted price
the program will solve for the yield and the report will display this
yield and its spread over Treasuries.
9. Portfolio Overrides. Certain settings should be set for each portfolio.
These can be found on Alt-O when inside a portfolio. On this screen
you can set settlement date, yield curve, path to securities, spread
matrix nest date or path, and other things. One feature is a Matrix
Pricing Mode which can bet set for Money Market Mode where the yield
curve is ignored and spreads are assumed to be rates (but still entered
in basis points).
10.On the second page of the Portfolio Report Menu you can set the
calculations to use the issue's worst flows (yield-to-worst). The
default is using only the cash flows to maturity. Suggest using
yield-to-worst. With this option BondCalc will matrix price the bond to each
of the call dates with regular sinking funds, and to each of the call
dates with doubled-up sinkers, if the provision exists. BondCalc will
then select the lowest matrix price. Each of the cases will do its own
interpolation, using respective average life, from the yield matrix and
the spread matrix. This field has no effect if in OAS pricing mode.
11.Select the "Portfolio Evaluation Using Matrix Pricing" from the report
menu. Output will be printed in data file order. Sort data first.
Calculated prices, accrued interest and totals will appear on this
report and the results are used for any other Portfolio reports in
the calculation pass. If you enter a C in the selection column you
can clone the portfolio with the new one having the calculated prices
entered as input.
12.If running several portfolios the Compare/Batch Section can be used to
run them in one pass. When cloning the results multiple new names will
be asked for.