Update the app.config to point to Adrastea. Optimize the TradeBlotter ViewModels/BlotterViewModel, TradeEntryViewModel, TradeViewModel.cs
This commit is contained in:
@@ -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"/>
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user