const
N = 20;
var
i: Integer;
D: TDateTime;
O, H, L, C, V, OI: Double;
...
for i := 0 to N-1 do begin
// Dummy date: the last N days
D := Date() - (N-1) + i;
// Random values for O, H, L, C, making sure that H is the largest and L the smallest of these numbers
O := random * 100;
C := random * 100;
repeat
L := random * 100;
H := random * 100;
until (H >= L) and (H >= O) and (H >= C) and (L <= O) and (L <= C);
V := random* 1E6;
OI := random*10;
SeriesCandles.AddXOHLC(
D, // IBQuery_Zeichne.FieldByName('FK_JDATUM').AsDateTime,
O, // IBQuery_Zeichne.FieldByName('O').AsFloat,
H, // IBQuery_Zeichne.FieldByName('H').AsFloat,
L, // IBQuery_Zeichne.FieldByName('L').AsFloat,
C // IBQuery_Zeichne.FieldByName('C').AsFloat
);
Volume.AddXY(D, V); // IBQuery_Zeichne.FieldByName('FK_JDATUM').AsDateTime,IBQuery_Zeichne.FieldByName('Volume').AsFloat);
OpenInterest.AddXY(D, OI); // OpenInterest.OpenInterest.AddXY(IBQuery_Zeichne.FieldByName('FK_JDATUM').AsDateTime,IBQuery_Zeichne.FieldByName('OpenInterest').AsFloat);
s1:='';
s1:= s1 + DateToStr(D) + ': ';
//s1 := s1 + ' o=' + FloatToStrF(O, ffFixed, 4, 4) + '/'; // das funktioniert zwar, doch macht die Zeilen zu lange
//s1 := s1 + 'h=' + FloatToStrF(H, ffFixed, 4, 4) + '/';
//s1 := s1 + 'l=' + FloatToStrF(L, ffFixed, 4, 4) + '/';
s1 := s1 + 'c=' + FloatToStrF(C, ffFixed, 4, 4) + '/';
s1 := s1 + 'Vol=' + FloatToStrF(V, ffFixed, 4, 0) + '/';
s1 := s1 + 'oi=' + FloatToStrF(OI, ffFixed, 4, 0);
self.RichMemo_Legende.Lines.Add(s1);
if i = N-1 then
// if IBQuery_Zeichne.RecNo = IBQuery_Zeichne.RecordCount - 1 // der letzte Tag wird
then begin // für die Überschrift ausgelesen
open_:=O; // IBQuery_Zeichne.FieldByName('O').AsFloat;
high_:=H; // IBQuery_Zeichne.FieldByName('H').AsFloat;
low_:=L; // IBQuery_Zeichne.FieldByName('L').AsFloat;
close_:=C; //IBQuery_Zeichne.FieldByName('C').AsFloat;
dat_:=D; //IBQuery_Zeichne.FieldByName('FK_JDATUM').AsDateTime;
end;
// IBQuery_Zeichne.Next;
end;