Compucolor.org – Virtual Media

Listing of file='SFPRG2.BAS;01' on disk='vmedia/sfssp_v1.3_stock-sector.ccvf'

100 CLEAR 500:DIM A$(11),DI(160),DT(160),S(9,160),VA(160)
105 DIM F(11),W(11),AN$(11),CV(11),AV(11),V(160)
110 PLOT 12,3,13,2:PRINT "STOCK FUND SWITCH STRATEGY PROGRAM:"
130 PLOT 3,10,6:PRINT "1) ENTER STOCK VALUES & DOW JONES AVERAGES, COMPUTE"
140 PLOT 3,10,8:PRINT "   MOVING 39-WEEK AVERAGES & PRINT DECISION TABLE"
145 PLOT 3,10,10:PRINT "2) PRINT DECISION TABLE WITHOUT WEEKLY DATA INPUT"
147 PLOT 3,10,12:PRINT "3) PRINT & CHANGE DATA FILES (SCREEN OR PRINTER)"
160 PLOT 3,10,14:PRINT "4) PLOT STOCK AND DOW PERFORMANCE FOR ONE YEAR"
170 PLOT 3,10,16:PRINT "5) STORE DATA AND END PROGRAM (MUST END PROGRAM"
175 PLOT 3,10,18:PRINT "   WITH THIS OPTION OR DATA ENTRIES WILL BE LOST)"
180 PLOT 3,13,22:INPUT "ENTER NUMBER DESIRED    ";N
185 IF N< 1OR N> 5THEN 180
190 ON NGOTO 300,500,600,800,1000
300 REM  ENTER STOCK & DOW WEEKLY DATA/PRINT DECISION TABLE
301 CI= 1:PLOT 12,3,10,2:PRINT "INPUT WEEKLY VALUES: "
303 PLOT 3,10,6:INPUT "ENTER DOW 'I' AVERAGE         ";WI
304 PLOT 3,10,30:INPUT "CHANGE VALUE (Y[CR] OR [CR])?    ";Z$:IF Z$= "Y"THEN 303
305 PLOT 3,10,8:INPUT "ENTER DOW 'T' AVERAGE         ";WT
306 PLOT 3,10,30:INPUT "CHANGE VALUE (Y[CR] OR [CR])?    ";Z$:IF Z$= "Y"THEN 305
310 IF RD< > 1THEN GOSUB 9000
316 FOR S= 1TO NS:X= 10+ 2* (S- 1)
317 PLOT 3,10,X:PRINT "ENTER VALUE FOR "A$(S)"        ";:INPUT SW(S)
318 PLOT 3,10,30:INPUT "CHANGE VALUE (Y[CR] OR [CR])?    ";Z$:IF Z$= "Y"THEN 317
319 NEXT S
330 GOSUB 9050
388 GOSUB 5500:GOSUB 6000:GOTO 110
500 REM  PRINT DECISION TABLE
501 PLOT 12,3,10,4:PRINT "PRINT CURRENT DECISION TABLE: "
510 IF RD< > 1THEN GOSUB 9000
550 GOSUB 5500:GOSUB 6000
599 GOTO 110
600 REM  PRINT & CHANGE EXISTING DATA FILES
601 PLOT 12,3,13,0:PRINT "PRINT STOCK AND DOW FILES: "
610 CH= 0:IF RD< > 1THEN GOSUB 9000
628 PLOT 3,0,3:INPUT "LIST TO THE PRINTER? (Y[CR] OR [CR])";ZZ$:IF ZZ$< > "Y"THEN PR= 0:GOTO 631
629 PR= 1:PLOT 3,0,3:INPUT "ENTER THE PRINTER BAUD RATE (1,2..7)[CR]";ZZ:PLOT 27,18,ZZ,27,13
631 IF NS> 5THEN E= 5:GOTO 634
632 E= NS
634 B= 1:IF PR< > 1THEN PLOT 3,0,5
636 GOSUB 7100
648 IF NS< 6THEN 683
650 B= 6:E= NS:IF PR< > 1THEN PLOT 3,0,5
652 GOSUB 7100
683 IF PR= 1THEN GOSUB 4500
685 CI= 0:IF CH= 1THEN GOSUB 9050
699 PRINT :INPUT "HIT [CR] FOR MENU ";ZZ:GOTO 110
800 REM  PLOT STOCK & DOW PERFORMANCE
801 PLOT 12:IF RD< > 1THEN GOSUB 9000
802 PLOT 3,20,0:PRINT "PERFORMANCE PLOT:":PLOT 3,10,4:PRINT "NO.   STOCK"
803 FOR I= 1TO NS:PRINT :PRINT TAB( 10)I,A$(I):NEXT I
805 PLOT 10,10,10:PRINT TAB( 10);:INPUT "ENTER STOCK NO. TO BE PLOTTED. ";S:IF S< 1OR S> NSTHEN 805
806 PLOT 3,10,29:INPUT "ENTER ENDING WEEK OF PLOT PERIOD. (1=CURRENT) ";LW:IF LW< 1OR LW> DI(160)OR LW> 105THEN 806
807 GOSUB 830:FOR W= 1TO 159:V(W)= S(S,W):NEXT W
808 GOSUB 860:GOSUB 850:IF (VM- VN)= 0THEN KT= 0:GOTO 810
809 KT= 15/ (VM- VN)
810 MN= 16:PLOT 19:GOSUB 870
812 FOR W= 1TO 159:V(W)= DT(W):NEXT W
813 GOSUB 860:GOSUB 850:IF (VM- VN)= 0THEN KT= 0:GOTO 816
814 KT= 40/ (VM- VN)
816 MN= 33:PLOT 21:GOSUB 870
818 FOR W= 1TO 159:V(W)= DI(W):NEXT W
819 GOSUB 860:GOSUB 850:IF (VM- VN)= 0THEN KT= 0:GOTO 822
820 KT= 40/ (VM- VN)
822 MN= 75:PLOT 23:GOSUB 870
828 PLOT 3,0,30:INPUT "(CR) TO MENU ";ZZ:GOTO 110
830 PLOT 12:REM  DRAW AXIS AND LABEL
832 PLOT 12,15,17,2,20,15,242,127,15,255
834 PLOT 2,20,15,242,20,127,255
836 PLOT 30:FOR I= 0TO 5:PLOT 2,102- I* 20+ 23,15,255:NEXT I:PLOT 29
838 PLOT 23,3,6,29:PRINT SPC( 4);LW+ 50;TAB( 14);LW+ 40;TAB( 24);LW+ 30;TAB( 34);LW+ 20;TAB( 44);LW+ 10;TAB( 54);LW"
840 PLOT 23,3,0,6:PRINT "DOW INDUS.":PLOT 21,3,0,15:PRINT "DOW TRANS.":PLOT 19,3,0,24:PRINT A$(S)
842 PLOT 3,21,0:PRINT "STOCK & DOW PERFORMANCE"
844 PLOT 3,34,30:PRINT "WEEK NO."
848 RETURN
850 REM  MAX/MIN
852 VM= V(LW):VN= V(LW):FOR I= LW+ 1TO LW+ 51
853 IF V(I)< = 0THEN 858
854 IF VM< V(I)THEN VM= V(I)
855 IF VM< VA(I)THEN VM= VA(I):GOTO 858
856 IF VN> V(I)AND V(I)> 0THEN VN= V(I)
857 IF VN> VA(I)AND VA(I)> 0THEN VN= VA(I)
858 NEXT I:RETURN
860 REM  39 WEEK AVE
862 FOR I= LWTO LW+ 51:SM= 0
864 FOR J= ITO I+ 38:IF V(J)= 0THEN VA(I)= 0:GOTO 868
866 SM= SM+ V(J):NEXT J:VA(I)= SM/ 39
868 NEXT I:RETURN
870 REM  PLOT
872 FOR I= LW+ 51TO LWSTEP - 1:WK= 23+ (LW+ 51- I)* 2
874 IF V(I)= 0THEN 878
876 PLOT 2,WK,(V(I)- VN)* KT+ MN,255
878 IF VA(I)= 0THEN 882
880 PLOT 2,WK,(VA(I)- VN)* KT+ MN,255
882 NEXT I:PLOT 18:RETURN
1000 REM  WRITE DATA, CLOSE ALL FILES, END PGM
1010 REM  CLOSE EACH WEEKLY STOCK VALUE FILE
1020 S= 0:PLOT 3,10,26:PRINT "NUMBER STOCKS = ";NS
1022 S= S+ 1:PLOT 3,10,28:PRINT "STOCK NUMBER = ";S
1030 NM$= "STOCK"+ RIGHT$ (STR$ (S),1)
1040 F= S
1042 FOR W= 1TO 160
1044 V(W)= S(S,W)
1046 NEXT W
1047 J= 0
1048 FOR N= 1TO 16
1049 PUT F,N;V(J+ 1),V(J+ 2),V(J+ 3),V(J+ 4),V(J+ 5),V(J+ 6),V(J+ 7),V(J+ 8),V(J+ 9),V(J+ 10)
1050 J= J+ 10
1051 NEXT N
1052 FILE "C",F
1060 IF S= NSTHEN 1080
1065 GOTO 1022
1070 REM  CLOSE THE WEEKLY DOW 'I', 'T' FILES
1080 F= 10
1081 NM$= "DJIAVE"
1082 FOR W= 1TO 160
1083 V(W)= DI(W)
1090 NEXT W
1091 J= 0
1092 FOR N= 1TO 16
1093 PUT F,N;V(J+ 1),V(J+ 2),V(J+ 3),V(J+ 4),V(J+ 5),V(J+ 6),V(J+ 7),V(J+ 8),V(J+ 9),V(J+ 10)
1094 J= J+ 10
1095 NEXT N
1096 FILE "C",F
1100 F= 11
1101 NM$= "DJTAVE"
1102 FOR W= 1TO 160
1103 V(W)= DT(W)
1110 NEXT W
1111 J= 0
1112 FOR N= 1TO 16
1113 PUT F,N;V(J+ 1),V(J+ 2),V(J+ 3),V(J+ 4),V(J+ 5),V(J+ 6),V(J+ 7),V(J+ 8),V(J+ 9),V(J+ 10)
1114 J= J+ 10
1115 NEXT N
1116 FILE "C",F
1120 REM  CLOSE SKNAME FILE
1130 FILE "C",12:END
3000 REM  SUBROUTINE TO READ FILES: CALLING SECTION REQUIRES
3010 REM  F (FILE#),V(VARIABLE ARRAY), NM$ (FILE NAME)
3020 FILE "R",F,NM$,1:J= 0:FOR N= 1TO 16
3030 GET F,N;V(J+ 1),V(J+ 2),V(J+ 3),V(J+ 4),V(J+ 5),V(J+ 6),V(J+ 7),V(J+ 8),V(J+ 9),V(J+ 10)
3040 J= J+ 10:NEXT N:RETURN
4000 REM  SUBROUTINE TO REARRANGE FILE DATA
4010 IF V(160)> = 159THEN V(160)= 159:GOTO 4030
4020 V(160)= V(160)+ 1
4022 IF V(160)= 1THEN 4040
4024 IF V(160)= 2THEN V(2)= V(1):GOTO 4040
4030 FOR I= V(160)TO 2STEP - 1:V(I)= V(I- 1):NEXT I
4040 V(1)= CV(M):RETURN
4500 REM  SUBROUTINE TO ALLOW MASS FILE CHANGES
4510 POKE 33265,0:PLOT 3,0,18:INPUT "DO YOU WISH TO CORRECT ANY VALUES? (Y[CR] OR [CR])    ";ZZ$
4512 IF ZZ$< > "Y"THEN ER= 5:ED= 20:GOSUB 7000:RETURN
4515 CH= 1:ER= 20:ED= 5:GOSUB 7000
4520 PLOT 3,0,20:PRINT "ENTER WEEK NO.";:INPUT WW:IF WW< 1OR WW> DI(160)THEN 4520
4525 INPUT "ENTER S (STOCK);I (DOW I); OR T (DOW T) ";X$
4530 IF X$= "S"THEN INPUT "ENTER STOCK NO. ";SS:IF SS< 0OR SS> NSTHEN 4530
4535 IF X$= "S"THEN INPUT "ENTER STOCK VALUE ";S(SS,WW):GOTO 4570
4540 IF X$= "I"THEN INPUT "ENTER DOW I VALUE ";DI(WW):GOTO 4570
4550 IF X$= "T"THEN INPUT "ENTER DOW T VALUE ";DT(WW):GOTO 4570
4560 GOTO 4525
4570 PLOT 3,0,5:GOSUB 7200:FOR WK= W- 10TO W- 1:K= WK:GOSUB 7300:NEXT WK:GOTO 4510
5000 REM  SUBROUTINE TO COMPUTE 39-WEEK AVERAGE
5002 IF V(160)< 39THEN F(M)= 1:LM= V(160):W(M)= LM:GOTO 5010
5004 LM= 39:F(M)= 0
5010 IF V(160)= 0THEN AV(M)= 0:GOTO 5030
5015 SM= 0:FOR I= 1TO LM
5020 SM= SM+ V(I):NEXT I:AV(M)= SM/ LM
5030 RETURN
5500 REM  PREPARE DATA FOR CHART PRINT OUT
5510 FOR I= 1TO NS
5520 IF CV(I)> AV(I)THEN AN$(I)= "ABOVE":GOTO 5550
5530 IF CV(I)= AV(I)THEN AN$(I)= "SAME":GOTO 5550
5540 AN$(I)= "BELOW"
5550 NEXT I
5560 A$(NS+ 1)= "DOW INDUSTRIAL"
5570 IF CV(NS+ 1)> AV(NS+ 1)THEN AN$(NS+ 1)= "ABOVE":GOTO 5600
5580 IF CV(NS+ 1)= AV(NS+ 1)THEN AN$(NS+ 1)= "SAME":GOTO 5600
5590 AN$(NS+ 1)= "BELOW"
5600 A$(NS+ 2)= "DOW TRANSPORTATION"
5610 IF CV(NS+ 2)> AV(NS+ 2)THEN AN$(NS+ 2)= "ABOVE":GOTO 5650
5620 IF CV(NS+ 2)= AV(NS+ 2)THEN AN$(NS+ 2)= "SAME":GOTO 5650
5630 AN$(NS+ 2)= "BELOW"
5640 REM  PRINT OUT STOCK & DOW VALUES & 39-WEEK AVERAGES
5650 PLOT 12,3,19,2:PRINT "STOCK FUND DECISION CHART"
5660 PRINT :PRINT TAB( 4)"VALUE NAME"TAB( 19)"CURRENT VALUE"TAB( 34)"39-WEEK AVERAGE"TAB( 51)"ANALYSIS"
5670 PRINT :FOR I= 1TO NS+ 2:PRINT TAB( 0);A$(I);TAB( 22);CV(I);TAB( 37);AV(I);
5680 IF F(I)= 1THEN PRINT TAB( 48)"*"TAB( 50);W(I)"";:
5690 PRINT TAB( 54);AN$(I):NEXT I:RETURN
6000 PRINT :PRINT "    * INDICATES LESS THAN 39 WEEKS OF DATA."
6010 PRINT :PRINT ;:INPUT "    HIT [CR] FOR MENU ";ZZ:RETURN
7000 REM  SUBROUTINE TO CLEAR PORTION OF SCREEN
7010 FOR J= ERTO ER+ ED:PLOT 3,0,J:PRINT "                                                            ":NEXT J:RETURN
7100 GOSUB 7200
7110 L= 0:FOR W= 1TO DI(160):L= L+ 1:IF L< 11OR PR= 1THEN 7130
7120 L= 1:GOSUB 4500:PLOT 3,0,5
7122 GOSUB 7200
7130 K= W:GOSUB 7300
7140 NEXT W:IF PR< > 1THEN GOSUB 4500
7150 RETURN
7200 PRINT " WK";TAB( 5);:FOR S= BTO E:PRINT "STK";S;SPC( 3);:NEXT S:PRINT "DOW I";SPC( 3);"DOW T":PRINT :RETURN
7300 PRINT K;:FOR S= BTO E
7304 IF B= 6THEN MS= S- 5:CE= E- 5:GOTO 7308
7306 MS= S:CE= E
7308 PRINT TAB( 4+ 8* (MS- 1));S(S,K);:NEXT S
7310 PRINT TAB( 4+ 8* CE);DI(K);TAB( 4+ 8* (CE+ 1));DT(K):RETURN
9000 REM  SUB TO OPEN, READ, & COMPUTE 39-WEEK AVE ALL FILES
9010 REM  OPEN & READ & CLOSE STOCK NAME FILE
9020 FILE "R",12,"SKNAME",2:I= 1:L$= "LAST      "
9030 GET 12,I;A$(I)[10]:IF A$(I)< > L$THEN I= I+ 1:GOTO 9030
9040 NS= I- 1:IF CI= 1THEN RETURN
9050 REM  OPEN, READ EACH WEEKLY STOCK VALUE FILE
9060 FOR S= 1TO NS:F= S:M= F
9065 IF RD= 1THEN FOR J= 1TO 160:V(J)= S(S,J):NEXT J:GOTO 9082
9070 NM$= "STOCK"+ RIGHT$ (STR$ (S),1):GOSUB 3000
9082 IF CI= 1THEN CV(M)= SW(M):GOSUB 4000
9085 FOR W= 1TO 160:S(S,W)= V(W):NEXT W
9095 CV(M)= V(1):GOSUB 5000
9100 NEXT S
9110 REM  OPEN & READ THE WEEKLY DOW 'I', 'T' FILES
9112 F= 10:M= NS+ 1
9115 IF RD= 1THEN FOR J= 1TO 160:V(J)= DI(J):NEXT J:GOTO 9122
9120 NM$= "DJIAVE":GOSUB 3000
9122 IF CI= 1THEN CV(M)= WI:GOSUB 4000
9125 FOR W= 1TO 160:DI(W)= V(W):NEXT W
9135 CV(M)= V(1):GOSUB 5000
9137 F= 11:M= NS+ 2
9139 IF RD= 1THEN FOR J= 1TO 160:V(J)= DT(J):NEXT J:GOTO 9142
9140 NM$= "DJTAVE":GOSUB 3000
9142 IF CI= 1THEN CV(M)= WT:GOSUB 4000
9145 FOR W= 1TO 160:DT(W)= V(W):NEXT W
9160 CV(M)= V(1):GOSUB 5000
9170 RD= 1:CI= 0:RETURN