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<L7 THEN 1350
1332  L7=L8
1334  I9=I
1350  NEXT I
1360  IF L7>-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 
