Files
TradeBlotter/ViewModels/DividendRiskParityViewModel.cs
2024-02-23 06:58:53 -05:00

751 lines
33 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.Windows.Media;
using System.Windows.Input;
using System.Threading.Tasks;
using MarketData;
using MarketData.Numerical;
using MarketData.Utils;
using MarketData.MarketDataModel;
using MarketData.Generator;
using MarketData.DataAccess;
using TradeBlotter.DataAccess;
using TradeBlotter.Command;
using TradeBlotter.Model;
using Microsoft.Research.DynamicDataDisplay.DataSources;
using MarketData.DividendRiskParity;
using TradeBlotter.UIUtils;
namespace TradeBlotter.ViewModels
{
public class DividendRiskParityViewModel : WorkspaceViewModel
{
private List<String> symbols;
private String selectedSymbol;
private String companyName;
private bool busyIndicator = false;
private PortfolioTrades portfolioTrades;
private DividendRiskParityPositionCollection dividendRiskParityPositionCollection;
private ObservableCollection<DividendRiskParityPosition> allPositions=new ObservableCollection<DividendRiskParityPosition>();
private DividendRiskParityPosition dividendRiskParityPositionProforma = null;
private DividendRiskParityResult dividendRiskParityResult;
private DividendRiskParityResult dividendRiskParityResultProforma;
private double aum = double.NaN;
private Price currentPrice = null;
private RelayCommand proformaAddRiskParityPositionCommand;
private RelayCommand proformaAddRiskParityPositionEnabledCommand;
private RelayCommand resetCommand;
// MENU COMMANDS
private RelayCommand bollingerBandCommand = null;
private RelayCommand dividendHistoryCommand = null;
private RelayCommand stickerValuationCommand = null;
private RelayCommand displayHistoricalCommand = null;
private RelayCommand stochasticsCommand = null;
private RelayCommand relativeStrengthCommand = null;
private RelayCommand macdCommand = null;
private RelayCommand movingAverageCommand;
private RelayCommand priceHistoryCommand = null;
private RelayCommand dcfValuationCommand = null;
private RelayCommand displayAnalystRatingsCommand = null;
private RelayCommand displayHeadlinesCommand = null;
public DividendRiskParityViewModel()
{
base.DisplayName = "Dividend Risk Parity";
symbols=PortfolioDA.GetOpenSymbols();
PortfolioTrades allTrades = PortfolioDA.GetOpenTrades();
aum= allTrades.Sum(x => x.Exposure());
base.OnPropertyChanged("Aum");
selectedSymbol = null;
PropertyChanged += OnDividendRiskParityViewModelPropertyChanged;
base.OnPropertyChanged("SelectedSymbol");
}
// ******************************************************************************************** P E R S I S T E N C E ********************************************************************************************
public override bool CanPersist()
{
return true;
}
public override SaveParameters GetSaveParameters()
{
//return null;
SaveParameters saveParams = new SaveParameters();
if (null == selectedSymbol) return null;
saveParams.Add(new KeyValuePair<String, String>("Type", GetType().Namespace + "." + GetType().Name));
saveParams.Add(new KeyValuePair<String, String>("SelectedSymbol", selectedSymbol));
saveParams.Add(new KeyValuePair<String, String>("Aum", aum.ToString()));
if(null!=currentPrice)
{
saveParams.Add((new KeyValuePair<String, String>("CurrentPrice", currentPrice.Close.ToString())));
saveParams.Add((new KeyValuePair<String, String>("PricingDate", Utility.DateTimeToStringMMHDDHYYYY(currentPrice.Date))));
}
if (null != dividendRiskParityPositionProforma) saveParams.Add(new KeyValuePair<String, String>("DividendRiskParityPositionProforma", dividendRiskParityPositionProforma.ToString()));
return saveParams;
}
public override void SetSaveParameters(SaveParameters saveParameters)
{
try
{
dividendRiskParityResult = null;
dividendRiskParityResultProforma = null;
dividendRiskParityPositionProforma = null;
selectedSymbol = (from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("SelectedSymbol") select item).FirstOrDefault().Value;
aum = double.NaN;
String strAum=(from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("Aum") select item).FirstOrDefault().Value;
if(null!=strAum)aum=double.Parse(strAum);
else
{
PortfolioTrades allTrades = PortfolioDA.GetOpenTrades();
aum= allTrades.Sum(x => x.Exposure());
}
String strCurrentPrice = (from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("CurrentPrice") select item).FirstOrDefault().Value;
String strPricingDate= (from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("PricingDate") select item).FirstOrDefault().Value;
if (null != strCurrentPrice && null != strPricingDate)
{
currentPrice = new Price();
currentPrice.Close = double.Parse(strCurrentPrice);
currentPrice.Date = DateTime.Parse(strPricingDate);
}
String strDividendRiskParityPositionProforma = (from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("DividendRiskParityPositionProforma") select item).FirstOrDefault().Value;
if (null != strDividendRiskParityPositionProforma && !"".Equals(strDividendRiskParityPositionProforma))
{
dividendRiskParityPositionProforma = DividendRiskParityPosition.FromString(strDividendRiskParityPositionProforma);
}
Referer = saveParameters.Referer;
companyName = PricingDA.GetNameForSymbol(selectedSymbol);
portfolioTrades = PortfolioDA.GetOpenTradesSymbol(selectedSymbol);
dividendRiskParityPositionCollection = new DividendRiskParityPositionCollection(portfolioTrades);
if(null==currentPrice)currentPrice = PricingDA.GetPrice(portfolioTrades.Take(1).FirstOrDefault().Symbol);
dividendRiskParityResult = DividendRiskParityGenerator.GenerateDividendRiskParity(currentPrice, aum, dividendRiskParityPositionCollection);
foreach (DividendRiskParityPosition dividendRiskParityPosition in dividendRiskParityPositionCollection) allPositions.Add(dividendRiskParityPosition);
if (null != dividendRiskParityPositionProforma)
{
dividendRiskParityPositionProforma.PurchasePrice = currentPrice.Close; // must be taken from the stored pricing data
dividendRiskParityPositionProforma.TradeDate = currentPrice.Date;
dividendRiskParityPositionCollection.Add(dividendRiskParityPositionProforma);
dividendRiskParityResultProforma = DividendRiskParityGenerator.GenerateDividendRiskParity(currentPrice, aum, dividendRiskParityPositionCollection);
allPositions = new ObservableCollection<DividendRiskParityPosition>();
foreach (DividendRiskParityPosition dividendRiskParityPosition in dividendRiskParityPositionCollection) allPositions.Add(dividendRiskParityPosition);
}
base.OnPropertyChanged("AllPositions");
base.OnPropertyChanged("Title");
base.OnPropertyChanged("Aum");
base.OnPropertyChanged("ProformaAddRiskParityPositionEnabled");
UpdateDividendRiskParityResultProforma();
UpdateDividendRiskParityResult();
}
catch (Exception exception)
{
MDTrace.WriteLine(String.Format("Exception:{0}",exception.ToString()));
}
}
// ******************************************************************************************************************************************************
public bool BusyIndicator
{
get { return busyIndicator; }
set
{
busyIndicator = value;
base.OnPropertyChanged("BusyIndicator");
}
}
public ObservableCollection<DividendRiskParityPosition> AllPositions
{
get
{
return allPositions;
}
set
{
allPositions = value;
base.OnPropertyChanged("AllPositions");
}
}
private void OnDividendRiskParityViewModelPropertyChanged(object sender, PropertyChangedEventArgs eventArgs)
{
if (eventArgs.PropertyName.Equals("SelectedSymbol"))
{
base.DisplayName = "Dividend Risk Parity(" + selectedSymbol + ")";
base.OnPropertyChanged("DisplayName");
HandleSelectedSymbol();
}
}
private void HandleSelectedSymbol()
{
BusyIndicator = true;
Task workerTask = Task.Factory.StartNew(() =>
{
if (null != selectedSymbol)
{
companyName = PricingDA.GetNameForSymbol(SelectedSymbol);
dividendRiskParityResult = null;
dividendRiskParityResultProforma = null;
dividendRiskParityPositionProforma = null;
portfolioTrades = PortfolioDA.GetOpenTradesSymbol(selectedSymbol);
dividendRiskParityPositionCollection= new DividendRiskParityPositionCollection(portfolioTrades);
allPositions=new ObservableCollection<DividendRiskParityPosition>();
currentPrice=PricingDA.GetPrice(portfolioTrades.Take(1).FirstOrDefault().Symbol);
dividendRiskParityResult = DividendRiskParityGenerator.GenerateDividendRiskParity(currentPrice, aum, dividendRiskParityPositionCollection);
foreach (DividendRiskParityPosition dividendRiskParityPosition in dividendRiskParityPositionCollection) allPositions.Add(dividendRiskParityPosition);
}
});
workerTask.ContinueWith((continuation) =>
{
BusyIndicator = false;
base.OnPropertyChanged("AllPositions");
base.OnPropertyChanged("Title");
base.OnPropertyChanged("CurrentPrice");
base.OnPropertyChanged("PricingDate");
base.OnPropertyChanged("ProformaAddRiskParityPositionEnabled");
UpdateDividendRiskParityResult();
UpdateDividendRiskParityResultProforma();
});
}
public void OnErrorItemHandler(String symbol, String message)
{
}
public void UpdateDividendRiskParityResult()
{
base.OnPropertyChanged("Parity");
base.OnPropertyChanged("ParityPercent");
base.OnPropertyChanged("CostBasis");
base.OnPropertyChanged("Aum");
base.OnPropertyChanged("AllocationPercent");
base.OnPropertyChanged("AnnualDividend");
base.OnPropertyChanged("DividendYearsToParity");
base.OnPropertyChanged("DaysSinceLastTraded");
base.OnPropertyChanged("CurrentDividendPercent");
base.OnPropertyChanged("AdditionalDividendPerYear");
base.OnPropertyChanged("YieldPercent");
}
public void UpdateDividendRiskParityResultProforma()
{
base.OnPropertyChanged("ParityProforma");
base.OnPropertyChanged("ParityPercentProforma");
base.OnPropertyChanged("CostBasisProforma");
base.OnPropertyChanged("AumProforma");
base.OnPropertyChanged("AllocationPercentProforma");
base.OnPropertyChanged("AnnualDividendProforma");
base.OnPropertyChanged("DividendYearsToParityProforma");
base.OnPropertyChanged("DaysSinceLastTradedProforma");
base.OnPropertyChanged("CurrentDividendPercentProforma");
base.OnPropertyChanged("AdditionalDividendPerYearProforma");
base.OnPropertyChanged("YieldPercentProforma");
}
// *****************************************************************************************************************************************************************
// ****************************************************************************** C O N T E X T M E N U *********************************************************
// *****************************************************************************************************************************************************************
public ObservableCollection<MenuItem> MenuItems
{
get
{
ObservableCollection<MenuItem> collection = new ObservableCollection<MenuItem>();
collection.Add(new MenuItem() { Text = "Display Bollinger Band", MenuItemClickedCommand = DisplayBollingerBand, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display Dividend History", MenuItemClickedCommand = DisplayDividendHistory, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display Sticker Valuation", MenuItemClickedCommand = DisplayStickerValuation, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display Historical", MenuItemClickedCommand = DisplayHistorical, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display Stochastics", MenuItemClickedCommand = DisplayStochastic, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display Relative Strength", MenuItemClickedCommand = DisplayRelativeStrength, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display MACD", MenuItemClickedCommand = DisplayMACD, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display Moving Average", MenuItemClickedCommand = DisplayMovingAverage, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display Price History", MenuItemClickedCommand = DisplayPriceHistory, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display DCF Valuation", MenuItemClickedCommand = DisplayDCFValuation, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display Analyst Ratings", MenuItemClickedCommand = DisplayAnalystRatings, StaysOpenOnClick = false });
collection.Add(new MenuItem() { Text = "Display Headlines", MenuItemClickedCommand = DisplayHeadlines, StaysOpenOnClick = false });
return collection;
}
}
public ICommand DisplayBollingerBand
{
get
{
if (bollingerBandCommand == null)
{
bollingerBandCommand = new RelayCommand(param => this.DisplayBollingerBandCommand(),
param => { return null != selectedSymbol ; });
}
return bollingerBandCommand;
}
}
public ICommand DisplayDividendHistory
{
get
{
if (dividendHistoryCommand == null)
{
dividendHistoryCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.DividendHistoryViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All}");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedSymbol; });
}
return dividendHistoryCommand;
}
}
public ICommand DisplayStickerValuation
{
get
{
if (null == stickerValuationCommand)
{
stickerValuationCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.StickerPriceViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All}");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedSymbol && null != selectedSymbol; });
}
return stickerValuationCommand;
}
}
public ICommand DisplayHistorical
{
get
{
if (displayHistoricalCommand == null)
{
displayHistoricalCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.HistoricalViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All}");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedSymbol && null != selectedSymbol; });
}
return displayHistoricalCommand;
}
}
public ICommand DisplayStochastic
{
get
{
if (stochasticsCommand == null)
{
stochasticsCommand = new RelayCommand(param => this.DisplayStochasticCommand(),
param => { return null != selectedSymbol; });
}
return stochasticsCommand;
}
}
public ICommand DisplayRelativeStrength
{
get
{
if (relativeStrengthCommand == null)
{
relativeStrengthCommand = new RelayCommand(param => this.DisplayRelativeStrengthCommand(),
param => { return null != selectedSymbol; });
}
return relativeStrengthCommand;
}
}
public ICommand DisplayMACD
{
get
{
if (macdCommand == null)
{
macdCommand = new RelayCommand(param => this.DisplayMACDCommand(),
param => { return null != selectedSymbol; });
}
return macdCommand;
}
}
public ICommand DisplayMovingAverage
{
get
{
if (movingAverageCommand == null)
{
movingAverageCommand = new RelayCommand(param => this.DisplayMovingAverageCommand(), param => { return null != selectedSymbol; });
}
return movingAverageCommand;
}
}
public ICommand DisplayPriceHistory
{
get
{
if (priceHistoryCommand == null)
{
priceHistoryCommand = new RelayCommand(param => this.DisplayPriceHistoryCommand(),
param => { return null != selectedSymbol; });
}
return priceHistoryCommand;
}
}
public ICommand DisplayDCFValuation
{
get
{
if (null == dcfValuationCommand)
{
dcfValuationCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.DCFValuationViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All}");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedSymbol; });
}
return dcfValuationCommand;
}
}
public ICommand DisplayAnalystRatings
{
get
{
if (null == displayAnalystRatingsCommand)
{
displayAnalystRatingsCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.AnalystRatingsViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All}");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedSymbol; });
}
return displayAnalystRatingsCommand;
}
}
public ICommand DisplayHeadlines
{
get
{
if (null == displayHeadlinesCommand)
{
displayHeadlinesCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.HeadlinesViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,Valuations");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedSymbol; });
}
return displayHeadlinesCommand;
}
}
// **************************************************************************************************************************************************************************************
// ******************************************************************************** C O M M A N D S *************************************************************************************
// **************************************************************************************************************************************************************************************
public void DisplayBollingerBandCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.BollingerBandViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All},SelectedDayCount,180,SyncTradeToBand,FALSE");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}
public void DisplayStochasticCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.StochasticsViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All},SelectedDayCount,90");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}
public void DisplayRelativeStrengthCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.RSIViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All},SelectedDayCount,60,SelectedRSIDayCount,3");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}
public void DisplayMACDCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.MACDViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All},SelectedDayCount,90");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}
public void DisplayMovingAverageCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.MovingAverageViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All},SelectedDayCount,360");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}
public void DisplayPriceHistoryCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.PricingViewModel,SelectedSymbol," + selectedSymbol + ",SelectedWatchList,{All},SelectedDayCount,90");
saveParams.Referer = this;
WorkspaceInstantiator.Invoke(saveParams);
}
// *****************************************************************************************************************************************************************
// ****************************************************************************** I C O M M A N D ****************************************************************
// *****************************************************************************************************************************************************************
public ICommand ProformaAddRiskParityPositionCommand
{
get
{
if (null == proformaAddRiskParityPositionCommand)
{
proformaAddRiskParityPositionCommand = new RelayCommand(param =>
{
if (null != dividendRiskParityPositionCollection && 0 != dividendRiskParityPositionCollection.Count)
{
String symbol = dividendRiskParityPositionCollection.Take(1).FirstOrDefault().Symbol;
DateTime pricingDate=PricingDA.GetLatestDate();
ProformaAddRiskDividendParityPositionDialogResult proformaAddRiskDividendParityPositionDialogResult=ProformaAddRiskDividendParityPositionDialog.Prompt("Proforma Add Risk Parity Position", symbol, pricingDate, dividendRiskParityPositionCollection);
if (true == proformaAddRiskDividendParityPositionDialogResult.Success)
{
dividendRiskParityPositionProforma = proformaAddRiskDividendParityPositionDialogResult.DividendRiskParityPositionProforma;
dividendRiskParityPositionCollection = proformaAddRiskDividendParityPositionDialogResult.DividendRiskParityPositionCollection;
currentPrice = PricingDA.GetPrice(dividendRiskParityPositionCollection.Take(1).FirstOrDefault().Symbol);
dividendRiskParityResultProforma = DividendRiskParityGenerator.GenerateDividendRiskParity(currentPrice, aum, dividendRiskParityPositionCollection);
allPositions = new ObservableCollection<DividendRiskParityPosition>();
foreach (DividendRiskParityPosition dividendRiskParityPosition in dividendRiskParityPositionCollection) allPositions.Add(dividendRiskParityPosition);
base.OnPropertyChanged("AllPositions");
base.OnPropertyChanged("CurrentPrice");
base.OnPropertyChanged("PricingDate");
base.OnPropertyChanged("ProformaAddRiskParityPositionEnabled");
UpdateDividendRiskParityResultProforma();
}
}
}, param => { return true; });
}
return proformaAddRiskParityPositionCommand;
}
}
public bool ProformaAddRiskParityPositionEnabled
{
get
{
if(null==dividendRiskParityPositionCollection)return false;
int proformaRecords=dividendRiskParityPositionCollection.Where(x=>x.TypeOfPosition.Equals(DividendRiskParityPosition.PositionType.Proforma)).Count();
return proformaRecords>0?false:true;
}
}
public ICommand ResetCommand
{
get
{
if (null == resetCommand)
{
resetCommand = new RelayCommand(param =>
{
dividendRiskParityResult = null;
dividendRiskParityResultProforma = null;
base.OnPropertyChanged("SelectedSymbol");
}, param => { return true; });
}
return resetCommand;
}
}
// ************************************************************************************************************************************************************************
// ************************************************************** D I V I D E N D R I S K P A R I T Y R E S U L T ******************************************************
// ************************************************************************************************************************************************************************
// ************************************************************************************************************************************************************************
public String Parity
{
get
{
return null==dividendRiskParityResult?Constants.CONST_DASHES:Utility.FormatCurrency(dividendRiskParityResult.ParityPrice.Close, 2);
}
}
public String ParityPercent
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatPercent(dividendRiskParityResult.ParityPercent/100.00);
}
}
public String YieldPercent
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatPercent(dividendRiskParityResult.YieldPercent / 100.00);
}
}
public String CostBasis
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatCurrency(dividendRiskParityResult.CostBasis, 2);
}
}
public String Aum
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatCurrency(dividendRiskParityResult.Aum, 2);
}
}
public String AllocationPercent
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatPercent(dividendRiskParityResult.AllocationPercent / 100.00);
}
}
public String AnnualDividend
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatCurrency(dividendRiskParityResult.AnnualDividend, 2);
}
}
public String DividendYearsToParity
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatNumber(dividendRiskParityResult.DividendYearsToParity, 2);
}
}
public String DaysSinceLastTraded
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatNumber(dividendRiskParityResult.DaysSinceLastTraded,0,true);
}
}
public String CurrentDividendPercent
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatPercent(dividendRiskParityResult.CurrentDividendPercent/100.00);
}
}
public String AdditionalDividendPerYear
{
get
{
return null == dividendRiskParityResult ? Constants.CONST_DASHES : Utility.FormatCurrency(dividendRiskParityResult.AdditionalDividendPerYer);
}
}
// ************************************************************************************************************************************************************************
// ********************************************************* D I V I D E N D R I S K P A R I T Y R E S U L T P R O F O R A ******************************************
// ************************************************************************************************************************************************************************
// ************************************************************************************************************************************************************************
public String ParityProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatCurrency(dividendRiskParityResultProforma.ParityPrice.Close, 2);
}
}
public String ParityPercentProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatPercent(dividendRiskParityResultProforma.ParityPercent / 100.00);
}
}
public String YieldPercentProforma
{
get
{
if (null == dividendRiskParityResultProforma) return Constants.CONST_DASHES;
StringBuilder sb = new StringBuilder();
double yieldDifferenceBasisPoints = ((dividendRiskParityResultProforma.YieldPercent - dividendRiskParityResult.YieldPercent)*100.00);
sb.Append(Utility.FormatPercent(dividendRiskParityResultProforma.YieldPercent / 100.00)).Append("(").Append(yieldDifferenceBasisPoints < 0 ? "" : "+").Append(Utility.FormatNumber(yieldDifferenceBasisPoints,2)).Append("bps)");
return sb.ToString();
}
}
public String CostBasisProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatCurrency(dividendRiskParityResultProforma.CostBasis, 2);
}
}
public String AumProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatCurrency(dividendRiskParityResultProforma.Aum, 2);
}
}
public String AllocationPercentProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatPercent(dividendRiskParityResultProforma.AllocationPercent / 100.00);
}
}
public String AnnualDividendProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatCurrency(dividendRiskParityResultProforma.AnnualDividend, 2);
}
}
public String DividendYearsToParityProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatNumber(dividendRiskParityResultProforma.DividendYearsToParity, 2);
}
}
public String DaysSinceLastTradedProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatNumber(dividendRiskParityResultProforma.DaysSinceLastTraded,0,true);
}
}
public String CurrentDividendPercentProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatPercent(dividendRiskParityResultProforma.CurrentDividendPercent / 100.00);
}
}
public String AdditionalDividendPerYearProforma
{
get
{
return null == dividendRiskParityResultProforma ? Constants.CONST_DASHES : Utility.FormatCurrency(dividendRiskParityResultProforma.AdditionalDividendPerYer);
}
}
// ***********************************************************************************************************************************************************************************
public String CurrentPrice
{
get
{
if (null == currentPrice) return Constants.CONST_DASHES;
return Utility.FormatCurrency(currentPrice.Close);
}
}
public String PricingDate
{
get
{
if (null == currentPrice) return Constants.CONST_DASHES;
return Utility.DateTimeToStringMMHDDHYYYY(currentPrice.Date);
}
}
public String TotalAum
{
get { return Utility.FormatCurrency(aum); }
}
public List<String> Symbols
{
get
{
return symbols;
}
}
public override String Title
{
get
{
if (null != companyName && null != selectedSymbol) return "Dividend Risk Parity - (" + selectedSymbol + ") " + companyName;
return "Dividend Risk Parity";
}
}
public String SelectedSymbol
{
get
{
return selectedSymbol;
}
set
{
if (value == selectedSymbol || String.IsNullOrEmpty(value)) return;
selectedSymbol = value;
base.OnPropertyChanged("SelectedSymbol");
}
}
}
}