home *** CD-ROM | disk | FTP | other *** search
- {$F+,V-}
- UNIT APROCEDU; {PROCEDURES & FUNCTIONS TO CHART WITH version 2.20.00}
-
- INTERFACE
-
- USES DOS;
- TYPE
- mktdata = RECORD {MARKET, & RAW DATA FIELDS}
- time :STRING[12];{DATE & TIME 199108020600 DONT WRITE TO TIME}
- last :REAL;
- high :REAL;
- low :REAL;
- vol :REAL;
- END;
-
- inddata = RECORD {PROFIT & INDICATOR DATA FIELD}
- data : REAL; {IE.. HIGH, LOW, LAST}
- color : BYTE; {LINE COLOR}
- END;
-
- VAR
- marketdata : mktdata; {ACCESS TO MARKET & RAW STOCK DATA}
- indicatordata : inddata; {ACCESS TO INDICATOR & PROFIT DATA}
-
-
- CONST
- {charttypes}
- candlestick =1; {MARKET TYPE}
- highlowclose =2; {MARKET TYPE}
- line =3; {INDICATOR & PROFIT TYPE}
- {chartadjust}
- dontdraw =0;{USE IF DATA IS CLUTTERING SCREEN}
- autoadjust =1;{USE IF DATA IS INDEPENDNET OF THE MARKET}
- followmarket =2;{USE IF DATA FOLLOWS THE MARKET, IE.. MOVING AVERAGES}
- hundredpercent=3;{USE IF DATA VALUES ARE 0..100, IE.. STOCKASTICS}
- lock =4;{USE IF NO ADJUSTMENT NEEDED AFTER FIRST AUTOADJUST}
- realtimeprofit=5;{USE FOR $link datafeed piggyback for real time}
- nochartdata =255; {USE IF NOT CHARTING,[PROFIT ONLY-LOOP OPTIMIZING]}
- {dayofweeknow}
- sunday =1;
- monday =2;
- tuesday =3;
- wednessday =4;
- thursday =5;
- friday =6;
- saturday =7;
- {linecolors}
- blue =1;
- green =2;
- cyan =3;
- red =4;
- magenta =5;
- brown =6;
- lightgray =7;
- lightblue =9;
- lightgreen =10;
- lightcyan =11;
- lightred =12;
- lightmagenta =13;
- yellow =14;
- white =15;
- {FOR ALL}
- PROCEDURE Howtochart(charttype:BYTE;chartadjust:BYTE;programname:STRING);
- PROCEDURE Writechartdatafile;
- {FOR PROFIT & INDICATOR}
- PROCEDURE Readmarketfile;
- {FOR PROFIT & INDICATOR}
- PROCEDURE Openindicatorfile(inumber:BYTE;iname:STRING); {inumber = 1..18}
- PROCEDURE Readindicatorfile(inumber:BYTE);
- {FOR MARKET & INDICATOR}
- PROCEDURE Openrawstockfile(rnumber:BYTE;rname:STRING); {rnumber = 1..6}
- PROCEDURE Readrawstockfile(rnumber:BYTE);
- {FOR ALL}
- PROCEDURE Nexttime;
- FUNCTION Timenow:STRING;
- FUNCTION Daynow:STRING;
- FUNCTION Dayofweeknow:BYTE;
- FUNCTION Alldone:BOOLEAN;
- PROCEDURE Done;
- {ONLY FOR PROFIT ENDLESS LOOP OPTIMAZING OR REALTIME}
- PROCEDURE Closeall;
- FUNCTION Indicatortime:BOOLEAN;
-
- {-----------------------------------------------------------------------}
-
- IMPLEMENTATION
- CONST listwidth = 12;
- listsize = 21;
- TYPE
- sys_rec = RECORD {RECORD OF SYSTEM SETUP}
- ldescription:STRING[20];
- backdstart :STRING[8];
- backdend :STRING[8];
- markttstart :STRING[4];
- markttend :STRING[4];
- inditstart :STRING[4]; {SMALL FILE - READ ONLY}
- inditend :STRING[4];
- pathraws :STRING[41];
- pathrawd :STRING[41];
- pathchart :STRING[41];
- rawtime :STRING[2];
- compilern :STRING[41];
- END;
-
- strlist = ARRAY[1..listsize+1] OF STRING[listwidth]; {ARRAY OF CHARTABLES SELECTED
- 1..18 = INDICATOR CHARTABLES
- 19 = MARKET CHARTABLE SMALL FILE - READ ONLY
- 20 = PROFIT CHARTABLE
- 21 = TEMP STORAGE
- 22 = LISTSIZE+1 = TEMP REDRAW INFO}
-
- chrtrec = RECORD
- name : STRING[12];
- date : LONGINT;
- buildnow : BOOLEAN;
- charttype : BYTE;
- chartadjust : BYTE;
- END;
-
- bacrec = RECORD
- systemlevel :BYTE;
- END;
-
- flofrawdataa = ARRAY[1..6] OF FILE OF mktdata;
- nrnamea = ARRAY[1..6] OF STRING[12];
- rdataptra = ARRAY[1..6] OF WORD;
- rawfinisheda = ARRAY[1..6] OF BOOLEAN;
- flofinddataa = ARRAY[1..18] OF FILE OF inddata;
- ninamea = ARRAY[1..18] OF STRING[12];
- idataptra = ARRAY[1..18] OF WORD;
-
- VAR
- {###### SETUP FILES ######}
- systemsetup : sys_rec; {UNITS ACCESS TO DATA}
- syssetupf :FILE OF sys_rec; {DISK ACCESS TO DATA}
- mylist : strlist;
- listf :FILE OF strlist;
- chartrecord : chrtrec;
- chartrecf :FILE OF chrtrec;
- backsetup : bacrec;
- bacsetupf :FILE OF bacrec;
-
- {###### DATA FILES ######}
- mnamef :FILE OF mktdata;
- pnamef :FILE OF inddata;
- inamef : flofinddataa;
- inamea : ninamea;
- inamefc :FILE OF inddata;
- rnamef : flofrawdataa;
- rnamea : nrnamea;
-
- {######## MISC VARIABLES #######}
- Y,T,I,Q,mdataptr,idataptrc,pdataptr:WORD;
- code,tspace : INTEGER;
- idataptr : idataptra;
- rdataptr : rdataptra;
- rawfinished : rawfinisheda;
- chartrecnumber,chrtadj : BYTE; {!!! READ ONLY !!!!}
- RN,dataname,mname : STRING;
- timet,rawdates,YR,OYR : STRING[12];
- rawfile,newdaydata,newday,newyear,newyeardata,market: BOOLEAN;
- firstmraw,finished,rawfinish: BOOLEAN;
- systemlevel : BYTE;
- rtime : LONGINT;
-
- CONST {ftypes}
- backrecfile =0; {bacrec - FILE TYPE LIST OF SYSTEM LEVEL}
- chartrecfile =1; {chrtrec - FILE TYPE LIST OF CHARTABLES INFORMATION}
- chrtlstfile =2; {listfile - FILE TYPE LIST OF CHARTABLES YOU SELECTED}
- systemfile =3; {syssetup - FILE TYPE RECORD OF THE SYSTEM SETUPS}
- marketfile =4;
- indicatorfile =5;
- profitfile =6;
- {testtime types}
- outofrange =0; {NOT EVEN SAME DAY}
- overrange =1; {DONT GO ANY HIGHER}
- inrange =3; {JUST RIGHT}
- underrange =5; {DONT GO ANY LOWER}
- {misc.}
- W=65535;{largest WORD value}
-
- PROCEDURE Badexit(s:STRING);
- BEGIN
- WRITELN;
- WRITELN(' BAD BUILD - HALT=2');
- WRITELN;
- WRITELN(S);
- HALT(2);
- END;
-
- FUNCTION Findprogram(lend:BYTE;lname:STRING):BYTE;
- BEGIN
- Findprogram:=0;
- FOR Q := 1 TO lend DO
- IF mylist[Q] = lname THEN
- Findprogram:=Q;
- END;
-
- PROCEDURE Openmarketfile; {INTERNAL}
- BEGIN
- IF chartrecnumber = (listsize-2) THEN Badexit('Market cant openmarketfile - just use rawstock');
- mname:=systemsetup.pathrawd+(COPY(mylist[listsize-2],1,6)+YR+COPY(mylist[listsize-2],9,4));
- ASSIGN(mnamef,mname);
- {$I-} RESET(mnamef); {$I+}
- IF IORESULT<>0 THEN Badexit('Can''t OPENMARKETFILE - '+mname);
- RESET(mnamef);
- mdataptr:=0;
- END;
-
- PROCEDURE Readmarketfile;
- BEGIN
- SEEK(mnamef,mdataptr);
- READ(mnamef,marketdata);
- END;
-
- PROCEDURE Openindicatorfile;
- VAR R:STRING[3];
- niname:STRING;
- BEGIN
- IF chartrecnumber = (listsize-2) THEN Badexit('Market cant openindicatorfile - just use rawstock');
- niname:=iname+'-P.'+systemsetup.rawtime+'I';
- IF Findprogram(chartrecnumber,niname)=0 THEN
- Badexit('Indicator file -'+niname+'- not in list before -'+mylist[chartrecnumber]);
- RN:=systemsetup.pathrawd+iname+YR+'.'+systemsetup.rawtime+'I';
- CASE inumber OF
- 1..18:BEGIN
- ASSIGN(inamef[inumber],RN);
- {$I-} RESET(inamef[inumber]); {$I+}
- IF IORESULT<>0 THEN Badexit('Can''t OPENINDICATORFILE - '+RN);
- RESET(inamef[inumber]);
- inamea[inumber]:=iname;
- idataptr[inumber]:=0;
- END;
- ELSE BEGIN
- STR(inumber,R);
- Badexit('INCIDATORFILE MUST BE 1..18, YOU USED- '+R);
- END;
- END;
- END;
-
- PROCEDURE Readindicatorfile;
- BEGIN
- SEEK(inamef[inumber],idataptr[inumber]);
- READ(inamef[inumber],indicatordata);
- END;
-
- PROCEDURE Openrawstockfile;
- LABEL 20;
- BEGIN
- IF chartrecnumber = (listsize-1) THEN Badexit('Profit cant openrawstockfile - use indicators');
- CASE rnumber OF
- 1..6:BEGIN
- 20:STR(Y,YR); YR:=COPY(YR,3,2);
- RN:=systemsetup.pathraws+rname+YR+'.'+systemsetup.rawtime+'R';
- ASSIGN(rnamef[rnumber],RN);
- {$I-} RESET(rnamef[rnumber]); {$I+}
- IF IORESULT<>0 THEN
- BEGIN
- STR(Y,YR);
- IF YR<COPY(SYSTEMSETUP.BACKDEND,1,4) THEN
- BEGIN
- INC(Y);
- GOTO 20;
- END
- ELSE rawfinish:=TRUE;
- END
- ELSE
- BEGIN
- RESET(rnamef[rnumber]);
- rnamea[rnumber]:=rname;
- rdataptr[rnumber]:=0;
- END;
- END
- ELSE BEGIN
- STR(rnumber,RN);
- Badexit('RAWSTOCKFILE MUST BE 1..6, YOU USED- '+RN);
- END;
- END;
- END;
-
- PROCEDURE Setrawsfinished;
- BEGIN
- FOR I:=1 TO 6 DO
- IF rdataptr[I]<W THEN rawfinished[I]:=FALSE ELSE rawfinished[I]:=TRUE;
- END;
-
- PROCEDURE Readrawstockfile;
- BEGIN
- IF NOT rawfinish THEN
- BEGIN
- SEEK(rnamef[rnumber],rdataptr[rnumber]);
- READ(rnamef[rnumber],marketdata);
- rawdates:=marketdata.time;
- IF (FIRSTMRAW) THEN
- BEGIN
- FIRSTMRAW:=FALSE;
- Setrawsfinished;
- NEXTTIME;
- END;
- {* WRITELN(TIMET,' R-',RDATAPTR[RNUMBER],' ',MARKETDATA.TIME,' ',MARKETDATA.LAST);}
- END;
- END;
-
- PROCEDURE Readfiletype(fltyp:BYTE); {INTERNAL}
- VAR code:INTEGER;
- S:STRING[2];
- BEGIN
- CASE fltyp OF
- backrecfile: BEGIN
- ASSIGN (bacsetupf,'ABACSET.SET');
- {$I-}RESET(bacsetupf);{$I+}
- IF IORESULT <> 0 THEN Badexit('Can''t find file 0-ABACSET.SET-');
- READ(bacsetupf,backsetup);
- systemlevel:=backsetup.systemlevel;
- CLOSE(bacsetupf);
- END;
- chartrecfile: BEGIN
- STR(SYSTEMLEVEL,S);
- ASSIGN(chartrecf,'ACHRTRE'+S+'.SET');
- {$I-}RESET(chartrecf);{$I+}
- IF IORESULT<>0 THEN Badexit('Can''t open file 1-ACHRTRE'+S+'.SET-');
- RESET(chartrecf);
- SEEK(chartrecf,chartrecnumber-1);
- READ(chartrecf,chartrecord);
- END;
- chrtlstfile: BEGIN
- ASSIGN(listf,'ACHRTLST.SET');
- {$I-}RESET(listf);{$I+}
- IF IORESULT<>0 THEN Badexit('Can''t find file 2-ACHRTLST.SET-.');
- RESET(listf);
- SEEK(listf,systemlevel-1);
- READ(listf,mylist);
- CLOSE(listf);
- END;
- systemfile: BEGIN
- ASSIGN(syssetupf,'ASYSSET.SET');
- {$I-}RESET(syssetupf);{$I+}
- IF IORESULT<>0 THEN Badexit('Can''t find file 3-ASYSSET.SET-.');
- RESET(syssetupf);
- SEEK(syssetupf,systemlevel-1);
- READ(syssetupf,systemsetup);
- CLOSE(syssetupf);
- END;
- END;{CASE}
- END;
-
- FUNCTION Fltype:BYTE; {INTERNAL}
- BEGIN
- CASE chartrecnumber OF
- listsize-2: Fltype:=marketfile;
- 1..listsize-3: Fltype:=indicatorfile;
- listsize-1: Fltype:=profitfile;
- ELSE Badexit('OOPS WRONG FILE TYPE-'+dataname);
- END;{CASE}
- END;
-
- PROCEDURE Rewritechartdatafile; {INTERNAL}
- VAR nname:STRING;
- BEGIN
- STR(Y,YR);YR:=COPY(YR,3,2);
- WITH marketdata DO
- BEGIN
- time:='';last:=0;high:=0;low:=0;vol:=0;
- END;
- WITH indicatordata DO
- BEGIN
- {data:=0;} color:=yellow;
- END;
- CASE Fltype OF
- marketfile:BEGIN
- nname:=systemsetup.pathrawd+(COPY(mylist[listsize-2],1,6)+YR+COPY(mylist[listsize-2],9,4));
- ASSIGN(mnamef,nname);
- REWRITE(mnamef);
- WRITE(mnamef,marketdata);
- CLOSE(mnamef);
- RESET(mnamef);
- mdataptr:=0;
- END;
- indicatorfile:BEGIN
- nname:=systemsetup.pathrawd+COPY(dataname,1,6)+YR+COPY(dataname,9,4);
- ASSIGN(inamefc,nname);
- REWRITE(inamefc);
- WRITE(inamefc,indicatordata);
- CLOSE(inamefc);
- RESET(inamefc);
- idataptrc:=0;
- Openmarketfile;
- Readmarketfile;
- timet:=marketdata.time;
- END;
- profitfile: BEGIN
- nname:=systemsetup.pathrawd+(COPY(mylist[listsize-1],1,6)+YR+COPY(mylist[listsize-1],9,4));
- ASSIGN(pnamef,nname);
- REWRITE(pnamef);
- pdataptr:=0;
- Openmarketfile;
- Readmarketfile;
- timet:=marketdata.time;
- END;
- END;{CASE}
- END;
-
- PROCEDURE Writechartdatafile;
- VAR nextyear:BOOLEAN;
- BEGIN
- CASE Fltype OF
- marketfile:BEGIN
- marketdata.time:=timet;
- SEEK(mnamef,mdataptr);
- WRITE(mnamef,marketdata);
- {* WRITELN(mdataptr,' ',MARKETDATA.TIME,' ',MARKETDATA.LAST);}
- INC(mdataptr);
- END;
- indicatorfile:BEGIN
- SEEK(inamefc,idataptrc);
- WRITE(inamefc,indicatordata);
- {WRITELN(idataptrc,' ',TIMET,' ',INDICATORDATA.DATA);}
- END;
- profitfile :BEGIN
- SEEK(pnamef,pdataptr);
- WRITE(pnamef,indicatordata);
- {WRITELN(pdataptr,' ',TIMET,' ',indicatorDATA.DATA);}
- END;
- END;{CASE}
- END;
-
- PROCEDURE Closechartdatafile;
- BEGIN
- IF mdataptr<W THEN
- BEGIN
- CLOSE(mnamef);mdataptr:=W;
- END;
- IF idataptrc<W THEN
- BEGIN
- CLOSE(inamefc);idataptrc:=W;
- END;
- IF pdataptr<W THEN
- BEGIN
- CLOSE(pnamef);pdataptr:=W;
- END;
- END;
-
- PROCEDURE Restarttime;{INTERNAL}
- BEGIN
- Rewritechartdatafile;
- FOR I := 1 TO 18 DO
- BEGIN
- IF idataptr[I]<>W THEN
- BEGIN
- CLOSE(inamef[I]);
- Openindicatorfile(I,inamea[I]);
- END;
- END;
-
- FOR I := 1 TO 6 DO
- BEGIN
- IF rdataptr[I]<>W THEN
- BEGIN
- CLOSE(rnamef[I]);
- Openrawstockfile(I,rnamea[I]);
- END;
- END;
- setrawsfinished;
- END;
-
- PROCEDURE Getspace;
- BEGIN
- VAL(systemsetup.rawtime,rtime,CODE);
- IF rtime=0 THEN rtime:=-32768; {0=CL}
- IF rtime=-32768 THEN tspace:=0
- ELSE tspace:=(ROUND(rtime*0.5)-1);
- END;
-
-
- FUNCTION Juliantodate(J:LONGINT):STRING; {INTERNAL}
- VAR D,M,Y : WORD;
- DD,MM,YY : STRING[4];
- remainder,factored : longint;
- BEGIN
- IF J <= 58 THEN
- BEGIN
- Y := 1900;
- IF J <= 30 THEN
- BEGIN
- M := 1;
- D := succ(J);
- END
- ELSE
- BEGIN
- M := 2;
- D := J - 30;
- END;
- END
- ELSE
- BEGIN
- factored := 4*longInt(J) - 233;
- Y := factored DIV 1461;
- remainder := (factored MOD 1461 DIV 4 * 5) + 2;
- M := remainder DIV 153;
- D := SUCC((remainder MOD 153) DIV 5);
- Y := Y + 1900;
- IF M < 10 THEN M := M + 3
- ELSE
- BEGIN
- M := M - 9;
- INC(Y);
- END;
- END;
- STR(D,DD);
- IF D < 10 THEN DD := '0'+DD;
- STR(M,MM);
- IF M < 10 THEN MM := '0'+MM;
- IF Y < 1900 THEN
- IF Y < 78 THEN
- Y := Y + 2000
- ELSE
- Y := Y + 1900;
- STR(Y,YY);
- Juliantodate := YY+MM+DD;
- END;
-
- FUNCTION Datetojulian(month,day,year:INTEGER):LONGINT; {INTERNAL}
- VAR temp:LONGINT;
- BEGIN
- IF (year=1900) AND (month <= 2) THEN
- BEGIN
- IF month=1 then temp := pred(day)
- ELSE
- Temp := day+30;
- END
- ELSE
- BEGIN
- IF month > 2 THEN month:=month-3
- ELSE
- BEGIN
- month:=month+9;
- DEC(year);
- END;
- year:=year-1900;
- temp := (1461*longint(year) div 4) +
- (153*month+2) div 5 + day + 58;
- END;
- Datetojulian:=temp;
- END;
-
- FUNCTION Dayofweeknow;
- VAR m,d,y:word;
- BEGIN
- VAL(COPY(timet,1,4),y,code);
- VAL(COPY(timet,5,2),m,code);
- VAL(COPY(timet,7,2),d,code);
- Dayofweeknow:=((Datetojulian(m,d,y)+1)MOD 7);
- END;
-
- FUNCTION Addtime(dates:STRING;fudgeminutes:INTEGER;market:BOOLEAN):STRING; {INTERNAL}
- VAR y,m,d,hour,minute,minutes,fudgeday:WORD;
- hh,mm:STRING;
- CONST nextday=-32768;
- BEGIN
- fudgeday:=0;
- VAL(COPY(dates,1,4),y,code);
- VAL(COPY(dates,5,2),m,code);
- VAL(COPY(dates,7,2),d,code);
- VAL(COPY(dates,9,2),hour,code);
- VAL(COPY(dates,11,2),minute,code);
- IF fudgeminutes=nextday THEN
- BEGIN
- fudgeminutes:=0;
- fudgeday:=1;
- END;
- minutes:=(hour*60)+minute+fudgeminutes;
- hour:=(minutes DIV 60);
- minute:=(minutes MOD 60);
- STR(hour,hh);
- IF hour < 10 THEN hh:='0'+hh;
- STR(minute,mm);
- IF minute < 10 THEN mm:='0'+mm;
- IF market THEN
- BEGIN
- IF {(newdaydata) OR} ((hh+mm)>systemsetup.markttend) OR (COPY(dates,1,8)<COPY(rawdates,1,8)) THEN
- BEGIN
- fudgeday:=1;
- hh:=COPY(systemsetup.markttstart,1,2);
- mm:=COPY(systemsetup.markttstart,3,2);
- newdaydata:=FALSE;
- END;
- END;
- Addtime:=juliantodate(datetojulian(m,d,y)+fudgeday)+hh+mm;
- END;
-
- FUNCTION Checkrawvsmarkettime:BYTE; {INTERNAL}
- VAR systime,ratimehi,ratimelo:STRING;
- market:BOOLEAN;
- BEGIN
- market:=FALSE;
- ratimehi:=Addtime(marketdata.time,tspace,market);
- ratimelo:=Addtime(marketdata.time,-tspace,market);
- systime:=timet;
- IF ((systime<=ratimehi) AND (systime>=ratimelo)) OR
- ((COPY(SYSTIME,1,8)=COPY(RATIMELO,1,8)) AND (TSPACE=0)) THEN
- Checkrawvsmarkettime:=inrange
- ELSE
- BEGIN
- IF (systime<ratimehi) OR (COPY(SYSTIME,1,8)<COPY(RATIMELO,1,8)) THEN
- Checkrawvsmarkettime:=overrange
- ELSE
- Checkrawvsmarkettime:=underrange;
- END;
- IF (chartrecnumber=listsize-2) AND (COPY(timet,1,8)<>COPY(marketdata.time,1,8)) THEN
- newday:=TRUE ELSE newday:=FALSE;
- END;
-
- FUNCTION Allrawsfinished:BOOLEAN;
- BEGIN
- Allrawsfinished:=TRUE;
- FOR I:=1 TO 6 DO IF rawfinished[I]=FALSE THEN Allrawsfinished:=FALSE;
- END;
-
- PROCEDURE Nextsystemtime;
- BEGIN
- Getspace;
- market:=TRUE;
- timet:=Addtime(timet,rtime,market);
- IF (COPY(timet,1,4)>OYR) OR (ALLRAWSFINISHED) THEN
- BEGIN
- Closechartdatafile;
- IF ALLRAWSFINISHED THEN
- BEGIN
- VAL(OYR,Y,CODE);INC(Y);
- STR(Y,OYR);
- END
- ELSE
- BEGIN
- OYR:=COPY(timet,1,4);
- END;
- VAL(OYR,Y,code);
- TIMET:=OYR+'01010001';
- IF (COPY(timet,1,8)>systemsetup.backdend) THEN
- finished:=TRUE ELSE Restarttime;
- END;
- IF (COPY(timet,1,8)>systemsetup.backdend) THEN
- finished:=TRUE;
- END;
-
- FUNCTION Timenow;
- BEGIN
- Timenow:=COPY(timet,9,4);
- END;
-
- FUNCTION Daynow;
- BEGIN
- Daynow:=COPY(timet,1,8);
- END;
-
- FUNCTION Marketfileexists:BOOLEAN; {INTERNAL}
- BEGIN
- mname:=systemsetup.pathrawd+(COPY(mylist[listsize-2],1,6)+YR+COPY(mylist[listsize-2],9,4));
- ASSIGN(mnamef,mname);
- {$I-} RESET(mnamef); {$I+}
- IF IORESULT<>0 THEN Marketfileexists:=FALSE
- ELSE
- BEGIN
- Marketfileexists:=TRUE;
- END;
- END;
-
- PROCEDURE Nextmarketdata; {INTERNAL}
- BEGIN
- INC(mdataptr);
- IF mdataptr>=FILESIZE(mnamef) THEN
- IF OYR>=COPY(SYSTEMSETUP.BACKDEND,1,4) THEN finished:=TRUE
- ELSE
- BEGIN
- newyear:=TRUE;
- Closechartdatafile;
- REPEAT
- IF OYR>=COPY(SYSTEMSETUP.BACKDEND,1,4) THEN finished:=TRUE
- ELSE
- BEGIN
- VAL(OYR,Y,CODE);INC(Y);STR(Y,OYR);YR:=COPY(OYR,3,2);
- IF Marketfileexists THEN
- BEGIN
- timet:=OYR+COPY(timet,5,8);
- Restarttime;
- END;
- END;
- UNTIL finished OR Marketfileexists;
- END
- ELSE
- BEGIN
- newyear:=FALSE;
- SEEK(mnamef,mdataptr);
- READ(mnamef,marketdata);
- timet:=marketdata.time;
- END;
- END;
-
- PROCEDURE Nextindicatordata; {INTERNAL}
- BEGIN
- FOR I := 1 TO 18 DO IF idataptr[I]<W THEN INC(idataptr[I]);
- END;
-
- PROCEDURE Nextrawstockdata; {INTERNAL}
- BEGIN
- { IF TIMET='199109051305' THEN
- BEGIN
- WRITELN;
- END; }
- newdaydata:=TRUE;
- FOR I := 1 TO 6 DO
- IF rdataptr[I]<W THEN
- REPEAT
- IF (rdataptr[I]<FILESIZE(rnamef[I])) AND (NOT rawfinished[I]) THEN
- BEGIN
- Readrawstockfile(I);
- T:=Checkrawvsmarkettime;
- IF (T=underrange) THEN INC(rdataptr[I]);
- IF (T=overrange) AND (rdataptr[I]>0) THEN DEC(rdataptr[I]);
- END
- ELSE
- BEGIN
- IF COPY(timet,1,8)<COPY(systemsetup.backdend,1,8) THEN
- newyeardata:=TRUE ELSE newyeardata:=FALSE;
- IF (NOT rawfinished[I]) AND (rdataptr[I]>0) THEN DEC(rdataptr[I]);
- rawfinished[I]:=TRUE;
- END;
- IF NOT newday THEN newdaydata:=FALSE;
- UNTIL (T<>underrange) OR (rawfinished[I]);
- END;
-
- FUNCTION Indicatortime;
- BEGIN
- IF ((COPY(timet,9,4)>=systemsetup.inditstart) AND (COPY(timet,9,4)<=systemsetup.inditend)) OR
- (tspace=0) THEN
- Indicatortime:=TRUE
- ELSE
- Indicatortime:=FALSE;
- END;
-
- PROCEDURE Copyindichartdata; {INTERNAL}
- BEGIN
- SEEK(inamefc,idataptrc-1);
- READ(inamefc,indicatordata);
- Writechartdatafile;
- END;
-
-
- PROCEDURE Nexttime;
- BEGIN
- CASE Fltype OF
- marketfile: BEGIN
- REPEAT
- Nextsystemtime;
- IF NOT finished THEN
- Nextrawstockdata;
- IF (Allrawsfinished) AND (NOT newyeardata) THEN finished:=TRUE;
- UNTIL (NOT NEWDAYDATA) OR (finished);
- END;
- indicatorfile: BEGIN
- REPEAT
- Nextmarketdata;
- IF NOT finished THEN
- BEGIN
- Nextrawstockdata;
- IF NOT newyear THEN Nextindicatordata;
- INC(idataptrc);
- IF NOT Indicatortime THEN Copyindichartdata;
- IF newyear THEN idataptrc:=0;
- END;
- UNTIL (Indicatortime) OR (finished);
- END;
- profitfile: BEGIN
- Nextmarketdata;
- IF NOT finished THEN
- BEGIN
- IF chrtadj=nochartdata THEN pdataptr:=0 ELSE INC(pdataptr);
- IF NOT newyear THEN Nextindicatordata ELSE pdataptr:=0;
- END;
- END;
- END;
- END;
-
- PROCEDURE Starttime; {INTERNAL}
- BEGIN
- OYR:=COPY(timet,1,4);
- FOR I := 1 TO 18 DO idataptr[I]:=W;
- FOR I := 1 TO 6 DO rdataptr[I]:=W;
- mdataptr:=W;idataptrc:=W;pdataptr:=W;
- Getspace;
- Rewritechartdatafile;
- END;
-
-
- PROCEDURE Howtochart;
- VAR S:STRING[1];
- ss:string;
- BEGIN
- Readfiletype(backrecfile);
- Readfiletype(systemfile);
- Readfiletype(chrtlstfile);
- chartrecnumber:=0;tspace:=0;
- STR(chartadjust,S);
- rawfinish:=FALSE;finished:=FALSE;firstmraw:=TRUE;
- newdaydata:=TRUE;newyeardata:=TRUE;
- VAL(COPY(systemsetup.backdstart,1,4),Y,code);
- STR(Y,YR);YR:=COPY(YR,3,2);
- dataname:=COPY(programname,1,6)+YR+COPY(programname,9,4);
- chartrecnumber:=Findprogram(listsize-1,programname);
- str(chartrecnumber,ss);
- IF chartrecnumber=0 THEN Badexit('CANT FIND HOWTOCHART-'+programname+'- "programname=" WRONG IN CHARTABLE.');
- Readfiletype(chartrecfile);
- IF (chartrecnumber=listsize-2) AND ((charttype=candlestick) OR (charttype=highlowclose)) THEN
- chartrecord.charttype:=charttype
- ELSE chartrecord.charttype:=candlestick;
- IF (chartrecnumber<>(listsize-2)) THEN chartrecord.charttype:=line;
- CASE chartadjust OF
- 0..4,255 : BEGIN
- chartrecord.chartadjust:=chartadjust;
- chrtadj:=chartadjust;
- END;
- ELSE Badexit('chartadjust S/B 0..4 NOT -'+S);
- END;
- IF chrtadj<>nochartdata THEN
- BEGIN
- SEEK(chartrecf,chartrecnumber-1);
- WRITE(chartrecf,chartrecord);
- END;
- CLOSE(chartrecf);
- timet:=systemsetup.backdstart+systemsetup.markttstart;{199008220615}
- Starttime;
- END;
-
- FUNCTION Alldone;
- BEGIN
- Alldone:=finished;
- END;
-
- PROCEDURE Closeall;
- BEGIN
- FOR I := 1 TO 18 DO IF idataptr[I]<W THEN CLOSE(inamef[I]);
- FOR I := 1 TO 6 DO IF rdataptr[I]<W THEN CLOSE(rnamef[I]);
- Closechartdatafile;
- END;
-
- PROCEDURE Done;
- BEGIN
- Closeall;
- {WRITELN('DONE - GOOD BUILD');} HALT(4); {GOOD EXIT CODE}
- END;
-
- END.