Update the app.config to point to Adrastea. Optimize the TradeBlotter ViewModels/BlotterViewModel, TradeEntryViewModel, TradeViewModel.cs

This commit is contained in:
2025-05-19 18:27:26 -04:00
parent e25aae6f53
commit 6bf94b2b79
5 changed files with 26 additions and 28 deletions

View File

@@ -1,9 +1,9 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<configuration> <configuration>
<appSettings> <appSettings>
<add key="market_data" value="Database=market_data;Datasource=localhost;Username=root;Password=dbas"/> <add key="market_data" value="Database=market_data;Datasource=adrastea;Username=root;Password=dbas"/>
<add key="portfolio_data" value="Database=portfolio_data;Datasource=localhost;Username=root;Password=dbas"/> <add key="portfolio_data" value="Database=portfolio_data;Datasource=adrastea;Username=root;Password=dbas"/>
<add key="user_data" value="Database=user_data;Datasource=localhost;Username=root;Password=dbas"/> <add key="user_data" value="Database=user_data;Datasource=adrastea;Username=root;Password=dbas"/>
<add key="ClientSettingsProvider.ServiceUri" value=""/> <add key="ClientSettingsProvider.ServiceUri" value=""/>
<add key="LaunchTickerView" value="true"/> <add key="LaunchTickerView" value="true"/>
<add key="TickerEarningsAnnouncementMaxDays" value="5"/> <add key="TickerEarningsAnnouncementMaxDays" value="5"/>

View File

@@ -16,10 +16,10 @@ namespace TradeBlotter.DataAccess
private TradeRepository() private TradeRepository()
{ {
Dictionary<String,String> companyNameCache=new Dictionary<String,String>();
trades = new List<BlotterTradeModel>(); trades = new List<BlotterTradeModel>();
PortfolioTrades portfolioTrades = PortfolioDA.GetTrades(); PortfolioTrades portfolioTrades = PortfolioDA.GetTrades();
if (null == portfolioTrades || 0 == portfolioTrades.Count) return; if (null == portfolioTrades || 0 == portfolioTrades.Count) return;
Dictionary<String,CompanyProfile> companyProfiles = CompanyProfileDA.GetCompanyProfiles(portfolioTrades.Select(x => x.Symbol).ToList());
foreach (PortfolioTrade portfolioTrade in portfolioTrades) foreach (PortfolioTrade portfolioTrade in portfolioTrades)
{ {
BlotterTradeModel blotterTrade = BlotterTradeModel.CreateTrade(); BlotterTradeModel blotterTrade = BlotterTradeModel.CreateTrade();
@@ -32,17 +32,7 @@ namespace TradeBlotter.DataAccess
blotterTrade.Commission = portfolioTrade.Commission; blotterTrade.Commission = portfolioTrade.Commission;
blotterTrade.Account = portfolioTrade.Account; blotterTrade.Account = portfolioTrade.Account;
blotterTrade.Status = portfolioTrade.Status; blotterTrade.Status = portfolioTrade.Status;
if(companyNameCache.ContainsKey(portfolioTrade.Symbol))blotterTrade.CompanyName=companyNameCache[portfolioTrade.Symbol]; if(companyProfiles.ContainsKey(portfolioTrade.Symbol))blotterTrade.CompanyName = companyProfiles[portfolioTrade.Symbol].CompanyName;
else
{
String companyName=PricingDA.GetNameForSymbol(portfolioTrade.Symbol);
if(null!=companyName)
{
companyNameCache.Add(portfolioTrade.Symbol,companyName);
blotterTrade.CompanyName=companyNameCache[portfolioTrade.Symbol];
}
}
// blotterTrade.CompanyName = PricingDA.GetNameForSymbol(portfolioTrade.Symbol);
blotterTrade.SellPrice = portfolioTrade.SellPrice; blotterTrade.SellPrice = portfolioTrade.SellPrice;
blotterTrade.SellDate = portfolioTrade.SellDate; blotterTrade.SellDate = portfolioTrade.SellDate;
trades.Add(blotterTrade); trades.Add(blotterTrade);

View File

@@ -19,6 +19,7 @@ using TradeBlotter.Cache;
using System.Windows.Forms; using System.Windows.Forms;
using MarketData.MarketDataModel; using MarketData.MarketDataModel;
using TradeBlotter.Model; using TradeBlotter.Model;
using MarketData.Cache;
namespace TradeBlotter.ViewModels namespace TradeBlotter.ViewModels
{ {
@@ -113,6 +114,7 @@ namespace TradeBlotter.ViewModels
List<BlotterTradeModel> repositoryTrades=tradeRepository.GetTrades(); List<BlotterTradeModel> repositoryTrades=tradeRepository.GetTrades();
repositoryTrades=repositoryTrades.OrderByDescending(x=>x.TradeDate).ThenBy(x=>x.TradeId).ToList(); repositoryTrades=repositoryTrades.OrderByDescending(x=>x.TradeDate).ThenBy(x=>x.TradeId).ToList();
List<TradeViewModel> all = (from trade in repositoryTrades select new TradeViewModel(trade, tradeRepository)).ToList(); List<TradeViewModel> all = (from trade in repositoryTrades select new TradeViewModel(trade, tradeRepository)).ToList();
double totalMarketValue = 0; double totalMarketValue = 0;
foreach (TradeViewModel tradeViewModel in all) foreach (TradeViewModel tradeViewModel in all)
{ {
@@ -266,9 +268,9 @@ namespace TradeBlotter.ViewModels
Dispatcher uiDispatcher = Dispatcher.CurrentDispatcher; // get the UI dispatcher Dispatcher uiDispatcher = Dispatcher.CurrentDispatcher; // get the UI dispatcher
Task workerTask = Task.Factory.StartNew(() => Task workerTask = Task.Factory.StartNew(() =>
{ {
GBPriceCache.GetInstance().Clear();
foreach (TradeViewModel tvm in this.AllTrades) foreach (TradeViewModel tvm in this.AllTrades)
{ {
tvm.UseCache=true; // switch to cache when refreshing
tvm.Invalidate(); tvm.Invalidate();
} }
}); });

View File

@@ -249,10 +249,10 @@ namespace TradeBlotter.ViewModels
{ {
stopLimit=new StopLimit(); stopLimit=new StopLimit();
stopLimit.Symbol=trade.Symbol; stopLimit.Symbol=trade.Symbol;
stopLimit.Active=1;
stopLimit.StopType=StopLimitConstants.STOP_QUOTE; stopLimit.StopType=StopLimitConstants.STOP_QUOTE;
} }
stopLimit.StopPrice=Utility.ParseCurrency(value); stopLimit.StopPrice=Utility.ParseCurrency(value);
stopLimit.Active=1;
} }
base.OnPropertyChanged("StopLimit"); base.OnPropertyChanged("StopLimit");
} }
@@ -358,7 +358,8 @@ namespace TradeBlotter.ViewModels
} }
private void UpdateStopLimit() private void UpdateStopLimit()
{ {
if(null==stopLimit&&PortfolioDA.HasStopLimit(trade.Symbol))PortfolioDA.DeleteStopLimit(trade.Symbol); // if(null==stopLimit && PortfolioDA.HasStopLimit(trade.Symbol))PortfolioDA.DeleteStopLimit(trade.Symbol);
if(null==stopLimit)PortfolioDA.DeleteStopLimit(trade.Symbol);
else if(null!=stopLimit)PortfolioDA.InsertUpdateStopLimit(stopLimit); else if(null!=stopLimit)PortfolioDA.InsertUpdateStopLimit(stopLimit);
} }
public bool CanSave public bool CanSave

View File

@@ -17,6 +17,7 @@ using TradeBlotter.DataAccess;
using TradeBlotter.Command; using TradeBlotter.Command;
using TradeBlotter.UIUtils; using TradeBlotter.UIUtils;
using TradeBlotter.Cache; using TradeBlotter.Cache;
using MarketData.Cache;
namespace TradeBlotter.ViewModels namespace TradeBlotter.ViewModels
{ {
@@ -32,14 +33,13 @@ namespace TradeBlotter.ViewModels
public TradeViewModel(BlotterTradeModel trade, TradeRepository tradeRepository) public TradeViewModel(BlotterTradeModel trade, TradeRepository tradeRepository)
{ {
UseCache=false;
if (null == trade) throw new ArgumentNullException("trade"); if (null == trade) throw new ArgumentNullException("trade");
if (null == tradeRepository) throw new ArgumentNullException("tradeRepository"); if (null == tradeRepository) throw new ArgumentNullException("tradeRepository");
this.trade = trade; this.trade = trade;
this.tradeRepository = tradeRepository; this.tradeRepository = tradeRepository;
PropertyChanged += OnTradeViewModelPropertyChanged; PropertyChanged += OnTradeViewModelPropertyChanged;
} }
public bool UseCache{get;set;}
public override SaveParameters GetSaveParameters() public override SaveParameters GetSaveParameters()
{ {
return null; return null;
@@ -98,7 +98,6 @@ namespace TradeBlotter.ViewModels
} }
public String SellPrice public String SellPrice
{ {
// get { return trade.IsClosed?Utility.FormatCurrency(trade.SellPrice):Constants.CONST_DASHES; }
get { return trade.IsClosed?Utility.FormatPrice(trade.SellPrice):Constants.CONST_DASHES; } get { return trade.IsClosed?Utility.FormatPrice(trade.SellPrice):Constants.CONST_DASHES; }
set { trade.SellPrice = double.Parse(value); base.OnPropertyChanged("SellPrice"); } set { trade.SellPrice = double.Parse(value); base.OnPropertyChanged("SellPrice"); }
} }
@@ -125,16 +124,17 @@ namespace TradeBlotter.ViewModels
{ {
get { return trade.IsOpen; } get { return trade.IsOpen; }
} }
public void Invalidate() public void Invalidate()
{ {
Price price = null; Price price = null;
if(UseCache)price=PriceCache.GetInstance().GetLatestPrice(trade.Symbol); price = GBPriceCache.GetInstance().GetPriceOrLatestAvailable(trade.Symbol,DateTime.Now);
if (null == price) price = PricingDA.GetPrice(trade.Symbol);
if (null == price) return; if (null == price) return;
trade.LatestPrice = price.Close; trade.LatestPrice = price.Close;
trade.PriceDate = price.Date; trade.PriceDate = price.Date;
trade.HasLatestPrice = true; trade.HasLatestPrice = true;
} }
public void Validate() public void Validate()
{ {
base.OnPropertyChanged("GainLoss"); base.OnPropertyChanged("GainLoss");
@@ -148,7 +148,6 @@ namespace TradeBlotter.ViewModels
get get
{ {
return Utility.FormatPrice(trade.LatestPrice); return Utility.FormatPrice(trade.LatestPrice);
// return Utility.FormatCurrency(trade.LatestPrice);
} }
set { trade.LatestPrice = double.Parse(value); base.OnPropertyChanged("CurrentPrice"); } set { trade.LatestPrice = double.Parse(value); base.OnPropertyChanged("CurrentPrice"); }
} }
@@ -248,14 +247,16 @@ namespace TradeBlotter.ViewModels
{ {
get get
{ {
if(!trade.HasLatestPrice) if (trade.IsClosed) return Constants.CONST_DASHES;
if (!trade.HasLatestPrice)
{ {
Invalidate(); Invalidate();
base.OnPropertyChanged("PriceDate"); base.OnPropertyChanged("PriceDate");
base.OnPropertyChanged("CurrentPrice"); base.OnPropertyChanged("CurrentPrice");
} }
if (trade.IsClosed) return Constants.CONST_DASHES; // if (trade.IsClosed) return Constants.CONST_DASHES;
return trade.HasLatestPrice?Utility.FormatCurrency(trade.Shares*trade.LatestPrice):"0.00"; return trade.HasLatestPrice ? Utility.FormatCurrency(trade.Shares * trade.LatestPrice) : "0.00";
// return Utility.FormatCurrency(trade.Shares*trade.LatestPrice);
} }
} }
public String Weight public String Weight
@@ -266,7 +267,11 @@ namespace TradeBlotter.ViewModels
} }
set set
{ {
weight = Utility.ParsePercent(value); if(value.Equals("N/A") || value.Equals(Constants.CONST_DASHES))
{
weight = 0.00;
}
else weight = Utility.ParsePercent(value);
} }
} }
public override string DisplayName public override string DisplayName