1 REM **** HP BASIC PROGRAM LIBRARY ****************************** 2 REM 3 REM GMRGB: SECURITIES PORTFOLIO ANALYSIS AND DETERMINATION 4 REM 5 REM 36530 REV A, PART 2 OF 2 6 REM 7 REM **** CONTRIBUTED PROGRAM *********************************** 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 "DESIRED LEVEL OF BETA"; 102 INPUT V7 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 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] 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 2050 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 B9 >= V7 THEN 1480 1470 REM -- TRAPPED IT 1471 GOTO 2000 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 2052 PRINT 2053 PRINT "SEC PERCENT" 2054 PRINT "--- -------" 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)) 2070 IF X9<.00001 THEN 2080 2075 PRINT USING 2076;I,100*X9 2076 IMAGE 3D,5D.2D 2080 NEXT I 2090 PRINT 2091 PRINT USING 2092;B3 2092 IMAGE " BETA = ",5D.2D 2093 PRINT USING 2094;SQR(R3) 2094 IMAGE "RELATIVE NON-MARKET RISK = ",5D.2D 2100 STOP 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 9999 END