Commit Latest

This commit is contained in:
2025-06-18 20:03:31 -04:00
parent 41b1b57598
commit f4b8d13000
9 changed files with 234 additions and 6 deletions

View File

@@ -44,6 +44,7 @@
<PackageReference Include="Eremex.Avalonia.Themes.DeltaDesign" Version="1.1.142" />
<PackageReference Include="LoadingIndicators.Avalonia" Version="11.0.11.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.5" />
<PackageReference Include="ScottPlot.Avalonia" Version="5.0.55" />
</ItemGroup>
<ItemGroup>

View File

@@ -198,4 +198,6 @@ Import the ScottPlot.Avalonia namespace: Add this namespace to your window eleme
Add an AvaPlot control: Add an AvaPlot element to your layout in your Avalonia application, giving it a unique name.
Plot your data: Use the AvaPlot control to display your data and create various plot types, such as line plots, scatter plots, bar charts, and more.
https://scottplot.net/quickstart/avalonia/
https://scottplot.net/quickstart/avalonia/
1) dotnet add package ScottPlot.Avalonia

View File

@@ -97,6 +97,7 @@ namespace PortfolioManager.ViewModels
{
return new List<CommandViewModel>()
{
new CommandViewModel("ScottPlot", new MyRelayCommand(ParamArrayAttribute => this.ViewScottPlot())),
new CommandViewModel("Bollinger Bands", new MyRelayCommand(ParamArrayAttribute => this.ViewBollingerBands())),
new CommandViewModel("Gain/Loss", new MyRelayCommand(ParamArrayAttribute => this.ViewGainLoss())),
new CommandViewModel("Momentum Model", new MyRelayCommand(ParamArrayAttribute => this.ViewMomentum())),
@@ -106,19 +107,33 @@ namespace PortfolioManager.ViewModels
};
}
private void ViewBollingerBands()
private void ViewScottPlot()
{
BollingerBandViewModel workspace = null;
ScottPlotViewModel workspace = null;
if (null == workspace)
{
workspace = new BollingerBandViewModel();
workspace = new ScottPlotViewModel();
workspace.WorkspaceInstantiator = InstantiateWorkspace;
workspace.Referer = GetReferal();
// AddMenuItem(workspace);
this.Workspaces.Add(workspace);
}
this.SetActiveWorkspace(workspace);
}
}
private void ViewBollingerBands()
{
BollingerBandViewModel workspace = null;
if (null == workspace)
{
workspace = new BollingerBandViewModel();
workspace.WorkspaceInstantiator = InstantiateWorkspace;
workspace.Referer = GetReferal();
// AddMenuItem(workspace);
this.Workspaces.Add(workspace);
}
this.SetActiveWorkspace(workspace);
}
private void ViewCMTrend()
{

View File

@@ -0,0 +1,44 @@
using ScottPlot.Avalonia;
namespace PortfolioManager.ViewModels
{
public partial class ScottPlotViewModel : WorkspaceViewModel
{
public ScottPlotViewModel()
{
double[] dataX = { 1, 2, 3, 4, 5 };
double[] dataY = { 1, 4, 9, 16, 25 };
// AvaPlot avaPlot = this.Find<AvaPlot>("AvaPlot");
// ((ScottPlotViewModel)DataContext).Plotter = avaPlot;
if (Plotter != null)
{
Plotter.Plot.Add.Scatter(dataX, dataY);
Plotter.Refresh();
}
}
// ********************************************** P E R S I S T E N C E *************************
public override bool CanPersist()
{
return false;
}
public override SaveParameters GetSaveParameters()
{
return null;
}
public override void SetSaveParameters(SaveParameters saveParameters)
{
}
// **********************************************************************************************
public AvaPlot Plotter { get; set; } = default;
}
}

View File

@@ -13,7 +13,7 @@ namespace PortfolioManager.ViewModels
private RelayCommand closeCommand;
// Events
public event EventHandler RequestClose;
public event EventHandler RequestClose;
private InstantiateWorkspace workspaceInstantiator;
private bool canClose = true;

View File

@@ -39,6 +39,9 @@
<DataTemplate DataType="vm:BollingerBandViewModel">
<vw:BollingerBandView />
</DataTemplate>
<DataTemplate DataType="vm:ScottPlotViewModel">
<vw:ScottPlotView />
</DataTemplate>
</Window.DataTemplates>
<Window.Styles>

View File

@@ -0,0 +1,15 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ScottPlot="clr-namespace:ScottPlot.Avalonia;assembly=ScottPlot.Avalonia"
xmlns:vm="using:PortfolioManager.ViewModels"
xmlns:vw="using:PortfolioManager.Views"
xmlns:md="using:PortfolioManager.Models"
xmlns:local="using:PortfolioManager.UIUtils"
xmlns:li="using:LoadingIndicators.Avalonia"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="vm:ScottPlotViewModel"
x:Class="PortfolioManager.Views.ScottPlotView">
<ScottPlot:AvaPlot Name="AvaPlot"/>
</UserControl>

View File

@@ -0,0 +1,25 @@
using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using PortfolioManager.ViewModels;
using ScottPlot.Avalonia;
namespace PortfolioManager.Views;
public partial class ScottPlotView : UserControl
{
public ScottPlotView()
{
InitializeComponent();
AvaPlot avaPlot = this.Find<AvaPlot>("AvaPlot");
avaPlot.Loaded += OnLoadedEvent(this, null);
}
protected void OnLoadedEvent(object sender, EventArgs args)
{
// if (null == tabControl) return;
// tabControl.SelectedIndex = args.Index;
}
}

View File

@@ -33,3 +33,126 @@
[Thread=1][TRACE.DEBUG][6/15/2025 9:16:44 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/15/2025 9:16:44 PM] [PortfolioManager.Program::Main(args)]There were 62 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/15/2025 9:16:44 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/18/2025 6:59:45 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/18/2025 6:59:45 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/18/2025 6:59:45 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/18/2025 6:59:45 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=9][TRACE.VERBOSE][6/18/2025 6:59:45 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=6][TRACE.VERBOSE][6/18/2025 6:59:45 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=8][TRACE.VERBOSE][6/18/2025 6:59:45 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=17][TRACE.VERBOSE][6/18/2025 6:59:46 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('NRG','Valuations','360')
[Thread=19][TRACE.VERBOSE][6/18/2025 6:59:46 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('CRS','Valuations','90')
[Thread=18][TRACE.VERBOSE][6/18/2025 6:59:46 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('DBX','Valuations','180')
[Thread=17][TRACE.VERBOSE][6/18/2025 6:59:46 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=18][TRACE.VERBOSE][6/18/2025 6:59:46 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'DBX'
[Thread=19][TRACE.VERBOSE][6/18/2025 6:59:46 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'CRS'
[Thread=16][TRACE.VERBOSE][6/18/2025 6:59:46 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 404(ms)
[Thread=16][TRACE.VERBOSE][6/18/2025 6:59:46 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 98(ms)
[Thread=12][TRACE.VERBOSE][6/18/2025 6:59:47 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 1788(ms)
[Thread=15][TRACE.VERBOSE][6/18/2025 6:59:48 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 2063(ms)
[Thread=15][TRACE.VERBOSE][6/18/2025 6:59:48 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 54(ms)
[Thread=10][TRACE.VERBOSE][6/18/2025 6:59:48 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 2618(ms)
[Thread=10][TRACE.VERBOSE][6/18/2025 6:59:48 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 76(ms)
[Thread=12][TRACE.VERBOSE][6/18/2025 6:59:48 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 64(ms)
[Thread=12][TRACE.VERBOSE][6/18/2025 6:59:51 PM] [PortfolioManager.ViewModels.GainLossViewModel::HandleSelectedSymbol()]HandleSelectedSymbol:{ALL}
[Thread=12][TRACE.VERBOSE][6/18/2025 6:59:51 PM] [PortfolioManager.ViewModels.GainLossViewModel::HandleSelectedSymbol()][GainLossViewModel::OnGainLossViewModelPropertyChanged]SelectedSymbol '{ALL}'
[Thread=12][TRACE.VERBOSE][6/18/2025 6:59:55 PM] [PortfolioManager.ViewModels.GainLossViewModel::<HandleSelectedSymbol>b__41_0()]GeneratingActiveGainLoss
[Thread=12][TRACE.VERBOSE][6/18/2025 6:59:56 PM] [PortfolioManager.ViewModels.GainLossViewModel::<HandleSelectedSymbol>b__41_0()]GeneratingTotalGainLoss)
[Thread=12][TRACE.VERBOSE][6/18/2025 6:59:56 PM] [PortfolioManager.ViewModels.GainLossViewModel::<HandleSelectedSymbol>b__41_0()]Date:6/18/2025 TotalGainLoss:$86,946.25
[Thread=12][TRACE.VERBOSE][6/18/2025 6:59:56 PM] [MarketData.MarketDataModel.GainLoss.GainLossSummaryItemCollection::.ctor(portfolioTrades,gainLossGenerator,activeGainLossGenerator,maxDateRef)][GainLossSummaryItemCollection] Done, took 381(ms)
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:08 PM] [PortfolioManager.ViewModels.GainLossViewModel::OnDispose()]Dispose GainLossViewModel
[Thread=1][TRACE.DEBUG][6/18/2025 7:00:08 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/18/2025 7:00:09 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/18/2025 7:00:09 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:09 PM] [PortfolioManager.ViewModels.MomentumViewModel::OnDispose()]Dispose MomentumViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:09 PM] [PortfolioManager.ViewModels.CMMomentumViewModel::OnDispose()]Dispose CMMomentumViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:09 PM] [PortfolioManager.ViewModels.CMTrendViewModel::OnDispose()]Dispose CMTrendViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:09 PM] [PortfolioManager.ViewModels.MGSHMomentumViewModel::OnDispose()]Dispose MGSHMomentumViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:09 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:09 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:09 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:09 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread...
[Thread=28][TRACE.VERBOSE][6/18/2025 7:00:10 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:10 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:10 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread...
[Thread=31][TRACE.VERBOSE][6/18/2025 7:00:11 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:11 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/18/2025 7:00:11 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:11 PM] [PortfolioManager.Program::Main(args)]There were 46 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/18/2025 7:00:11 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:34 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:34 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:34 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:34 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=6][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=9][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=8][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=17][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('NRG','Valuations','360')
[Thread=18][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('DBX','Valuations','180')
[Thread=19][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('CRS','Valuations','90')
[Thread=18][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'DBX'
[Thread=19][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'CRS'
[Thread=17][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for DBX on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:35 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 595(ms)
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:36 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for SXT on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:36 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for RGLD on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:36 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:37 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:37 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for DBX on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:37 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for NRG on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:37 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]No price for OPRA on 6/18/2025
[Thread=16][TRACE.VERBOSE][6/18/2025 7:01:37 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 420(ms)
[Thread=15][TRACE.VERBOSE][6/18/2025 7:01:38 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/18/2025 *****************
[Thread=15][TRACE.VERBOSE][6/18/2025 7:01:38 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 2988(ms)
[Thread=12][TRACE.VERBOSE][6/18/2025 7:01:38 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for IEFA on 6/18/2025
[Thread=12][TRACE.VERBOSE][6/18/2025 7:01:38 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 3266(ms)
[Thread=12][TRACE.VERBOSE][6/18/2025 7:01:38 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]No price for IEFA on 6/18/2025
[Thread=12][TRACE.VERBOSE][6/18/2025 7:01:38 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 38(ms)
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for IDA on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for DORM on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for HURN on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for DRD on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 3953(ms)
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PSO on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for IDA on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for TSCDY on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MD on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for DORM on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for PRIM on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for MO on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for HURN on 6/18/2025
[Thread=15][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]******************* No price for SPOT on 6/18/2025 *****************
[Thread=15][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 12(ms)
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]No price for DRD on 6/18/2025
[Thread=10][TRACE.VERBOSE][6/18/2025 7:01:39 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 71(ms)
[Thread=1][TRACE.DEBUG][6/18/2025 7:01:47 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/18/2025 7:01:49 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/18/2025 7:01:49 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [PortfolioManager.ViewModels.MomentumViewModel::OnDispose()]Dispose MomentumViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [PortfolioManager.ViewModels.CMMomentumViewModel::OnDispose()]Dispose CMMomentumViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [PortfolioManager.ViewModels.CMTrendViewModel::OnDispose()]Dispose CMTrendViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [PortfolioManager.ViewModels.MGSHMomentumViewModel::OnDispose()]Dispose MGSHMomentumViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread...
[Thread=28][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:49 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread...
[Thread=31][TRACE.VERBOSE][6/18/2025 7:01:50 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:50 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/18/2025 7:01:50 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:50 PM] [PortfolioManager.Program::Main(args)]There were 65 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/18/2025 7:01:50 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]