Copyright © 2007 by Mike Landis
Published by PocketNumerix, Inc.
All rights reserved.
Reproduction or translation of any part of this work beyond that permitted by Section 107 or 108 of the 1976 United States Copyright Act without the permission of the copyright owner is unlawful.
Requests for permission or further information should be addressed to:
Mike Landis
PocketNumerix, Inc.
Table of Contents
Saving an
Instrument Definition
BondManager is a set of tools built on a common database that allows you to manage your bond holdings, analyze bond issues, and compare how interest rate changes affect bond issues and your portfolio of bond positions. Following is a brief introduction to the capabilities of this Pocket-PC application software, starting with an overview of the main menus.
BondManager is not a document-centric application, which means upon invocation all you’ll see is the menu and a blank screen. Switcher and similar utilities typically only include applications with open document windows in their list of running applications - the blank window gives Switcher something to find. If you don’t have Switcher or it’s equivalent, a tray icon will be available whenever BondManager is not the front most application.
When you first open BondManager, you’ll see the menu at right.
BondManager uses a database to store bond definitions and portfolio positions that you create while using it. All bond definitions and portfolio positions created are immediately committed to the database, so there’s no need to save at the end of a session. Just quit.
Given the personal nature of
Pocket-PCs, BondManager assumes that there is only
one user and one database - it opens a database in a default directory upon invocation
so you can get right to work. The only time you’ll need to use Open Database is
after you have previously closed the database.
This menu item is only enabled when the database is currently closed.
If you can’t choose database directories, you might ask why include Open Database and Close Database at all? The answer is that ActiveSync won’t sync open files and an open database will probably have several files open. Therefore, if you ever want your database backed up, you can use Close Database to close it manually and then reopen it after ActiveSync has finished. This menu item is only enabled when the database is currently open.
Edit MenuThe Edit menu is the entry point for creating and subsequently modifying bond definitions and positions based on those definitions. Bonds are the only asset type supported. It also provides the entry point to the BondManager’s two preferences dialogs. All Edit menu items are always enabled.
The Bond Definition Dialog is a structured view of the data that defines a stock to the tools in BondManager, including its market price, par value, inception date, maturity date, annual coupon rate, number of coupons per year, and which day counting method to use.
The Positions dialog is your entry point for creating a position in a option or stock issue. It captures the purchase date, number of units in the position, and the cost of the position. It also captures a ‘Note’ field, allowing you to annotate a transaction number or a source of cash for the transaction, etc.
It also displays any positions previously created for the specified option or stock issue, including purchase date, number of shares or options, the original cost of the position, its current market value, the capital gain (loss), any coupon income that would have been generated since the purchase date, the net gain (capital gain plus income), the annualized yield that the net gain represents, and any note you may have entered when you created the position.
If you read the previous section on the Positions dialog, you can see that there are quite a few columns of data computed for each position. To manage that complexity within the confines of a small screen, each of the columns in the Positions dialog’s list of defined positions can be made invisible by un-checking the associated check box in the Position List Options dialog. The left column of preferences affects the display of columns in the Positions dialog while the right column of preferences affects the display of columns in the Portfolio Navigator.
The Confirmation Options Dialog controls behaviors spanning
various dialogs. Two preferences affect
behavior within the bond definition dialog, two affect behaviors within the
Bond Analyzer dialog, two affect behaviors within the Positions dialog.
The Tools menu assembles a variety
of tools in one place to accomplish a variety of tasks. One is analytical, one is graphical, and two
report the current state of your portfolio – one hierarchically, the other as a
plain text transcript. Following is a
brief introduction to each.
The primary purpose of the Bond Analyzer is to report current yield, yield to maturity, Macaulay duration, modified duration, convexity, and imputed market value under various market yield conditions (which you control by setting DeltaYTM). Bond Analyzer also separates the contribution of coupons and par, allowing you to window into each contribution to value under the What-if conditions defined by your DeltaYTM setting. The Bond Analyzer menu item will be disabled if there are no bonds are defined in the database.
The Rate Sensitivity Explorer provides a graphical view of how the value of bonds and your portfolio of bonds are affected by interest rate changes. This menu item is disabled when there are no bonds defined in the database.
The Portfolio Navigator presents your current portfolio positions in a hierarchical explorer-like navigator, allowing you to drill down to the positions level within a particular bond, or abstract upwards in the tree until all you can see are column totals for the entire portfolio. Subtotals are provided at each level in the tree, i.e. the instrument level (all bonds in your portfolio), the issue level (particular bond issues), and the position level (issues you have a stake in). Background colors distinguish between row types to manage display complexity.[1] This menu item is disabled when there are no positions in the database.
The Positions Transcripts dialog produces a detailed text transcript of all positions closed in a given year or currently open. It’s the textual equivalent of a position level Portfolio Navigator display. It allows you to save the contents of the transcript to a file, thus providing convenient tax time documentation. This menu item is only enabled when there are positions in the database.
Help MenuThe Help Menu currently contains only ‘About box’ information about BondManager.
This section covers various considerations common across tools in BondManager, including the precision with which numbers are stored, slight variations from the Windows’ standard behavior for combo-boxes, and an overview of database behavior, and of the bond definition dialog.
Many of the edit boxes you’ll encounter in BondManager dialogs await and/or display a numerical value. Most of these values are stored with floating point precision (23 magnitude bits in the mantissa and 7 magnitude bits in the exponent), producing the equivalent of 6.9 significant decimal digits. Examples of this level of floating point precision include interest rates, coupon amounts, and market prices.
Number of bonds in a position and the total cost of a position are all stored with double precision (52 magnitude bits in the mantissa and 10 magnitude bits in the exponent), producing the equivalent of 15.6 significant decimal digits. When either of these floating point representations is retrieved from the database and presented in a dialog control, it may be formatted with a fixed number of fractional digits, potentially truncating presentation of some of the significant digits. Be assured that the originally entered precision has not been truncated in the database, they’re just not being displayed.
In the interest of minimizing pen taps, BondManager combo-boxes operate slightly differently from the Windows standard. Suppose you’re using the drop-down portion of the combo-box and something in it is currently selected. If you tap somewhere in the dialog outside the drop-down box in a standard Windows application, it cancels the selection. By contrast, BondManager accepts the selection.
It is useful to note that once saved, a bond definition will be retained in the database forever, so it behooves you to limit the number of definitions you create to those that are actually meaningful. The storage occupied by a bond definition is quite small, but BondManager thinks that each definition is equally significant, so the identifiers for any junk definitions that may creep in will take up rows in the drop-down box when you’re trying to locate a definition later.
The bond definition dialog has an edit box for the bond’s unique identifier, its current market price, one labeled ‘Description’ whose contents serve no other purpose than confirming that you’ve recalled the definition you thought the identifier represented.
Any string of characters will suffice as the identifier - however, using the generally accepted identifier can eliminate confusion later when you can’t remember what you meant by ‘Ford’, which could represent hundreds of distinct ‘Ford’ bond issues.
The database locates bond definitions using the identifier you provide in the control located in the top left area of the dialog. This control is a combo-box, which means it has both edit and drop-down capabilities. You can recall instrument definitions by selecting an identifier from the drop-down box, or by a combination of ‘typing’ and scrolling. It supports auto-completion, so the ‘typing’ required on recall is minimal. Whatever capitalization is used when the instrument definition is first saved, defines the identifier’s capitalization forever more, but when you look up an identifier later, capitalization is ignored – it’s used for presentation only.
You can use any arbitrary identifier in a bond definition, but it’s wise to use the commonly accepted identifier, if for no other reason than it helps minimize ambiguity later.
Suppose that you haven’t modified
the default values of the confirmation options and have just defined an
instrument with the identifier ‘Ford Mtr Co
If you’d rather opt out of confirmations like these, you can use the Confirmation Options dialog to uncheck the preference labeled ‘Definition dialogs – close’. When this preference is unchecked, subsequent close events in any of the three instrument definition dialogs will simply update the database without asking permission.
If you’ve already detoured through the Confirmation Options, you may have noticed a preference labeled ‘Definition dialogs – change symbol’. This preference operates similar to ‘Definition dialogs – close’, but is triggered by changing the value of the bond identifier (symbol) while one or more of the remaining dialog controls contains a value different from the associated value in the database. Naturally, if confirmation is enabled and you’ve never saved a bond definition with that identifier before, then a confirmation dialog will post no matter what state the controls are in.
The
Bond Definition Dialog operates analogously to the Stock Definition Dialog and
is affected by the same preferences that affect database updates in the Stock
Definition Dialog. The bond identifier
is a combo-box with the same behaviors as the stock symbol combo-box. The Bond Definition Dialog includes controls
for entering a bond symbol, the bond’s current market price, its par value,
maturity date, coupon rate, number of coupons per year, etc. The Bond Definition Dialog imports the
Current Yield, Yield to Maturity, and Macaulay Duration from the Bond Analyzer,
but we’ll get to those later.
Refer to the Symbol / Identifier discussion in the Instrument Definitions section above.
Market price and par value are currency denominated, single precision values.
The bond’s ‘Dated Date’ is called its inception in BondManager. The date of a bond’s first coupon is usually half a year after the bond’s inception date (for a ‘normal’ bond paying two coupons per year). BondManager calculates coupon dates backwards from the given maturity date. The bond’s maturity date usually coincides with the last coupon date, but in some cases, there may be slight differences between the bond’s official settlement date and the date of its final coupon. To ensure accurate income calculations, you should set the maturity date to the bond’s final coupon date.
Accurate coupon income calculations also depend on the inception date. For BondManager the inception date specifies the date before which no coupons are paid, so it need only include the bond’s first coupon date to ensure accurate income accounting. Beware that setting the inception date sufficiently early or the maturity date sufficiently late could infer the existence of ‘ghost’ coupons. BondManager will analyze any sort of bond you can define in the dialog, but if you’re interested in accurate accounting, you’ll probably want to avoid bestowing your portfolio with ghost coupons. Even if your mail is delivered by Ghost Riders Express, which frankly, has the world’s ghastliest delivery record, you’ll still face considerable difficulties depositing those ethereal coupons in your local bank.
Only two digits of the inception and maturity date years are displayed, but each date has four significant digits, so you should be careful about just typing over the two visible digits. For example, where 1997 is represented by 97, typing over 97 with 07 will get you 1907, not 2007. You can verify what the control actually contains, by using its drop-down arrow to inspect the full calendar.
The annual rate at which a coupon
bond produces income is given by the coupon rate. The annual coupon rate is divided among the
coupons specified. Each coupon is paid
in the amount of the coupon rate times the par value divided by the number of
coupons per year. The vast majority of
bonds pay coupons twice per year (the default), so a coupon bond with a quoted
rate of 8% will have two annual coupons, each amounting to 4% of the par value.
Setting the coupon rate to 0% or setting the number of coupons per year to zero are both effective means of modeling a zero-coupon bond. Conversely, coupon bonds will pay a nonzero percentage of the par value and have at least one coupon per year.
Finally, regarding data entry, a complete bond definition will specify the type of day counting used by the bond. Bonds have a long history, preceding computers and hand calculators. Prior to ubiquitous computing power, accurately computing accrued interest using the actual number of days in a month or year literally represented more computing effort than the extra accuracy was worth, so simplifying conventions crept in, and some are still with us.
Corporate, agency, and mortgage backed securities stuck with the concept that all months have thirty days and daily interest is the quoted annual interest rate divided by 360 - a day counting method called 30/360. Certificates of deposit and various interest rate indexes favor using the actual number of days in each month, but have retained 30/360’s daily rate calculation – a day counting method called Actual/360. Finally, Actual/Actual day counting is most often employed for Treasury bonds and similar notes. Actual/Actual daily interest is the quoted annual rate divided by 365 or 366, depending on whether the day in question is within a normal or a leap year.[2]
Having specified the relevant values above, the current yield, yield-to-maturity, and Macaulay duration are displayed. Current yield expresses the ratio of the coupon amount to the current market value of the bond. Yield to maturity is the interest rate which when applied to the bond’s par value and all of its coupons will result in the current market value of the bond. Macaulay duration remaps a coupon bond’s maturity to where it would be if it were a zero-coupon bond paying with the computed yield-to-maturity.[3]
There are two preferences dialogs
in BondManager, both launched from the Edit menu.
The Confirmation Options dialog allows you to view and modify the current value of six confirmation options which affect behaviors in the Bond Analyzer dialog, Bond Definition dialog, the Positions Dialog, and the Portfolio Navigator.
The Positions List Options dialog allows you to view and modify the visibility of columns in positions lists that appear in the Positions Dialog and the Portfolio Navigator.
There are three groups of preferences in the Confirmation Options dialog. Each preference controls whether to require user confirmation before doing something irreversible to the database. The first group controls whether to confirm Bond Definition updates. The second group controls whether to confirm portfolio position modifications and deletions.
The second and fourth check boxes indicate your desire to have BondManager post a confirmation dialog before updating a bond definition when you close the dialog. The second check box affects close events in the Bond Analyzer dialog and the fourth check box affects close events in the Bond Definition dialog. The default value for both preferences is to require confirmation.
The first and third check boxes indicate your desire to have BondManager post a confirmation dialog before updating a Bond Definition when you change the identifier in the bond definition and analyzer dialogs. The first check box regulates change identifier behavior in the Bond Analyzer dialog. The third check box dictates change identifier behavior in the Bond Definition dialog. The default value for both preferences is to require confirmation.
The preferences in the second group affect whether you’re queried for confirmation after pressing the Delete or Modify buttons in the Positions dialog. Confirming position deletes is probably a good idea, but it’s not a huge tragedy if you don’t confirm modify operations, because you’ll have the opportunity to re-Enter the position before quitting the Positions Dialog, but no warning will post when you close the dialog with values present in the controls above the Enter button. The default value for both preferences is to require confirmation.
Positions List Options are
virtually self-explanatory. The
preference names correspond with columns in the Positions dialog and the
Portfolio Navigator. The preferences in
the left column affect the visibility of columns in the Positions dialog and
the preferences in the right column affect the visibility of columns in the
Portfolio Navigator.
All of the preferences have the default value of enabled (checked), so all columns will be visible in each of the affected dialogs. The columns appear in the same order that they occur in the preferences list at right.
The only preference that doesn’t coincide with a column heading is the very last one on the right – ‘Initially Hide Positions’. The Portfolio Navigator has many row types; the row type at the leaf level in the hierarchy displays a position in a format almost identical to the display used in the Positions dialog.
The justifications for a
default of initially suppressing the display of positions went something like
this. 1) Positions are always displayed
in the Positions dialog. 2) You have the
option of expanding an issue’s summary node to see the positions that
contribute to that subtotal row. 3)
Portfolios would require more scrolling if the positions were visible. 4) It would be quite a bit of work to toggle
all of the issue expansion nodes off, to facilitate fitting more summary
information onto the small screen.
There are three dialogs in BondManager that deal with positions, the Positions Dialog,
the Portfolio Navigator, and the Positions Transcripts dialog. The Positions Dialog offers the opportunity
to view or create the positions linked to a specific stock or option issue.
The Portfolio Navigator provides a top-down view of your bond portfolio, optionally expanding or collapsing branches in the hierarchy down to individual positions at the leaf level.
The Positions Transcripts dialog provides a text transcript equivalent to the leaf level in the Portfolio Navigator. The intent is to export these journal entries for review, tax records, and other documentary purposes.
The Positions Dialog is where all positions in your portfolio are created. BondManager tries to anticipate which bond you want to edit positions for based on the last issue you defined, analyzed, or created/edited positions for.
In the screen shot at right, we’ve selected
‘Ford Mtr Co
Note that it’s not necessary to select a bond identifier
from those already defined in the database.
If you enter a new identifier, a placeholder bond definition will be
created for you, though BondManager will not make any
assumptions about the issue’s current market price, coupon rate, maturity date,
etc. The
market price in a placeholder
definition is set to 0.00 to serve as a reminder that its value has never been
properly defined. With so much
information missing, you’ll find that Income and Yield columns (discussed
below) contain meaningless placeholder values as well.
The current date is used as the default value for the Purchased date. Future dates are disabled, so you can’t accidentally create pro forma positions.
The number of bonds in a position is stored as a double precision floating point number. Although fractions of a bond don’t find much practical application, reinvestment plans often produce fractional shares of stock, so we’ve allowed for fractional bonds here to accommodate the possibility. For short sales, you’d specify the number of units as a negative number.
Total Cost[4] is
also stored as a double precision floating point value. The presumption is that it represents the
cost of the position including any transaction fees. As an example, if you defined ‘Ford Mtr Co
Note that the Total Cost associated
with a short sale is negative, thus representing an inflow of capital after
expenses. Fees would reduce the
magnitude of a short sale’s (negative) proceeds.
The Note field is provided to document almost
anything associated with the position – typically, the position’s source of the
funds. We’ll adopt the source of funds
convention and call the source ‘Lottery winnings’.
Once a symbol has been entered and
there are values for the number of shares and the total cost, the Enter button
will be enabled.[5] Tapping the Enter button inserts a position
representing the fields above into the database.
Any position that appears in the Active Positions control has persistent status. This dialog is the one place where you can modify or remove positions from the database. All stored positions for the currently selected bond identifier are displayed in the Active Positions list.
If, in the year before we won the lottery, we sold our classic Vette and bought 200 bonds of the very same ‘Ford Mtr Co Del’ bond issue. we’d see two positions in the database.
Note that the most recently created position appears first in the list, not last. This is done so you will have visual confirmation even when the list contents exceed the size of the control.
A Total row, highlighted in powder
blue, has been added to depict the sums for each of the columns. The one exception is the % Yield column which
displays the cost weighted average yield of the contributing positions (which
depict annualized yields in this column).
This entry gives you immediate feedback on how well cost averaging is
working for you. The total row is only
visible when more than one position exists for the issue you’ve selected.
Active Positions list columnsColumn headings are generally self explanatory, so we’ll focus on a few things that may not be as readily apparent. The Net Gain column displays the sum of the Capital Gain and Income columns. The Note column displays the Note you made to yourself before Entering the position in the list.
Managing Display of the Positions
ListClearly, you can’t see the contents of all columns without scrolling the Positions List horizontally, but you can disable the display of any of the columns in the Positions List Options dialog, thus reducing the need to scroll horizontally. The list control also supports column resizing, reordering, and sorting (toggles between ascending and descending) by tapping on the column header. If a total row is present, it is not included in the sort.
The three buttons below the Positions List allow you to manage the list of positions displayed above. If you select one of the positions in the list, you’ll see the row highlight and the three buttons at the bottom of the screen become enabled. You may notice that you can’t select the total row – it’s not a real position, just a summary entry in the list control.
Here’s what happens when you select one of the three buttons at the bottom of the dialog.
DeleteThe Delete button is the simplest of the three. Selecting it causes the message box below right to post over the dialog. [6] If you click ‘Yes’, it the position will disappear from the database forever. The Delete button is the only one of the three bottom buttons that supports multiple selections.
The Modify button is very much like
the Delete button, in that it warns you that you are about to delete the
selected position, and once you select ‘Yes’, the position will be permanently
deleted from the database, just as it promised.[7] The difference is that Modify overwrites,
without asking permission, all of the fields in the dialog with values taken
from the position you are ‘modifying’.
Clearly, you shouldn’t use the Modify button if you have typed
information into the fields above the Enter button that you care about.
After you complete your modifications, you must re-Enter the position in the database. Until it appears in the Active Positions list below the Enter button, it’s not saved in the database – that’s why the warning message says “you are about to permanently delete the selected position” when you just selected Modify. It’s really been permanently deleted until you re-Enter it.
The Close button also has irreversible consequences, but it does not have an associated preference in the Confirmation Options Dialog because it needs to capture additional information along with your approval to proceed. The Close Position Dialog completely overlays the Positions Dialog and collects three things from you which enable converting it into a closed position. The date the position was closed, the net proceeds from the sale, and a closing note. The closing date can be no later than the current date. Upon selecting the ‘OK’ button, a ‘closed position’ is created in the database with all of the information previously associated with the active (open) position. The active (open) position is then deleted.
There is no mechanism for modifying a closed position – it can’t be deleted, modified, or converted back into an active (open) position, but you can get transcripts of all closed positions according to the year in which they were closed (refer to the Positions Transcripts Dialog on the Tools menu).
Portfolio NavigatorThe Portfolio Navigator is the second positions dialog in BondManager. It
differs from the Positions Dialog in that it doesn’t allow you to close,
delete, enter, or modify positions in your portfolio. Its purpose is to display positions and
summarize your portfolio at various levels.
The hierarchical display implements a folding spreadsheet whose branches
can be expanded to obtain more detail or collapsed to a summary. The example at right depicts a portfolio
containing positions in eight different bond issues. The position rows are initially invisible, so
all you see at right are the issue summary rows and the total row for all bonds
in the
portfolio.
If you click on the
icon
next to the symbol (identifier), individual positions will be displayed above
the issue’s summary row. For example, if
you expand the ‘Ford Mtr Co
above
the issue’s summary row, as you might do if you were tallying the positions for
each issue. To collapse a branch, just
click on the issue’s summary row
icon.
The summary row for the entire bond portfolio has a manila background, symbolizing a manila folder. Position rows have a powder blue background - hopefully alliteration will serve as the mnemonic there. Issue summary rows use a plain white background.
The Portfolio Navigator treats columns slightly differently than the Positions Dialog. The columns available are Date/Name, Bonds, Cost, MktValue, CapGain, Income, NetGain, % Yield, Note/Desc. Coupon income contributes to the net gain. Net gain is the basis of the annualized yield calculation.
Date/Name and Note/Desc columns present information which depend on the row
type. Position rows, display the
purchase date in the Date/Name column and the Note you entered when you
created
the position in the Positions Dialog in the Navigator’s Note/Desc column.
Issue summary rows display the bond’s identifier in the Date/Name column and the description you entered in the Bond Definition dialog in Navigator’s Note/Desc column. Columns can be reordered using tap and drag, but sorting is not currently available. You can use Positions List Options to prevent some columns from being displayed. The default is for all columns to be visible.
In this example, the annualized yield for the portfolio as a whole is 7.828%.
Note: Purchase prices used in this example are entirely fictional.
Positions TranscriptsThe Positions Transcripts dialog collects
information for all open positions or for all positions closed within a given
calendar year and presents a textual report summarizing the activity. Of
course, they are useful as journals at tax time, but transcripts also serve as
a faster means of reviewing the current state of capital gains, coupon income,
annualized yields, etc. because scrolling a plain text window is faster than
scrolling a list control and you can see the derivative data all at once so you
don’t have
to scroll right and left to get a picture of
what’s going on.
The ‘Year Closed’ combo-box allows you to
choose between ‘Open’ and any years for which closed positions exist. If there is only one year, e.g. all positions
are active (open) or all closed positions were closed in the same year, then
that year’s positions will be loaded by default. If there are open and closed positions, Open
positions will be loaded by default. Otherwise the most recent year’s transcript
will be loaded by default.
In the example above right, you can see the first two journal entries from the list of open positions. Each entry includes: an opening date, the number of bonds purchased, the bond identifier, the description associated with the bond definition, the total cost of the position, any note you may have created with the position, and derivative information including capital gain, income, net gain, and the annualized yield represented by the net gain. Coupons from the purchase date to the present date contribute to the income figures. Portfolio totals for cost, capital gain, income, and net gain are posted below the positions listed in the transcript. The cost weighted annualized yield of all positions in the transcript completes the picture.
A transcript of closed positions is shown at right. It adds the closing date and closing note entered at the time the position was closed to the information associated with an open position.
The transcript displayed is not saved to a file until you choose to do so manually.
The ‘Save Transcript’ button allows you to save the transcript to a file, for review and editing outside BondManager and for upload to a desktop computer. The file dialog shown below is posted after clicking the Save Transcript button. It allows you to save the transcript to the file name of your choosing.
Database TraversalThe Positions Transcripts dialog traverses the database differently than other tools in BondManager. Other BondManager tools access positions through the bond definition, since each tracks its own list of positions.
Positions transcripts are generated by bypassing all of the instrument definitions and directly accessing the portfolio positions. This approach has both tactical and strategic advantages. From a tactical perspective, it saves CPU time (something that should always be conserved on a Pocket-PC platform) which might otherwise be wasted inspecting instrument definitions that don’t have associated positions.
From a strategic perspective, directly accessing the portfolio positions enhances robustness by potentially salvaging position information from a partially corrupted database. Hopefully, you’ll never have to find out whether this capability actually saves your bacon or not.
The downside of initially bypassing the instrument definitions is that positions associated with a particular issue won’t necessarily be contiguous in the transcript. The order in which the journal entries appear is generally the order in which you created the positions, except that space occupied by closed and deleted positions is recycled by subsequently created positions. For example, if you create twenty positions in your portfolio before deleting the second one ever created and then create a new position, the new one will appear second when you generate an open positions transcript. Given the benefits of efficient CPU utilization and the potential to salvage a corrupt database, journal entry disorder was viewed as a reasonable inconvenience. Tax agencies care more about completeness than order, and that’s what the transcript is intended to address.
Bond AnalyzerThe Bond Analyzer provides a view of the bond’s sensitivity to market yields and allows separation and discounting of associated coupons.
The first thing to note about the Bond Analyzer vs. the Bond Definition Dialog is that you can’t create a bond here. Given that the Bond Analyzer always picks the most recently used bond in your database and displays information for it rather than starting up with no entry in the Bond Identifier combo-box.
The market price edit box allows you to modify the current market price of the bond and watch how it affects various derived information, such as current yield, yield-to-maturity, Macaulay duration, etc. If, after modifying the market price, you change the symbol or close the dialog, the modified price will be saved to the database.[8]
Current yield expresses the ratio of the coupon amount to the current market value of the bond.
Yield to maturity is the interest rate that produces the current market value of the bond when the par value and all of future coupons are discounted at that rate.
Macaulay duration scales a coupon bond’s maturity to the number of years it would mature in if it were a zero-coupon bond paying the computed yield-to-maturity. Obviously, the duration of a zero coupon bond is the number of years until its maturity. The units are years / currency. Some sources show Macaulay duration as a negative quantity. This is a misconception addressed in the Glossary entry for Macaulay duration. In BondManager Macaulay duration is always positive.
Modified duration and convexity are the ingredients required to assess the bond’s market price under varying yield conditions. While yield to maturity tells you the yield for a bond priced at a certain level, ‘What-if YTM’ allows you to reverse the process, specifying a yield and obtaining the bond value that it imputes.
Modified duration rescales Macaulay duration by the periodic yield to show the response that a change in interest rates will force in the bond’s market value.
Convexity is the degree of curvature in a bond’s price-yield curve. It makes a second order contribution to the Imputed Market Price. Details are discussed in the Glossary.
DeltaYTM is a user specified quantity which drives an experimental value of the yield-to-maturity, called the What-If YTM. The DeltaYTM combobox will accept a floating point value entered from the keypad, but it also has percentages from -5 to +5 in increments of 0.5 preloaded, so you don’t need to resort to the keypad for most What-If analyses.
What-If YTM is the unlabeled quantity to the right of DeltaYTM and the static label ‘->’. What‑If YTM is the sum of the current Yield to Maturity and the DeltaYWM. What-If YTM is used to compute the Imputed Market Value of the bond, and to compute the present value of par value and a calendar range of coupons (inside the What-If YTM Discount box).
The Imputed Market Value displays the market value of the bond imputed by the specified What-if YTM. Other contributing factors naturally include the bond’s par value, maturity, coupons, and current price. The formula for imputed market value is:
|
|
C := convexity D := modified duration P := current market price V := imputed market value y := yield to maturity
|
If you leave the From and To dates at their defaults, this section merely breaks Imputed Market Value into its first order components, with contributions from the present value of the bond’s par value, and from the present value of all future coupons. If convexity is zero, the sum of these present value components will equal the Imputed Market Value. When convexity isn’t zero, you can readily see just how much influence convexity has on the Imputed Market Value. The sum of the par’s present value and the coupons’ present value will not equal the Imputed Market Value - the difference can be attributed to the effect of convexity on bond value.
The Discount box also allows you to choose other From and To dates, so you can assess the present value of coupons from any pair of dates within the bond’s inception and maturity dates. One interesting possibility is to forward discount the coupons that have already been paid. Note that coupons with payment dates before the current time (as your Pocket-PC knows it) contribute more than their face value, not less.
This static string reminds you how many coupons per year the bond pays, with n replaced by te actual number of coupons per year paid by the bond.
This static string reminds you of the bond’s coupon rate. Obviously, ‘d.ddd’ will be replaced by the appropriate numerical digits.
The From Date defaults to the current date, but has a valid range from the bond’s inception date to the To Date.
The To Date defaults to the bond’s maturity date, but has a valid range from the To Date to the bond’s maturity date.
Present Value Coupons collects the present value of all coupons within the specified date range discounted at the What-if YTM rate. Note that it’s possible for coupons that have already been paid to contribute to this sum. Beware that coupons that have already been paid are ‘discounted’ at the complement of the What-if YTM rate, i.e. they contribute more than their face value, not less.
Present Value Par is exactly analogous to Present Value Coupons, except that it’s impossible for the par value to contribute more than face value because its impossible to set the From or To dates beyond the bond’s maturity date.
Graphical Tools The Rate Sensitivity Explorer provides a graphical view of how bond values respond to changes in yield. Bonds lose market value when interest rates rise, and gain value when interest rates fall. The relationship between interest rates and value is nonlinear, but over the small (reasonable) interest rate ranges presented in the examples here, the curves are nearly linear, though there is some curvature evident in Ford Motor Co’s rate sensitivity (red).
The X-axis depicts prospective changes in each issue’s yield to maturity. The Y-axis depicts the percentage change in the value of the bond (or portfolio) at each X-value. The bond’s current yield to maturity is represented by the 0 point, so all curves will pass through (0,0). The colors assigned to the curves are red, green, blue, and purple ordered from topmost symbol to bottom, e.g. Ford Motor Co – red, Haliburton Co – green, etc. as shown in the screenshot at right.
The four checkboxes on the right side of the
dialog control whether the bond identifier currently displayed in the adjacent
combo-box will be plotted below. All
four plots are enabled in these examples.
The four ComboBoxes immediately to the left of the check boxes allow you to enter a bond identifier, by selecting the identifiers of a bond previously defined in the Bond Definition Dialog. There are three selection methods possible. If you’re just interested in plotting the next issue in the list, whatever that happens to be, you can scroll through the list of identifiers using the up/down hardware keys. A fresh plot is generated for every arrow-up and arrow-down key press, so this method gets you something new to review with little effort. However, since each plot computes the present value of all future coupons for all enabled issues, multiple times across the X-axis, it’s a costly mechanism for navigating a long way through the list of issues. If you need to move a long distance in the list, the fast way is to use the drop down list and make your selection there. The upside down caret on the right end drops down a scrollable list containing the identifiers containing all of the bond issues you’ve defined. Of course you can also type the bond identifier manually. Auto-completion makes this less painful than it might otherwise be to select one character at a time with the pen.
Positions must exist in the portfolio for the Portfolio checkbox to be enabled. In the example above right, there were no positions in the portfolio to plot and the Portfolio checkbox is disabled. Prior to capturing the second example at right, two positions were created, representing 200 of the Belo Corp bonds and 100 of the Ford Motor Co bonds. With positions in the portfolio, the Portfolio check box is enabled. When checked, an additional curve is plotted in black, representing the cost weighted average rate sensitivity of all bond positions in the portfolio. Issues in the portfolio with positions are each weighted by the cost of those positions relative to the cost of the entire bond portfolio. Note that the portfolio’s rate sensitivity is now 1/3 of the way between the rate sensitivities of Belo and Ford.
The ‘-‘ edit box specifies how far below the current yield to maturity to set the low X-value in the plot.
The ‘+’ edit box specifies how far above the current yield to maturity to set the high X-value in the plot.
Convexity is a function of the second derivative of a bond’s market value with respect to its yield, as shown in the box below.
|
|
c := coupon amount C := convexity m
:= # of coupons per year n := years to maturity V := the bond’s market value y := yield to maturity |
Current yield is the ratio of a year’s worth of coupons to the current market price of the bond, expressed as a percentage.
In
the
The Actual/360 day counting method is used for bank deposits and to calculate rates pegged to indices, e.g. LIBOR. The daily interest rate is 1/360 times the quoted annual rate. The number days per month is based on the actual number of calendar days during a given month (28, 29, 30 or 31). The number of days between February 25 and March 5 will be five in most years, and six in leap years.
Actual/Actual day counting is used for Treasury bonds and notes. The Actual/Actual day counting method is the most intuitive of the day counting schemes. Each year with 365 days has a daily rate equal to 1/365 times the quoted annual rate, while leap years have a daily rate equal to 1/366 times the quoted annual rate. The number of days per month is based on the actual number of calendar days in each given month (28, 29, 30 or 31). The number of days between February 25 and March 5 will be five in most years, and six in leap years.
Macaulay duration was developed as a measure which puts coupon and non-coupon bonds on a comparable footing. Recall that all income for a zero-coupon bond is paid on the maturity date and the Macaulay duration of a zero-coupon bond is the number of years until it reaches maturity. Conversely, coupon bonds produce income prior to maturity. In order to compare zero-coupon and coupon bonds, Frederick Macaulay proposed accumulating the weighted (by time to maturity) future value (at maturity) of each coupon and the similarly weighted par value, thereby allowing a coupon bond to masquerade as a zero-coupon bond.
I believe that R. J. Donohue’s An Introduction to Cashflow Analysis[9] is one source responsible for fostering the occasional misconception that Macaulay duration is negative. Donohue starts with first derivative of bond value with respect to yield and works backward ultimately finding that Macaulay duration is negative. I beg to differ. Macaulay duration is a (scaled) time weighted sum of discounted coupons and par value,

with
periodic yield
, where m
represents the number of coupons per year.
There simply is no way that such a forward looking, time weighted sum
can produce a negative value. Modified
duration merely scales Macaulay duration by the periodic yield, so 
is also positive. Admittedly, the first derivative of bond
value with respect to yield is
negative. When you take the derivative
of bond value,
, you get
, or
. The quantity inside
the brackets is
, so
. In summary,
|
|
c := coupon amount m
:= # of coupons per year V := the bond’s market value y := yield to maturity |
Modified
duration essentially scales the Macaulay duration by its periodic yield. The practical application of modified
duration is as a first order approximation of how the bond price will change as
a function of its yield. In practice,
you’d use
to find the effect a
yield change would have on the bond’s market value, but for accurate bond
valuation, you should also consider convexity.
|
|
m := number of coupons per year V := the bond’s market value y := yield-to-maturity |
High duration positions (or portfolios) experience greater risk of loss than low duration positions do. Without considering the effect of convexity, a bond with a modified duration of four years will decline in value by four percent for a percentage point increase in interest rates. Analogously, longer duration bonds have increased risk of loss due to rate increases. See also: Convexity.
Yield to maturity is defined as the rate of interest that, when used to discount a bond’s cash flows, generates the bond’s current market price, i.e. it satisfies the following equation:
|
|
c := the coupon amount m := number of coupons per year n := years to maturity P := the par value V : = the bond’s market value y := yield to maturity |
This expression can be solved iteratively to find the yield to maturity, given a bond value.
The Yahoo! Finance Bond Screener[10] is a terrific resource for locating bond issues of potential interest. As you can see in the screen shot at right, you can search for corporates, municipals, and treasuries with and without coupons and you can narrow your search to a range of coupon rates, current yield, yield to maturity, debt rating, and whether or not the bond is callable. Keep in mind that BondManager doesn’t currently support analysis of bonds with callable features.
Let’s say you hope to find an ‘A’ or better
rated corporate bond with a yield to maturity of 7% or better. You fill out the screen something like the
one at right, click ‘Find Bonds’ and … oops, at this point in time (February
2006), there aren’t any! Okay, how about
6%? This time, your input screen would
look exactly like the one at right and your results would look something like
the following screen shot indicating that there are thirty-nine candidates that
meet your search criteria. So how do you
choose?
When you narrow the field according to yield to maturity on instruments of fairly high quality, you tend to get candidates that perform similarly. After yield and quality, some remaining considerations would be price of course, but time to maturity, duration, and sensitivity to changes in prevailing market yields might also play a role in your decision process. Price is obvious so it needs no further support. Yahoo’s Bond Screener will sort candidates by maturity, so you’re set there.

Duration is the traditional bond value comparative measure. It is closely related to the first derivative of bond value with respect to time, and Bond Analyzer can help you narrow the field thereby. You’ll note that the Bond Analyzer computes Imputed Market Value for you given ‘Delta YTM’ – a pro forma change in market yields. Imputed Market Value is a function of modified duration and convexity. Convexity is closely related to the second derivative of bond value with respect to time. So, if you have an idea regarding where yields are headed, you can scroll through bonds in your database, taking note of those most resistant to loss of value as rates rise or those best positioned to take advantage of falling market rates. For numerical accuracy, Imputed Market Value in the Bond Analyzer is the way to go, but if you’re just shopping, you may find that the Rate Senstivity Explorer provides the picture you need. It allows you to visually compare the Imputed Market Value of four different issues across a range of changes in yield. Additionally, it allows you to compare prospective candidates with your existing portfolio, so you can select issues that either dilute your exposure to a change in market rates or enhance it, depending on what your crystal ball is telling you.
[Fabozzi] Bond Markets, Analysis and Strategies, 5th
Edition
Frank J. Fabozzi. 2003 Pearson Prentice Hall.
Fabozzi’s book is a (if not the) definitive reference on bonds. There are plenty of examples and discussion on duration, convexity, strips, callable and convertible bonds, mortgage-backed securities, bond markets, swaps, futures, etc. There are some minor typos, but the intent is usually obvious. Without qualification, I much prefer Fabozzi’s approach to the math. In particular, his presentation of pricing under changing yield conditions (duration, convexity, etc.) is superior to Farrell’s or anybody else I’ve read so far.
[Farrell]
Portfolio Management, Theory and Application, 2nd Edition
James L Farrell, Jr. 1997 McGraw-Hill Companies, Inc.
Farrell doesn’t provide as many formulas (thus leaving himself less exposed to errors) or revisit them in as many ways as Fabozzi does, but this book has the advantage of covering portfolio theory and working valuation models at a lower level than you’ll typically find in a book on portfolio management, so it’s a nice overall introduction to the subject matter for the uninitiated. It’s also a nice complement to Hull’s book, which doesn’t venture into portfolio theory, but if you’d rather pass on that and focus on on yield curves, strips, and other fixed income issues, you’re better off moving up to Fabozzi.
[1] Options for column display in the Portfolio Navigator are set in the right hand column of Portfolio Navigator preferences in the Positions List Options dialog.
[2] Day counting methods are discussed in the Glossary.
[3] All three terms are also discussed in the Bond Analyzer and Glossary sections.
[4] Only ‘Cost’ appears in the column header in the Positions Dialogs in this section because the column was resized to a smaller width.
[5] The initial results of clicking the Enter button are shown above right, with scroll-right addenda below it.
[6] You can bypass warning messages posted by the Delete button by disabling the preference ‘Positions Dialog – Delete position’ in the Confirmation Options Dialog.
[7] You can bypass warning messages posted by the Modify button by disabling the preference ‘Positions Dialog – Modify position’ in the Confirmation Options Dialog. .
[8] If the save confirmation preference is enabled, BondManager will first ask permission to store the modified market price.
[9] http://www.regentschoolpress.com/BondDuration.pdf provides a relevant excerpt.