615 lines
24 KiB
C#
615 lines
24 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Collections.Specialized;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
using MarketData.Utils;
|
|
using MarketData.MarketDataModel;
|
|
using MarketData.DataAccess;
|
|
using MarketData.Generator;
|
|
using TradeBlotter.Command;
|
|
using Microsoft.Research.DynamicDataDisplay.DataSources;
|
|
using TradeBlotter.Model;
|
|
using TradeBlotter.UIUtils;
|
|
using TradeBlotter.Cache;
|
|
|
|
namespace TradeBlotter.ViewModels
|
|
{
|
|
public class HistoricalViewModel : WorkspaceViewModel
|
|
{
|
|
private String companyName;
|
|
private List<String> symbols;
|
|
private List<String> watchLists;
|
|
private String selectedWatchList;
|
|
private String selectedSymbol;
|
|
private RelayCommand refreshCommand;
|
|
private TimeSeriesCollection bvpsSeries;
|
|
private TimeSeriesCollection epsSeries;
|
|
private TimeSeriesCollection freeCashflowSeries;
|
|
private TimeSeriesCollection operatingCashflowSeries;
|
|
private TimeSeriesCollection operatingIncomeSeries;
|
|
private TimeSeriesCollection revenueSeries;
|
|
private TimeSeriesCollection roicSeries;
|
|
private TimeSeriesCollection roaSeries;
|
|
private TimeSeriesCollection workingCapitalSeries;
|
|
private TimeSeriesCollection quarterlyRevenueSeries;
|
|
private TimeSeriesCollection inventorySeries;
|
|
private TimeSeriesCollection quarterlyInventorySeries;
|
|
private TimeSeriesCollection goodwillSeries;
|
|
private TimeSeriesCollection quarterlyGoodwillSeries;
|
|
private TimeSeriesCollection netIncomeAvailableToCommonShareholdersSeries;
|
|
private TimeSeriesCollection peSeries;
|
|
private TimeSeriesCollection profitMarginSeries;
|
|
private TimeSeriesCollection combinedSeries;
|
|
private TimeSeriesCollection totalCashSeries;
|
|
private DividendLoadCollection dividendLoadSeries;
|
|
private TimeSeriesCollection debtToEquitySeries;
|
|
private bool busyIndicator = false;
|
|
|
|
public HistoricalViewModel()
|
|
{
|
|
base.DisplayName = "HistoricalView";
|
|
watchLists = WatchListDA.GetWatchLists();
|
|
watchLists.Insert(0, Constants.CONST_ALL);
|
|
selectedWatchList = watchLists.Find(x => x.Equals("Valuations"));
|
|
symbols = WatchListDA.GetWatchList(selectedWatchList);
|
|
PropertyChanged += OnHistoricalViewModelPropertyChanged;
|
|
}
|
|
public override SaveParameters GetSaveParameters()
|
|
{
|
|
return null;
|
|
}
|
|
public override void SetSaveParameters(SaveParameters saveParameters)
|
|
{
|
|
try
|
|
{
|
|
selectedSymbol = (from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("SelectedSymbol") select item).FirstOrDefault().Value;
|
|
selectedWatchList = (from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("SelectedWatchList") select item).FirstOrDefault().Value;
|
|
Referer=saveParameters.Referer;
|
|
base.OnPropertyChanged("SelectedWatchList");
|
|
base.OnPropertyChanged("SelectedSymbol");
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
}
|
|
public override bool CanPersist()
|
|
{
|
|
return false;
|
|
}
|
|
private void OnHistoricalViewModelPropertyChanged(object sender, PropertyChangedEventArgs eventArgs)
|
|
{
|
|
if (eventArgs.PropertyName.Equals("SelectedSymbol"))
|
|
{
|
|
BusyIndicator = true;
|
|
Task workerTask = Task.Factory.StartNew(() =>
|
|
{
|
|
companyName = PricingDA.GetNameForSymbol(selectedSymbol);
|
|
bvpsSeries = HistoricalDA.GetTimeSeries(selectedSymbol, TimeSeriesElement.ElementType.BVPS);
|
|
epsSeries = HistoricalDA.GetTimeSeries(selectedSymbol, TimeSeriesElement.ElementType.EPS);
|
|
freeCashflowSeries = HistoricalDA.GetTimeSeries(selectedSymbol, TimeSeriesElement.ElementType.FreeCashflow);
|
|
operatingCashflowSeries = HistoricalDA.GetTimeSeries(selectedSymbol, TimeSeriesElement.ElementType.OperatingCashflow);
|
|
operatingIncomeSeries = HistoricalDA.GetTimeSeries(selectedSymbol, TimeSeriesElement.ElementType.OperatingIncome);
|
|
revenueSeries = HistoricalDA.GetTimeSeries(selectedSymbol, TimeSeriesElement.ElementType.Revenue);
|
|
roicSeries = HistoricalDA.GetTimeSeries(selectedSymbol, TimeSeriesElement.ElementType.ROIC);
|
|
roaSeries = HistoricalDA.GetTimeSeries(selectedSymbol, TimeSeriesElement.ElementType.ROA);
|
|
workingCapitalSeries = HistoricalDA.GetTimeSeries(selectedSymbol, TimeSeriesElement.ElementType.WorkingCapital);
|
|
netIncomeAvailableToCommonShareholdersSeries = HistoricalDA.GetTimeSeries(selectedSymbol,TimeSeriesElement.ElementType.NetIncomeAvailableToCommonShareholders);
|
|
quarterlyRevenueSeries = IncomeStatementDA.GetRevenue(selectedSymbol, IncomeStatement.PeriodType.Quarterly);
|
|
quarterlyInventorySeries = BalanceSheetDA.GetInventory(selectedSymbol, BalanceSheet.PeriodType.Quarterly);
|
|
inventorySeries = BalanceSheetDA.GetInventory(selectedSymbol, BalanceSheet.PeriodType.Annual);
|
|
quarterlyGoodwillSeries = BalanceSheetDA.GetGoodwill(selectedSymbol, BalanceSheet.PeriodType.Quarterly);
|
|
goodwillSeries = BalanceSheetDA.GetGoodwill(selectedSymbol, BalanceSheet.PeriodType.Annual);
|
|
peSeries = FundamentalDA.GetPERatio(selectedSymbol);
|
|
profitMarginSeries=IncomeStatementDA.GetProfitMargin(selectedSymbol);
|
|
combinedSeries=CreateROICWACCSeries();
|
|
totalCashSeries=FundamentalDA.GetTotalCashMils(selectedSymbol);
|
|
dividendLoadSeries=CompositeDA.GetDividendLoad(selectedSymbol);
|
|
debtToEquitySeries=CompositeDA.GetDebtToEquity(selectedSymbol);
|
|
});
|
|
workerTask.ContinueWith((continuation) =>
|
|
{
|
|
BusyIndicator = false;
|
|
base.OnPropertyChanged("BVPS");
|
|
base.OnPropertyChanged("BVPSTitle");
|
|
base.OnPropertyChanged("CompanyName");
|
|
base.OnPropertyChanged("EPS");
|
|
base.OnPropertyChanged("EPSTitle");
|
|
base.OnPropertyChanged("FreeCashflow");
|
|
base.OnPropertyChanged("FCFTitle");
|
|
base.OnPropertyChanged("OperatingCashflow");
|
|
base.OnPropertyChanged("OCFTitle");
|
|
base.OnPropertyChanged("OperatingIncome");
|
|
base.OnPropertyChanged("OITitle");
|
|
base.OnPropertyChanged("Revenue");
|
|
base.OnPropertyChanged("RevenueTitle");
|
|
base.OnPropertyChanged("QuarterlyRevenue");
|
|
base.OnPropertyChanged("QuarterlyRevenueTitle");
|
|
base.OnPropertyChanged("ROIC");
|
|
base.OnPropertyChanged("ROA");
|
|
base.OnPropertyChanged("ROICWACC");
|
|
base.OnPropertyChanged("NetIncomeAvailableToCommonShareholders");
|
|
base.OnPropertyChanged("PE");
|
|
base.OnPropertyChanged("ProfitMargin");
|
|
base.OnPropertyChanged("TotalCash");
|
|
base.OnPropertyChanged("DividendLoad");
|
|
base.OnPropertyChanged("DebtToEquity");
|
|
|
|
base.OnPropertyChanged("ROICTitle");
|
|
base.OnPropertyChanged("ROICROATitle");
|
|
base.OnPropertyChanged("ROATitle");
|
|
base.OnPropertyChanged("WorkingCapital");
|
|
base.OnPropertyChanged("WorkingCapitalTitle");
|
|
base.OnPropertyChanged("Inventory");
|
|
base.OnPropertyChanged("InventoryTitle");
|
|
base.OnPropertyChanged("QuarterlyInventory");
|
|
base.OnPropertyChanged("QuarterlyInventoryTitle");
|
|
base.OnPropertyChanged("Goodwill");
|
|
base.OnPropertyChanged("GoodwillTitle");
|
|
base.OnPropertyChanged("QuarterlyGoodwill");
|
|
base.OnPropertyChanged("QuarterlyGoodwillTitle");
|
|
base.OnPropertyChanged("NetIncomeAvailableToCommonShareholdersTitle");
|
|
base.OnPropertyChanged("PETitle");
|
|
base.OnPropertyChanged("ProfitMarginTitle");
|
|
base.OnPropertyChanged("TotalCashTitle");
|
|
base.OnPropertyChanged("Title");
|
|
base.OnPropertyChanged("DividendLoadTitle");
|
|
base.OnPropertyChanged("DebtToEquityTitle");
|
|
});
|
|
}
|
|
else if (eventArgs.PropertyName.Equals("SelectedWatchList"))
|
|
{
|
|
// if (selectedWatchList.Equals(Constants.CONST_ALL)) symbols = PricingDA.GetSymbols();
|
|
if (selectedWatchList.Equals(Constants.CONST_ALL)) symbols = SymbolCache.GetInstance().GetSymbols();
|
|
else symbols = WatchListDA.GetWatchList(selectedWatchList);
|
|
base.OnPropertyChanged("Symbols");
|
|
}
|
|
}
|
|
// **********************************************************************************************
|
|
public bool BusyIndicator
|
|
{
|
|
get { return busyIndicator; }
|
|
set
|
|
{
|
|
busyIndicator = value;
|
|
base.OnPropertyChanged("BusyIndicator");
|
|
}
|
|
}
|
|
public String TotalCashTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == totalCashSeries || 0 == totalCashSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(totalCashSeries[totalCashSeries.Count-1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(totalCashSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String ProfitMarginTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == profitMarginSeries || 0 == profitMarginSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(profitMarginSeries[profitMarginSeries.Count-1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(profitMarginSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String PETitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == peSeries || 0 == peSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(peSeries[peSeries.Count-1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(peSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String BVPSTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == bvpsSeries || 0 == bvpsSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(bvpsSeries[bvpsSeries.Count-1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(bvpsSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String EPSTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == epsSeries || 0 == epsSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(epsSeries[epsSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(epsSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String FCFTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == freeCashflowSeries || 0 == freeCashflowSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(freeCashflowSeries[freeCashflowSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(freeCashflowSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String OCFTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == operatingCashflowSeries || 0 == operatingCashflowSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(operatingCashflowSeries[operatingCashflowSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(operatingCashflowSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String OITitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == operatingIncomeSeries || 0 == operatingIncomeSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(operatingIncomeSeries[operatingIncomeSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(operatingIncomeSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String RevenueTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == revenueSeries || 0 == revenueSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(revenueSeries[revenueSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(revenueSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String QuarterlyRevenueTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == quarterlyRevenueSeries || 0 == quarterlyRevenueSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(quarterlyRevenueSeries[quarterlyRevenueSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(quarterlyRevenueSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String InventoryTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == inventorySeries || 0 == inventorySeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(inventorySeries[inventorySeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(inventorySeries[0].AsOf);
|
|
}
|
|
}
|
|
public String QuarterlyInventoryTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == quarterlyInventorySeries || 0 == quarterlyInventorySeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(quarterlyInventorySeries[quarterlyInventorySeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(quarterlyInventorySeries[0].AsOf);
|
|
}
|
|
}
|
|
public String GoodwillTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == goodwillSeries || 0 == goodwillSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(goodwillSeries[goodwillSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(goodwillSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String QuarterlyGoodwillTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == quarterlyGoodwillSeries || 0 == quarterlyGoodwillSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(quarterlyGoodwillSeries[quarterlyGoodwillSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(quarterlyGoodwillSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String ROICTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == roicSeries || 0 == roicSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(roicSeries[roicSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(roicSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String WorkingCapitalTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == workingCapitalSeries || 0 == workingCapitalSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(workingCapitalSeries[workingCapitalSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(workingCapitalSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String ROICROATitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == roicSeries || 0 == roicSeries.Count || null==roaSeries || 0==roaSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(roicSeries[roicSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(roicSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String ROATitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null==roaSeries || 0==roaSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(roicSeries[roaSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(roaSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String NetIncomeAvailableToCommonShareholdersTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == netIncomeAvailableToCommonShareholdersSeries || 0 == netIncomeAvailableToCommonShareholdersSeries.Count) return "";
|
|
return Utility.DateTimeToStringMMHDDHYYYY(netIncomeAvailableToCommonShareholdersSeries[netIncomeAvailableToCommonShareholdersSeries.Count - 1].AsOf) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(netIncomeAvailableToCommonShareholdersSeries[0].AsOf);
|
|
}
|
|
}
|
|
public String DividendLoadTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == dividendLoadSeries || 0 == dividendLoadSeries.Count) return "";
|
|
return dividendLoadSeries[dividendLoadSeries.Count - 1].Year.ToString() + " Thru " + dividendLoadSeries[0].Year.ToString();
|
|
}
|
|
}
|
|
public String DebtToEquityTitle
|
|
{
|
|
get
|
|
{
|
|
if (null == companyName || null == debtToEquitySeries || 0 == debtToEquitySeries.Count) return "";
|
|
return debtToEquitySeries[debtToEquitySeries.Count - 1].AsOf.ToString() + " Thru " + debtToEquitySeries[0].AsOf.ToString();
|
|
}
|
|
}
|
|
//**********************************C O M P O S I T E D A T A S O U R C E****************************************************************************
|
|
public CompositeDataSource TotalCash
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(totalCashSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource ProfitMargin
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(profitMarginSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource PE
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(peSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource BVPS
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(bvpsSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource EPS
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(epsSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource FreeCashflow
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(freeCashflowSeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource OperatingCashflow
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(operatingCashflowSeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource OperatingIncome
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(operatingIncomeSeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource Revenue
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(revenueSeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource QuarterlyRevenue
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(quarterlyRevenueSeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource Inventory
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(inventorySeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource QuarterlyInventory
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(quarterlyInventorySeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource Goodwill
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(goodwillSeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource QuarterlyGoodwill
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(quarterlyGoodwillSeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource ROIC
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(roicSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource ROA
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(roaSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource ROICWACC
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(combinedSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource WorkingCapital
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(workingCapitalSeries, new ValueConverter(MilsConverter));
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource NetIncomeAvailableToCommonShareholders
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(netIncomeAvailableToCommonShareholdersSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource DividendLoad
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = DividendLoadModel.GenerateCompositeDataSource(dividendLoadSeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
public CompositeDataSource DebtToEquity
|
|
{
|
|
get
|
|
{
|
|
CompositeDataSource compositeDataSource = TimeSeriesModel.GenerateCompositeDataSource(debtToEquitySeries);
|
|
return compositeDataSource;
|
|
}
|
|
}
|
|
// **************************************************************************************************
|
|
private TimeSeriesCollection CreateROICWACCSeries()
|
|
{
|
|
TimeSeriesCollection combinedSeriesCollection=new TimeSeriesCollection();
|
|
if(null==roicSeries||0==roicSeries.Count)return combinedSeriesCollection;
|
|
foreach(TimeSeriesElement roicSeriesElement in roicSeries)
|
|
{
|
|
double wacc=DCFGenerator.CalculateWACC(roicSeriesElement.Symbol,roicSeriesElement.AsOf);
|
|
if(double.IsNaN(wacc))continue;
|
|
TimeSeriesElement timeSeriesElement=new TimeSeriesElement();
|
|
timeSeriesElement.Symbol=roicSeriesElement.Symbol;
|
|
timeSeriesElement.AsOf=roicSeriesElement.AsOf;
|
|
timeSeriesElement.Value=roicSeriesElement.Value-(wacc*100.00);
|
|
combinedSeriesCollection.Add(timeSeriesElement);
|
|
}
|
|
return combinedSeriesCollection;
|
|
}
|
|
public double MilsConverter(double value)
|
|
{
|
|
return value / 1000000;
|
|
}
|
|
// **********************************************************************************************
|
|
public String CompanyName
|
|
{
|
|
get { return companyName; }
|
|
}
|
|
public override String Title
|
|
{
|
|
get
|
|
{
|
|
if (null == CompanyName || null == SelectedSymbol) return "";
|
|
return CompanyName + " (" + SelectedSymbol + " )";
|
|
}
|
|
}
|
|
// **********************************************************************************************
|
|
public List<String> Symbols
|
|
{
|
|
get
|
|
{
|
|
return symbols;
|
|
}
|
|
}
|
|
//**************************************************************************************************************
|
|
public String SelectedSymbol
|
|
{
|
|
get { return selectedSymbol; }
|
|
set
|
|
{
|
|
if (value == selectedSymbol || String.IsNullOrEmpty(value)) return;
|
|
selectedSymbol = value;
|
|
base.OnPropertyChanged("SelectedSymbol");
|
|
}
|
|
}
|
|
public List<String> WatchListNames
|
|
{
|
|
get
|
|
{
|
|
return watchLists;
|
|
}
|
|
set { ;}
|
|
}
|
|
public String SelectedWatchList
|
|
{
|
|
get { return selectedWatchList; }
|
|
set { selectedWatchList = value; base.OnPropertyChanged("SelectedWatchList"); }
|
|
}
|
|
//**************************************************************************************************************
|
|
private void Refresh()
|
|
{
|
|
base.OnPropertyChanged("SelectedSymbol");
|
|
}
|
|
private bool CanRefresh
|
|
{
|
|
get { return true; }
|
|
}
|
|
public ICommand RefreshCommand
|
|
{
|
|
get
|
|
{
|
|
if (refreshCommand == null)
|
|
{
|
|
refreshCommand = new RelayCommand(param => this.Refresh(), param => this.CanRefresh);
|
|
// portfolioHoldings.ForEach(portfolioHolding => new Action(delegate() { portfolioHolding.WeightExp = portfolioHolding.Exposure / totalPortfolioExposure; }).Invoke());
|
|
|
|
//if (movingAverageCommand == null)
|
|
//{
|
|
// movingAverageCommand = new RelayCommand(param => this.DisplayMovingAverageCommand(), param => { return null != selectedGainLossSummaryItem && null != selectedGainLossSummaryItem.Symbol; });
|
|
//}
|
|
|
|
|
|
}
|
|
return refreshCommand;
|
|
}
|
|
}
|
|
}
|
|
}
|