From ee3f4a516949676a0ae5d46d8395187bcacd891a Mon Sep 17 00:00:00 2001 From: Sean Date: Mon, 21 Apr 2025 21:41:46 -0400 Subject: [PATCH] Add profiling --- .../Generator/CMTrend/CMTTrendGenerator.cs | 14 +++++++++++++- .../Generator/CMTrend/CMTTrendModel..cs | 16 ++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/MarketData/MarketDataLib/Generator/CMTrend/CMTTrendGenerator.cs b/MarketData/MarketDataLib/Generator/CMTrend/CMTTrendGenerator.cs index b1fb47a..72dba87 100755 --- a/MarketData/MarketDataLib/Generator/CMTrend/CMTTrendGenerator.cs +++ b/MarketData/MarketDataLib/Generator/CMTrend/CMTTrendGenerator.cs @@ -23,25 +23,37 @@ namespace MarketData.Generator.CMTrend List symbols=PricingDA.GetSymbols(); // Filter out symbols where we do not have a price on trade date + Profiler profiler = new Profiler(); Dictionary latestDates = PricingDA.GetLatestDates(symbols); symbols=symbols.Where(x => latestDates.ContainsKey(x) && latestDates[x].Date>=tradeDate.Date).ToList(); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded pricing dates in {Utility.FormatNumber(profiler.End(),2)} (ms)"); // Prefetch a subset of fundamentals where each fundamental.asof is no greater than tradeDate + profiler.Reset(); FundamentalsV2 fundamentals = FundamentalDA.GetFundamentalsMaxDateV2(tradeDate); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded fundamentals in {Utility.FormatNumber(profiler.End(),2)} (ms)"); // Prefetch the Company Profiles + profiler.Reset(); Dictionary companyProfiles = CompanyProfileDA.GetCompanyProfiles(symbols); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded company profiles in {Utility.FormatNumber(profiler.End(),2)} (ms)"); -// Prefetch the pricing dates requires for 200 day moving average. +// Prefetch the pricing dates required for 200 day moving average. + profiler.Reset(); DateGenerator dateGenerator = new DateGenerator(); DateTime historicalDate=dateGenerator.GenerateHistoricalDate(tradeDate,cmtParams.DMA200Horizon+10); List historicalDates=PricingDA.GetPricingDatesBetween(historicalDate,tradeDate); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded moving average dates in {Utility.FormatNumber(profiler.End(),2)} (ms)"); // Prefetch the EPS time series + profiler.Reset(); Dictionary epsTimeSeriesCollectionDictionary = FundamentalDA.GetEPS(symbols,tradeDate,3); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded EPS Time Series in {Utility.FormatNumber(profiler.End(),2)} (ms)"); // Prefetch the profit margin time series + profiler.Reset(); Dictionary profitMarginTimeSeriesCollectionDictionary = IncomeStatementDA.GetProfitMarginMaxAsOf(symbols,tradeDate,3,IncomeStatement.PeriodType.Quarterly); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded Profit Margin Time Series in {Utility.FormatNumber(profiler.End(),2)} (ms)"); for(int index=0;index candidates=new List(); // Filter out symbols where we do not have a price on trade date + Profiler profiler = new Profiler(); Dictionary latestDates = PricingDA.GetLatestDates(symbols); symbols=symbols.Where(x => latestDates.ContainsKey(x) && latestDates[x].Date>=analysisDate.Value.Date).ToList(); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded pricing dates in {Utility.FormatNumber(profiler.End(),2)} (ms)"); + // Prefetch a subset of fundamentals where each fundamental.asof is no greater than tradeDate + profiler.Reset(); FundamentalsV2 fundamentals = FundamentalDA.GetFundamentalsMaxDateV2(analysisDate.Value); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded fundamentals in {Utility.FormatNumber(profiler.End(),2)} (ms)"); // Prefetch the company profiles + profiler.Reset(); Dictionary companyProfiles = CompanyProfileDA.GetCompanyProfiles(symbols); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded company profiles in {Utility.FormatNumber(profiler.End(),2)} (ms)"); -// Prefetch the pricing dates requires for 200 day moving average. +// Prefetch the pricing dates required for 200 day moving average. + profiler.Reset(); DateGenerator dateGenerator = new DateGenerator(); DateTime historicalDate=dateGenerator.GenerateHistoricalDate(analysisDate.Value,cmtParams.DMA200Horizon+10); List historicalDates=PricingDA.GetPricingDatesBetween(historicalDate,analysisDate.Value); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded moving average dates in {Utility.FormatNumber(profiler.End(),2)} (ms)"); // Prefetch the EPS time series + profiler.Reset(); Dictionary epsTimeSeriesCollectionDictionary = FundamentalDA.GetEPS(symbols,analysisDate.Value,3); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded EPS Time Series in {Utility.FormatNumber(profiler.End(),2)} (ms)"); // Prefetch the profit margin time series + profiler.Reset(); Dictionary profitMarginTimeSeriesCollectionDictionary = IncomeStatementDA.GetProfitMarginMaxAsOf(symbols,analysisDate.Value,3,IncomeStatement.PeriodType.Quarterly); + MDTrace.WriteLine(LogLevel.DEBUG,$"Loaded Profit Margin Time Series in {Utility.FormatNumber(profiler.End(),2)} (ms)"); for(int index=0;index