You are on page 1of 101

20

zhushw@em.tsinghua.edu.cn

20.1
7704

1
2
3
4

2 000
2 000
2 500
4 000


%macro a(y);
data;
p=2000/(1+&y)+2000/(1+&y)**2+2500/(1+&y)**3+4000/(1+&y)**4;
y=100*&y;
put y= p=;
%mend a;
%a(0.1);
%a(0.14);
%a(0.12);
run;

y=10 p=8081.4152039
y=14 p=7349.0709218
y=12 p=7701.624974
7704 12%

20.2

6 $50 10
6.5%;

1243.82


%macro a(y);
data;
p1=50/(1+&y)+50/(1+&y)**2+50/(1+&y)**3+50/(1+&y)**4+50/(1+&y)**5
+50/(1+&y)**6+50/(1+&y)**7+50/(1+&y)**8+50/(1+&y)**9+50/(1+&y)**10;
p2=1000/(1+&y)**10;
p=p1+p2;
put p1=;
put p2=;
y=100*&y;
put y= p=;
%mend a;

%a(0.03);
%a(0.0275);
y=3, p=1170.6040567
%a(0.025);
%a(0.0225);
y=2.75,p=1194.4017137
%a(0.0325);
y=2.5, p=1218.8015983
run;

y=2.2, p=1243.8209496
y=3.25, p=1147.3919139

1243.82
2.25%2=4.5%

20.3 20.2 944.14


1243.82

%macro a(y);
data;
p1=50/(1+&y)+50/(1+&y)**2+50/(1+&y)**3+50/(1+&y)**4+50/(1+&y)**5
+50/(1+&y)**6+50/(1+&y)**7+50/(1+&y)**8+50/(1+&y)**9+50/(1+&y)**10;
p2=1000/(1+&y)**10;
p=p1+p2;
put p1=;
put p2=;
y=100*&y;

put y= p=;
y=4.5, p=1039.5635909
%mend a;
y=4.75, p=1019.5408692
%a(0.045);
y=5, p=1000
%a(0.0475);
y=5.25, p=980.92789882
%a(0.05);
y=5.5, p=962.31187086
%a(0.0525);
y=5.75, p=944.13959857
%a(0.055);

%a(0.0575);

944.14 5.75%2=11.5%
run;

20.4 30 50000
349.60
360
43449


%macro a(y);
data;
p=0;
do n=1 to 360 ;
p=p+349.6/(1+&y)**n;
output;
end;
y=100*&y;
put y= p=;
%mend a;
%a(0.00625);
%a(0.006667);
%a(0.007083);
%a(0.0075);
run;

y=0.625, p=49998.962511
y=0.6667, p=47642.898994
y=0.7083, p=45468.430053
y=0.75, p=43448.940241

43449 0.75%

20.5 6 1 000 000


30 20 000
000 19 696 024
5.10%


%macro a(y);
data;
p1=0;
do n=1 to 30 ;
p1=p1+1000000/(1+&y)**n;
output;
end;
p2=20000000/(1+&y)**30;
p=p1+p2;
put p1=;
put p2=;
y=100*&y;
put y= p=;
%mend a;
%a(0.05);
%a(0.0505);
%a(0.051);
run;

y=5, p=20000000
y=5.05, p=19847147.788
y=5.1, p=19696024.811

19696024 5.10%


1 1
m

20.6 4% 1.042-1=8.16%
2% 8.24%

%macro a(y,m);
data;
i=(1+&y)**&m-1;
y=100*&y;
put y= i=;
%mend a;
%a(0.02,4);
run;

y=2 , i=0.08243216

20.7 6% 700.89
1000 6 30 36

data a;
delete;
%macro a(y);
data a1;
p1=0;
do n=1 to 36 ;
p1=p1+30/(1+&y)**n;
output;
end;
data a1;
set a1 end=lasobs;
if lasobs;
p2=1000/(1+&y)**36;
p=p1+p2;
y=200*&y;
y1=100*&y;
data a;
set a a1;
%mend a;

%a(0.0325);
%a(0.035);
%a(0.0375);
%a(0.04);
%a(0.0425);
%a(0.045);
%a(0.0475);
put p=;
run;

p=947.39977388
p=898.54753094
p=853.14448488
p=810.91718046
p=771.61525276
p=735.00939134
p=700.88949018

700.89 9.5%

data a;
%a(0.0325);
delete;
%a(0.035);
%macro a(y);
%a(0.0375);
data a1;
%a(0.04);
p1=0;
%a(0.0425);
do n=1 to 36 ;
%a(0.045);
p1=p1+30/(1+&y)**n;
%a(0.0475);
output;
proc print data=a;
run;
end;
data a1;

set a1 end=lasobs;
Obs
P1 N
P2
P
Y Y1
if lasobs;
1 631.203 36 316.197 947.400 6.5 3.25
p2=1000/(1+&y)**36;
2 608.715 36 289.833 898.548 7.0 3.50
3 587.422 36 265.722 853.144 7.5 3.75
p=p1+p2;
4 567.248 36 243.669 810.917 8.0 4.00
y=200*&y;
5 548.123 36 223.492 771.615 8.5 4.25
y1=100*&y;
6 529.981 36 205.028 735.009 9.0 4.50
data a;
7 512.761 36 188.129 700.889 9.5 4.75
set a a1;
%mend a;

20.8 11% 1233.64


1000 6 55 38
8.5%

data a;
delete;
%macro a(y);
%a(0.03);
data a1;
%a(0.0325);
p1=0;
%a(0.035);
do n=1 to 38 ;
%a(0.0375);
p1=p1+55/(1+&y)**n;
%a(0.04);
output;
%a(0.0425);
end;
proc print data=a;
data a1;
set a1 end=lasobs;

Obs P1
N
p2
P
Y Y1
if lasobs;
1 1237.09 38 325.226 1562.31 6.0 3.00
p2=1000/(1+&y)**38;
2 1190.36 38 296.604 1486.97 6.5 3.25
p=p1+p2;
3 1146.26 38 270.562 1416.82 7.0 3.50
y=200*&y;
4 1104.60 38 246.861 1351.46 7.5 3.75
y1=100*&y;
5 1065.23 38 225.285 1290.52 8.0 4.00
data a;
6 1027.99 38 205.641 1233.64 8.5 4.25
set a a1;
%mend a;

c
c
c
c
t p (1 y ) (1 y ) (1 y ) ........ (1 y )
w

1 w

2 w

t
p
c
y

w=

n
M

n 1 w

M
(1 y )

n 1 w

20.9 10% 2003 3


1 118.788
1997 7 17 20.2

0.2444410.2444 5
11.2444
105


data;
date0='01mar1997'd;
date1='17jul1997'd;
date2='01sep1997'd;
days02=datdif(date0, date2, '30/360'); /* 30/360 */
days12=datdif(date1, date2, '30/360');
n=2*(2003-1997)-1;
put days02= days12= n=;
w=days12/days02;
put w=;
run;

days02=180 days12=44 n=11


w=0.2444444444

data a;
delete;
%macro a(y,z);
data a1;
p1=0;
do n=1 to 11 ;
p1=p1+5/((1+&y)**(n-1+&z));
output;
end;
data a1;
set a1 end=lasobs;
if lasobs;
p2=105/((1+&y)**(11-1+&z));
p=p1+p2;
y=200*&y;
y1=100*&y;
data a;
set a a1;
%mend a;

%a(0.0363, 0.2444444444);
proc print data=a;
run;

P= 118.780

3.63%
118.78
7.26% 23.63%

20.10 20.9

0.2510.25
11.25

5
105


data;
date0='01mar1997'd;
date1='17jul1997'd;
date2='01sep1997'd;
days02=datdif(date0, date2, 'act/act'); /* */
days12=datdif(date1, date2, 'act/act');
n=2*(2003-1997)-1;
put days02= days12= n=;
w=days12/days02;
put w=;
run;

days02=184 days12=46 n=11


w=0.25

data a;
delete;
%macro a(y,z);
data a1;
p1=0;
do n=1 to 11 ;
p1=p1+5/((1+&y)**(n-1+&z));
output;
end;
data a1;
set a1 end=lasobs;
if lasobs;
p2=105/((1+&y)**(11-1+&z));
p=p1+p2;
y=200*&y;
y1=100*&y;
data a;
set a a1;
%mend a;

%a(0.03627, 0.25);
proc print data=a;
run;

P= 118.785

7.254% 23.627%

==
<<
>>

20.11 6%, 700.89


18
5 1030 ,
6 30 10


data a;
delete;
%macro a(y);
data a1;
p1=0;
do n=1 to 10 ;
p1=p1+30/(1+&y)**n;
output;
end;
data a1;
set a1 end=lasobs;
if lasobs;
p2=1030/(1+&y)**10;
p=p1+p2;
y=200*&y;
y1=100*&y;
data a;
set a a1;
%mend a;

%a(0.056);
%a(0.0585);
%a(0.061);
%a(0.0635);
%a(0.066);
%a(0.0685);
%a(0.071);
%a(0.0735);
%a(0.076);
proc print data=a;
run;

Obs P1
N
P2
P
Y
Y1
1 225.048 10 597.308 822.356 11.2 5.60
2 222.380 10 583.349 805.729 11.7 5.85
3 219.760 10 569.749 789.509 12.2 6.10
4 217.187 10 556.496 773.683 12.7 6.35
5 214.659 10 543.582 758.241 13.2 6.60
6 212.176 10 530.997 743.173 13.7 6.85
7 209.737 10 518.731 728.468 14.2 7.10
8 207.340 10 506.777 714.117 14.7 7.35
9 204.985 10 495.125 700.110 15.2 7.60
15.2%

20.12 7% 1233.64
19
6 1055
, 6 55
12


data a;
delete;
%macro a(y);
data a1;
p1=0;
do n=1 to 12 ;
p1=p1+55/(1+&y)**n;
output;
end;
data a1;
set a1 end=lasobs;
if lasobs;
p2=1055/(1+&y)**12;
p=p1+p2;
y=200*&y;
y1=100*&y;
data a;
set a a1;
%mend a;

%a(0.0255);
%a(0.028);
%a(0.0305);
%a(0.033);
%a(0.0355);
%a(0.038);
proc print data=a;
run;

Obs P1
N
P2
P
Y Y1
1 562.473 12 779.874 1342.35 5.1 2.55
2 554.064 12 757.417 1311.48 5.6 2.80
3 545.840 12 735.659 1281.50 6.1 3.05
4 537.794 12 714.576 1252.37 6.6 3.3
5 529.923 12 694.147 1224.07 7.1 3.55
6 522.221 12 674.348 1196.57 7.6 3.80
7.6%

;
;

20.13
57259000
20.5

A
B
C
1
350 000 1 050 000
900 000 2 300 000
2
350 000 1 050 000
900 000 2 300 000
3
350 000 1 050 000
900 000 2 300 000
4
350 000 1 050 000
900 000 2 300 000
5
350 000 1 050 000
900 000 2 300 000
6
350 000 1 050 000 30 900 000 32 300 000
7
350 000 1 050 000
1 400 000
8
350 000 1 050 000
1 400 000
9
350 000 1 050 000
1 400 000
10 10350 000 1 050 000
11 400 000
11
1 050 000
1 050 000
12
1 050 000
1 050 000
13
1 050 000
1 050 000
14
21 050 000
21 050 000

%macro a(y);
data a;
ap1=0;
do n=1 to 9 ;
ap1=ap1+350000/(1+&y)**n;
output;
end;
data a;
set a end=lasobs;
if lasobs;
ap2=10350000/(1+&y)**10;
ap=ap1+ap2;
data b;
bp1=0;
do n=1 to 13 ;
bp1=bp1+1050000/(1+&y)**n;
output;
end;
data b;
set b end=lasobs;
if lasobs;
bp2=21050000/(1+&y)**14;
bp=bp1+bp2;

data c;
cp1=0;
do n=1 to 5 ;
cp1=cp1+900000/(1+&y)**n;
output;
end;
data c;
set c end=lasobs;
if lasobs;
cp2=30900000/(1+&y)**6;
cp=cp1+cp2;
%mend a;
%a(0.0476966);
data abc;
merge a b c;
p=ap+bp+cp;
put p=;
run;

p=57259006.946

9.53932% ( 24.76966%)

= +

;
;
3 ,
, 2

20.14 6
99.3098 , 80 ( )
10% 6
5.4% 100


1
10
5.4
2
10
5.4
3
10
5.4
4
10
5.4
5
10
5.4
6
10
5.4
7
10
5.4
8
10
5.4
9
10
5.4
10
10
5.4
11
10
5.4
12
10
5.4
=

80
84
88
96
5.1233 5.1224 5.1214 5.1195
4.8609 4.859
4.8572 4.8535
4.6118 4.6092 4.6066 4.6013
4.3755 4.3722 4.3689 4.3623
4.1514 4.1474 4.1435 4.1356
3.9387 3.9342 3.9297 3.9208
3.7369 3.7319 3.727
3.7171
3.5454 3.5401 3.5347 3.524
3.3638 3.358
3.3523 3.3409
3.1914 3.1854 3.1794 3.1673
3.0279 3.0216 3.0153 3.0028
56.0729 55.9454 55.8182 55.5647
100
99.8269 99.6541 99.3098

100
5.1185
4.8516
4.5987
4.359
4.1317
3.9163
3.7122
3.5186
3.3352
3.1613
2.9965
55.4385
99.1381


data a ;
set a;
delete;
%macro a(y,z,x);
data a1;
do n=1 to 12 ;
if n<12 then p&x=5.4/(1+&y+&z)**n;
else p&x=105.4/(1+&y+&z)**n;
output;
end;
data a1;
set a1;
sump&x+p&x;
data a;
merge a a1;
%mend a;

%a(0.05, 0.004,80);
%a(0.05, 0.0042,84);
%a(0.05, 0.0044,88);
%a(0.05, 0.0048,96);
%a(0.05, 0.005,100);
proc print data=a noobs;
run;

96

D
D
D
Par
PV

...

1 r (1 r ) 2
(1 r ) n (1 r ) n

PV ( )
D ( )
r
n 2
Par ( )

20.15 12% 20
9% 1000

40
40 1000

data;
p1=45*(1-(1/1.06**40))/0.06;
p2=1000*(1/1.06**40);
p=p1+p2;
put p1= p2= p=;
run;

p=774.30554693

20.16 20.15 7%
3.5% 7%2
40 3.5% 960.98

data;
p1=45*(1-(1/1.035**40))/0.035;
p2=1000*(1/1.035**40);
p=p1+p2;
put p1= p2= p=;
run;

p1=960.97825518 p2=252.57246819 p=1213.5507234


p=1213.5507234

20.17 1000 9% 16
12%
6% 12%2

32 ;
32 1000

data;
p1=45*(1-(1/1.06**32))/0.06;
p2=1000*(1/1.06**32);
p=p1+p2;
put p1= p2= p=;
run;

p=788.73934917


20.18 20.7 5%~14% 20
9%

1502.06
1346.72
1213.55
1098.96
1000
914.2
839.54
774.31
717.09
666.71

%
5
6
7
8
9
10
11
12
13
14

data a;
delete;
%macro a(y);
data a1;
p1=45*(1-(1/(1+&y)**40))/&y;
p2=1000*(1/(1+&y)**40);
p=p1+p2;
y=200*&y;
data a;
set a a1;
%mend a;

%a(0.025);
%a(0.03);
%a(0.035);
%a(0.04);
%a(0.045);
%a(0.05);
%a(0.055);
%a(0.06);
%a(0.065);
%a(0.07);
proc print data=a;
run;


proc gplot data=a ;
plot p*y=1;
symbol1 v=none i=join r=1 c=black;
title2 ' ';
label
p=' '
y=' ';
run;

20.19 1000 20
9% 12%

title2;
data a;
do n=40 to 0 by -2 ;
p1=45*(1-(1/(1+0.06)**n))/0.06;
p2=1000*(1/(1+0.06)**n);
p=p1+p2;
year=n/2;
output;
end;
proc print data=a noobs;
var year p1 p2 p;
run;

Year P1 P2
P
20 677.083
97.22 774.31
19 668.071 109.24 777.31
18 657.944 122.74 780.69
17 646.566 137.91 784.48
16 633.782 154.96 788.74
15 619.417 174.11 793.53
14 603.277 195.63 798.91
13 585.142 219.81 804.95
12 564.766 246.98 811.74
11 541.871 277.51 819.38
10 516.146 311.80 827.95
9
487.242 350.34 837.59
8
454.765 393.65 848.41
7
418.274 442.30 860.58
6
377.273 496.97 874.24
5 331.204 558.39 889.60
4 279.441 627.41 906.85
3 221.280 704.96 926.24
2 155.930 792.09 948.02
1
82.503 890.00 972.50
0
0.000 1000.00 1000.00

,
data a;
set a;
p0=1000;
proc gplot data=a ;
plot p*year=1 p0*year=2/overlay;
symbol1 v=none i=join r=1 c=black; symbol2 v=none i=join r=1 c=black;
title2 ' ';
label
p=' '
year=' ';
run;

20.20 1000 20 9% 7%

data a;
do n=40 to 0 by -2 ;
p1=45*(1-(1/(1+0.035)**n))/0.035;
p2=1000*(1/(1+0.035)**n);
p=p1+p2;
year=n/2;
output;
end;
proc print data=a noobs;
var year p1 p2 p;
run;

data a;
set a;
p0=1000;
proc gplot data=a ;
plot p*year=1 p0*year=2/overlay;
symbol1 v=none i=join r=1 c=black;
symbol2 v=none i=join r=1 c=black;
label
p=' '
year=' ';
title2 '
';
run;


Year
P1
P2
P
20 960.978 252.57 1213.55
19 937.849 270.56 1208.41
18 913.072 289.83 1202.90
17 886.531 310.48 1197.01
16 858.099 332.59 1190.69
15 827.642 356.28 1183.92
14 795.016 381.65 1176.67
13 760.066 408.84 1168.90
12 722.627 437.96 1160.58
11 682.521 469.15 1151.67
10 639.558 502.57 1142.12
9 593.536 538.36 1131.90
8 544.235 576.71 1120.94
7 491.423 617.78 1109.21
6 434.850 661.78 1096.63
5 374.247 708.92 1083.17
4 309.328 759.41 1068.74
3 239.785 813.50 1053.29
2 165.289 871.44 1036.73
1
85.486 933.51 1019.00
0
0.000 1000.00 1000.00

20.21 10% 2003 3 100


1997 7 17 6.5% 30/360
data a;
delete;
%macro a(y);
data a1;
date1='17jul1997'd;
date2='01sep1997'd;
days1=datdif(date1, date2, '30/360');
w=days1/180;
%let x=w;
p1=0;
do n=1 to 12 ;
p1=p1+5/((1+&y)**(n-1+&x));
output;
end;

data a1;
set a1 end=lasobs;
if lasobs;
p2=105/((1+&y)**(12-1+&x));
p=p1+p2;
y=200*&y;
y1=100*&y;
data a;
set a a1;
%mend a;
%a(0.0325);
proc print data=a;
run;

p=123.47387508

20.22 4% 5 7683
10000 10%
data a;
p=7683;
do n=1 to 10;
year=n/2;
t=p*0.05;
c=10000*0.02;
b=t-c;
p=b+p;
put year= p= t= c= b=;
output;
end;
label
year=' '
data b;
t=' '
c=' '
set a;
b=' '
options nocenter;
p=' ';
proc print data=b label noobs;
run;

var year t c b p;
title ' ';
title;
options;
run;

0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0

384.150
393.358
403.025
413.177
423.835
435.027
446.779
459.118
472.073
485.677

200
200
200
200
200
200
200
200
200
200

184.150
193.358
203.025
213.177
223.835
235.027
246.779
259.118
272.073
285.677

7867.15
8060.51
8263.53
8476.71
8700.54
8935.57
9182.35
9441.47
9713.54
9999.22

Rp

V1V0 D

V0

Rp
V1
V0
D

20.23 1
1.12 500

%macro r(v1,v0,d);
data;
r=(&v1-&v0+&d)/&v0;
put r=;
%mend r(v1,v0,d);
%r(112000000,100000000,5000000);
run;

r=0.17

20.24 1 4
12% 25% -15% -2%
5%

%macro r(r1,r2,r3,r4,n);
data a;
r=(&r1+&r2+&r3+&r4)/&n;
put r=;
%mend R(r1,r2,r3,r4,n);
%r(0.12,0.25,-0.15,-0.02,4);
run;

r=0.05


%macro r(r1,r2,r3,r4,n);
data a;
r=((&r1+1)*(&r2+1)*(&r3+1)*(&r4+1))**(1/&n)-1;
put r=;
%mend R(r1,r2,r3,r4,n);
%r(0.12,0.25,-0.15,-0.02,4);
run;

r=0.039185933

20.25 7 100 000 7~9


5 000 9
110 000

data;
do n=0.07 to 0.10 by 0.001;
p=5000/(1+n)+5000/((1+n)**2)+115000/((1+n)**3);
r=n;
if abs(p-100000)<100 then put p= r=;
end;
run;

p=99941.704989 r=0.081

Macaulay
1 PVCF1 2 PVCF2 3 PVCF3 ..... n PVCFn
=
TPV

= ( )/k

PVCF t t
t

n
TPV ;
k

1 1 PVCF1 2 PVCF2 3 PVCF3 ..... n PVCFn

=
1 Y
TPV

PVCFt t t

n
TPV
Y
= W D L W D
1 1
k k

i
W D L W D
Wi
i
Di

20.26 100 10% 5 ,


10%,
data a;
c2=0;
tc2=0;
do n=1 to 10;
t=n;
if n<10 then c=5 ;
else if n=10 then c=105 ;
a=1/((1+0.05)**n);
c1=c/((1+0.05)**n);
tc1=t*c1;
c2=c2+c/((1+0.05)**n);
tc2=tc2+t*c/((1+0.05)**n);
if n=10 then
d=tc2/(c2*2);
md=d/(1+0.05);
output;
end;

data b;
set a;
drop c2 tc2 n;
label
t=' '
c=' '
a='1 '
c1=' '
tc1='t*pvcf'
d=' '
md=' ';
proc print data=b label noobs;
title ' ';
var d md;
run;

4.05391

3.86087

20.27 100 14% 5 10%,

%macro
d(y,cupon,period,p0);
data a;
c2=0;
tc2=0;
do n=1 to &period;
t=n;
if n<&period then c=&cupon;
else if n=&period then c=&cupon+&p0;
a=1/((1+&y)**n);
c1=c/((1+&y)**n);
tc1=t*c1;
output;
c2=c2+c/((1+&y)**n);
drop n tc2 c2;
tc2=tc2+t*c/((1+&y)**n);
end;
if n=&period then
d=tc2/(c2*2);
%mend d;
md=D/(1+&y);
%d(0.05,7,10,100) ;
put d= md= ;

run;

D=3.8526637075
MD=3.6692035309

20.28 100 14% 14%


5 115.44
%macro d(i,y,p);
data a;
x=100*(&i/2)*((1-1/((1+&y/2)**10))/(&y/2));
h=x/&p;
d=((1+(&y/2))/(&y/2))*h+(((&y/2)-(&i/2))/(&y/2))*10*(1-h);
put d=;
%mend d;
%d(0.14,0.10,115.44);
run;

d=7.7056792499

20.29 100 10%


10% 5
%macro d(i,y,p);
data a;
x=100*(&i/2)*((1-1/((1+&y/2)**10))/(&y/2));
h=x/&p;
d=((1+(&y/2))/(&y/2))*h+(((&y/2)-(&i/2))/(&y/2))*10*(1-h);
put d=;
%mend d(i,y,p);
%d(0.10,0.10,100);
run;

d=8.1078216756


V V
= 2V (y )
0

V- y
V+ y
V0
y

20.30 7% 10% 20
74.26 20

V-= 75.64468623
V+= 72.917291682
V0= 74.261370469
y =0.002 10

20
data a;
delete;
%macro a(n,y,cupon,par);
data a1;
p1=0;
%do i=1 %to &n;
p1=p1+&cupon*&par/(1+&y)**&i;
output;
%end;
data a1;
set a1 end=lasobs;
if lasobs;
p2=&par/(1+&y)**&n;
p=p1+p2;
y=200*&y;
y1=100*&y;

data a;
set a a1;
put p=;
%mend a;
%a(40,0.05,0.035,100);
%a(40,0.052,0.035,100);
%a(40,0.048,0.035,100);
run;


%macro md(Vu,Vd,V,y);
data a;
md=(&vu-&vd)/(2*&v*&y);
put md=;
%mend md;
%md(75.64,72.92,74.26,0.002);
run;

MD=9.15701589
md=9.1802370384


%macro d(y,cupon,period,p0);
data a;
c2=0;
tc2=0;
do n=1 to &period;
t=n;
if n<&period then c=&cupon;
else if n=&period then c=&cupon+&p0;
a=1/((1+&y)**n);
c1=c/((1+&y)**n);
tc1=t*c1;
c2=c2+c/((1+&y)**n);
tc2=tc2+t*c/((1+&y)**n);
if n=&period then
d=tc2/(c2*2);
md=D/(1+&y);
put d= md= ;

output;
drop n tc2 c2;
end;
%mend d;
%d(0.05,3.5,40,100) ;
run;

md=9.1802370384


=
1 2 PVCF1 +2 3 PVCF2 +3 4 PVCF3 + L +n(n+1)PVCFn
(1+Y) 2 PVTCF
2
k
= /
n(n 1)
= (1 y ) 2

PVCFt t t
n
Y
PVTCF
k

20.31 100 5 8% ,
10%
%macro d(y,cupon,period,p0);
data a;
c2=0;
tc2=0;
do n=1 to &period;
t=n;
if n<&period then c=&cupon;
else if n=&period then c=&cupon+&p0;
a=1/((1+&y)**n);
output;
c1=c/((1+&y)**n);
tc1=t*(t+1)*c1;
c2=c2+c/((1+&y)**n);
tc2=tc2+t*(t+1)*c/((1+&y)**n);
if n=&period then
drop n tc2 c2;
concave=tc2/(c2*((1+&y)**2));
yearlyconcave=concave/4;
put concave= ;
put yearlyconcave=;

end;
proc print data=a;
%mend d;
%d(0.05,4,10,100) ;
run;

20.32 100 5
10%
%macro concave(n,y);
data a;
concave=&n*(&n+1)/((1+&y)**2);
put concave=;
%mend concave;
%concave(10,0.05);
run;

concave=99.77324263

20.33 100 5 14% 10%

%macro d(y,cupon,period,p0);
data a;
c2=0;
tc2=0;
do n=1 to &period;
t=n;
if n<&period then c=&cupon;
else if n=&period then c=&cupon+&p0;
a=1/((1+&y)**n);
c1=c/((1+&y)**n);
tc1=t*(t+1)*c1;
c2=c2+c/((1+&y)**n);
tc2=tc2+t*(t+1)*c/((1+&y)**n);
if n=&period then
concave=tc2/(c2*((1+&y)**2));
yearlyconcave=concave/4;

put concave= ;
put yearlyconcave=;
output;
drop n tc2 c2;
end;
proc print data=a;
%mend d;
%d(0.05,7,10,100) ;
run;

0.5 2

20.34 100 15 8%
10% 10% 13%

%d(0.05,4,30,100) 94.3571
%macro vp(x,y);
data a;
caused=0.5*&x*(&y**2)*100;
put caused =%;
%mend vp;
%vp(94.3571,0.03);
run;

caused=4.2460695 %


= .

= 0.5
2

20.35 15 8% 10% 100

=94.36
= 84.627548973

data a;
delete;
%macro a(n,y,cupon,par);
data a1;
p1=0;
%do i=1 %to &n;
p1=p1+&cupon*&par/(1+&y)**&i;
output;
%end;
data a1;
set a1 end=lasobs;
if lasobs;

p2=&par/(1+&y)**&n;
p=p1+p2;
y=200*&y;
y1=100*&y;
data a;
set a a1;
%mend a;
%a(30,0.05,0.04,100);
put p=;
run;
p=84.627548973


%macro anlaye(x,y ,p );
data a;
concave=&x*&p;
vp=0.5*concave*(&y**2);
put concave=;
put vp=;
%mend anlaye;
%anlaye(94.36,0.01 , 84.627548973 );
%anlaye(94.36,0.02 , 84.627548973);
run;

concave==7985.4555211
100 vp=0.3992727761
200 vp=1.5970911042


V- +V+ -2V0
=
V0 (DY) 2

V- y
V+ y
V0
y

20.36 100 20 7%
10% 20

V-=75.64
V+=72.92
V0=74.26
Y=0.002

%macro concave(Vu,Vd,V,y);
data a;
yearlyconcoave=(&vu+&vd-2*&v)/(&v*(&y**2));
put yearlyconcoave=;
%mend concave;
%concave(75.64,72.92,74.26,0.002);
run;

concoave=134.66199838
yearlyconcave =132.077


%macro d(y,cupon,period,p0);
data a;
c2=0;
tc2=0;
do n=1 to &period;
t=n;
if n<&period then c=&cupon;
else if n=&period then c=&cupon+&p0;
a=1/((1+&y)**n);
c1=c/((1+&y)**n);
tc1=t*(t+1)*c1;
c2=c2+c/((1+&y)**n);
tc2=tc2+t*(t+1)*c/((1+&y)**n);
if n=&period then
concave=tc2/(c2*((1+&y)**2));
yearlyconcave=concave/4;

put concave= ;
put yearlyconcave=;
output;

drop n tc2 c2;

end;
proc print data=a;


1
r1, H=e2r1, L
r0
r1, L

1 10%
r
1,L 1 1
r
1,H 1 1
e 2.71828


20.37 5.25% 3
100 r0=3.5%, r1=4.074%, r2=4.53%

%macro p(r0,r1,r2,c,d);
data a;
p2hh=(&c+100)/(1+&r2*(2.71828**(4*&d)));
p2hl=(&c+100)/(1+&r2*(2.71828**(2*&d)));
p2ll=(&c+100)/(&r2+1);
p1h=((&c+p2hh)/(1+&r1*(2.71828**(2*&d)))+(&c+p2hl)/
(1+&r1*(2.71828**(2*&d))))/2;
p1l=((&c+p2hl)/(1+&r1)+(&c+p2hl)/(&r1+1))/2;
p=((p1h+&c)/(1+&r0)+(p1l+&c)/(1+&r0))/2;
put p=;
%mend p;
%p(0.035,0.04074,0.0453,5.25,0.1);
run;
p=101.85163205


NHHH
NHH
NH

V=99.461
C=5.25
rH=4.976%

V=102.075
C=0
r0=3.500%

NHL

NL

V=98.588
C=5.25
rHH=6.757%
NHHL

V=100
C=5.25

NHLL

V=100
C=5.25

V=99.732
C=5.25
rhL=5.532%

V=101.333
C=5.25
rL=4.074%
NLL

V=100
C=5.25

V=100.689
C=5.25
rLL=4.530%
NLLL

V=100
C=5.25


20.38 5.25% 3
100 r0=3.5%,
r1=4.074%, r2=4.53%


%macro p(r0,r1,r2,c,d);
data a;
p2hh=(&c+100)/(1+&r2*(2.71828**(4*&d)));
p2hh=min(p2hh,100);
p2hl=(&c+100)/(1+&r2*(2.71828**(2*&d)));
p2hl=min(p2hl,100);
p2ll=(&c+100)/(&r2+1);
p2ll=min(p2ll,100);
p1h=((&c+p2hh)/(1+&r1*(2.71828**(2*&d)))+(&c+p2hl)/(1+&r1*(2.71828**(2*&d))))/2;
p1h=min(p1h,100);
p1l=((&c+p2hl)/(1+&r1)+(&c+p2hl)/(&r1+1))/2;
p1l=min(p1l,100);
p=((p1h+&c)/(1+&r0)+(p1l+&c)/(1+&r0))/2;
put p=;
%mend p;
%p(0.035,0.04074,0.0453,5.25,0.1);

run;

p=101.43021083
=
-
=101.85163205-101.4302108
=0.42142122


NHHH
NHH
NH

V=101.432
C=0
r0=3.500%

V=99.461
C=5.25
rH=4.976%
NHL

NL

V=98.588
C=5.25
rHH=6.757%

NHHL

V=100
C=5.25

NHLL

V=100
C=5.25

V=99.732
C=5.25
rhL=5.532%

V=100
C=5.25
rL=4.074%
NLL

V=100
C=5.25

V=100
C=5.25
rLL=4.530%
NLLL

V=100
C=5.25

20.39 5.25%,
100 r0=3.5%,
r1=4.074%, r2=4.53%

%macro p(r0,r1,r2,c,d);
data a;
p2hh=(&c+100)/(1+&r2*(2.71828**(4*&d)));
p2hh=max(p2hh,100);
p2hl=(&c+100)/(1+&r2*(2.71828**(2*&d)));
p2hl=max(p2hl,100);
p2ll=(&c+100)/(&r2+1);
p2ll=max(p2ll,100);
p1h=((&c+p2hh)/(1+&r1*(2.71828**(2*&d)))+(&c+p2hl)/
(1+&r1*(2.71828**(2*&d))))/2;
p1h=min(p1h,100);
p1l=((&c+p2hl)/(1+&r1)+(&c+p2hl)/(&r1+1))/2;
p1l=max(p1l,100);

p=((p1h+&c)/(1+&r0)+(p1l+&c)/(1+&r0))/2;

put p=;
p=102.23669817
=
%mend p;
-
%p(0.035,0.04074,0.0453,5.25,0.1);
=102.23669817-101.85163205
run;
=0.38506612


NHHH
NHH
NH

V=102.523
C=0
r0=3.500%

V=100.261
C=5.25
rH=4.976%
NHL

NL

V=100
C=5.25
rHH=6.757%

NHHL

V=100
C=5.25

NHLL

V=100
C=5.25

V=100
C=5.25
rhL=5.532%

V=101.461
C=5.25
rL=4.074%
NLL

V=100
C=5.25

V=100.689
C=5.25
rLL=4.530%
NLLL

V=100
C=5.25


V V
=
2V0 ( y )

V-

y
V+

y
V0

Effective Duration
Option-adjusted Duration


V- +V+ -2V0
= V (y) 2
0

V- y
V+ y
V0
y
y

Effective Convexity
Optional-adjusted Convexity

V+
OAS


OAS

V
+
V- V+ 2

20.40 20.38 5.25% 3


100 r0=3.5%,
r1=4.074%, r2=4.53% V0 101.432
10 V- V+ 101.628
101.234

101.432 OAS 0 20.38


0.1% 10

V+=101.21845951
V0=101.43021083
V-=101.64278786


%macro p(r0,r1,r2,c,d);
data a;
p2hh=(&c+100)/(1+&r2*(2.71828**(4*&d)));
p2hh=min(p2hh,100);
p2hl=(&c+100)/(1+&r2*(2.71828**(2*&d)));
p2hl=min(p2hl,100);
p2ll=(&c+100)/(&r2+1);
p2ll=min(p2ll,100);
p1h=((&c+p2hh)/(1+&r1*(2.71828**(2*&d)))+(&c+p2hl)/
(1+&r1*(2.71828**(2*&d))))/2;
p1h=min(p1h,100);
p1l=((&c+p2hl)/(1+&r1)+(&c+p2hl)/(&r1+1))/2;
p1l=min(p1l,100);
p=((p1h+&c)/(1+&r0)+(p1l+&c)/(1+&r0))/2;
put p=;
%mend p;
%p(0.036,0.04174,0.0463,5.25,0.1);
%p(0.035,0.04074,0.0453,5.25,0.1);
%p(0.034,0.03974,0.0443,5.25,0.1);
run;


%macro ed(Vu,Vd,V,y);
data a;
ed=(&vu-&vd)/(2*&v*&y);
put ed=;
%mend ed;
%ed(101.64278786, 101.21845951, 101.43021083,0.001);
run;
ed=2.091725663

%macro concave(Vu,Vd,V,y);
data a;
concave=(&vu+&vd-2*&v)/(&v*(&y**2));
put concave=;
%mend concave;
%concave(101.64278786, 101.21845951, 101.43021083,0.001);
run;
concave=8.1406712385


20.41 4 5
8% 10% 12% 13% 11%

data a;
I=((1+0.08)*(1+0.1)*(1+0.12)*(1+0.13)*(1+0.11))**0.2-1;
Put I=;
run;
I=0.1078658

You might also like