1 REM **** HP BASIC PROGRAM LIBRARY ****************************** 2 REM 3 REM GCHLIN: RATING INVESTMENT FUNDS 4 REM 5 REM 36503 REV A 6 REM 7 REM **** CONTRIBUTED PROGRAM *********************************** 100 DIM A[40],B[40],P[40],X[40],Y[40],Z[40] 102 DIM A$[72],D$[72],X$[50],Y$[50] 200 FILES * 202 GOTO 400 300 REM -- SUBROUTINE FOR ACCESS TO DATA 302 PRINT " FUND, INDEX, PORTFOLIO OR STOCK"; 304 INPUT A$[1,1] 310 PRINT "NUMBER"; 312 INPUT N9 320 IF A$[1,1]="P" THEN 330 322 D$="$GPDQ" 324 D$[6,6]=A$[1,1] 326 GOTO 340 330 D$="PDQP" 340 ASSIGN D$,1,X1 342 READ #1,N9 346 FOR I=1 TO 40 350 READ #1;O,D,C 351 IF (O=-999) OR (D=-999) OR (C=-999) THEN 354 352 Z[I]=100*((C+D-O)/O) 353 GOTO 356 354 Z[I]=-999 356 NEXT I 365 IF D$="PDQP" THEN 390 370 READ #1;N8 374 READ #1;A$ 378 PRINT A$ 380 PRINT 390 RETURN 400 PRINT "Y-VARIABLE (VERTICAL AXIS)" 402 GOSUB 300 404 MAT A=Z 410 PRINT "X-VARIABLE (HORIZONTAL AXIS)" 412 GOSUB 300 414 MAT B=Z 420 PRINT "DO YOU WANT THE TREASURY BILL RATE SUBTRACTED FROM EACH RETURN"; 422 INPUT A$[1,1] 430 IF A$[1,1]="N" THEN 500 440 ASSIGN "$GPDQI",1,X1 442 READ #1,99 450 FOR I=1 TO 40 452 READ #1;O,D,C 454 IF (O=-999) OR (D=-999) OR (C=-999) THEN 460 456 P[I]=100*((C+D-O)/O) 457 GOTO 461 460 P[I]=-999 461 NEXT I 470 FOR I=1 TO 40 472 IF (A[I]=-999) OR (B[I]=-999) OR (P[I]=-999) THEN 488 480 A[I]=A[I]-P[I] 482 B[I]=B[I]-P[I] 484 GOTO 490 488 A[I]=B[I]=-999 490 NEXT I 500 PRINT 510 PRINT "FIRST QUARTER --" 512 PRINT " YEAR"; 514 INPUT F6 516 IF (F6 >= 1963) AND (F6 <= 1972) THEN 530 520 PRINT "THE YEAR MUST BE BETWEEN 1963 AND 1972 INCLUSIVE" 521 GOTO 512 530 PRINT " QUARTER"; 532 INPUT F7 534 F8=4*(F6-1963)+F7 540 PRINT 542 PRINT "LAST QUARTER--" 544 PRINT " YEAR"; 546 INPUT T6 548 IF (T6 >= 1963) AND (T6 <= 1972) THEN 560 550 PRINT "THE YEAR MUST BE BETWEEN 1963 AND 1972 INCLUSIVE" 552 GOTO 544 560 PRINT " QUARTER"; 562 INPUT T7 564 T8=4*(T6-1963)+T7 565 F5=T8 600 REM -- LOAD X AND Y 610 N=0 620 FOR I=F8 TO T8 622 IF (A[I]=-999) OR (B[I]=-999) THEN 630 624 N=N+1 626 Y[N]=A[I] 628 X[N]=B[I] 630 NEXT I 632 IF N >= 3 THEN 640 634 PRINT "TOO FEW POINTS FOR MEANINGFUL RESULTS" 636 PRINT " -- PROGRAM STOPPED" 638 STOP 640 REM -- CONTINUE 700 REM -- DO REGRESSION 710 GOSUB 4000 800 REM -- DO RESIDUALS 802 T8=F5 810 PRINT LIN(3);"DIFFERENTIAL RETURNS (Y - B*X) -- " 814 PRINT 816 PRINT "YEAR QTR VALUE";TAB(29);"- 0 +" 817 PRINT 818 N3=0 820 FOR I=F8 TO T8 822 IF (A[I]=-999) OR (B[I]=-999) THEN 860 830 N3=N3+1 834 Y3=B9*B[I] 836 D3=ABS(A[I]-Y3) 840 IF N3>1 THEN 850 842 M1=D3 844 GOTO 860 850 IF D3 <= M1 THEN 860 852 M1=D3 860 NEXT I 900 FOR I=F8 TO T8 910 IF (A[I]=-999) OR (B[I]=-999) THEN 950 920 Y3=B9*B[I] 922 D3=(A[I]-Y3)/M1 924 D3=(10*D3)+11 926 A$=" " 928 A$[11,11]="!" 930 A$[D3,D3]="*" 940 PRINT USING 942;F6,F7,A[I]-Y3,A$ 942 IMAGE 4D,1X,D,1X,4D.3D,6X,21A 944 GOTO 960 950 PRINT USING 951;F6,F7 951 IMAGE 4D,1X,D," NOT AVAILABLE" 952 GOTO 960 960 F7=F7+1 962 IF F7 <= 4 THEN 980 964 F7=1 966 F6=F6+1 980 NEXT I 990 STOP 3999 REM ------------------------------- 4000 REM -- SUBROUTINE TO DO SIMPLE REGRESSION WITH PLOT 4010 REM -- INPUTS ARE N X(I),Y(I) VALUES 4050 PRINT 4053 Y$=" Y" 4056 X$=" X" 4100 REM -- FIND MIN X (M1) AND MAX X(M2) 4102 M1=X[1] 4103 M2=X[1] 4104 FOR I=2 TO N 4105 IF X[I]>M1 THEN 4107 4106 M1=X[I] 4107 IF X[I]M3 THEN 4126 4125 M3=Y[I] 4126 IF Y[I]M1 THEN 4553 4552 X1=M3 4553 Y1=X1 4554 X2=M2 4555 IF M4= 0 THEN 4740 4739 S$=" " 4740 PRINT USING 4741;Y$,A9,S$,B9,X$ 4741 IMAGE 5X,15A," = ",6D.5D,X,A,6D.5D,"*",15A 4744 PRINT 4745 GOSUB 6500 4750 IF A5>0 THEN 4760 4752 STOP 4760 PRINT 4800 PRINT 4805 IF A6=1 THEN 4900 4810 PRINT "EACH AXIS RUNS FROM ";Y1;" TO ";Y2 4830 PRINT 4840 GOTO 4990 4900 PRINT "Y-AXIS -- BOTTOM"; 4901 INPUT Y1 4902 PRINT " TOP"; 4903 INPUT Y2 4910 PRINT "X-AXIS -- LEFT"; 4911 INPUT X1 4912 PRINT " RIGHT"; 4913 INPUT X2 4990 FOR I=1 TO 3 4991 PRINT 4992 NEXT I 5000 REM -- DO GRAPH 5001 REM -- CHAINS FROM: REGPLT 5009 DIM C$[10] 5010 C$="*23456789" 5020 DIM L$[72] 5100 REM -- RESET ALL VALUES TO INTERVALS 5102 A6=A9+(B9*X1) 5103 Z1=INT((X9*(0-X1)/(X2-X1))+1.001) 5104 Z2=INT((Y9*(0-Y1)/(Y2-Y1))+1.001) 5105 A2=INT((Y9*(A2-Y1)/(Y2-Y1))+1.001) 5106 A1=INT((X9*(A1-X1)/(X2-X1))+1.001) 5107 A6=INT((Y9*(A6-Y1)/(Y2-Y1))+1.001) 5108 A8=(Y1-A9)/B9 5109 A8=INT((X9*(A8-X1)/(X2-X1))+1.001) 5110 FOR I=1 TO N 5120 Y[I]=INT((Y9*(Y[I]-Y1)/(Y2-Y1))+1.001) 5121 IF Y[I] <= Y9 THEN 5130 5122 Y[I]=Y9 5130 X[I]=INT((X9*(X[I]-X1)/(X2-X1))+1.001) 5131 IF X[I] <= X9 THEN 5140 5132 X[I]=X9 5140 NEXT I 5150 REM -- SORT ROWS 5160 N9=N 5170 N9=N9-1 5180 N8=0 5190 FOR I=1 TO N9 5200 IF Y[I]>Y[I+1] THEN 5320 5210 IF Y[I] A2 THEN 5380 5373 L$[1,1]="M" 5374 GOTO 5390 5375 L$[1,1]="L" 5376 GOTO 5390 5380 L$[1,1]=" " 5390 REM -- PROCEED 5400 FOR C1=1 TO X9 5410 REM -- SET UP AXIS SYMBOL OR SPACE 5412 IF Y3=Z2 THEN 5426 5416 IF C1=Z1 THEN 5422 5418 P$=" " 5420 GOTO 5500 5422 P$="!" 5423 L9=C1 5424 GOTO 5500 5426 IF C1=Z1 THEN 5432 5428 P$="-" 5429 L9=C1 5430 GOTO 5500 5432 P$="+" 5433 L9=C1 5500 REM -- FIND ENTRIES 5510 C9=0 5511 IF R1>N THEN 5600 5512 IF Y[R1]>Y3 THEN 5524 5513 IF Y[R1]C1 THEN 5600 5520 REM -- ROW CONTAINS AN ITEM 5522 C9=C9+1 5524 REM -- GO TO NEXT ROW 5525 R1=R1+1 5526 GOTO 5511 5600 REM -- PRINT CHARACTER 5610 IF C9=0 THEN 5630 5612 IF C9 <= 9 THEN 5620 5614 C9=9 5620 P$=C$[C9,C9] 5622 L9=C1 5630 L$[C1+1,C1+1]=P$ 5650 NEXT C1 5660 L$=L$[1,L9+1] 5665 PRINT L$ 5710 NEXT Y3 5720 REM -- PRINT HORIZONTAL AXIS 5730 PRINT 5740 L$[1,1]=" " 5750 FOR I=1 TO X9 5751 IF I=A8 THEN 5756 5752 IF I <> A1 THEN 5760 5753 L$[I+1,I+1]="M" 5754 GOTO 5770 5756 L$[I+1,I+1]="L" 5757 GOTO 5770 5760 L$[I+1,I+1]=" " 5770 NEXT I 5785 PRINT L$ 5790 FOR I=1 TO 5 5795 PRINT 5796 NEXT I 6000 RETURN 6500 REM - SUBROUTINE TO COMPUTE ADJ. R2 AND STD ERRORS 6510 IF N<3 THEN 6690 6520 T6=T4-T1*T1/N 6530 T7=(T3-T1*T2/N)/T6 6540 T8=(T2-T7*T1)/N 6550 T9=T5-T2*T2/N 6560 U1=T9-T7*T7*T6 6570 T9=T9/(N-1) 6580 U1=U1/(N-2) 6590 U2=(T9-U1)/T9 6600 U3=U1/T6 6610 U3=SQR(U3) 6620 U4=U1*T4/(T6*N) 6630 U4=SQR(U4) 6640 PRINT USING 6650;U4,U3 6650 IMAGE "STANDARD ERRORS:",7X,6D.5D,2X,6D.5D 6653 IMAGE "T-VALUES:",14X,6D.5D,2X,6D.5D 6660 PRINT 6670 PRINT "R-SQUARED : ";R2 6680 PRINT 6690 RETURN 9999 END