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