From 8371775411ce92f78df6bcf85b89096b0939b611 Mon Sep 17 00:00:00 2001 From: Sean Date: Tue, 8 Apr 2025 12:59:57 -0400 Subject: [PATCH] Optimizations --- MarketDataLib/Cache/LocalPriceCache.cs | 28 +++++++++++++++++-- .../Generator/GainLoss/GainLossGenerator.cs | 6 ++-- .../GainLoss/GainLossGeneratorCum.cs | 10 ++----- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/MarketDataLib/Cache/LocalPriceCache.cs b/MarketDataLib/Cache/LocalPriceCache.cs index afc3e56..4130bd9 100644 --- a/MarketDataLib/Cache/LocalPriceCache.cs +++ b/MarketDataLib/Cache/LocalPriceCache.cs @@ -15,6 +15,7 @@ namespace MarketData.Cache { private Dictionary priceCache=new Dictionary(); private static LocalPriceCache instance=null; + private DateTime latestDate = Utility.Epoch; private Thread cacheMonitorThread=null; private volatile bool threadRun=true; private int cacheCycle=300000; @@ -30,7 +31,8 @@ namespace MarketData.Cache { lock(thisLock) { - priceCache=new Dictionary(); + priceCache=new Dictionary(); + RefreshLatestDate(); } } @@ -55,18 +57,38 @@ namespace MarketData.Cache { lock(typeof(LocalPriceCache)) { - if(null==instance)instance=new LocalPriceCache(); + if(null==instance) + { + instance=new LocalPriceCache(); + instance.RefreshLatestDate(); + } return instance; } } + public void RefreshLatestDate() + { + lock(typeof(LocalPriceCache)) + { + latestDate=PricingDA.GetLatestDate(); + } + } + + public DateTime GetLatestDate() + { + lock(typeof(LocalPriceCache)) + { + return latestDate; + } + } + public void Refresh() { lock(typeof(LocalPriceCache)) { List symbols=new List(priceCache.Keys); Dictionary maxDbDates = PricingDA.GetLatestDates(symbols); - + RefreshLatestDate(); foreach(String symbol in symbols) { PricesByDate symbolPrices=priceCache[symbol]; diff --git a/MarketDataLib/Generator/GainLoss/GainLossGenerator.cs b/MarketDataLib/Generator/GainLoss/GainLossGenerator.cs index fa196d9..89dd369 100644 --- a/MarketDataLib/Generator/GainLoss/GainLossGenerator.cs +++ b/MarketDataLib/Generator/GainLoss/GainLossGenerator.cs @@ -24,7 +24,8 @@ namespace MarketData.Generator.GainLoss if (null == portfolioTrades || 0 == portfolioTrades.Count) return null; LocalPriceCache.GetInstance().Add(portfolioTrades); DateTime minTradeDate = portfolioTrades.GetMinTradeDate(); - DateTime maxDate = PricingDA.GetLatestDate(); +// DateTime maxDate = PricingDA.GetLatestDate(); + DateTime maxDate=LocalPriceCache.GetInstance().GetLatestDate(); if(null!=maxDateRef)maxDate=maxDateRef.Value; Dictionary gainLossCollection = new Dictionary(); DateGenerator dateGenerator = new DateGenerator(); @@ -76,7 +77,8 @@ namespace MarketData.Generator.GainLoss if (null == portfolioTrades || 0 == portfolioTrades.Count) return null; LocalPriceCache.GetInstance().Add(portfolioTrades); DateTime minTradeDate = portfolioTrades.GetMinTradeDate(); - DateTime maxDate = PricingDA.GetLatestDate(); +// DateTime maxDate = PricingDA.GetLatestDate(); + DateTime maxDate=LocalPriceCache.GetInstance().GetLatestDate(); if(null!=maxDateRef)maxDate=maxDateRef.Value; Dictionary gainLossCollection = new Dictionary(); DateGenerator dateGenerator = new DateGenerator(); diff --git a/MarketDataLib/Generator/GainLoss/GainLossGeneratorCum.cs b/MarketDataLib/Generator/GainLoss/GainLossGeneratorCum.cs index 82afbc6..0d3c043 100644 --- a/MarketDataLib/Generator/GainLoss/GainLossGeneratorCum.cs +++ b/MarketDataLib/Generator/GainLoss/GainLossGeneratorCum.cs @@ -24,7 +24,7 @@ namespace MarketData.Generator.GainLoss { if(!ValidatePortfolioTrades(portfolioTrades))return null; DateTime minDate=portfolioTrades.GetMinTradeDate(); - DateTime maxDate=PricingDA.GetLatestDate(); + DateTime maxDate = LocalPriceCache.GetInstance().GetLatestDate(); if(null!=maxDateRef) maxDate=maxDateRef.Value; double prevGainLoss=double.NaN; List historicalDates=dateGenerator.GenerateHistoricalDates(minDate,maxDate); @@ -103,9 +103,8 @@ namespace MarketData.Generator.GainLoss { if(!ValidatePortfolioTrades(portfolioTrades)) return null; DateTime minDate=portfolioTrades.Min(x => x.TradeDate); - DateTime maxDate=PricingDA.GetLatestDate(); + DateTime maxDate = LocalPriceCache.GetInstance().GetLatestDate(); double prevGainLoss=double.NaN; -// LocalPriceCache.GetInstance().RemoveDate(maxDate); List historicalDates=dateGenerator.GenerateHistoricalDates(minDate,maxDate); foreach(DateTime currentDate in historicalDates) @@ -124,11 +123,6 @@ namespace MarketData.Generator.GainLoss foreach(PortfolioTrade openPosition in openPositions) { exposure+=openPosition.Shares*openPosition.Price; - //if(!LocalPriceCache.GetInstance().ContainsPrice(openPosition.Symbol,currentDate)) - //{ - // Prices prices=PricingDA.GetPricesForward(openPosition.Symbol,currentDate,90); - // LocalPriceCache.GetInstance().Add(prices); - //} Price price=LocalPriceCache.GetInstance().GetPrice(openPosition.Symbol,currentDate); if(null==price) {