Source Code
10 REM STOCK MARKET SIMULATION
20 REM BY DONALD A. BURGIO
25 CLS
30 DIM I$(5,3)
40 DIM O$(2)
50 LET A$="INT (RND*4.99)+1"
60 LET I$(1)="AAA"
70 LET I$(2)="BBB"
80 LET I$(3)="CCC"
90 LET I$(4)="DDD"
100 LET I$(5)="EEE"
110 RAND
120 GOTO 230
130 LET X=ABS G
140 LET B=INT X
150 LET E=X-B
160 LET Z$=STR$ B
170 IF E=0 THEN LET O$="00"
180 IF E<>0 THEN LET O$=STR$ (100*E)
190 IF O$(2)="." THEN LET O$=STR$ ((1000*E)+.01)
200 LET R$=Z$+"."+O$
210 LET L=LEN R$
220 RETURN
230 LET A=INT ((RND/10)*100+.5)/100
240 DIM S(5)
250 DIM P(5)
260 DIM T(5)
270 DIM C(5)
280 LET TT=0
290 LET F=0
300 LET D1=0
310 LET D2=0
320 LET P=0
330 LET P2=0
340 LET DY=0
350 LET EA=0
360 SLOW
370 CLS
380 FOR I=1 TO 20
390 PRINT AT 0,0;"% % % % % % %T%H%E% %Z%X% %S%T%O%C%K% %E%X%C%H%A%N%G%E% % % % % "
400 PRINT AT 0,0;"% % % % % % THE ZX STOCK EXCHANGE% % % % % "
410 NEXT I
420 PRINT AT 3,0;"WHAT IS YOUR NAME?"
430 INPUT N$
440 PRINT AT 3,0;"DO YOU WANT INSTRUCTIONS? (Y/N)"
450 INPUT Z$
460 IF Z$="N" THEN PRINT AT 3,0;" "
470 IF Z$="N" THEN GOTO 680
480 CLS
490 PRINT "WELCOME TO THE ZX STOCK EXCHANGE"
500 PRINT TAB ((32-LEN N$)/2);N$+"."
510 PRINT "YOUR ACCOUNT CURRENTLY CONTAINS"
520 PRINT "$10,000. YOU MAY BUY OR SELL"
530 PRINT "STOCKS. A TABLE OF AVAILABLE "
540 PRINT "STOCK, THEIR PRICES, AND THE"
550 PRINT "NUMBER OF SHARES IN YOUR PORT-"
560 PRINT "FOLIO WILL BE PRINTED. FOLLOW-"
570 PRINT "ING THIS THE INITIALS OF EACH"
580 PRINT "STOCK WILL BE PRINTED. HERE YOU"
590 PRINT "INDICATE A TRANSACTION. TO BUY"
600 PRINT "A STOCK TYPE XXX, WHERE XXX IS"
610 PRINT "THE NUMBER OF SHARES YOU WISH TO"
620 PRINT "BUY. TO SELL TYPE -XXX, WHERE"
630 PRINT "-XXX IS THE NUMBER OF SHARES YOU"
640 PRINT "WISH TO SELL. A 1 PERCENT BRO-"
650 PRINT "KERAGE FEE WILL AUTOMATICALLY"
660 PRINT "BE CHARGED TO YOUR ACCOUNT."
670 PRINT TAB 11;"GOOD LUCK"
680 LET S(1)=130
690 LET S(2)=90
700 LET S(3)=120
710 LET S(4)=85
720 LET S=(5)=115
730 LET TR=VAL A$
740 PRINT AT 21,7;"PRESS S TO START."
750 IF INKEY$="S" THEN GOTO 790
760 PRINT AT 0,0;"%W%E%L%C%O%M%E% %T%O% %T%H%E% %Z%X% %S%T%O%C%K% %E%X%C%H%A%N%G%E"
770 PRINT AT 0,0;"WELCOME TO THE ZX STOCK EXCHANGE"
780 GOTO 750
790 IF RND>.5 THEN GOTO 810
800 LET A=-A
810 CLS
820 GOSUB 2010
830 LET C=10000
840 PRINT
850 PRINT "STOCK INT. $/SHARE"
860 PRINT "--------------------------------"
870 LET G=S(1)
880 GOSUB 130
890 PRINT "A AND A ASSOCIATES AAA ";TAB (32-L);R$
900 LET G=S(2)
910 GOSUB 130
920 PRINT "B AND B BUYERS BBB ";TAB (32-L);R$
930 LET G=S(3)
940 GOSUB 130
950 PRINT "C AND C COAL CO. CCC ";TAB (32-L);R$
960 LET G=S(4)
970 GOSUB 130
980 PRINT "D AND D DEVELOPERS DDD ";TAB (32-L);R$
990 LET G=S(5)
\n1000 GOSUB 130
\n1010 PRINT "E AND E ENERGY EEE ";TAB (32-L);R$
\n1020 LET TA=EA
\n1030 LET EA=0
\n1040 LET SA=0
\n1050 FOR I=1 TO 5
\n1060 LET EA=EA+S(I)
\n1070 LET SA=SA+S(I)*P(I)
\n1080 NEXT I
\n1090 LET EA=INT (100*(EA/5)+.5)/100
\n1100 LET NC=INT ((EA-TA)*100+.5)/100
\n1110 LET D=SA+C
\n1120 IF F THEN GOTO 1160
\n1130 PRINT
\n1140 PRINT "ZX STOCK EXCHANGE AVER.:";EA
\n1150 GOTO 1190
\n1160 PRINT
\n1170 PRINT "ZX STOCK EXCHANGE AVER.:";EA
\n1180 PRINT "NET CHANGE:";NC
\n1190 PRINT
\n1200 PRINT N$;":"
\n1210 LET SA=INT (100*SA+.5)/100
\n1220 LET G=SA
\n1230 GOSUB 130
\n1240 PRINT "STOCK ASSETS=$";TAB (24-L);R$
\n1250 LET C=INT (100*C+.5)/100
\n1260 LET G=C
\n1270 GOSUB 130
\n1280 PRINT "CASH ASSETS= $";TAB (24-L);R$
\n1290 LET D=INT (100*D+.5)/100
\n1300 LET G=D
\n1310 GOSUB 130
\n1320 PRINT "TOTAL ASSETS=$";TAB (24-L);R$
\n1330 PRINT
\n1340 IF NOT F THEN PAUSE 225
\n1350 IF NOT F THEN POKE 16437,255
\n1360 IF NOT F THEN GOTO 1400
\n1370 PRINT "DO YOU WISH TO CONTINUE? (Y/N)"
\n1380 INPUT C$
\n1390 IF C$="N" THEN GOTO 2510
\n1400 FOR I=10 TO 21
\n1410 PRINT AT I,0;" "
\n1420 NEXT I
\n1430 PRINT AT 11,0;"WHAT IS YOUR TRANSACTION IN:"
\n1440 FOR I=1 TO 5
\n1450 PRINT AT 12,0;I$(I);"?"
\n1460 INPUT T(I)
\n1470 NEXT I
\n1480 PRINT AT 20,0;"PLEASE WAIT..."
\n1490 LET DP=0
\n1500 LET DS=0
\n1510 FOR I=1 TO 5
\n1520 LET T(I)=INT (T(I)+.5)
\n1530 IF T(I)<=0 THEN GOTO 1560
\n1540 LET DP=DP+T(I)*S(I)
\n1550 GOTO 1620
\n1560 LET DS=DS-T(I)*S(I)
\n1570 IF -T(I)<=P(I) THEN GOTO 1620
\n1580 PRINT AT 20,0;"YOU HAVE OVERSOLD A STOCK; TRY AGAIN. "
\n1590 PAUSE 300
\n1600 POKE 16437,255
\n1610 GOTO 1400
\n1620 NEXT I
\n1630 LET TT=DP+DS
\n1640 LET BF=INT (.01*TT*100+.5)/100
\n1650 LET CT=C-DP-BF+DS
\n1660 IF CT>=0 THEN GOTO 1720
\n1670 PRINT AT 19,0;"YOU HAVE TRIED TO SPEND "
\n1680 PRINT "$";-CT;" MORE THAN YOU HAVE."
\n1690 PAUSE 300
\n1700 POKE 16437,255
\n1710 GOTO 1400
\n1720 LET C=CT
\n1730 FOR I=1 TO 5
\n1740 LET P(I)=P(I)+T(I)
\n1750 NEXT I
\n1760 CLS
\n1770 GOSUB 2010
\n1780 LET DY=DY+1
\n1790 PRINT "*** END OF TRADING: DAY ";DY;" ***"
\n1800 PRINT
\n1810 PRINT "STK. $/SHR. HDS. $ VALUE CHANGE"
\n1820 PRINT "................................"
\n1830 FOR I=1 TO 5
\n1840 LET G=S(I)
\n1850 GOSUB 130
\n1860 PRINT AT 3+I,0;I$(I);AT 3+I,(11-L);R$;AT 3+I,13;P(I);
\n1870 LET G=S(I)*P(I)
\n1880 GOSUB 130
\n1890 PRINT AT 3+I,(24-L);R$;AT 3+I,26;C(I)
\n1900 NEXT I
\n1910 LET F=1
\n1920 PRINT
\n1930 LET R=VAL ((STR$ RND)(1 TO 4))
\n1940 LET I=INT (RND*7)
\n1945 IF I>5 THEN GOTO 1940
\n1950 IF I=0 THEN GOTO 1940
\n1960 IF R<.15 THEN PRINT I$(I);" DECLARES DIVIDENDS OF $";(R*4+.5);"/SHARE"
\n1970 IF R<.15 THEN LET C=C+P(I)*(R*4+.5)
\n1980 IF B>.93 THEN PRINT I$(I);" SPLITS STOCK"
\n1990 IF R>.93 THEN LET P(I)=P(I)*2
\n2000 GOTO 1020
\n2010 FAST
\n2020 IF D1>0 THEN GOTO 2060
\n2030 LET S=VAL A$
\n2040 LET D1=VAL A$
\n2050 LET P=1
\n2060 IF D2>0 THEN GOTO 2100
\n2070 LET S2=VAL A$
\n2080 LET D2=VAL A$
\n2090 LET P2=1
\n2100 LET D1=D1-1
\n2110 LET D2=D2-2
\n2120 FOR I=1 TO 5
\n2130 LET R=RND
\n2140 IF R>.25 THEN GOTO 2170
\n2150 LET R=.25
\n2160 GOTO 2240
\n2170 IF R>.5 THEN GOTO 2200
\n2180 LET R=.5
\n2190 GOTO 2240
\n2200 IF R>.75 THEN GOTO 2230
\n2210 LET R=.75
\n2220 GOTO 2240
\n2230 LET R=0
\n2240 LET BC=0
\n2250 IF P<1 THEN GOTO 2290
\n2260 IF INT (S+.5)<>INT (I+.5) THEN GOTO 2290
\n2270 LET BC=4
\n2280 LET P=0
\n2290 IF P2<1 THEN GOTO 2330
\n2300 IF INT (S2+.5)<>INT (I+.5) THEN GOTO 2330
\n2310 LET BC=-4
\n2320 LET P2=0
\n2330 LET C(I)=INT (A*S(I))+R+INT (3-6*RND+.5)+BC
\n2340 LET C(I)=INT (100*C(I)+.5)/100
\n2350 LET S(I)=S(I)+C(I)
\n2360 IF S(I)>0 THEN GOTO 2400
\n2370 LET C(I)=0
\n2380 LET S(I)=0
\n2390 GOTO 2410
\n2400 LET S(I)=INT (100*S(I)+.5)/100
\n2410 NEXT I
\n2420 LET TR=TR-1
\n2430 IF TR<1 THEN GOSUB 2460
\n2440 SLOW
\n2450 RETURN
\n2460 LET TR=VAL A$
\n2470 LET A=INT ((RND/10)*100+.5)/100
\n2480 IF RND<=.5 THEN GOTO 2500
\n2490 LET A=-A
\n2500 RETURN
\n2510 CLS
\n2520 PRINT
\n2530 PRINT
\n2540 PRINT "AT THE END OF ";DY;" DAYS TRADING:"
\n2550 IF D>=10000 THEN GOTO 2610
\n2560 PRINT "YOU HAVE LOST $";
\n2570 LET G=10000-D
\n2580 GOSUB 130
\n2590 PRINT R$
\n2600 GOTO 2650
\n2610 PRINT "YOU HAVE MADE $";
\n2620 LET G=D-10000
\n2630 GOSUB 130
\n2640 PRINT R$
\n2650 PRINT "ON THE ZX STOCK EXCHANGE."
\n2660 PRINT
\n2670 PRINT "HOPE YOU HAD FUN, ";N$;"."
\n2680 PRINT "COME BACK AGAIN."
\n2690 PRINT AT 20,2;"PRESS S TO RETURN TO BASIC."
\n2700 PRINT AT 0,0;"%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$"
\n2710 PRINT AT 0,0;"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
\n2720 PRINT AT 21,0;"%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$"
\n2730 IF INKEY$="S" THEN STOP
\n2740 PRINT AT 21,0;"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
\n2750 GOTO 2700
\n2760 CLEAR
\n2770 STOP
\n2780 SAVE "1014%8"
\n2800 RUN