private void RunOnNewQuote(HistoricalData data) { try { var msc = DateTime.UtcNow; if (Code is IndicatorBase) { var indicator = Code as IndicatorBase; var res = indicator.Calculate(); var seconds = (DateTime.UtcNow - msc); var seriesLength = indicator.Series.Select(series => series.Length).ToList(); var maxRecords = seriesLength.Count > 0 ? seriesLength.Max() : 0; RaiseOutput(String .Format(" > On new quote run: series count - {0}, records count - {1}, {2} items recalculated, time: {3}", indicator.Series.Count, maxRecords, res, seconds.ToString("g"))); } else if (Code is SignalBase) { var signal = Code as SignalBase; if (signal.StartMethod != StartMethod.NewQuote || !signal.IsReadyToRun) { return; } if (signal.StartMethod == StartMethod.Once && _prevExecution != DateTime.MinValue) { return; } _prevExecution = DateTime.UtcNow; signal.Start(ToCodeSelection(data)); var seconds = (DateTime.UtcNow - msc); RaiseOutput(" > On new quote start, time: " + seconds.ToString("g")); var alerts = Code.GetActualAlerts(); alerts.AddRange(((SimulationBroker)_broker).ActivityLog); foreach (var alert in alerts) { RaiseOutput(" - Alert: " + alert); } } } catch (Exception ex) { RaiseOutput(ex.ToString()); throw; } }