Stock Market Simulation

Developer(s): Donald Burgio
Date: 198x
Type: Program
Platform(s): TS 1000

Content

Appears On

Assembled by Tim Ward from many sources. Contains programs 10122 – 10175.

Related Products

Related Articles

Related Content

Image Gallery

Stock Market Simulation

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 
Scroll to Top