Data Types

This commit is contained in:
Michael Schimmel
2025-08-25 10:26:48 +02:00
parent 75675b8dc1
commit 27f1cc5486
20 changed files with 2670 additions and 34 deletions
+54 -3
View File
@@ -84,12 +84,15 @@ type
StrategyButton: TSpeedButton;
Strat2Button: TSpeedButton;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure StopButtonClick(Sender: TObject);
procedure TreeViewDblClick(Sender: TObject);
procedure AddWorkspaceActionExecute(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure LogMemoChange(Sender: TObject);
procedure Strat2ButtonClick(Sender: TObject);
procedure TestActionExecute(Sender: TObject);
procedure StrategyButtonClick(Sender: TObject);
@@ -126,7 +129,8 @@ implementation
uses
Myc.Data.Records,
TestModule;
TestModule,
Strategy2;
{$R *.fmx}
@@ -296,6 +300,46 @@ begin
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
var Symbol := SelectedSymbol;
if Symbol = '' then
exit;
var terminated := TFlag.CreateObserver(FTerminate.Signal).State;
var ticker := TConverter.CreateTicker<TDataPoint<TOhlcItem>>;
var Layout := CurrLayout<TVertScrollBox>;
if Layout = nil then
exit;
var chart1 := TMycChart.Create(Self);
AlignControl(chart1);
chart1.Height := Layout.ChildrenRect.Width * 9 / 20;
chart1.Lookback.Value := 50000;
var chart2 := TMycChart.Create(Self);
AlignControl(chart2);
chart2.Height := Layout.ChildrenRect.Width * 9 / 20;
chart2.Lookback.Value := 50000;
var equity := Strategy2.CreateStrategy2(ticker.Producer, LogMemo.Lines, chart1, chart2);
var pnlChart := TMycChart.Create(Self);
AlignControl(pnlChart);
pnlChart.Height := Layout.ChildrenRect.Width * 9 / 24;
pnlChart.Lookback.Value := 50000;
pnlChart.SetXAxisCounter<Double>(equity);
var panel := pnlChart.AddPanel;
panel.AddDoubleSeries(equity, TAlphaColors.Blue, 3);
FProcessDone := FProcessDone + FServer.ProcessData(Symbol, terminated, ticker.Consumer);
end;
function TForm1.CreateStrategy2(Timeframe: TTimeframe): IConsumer<TDataPoint<TOhlcItem>>;
type
TSignal = record
@@ -332,7 +376,7 @@ begin
var lastHull, lastSma: Double;
var conv := TConverter.Join<Double>([Ohlc.Field<Double>('Low'), Ohlc.Field<Double>('High'), Closes, ATR, Hull, Sma]);
var conv := TConverter.Join<Double>(jmAll, [Ohlc.Field<Double>('Low'), Ohlc.Field<Double>('High'), Closes, ATR, Hull, Sma]);
var Signal :=
TConverter<TArray<Double>, TSignal>.CreateConverter(
@@ -477,7 +521,7 @@ begin
var mean := TConverter<TArray<Double>, Double>.CreateConverter(TMean.CreateMean());
TConverter.Join<Double>([Hull, Sma]).Chain<Double>(mean);
TConverter.Join<Double>(jmAll, [Hull, Sma]).Chain<Double>(mean);
panel.AddDoubleSeries(mean.Producer, TAlphaColors.Blue, 5);
@@ -581,6 +625,12 @@ begin
{$endif}
end;
procedure TForm1.LogMemoChange(Sender: TObject);
begin
if LogMemo.Lines.Count > 1000 then
LogMemo.Lines.Clear;
end;
function TForm1.SelectedSymbol: String;
begin
Result := '';
@@ -690,6 +740,7 @@ begin
// ExecuteStrategy(Symbol, timeframe, CreateStrategy2(timeframe));
var tstStrat := StrategyTest.CreateStrategy1(timeframe);
ExecuteStrategy(Symbol, timeframe, tstStrat.Consumer);
var Layout := CurrLayout<TVertScrollBox>;