Compucolor.org – Virtual Media

Listing of file='MENU.BAS;01' on disk='vmedia/bonds_and_securities-sector.ccvf'

100 REM ** BONDS - JAN 2,79 - JESSEN **
110 CLEAR  500
120 DIM  G(22,4),D(22),D$(22)
130 PLOT  6,34,12,15
140 PLOT  3,28,0,14,6,24:PRINT  " BONDS "
150 PLOT  6,34,15
160 DATA  0,4,"1. PAR VALUE OF BOND"
170 DATA  0,6,"2. REDEMPTION VALUE"
180 DATA  0,8,"3. COUPON RATE"
190 DATA  0,10,"4. YIELD RATE"
200 DATA  0,12,"5. BOOK VALUE"
210 DATA  0,14,"6. ACCURED INTEREST"
220 DATA  0,16,"7. FLAT PRICE"
230 DATA  32,4," 8. ISSUE DATE"
240 DATA  51,5,"MMM DD YYYY"
250 DATA  32,6," 9. TODAYS DATE"
260 DATA  51,7,"MMM DD YYYY"
270 DATA  32,8,"10. MATURITY DATE"
280 DATA  32,12,"11. TIME TO MATURITY"
290 DATA  54,13,"YY MM DD"
300 DATA  32,15,"12. NUMBER OF PERIODS"
310 DATA  32,16,"    PER YEAR"
320 DATA  0,24,"OPTIONS"
330 DATA  3,25,"A. COMPUTE BOND PRICE"
340 DATA  3,26,"B. COMPUTE YIELD"
350 DATA  3,27,"C. PRICE OF A CALLABLE BOND"
360 DATA  3,28,"D. AMORTIZATION SCHEDULE"
370 DATA 21,4,60,10,21,6,60,10,21,8,48,8,21,10,48,8
380 DATA 21,12,60,10,21,14,60,10,21,16,60,10,50,4,28,13
390 DATA 50,6,28,13,50,8,28,13,53,12,12,10,55,15,40,4
400 DATA  14,9,25,13,40,9,16,10,14,10,25,13,40,10,16,10
410 DATA  14,11,25,13,40,11,16,10,14,12,25,13
420 DATA  40,12,16,10,14,13,25,13,40,13,16,10
430 X= 1:RESTORE  370
440 FOR  I= 1 TO  22:READ  G(I,1),G(I,2),G(I,3),G(I,4):NEXT  I
450 D(12)= 2:P$= "$$PP$$$MMMYNM$M$M$M$M$"
460 FOR  I= 1 TO  22:D$(I)= MID$ (P$,I,1): NEXT  I
470 RESTORE  160:GOSUB  2510
480 FOR  I= 1 TO 21:READ  X1,Y,P$
490 PLOT  3,X1,Y:PRINT  P$
500 NEXT  I
510 FOR  I= 1 TO  12: GOSUB  2150:NEXT  I
520 GOTO  560
530 PLOT 27,24,6,34,3,20,31,11,3,20,31,6,8
540 PRINT  "ILLEGAL ENTRY"
550 FOR  I= 1 TO  700: NEXT  I
560 PRINT  :PLOT  6,35,3,20,31,11,27,24,3,20,31
570 INPUT "ENTER COMMAND OR LINE TO BE CHANGED ";I$
580 PLOT  27,11,6,34
590 PLOT 3,30,20,11
600 PLOT 3,30,21,11
610 IF LEFT$ (I$,2)= "CA"THEN 920
620 IF  I$= "END" THEN  PLOT  3,0,33,6,34:END
630 IF  X= 4 THEN  670
640 IF  I$< > "ALL" THEN  670
650 IF  X< > 3 THEN  B= 1:E= 12:GOTO  800
660 B= 13:E= 22:GOTO  800
670 IF  LEN (I$)< > 1 THEN  730
680 I= ASC (I$)- 64: IF  I< 1 OR  I> 4 THEN  730
690 IF  X> 2 AND  I< 3 THEN  X= I:GOSUB  2750:GOTO  470
700 X= I:GOSUB 2510:IF X< 3THEN 560
710 IF X= 4THEN 1060
720 GOTO  1410
730 IF  X= 4 THEN  530
740 B= VAL (I$): IF  X< > 3 THEN  770
750 IF  B< 1 OR  B> 10 THEN  530
760 B= B* 2+ 11:E= B+ 1:GOTO  800
770 IF  B< 1 OR  B> 12 THEN  530
780 E= B
790 REM

     ** GET INPUT DATA **

800 FOR I= BTO E:PLOT 3,G(I,1),G(I,2),6,G(I,3)
810 INPUT "*";I$
820 IF I$= ""THEN 870
830 IF I$= "0"THEN 870
840 IF  D$(I)= "Y" THEN  GOSUB  2570: GOTO  870
850 IF  D$(I)= "M" THEN  GOSUB  2640: GOTO  870
860 D(I)= VAL (I$)
870 GOSUB  2150
880 NEXT  I
890 GOTO 560
900 PRINT
910 REM

     ** FIGURE TIME TO MATURITY **

920 IF  D(10)= 0 THEN  950
930 IF  D(9)> 0 THEN  D(11)= D(10)- D(9): GOTO  950
940 IF  D(8)> 0 THEN  D(11)= D(10)- D(8)
950 IF  D(11)> 0 THEN  980
960 PLOT  3,30,21:PRINT  "CANNOT CALCULATE TIME TO MATURITY"
970 GOTO  560
980 IF  D(10)> 0 THEN  D(9)= D(10)- D(11): GOTO  1010
990 IF  D(9)> 0 THEN  D(10)= D(9)+ D(11): GOTO  980
1000 IF  D(8)> 0 THEN  D(10)= D(8)+ D(11)
1010 IF  D(8)= 0 THEN  D(8)= D(9)
1020 IF  D(9)= 0 THEN  D(9)= D(8)
1030 IF  D(8)> D(9) OR  D(9)> D(10) THEN  960
1040 IF  X< > 3 THEN  FOR  I= 8 TO  11: GOSUB  2150: NEXT  I
1050 REM

     ** CALCULATIONS **

1060 IF  D(1)< = 0 THEN  I= 1:GOTO  1140
1070 IF  D(2)< = 0 THEN  I= 2:GOTO  1140
1080 IF  D(12)< = 0 THEN  I= 12:GOTO  1140
1090 GOSUB  1170
1100 IF  X= 2 THEN  1330
1110 IF YR= 0 THEN  I= 4:GOTO  1140
1120 GOSUB  1200:D(5)= P:D(6)= AI:D(7)= PF
1130 ON  X GOTO  510,510,1560,1780
1140 PLOT  6,25,3,30,21:PRINT  "ITEM";I;" CANNOT BE ZERO OR MINUS"
1150 GOTO  560
1160 REM

     ** PRICE SUBROUTINE **
1170 F= D(1):C= D(2):R= D(3)/ (100* D(12)):YR= D(4)/ (100* D(12))
1180 P= D(5):AI= D(6):PF= D(7):N= (D(11)/ 360)* D(12)
1190 RETURN
1200 N1= INT (N):N0= N1+ 1
1210 IF  N1= N THEN  N1= N- 1:N0= N
1220 NK= 1- N+ N1:NS= N
1230 N= N0:GOSUB 1290:P0= P
1240 N= N1:GOSUB 1290:P1= P
1250 P= (1- NK)* P0+ (NK* P1)
1260 AI= NK* F* R:PF= P+ AI
1270 RETURN
1280 REM

     ** CALCULATION SUBROUTINE **
1290 IF  YR= 0 THEN  K= C:P= K:RETURN
1300 K= C* (1+ YR)^ - N
1310 G= F* R/ C:P= K+ (G/ YR)* (C- K):RETURN
1320 REM

     ** FIND YIELD **
1330 IT= .05: IF  D(5)= 0 THEN  I= 5:GOTO  1140
1340 I0= IT
1350 IF  IT= 0 THEN  1380
1360 IT= F* R* (1- (1+ IT)^ - N)/ (P- C* (1+ IT)^ - N)
1370 IF  ABS (I0- IT)> .000001 THEN  1340
1380 D(4)= IT* D(12)* 100:GOSUB  1170:GOSUB 1200
1390 D(6)= AI:D(7)= PF:D(5)= P:GOTO  510
1400 REM

     ** CALLABLE BONDS **

1410 GOSUB  2750
1420 PLOT  3,24,4,14,6,24
1430 PRINT  " CALLABLE BOND ":PLOT  6,34,15
1440 PLOT  3,15,6
1450 PRINT  "EARLIEST";TAB( 25);"REDEMPTION"
1460 PLOT  3,15,7
1470 PRINT  "CALL DATE";TAB( 28);"VALUE"
1480 PLOT  3,15,8:T0$= T$
1490 IF  D(8)> 0 THEN  PRINT  "MMM DD YYYY":T$= "M"
1500 IF  D(8)= 0 THEN  PRINT  "YY MM DD":T$= "Y"
1510 IF  T$< > T0$ THEN  FOR  I= 13 TO  21 STEP  2:D(I)= 0:D$(I)= T$:NEXT  I
1520 REM

1530 FOR  I= 1 TO  5:PLOT  3,10,8+ I,6,34:PRINT  I:NEXT  I
1540 FOR  I= 13 TO  22: GOSUB  2150:NEXT  I
1550 REM

1560 REM

     ** CALL CALCULATIONS **

1570 PL= D(5):DA= D(11):NC= 0:IF  D(8)> 0 THEN  DA= D(8)+ DA
1580 FOR  I= 13 TO  21 STEP  2
1590 N= D(I):C= D(I+ 1): IF  T$= "M" THEN  N= N- D(8)
1600 IF  N= 0 OR  C= 0 THEN  1650
1610 N= N* D(12)/ 360
1620 IF  N> = NC AND  N< = (D(11)/ 360)* D(12) THEN  1640
1630 PLOT  6,25,3,30,21:PRINT  "CALL DATE IS OUT OF BOUNDS":GOTO  1650
1640 NC= N:GOSUB  1200: IF  P< PL THEN  PL= P:DA= D(I)
1650 NEXT  I:V= DA
1660 PRINT
1670 PLOT  6,34,3,0,16
1680 PRINT  "   THE MOST UNFAVORABLE DATE FOR REDEMPTION IS ";
1690 PLOT  6,33
1700 IF  T$= "Y" THEN  GOSUB  2220:PLOT  3,48,15:PRINT  "YY MM DD":PRINT
1710 IF  T$= "M" THEN  GOSUB  2300
1720 PRINT  :PLOT  6,34
1730 PRINT  "   THE HIGHEST PRICE WHICH CAN PAID AND STILL BE CERTAIN OF"
1740 PRINT  "   A ";INT (D(4)* 100)/ 100;"% YIELD IS";
1750 PLOT  6,33:V= PL:GOSUB  2430
1760 GOTO  560
1770 REM

     ** AMORTIZATION SCHEDULE **

1780 GOSUB  2750
1790 PLOT  3,20,2,14,6,24
1800 PRINT  " AMORTIZATION SCHEDULE ":PLOT  6,34,15
1810 PLOT  3,41,4:PRINT  "AMOUNT FOR"
1820 PLOT  3,7,5:PRINT "DATE        COUPON     INTEREST  ACCUMULATION    BOOK"
1830 PLOT  3,4,6:PRINT "MMM DD YYYY    VALUE        PAID     OF PREMIUM     VALUE"
1840 IF  D(9)> 0 THEN  DA= D(9):GOTO  1870
1850 IF  D(8)> 0 THEN  DA= D(8):GOTO  1870
1860 DA= D(11):PLOT  3,4,6:PRINT  "YY DD MM    "
1870 IF  D(5)< D(1) THEN  PLOT  3,40,6:PRINT "OF DISCOUNT "
1880 VT= 7:PLOT  3,52,7,6,16:V= P:GOSUB  2430
1890 V= D(11):IF  D(10)< > 0 THEN  V= D(10)- D(11)
1900 DA= V
1910 PLOT  3,3,7,6,25
1920 IF  D(10)= 0 THEN  GOSUB  2220
1930 IF  D(10)< > 0 THEN  GOSUB  2300
1940 B0= P:N= N1:GOSUB  1290
1950 C0= F* R:AM= B0- P:IP= C0- AM
1960 VT= VT+ 1:IF  VT< 20 THEN  2000
1970 PLOT  6,34:INPUT "HIT RETURN TO CONTINUE ";I$
1980 IF  I$= "END" THEN  560
1990 VT= 7: PLOT  3,0,7:FOR  I= 1 TO  16:PRINT  SPC( 63):PRINT  :NEXT  I
2000 PLOT  3,0,VT,6,34: IF  N< 10 THEN  PRINT  N;:GOTO  2020
2010 PRINT  MID$ (STR$ (N),2,5);
2020 PLOT  3,3,VT,6,25
2030 V= N* 360/ D(12)
2040 IF  D(10)< > 0 THEN  V= D(10)- V
2050 DA= V:IF  D(10)= 0 THEN  GOSUB  2220
2060 IF  D(10)< > 0 THEN  GOSUB  2300
2070 PLOT  3,16,VT,6,52:V= C0:GOSUB  2430
2080 IF D(10)< > 0THEN PLOT 3,16,VT,6,34:PRINT " "
2090 PLOT  3,28,VT,6,56:V= IP:GOSUB  2430
2100 PLOT  3,40,VT,6,12:V= ABS (AM):GOSUB  2430
2110 PLOT  3,52,VT,6,16:V= P:GOSUB  2430
2120 PRINT
2130 N1= N1- 1:IF  N> 0 THEN  1940
2140 GOTO  560
2150 REM

     ** PRINT VALUES **

2160 PLOT  3,G(I,1),G(I,2),6,G(I,3)
2170 V= D(I):DA= V
2180 IF  I= 12 THEN  PRINT  " ";V;" ":RETURN
2190 IF  D$(I)= "$" THEN  2430
2200 IF  D$(I)= "P" THEN  2390
2210 IF  D$(I)= "M" THEN  2300
2220 IF  V= 0 THEN  PRINT  "          ":RETURN
2230 Y= INT (DA/ 360):DA= DA- Y* 360
2240 M= INT (DA/ 30):D= DA- M* 30
2250 Y$= RIGHT$ (STR$ (Y+ 100),2):M$= RIGHT$ (STR$ (M+ 100),2)
2260 D$= RIGHT$ (STR$ (D+ 100),2)
2270 IF  M= 0 AND  D= 0 THEN  M$= "  ":D$= "  "
2280 PRINT  " ";Y$;" ";M$;" ";D$;" "
2290 RETURN
2300 IF  V= 0 THEN  PRINT  "             ":RETURN
2310 Y= INT ((DA- 1)/ 360):DA= DA- Y* 360
2320 M= INT ((DA- 1)/ 30)+ 1:D= DA- (M- 1)* 30
2330 RESTORE  2620
2340 FOR  II= 1 TO  M:READ  P$:NEXT  II
2350 I$= STR$ (D): IF  D< 10 THEN  I$= " "+ STR$ (D)
2360 I$= " "+ P$+ I$+ ","+ RIGHT$ (STR$ (Y),4)+ " "
2370 PRINT  I$
2380 RETURN
2390 IF  V< .001 THEN  V= .01: GOTO  2410
2400 V= INT ((V+ .005)* 100)/ 100+ .004
2410 V$= STR$ (V):L= LEN (V$):PRINT  LEFT$ (V$,L- 1)+ "% ";
2420 PLOT  6,34:PRINT  "    ":RETURN
2430 IF  V> - .005 AND  V< .005 THEN  V= 0
2440 D1= INT (ABS (V)): IF  V< 0 THEN  D1= - D1
2450 E1= INT ((1.005+ ABS (V)- ABS (D1))* 100)
2460 V$= " $":IF  D1< 0 THEN  V$= "-$"
2470 V$= V$+ RIGHT$ (STR$ (D1),LEN (STR$ (D1))- 1)
2480 PRINT  RIGHT$ ("     "+ V$+ "."+ RIGHT$ (STR$ (E1),2)+ " ",11);
2490 RETURN
2500 REM

     ** PRINT OPTIONS **

2510 PLOT 6,11
2520 FOR  I= 1 TO  4:PLOT  3,1,I+ 24
2530 IF  I= X THEN  PRINT  "X":GOTO  2550
2540 PRINT  " "
2550 NEXT  I:PLOT  6,34:RETURN
2560 REM

     ** CONVERT DATE TO VALUE **

2570 Y= 0:M= 1:D= 0
2580 IF  MID$ (I$,3,1)< > " " THEN  Y= VAL (I$): GOTO  2720
2590 Y= VAL (LEFT$ (I$,2))
2600 IF  MID$ (I$,6,1)< > " " THEN  M= VAL (MID$ (I$,4,5))+ 1: GOTO  2720
2610 M= VAL (MID$ (I$,4,2))+ 1: D= VAL (MID$ (I$,7,2)):GOTO  2720
2620 DATA  "JAN","FEB","MAR","APR","MAY","JUN"
2630 DATA  "JUL","AUG","SEP","OCT","NOV","DEC"
2640 M$= LEFT$ (I$,3):M= 0
2650 E$= "":RESTORE  2620
2660 FOR  II= 1 TO  12:READ  P$
2670 IF  M$= P$ THEN  M= II:II= 12
2680 NEXT  II
2690 D(I)= 0
2700 D= VAL (MID$ (I$,5,2)): IF  D< 1 OR  D> 30 THEN  E$= "Y":RETURN
2710 Y= VAL (MID$ (I$,8,4)): IF  Y< 0 OR  Y> 9999 THEN  E$= "Y":RETURN
2720 D(I)= INT (Y* 360+ (M- 1)* 30+ D+ .5)
2730 RETURN
2740 REM

     ** CLEAR TOP OF SCREEN **

2750 PRINT  :PLOT  6,34,3,0,2
2760 FOR  I= 1 TO  20:PRINT  SPC( 63):PRINT  :NEXT  I
2770 RETURN