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

397 lines
15 KiB
C#

using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Threading.Tasks;
using System.Threading;
using System.Linq;
using System.Text;
using System.Windows.Input;
using System.Media;
using MarketData;
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;
namespace TradeBlotter.ViewModels
{
public class EarningsAnnouncementViewModel : WorkspaceViewModel
{
private RelayCommand analystRatingsCommand=null;
private RelayCommand stochasticsCommand=null;
private RelayCommand relativeStrengthCommand=null;
private RelayCommand macdCommand=null;
private RelayCommand bollingerBandCommand=null;
private RelayCommand valuationCommand=null;
private RelayCommand priceHistoryCommand=null;
private RelayCommand displayStickerValuationCommand=null;
private RelayCommand displayDCFValuationCommand=null;
private RelayCommand refreshCommand=null;
private RelayCommand dividendHistoryCommand=null;
private RelayCommand displayHistoricalCommand=null;
private RelayCommand displayHeadlinesCommand=null;
private EarningsAnnouncementModel selectedItem;
private bool busyIndicator = false;
private String busyContent = "Loading Earnings Announcements...";
private int daysOut=30;
private ObservableCollection<EarningsAnnouncementModel> allItems;
public EarningsAnnouncementViewModel()
{
base.DisplayName = "Earnings Announcements";
LoadItems();
PropertyChanged += OnEarningsAnnouncementViewModelPropertyChanged;
}
public override SaveParameters GetSaveParameters()
{
SaveParameters saveParams = new SaveParameters();
saveParams.Add(new KeyValuePair<String, String>("Type",GetType().Namespace+"."+GetType().Name));
saveParams.Add(new KeyValuePair<String, String>("DaysOut", daysOut.ToString()));
return saveParams;
}
public override void SetSaveParameters(SaveParameters saveParameters)
{
try
{
daysOut = int.Parse((from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("DaysOut") select item).FirstOrDefault().Value);
Referer=saveParameters.Referer;
base.OnPropertyChanged("DaysOut");
}
catch (Exception)
{
} }
public override bool CanPersist()
{
return true;
}
private void OnEarningsAnnouncementViewModelPropertyChanged(object sender, PropertyChangedEventArgs eventArgs)
{
}
public ObservableCollection<EarningsAnnouncementModel> AllItems
{
get { return allItems; }
}
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 = DisplayStochastics, 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 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 });
collection.Add(new MenuItem() { Text = "Display Valuation", MenuItemClickedCommand = DisplayValuation, StaysOpenOnClick = false });
return collection;
}
}
public bool BusyIndicator
{
get { return busyIndicator; }
set
{
busyIndicator = value;
base.OnPropertyChanged("BusyIndicator");
}
}
public String BusyContent
{
get { return busyContent; }
set
{
busyContent = value;
base.OnPropertyChanged("BusyContent");
}
}
private void LoadItems()
{
BusyIndicator = true;
bool itemsToday = false;
Task workerTask = Task.Factory.StartNew(() =>
{
allItems=GetEarningsAnnouncements(daysOut);
});
workerTask.ContinueWith((continuation)=>
{
BusyIndicator = false;
base.OnPropertyChanged("AllItems");
base.OnPropertyChanged("Title");
});
}
public static ObservableCollection<EarningsAnnouncementModel> GetEarningsAnnouncements(int daysOutstanding)
{
List<EarningsAnnouncementModel> earningsAnnouncementModels = new List<EarningsAnnouncementModel>();
List<String> symbols = WatchListDA.GetWatchList("valuations");
if(null==symbols)return new ObservableCollection<EarningsAnnouncementModel>();
foreach (String symbol in symbols)
{
EarningsAnnouncementModel earningsAnnouncementModel=CompositeDA.GetEarningsAnnouncement(symbol);
if(null==earningsAnnouncementModel)continue;
if (Math.Abs(earningsAnnouncementModel.DaysFromToday) >= daysOutstanding) continue;
earningsAnnouncementModels.Add(earningsAnnouncementModel);
}
earningsAnnouncementModels.Sort();
return new ObservableCollection<EarningsAnnouncementModel>(earningsAnnouncementModels);
}
public int DaysOut
{
get { return daysOut; }
set { daysOut = value; base.OnPropertyChanged("DaysOut"); }
}
public override String Title
{
get { return "Earnings Announcements Next " + daysOut + " Days"; }
}
private void Refresh()
{
LoadItems();
}
private bool CanRefresh
{
get { return true; }
}
public ICommand DisplayAnalystRatings
{
get
{
if (null==analystRatingsCommand)
{
analystRatingsCommand = new RelayCommand(param =>
{
SaveParameters saveParams = new SaveParameters();
String companyName = PricingDA.GetNameForSymbol(selectedItem.Symbol);
saveParams.Add(new KeyValuePair<String, String>("Type", "TradeBlotter.ViewModels.AnalystRatingsViewModel"));
saveParams.Add(new KeyValuePair<String, String>("SelectedSymbol", selectedItem.Symbol));
saveParams.Add(new KeyValuePair<String, String>("SelectedCompany", companyName));
saveParams.Add(new KeyValuePair<String, String>("SelectedWatchList", Constants.CONST_ALL));
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null==selectedItem||null==selectedItem.Symbol?false:true; });
}
return analystRatingsCommand;
}
}
public ICommand DisplayStochastics
{
get
{
if (stochasticsCommand == null)
{
stochasticsCommand = new RelayCommand(param => this.DisplayStochasticsCommand(), param => { return null!=selectedItem&&null!=selectedItem.Symbol?true:false; });
}
return stochasticsCommand;
}
}
public void DisplayStochasticsCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.StochasticsViewModel,SelectedSymbol," + selectedItem.Symbol + ",SelectedWatchList,{All},SelectedDayCount,180");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}
public ICommand DisplayRelativeStrength
{
get
{
if (relativeStrengthCommand == null)
{
relativeStrengthCommand = new RelayCommand(param => this.DisplayRelativeStrengthCommand(),
param => { return null != selectedItem && null!=selectedItem.Symbol; });
}
return relativeStrengthCommand;
}
}
public void DisplayRelativeStrengthCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.RSIViewModel,SelectedSymbol," + selectedItem.Symbol + ",SelectedWatchList,{All},SelectedDayCount,60,SelectedRSIDayCount,14");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}
public ICommand DisplayStickerValuation
{
get
{
if (null == displayStickerValuationCommand)
{
displayStickerValuationCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.StickerPriceViewModel,SelectedSymbol," + selectedItem.Symbol + ",SelectedWatchList,{All}");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedItem && null != selectedItem.Symbol; });
}
return displayStickerValuationCommand;
}
}
public ICommand DisplayDCFValuation
{
get
{
if (null == displayDCFValuationCommand)
{
displayDCFValuationCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.DCFValuationViewModel,SelectedSymbol," + selectedItem.Symbol + ",SelectedWatchList,{All}");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedItem && null != selectedItem.Symbol; });
}
return displayDCFValuationCommand;
}
}
public ICommand DisplayMACD
{
get
{
if (macdCommand == null)
{
macdCommand = new RelayCommand(param => this.DisplayMACDCommand(), param => { return null!=selectedItem&&null!=selectedItem.Symbol?true:false; });
}
return macdCommand;
}
}
public void DisplayMACDCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.MACDViewModel,SelectedSymbol," + selectedItem.Symbol + ",SelectedWatchList,{All},SelectedDayCount,180");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}
public ICommand DisplayPriceHistory
{
get
{
if (priceHistoryCommand == null)
{
priceHistoryCommand = new RelayCommand(param => this.DisplayPriceHistoryCommand(), param => { return null!=selectedItem&&null!=selectedItem.Symbol?true:false; });
}
return priceHistoryCommand;
}
}
public void DisplayPriceHistoryCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.PricingViewModel,SelectedSymbol," + selectedItem.Symbol + ",SelectedWatchList,{All},SelectedDayCount,180");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}
public ICommand DisplayBollingerBand
{
get
{
if (bollingerBandCommand == null)
{
bollingerBandCommand = new RelayCommand(param => this.DisplayBollingerBandCommand(), param => { return null!=selectedItem&&null!=selectedItem.Symbol?true:false; });
}
return bollingerBandCommand;
}
}
public ICommand DisplayDividendHistory
{
get
{
if (dividendHistoryCommand == null)
{
dividendHistoryCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.DividendHistoryViewModel,SelectedSymbol," + selectedItem.Symbol + ",SelectedWatchList,{All}");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedItem && null != selectedItem.Symbol; });
}
return dividendHistoryCommand;
}
}
public ICommand DisplayHistorical
{
get
{
if (displayHistoricalCommand == null)
{
displayHistoricalCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.HistoricalViewModel,SelectedSymbol," + selectedItem.Symbol + ",SelectedWatchList,{All}");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedItem && null != selectedItem.Symbol; });
}
return displayHistoricalCommand;
}
}
public ICommand DisplayHeadlines
{
get
{
if (null == displayHeadlinesCommand)
{
displayHeadlinesCommand = new RelayCommand(param =>
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.HeadlinesViewModel,SelectedSymbol," + selectedItem.Symbol + ",SelectedWatchList,Valuations");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}, param => { return null != selectedItem && null!=selectedItem.Symbol; });
}
return displayHeadlinesCommand;
}
}
// *****************************************************************************************************************************************************************************
public void DisplayBollingerBandCommand()
{
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.BollingerBandViewModel,SelectedSymbol,"+selectedItem.Symbol+",SelectedWatchList,{All},SelectedDayCount,180");
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}
public ICommand DisplayValuation
{
get
{
if (valuationCommand == null)
{
valuationCommand = new RelayCommand(param => this.DisplayValuationCommand(), param => { return true; });
}
return valuationCommand;
}
}
public void DisplayValuationCommand()
{
List<DateTime> valuationDates = ValuationDA.GetValuationDates();
if (null == valuationDates || 0 == valuationDates.Count) return;
DateTime valuationDate = valuationDates[0];
SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.ValuationsViewModel,SelectedValuationDate," + valuationDate);
saveParams.Referer=this;
WorkspaceInstantiator.Invoke(saveParams);
}
public ICommand RefreshCommand
{
get
{
if (refreshCommand == null)
{
refreshCommand = new RelayCommand(param => this.Refresh(), param => this.CanRefresh);
}
return refreshCommand;
}
}
public EarningsAnnouncementModel SelectedItem
{
get
{
return selectedItem;
}
set
{
selectedItem = value;
}
}
}
}