From b337170c3927b5363d933d9602a9c58a20a1b6ff Mon Sep 17 00:00:00 2001 From: Sean Date: Wed, 11 Jun 2025 19:15:45 -0400 Subject: [PATCH] Implement Tooltips in the model views --- .../ViewModels/CMMomentumViewModel.cs | 50 +- .../ViewModels/CMTrendViewModel.cs | 213 +++++++- .../ViewModels/MomentumViewModel.cs | 27 +- PortfolioManager/Views/CMMomentumView.axaml | 26 +- PortfolioManager/Views/CMTrendView.axaml | 108 +++- PortfolioManager/Views/MomentumView.axaml | 17 +- PortfolioManager/portfolio_manager.log | 465 ++++++++++++++++++ 7 files changed, 864 insertions(+), 42 deletions(-) diff --git a/PortfolioManager/ViewModels/CMMomentumViewModel.cs b/PortfolioManager/ViewModels/CMMomentumViewModel.cs index 0811916..fb74d1b 100644 --- a/PortfolioManager/ViewModels/CMMomentumViewModel.cs +++ b/PortfolioManager/ViewModels/CMMomentumViewModel.cs @@ -487,11 +487,18 @@ namespace PortfolioManager.ViewModels base.OnPropertyChanged("NonTradeableCash"); base.OnPropertyChanged("ModelExpectation"); base.OnPropertyChanged("ExpectationColor"); - base.OnPropertyChanged("ExpectationDescription"); + UpdateTooltipProperties(); }); return true; } + private void UpdateTooltipProperties() + { + base.OnPropertyChanged("ExpectationDescription"); + base.OnPropertyChanged("BetaDescription"); + base.OnPropertyChanged("CompanyDescriptionSelectedPosition"); + } + private void UpdatePositionPrices(bool change = true) { try @@ -578,30 +585,53 @@ namespace PortfolioManager.ViewModels MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); } } - + // ************************************************** T O O L T I P S ************************************************* public String ExpectationDescription { get { - if(null==modelStatistics) return ""; - StringBuilder sb=new StringBuilder(); + if (null == modelStatistics) return ""; + StringBuilder sb = new StringBuilder(); sb.Append("Expectancy is (percentage of winning trades * average gain) / (percentage of losing trades * average loss).").Append("\n"); sb.Append("Total Trades : ").Append(modelStatistics.TotalTrades).Append("\n"); sb.Append("Winning Trades : ").Append(modelStatistics.WinningTrades).Append("\n"); sb.Append("Losing Trades : ").Append(modelStatistics.LosingTrades).Append("\n"); - sb.Append("Winning Trades : ").Append(Utility.FormatNumber(modelStatistics.WinningTradesPercent,2)).Append("%").Append("\n"); - sb.Append("Losing Trades : ").Append(Utility.FormatNumber(modelStatistics.LosingTradesPercent,2)).Append("%").Append("\n"); - sb.Append("Average Winning Trade Gain : ").Append(Utility.FormatNumber(modelStatistics.AverageWinningTradePercentGain,2)).Append("%").Append("\n"); - sb.Append("Average Losing Trade Loss : ").Append(Utility.FormatNumber(modelStatistics.AverageLosingTradePercentLoss,2)).Append("%").Append("\n"); - sb.Append("Expectancy : ").Append(Utility.FormatNumber(modelStatistics.Expectancy,2)).Append("\n"); + sb.Append("Winning Trades : ").Append(Utility.FormatNumber(modelStatistics.WinningTradesPercent, 2)).Append("%").Append("\n"); + sb.Append("Losing Trades : ").Append(Utility.FormatNumber(modelStatistics.LosingTradesPercent, 2)).Append("%").Append("\n"); + sb.Append("Average Winning Trade Gain : ").Append(Utility.FormatNumber(modelStatistics.AverageWinningTradePercentGain, 2)).Append("%").Append("\n"); + sb.Append("Average Losing Trade Loss : ").Append(Utility.FormatNumber(modelStatistics.AverageLosingTradePercentLoss, 2)).Append("%").Append("\n"); + sb.Append("Expectancy : ").Append(Utility.FormatNumber(modelStatistics.Expectancy, 2)).Append("\n"); sb.Append("\n"); sb.Append("Maintain a positive Expectancy and you're a winner."); sb.Append("\n"); sb.Append("The calculations are based on closed positions."); return sb.ToString(); } - } + } + + public String BetaDescription + { + get + { + if (null == selectedPosition || null == selectedPosition.Symbol) return "No row selected."; + return "A beta of less than 1 means that the security is theoretically less volatile than the market. A beta of greater than 1 indicates that the security's price is theoretically more volatile than the market. For example, if a stock's beta is 1.2, it's theoretically 20% more volatile than the market."; + } + } + + public String CompanyDescriptionSelectedPosition + { + get + { + if (null == selectedPosition || null == selectedPosition.Symbol) return "No row selected."; + CompanyProfile companyProfile = CompanyProfileDA.GetCompanyProfile(selectedPosition.Symbol); + if (null == companyProfile || null == companyProfile.Description || "".Equals(companyProfile.Description)) return "No description found."; + StringBuilder sb = new StringBuilder(); + sb.Append(companyProfile.Symbol).Append(" - ").Append(companyProfile.CompanyName).Append("\n"); + sb.Append(companyProfile.Sector).Append("/").Append(companyProfile.Industry).Append("\n").Append(companyProfile.Description); + return sb.ToString(); + } + } } } diff --git a/PortfolioManager/ViewModels/CMTrendViewModel.cs b/PortfolioManager/ViewModels/CMTrendViewModel.cs index 3157148..d3ea8c6 100644 --- a/PortfolioManager/ViewModels/CMTrendViewModel.cs +++ b/PortfolioManager/ViewModels/CMTrendViewModel.cs @@ -505,13 +505,28 @@ namespace PortfolioManager.ViewModels base.OnPropertyChanged("NonTradeableCash"); base.OnPropertyChanged("ModelExpectation"); base.OnPropertyChanged("ExpectationColor"); - base.OnPropertyChanged("ExpectationDescription"); base.OnPropertyChanged("ReloadEnabled"); base.OnPropertyChanged("TradeDate"); + UpdateTooltipProperties(); }); return true; } + private void UpdateTooltipProperties() + { + base.OnPropertyChanged("ExpectationDescription"); + base.OnPropertyChanged("CompanyDescriptionSelectedPosition"); + base.OnPropertyChanged("ToolTipPurchasePrice"); + base.OnPropertyChanged("ToolTipCurrentPrice"); + base.OnPropertyChanged("ToolTipCurrentPriceLow"); + base.OnPropertyChanged("ToolTipInitialStop"); + base.OnPropertyChanged("ToolTipTrailingStop"); + base.OnPropertyChanged("ToolTipR"); + base.OnPropertyChanged("ToolTipTotalRiskExposure"); + base.OnPropertyChanged("ToolTipRMultiple"); + base.OnPropertyChanged("ToolTipEdgeRatio"); + } + private void RunPerformance() { if (null == sessionParams) return; @@ -590,30 +605,208 @@ namespace PortfolioManager.ViewModels MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); } } - + // ************************************************** T O O L T I P S ************************************************* public String ExpectationDescription { get { - if(null==modelStatistics) return ""; - StringBuilder sb=new StringBuilder(); + if (null == modelStatistics) return ""; + StringBuilder sb = new StringBuilder(); sb.Append("Expectancy is (percentage of winning trades * average gain) / (percentage of losing trades * average loss).").Append("\n"); sb.Append("Total Trades : ").Append(modelStatistics.TotalTrades).Append("\n"); sb.Append("Winning Trades : ").Append(modelStatistics.WinningTrades).Append("\n"); sb.Append("Losing Trades : ").Append(modelStatistics.LosingTrades).Append("\n"); - sb.Append("Winning Trades : ").Append(Utility.FormatNumber(modelStatistics.WinningTradesPercent,2)).Append("%").Append("\n"); - sb.Append("Losing Trades : ").Append(Utility.FormatNumber(modelStatistics.LosingTradesPercent,2)).Append("%").Append("\n"); - sb.Append("Average Winning Trade Gain : ").Append(Utility.FormatNumber(modelStatistics.AverageWinningTradePercentGain,2)).Append("%").Append("\n"); - sb.Append("Average Losing Trade Loss : ").Append(Utility.FormatNumber(modelStatistics.AverageLosingTradePercentLoss,2)).Append("%").Append("\n"); - sb.Append("Expectancy : ").Append(Utility.FormatNumber(modelStatistics.Expectancy,2)).Append("\n"); + sb.Append("Winning Trades : ").Append(Utility.FormatNumber(modelStatistics.WinningTradesPercent, 2)).Append("%").Append("\n"); + sb.Append("Losing Trades : ").Append(Utility.FormatNumber(modelStatistics.LosingTradesPercent, 2)).Append("%").Append("\n"); + sb.Append("Average Winning Trade Gain : ").Append(Utility.FormatNumber(modelStatistics.AverageWinningTradePercentGain, 2)).Append("%").Append("\n"); + sb.Append("Average Losing Trade Loss : ").Append(Utility.FormatNumber(modelStatistics.AverageLosingTradePercentLoss, 2)).Append("%").Append("\n"); + sb.Append("Expectancy : ").Append(Utility.FormatNumber(modelStatistics.Expectancy, 2)).Append("\n"); sb.Append("\n"); sb.Append("Maintain a positive Expectancy and you're a winner."); sb.Append("\n"); sb.Append("The calculations are based on closed positions."); return sb.ToString(); } - } + } + + public String CompanyDescriptionSelectedPosition + { + get + { + if (null == selectedPosition || null == selectedPosition.Symbol) return "No row selected."; + CompanyProfile companyProfile = CompanyProfileDA.GetCompanyProfile(selectedPosition.Symbol); + if (null == companyProfile || null == companyProfile.Description || "".Equals(companyProfile.Description)) return "No description found."; + StringBuilder sb = new StringBuilder(); + sb.Append(companyProfile.Symbol).Append(" - ").Append(companyProfile.CompanyName).Append("\n"); + sb.Append(companyProfile.Sector).Append("/").Append(companyProfile.Industry).Append("\n").Append(companyProfile.Description); + return sb.ToString(); + } + } + + public String ToolTipPurchasePrice + { + get + { + if (null == selectedPosition) return "No row selected."; + StringBuilder sb = new StringBuilder(); + sb.Append("[PurchasePrice]=([PurchasePrice])").Append("\n"); + sb.Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)).Append("=").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)); + return sb.ToString(); + } + } + + public String ToolTipCurrentPrice + { + get + { + if (null == selectedPosition) return "No row selected."; + StringBuilder sb = new StringBuilder(); + sb.Append("[Price]=([CurrentPrice])").Append("\n"); + sb.Append(Utility.FormatCurrency(selectedPosition.CurrentPrice)).Append("=").Append(Utility.FormatCurrency(selectedPosition.CurrentPrice)); + return sb.ToString(); + } + } + + public String ToolTipCurrentPriceLow + { + get + { + if (null == selectedPosition) return "No row selected."; + StringBuilder sb = new StringBuilder(); + sb.Append("[Low]=([CurrentLowPrice])").Append("\n"); + sb.Append(Utility.FormatCurrency(selectedPosition.CurrentPriceLow)).Append("=").Append(Utility.FormatCurrency(selectedPosition.CurrentPriceLow)); + return sb.ToString(); + } + } + + public String ToolTipInitialStop + { + get + { + if (null == selectedPosition) return "No row selected."; + StringBuilder sb = new StringBuilder(); + sb.Append("[InitialStop]=([InitialStopLimit])").Append("\n"); + sb.Append(Utility.FormatCurrency(selectedPosition.InitialStopLimit)).Append("=").Append(Utility.FormatCurrency(selectedPosition.InitialStopLimit)); + return sb.ToString(); + } + } + + public String ToolTipTrailingStop + { + get + { + if (null == selectedPosition)return "No row selected."; + StringBuilder sb = new StringBuilder(); + sb.Append("[TrailingStop]=([TrailingStopLimit])").Append("\n"); + sb.Append(Utility.FormatCurrency(selectedPosition.TrailingStopLimit)).Append("=").Append(Utility.FormatCurrency(selectedPosition.TrailingStopLimit)).Append("\n"); + List stopLimits = GetHistoricalStopLimits(); + if (selectedPosition.TrailingStopLimit > selectedPosition.PurchasePrice) + { + sb.Append("Riskless Gain").Append(" = "); + sb.Append(String.Format("(Trailing Stop - Purchase Price) * Shares")); + sb.Append("\n"); + sb.Append(String.Format("{0}", Utility.FormatCurrency((selectedPosition.TrailingStopLimit - selectedPosition.PurchasePrice) * selectedPosition.Shares))); + sb.Append(String.Format("=({0}-{1})*{2}", Utility.FormatCurrency(selectedPosition.TrailingStopLimit), Utility.FormatCurrency(selectedPosition.PurchasePrice), Utility.FormatNumber(selectedPosition.Shares, 3))); + sb.Append("\n"); + } + if (null != stopLimits && 0 != stopLimits.Count) + { + sb.Append("Stop History").Append("\n"); + foreach (MarketData.Generator.Model.StopLimit stopLimit in stopLimits) + { + sb.Append(String.Format("Analysis Date:{0} New Stop:{1} Previous Stop:{2}", Utility.DateTimeToStringMMSDDSYYYY(stopLimit.AnalysisDate), Utility.FormatCurrency(stopLimit.NewStop), Utility.FormatCurrency(stopLimit.PreviousStop))); + sb.Append("\n"); + } + } + return sb.ToString(); + } + } + + public String ToolTipR + { + get + { + if(null==selectedPosition)return "No row selected."; + StringBuilder sb=new StringBuilder(); + sb.Append("Current R/Share. See RMultiple for initial risk assumptions.").Append("\n"); + sb.Append("R/Share=TrailingStop>PurchasePrice?0.00:PurchasePrice-TrailingStop").Append("\n"); + if(selectedPosition.TrailingStopLimit>selectedPosition.PurchasePrice) + { + sb.Append(Utility.FormatCurrency(0)).Append("=").Append(Utility.FormatCurrency(0)); + } + else + { + sb.Append(Utility.FormatCurrency(selectedPosition.TrailingStopLimit>selectedPosition.PurchasePrice?0.00:selectedPosition.PurchasePrice-selectedPosition.TrailingStopLimit)); + sb.Append("=").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)).Append("-").Append(Utility.FormatCurrency(selectedPosition.TrailingStopLimit)); + } + return sb.ToString(); + } + } + + public String ToolTipTotalRiskExposure + { + get + { + if(null==selectedPosition)return "No row selected."; + StringBuilder sb=new StringBuilder(); + sb.Append("Current Risk. See RMultiple for initial risk assumptions.").Append("\n"); + sb.Append("[TotalRiskExposure]=([R/Share]*[Shares])").Append("\n"); + if(null==selectedPosition) return sb.ToString(); + sb.Append(Utility.FormatCurrency(selectedPosition.TotalRiskExposure)).Append("=(").Append(Utility.FormatCurrency(selectedPosition.R)).Append("*").Append(Utility.FormatNumber(selectedPosition.Shares,0)).Append(")"); + return sb.ToString(); + } + } + + public String ToolTipRMultiple + { + get + { + if(null==selectedPosition)return "No row selected."; + StringBuilder sb=new StringBuilder(); + sb.Append("RMultiple is based on original position setup.").Append("\n"); + sb.Append("Original Exposure=").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice*selectedPosition.Shares)).Append("\n"); + sb.Append("Original R/Share=PurchasePrice-InitialStop").Append("\n"); + sb.Append(Utility.FormatCurrency(selectedPosition.PurchasePrice-selectedPosition.InitialStopLimit)).Append("=").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)).Append("-").Append(Utility.FormatCurrency(selectedPosition.InitialStopLimit)).Append("\n"); + sb.Append("Original Risk=Original R/Share*Shares").Append("\n"); + sb.Append(Utility.FormatCurrency((selectedPosition.PurchasePrice-selectedPosition.InitialStopLimit)*selectedPosition.Shares)).Append("=").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice-selectedPosition.InitialStopLimit)).Append("*").Append(selectedPosition.Shares).Append("\n"); + sb.Append("RMultiple=(CurrentPrice-PurchasePrice)/(PurchasePrice-InitialStop)").Append("\n"); + sb.Append(selectedPosition.RMultipleAsString).Append("=").Append("(").Append(Utility.FormatCurrency(selectedPosition.CurrentPrice)).Append("-").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)).Append(")"); + sb.Append("/").Append("(").Append(Utility.FormatCurrency(selectedPosition.PurchasePrice)).Append("-").Append(Utility.FormatCurrency(selectedPosition.InitialStopLimit)).Append(")"); + return sb.ToString(); + } + } + + public String ToolTipEdgeRatio + { + get + { + if(null==selectedPosition)return "No row selected."; + StringBuilder sb=new StringBuilder(); + sb.Append("[EdgeRatio]=AVG(SUM(MFE/ATR(14)))/AVG(SUM(MAE/ATR(14)))").Append("\n"); + sb.Append("MFE=Maximum Favorable Excursion").Append("\n"); + sb.Append("MAE=Maximum Adverse Excursion").Append("\n"); + sb.Append("ATR=Average True Range. 14 days").Append("\n"); + if(selectedPosition.EdgeRatio<1.00) + { + sb.Append(String.Format("You can expect a further {0} units more of adverse volatility.",Utility.FormatNumber(1.00-selectedPosition.EdgeRatio,2))); + } + else + { + sb.Append(String.Format("You can expect a further {0} units more of favorable volatility.",Utility.FormatNumber(selectedPosition.EdgeRatio-1.00,2))); + } + return sb.ToString(); + } + } + +// This getter returns MMTrend specific stop limits to show in the tooltips + public MarketData.Generator.Model.StopLimits GetHistoricalStopLimits() + { + if (null == sessionParams || null == selectedPosition) return null; + MarketData.Generator.Model.StopLimits stopLimits = new MarketData.Generator.Model.StopLimits((from MarketData.Generator.Model.StopLimit stopLimit in sessionParams.StopLimits where stopLimit.Symbol.Equals(selectedPosition.Symbol) select stopLimit).OrderByDescending(x => x.AnalysisDate).ToList()); + return stopLimits; + } + } } \ No newline at end of file diff --git a/PortfolioManager/ViewModels/MomentumViewModel.cs b/PortfolioManager/ViewModels/MomentumViewModel.cs index bfb293d..83ac77f 100644 --- a/PortfolioManager/ViewModels/MomentumViewModel.cs +++ b/PortfolioManager/ViewModels/MomentumViewModel.cs @@ -499,11 +499,16 @@ namespace PortfolioManager.ViewModels base.OnPropertyChanged("ModelExpectation"); base.OnPropertyChanged("ExpectationColor"); base.OnPropertyChanged("ReloadEnabled"); - base.OnPropertyChanged("ExpectationDescription"); }); return true; } + private void UpdateTooltipProperties() + { + base.OnPropertyChanged("ExpectationDescription"); + base.OnPropertyChanged("CompanyDescriptionSelectedPosition"); + } + private void UpdatePositionPrices(bool change = true) { try @@ -591,9 +596,9 @@ namespace PortfolioManager.ViewModels MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); } } - + // ************************************************** T O O L T I P S ************************************************* - + public String ExpectationDescription { get @@ -615,6 +620,20 @@ namespace PortfolioManager.ViewModels sb.Append("The calculations are based on closed positions."); return sb.ToString(); } - } + } + + public String CompanyDescriptionSelectedPosition + { + get + { + if (null == selectedPosition || null == selectedPosition.Symbol) return "No row selected."; + CompanyProfile companyProfile = CompanyProfileDA.GetCompanyProfile(selectedPosition.Symbol); + if (null == companyProfile || null == companyProfile.Description || "".Equals(companyProfile.Description)) return "No description found."; + StringBuilder sb = new StringBuilder(); + sb.Append(companyProfile.Symbol).Append(" - ").Append(companyProfile.CompanyName).Append("\n"); + sb.Append(companyProfile.Sector).Append("/").Append(companyProfile.Industry).Append("\n").Append(companyProfile.Description); + return sb.ToString(); + } + } } } \ No newline at end of file diff --git a/PortfolioManager/Views/CMMomentumView.axaml b/PortfolioManager/Views/CMMomentumView.axaml index 31b0808..1d4b21d 100644 --- a/PortfolioManager/Views/CMMomentumView.axaml +++ b/PortfolioManager/Views/CMMomentumView.axaml @@ -119,7 +119,21 @@ - + + + + + + + + + + 125 + + + + + @@ -203,11 +217,17 @@ - - + + + + + + + 125 + diff --git a/PortfolioManager/Views/CMTrendView.axaml b/PortfolioManager/Views/CMTrendView.axaml index e233772..5f72047 100644 --- a/PortfolioManager/Views/CMTrendView.axaml +++ b/PortfolioManager/Views/CMTrendView.axaml @@ -119,7 +119,21 @@ - + + + + + + + + + + 125 + + + + + @@ -179,23 +193,49 @@ - - - + - + + + + + + + 125 + - + + + + + + + + + + 125 + + + + + - + + + + + + + 125 + @@ -204,7 +244,14 @@ - + + + + + + + 125 + @@ -213,7 +260,14 @@ - + + + + + + + 125 + @@ -222,7 +276,14 @@ - + + + + + + + 125 + @@ -231,7 +292,14 @@ - + + + + + + + 125 + @@ -240,7 +308,14 @@ - + + + + + + + 125 + @@ -249,7 +324,14 @@ - + + + + + + + 125 + diff --git a/PortfolioManager/Views/MomentumView.axaml b/PortfolioManager/Views/MomentumView.axaml index bd0b930..0b553e6 100644 --- a/PortfolioManager/Views/MomentumView.axaml +++ b/PortfolioManager/Views/MomentumView.axaml @@ -120,8 +120,21 @@ - - + + + + + + + + + + 125 + + + + + diff --git a/PortfolioManager/portfolio_manager.log b/PortfolioManager/portfolio_manager.log index 154a939..a01b6a9 100644 --- a/PortfolioManager/portfolio_manager.log +++ b/PortfolioManager/portfolio_manager.log @@ -40742,3 +40742,468 @@ PortfolioManager Error: 0 : Unable to connect to any of the specified MySQL host [Thread=1][TRACE.VERBOSE][6/11/2025 2:42:01 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... [Thread=18][TRACE.VERBOSE][6/11/2025 2:42:01 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. [Thread=1][TRACE.VERBOSE][6/11/2025 2:42:01 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 3:24:39 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 3:24:40 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 372(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 3:24:40 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 96(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 3:24:41 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1799(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 3:24:42 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2091(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 3:24:42 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 56(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 3:24:42 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2709(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 3:24:43 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 26(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 3:24:43 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 55(ms) +[Thread=18][TRACE.VERBOSE][6/11/2025 3:26:43 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:28:45 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=16][TRACE.VERBOSE][6/11/2025 3:29:43 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Symbols: 445. Items in cache: 46,719. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:30:47 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:32:49 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=16][TRACE.VERBOSE][6/11/2025 3:34:46 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Symbols: 445. Items in cache: 46,719. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:34:51 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:36:52 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:38:54 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=16][TRACE.VERBOSE][6/11/2025 3:39:49 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Symbols: 445. Items in cache: 46,719. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:40:56 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:42:58 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=16][TRACE.VERBOSE][6/11/2025 3:44:52 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Symbols: 445. Items in cache: 46,719. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:45:00 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:47:01 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:49:03 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=16][TRACE.VERBOSE][6/11/2025 3:49:55 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Symbols: 445. Items in cache: 46,719. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:51:05 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:53:07 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=16][TRACE.VERBOSE][6/11/2025 3:54:58 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Symbols: 445. Items in cache: 46,719. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:55:09 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:57:10 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=18][TRACE.VERBOSE][6/11/2025 3:59:12 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=28][TRACE.VERBOSE][6/11/2025 3:59:56 PM] [PortfolioManager.ViewModels.GainLossViewModel::HandleSelectedSymbol()]HandleSelectedSymbol:{ALL} +[Thread=28][TRACE.VERBOSE][6/11/2025 3:59:56 PM] [PortfolioManager.ViewModels.GainLossViewModel::HandleSelectedSymbol()][GainLossViewModel::OnGainLossViewModelPropertyChanged]SelectedSymbol '{ALL}' +[Thread=28][TRACE.VERBOSE][6/11/2025 4:00:00 PM] [PortfolioManager.ViewModels.GainLossViewModel::b__41_0()]GeneratingActiveGainLoss +[Thread=28][TRACE.VERBOSE][6/11/2025 4:00:00 PM] [PortfolioManager.ViewModels.GainLossViewModel::b__41_0()]GeneratingTotalGainLoss) +[Thread=28][TRACE.VERBOSE][6/11/2025 4:00:00 PM] [PortfolioManager.ViewModels.GainLossViewModel::b__41_0()]Date:6/11/2025 TotalGainLoss:$92,493.54 +[Thread=28][TRACE.VERBOSE][6/11/2025 4:00:01 PM] [MarketData.MarketDataModel.GainLoss.GainLossSummaryItemCollection::.ctor(portfolioTrades,gainLossGenerator,activeGainLossGenerator,maxDateRef)][GainLossSummaryItemCollection] Done, took 381(ms) +[Thread=16][TRACE.VERBOSE][6/11/2025 4:00:01 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Symbols: 486. Items in cache: 407,787. +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:21 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 0(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:21 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 0(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:22 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 37(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:23 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 37(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:23 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 27(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:25 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 31(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:25 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 28(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:26 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 43(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:26 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 38(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:28 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 33(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:28 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 33(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:28 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 42(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:28 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 31(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:28 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 37(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:30 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 46(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:31 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 68(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:33 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 97(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:33 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 49(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:44 PM] [PortfolioManager.ViewModels.GainLossViewModel::HandleSelectedSymbol()]HandleSelectedSymbol:{ALL} +[Thread=1][TRACE.VERBOSE][6/11/2025 4:00:44 PM] [PortfolioManager.ViewModels.GainLossViewModel::HandleSelectedSymbol()][GainLossViewModel::OnGainLossViewModelPropertyChanged]SelectedSymbol '{ALL}' +[Thread=17][TRACE.VERBOSE][6/11/2025 4:00:46 PM] [PortfolioManager.ViewModels.GainLossViewModel::b__41_0()]GeneratingActiveGainLoss +[Thread=17][TRACE.VERBOSE][6/11/2025 4:00:46 PM] [PortfolioManager.ViewModels.GainLossViewModel::b__41_0()]GeneratingTotalGainLoss) +[Thread=17][TRACE.VERBOSE][6/11/2025 4:00:46 PM] [PortfolioManager.ViewModels.GainLossViewModel::b__41_0()]Date:6/11/2025 TotalGainLoss:$92,492.37 +[Thread=17][TRACE.VERBOSE][6/11/2025 4:00:46 PM] [MarketData.MarketDataModel.GainLoss.GainLossSummaryItemCollection::.ctor(portfolioTrades,gainLossGenerator,activeGainLossGenerator,maxDateRef)][GainLossSummaryItemCollection] Done, took 332(ms) +[Thread=18][TRACE.VERBOSE][6/11/2025 4:01:14 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:22 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 39(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:22 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 27(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:24 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 35(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:24 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 35(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:24 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 42(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:26 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 38(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:26 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 32(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:28 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 42(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:28 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 31(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:31 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 40(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:31 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 31(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:33 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 56(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:33 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 28(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:34 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 50(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:34 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 35(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:35 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 37(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:35 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 29(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:35 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 43(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:38 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 38(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:38 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 29(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:39 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 41(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:39 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 29(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:41 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 38(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:41 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 38(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:54 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 32(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:54 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 42(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:56 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 42(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:56 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 43(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:57 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 33(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:57 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 37(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:57 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 36(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:57 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 33(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:57 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 28(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:57 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 30(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:57 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 33(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:57 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 28(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:58 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 32(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:58 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 33(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:58 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 39(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 4:02:58 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 35(ms) +[Thread=18][TRACE.VERBOSE][6/11/2025 4:03:16 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=16][TRACE.VERBOSE][6/11/2025 4:05:04 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Symbols: 486. Items in cache: 407,787. +[Thread=18][TRACE.VERBOSE][6/11/2025 4:05:18 PM] [MarketData.Cache.GBPriceCache::ThreadProc()]Clearing GBPriceCache price cache. +[Thread=1][TRACE.DEBUG][6/11/2025 4:06:31 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 4:06:31 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 4:06:31 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:407,787 +[Thread=1][TRACE.VERBOSE][6/11/2025 4:06:31 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 4:06:31 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 4:06:32 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 4:06:32 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:17:00 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 6:17:08 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 358(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 6:17:08 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 104(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:17:09 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1845(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:17:10 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2041(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:17:10 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 51(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:17:10 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2549(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:17:10 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 24(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:17:10 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 53(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 6:17:48 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 6:17:48 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 6:17:48 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 6:17:48 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 6:17:48 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 6:17:49 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:17:49 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:21:40 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 6:21:41 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 359(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 6:21:42 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 96(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:21:43 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1695(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:21:43 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 1946(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:21:43 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 53(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:21:43 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2479(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:21:43 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 24(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:21:44 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 57(ms) +[Thread=19][TRACE.VERBOSE][6/11/2025 6:22:12 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 27(ms) +[Thread=19][TRACE.VERBOSE][6/11/2025 6:22:12 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 24(ms) +[Thread=20][TRACE.VERBOSE][6/11/2025 6:22:19 PM] [PortfolioManager.ViewModels.GainLossViewModel::HandleSelectedSymbol()]HandleSelectedSymbol:{ALL} +[Thread=20][TRACE.VERBOSE][6/11/2025 6:22:19 PM] [PortfolioManager.ViewModels.GainLossViewModel::HandleSelectedSymbol()][GainLossViewModel::OnGainLossViewModelPropertyChanged]SelectedSymbol '{ALL}' +[Thread=19][TRACE.VERBOSE][6/11/2025 6:22:22 PM] [PortfolioManager.ViewModels.GainLossViewModel::b__41_0()]GeneratingActiveGainLoss +[Thread=19][TRACE.VERBOSE][6/11/2025 6:22:23 PM] [PortfolioManager.ViewModels.GainLossViewModel::b__41_0()]GeneratingTotalGainLoss) +[Thread=19][TRACE.VERBOSE][6/11/2025 6:22:23 PM] [PortfolioManager.ViewModels.GainLossViewModel::b__41_0()]Date:6/11/2025 TotalGainLoss:$92,499.77 +[Thread=19][TRACE.VERBOSE][6/11/2025 6:22:23 PM] [MarketData.MarketDataModel.GainLoss.GainLossSummaryItemCollection::.ctor(portfolioTrades,gainLossGenerator,activeGainLossGenerator,maxDateRef)][GainLossSummaryItemCollection] Done, took 368(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 6:22:29 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 0(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 6:22:29 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 0(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 6:22:30 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 39(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 6:22:33 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 37(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 6:22:33 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 37(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 6:22:38 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 36(ms) +[Thread=1][TRACE.VERBOSE][6/11/2025 6:22:38 PM] [PortfolioManager.ViewModels.GainLossViewModel::get_Parity()][Parity]Done, total took 29(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 6:23:10 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 6:23:10 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 6:23:11 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 6:23:11 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 6:23:11 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 6:23:11 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:23:11 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:29:56 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 6:29:58 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 737(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 6:29:59 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 177(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:30:00 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 2849(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:30:00 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 3086(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:30:00 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 54(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:30:00 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 3574(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:30:01 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 26(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:30:01 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 57(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 6:30:22 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 6:30:22 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 6:30:23 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 6:30:23 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 6:30:23 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 6:30:24 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:30:24 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:31:47 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 6:31:48 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 343(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 6:31:48 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 91(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:31:49 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1700(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:31:50 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 1909(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:31:50 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 52(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:31:50 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2428(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:31:50 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 29(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:31:50 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 60(ms) +[Binding]An error occurred binding 'Text' to '$parent[CMMomentumView].DataContext.CompanyDescriptionSelectedPosition' at '$parent[CMMomentumView]': 'Ancestor not found.' (TextBlock #30009105) +[Binding]An error occurred binding 'Text' to '$parent[CMMomentumView].DataContext.CompanyDescriptionSelectedPosition' at '$parent[CMMomentumView]': 'Ancestor not found.' (TextBlock #30009105) +[Binding]An error occurred binding 'Text' to '$parent[CMMomentumView].DataContext.CompanyDescriptionSelectedPosition' at '$parent[CMMomentumView]': 'Ancestor not found.' (TextBlock #30009105) +[Binding]An error occurred binding 'Text' to '$parent[CMMomentumView].DataContext.CompanyDescriptionSelectedPosition' at '$parent[CMMomentumView]': 'Ancestor not found.' (TextBlock #30009105) +[Thread=1][TRACE.DEBUG][6/11/2025 6:32:19 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 6:32:19 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 6:32:20 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 6:32:20 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 6:32:20 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 6:32:21 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:32:21 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:38:06 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 6:38:08 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 336(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 6:38:08 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 88(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:38:09 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1769(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:38:09 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 1998(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:38:09 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 50(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:38:10 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2490(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:38:10 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 97(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:38:10 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 66(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 6:38:50 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 6:38:50 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 6:38:51 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 6:38:51 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 6:38:51 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 6:38:51 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:38:51 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:41:02 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 6:41:04 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 327(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 6:41:04 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 93(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:41:05 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1805(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:41:05 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2058(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:41:05 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 48(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:41:06 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2570(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:41:06 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 28(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:41:06 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 67(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 6:42:14 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 6:42:14 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 6:42:15 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 6:42:15 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 6:42:15 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 6:42:15 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:42:15 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:50:46 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 6:50:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 337(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 6:50:48 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 97(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:50:49 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1884(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:50:49 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2118(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 6:50:49 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 50(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:50:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2599(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 6:50:50 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 26(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 6:50:50 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 54(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 6:50:57 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 6:50:57 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 6:50:57 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 6:50:57 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 6:50:57 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 6:50:58 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 6:50:58 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:04:23 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for DBX on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 439(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:24 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:25 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for DBX on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:25 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:25 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:04:25 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 108(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1959(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for IEFA on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2242(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for IEFA on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 47(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for IDA on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for DORM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for HURN on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for DRD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:26 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2836(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 17(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for IDA on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for DORM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for HURN on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for DRD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:04:27 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 57(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 7:06:15 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 7:06:15 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 7:06:15 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 7:06:15 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 7:06:15 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 7:06:16 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:06:16 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:00 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 438(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:01 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 106(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:11:02 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:11:02 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1998(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for RNMBY on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2263(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for RNMBY on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 43(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2782(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 18(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:03 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 58(ms) +[Binding]An error occurred binding 'Text' to '$parent[CMMomentumView].DataContext.CompanyDescriptionSelectedPosition' at '$parent[CMMomentumView]': 'Ancestor not found.' (TextBlock #238391) +[Binding]An error occurred binding 'Text' to '$parent[CMMomentumView].DataContext.CompanyDescriptionSelectedPosition' at '$parent[CMMomentumView]': 'Ancestor not found.' (TextBlock #238391) +[Binding]An error occurred binding 'Text' to '$parent[CMMomentumView].DataContext.CompanyDescriptionSelectedPosition' at '$parent[CMMomentumView]': 'Ancestor not found.' (TextBlock #238391) +[Binding]An error occurred binding 'Text' to '$parent[CMMomentumView].DataContext.CompanyDescriptionSelectedPosition' at '$parent[CMMomentumView]': 'Ancestor not found.' (TextBlock #238391) +[Thread=1][TRACE.DEBUG][6/11/2025 7:11:15 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:15 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 7:11:16 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:16 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:16 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 7:11:17 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:17 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:46 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 445(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:11:47 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 100(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:11:48 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:11:48 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1880(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:11:48 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for RNMBY on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:11:48 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2099(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for RNMBY on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 47(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2629(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 21(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:11:49 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 69(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 7:11:58 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:58 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 7:11:58 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:58 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:58 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 7:11:58 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:11:58 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:12:26 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:27 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:27 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:27 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:27 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:27 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:28 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:28 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 466(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:28 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:28 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:28 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:28 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:28 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:28 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:12:28 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 100(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:12:29 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:12:29 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 2133(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:12:29 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for RNMBY on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:12:29 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2401(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for RNMBY on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 47(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2910(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 17(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:12:30 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 62(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 7:12:49 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 7:12:49 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 7:12:50 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 7:12:50 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 7:12:50 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 7:12:51 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:12:51 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:13:31 PM] [PortfolioManager.Program::Main(args)][STARTING] +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:32 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:32 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:32 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:32 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:32 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:32 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:32 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 429(ms) +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:33 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:33 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:33 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:33 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:33 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:33 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/11/2025 +[Thread=7][TRACE.VERBOSE][6/11/2025 7:13:33 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 98(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:13:34 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:13:34 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1967(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:13:34 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for RNMBY on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:13:34 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2205(ms) +[Thread=11][TRACE.VERBOSE][6/11/2025 7:13:34 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for RNMBY on 6/11/2025 +[Thread=11][TRACE.VERBOSE][6/11/2025 7:13:34 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 65(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2807(ms) +[Thread=9][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/11/2025 ***************** +[Thread=9][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 18(ms) +[Thread=10][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/11/2025 +[Thread=10][TRACE.VERBOSE][6/11/2025 7:13:35 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 59(ms) +[Thread=1][TRACE.DEBUG][6/11/2025 7:13:52 PM] [PortfolioManager.App+<>c__DisplayClass1_1::b__1(,)]ClosingHandler +[Thread=1][TRACE.VERBOSE][6/11/2025 7:13:52 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=16][TRACE.VERBOSE][6/11/2025 7:13:53 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0 +[Thread=1][TRACE.VERBOSE][6/11/2025 7:13:53 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End +[Thread=1][TRACE.VERBOSE][6/11/2025 7:13:53 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread... +[Thread=18][TRACE.VERBOSE][6/11/2025 7:13:54 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended. +[Thread=1][TRACE.VERBOSE][6/11/2025 7:13:54 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.