BONDRATE.MOD
From Support
- See also: How to read .MOD pages
Contents |
Description
BONDRATE.MOD is an example of using SIGMA to analyze a problem in finance: determining fair pricing for coupon bonds in the presence of randomly fluctuating interest rates. The simple model we will develop can serve as a basis for more complicated cash stream analysis; indeed, this model can be enriched to study financial risk in general cash flow scenarios.
In determining a fair price for a coupon bond (or any other investment), it is important to consider alternatives. For our example, we consider the decision faced by an investor who is offered shares in a variable rate mutual fund with a guaranteed minimum interest of 8%. Interest returns on this kind of investment are expected to remain about 15% over the next 5 years, but are highly variable. A more conservative option is being offered by an investment banker: a 5-year coupon bond that pays $10,000 at the end of each year with a $100,000 value upon maturity. How much should our investor be willing to pay for the coupon bond?
Discount factors are used to account for interest. With an interest rate of I for a particular year, cash is worth (1+I) as much at the end of the year as at the first of the year. Equivalently, cash at the end of the year is worth 1/(1+I) as much at the beginning of the year; the factor, R=1/(1+I), is called the discount factor for that year. Therefore, multiplying a cash payment at the end of the year by R gives its present value.
In addressing this problem, we will assume that yearly interest rates for the mutual fund can be modeled using a normal probability distribution with a mean of 15% and standard deviation of 5%. Our simulation can be used to simulate thousands of replications of the next five years. For each replication we can determine the fair price for the bond. If the bond is offered at less than this price, the investor would have been better off buying it. In a few seconds, the investor can use our simulation to gain 5000 years of experience before making a decision.
Starting with this model, it is possible to build a very sophisticated, customized, financial risk model. In fact, a New York investment bank uses a SIGMA model to explore the pricing of "cocktail" bonds, which can be cashed in one of several foreign currencies.
State Variables
Variable Name | Abbreviation | Variable Description | Size | Type |
---|---|---|---|---|
CASH | CASH | Net cash flow (cashflow diagram only) | 1,1 | Real |
I | I | Interest rate per compounding period | 1,1 | Real |
NPV | NPV | Net present value of cashflow (before taxes) | 1,1 | Real |
PAYMT | PAYMT | End of year coupon payment on bond | 1,1 | Real |
MINR | MINR | Minimum interst from alternative investment | 1,1 | Real |
CFLAG | CFLAG | 1=Want cashflow diagram, 2=Want cash position | 1,1 | Integer |
PRICE | PRICE | Fair price of bond with maturity of N years | 1,1 | Real |
R | R | Discount rate for each year to present | 30 | Real |
N | N | Index for years | 1,1 | Integer |
VALUE | VALUE | Face value of bond at maturity | 1,1 | Real |
INT | INT | Average interest rate over life of bond | 1,1 | Real |
STD | STD | Standard deviation of rate over bond life | 1,1 | Real |
LIFE | LIFE | Life of the bond until maturity | 1,1 | Integer |
REP | REP | Index for which replication is being run | 1,1 | Integer |
NREP | NREP | Number of replications you wish to run | 1,1 | Real |
Vertices
Vertex Name | Vertex Description | State Changes |
---|---|---|
RUN | Start of the run | R=1, NPV=0 |
CASH | Cash payment for year n | I=NOR{INT;STD},I=MAX{I;MINR},R=R*(1/(1+I)),CASH=PAYMT,NPV=NPV+CASH*R |
FLOW | Cash reset to zero (for cash flow diagram) | CASH=0 |
TERM | Bond maturing | CASH=CASH+VALUE, NPV=NPV+VALUE*R, REP=REP+1, PRICE=NPV |
Initialization Conditions
Variable | Description |
---|---|
LIFE | Life of the bond until maturity |
VALUE | Face value of bond at maturity |
MINR | Minimum interst from alternative investment |
INT | Average interest rate over life of bond |
STD | Standard deviation of rate over bond life |
PAYMT | End of year coupon payment on bond |
CFLAG | 1=Want cashflow diagram, 2=Want cash position |
NREP | Number of replications you wish to run |
Event Relationship Graph
English Translation
An English translation is a verbal description of a model, automatically generated by SIGMA.
The SIGMA Model, BONDRATE.MOD, is a discrete event simulation. It models THE LIFE OF A BOND TO DETERMINE ITS FAIR PRICE.
I. STATE VARIABLE DEFINITIONS.
For this simulation, the following state variables are defined:
CASH: NET CASH FLOW (CASHFLOW DIAGRAM ONLY) (real valued) PAYMT: END OF YEAR COUPON PAYMENT ON BOND (real valued) PRICE: FAIR PRICE OF BOND WITH MATURITY OF N YEARS (real valued) I: INTEREST RATE PER COMPOUNDING PERIOD (real valued) R[30]: DISCOUNT RATE FOR EACH YEAR TO PRESENT (real valued) N: INDEX FOR YEARS (integer valued) VALUE: FACE VALUE OF BOND AT MATURITY (real valued) INT: AVERAGE INTEREST RATE OVER LIFE OF BOND (real valued) STD: STANDARD DEVIATION OF RATE OVER BOND LIFE (real valued) LIFE: LIFE OF THE BOND UNTIL MATURITY (integer valued) REP: INDEX FOR WHICH REPLICATION IS BEING RUN (integer valued) NREP: NUMBER OF REPLICATIONS YOU WISH TO RUN (real valued) NPV: NET PRESENT VALUE OF CASHFLOW (BEFORE TAXES) (real valued) MINR: MINIMUM INTEREST FROM ALTERNATIVE INVESTMENT (real valued) CFLAG: 1=WANT CASHFLOW DIAGRAM, 2=WANT CASH POSITION (integer valued)
II. EVENT DEFINITIONS.
Simulation state changes are represented by event vertices (nodes or balls) in a SIGMA graph. Event vertex parameters, if any, are given in parentheses. Logical and dynamic relationships between pairs of events are represented in a SIGMA graph by edges (arrows) between event vertices. Unless otherwise stated, vertex execution priorities, to break time ties, are equal to 5.
1. The RUN(LIFE,VALUE,MINR,INT,STD,PAYMT,CFLAG,NREP) event occurs when START OF THE RUN. Initial values for, LIFE,VALUE,MINR,INT,STD,PAYMT,CFLAG,NREP, are needed for each run. This event causes the following state change(s): R=1 NPV=0 After every occurrence of the RUN event: Unconditionally, SCHEDULE FIRST CASH PAYMENT; that is, schedule the CASH(N) event to occur in 1 time units...using the parameter value(s) of 1.
2. The CASH(N) event occurs when CASH PAYMENT FOR YEAR N. This event causes the following state change(s): I=NOR{INT;STD} I=MAX{I;MINR} R=R*(1/(1+I)) CASH=PAYMT NPV=NPV+CASH*R After every occurrence of the CASH event: If CFLAG==1, then IF CASHFLOW DIAGRAM DESIRED, RESET CASH; that is, schedule the FLOW() event to occur in .01 time units. If N<LIFE, then SCHEDULE NEXT CASH EVENT; that is, schedule the CASH(N) event to occur in 1 time units...using the parameter value(s) of N+1. If N==LIFE, then THIS IS THE LAST YEAR IN THE BOND TERM; that is, schedule the TERM() event to occur without delay.
3. The FLOW() event occurs when CASH RESET TO ZERO (FOR CASH FLOW DIAGRAM). This event causes the following state change(s): CASH=0 No additional events are scheduled here.
4. The TERM() event occurs when BOND MATURING. This event causes the following state change(s): CASH=CASH+VALUE NPV=NPV+VALUE*R REP=REP+1 PRICE=NPV After every occurrence of the TERM event: If CFLAG==1, then IF CASHFLOW DIAGRAM DESIRED, RESET CASH; that is, schedule the FLOW() event to occur in .01 time units. If REP<NREP, then THERE ARE STILL MORE REPLICATIONS TO RUN; that is, schedule the RUN(LIFE,VALUE,MINR,INT,STD,PAYMT,CFLAG,NREP) event to occur without delay... using the parameter value(s) of LIFE,VALUE,MINR,INT,STD,PAYMT,CFLAG,NREP.