57 lines
1.2 KiB
ObjectPascal
57 lines
1.2 KiB
ObjectPascal
unit Myc.Trade.Ticker;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.SysUtils,
|
|
Myc.Signals,
|
|
Myc.Lazy,
|
|
Myc.Trade.DataPoint,
|
|
Myc.Trade.DataStream,
|
|
Myc.Trade.DataProvider;
|
|
|
|
type
|
|
TTickProc<T> = reference to procedure(const Tick: TDataPoint<T>);
|
|
|
|
TTicker<T> = class(TInterfacedObject, TSignal.ISubscriber)
|
|
type
|
|
TConsumer = record
|
|
Proc: TTickProc<T>;
|
|
Lookback: Int64;
|
|
end;
|
|
private
|
|
FStream: IDataStream<T>;
|
|
FConsumers: TArray<TConsumer>;
|
|
FProvider: TMutable<TDataSeries<T>>;
|
|
|
|
function Notify: Boolean;
|
|
public
|
|
constructor Create(const AStream: IDataStream<T>; const AConsumers: TArray<TConsumer>);
|
|
|
|
end;
|
|
|
|
implementation
|
|
|
|
constructor TTicker<T>.Create(const AStream: IDataStream<T>; const AConsumers: TArray<TConsumer>);
|
|
begin
|
|
inherited Create;
|
|
FStream := AStream;
|
|
FConsumers := AConsumers;
|
|
|
|
var ml: Int64 := 0;
|
|
for var consumer in FConsumers do
|
|
if consumer.Lookback > ml then
|
|
ml := consumer.Lookback;
|
|
|
|
FProvider := TDataStreamProvider<T>.Create(ml, 100, AStream);
|
|
end;
|
|
|
|
{ TTicker<T> }
|
|
|
|
function TTicker<T>.Notify: Boolean;
|
|
begin
|
|
|
|
end;
|
|
|
|
end.
|