arbitrage
dominance
hedging
many possible answers, for example caps, floors, bond options, swaps, mortgages, and inverse floaters
many possible answers, for example wheat (may be expected to drop at the harvest) or oil (may be expected to drop when new pipeline capacity comes online)
Riskless bond (interest rate is 20%):
100 --- 120
Futures price:
|- 80 50 -| |- 30
Derivative security (call futures option with a strike of 50):
|- 30 ? -| |- 0
In a futures contract, you invest 0 at the beginning of the period to receive the change in the futures price at the end of the period, so we have: 100 --- 120 |- 80-50 = 30 0 -| |- 30-50 = -20 |- 30 ? -| |- 0 Let F be the number of futures contracts and B the number of bonds. 30 = 30 F + 120 B 0 = -20 F + 120 B F = 3/5 (buy 3/5 contract) B = 1/10 (buy 1/10 bond)
Again, keep in mind that it costs 0 to enter a futures position. 0 F + 100 B = 0 x 3/5 + 100 x 1/10 = 10
The risk-neutral probabilities have to price the futures correctly. piup x 30 + (1-piup) x (-20) 0 = ---------------------------- 1.2 Therefore, piup = 2/5 pidown = 1 - piup = 3/5
The value may be less to the extent that holding the options damages diversification. This is unlikely to be a significant effect unless the options represent a significant fraction of the portfolio.
The questions in this section are based on the Fixed Income Applet in Homework 2. You should not need to use the complete java program listing, but it is included at the end of the exam in case you would like to have a look at it.
//compute prices back through the tree //j is the number of periods from the end //i is the number of up moves from the start for(j=1;j<=nper;j++) {for(i=0;i<=nper-j;i++) { r[i] = r0 + up * (double) (2*i-nper + j); prup = 0.5 + prfact*(rbar-r[i]); prup = Math.min((double) 1.0,Math.max((double) 0.0,prup)); val[i] = (prup*val[i+1]+(1.0-prup)*val[i])*Math.exp(-r[i]*tinc) + Math.max((double) 0.0,(r[i]-level)*tinc);}}How would this have to be modified to price a floor instead?
Change ``(r[i]-level)'' in the last line to ``(level-r[i])''.
double bprice(double r0) { int i,j; double prup; //initialize terminal payoffs //i is the number of up moves for(i=0;i<=nper;i++) { // r[i] = r0 + up * (double)(2*i-nper); not needed for this claim val[i] = 1.0;} //compute prices back through the tree //j is the number of periods from the end //i is the number of up moves from the start for(j=1;j<=nper;j++) {for(i=0;i<=nper-j;i++) { r[i] = r0 + up * (double) (2*i-nper + j); prup = 0.5 + prfact*(rbar-r[i]); prup = Math.min((double) 1.0,Math.max((double) 0.0,prup)); val[i] = (prup*val[i+1]+(1.0-prup)*val[i])*Math.exp(-r[i]*tinc);}} return(val[0]);}How would this method have to be modified to price a European call option on the interest rate?
First uncomment the line that says ``not needed for this claim'' on the end and delete everything after the semicolon in this line. In the following line, replace ``val[i]=1.0;'' by ``val[i]=Math.max(r[i]-strike,(double) 0.0);''. Finally, in the first line change ``bprice(double r0)'' to ``intcall(double r0, double strike)''.
No, because the probabilities may not be equal. In fact, the risk-neutral probabilities are not equal because of the probability adjustment to implement mean reversion.
These questions are intended to be more challenging conceptual questions. Answering these questions correctly can give you up to 20 points to substitute for points missed in Parts A-C.
Replace the line val[i] = (prup*val[i+1]+(1.0-prup)*val[i])*Math.exp(-r[i]*tinc);}} by if(r[i] < threshold) val[i] = 0.0; else val[i] = (prup*val[i+1]+(1.0-prup)*val[i])*Math.exp(-r[i]*tinc);}} Also, the threshold should be made an argument to the function. Replace double cap(double level,double r0) { by double downoutcap(double level,double r0,double threshold) {
The new mean return on the interest rate should be adjusted down to a level that makes the expected return on all bonds equal to the riskfree rate.