unit L2SimulatorUnit; { This is a very simple interface used to send fake l2 data. The implementation is currently tied to esignal, so it doesn't work. } interface uses Timers, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TL2Simulator = class(TForm) Label4: TLabel; SymbolNames: TMemo; Label2: TLabel; ChangesPerCycle: TEdit; Label3: TLabel; MsPerCycle: TEdit; EnabledCheckBox: TCheckBox; DoOnce: TButton; procedure DoOnceClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure EnabledCheckBoxClick(Sender: TObject); private Timer : ITimerEvent; SymbolNamesCopy : TStrings; ChangesPerCycleCopy : Integer; LastPrice : Integer; //Index : Integer; Procedure DoOneCycle; Procedure CopyArgs; Procedure StartEvents; Procedure StopEvents; public { Public declarations } end; var L2Simulator: TL2Simulator; implementation {$R *.dfm} { Uses Level2Messages, ESignalDLL, DataNodes;} Procedure TL2Simulator.StartEvents; Var MsPerCycleCopy : Integer; Begin CopyArgs; MsPerCycleCopy := StrToInt(MsPerCycle.Text); SymbolNames.Enabled := False; ChangesPerCycle.Enabled := False; MsPerCycle.Enabled := False; DoOnce.Enabled := False; Timer := RequestPeriodicCallback(DoOneCycle, MsPerCycleCopy) End; Procedure TL2Simulator.StopEvents; Begin If Assigned(Timer) Then Begin Timer.Clear; Timer := Nil End; SymbolNames.Enabled := True; ChangesPerCycle.Enabled := True; MsPerCycle.Enabled := True; DoOnce.Enabled := True; End; procedure TL2Simulator.CopyArgs; Begin SymbolNamesCopy.Assign(SymbolNames.Lines); ChangesPerCycleCopy := StrToInt(ChangesPerCycle.Text); End; procedure TL2Simulator.DoOneCycle; { Var I : Integer; Key : String; Info : TLevel2Info;} begin { For I := 1 To ChangesPerCycleCopy Do Begin Info := TLevel2Info.Create; SetLength(Info.Deltas, 2); With Info.Deltas[0] Do Begin BidSide := True; State := sOpen; Id := 'PHIL'; Price := Pred(LastPrice) * 0.01; Size := LastPrice Mod 100 End; With Info.Deltas[1] Do Begin BidSide := False; State := sOpen; Id := 'PHIL'; Price := Succ(LastPrice) * 0.01; Size := LastPrice Mod 1000 End; Inc(LastPrice); Key := SymbolNamesCopy[Index Mod SymbolNamesCopy.Count]; Inc(Index); Info.Send(Level2DeltaChannel(Key)) End;} End; procedure TL2Simulator.DoOnceClick(Sender: TObject); begin CopyArgs; DoOneCycle end; procedure TL2Simulator.FormCreate(Sender: TObject); begin SymbolNamesCopy := TStringList.Create; LastPrice := 5; end; procedure TL2Simulator.EnabledCheckBoxClick(Sender: TObject); begin If EnabledCheckBox.Checked Then Try StartEvents Except On EConvertError Do Begin Beep; StopEvents; EnabledCheckBox.Checked := False End End Else StopEvents end; end.