DataPoint
This commit is contained in:
+71
-53
@@ -9,6 +9,7 @@ uses
|
||||
System.Classes,
|
||||
System.Variants,
|
||||
System.DateUtils,
|
||||
System.Generics.Collections,
|
||||
FMX.Types,
|
||||
FMX.Controls,
|
||||
FMX.Forms,
|
||||
@@ -27,9 +28,12 @@ uses
|
||||
Myc.Futures,
|
||||
Myc.Trade.DataStream,
|
||||
Myc.Trade.DataPoint,
|
||||
Myc.Trade.DataProvider,
|
||||
Myc.Signals,
|
||||
Myc.Lazy,
|
||||
Myc.Signals.FMX,
|
||||
FMX.ListBox;
|
||||
FMX.ListBox,
|
||||
FMX.Layouts;
|
||||
|
||||
type
|
||||
TForm1 = class(TForm)
|
||||
@@ -39,10 +43,20 @@ type
|
||||
Path1: TPath;
|
||||
SymbolsComboBox: TComboBox;
|
||||
LoadButton: TButton;
|
||||
FlowLayout: TFlowLayout;
|
||||
procedure RandomButtonClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure LoadButtonClick(Sender: TObject);
|
||||
private
|
||||
const
|
||||
cnt = 20;
|
||||
type
|
||||
TRndItem = record
|
||||
Stream: IDataStream<TAskBidItem>;
|
||||
Data: TMutable<TDataSeries<TAskBidItem>>;
|
||||
Labl: TLabel;
|
||||
end;
|
||||
private
|
||||
FOnEvent: TNotifyEvent;
|
||||
{ Private declarations }
|
||||
@@ -51,9 +65,7 @@ type
|
||||
FStreamUpdate: TFMXValidationState;
|
||||
FSymbols: TFuture<TArray<String>>;
|
||||
FStream: IDataStream<TAskBidItem>;
|
||||
FRandomStream: array[0..19] of IDataStream<TAskBidItem>;
|
||||
FStreamIdx: Integer;
|
||||
procedure DoIdle(Sender: TObject; var Done: Boolean);
|
||||
FRandom: TList<TRndItem>;
|
||||
public
|
||||
{ Public declarations }
|
||||
published
|
||||
@@ -69,6 +81,8 @@ implementation
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
FRandom := TList<TRndItem>.Create;
|
||||
|
||||
// Create an instance of the TAuraTABFileServer. The server can be reused for multiple stream creations. [364]
|
||||
FServer := TAuraTABFileServer.Create('\\COFFEE\TickData\Pepperstone');
|
||||
|
||||
@@ -97,76 +111,80 @@ begin
|
||||
end;
|
||||
end
|
||||
);
|
||||
|
||||
Application.OnIdle := DoIdle;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
Application.OnIdle := nil;
|
||||
FSymbolsValid.Free;
|
||||
FRandom.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.LoadButtonClick(Sender: TObject);
|
||||
begin
|
||||
FStream := FServer.CreateStream(FSymbols.WaitFor[SymbolsComboBox.ItemIndex]);
|
||||
FStreamUpdate := TFMXValidationState.Create(Path1, FStream.HasData,
|
||||
procedure
|
||||
var
|
||||
Data: array [0..5] of TDataPoint<TAskBidItem>;
|
||||
begin
|
||||
var cnt := FStream.GetChunk(Data);
|
||||
if cnt = 0 then exit;
|
||||
FStreamUpdate :=
|
||||
TFMXValidationState.Create(
|
||||
Path1,
|
||||
FStream.HasData,
|
||||
procedure
|
||||
var
|
||||
Data: array[0..200] of TDataPoint<TAskBidItem>;
|
||||
begin
|
||||
var cnt := FStream.GetChunk(Data);
|
||||
if cnt = 0 then
|
||||
exit;
|
||||
|
||||
for var i:=0 to cnt-1 do
|
||||
Path1.Data.LineTo( PointF(Path1.Data.Count, Data[i].Data.Ask) );
|
||||
end);
|
||||
for var i := 0 to cnt - 1 do
|
||||
Path1.Data.LineTo(PointF(Path1.Data.Count, Data[i].Data.Ask));
|
||||
end
|
||||
);
|
||||
end;
|
||||
|
||||
procedure TForm1.RandomButtonClick(Sender: TObject);
|
||||
begin
|
||||
var tst: TFlag := TFlag.CreateObserver( TSignal.Null );
|
||||
|
||||
|
||||
var rnd: TRndItem;
|
||||
|
||||
var ass := FSymbols.WaitFor;
|
||||
FRandomStream[FStreamIdx] := FServer.CreateStream(ass[Random(Length(ass))]);
|
||||
rnd.Stream := FServer.CreateStream(ass[Random(Length(FSymbols.WaitFor))]);
|
||||
rnd.Data := TDataStreamProvider.Create<TAskBidItem>(3000, 100, rnd.Stream);
|
||||
|
||||
for var i := 0 to High(FRandomStream) do
|
||||
if LogMemo.Lines.Count = i then
|
||||
LogMemo.Lines.Add('');
|
||||
LogMemo.Lines[FStreamIdx] := FRandomStream[FStreamIdx].Symbol + ' loading...';
|
||||
rnd.Labl := TLabel.Create(Self);
|
||||
rnd.Labl.Parent := FlowLayout;
|
||||
rnd.Labl.Align := TAlignLayout.None;
|
||||
rnd.Labl.WordWrap := false;
|
||||
rnd.Labl.Width := 300;
|
||||
rnd.Labl.Text := rnd.Stream.Symbol + ' loading...';
|
||||
FRandom.Add(rnd);
|
||||
|
||||
FStreamIdx := (FStreamIdx + 1) mod Length(FRandomStream);
|
||||
end;
|
||||
|
||||
procedure TForm1.DoIdle(Sender: TObject; var Done: Boolean);
|
||||
var
|
||||
Items: TArray<TDataPoint<TAskBidItem>>;
|
||||
begin
|
||||
SetLength(Items, 200);
|
||||
|
||||
LogMemo.BeginUpdate;
|
||||
try
|
||||
for var i := 0 to High(FRandomStream) do
|
||||
var Proc :=
|
||||
procedure(idx: Integer)
|
||||
begin
|
||||
var str := '';
|
||||
if LogMemo.Lines.Count > i then
|
||||
str := LogMemo.Lines[i]
|
||||
else
|
||||
LogMemo.Lines.Add('');
|
||||
|
||||
if Assigned(FRandomStream[i]) then
|
||||
begin
|
||||
var cnt := FRandomStream[i].GetChunk(Items);
|
||||
if cnt > 0 then
|
||||
begin
|
||||
var d := Items[cnt - 1];
|
||||
str := FRandomStream[i].Symbol + ' ' + cnt.ToString + ' ' + d.Time.ToString + ': ' + d.Data.Ask.ToString;
|
||||
end;
|
||||
end;
|
||||
|
||||
LogMemo.Lines[i] := str;
|
||||
TFMXValidationState.Create(
|
||||
FRandom[idx].Labl,
|
||||
FRandom[idx].Stream.HasData,
|
||||
procedure
|
||||
begin
|
||||
var data := FRandom[idx].Data.Value;
|
||||
if data.Count > 0 then
|
||||
begin
|
||||
var dp := data[0];
|
||||
FRandom[idx].Labl.Text :=
|
||||
FRandom[idx].Stream.Symbol
|
||||
+ ' '
|
||||
+ dp.Time.ToString
|
||||
+ ' '
|
||||
+ data.TotalCount.ToString
|
||||
+ ' '
|
||||
+ dp.Data.Ask.ToString;
|
||||
end;
|
||||
end
|
||||
);
|
||||
end;
|
||||
finally
|
||||
LogMemo.EndUpdate;
|
||||
end;
|
||||
Proc(FRandom.Count - 1);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user