Refactoring DataStream

This commit is contained in:
Michael Schimmel
2025-06-07 16:42:12 +02:00
parent 94f94e3a27
commit d53742fd12
3 changed files with 43 additions and 35 deletions
+11 -9
View File
@@ -5,7 +5,7 @@ interface
uses
System.SysUtils, System.Classes, System.Generics.Collections, System.StrUtils,
Myc.Futures,
Myc.Trade.DataSeries, Myc.OHLCCache;
Myc.Trade.DataPoint, Myc.Trade.DataStream, Myc.OHLCCache;
type
TTimeframeSetting = record
@@ -16,22 +16,23 @@ type
TChartDataController = class
private
FTickDataArray: TArray<TAskBid.TTick>;
FTickDataArray: TArray<TDataRecord<TAskBidItem>>;
FOHLCCacheList: TList<TOHLC>;
FTimeframeSettingsArray: TArray<TTimeframeSetting>; // Now includes registered generic builders
FMemoLog: TStrings;
FGenericBuilders: TDictionary<string, IGenericCandleBuilder>; // Keyed by TTimeframeSetting.Caption
FDataServer: IDataServer<TAskBidItem>;
procedure InitializeBaseTimeframeSettings; // Renamed for clarity
function GetGenericBuilder(const ABuilderCaption: string): IGenericCandleBuilder;
public
constructor Create(AMemoTarget: TStrings);
constructor Create(const ADataServer: IDataServer<TAskBidItem>; AMemoTarget: TStrings);
destructor Destroy; override;
procedure LoadTickDataSeries(const AFileName: string);
// GetOrBuildCache now uses a single ASelectedTimeframeCaption for all types of timeframes.
function GetOrBuildCache(const ASelectedTimeframeCaption: string; // e.g., "M1", "Auto", "Every 20 Ticks"
function GetOrBuildCache( const ASelectedTimeframeCaption: string; // e.g., "M1", "Auto", "Every 20 Ticks"
AAutoAggCandleWidth: Integer;
AAutoAggCandleSpacing: Integer;
AAutoAggPaintBoxClientWidth: Integer;
@@ -40,7 +41,7 @@ type
procedure ClearAllDataAndCaches;
function GetTickDataCount: Integer;
function GetTickDataLength: Integer;
function GetTickDataItem(AIndex: Integer): TAskBid.TTick;
function GetTickDataItem(AIndex: Integer): TDataRecord<TAskBidItem>;
function HasData: Boolean;
// ABuilderCaption is the unique key used for FTimeframeSettingsArray.Caption and FGenericBuilders key.
@@ -61,11 +62,12 @@ const
{ TChartDataController }
constructor TChartDataController.Create(AMemoTarget: TStrings);
constructor TChartDataController.Create(const ADataServer: IDataServer<TAskBidItem>; AMemoTarget: TStrings);
var
I: Integer; // Standard loop variable
begin
inherited Create;
FDataServer:=ADataServer;
FMemoLog := AMemoTarget;
FGenericBuilders := TDictionary<string, IGenericCandleBuilder>.Create;
@@ -210,7 +212,7 @@ procedure TChartDataController.LoadTickDataSeries(const AFileName: string);
begin
ClearAllDataAndCaches();
try
FTickDataArray := TAskBid.LoadDataSeries(AFileName).WaitFor();
FTickDataArray := FDataServer.LoadDataSeries(AFileName).WaitFor();
if FMemoLog <> nil then
FMemoLog.Add(Format('DataController: Loading tick records from series: %s',
[AFileName]));
@@ -405,7 +407,7 @@ begin
Result := Length(FTickDataArray);
end;
function TChartDataController.GetTickDataItem(AIndex: Integer): TAskBid.TTick;
function TChartDataController.GetTickDataItem(AIndex: Integer): TDataRecord<TAskBidItem>;
begin
if (AIndex >= 0) and (AIndex < Length(FTickDataArray)) then
Result := FTickDataArray[AIndex]
@@ -413,7 +415,7 @@ begin
begin
if FMemoLog <> nil then
FMemoLog.Add(Format('DataController: Attempted to access invalid tick data index %d. Count is %d.', [AIndex, Length(FTickDataArray)]));
Result := Default(TAskBid.TTick);
Result := Default(TDataRecord<TAskBidItem>);
end;
end;