Commit Latest

This commit is contained in:
2025-06-19 22:05:10 -04:00
parent a5b2369034
commit 9e6feaf252
4 changed files with 377 additions and 73 deletions

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -21,28 +22,44 @@ using PortfolioManager.DataSeriesViewModels;
using PortfolioManager.Extensions;
using PortfolioManager.Models;
using PortfolioManager.UIUtils;
using ScottPlot;
using SkiaSharp;
namespace PortfolioManager.ViewModels
{
public static class TextMarkerImageGenerator
{
public static IImage GenerateImage(String text)
public static Image GenerateImage(String text)
{
ImageHelper imageHelper = new ImageHelper();
int fontSize = 36;
int width = 640;
int width = 130;
imageHelper.CreateImage(width, fontSize);
imageHelper.Fill(SKColors.White);
SKTextAlign align = SKTextAlign.Center;
SKFont font = new SKFont(SKTypeface.FromFamilyName("Helvetica"), fontSize);
imageHelper.DrawText(text, new SKPoint(width / 2, fontSize - 2), SKColors.Black, align, font);
Avalonia.Media.Imaging.Bitmap avBitmap = new Avalonia.Media.Imaging.Bitmap(imageHelper.ToStream());
return avBitmap;
// avBitmap.Save("c:\\3\\mybitmap.jpg"); }
using MemoryStream memoryStream = new MemoryStream();
imageHelper.ToStream().CopyTo(memoryStream);
return new ScottPlot.Image(memoryStream.ToArray());
}
// public static IImage GenerateImage(String text)
// {
// ImageHelper imageHelper = new ImageHelper();
// int fontSize = 36;
// int width = 130;
// imageHelper.CreateImage(width, fontSize);
// imageHelper.Fill(SKColors.White);
// SKTextAlign align = SKTextAlign.Center;
// SKFont font = new SKFont(SKTypeface.FromFamilyName("Helvetica"), fontSize);
// imageHelper.DrawText(text, new SKPoint(width / 2, fontSize - 2), SKColors.Black, align, font);
// Avalonia.Media.Imaging.Bitmap avBitmap = new Avalonia.Media.Imaging.Bitmap(imageHelper.ToStream());
// return avBitmap;
// // avBitmap.Save("c:\\3\\mybitmap.jpg"); }
// }
public static IImage GenerateImage(int width, int height,SKColor color)
public static IImage GenerateImage(int width, int height, SKColor color)
{
ImageHelper imageHelper = new ImageHelper();
imageHelper.CreateImage(width, height);

View File

@@ -1,10 +1,12 @@
using System;
using Avalonia.Media;
using Eremex.AvaloniaUI.Charts;
using MarketData.DataAccess;
using MarketData.Generator;
using MarketData.MarketDataModel;
using PortfolioManager.DataSeriesViewModels;
using PortfolioManager.Models;
using ScottPlot;
using ScottPlot.Avalonia;
using ScottPlot.Plottables;
using ShimSkiaSharp;
@@ -12,13 +14,60 @@ using SkiaSharp;
namespace PortfolioManager.ViewModels
{
public class BollingerBandCompositeDataSourceGenerater
public class BollingerBandCompositeDataSourceGenerater
{
public BollingerBandCompositeDataSourceGenerater()
{
public BollingerBandCompositeDataSourceGenerater()
{
}
}
public void GenerateCompositeDataSources(AvaPlot plotter, BollingerBands bollingerBands)
public void Render(AvaPlot plotter)
{
plotter.Plot.Axes.AutoScale();
plotter.Refresh();
}
public void SetData(String selectedSymbol, int selectedDayCount, AvaPlot plotter)
{
Prices prices = PricingDA.GetPrices(selectedSymbol, selectedDayCount);
BollingerBands bollingerBands = BollingerBandGenerator.GenerateBollingerBands(prices);
// calculate the break even price on the open trades for this symbol
PortfolioTrades portfolioTrades = PortfolioDA.GetTradesSymbol(selectedSymbol);
PortfolioTrades openTrades = portfolioTrades.GetOpenTrades();
DateTime latestPricingDate = PricingDA.GetLatestDate(selectedSymbol);
Price latestPrice = PricingDA.GetPrice(selectedSymbol, latestPricingDate);
Price zeroPrice = ParityGenerator.GenerateGainLossValue(openTrades, latestPrice);
GenerateCompositeDataSources(plotter, bollingerBands);
GenerateZeroPoint(plotter, zeroPrice);
}
private void GenerateZeroPoint(AvaPlot plotter, Price zeroPrice)
{
ZeroPoint = GainLossModel.Price(zeroPrice);
(DateTime[] dates, double[] values) = ZeroPoint.ToXYData();
Scatter scatter = plotter.Plot.Add.Scatter(dates, values, ScottPlot.Color.FromSKColor(SKColors.Blue));
// Marker marker = plotter.Plot.Add.Marker(dates[0].ToOADate(), values[0] / 1.025);
// marker.MarkerFillColor = ScottPlot.Color.FromSKColor(SKColors.Blue);
// marker.MarkerStyle.Shape = MarkerShape.TriUp;
// marker.MarkerStyle.Size = 15;
IImage image = TextMarkerImageGenerator.GenerateImage("Even $52.14 (+.25%");
Coordinates coordinates = new Coordinates(dates[0].ToOADate(), values[0] / 1.025);
Marker marker = plotter.Plot.Add.ImageMarker(coordinates, image);
Image image = default;
// Marker marker=plotter.Plot.Add.Marker(K.DataAdapter.ItemCount-1,values[0]);
// Marker marker=plotter.Plot.Add.Marker(0,values[0]);
// marker.MarkerFillColor = ScottPlot.Color.FromSKColor(SKColors.Blue);
// marker.MarkerStyle.Shape = MarkerShape.TriUp;
// marker.MarkerStyle.Size = 15;
}
private void GenerateCompositeDataSources(AvaPlot plotter, BollingerBands bollingerBands)
{
K = BollingerBandModel.K(bollingerBands);
KL1 = BollingerBandModel.KL1(bollingerBands);
@@ -36,74 +85,66 @@ namespace PortfolioManager.ViewModels
(DateTime[] dates, double[] values) = K.ToXYData();
scatter = plotter.Plot.Add.ScatterLine(dates, values, ScottPlot.Color.FromSKColor(SKColors.Green));
scatter.LegendText = "K";
scatter.LineWidth = 2;
scatter.LineWidth = 3;
}
{
(DateTime[] dates, double[] values) = KL1.ToXYData();
scatter = plotter.Plot.Add.ScatterLine(dates, values, ScottPlot.Color.FromSKColor(SKColors.Green));
scatter.LegendText = "KL1";
scatter.LineWidth = 1;
scatter.LineWidth = 2;
}
{
(DateTime[] dates, double[] values) = L.ToXYData();
scatter = plotter.Plot.Add.ScatterLine(dates, values, ScottPlot.Color.FromSKColor(SKColors.Green));
scatter.LegendText = "L";
scatter.LineWidth = 2;
scatter.LineWidth = 3;
}
{
(DateTime[] dates, double[] values) = LP1.ToXYData();
scatter = plotter.Plot.Add.ScatterLine(dates, values, ScottPlot.Color.FromSKColor(SKColors.Green));
scatter.LegendText = "LP1";
scatter.LineWidth = 1;
scatter.LineWidth = 2;
}
{
(DateTime[] dates, double[] values) = High.ToXYData();
scatter = plotter.Plot.Add.ScatterLine(dates, values, ScottPlot.Color.FromSKColor(SKColors.Blue));
scatter.LegendText = "High";
scatter.LineWidth = 1;
scatter.LineWidth = 2;
}
{
(DateTime[] dates, double[] values) = Low.ToXYData();
scatter = plotter.Plot.Add.ScatterLine(dates, values, ScottPlot.Color.FromSKColor(SKColors.Red));
scatter.LegendText = "Low";
scatter.LineWidth = 1;
scatter.LineWidth = 2;
}
{
(DateTime[] dates, double[] values) = Close.ToXYData();
scatter = plotter.Plot.Add.ScatterLine(dates, values, ScottPlot.Color.FromSKColor(SKColors.Black));
scatter.LegendText = "Close";
scatter.LineWidth = 1;
scatter.LineWidth = 2;
}
{
(DateTime[] dates, double[] values) = LeastSquares.ToXYData();
scatter = plotter.Plot.Add.ScatterLine(dates, values, ScottPlot.Color.FromSKColor(SKColors.Orange));
scatter.LegendText = "LeastSquares";
scatter.LineWidth = 1;
}
scatter.LineWidth = 2;
}
{
(DateTime[] dates, double[] values) = SMAN.ToXYData();
scatter = plotter.Plot.Add.ScatterLine(dates, values, ScottPlot.Color.FromSKColor(SKColors.Purple));
scatter.LegendText = "SMAN";
scatter.LineWidth = 1;
}
scatter.LineWidth = 2;
}
}
public CompositeDataSource K { get; private set; } = Empty();
public CompositeDataSource KL1 { get; private set; } = Empty();
public CompositeDataSource L { get; private set; } = Empty();
@@ -114,20 +155,17 @@ namespace PortfolioManager.ViewModels
public CompositeDataSource SMAN { get; private set; } = Empty();
public CompositeDataSource Volume { get; private set; } = Empty();
public CompositeDataSource LeastSquares { get; private set; } = Empty();
public CompositeDataSource ZeroPoint { get; private set; } = Empty();
private static CompositeDataSource Empty()
{
return new CompositeDataSource()
{
DataAdapter = new SortedDateTimeDataAdapter()
};
}
return new CompositeDataSource()
{
DataAdapter = new SortedDateTimeDataAdapter()
};
}
}
public partial class ScottPlotViewModel : PlotterWorkspaceViewModel
{
private AvaPlot plotter = default;
@@ -138,37 +176,21 @@ namespace PortfolioManager.ViewModels
public void PlotterLoadedEvent(object sender, PlotterLoadedEventArgs e)
{
String selectedSymbol = "SPY";
int selectedDayCount = 180;
plotter = e.AvaPlot; // we should store this somewhere
Prices prices = PricingDA.GetPrices("SPY", 180);
BollingerBands bollingerBands = BollingerBandGenerator.GenerateBollingerBands(prices);
// Prices prices = PricingDA.GetPrices("SPY", 180);
// BollingerBands bollingerBands = BollingerBandGenerator.GenerateBollingerBands(prices);
BollingerBandCompositeDataSourceGenerater bollingerBandCompositeDataSourceGenerater = new BollingerBandCompositeDataSourceGenerater();
bollingerBandCompositeDataSourceGenerater.GenerateCompositeDataSources(plotter, bollingerBands);
plotter.Plot.Axes.AutoScale();
plotter.Refresh();
bollingerBandCompositeDataSourceGenerater.SetData(selectedSymbol, selectedDayCount, plotter);
//public void SetData(String selectedSymbol, int selectedDayCount, AvaPlot plotter)
// DateTime[] dates = new DateTime[prices.Count];
// double[] closes = new double[prices.Count];
// for (int index = 0; index < prices.Count; index++)
// {
// dates[index] = prices[index].Date;
// closes[index] = prices[index].Close;
// }
// plotter = e.AvaPlot;
// double[] dataX = { 1, 2, 3, 4, 5 };
// double[] dataY = { 1, 4, 9, 16, 25 };
// plotter.Plot.Add.Scatter(dataX, dataY);
// Scatter closeScatter = plotter.Plot.Add.ScatterLine(dates, closes, ScottPlot.Color.FromSKColor(SKColors.Red));
// closeScatter.LegendText = "Close";
// closeScatter.LineWidth = 2;
// bollingerBandCompositeDataSourceGenerater.GenerateCompositeDataSources(plotter, bollingerBands);
bollingerBandCompositeDataSourceGenerater.Render(plotter);
// plotter.Plot.Axes.AutoScale();
// plotter.Refresh();
// plotter.Refresh();
}
// ********************************************** P E R S I S T E N C E *************************
public override bool CanPersist()

View File

@@ -156,3 +156,275 @@
[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]
[Thread=1][TRACE.VERBOSE][6/19/2025 07:15:18 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 07:15:18 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 07:15:18 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 07:15:18 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=6][TRACE.VERBOSE][6/19/2025 07:15:24 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=8][TRACE.VERBOSE][6/19/2025 07:15:24 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=9][TRACE.VERBOSE][6/19/2025 07:15:24 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=16][TRACE.VERBOSE][6/19/2025 07:15:25 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('NRG','Valuations','360')
[Thread=16][TRACE.VERBOSE][6/19/2025 07:15:25 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=18][TRACE.VERBOSE][6/19/2025 07:15:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('DBX','Valuations','180')
[Thread=18][TRACE.VERBOSE][6/19/2025 07:15:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'DBX'
[Thread=19][TRACE.VERBOSE][6/19/2025 07:15:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('CRS','Valuations','90')
[Thread=19][TRACE.VERBOSE][6/19/2025 07:15:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'CRS'
[Thread=15][TRACE.VERBOSE][6/19/2025 07:15:30 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 4976(ms)
[Thread=15][TRACE.VERBOSE][6/19/2025 07:15:30 PM] [MarketData.Generator.MGSHMomentum.MGSHMomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 94(ms)
[Thread=12][TRACE.VERBOSE][6/19/2025 07:15:32 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 7131(ms)
[Thread=12][TRACE.VERBOSE][6/19/2025 07:15:32 PM] [MarketData.Generator.CMTrend.CMTTrendModel::GetModelPerformance(sessionParams)]Done, total took 15(ms)
[Thread=14][TRACE.VERBOSE][6/19/2025 07:15:32 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 7490(ms)
[Thread=14][TRACE.VERBOSE][6/19/2025 07:15:32 PM] [MarketData.Generator.CMMomentum.CMMomentumBacktest::GetModelPerformance(sessionParams)]Done, took 103(ms)
[Thread=10][TRACE.VERBOSE][6/19/2025 07:15:33 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 8318(ms)
[Thread=10][TRACE.VERBOSE][6/19/2025 07:15:33 PM] [MarketData.Generator.Momentum.MomentumBacktest::GetModelPerformance(sessionParams)]Done, total took 136(ms)
[Thread=1][TRACE.VERBOSE][6/19/2025 07:15:50 PM] [PortfolioManager.ViewModels.MomentumViewModel::OnDispose()]Dispose MomentumViewModel
[Thread=1][TRACE.VERBOSE][6/19/2025 07:15:51 PM] [PortfolioManager.ViewModels.CMMomentumViewModel::OnDispose()]Dispose CMMomentumViewModel
[Thread=1][TRACE.VERBOSE][6/19/2025 07:15:52 PM] [PortfolioManager.ViewModels.CMTrendViewModel::OnDispose()]Dispose CMTrendViewModel
[Thread=1][TRACE.VERBOSE][6/19/2025 07:15:54 PM] [PortfolioManager.ViewModels.MGSHMomentumViewModel::OnDispose()]Dispose MGSHMomentumViewModel
[Thread=1][TRACE.DEBUG][6/19/2025 07:15:54 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=22][TRACE.VERBOSE][6/19/2025 07:15:55 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=21][TRACE.VERBOSE][6/19/2025 07:15:55 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'CRS'
[Thread=20][TRACE.VERBOSE][6/19/2025 07:15:55 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedDayCount). Selected symbol 'CRS'
[Thread=19][TRACE.VERBOSE][6/19/2025 07:15:55 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedDayCount). Selected symbol 'CRS'
[Thread=1][TRACE.VERBOSE][6/19/2025 07:16:54 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=16][TRACE.VERBOSE][6/19/2025 07:16:54 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=3][TRACE.VERBOSE][6/19/2025 07:16:54 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=8][TRACE.VERBOSE][6/19/2025 07:16:54 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedDayCount). Selected symbol 'NRG'
[Thread=6][TRACE.VERBOSE][6/19/2025 07:16:54 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedDayCount). Selected symbol 'NRG'
[Thread=1][TRACE.DEBUG][6/19/2025 07:16:57 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 07:16:57 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread...
[Thread=23][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=18][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 07:16:57 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [PortfolioManager.Program::Main(args)]There were 33 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 07:16:57 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:42 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:42 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:42 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:42 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=8][TRACE.VERBOSE][6/19/2025 07:17:43 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=6][TRACE.VERBOSE][6/19/2025 07:17:43 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=1][TRACE.DEBUG][6/19/2025 07:17:43 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=9][TRACE.VERBOSE][6/19/2025 07:17:43 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('NRG','Valuations','360')
[Thread=13][TRACE.VERBOSE][6/19/2025 07:17:43 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('DBX','Valuations','180')
[Thread=9][TRACE.VERBOSE][6/19/2025 07:17:43 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=13][TRACE.VERBOSE][6/19/2025 07:17:43 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'DBX'
[Thread=1][TRACE.DEBUG][6/19/2025 07:17:57 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 07:17:57 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=19][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=20][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 07:17:57 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [PortfolioManager.Program::Main(args)]There were 38 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 07:17:57 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:15 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:15 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:15 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:15 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=8][TRACE.VERBOSE][6/19/2025 09:10:16 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=6][TRACE.VERBOSE][6/19/2025 09:10:16 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=1][TRACE.DEBUG][6/19/2025 09:10:16 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=9][TRACE.VERBOSE][6/19/2025 09:10:16 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('NRG','Valuations','360')
[Thread=10][TRACE.VERBOSE][6/19/2025 09:10:16 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('DBX','Valuations','180')
[Thread=10][TRACE.VERBOSE][6/19/2025 09:10:16 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'DBX'
[Thread=11][TRACE.VERBOSE][6/19/2025 09:10:16 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=1][TRACE.DEBUG][6/19/2025 09:10:32 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:10:32 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=21][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=22][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:10:32 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [PortfolioManager.Program::Main(args)]There were 36 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:10:32 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:12:39 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:12:39 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:12:39 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:12:39 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=8][TRACE.VERBOSE][6/19/2025 09:12:40 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=6][TRACE.VERBOSE][6/19/2025 09:12:40 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=1][TRACE.DEBUG][6/19/2025 09:12:40 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=11][TRACE.VERBOSE][6/19/2025 09:12:40 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('DBX','Valuations','180')
[Thread=9][TRACE.VERBOSE][6/19/2025 09:12:40 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('NRG','Valuations','360')
[Thread=11][TRACE.VERBOSE][6/19/2025 09:12:40 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'DBX'
[Thread=9][TRACE.VERBOSE][6/19/2025 09:12:40 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=1][TRACE.DEBUG][6/19/2025 09:13:00 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:13:00 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=19][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=20][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:13:00 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [PortfolioManager.Program::Main(args)]There were 35 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:00 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:24 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:24 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:24 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:24 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=8][TRACE.VERBOSE][6/19/2025 09:13:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=6][TRACE.VERBOSE][6/19/2025 09:13:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass43_0::<Initialize>b__0()]BollingerBandViewModel::Initialize()
[Thread=1][TRACE.DEBUG][6/19/2025 09:13:26 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=11][TRACE.VERBOSE][6/19/2025 09:13:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('DBX','Valuations','180')
[Thread=9][TRACE.VERBOSE][6/19/2025 09:13:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass84_0::<SetSaveParameters>b__0()]BollingerBandViewModel::SetSaveParameters('NRG','Valuations','360')
[Thread=11][TRACE.VERBOSE][6/19/2025 09:13:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'DBX'
[Thread=9][TRACE.VERBOSE][6/19/2025 09:13:26 PM] [PortfolioManager.ViewModels.BollingerBandViewModel+<>c__DisplayClass86_0::<OnViewModelPropertyChanged>b__0()]OnViewModelPropertyChanged(SelectedSymbol). Selected symbol 'NRG'
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:29 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:31 PM] [PortfolioManager.ViewModels.BollingerBandViewModel::OnDispose()]Dispose BollingerBandViewModel
[Thread=1][TRACE.DEBUG][6/19/2025 09:13:47 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:13:47 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=20][TRACE.VERBOSE][6/19/2025 09:13:47 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:47 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:47 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=21][TRACE.VERBOSE][6/19/2025 09:13:47 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:47 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:47 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:13:47 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:47 PM] [PortfolioManager.Program::Main(args)]There were 27 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:13:47 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:16:52 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:16:52 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:16:52 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:16:52 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=1][TRACE.DEBUG][6/19/2025 09:17:11 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:17:11 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:17:11 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=12][TRACE.VERBOSE][6/19/2025 09:17:11 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:17:11 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=1][TRACE.VERBOSE][6/19/2025 09:17:11 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread...
[Thread=13][TRACE.VERBOSE][6/19/2025 09:17:12 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:17:12 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:17:12 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/19/2025 09:17:12 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:17:12 PM] [PortfolioManager.Program::Main(args)]There were 29 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:17:12 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:42 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:42 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:42 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:42 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=1][TRACE.DEBUG][6/19/2025 09:19:50 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:19:50 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:50 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=13][TRACE.VERBOSE][6/19/2025 09:19:50 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:50 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=14][TRACE.VERBOSE][6/19/2025 09:19:50 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:50 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:50 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:19:50 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/19/2025 09:19:50 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:50 PM] [PortfolioManager.Program::Main(args)]There were 36 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:19:50 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:20:46 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:20:46 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:20:46 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:20:46 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=1][TRACE.DEBUG][6/19/2025 09:21:02 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:21:02 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:21:02 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=12][TRACE.VERBOSE][6/19/2025 09:21:02 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:21:02 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=13][TRACE.VERBOSE][6/19/2025 09:21:02 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:21:02 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:21:03 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:21:03 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/19/2025 09:21:03 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:21:03 PM] [PortfolioManager.Program::Main(args)]There were 36 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:21:03 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:13 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:13 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:13 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:13 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=1][TRACE.DEBUG][6/19/2025 09:26:36 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:26:36 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:36 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'WaitSleepJoin'. Joining main thread...
[Thread=12][TRACE.VERBOSE][6/19/2025 09:26:37 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:37 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:37 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=13][TRACE.VERBOSE][6/19/2025 09:26:37 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:37 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:26:37 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/19/2025 09:26:37 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:37 PM] [PortfolioManager.Program::Main(args)]There were 29 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:26:37 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:01 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:02 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:02 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:02 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=1][TRACE.DEBUG][6/19/2025 09:28:40 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:28:40 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:40 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=15][TRACE.VERBOSE][6/19/2025 09:28:40 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:40 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=16][TRACE.VERBOSE][6/19/2025 09:28:40 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:40 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:40 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:28:40 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/19/2025 09:28:40 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:40 PM] [PortfolioManager.Program::Main(args)]There were 28 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:28:40 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:17 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:17 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:17 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:17 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=1][TRACE.DEBUG][6/19/2025 09:29:37 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:29:37 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:37 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=13][TRACE.VERBOSE][6/19/2025 09:29:37 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:37 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=14][TRACE.VERBOSE][6/19/2025 09:29:37 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:37 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:37 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:29:37 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/19/2025 09:29:37 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:37 PM] [PortfolioManager.Program::Main(args)]There were 29 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:29:37 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:39 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:39 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:39 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:39 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=1][TRACE.DEBUG][6/19/2025 09:30:50 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:30:50 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:50 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=13][TRACE.VERBOSE][6/19/2025 09:30:50 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:50 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=14][TRACE.VERBOSE][6/19/2025 09:30:50 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:50 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:50 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:30:50 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/19/2025 09:30:50 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:51 PM] [PortfolioManager.Program::Main(args)]There were 36 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:30:51 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:08 PM] [PortfolioManager.Program::Main(args)][MAIN:STARTING]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:08 PM] [PortfolioManager.Program::Main(args)]Using portfolio_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:08 PM] [PortfolioManager.Program::Main(args)]Using market_data at Adrastea
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:08 PM] [PortfolioManager.Program::Main(args)]Using user_data at Adrastea
[Thread=1][TRACE.DEBUG][6/19/2025 09:31:19 PM] [PortfolioManager.App+<>c__DisplayClass1_1::<OnFrameworkInitializationCompleted>b__1(<p0>,<p1>)]App: Received ClosingHandler event
[Thread=1][TRACE.DEBUG][6/19/2025 09:31:19 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose]
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:19 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=13][TRACE.VERBOSE][6/19/2025 09:31:19 PM] [MarketData.Cache.LocalPriceCache::ThreadProc()][LocalPriceCache:ThreadProc] Thread ended. Items in cache:0
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:19 PM] [MarketData.Cache.LocalPriceCache::Dispose()][LocalPriceCache:Dispose] End
[Thread=14][TRACE.VERBOSE][6/19/2025 09:31:19 PM] [MarketData.Cache.GBPriceCache::ThreadProc()][GBPriceCache:ThreadProc]Thread ended.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:19 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose]Thread state is 'Running'. Joining main thread...
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:19 PM] [MarketData.Cache.GBPriceCache::Dispose()][GBPriceCache:Dispose] End.
[Thread=1][TRACE.DEBUG][6/19/2025 09:31:19 PM] [PortfolioManager.Cache.ImageCache::.ctor()]Reading assets from C:\Avalonia\PortfolioManager/Assets
[Thread=1][TRACE.DEBUG][6/19/2025 09:31:19 PM] [PortfolioManager.ViewModels.MainWindowViewModel::OnDispose()][MainWindowViewModel:OnDispose] LEAVE
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:19 PM] [PortfolioManager.Program::Main(args)]There were 36 threads still running at application shutdown.
[Thread=1][TRACE.VERBOSE][6/19/2025 09:31:19 PM] [PortfolioManager.Program::Main(args)][MAIN:EXIT]

View File

@@ -1,7 +0,0 @@
Type,PortfolioManager.ViewModels.MomentumViewModel,PathFileName,C:\boneyard\marketdata\Sessions\MG20180131.TXT
Type,PortfolioManager.ViewModels.CMMomentumViewModel,PathFileName,C:\boneyard\marketdata\Sessions\CM20191031.TXT
Type,PortfolioManager.ViewModels.CMTrendViewModel,PathFileName,C:\boneyard\marketdata\Sessions\CMT20200817.TXT
Type,PortfolioManager.ViewModels.MGSHMomentumViewModel,PathFileName,C:\boneyard\marketdata\Sessions\MGSH20250331.TXT
Type,PortfolioManager.ViewModels.BollingerBandViewModel,SelectedSymbol,NRG,SelectedWatchList,Valuations,SelectedDayCount,360,SyncTradeToBand,True,ShowTradeLabels,True,UseLeastSquaresFit,True,ShowInsiderTransactions,True
Type,PortfolioManager.ViewModels.BollingerBandViewModel,SelectedSymbol,DBX,SelectedWatchList,Valuations,SelectedDayCount,180,SyncTradeToBand,False,ShowTradeLabels,True,UseLeastSquaresFit,True,ShowInsiderTransactions,True
Type,PortfolioManager.ViewModels.BollingerBandViewModel,SelectedSymbol,CRS,SelectedWatchList,Valuations,SelectedDayCount,90,SyncTradeToBand,True,ShowTradeLabels,True,UseLeastSquaresFit,True,ShowInsiderTransactions,True