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