# 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

State Variables in BONDRATE.MOD
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

Vertices in BONDRATE.MOD
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

Initialization Conditions in BONDRATE.MOD
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

BONDRATE.MOD

# 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.
```