Implement Tooltips in the model views

This commit is contained in:
2025-06-11 19:15:45 -04:00
parent 7e173bcf23
commit b337170c39
7 changed files with 864 additions and 42 deletions

View File

@@ -487,11 +487,18 @@ namespace PortfolioManager.ViewModels
base.OnPropertyChanged("NonTradeableCash"); base.OnPropertyChanged("NonTradeableCash");
base.OnPropertyChanged("ModelExpectation"); base.OnPropertyChanged("ModelExpectation");
base.OnPropertyChanged("ExpectationColor"); base.OnPropertyChanged("ExpectationColor");
base.OnPropertyChanged("ExpectationDescription"); UpdateTooltipProperties();
}); });
return true; return true;
} }
private void UpdateTooltipProperties()
{
base.OnPropertyChanged("ExpectationDescription");
base.OnPropertyChanged("BetaDescription");
base.OnPropertyChanged("CompanyDescriptionSelectedPosition");
}
private void UpdatePositionPrices(bool change = true) private void UpdatePositionPrices(bool change = true)
{ {
try try
@@ -578,30 +585,53 @@ namespace PortfolioManager.ViewModels
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
} }
} }
// ************************************************** T O O L T I P S ************************************************* // ************************************************** T O O L T I P S *************************************************
public String ExpectationDescription public String ExpectationDescription
{ {
get get
{ {
if(null==modelStatistics) return ""; if (null == modelStatistics) return "";
StringBuilder sb=new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.Append("Expectancy is (percentage of winning trades * average gain) / (percentage of losing trades * average loss).").Append("\n"); 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("Total Trades : ").Append(modelStatistics.TotalTrades).Append("\n");
sb.Append("Winning Trades : ").Append(modelStatistics.WinningTrades).Append("\n"); sb.Append("Winning Trades : ").Append(modelStatistics.WinningTrades).Append("\n");
sb.Append("Losing Trades : ").Append(modelStatistics.LosingTrades).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("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("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 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("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("Expectancy : ").Append(Utility.FormatNumber(modelStatistics.Expectancy, 2)).Append("\n");
sb.Append("\n"); sb.Append("\n");
sb.Append("Maintain a positive Expectancy and you're a winner."); sb.Append("Maintain a positive Expectancy and you're a winner.");
sb.Append("\n"); sb.Append("\n");
sb.Append("The calculations are based on closed positions."); sb.Append("The calculations are based on closed positions.");
return sb.ToString(); 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();
}
}
} }
} }

View File

@@ -505,13 +505,28 @@ namespace PortfolioManager.ViewModels
base.OnPropertyChanged("NonTradeableCash"); base.OnPropertyChanged("NonTradeableCash");
base.OnPropertyChanged("ModelExpectation"); base.OnPropertyChanged("ModelExpectation");
base.OnPropertyChanged("ExpectationColor"); base.OnPropertyChanged("ExpectationColor");
base.OnPropertyChanged("ExpectationDescription");
base.OnPropertyChanged("ReloadEnabled"); base.OnPropertyChanged("ReloadEnabled");
base.OnPropertyChanged("TradeDate"); base.OnPropertyChanged("TradeDate");
UpdateTooltipProperties();
}); });
return true; 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() private void RunPerformance()
{ {
if (null == sessionParams) return; if (null == sessionParams) return;
@@ -590,30 +605,208 @@ namespace PortfolioManager.ViewModels
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
} }
} }
// ************************************************** T O O L T I P S ************************************************* // ************************************************** T O O L T I P S *************************************************
public String ExpectationDescription public String ExpectationDescription
{ {
get get
{ {
if(null==modelStatistics) return ""; if (null == modelStatistics) return "";
StringBuilder sb=new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.Append("Expectancy is (percentage of winning trades * average gain) / (percentage of losing trades * average loss).").Append("\n"); 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("Total Trades : ").Append(modelStatistics.TotalTrades).Append("\n");
sb.Append("Winning Trades : ").Append(modelStatistics.WinningTrades).Append("\n"); sb.Append("Winning Trades : ").Append(modelStatistics.WinningTrades).Append("\n");
sb.Append("Losing Trades : ").Append(modelStatistics.LosingTrades).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("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("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 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("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("Expectancy : ").Append(Utility.FormatNumber(modelStatistics.Expectancy, 2)).Append("\n");
sb.Append("\n"); sb.Append("\n");
sb.Append("Maintain a positive Expectancy and you're a winner."); sb.Append("Maintain a positive Expectancy and you're a winner.");
sb.Append("\n"); sb.Append("\n");
sb.Append("The calculations are based on closed positions."); sb.Append("The calculations are based on closed positions.");
return sb.ToString(); 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<MarketData.Generator.Model.StopLimit> 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;
}
} }
} }

View File

@@ -499,11 +499,16 @@ namespace PortfolioManager.ViewModels
base.OnPropertyChanged("ModelExpectation"); base.OnPropertyChanged("ModelExpectation");
base.OnPropertyChanged("ExpectationColor"); base.OnPropertyChanged("ExpectationColor");
base.OnPropertyChanged("ReloadEnabled"); base.OnPropertyChanged("ReloadEnabled");
base.OnPropertyChanged("ExpectationDescription");
}); });
return true; return true;
} }
private void UpdateTooltipProperties()
{
base.OnPropertyChanged("ExpectationDescription");
base.OnPropertyChanged("CompanyDescriptionSelectedPosition");
}
private void UpdatePositionPrices(bool change = true) private void UpdatePositionPrices(bool change = true)
{ {
try try
@@ -591,9 +596,9 @@ namespace PortfolioManager.ViewModels
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
} }
} }
// ************************************************** T O O L T I P S ************************************************* // ************************************************** T O O L T I P S *************************************************
public String ExpectationDescription public String ExpectationDescription
{ {
get get
@@ -615,6 +620,20 @@ namespace PortfolioManager.ViewModels
sb.Append("The calculations are based on closed positions."); sb.Append("The calculations are based on closed positions.");
return sb.ToString(); 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();
}
}
} }
} }

View File

@@ -119,7 +119,21 @@
</DataGrid.Styles> </DataGrid.Styles>
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Header="Symbol" Binding="{Binding Symbol}"/> <DataGridTemplateColumn Header="Symbol" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Symbol}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMMomentumView].((vm:CMMomentumViewModel)DataContext).CompanyDescriptionSelectedPosition}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Slot" Binding="{Binding SlotAsString}" /> <DataGridTextColumn Header="Slot" Binding="{Binding SlotAsString}" />
@@ -203,11 +217,17 @@
<DataGridTextColumn Header="Updated" Binding="{Binding LastUpdated, StringFormat='{}{0:MM/dd/yyyy HH:mm:ss}'}" /> <DataGridTextColumn Header="Updated" Binding="{Binding LastUpdated, StringFormat='{}{0:MM/dd/yyyy HH:mm:ss}'}" />
<DataGridTemplateColumn Header="Beta" > <DataGridTemplateColumn Header="Beta" >
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Path=Beta,StringFormat='{}{0:N2}'}" /> <TextBlock Text="{Binding Path=Beta,StringFormat='{}{0:N2}'}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMMomentumView].((vm:CMMomentumViewModel)DataContext).BetaDescription}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/> <DataGridTemplateColumn.CellEditingTemplate/>

View File

@@ -119,7 +119,21 @@
</DataGrid.Styles> </DataGrid.Styles>
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Header="Symbol" Binding="{Binding Symbol}"/> <DataGridTemplateColumn Header="Symbol" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Symbol}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).CompanyDescriptionSelectedPosition}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Purchased"> <DataGridTemplateColumn Header="Purchased">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
@@ -179,23 +193,49 @@
<DataGridTextColumn Header="Days" Binding="{Binding DaysHeld}" /> <DataGridTextColumn Header="Days" Binding="{Binding DaysHeld}" />
<DataGridTextColumn Header="Purch.Price" Binding="{Binding PurchasePrice, Converter={StaticResource CurrencyFormat},ConverterParameter=3}" /> <DataGridTemplateColumn Header="Purch.Price" >
<DataGridTemplateColumn Header="CurrentPrice" >
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding CurrentPrice, Converter={StaticResource CurrencyFormat},ConverterParameter=3}" Foreground="{Binding CurrentPriceColor}" /> <TextBlock Text="{Binding PurchasePrice, Converter={StaticResource CurrencyFormat},ConverterParameter=3}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).ToolTipPurchasePrice}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/> <DataGridTemplateColumn.CellEditingTemplate/>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Header="CurrentPrice" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding CurrentPrice, Converter={StaticResource CurrencyFormat},ConverterParameter=3}" Foreground="{Binding CurrentPriceColor}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).ToolTipCurrentPrice}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Price Low" > <DataGridTemplateColumn Header="Price Low" >
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Path=CurrentPriceLowAsString,StringFormat='{}{0:S}'}" Foreground="{Binding CurrentPriceLowAsStringColor}" /> <TextBlock Text="{Binding Path=CurrentPriceLowAsString,StringFormat='{}{0:S}'}" Foreground="{Binding CurrentPriceLowAsStringColor}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).ToolTipCurrentPriceLow}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/> <DataGridTemplateColumn.CellEditingTemplate/>
@@ -204,7 +244,14 @@
<DataGridTemplateColumn Header="Initial Stop" > <DataGridTemplateColumn Header="Initial Stop" >
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding InitialStopLimit, Converter={StaticResource CurrencyFormat},ConverterParameter=2}" Foreground="{Binding InitialStopLimitColor}" /> <TextBlock Text="{Binding InitialStopLimit, Converter={StaticResource CurrencyFormat},ConverterParameter=2}" Foreground="{Binding InitialStopLimitColor}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).ToolTipInitialStop}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/> <DataGridTemplateColumn.CellEditingTemplate/>
@@ -213,7 +260,14 @@
<DataGridTemplateColumn Header="Trailing Stop"> <DataGridTemplateColumn Header="Trailing Stop">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding TrailingStopLimit, Converter={StaticResource CurrencyFormat},ConverterParameter=2}" Foreground="{Binding TrailingStopLimitColor}" /> <TextBlock Text="{Binding TrailingStopLimit, Converter={StaticResource CurrencyFormat},ConverterParameter=2}" Foreground="{Binding TrailingStopLimitColor}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).ToolTipTrailingStop}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/> <DataGridTemplateColumn.CellEditingTemplate/>
@@ -222,7 +276,14 @@
<DataGridTemplateColumn Header="R/Share" > <DataGridTemplateColumn Header="R/Share" >
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding R, Converter={StaticResource CurrencyFormat},ConverterParameter=2}" Foreground="{Binding RColor}" /> <TextBlock Text="{Binding R, Converter={StaticResource CurrencyFormat},ConverterParameter=2}" Foreground="{Binding RColor}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).ToolTipR}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/> <DataGridTemplateColumn.CellEditingTemplate/>
@@ -231,7 +292,14 @@
<DataGridTemplateColumn Header="Risk" > <DataGridTemplateColumn Header="Risk" >
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding TotalRiskExposure, Converter={StaticResource CurrencyFormat},ConverterParameter=2}" Foreground="{Binding TotalRiskExposureColor}" /> <TextBlock Text="{Binding TotalRiskExposure, Converter={StaticResource CurrencyFormat},ConverterParameter=2}" Foreground="{Binding TotalRiskExposureColor}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).ToolTipTotalRiskExposure}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/> <DataGridTemplateColumn.CellEditingTemplate/>
@@ -240,7 +308,14 @@
<DataGridTemplateColumn Header="RMultiple" > <DataGridTemplateColumn Header="RMultiple" >
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding RMultipleAsString,StringFormat='{}{0:S}'}" Foreground="{Binding RMultipleColor}" /> <TextBlock Text="{Binding RMultipleAsString,StringFormat='{}{0:S}'}" Foreground="{Binding RMultipleColor}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).ToolTipRMultiple}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/> <DataGridTemplateColumn.CellEditingTemplate/>
@@ -249,7 +324,14 @@
<DataGridTemplateColumn Header="E-Ratio" > <DataGridTemplateColumn Header="E-Ratio" >
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>
<TextBlock Text="{Binding Path=EdgeRatioAsString,StringFormat='{}{0:S}'}" Foreground="{Binding EdgeRatioAsStringColor}" /> <TextBlock Text="{Binding Path=EdgeRatioAsString,StringFormat='{}{0:S}'}" Foreground="{Binding EdgeRatioAsStringColor}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:CMTrendView].((vm:CMTrendViewModel)DataContext).ToolTipEdgeRatio}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/> <DataGridTemplateColumn.CellEditingTemplate/>

View File

@@ -120,8 +120,21 @@
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Header="Symbol" Binding="{Binding Symbol}"/> <DataGridTemplateColumn Header="Symbol" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Symbol}" >
<ToolTip.Tip>
<Border Margin="2,1,2,1" Background="AntiqueWhite" BorderBrush="Black" BorderThickness="1" CornerRadius="15" Padding="5">
<TextBlock FontWeight="Normal" FontSize="12" Text="{Binding $parent[vw:MomentumView].((vm:MomentumViewModel)DataContext).CompanyDescriptionSelectedPosition}, Mode=OneWay"/>
</Border>
</ToolTip.Tip>
<ToolTip.ShowDelay>125</ToolTip.ShowDelay>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate/>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Slot" Binding="{Binding SlotAsString}" /> <DataGridTextColumn Header="Slot" Binding="{Binding SlotAsString}" />
<DataGridTemplateColumn Header="Purchased"> <DataGridTemplateColumn Header="Purchased">

View File

@@ -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=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=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 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::<HandleSelectedSymbol>b__41_0()]GeneratingActiveGainLoss
[Thread=28][TRACE.VERBOSE][6/11/2025 4:00:00 PM] [PortfolioManager.ViewModels.GainLossViewModel::<HandleSelectedSymbol>b__41_0()]GeneratingTotalGainLoss)
[Thread=28][TRACE.VERBOSE][6/11/2025 4:00:00 PM] [PortfolioManager.ViewModels.GainLossViewModel::<HandleSelectedSymbol>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::<HandleSelectedSymbol>b__41_0()]GeneratingActiveGainLoss
[Thread=17][TRACE.VERBOSE][6/11/2025 4:00:46 PM] [PortfolioManager.ViewModels.GainLossViewModel::<HandleSelectedSymbol>b__41_0()]GeneratingTotalGainLoss)
[Thread=17][TRACE.VERBOSE][6/11/2025 4:00:46 PM] [PortfolioManager.ViewModels.GainLossViewModel::<HandleSelectedSymbol>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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<HandleSelectedSymbol>b__41_0()]GeneratingActiveGainLoss
[Thread=19][TRACE.VERBOSE][6/11/2025 6:22:23 PM] [PortfolioManager.ViewModels.GainLossViewModel::<HandleSelectedSymbol>b__41_0()]GeneratingTotalGainLoss)
[Thread=19][TRACE.VERBOSE][6/11/2025 6:22:23 PM] [PortfolioManager.ViewModels.GainLossViewModel::<HandleSelectedSymbol>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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]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.