AuraTrader Sample
This commit is contained in:
@@ -0,0 +1,172 @@
|
||||
unit MainForm;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils,
|
||||
System.Types,
|
||||
System.UITypes,
|
||||
System.Classes,
|
||||
System.Variants,
|
||||
System.DateUtils,
|
||||
FMX.Types,
|
||||
FMX.Controls,
|
||||
FMX.Forms,
|
||||
FMX.Graphics,
|
||||
FMX.Dialogs,
|
||||
FMX.Controls.Presentation,
|
||||
FMX.StdCtrls,
|
||||
FMX.ListView.Types,
|
||||
FMX.ListView.Appearances,
|
||||
FMX.ListView.Adapters.Base,
|
||||
FMX.ListView,
|
||||
FMX.Memo.Types,
|
||||
FMX.ScrollBox,
|
||||
FMX.Memo,
|
||||
FMX.Objects,
|
||||
Myc.Futures,
|
||||
Myc.Trade.DataStream,
|
||||
Myc.Trade.DataPoint,
|
||||
Myc.Signals,
|
||||
Myc.Signals.FMX,
|
||||
FMX.ListBox;
|
||||
|
||||
type
|
||||
TForm1 = class(TForm)
|
||||
LogMemo: TMemo;
|
||||
Panel1: TPanel;
|
||||
RandomButton: TButton;
|
||||
Path1: TPath;
|
||||
SymbolsComboBox: TComboBox;
|
||||
LoadButton: TButton;
|
||||
procedure RandomButtonClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure LoadButtonClick(Sender: TObject);
|
||||
private
|
||||
FOnEvent: TNotifyEvent;
|
||||
{ Private declarations }
|
||||
FServer: IDataServer<TAskBidItem>;
|
||||
FSymbolsValid: TFMXValidationState;
|
||||
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);
|
||||
public
|
||||
{ Public declarations }
|
||||
published
|
||||
property OnEvent: TNotifyEvent read FOnEvent write FOnEvent;
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.fmx}
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
// Create an instance of the TAuraTABFileServer. The server can be reused for multiple stream creations. [364]
|
||||
FServer := TAuraTABFileServer.Create('\\COFFEE\TickData\Pepperstone');
|
||||
|
||||
SymbolsComboBox.Enabled := false;
|
||||
|
||||
FSymbols := FServer.EnumerateSymbols;
|
||||
|
||||
FSymbolsValid :=
|
||||
TFMXValidationState.Create(
|
||||
SymbolsComboBox,
|
||||
FSymbols.Done,
|
||||
procedure
|
||||
begin
|
||||
SymbolsComboBox.BeginUpdate;
|
||||
try
|
||||
SymbolsComboBox.Items.Clear;
|
||||
SymbolsComboBox.Items.AddStrings(FSymbols.WaitFor);
|
||||
if SymbolsComboBox.Items.Count > 0 then
|
||||
begin
|
||||
if SymbolsComboBox.ItemIndex < 0 then
|
||||
SymbolsComboBox.ItemIndex := SymbolsComboBox.Items.IndexOf('GER40');
|
||||
SymbolsComboBox.Enabled := true;
|
||||
end;
|
||||
finally
|
||||
SymbolsComboBox.EndUpdate;
|
||||
end;
|
||||
end
|
||||
);
|
||||
|
||||
Application.OnIdle := DoIdle;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
Application.OnIdle := nil;
|
||||
FSymbolsValid.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;
|
||||
|
||||
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 ass := FSymbols.WaitFor;
|
||||
FRandomStream[FStreamIdx] := FServer.CreateStream(ass[Random(Length(ass))]);
|
||||
|
||||
for var i := 0 to High(FRandomStream) do
|
||||
if LogMemo.Lines.Count = i then
|
||||
LogMemo.Lines.Add('');
|
||||
LogMemo.Lines[FStreamIdx] := FRandomStream[FStreamIdx].Symbol + ' loading...';
|
||||
|
||||
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
|
||||
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;
|
||||
end;
|
||||
finally
|
||||
LogMemo.EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user