1 REM **** HP BASIC PROGRAM LIBRARY ****************************** 2 REM 3 REM GNMRVB: SECURITIES PORTFOLIO ANALYSIS AND DETERMINATION 4 REM 5 REM 36530 REV A, PART 1 OF 2 6 REM 7 REM **** CONTRIBUTED PROGRAM *********************************** 15 DIM C$[40] 16 C$=" " 20 DIM D$[40] 35 DIM C[500],D[500] 45 I3=0 50 DIM B[500],R[500],S[500] 60 PRINT "HAVE YOU ENTERED YOUR DATA"; 61 DIM A$[10] 62 INPUT A$[1,1] 63 IF A$[1,1]="N" THEN 3000 100 REM -- MAIN ROUTINE 101 PRINT "STEP SIZE"; 102 INPUT H1 105 PRINT LIN(2);" BETA REL. NON-MKT RISK" 106 PRINT " ---- -----------------" 110 GOSUB 1500 112 GOSUB 1200 150 GOSUB 1600 160 GOSUB 1300 170 GOSUB 1400 180 GOTO 150 1200 REM -- FIND FIRST PORTFOLIO 1210 B9=1.E-37 1220 FOR I=1 TO N 1230 IF B[I] <= B9 THEN 1240 1232 B9=B[I] 1234 I9=I 1240 NEXT I 1241 D6=-1.E+37 1242 FOR I=1 TO N 1243 IF R[I] <= D6 THEN 1248 1244 D6=R[I] 1248 NEXT I 1250 FOR I=1 TO N 1252 S[I]=0 1254 NEXT I 1260 S[I9]=1 1280 L9=1.E+38 1281 FOR I=1 TO N 1282 D[I]=0 1283 NEXT I 1284 D[I9]=1 1285 V6=B[I9] 1287 H2=1+H1*INT((V6-1)/H1) 1290 RETURN 1300 REM -- FIND NEXT CRITICAL VALUE OF LAMBDA 1310 L7=-1.E+37 1315 I8=I9 1320 FOR I=1 TO N 1321 IF I=I8 THEN 1350 1324 IF B[I]=S3 THEN 1350 1326 L8=-S4/(B[I]-S3) 1328 IF L8 >= L9 THEN 1350 1330 IF L8-1.E+37 THEN 1370 1362 R1=1 1363 R2=0 1364 GOTO 4000 1370 REM -- VARIABLE IS I9, LAMBDA IS L7 1372 S[I9]=1-S[I9] 1374 L9=L7 1380 RETURN 1400 REM -- COMPUTE PORTFOLIO 1401 I3=I3+1 1402 FOR I=1 TO N 1403 C[I]=D[I] 1404 NEXT I 1405 V6=B9 1410 B9=R9=0 1420 FOR I=1 TO N 1421 D[I]=0 1422 IF S[I]=0 THEN 1450 1430 F1=L9/(2*(R[I]*R[I])) 1432 F2=S4/(2*(R[I]*R[I])) 1434 X9=F1*(B[I]-S3)+F2 1440 B9=B9+(X9*B[I]) 1442 R9=R9+((X9*X9)*(R[I]*R[I])) 1446 D[I]=X9 1450 NEXT I 1460 IF V6 >= H2 AND B9 <= H2 THEN 1465 1461 REM -- NOTHING INTERESTING IN THIS RANGE 1462 RETURN 1465 V7=H2 1466 GOSUB 2000 1470 H2=H2-H1 1471 GOTO 1460 1480 RETURN 1500 REM - READ DATA 1510 READ N 1520 FOR I=1 TO N 1530 READ B[I],R[I] 1540 NEXT I 1550 RETURN 1600 REM -- FORM SUMS 1610 S1=S2=S3=S4=0 1620 FOR I=1 TO N 1630 IF S[I]=0 THEN 1650 1632 R9=2*(R[I]*R[I]) 1640 S1=S1+(B[I]/R9) 1642 S2=S2+(1/R9) 1650 NEXT I 1660 S3=S1/S2 1662 S4=1/S2 1670 RETURN 2000 REM -- COMPUTE AND PRINT PORTFOLIO 2030 IF B9 <> V6 THEN 2040 2031 R1=1 2032 R2=0 2033 GOTO 2050 2040 R1=(V7-V6)/(B9-V6) 2041 R2=(B9-V7)/(B9-V6) 2050 B3=R3=0 2055 FOR I=1 TO N 2060 X9=(R1*D[I])+(R2*C[I]) 2062 B3=B3+(X9*B[I]) 2063 R3=R3+((X9^2)*(R[I]^2)) 2080 NEXT I 2090 PRINT USING 2091;B3,SQR(R3) 2091 IMAGE #,2D.3D,4D.3D 2093 D7=40*SQR(R3)/D6 2094 D$=C$[1,D7] 2095 D$[D7,D7]="*" 2096 PRINT D$ 2100 RETURN 3000 REM -- GIVE INSTRUCTIONS 3010 PRINT 3020 PRINT "ENTER DATA BEGINNING AT LINE 9000" 3022 PRINT "FIRST, THE NUMBER OF SECURITIES" 3024 PRINT "THEN, FOR EVERY SECURITY --" 3026 PRINT " 1) THE VALUE OF BETA" 3028 PRINT " 2) THE SECURITY'S RELATIVE NON-MARKET RISK" 3030 PRINT 3040 PRINT "WHEN YOU HAVE ENTERED YOUR DATA STATEMENTS," 3042 PRINT "RE-RUN THE PROGRAM" 3050 STOP 4000 REM -- END REACHED 9999 END