home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / g / getquo30.zip / PLOT.FOR < prev    next >
Text File  |  1992-12-22  |  4KB  |  151 lines

  1. OPTIONS X
  2. C     PROGRAM PLOT.FOR
  3. C
  4. C  This program reads a stock data file and produces a candlestick chart
  5. C  with High, Low, Close, and Volume.
  6. C
  7. C  INPUT.DAT Data line example:
  8. C  | 9338     78.375    77.375   77.875  -0.500   5/14/92*|
  9. C
  10.       DIMENSION LINE(9),BUF(79),CLINE(14),FILE(3)
  11.       REAL HIGH,LOW,CLSE,CHG,DATE,CHK
  12.       INTEGER VOL,MO,DAY,TVOL,IYR
  13. C
  14.       IDY = 0
  15.       IMO = 0
  16.       THIGH = 0.0
  17.       TLOW = 10000.0
  18.       TVOL = 0
  19. C
  20. C  Open the input file
  21. C
  22.       CALL OPEN (2,'INPUT.DAT')
  23. C
  24. C  Initialize Charting Limits
  25. C
  26.       READ (2,1000,END=6) VOL,HIGH,LOW,CLSE,CHG,DATE,IYR
  27.  1000 FORMAT (I5,3X,F8.3,2X,F8.3,1X,F8.3,1X,F7.3,2X,A5,1X,I2)
  28.       DECODE (DATE,5,1001) MO,CHK,DAY
  29.  1001 FORMAT (I2,A1,I2)
  30.     5 READ (2,1000,END=6) VOL,HIGH,LOW,CLSE,CHG,DATE,IYR
  31.       IF (HIGH .GT. THIGH) THIGH = HIGH
  32.       IF (LOW .LT. TLOW) TLOW = LOW
  33.       IF (VOL .GT. TVOL) TVOL = VOL
  34.       GOTO 5
  35. C
  36.     6 REWIND 2
  37.       FACT = (THIGH-TLOW)/55.0
  38.       FVOL = FLOAT(TVOL)/18.0
  39. C
  40. C  Initialize Month and Day counters
  41. C
  42.       IDY = DAY
  43.       IMO = MO-1
  44.       CALL OPEN (3,'OUTPUT.CRT')
  45. C
  46. C  Main Loop Setup
  47. C
  48.    15 IDYS = 30
  49.       IF ((IMO.EQ.1).OR.(IMO.EQ.3).OR.(IMO.EQ.5).OR.(IMO.EQ.7).OR.
  50.      *(IMO.EQ.8).OR.(IMO.EQ.10).OR.(IMO.EQ.12)) IDYS = 31
  51.       IF (IMO.EQ.2) IDYS = 28
  52. C
  53. C  Main Loop
  54. C
  55.       DO 10 I=IDY,IDYS
  56.    14 READ (2,1000,END=30) VOL,HIGH,LOW,CLSE,CHG,DATE
  57.       DECODE (DATE,5,1001) MO,CHK,DAY
  58.       IF (CHK.NE.'/     ') GOTO 14
  59.    16 IF (MO.NE.IMO) THEN
  60.           CALL CMNTH(IMO,MO,DAY)
  61.           GOTO 16
  62.       ENDIF
  63.    17 IF (DAY .GT. I) THEN
  64.           DO 18 K=1,79
  65.    18     BUF(K) = '      '
  66.           ENCODE (CLINE,79,1002) BUF
  67.  1002 FORMAT (79A1)
  68. C
  69. C  Print the line
  70. C
  71.           WRITE (3,1003) CLINE
  72.  1003 FORMAT (13A6,A1)
  73.           WRITE (1,1003) CLINE
  74.           I=I+1
  75.           GOTO 17
  76.       ENDIF
  77.       IDY = DAY+1
  78.       IMO = MO
  79. C
  80. C  Compute Chart Volume Positions
  81. C
  82.       ITEST = 0
  83.       IF (FVOL.GT.0) ITEST = VOL/FVOL
  84.       DO 11 N=1,20
  85.       BUF(N) = '      '
  86.    11 IF (N .LE. ITEST) BUF(N) = '-     '
  87. C
  88. C  Compute Chart Price Positions
  89. C
  90.       ILOW = IFIX((LOW-TLOW)/FACT)
  91.       IHIGH = IFIX((HIGH-TLOW)/FACT)
  92.       ICLOS = IFIX((CLSE-TLOW)/FACT)
  93.       DO 12 N=1,59
  94.       BUF(N+20) = '      '
  95.    12 IF ((N .GT. ILOW) .AND. (N .LT. IHIGH))  BUF(N+20) = '-     '
  96.       BUF(ILOW+20) = '|     '
  97.       BUF(IHIGH+20) = '|     '
  98.       BUF(ICLOS+20) = '+     '
  99.       ENCODE (CLINE,79,1002) BUF
  100. C
  101. C  Print the line
  102. C
  103.       WRITE (3,1003) CLINE
  104.    10 WRITE (1,1003) CLINE
  105.       GOTO 15
  106. C
  107. C  Normal Exit
  108. C
  109.    30 CONTINUE
  110.       CALL CLOSE (2)
  111.       CALL CLOSE (3)
  112.       STOP 'Normal exit'
  113.       END
  114.       SUBROUTINE CMNTH(IMO,MO,DAY)
  115. C
  116.       INTEGER IMO,MO,DAY
  117. C
  118. C  Check for last month
  119. C
  120.    10 IMO = IMO+1
  121.       IF (IMO.EQ.13) IMO = 1
  122.       IF (IMO.EQ.MO) THEN
  123.           RMO = 'DEC'
  124.           IF (IMO.EQ.1) RMO = 'JAN'
  125.           IF (IMO.EQ.2) RMO = 'FEB'
  126.           IF (IMO.EQ.3) RMO = 'MAR'
  127.           IF (IMO.EQ.4) RMO = 'APR'
  128.           IF (IMO.EQ.5) RMO = 'MAY'
  129.           IF (IMO.EQ.6) RMO = 'JUN'
  130.           IF (IMO.EQ.7) RMO = 'JLY'
  131.           IF (IMO.EQ.8) RMO = 'AUG'
  132.           IF (IMO.EQ.9) RMO = 'SEP'
  133.           IF (IMO.EQ.10) RMO = 'OCT'
  134.           IF (IMO.EQ.11) RMO = 'NOV'
  135.           WRITE (1,1001) RMO
  136.  1001 FORMAT ('************************************* ',A3,
  137.      *' *************************************')
  138.           WRITE (3,1001) RMO
  139.           RETURN
  140.       ENDIF
  141.       IDYS = 30
  142.       IF ((IMO.EQ.1).OR.(IMO.EQ.3).OR.(IMO.EQ.5).OR.(IMO.EQ.7).OR.
  143.      *(IMO.EQ.8).OR.(IMO.EQ.10).OR.(IMO.EQ.12)) IDYS = 31
  144.       IF (IMO.EQ.2) IDYS = 28
  145.       DO 20 M=1,IDYS
  146.       WRITE (1,1000) IMO,M
  147.    20 WRITE (3,1000) IMO,M
  148.  1000 FORMAT ('          no data for ',I2,'/',I2)
  149.       GOTO 10
  150.       END
  151.