unit Myc.Trade.Ticker; interface uses System.SysUtils, Myc.Signals, Myc.Lazy, Myc.Trade.DataPoint, Myc.Trade.DataStream, Myc.Trade.DataProvider; type TTickProc = reference to procedure(const Tick: TDataPoint); TTicker = class(TInterfacedObject, TSignal.ISubscriber) type TConsumer = record Proc: TTickProc; Lookback: Int64; end; private FStream: IDataStream; FConsumers: TArray; FProvider: TMutable>; function Notify: Boolean; public constructor Create(const AStream: IDataStream; const AConsumers: TArray); end; implementation constructor TTicker.Create(const AStream: IDataStream; const AConsumers: TArray); 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.Create(ml, 100, AStream); end; { TTicker } function TTicker.Notify: Boolean; begin end; end.