Files
TradeBlotter/ViewModels/ResistanceAndSupportViewModel.cs
2024-05-24 15:12:29 -04:00

284 lines
7.9 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 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;
using TradeBlotter.Cache;
namespace TradeBlotter.ViewModels
{
public class ResistanceAndSupportViewModel : WorkspaceViewModel
{
private List<ResistanceSupport> resistanceAndSupportList;
private String symbol;
private String companyName;
private Prices prices = null;
private List<String> symbols;
private List<String> watchLists;
private String selectedWatchList;
private RelayCommand refreshCommand;
private List<Int32> dayCounts;
private Int32 selectedDayCount;
private bool isLegendVisible = true;
private bool busyIndicator = false;
private String busyContent = "";
public ResistanceAndSupportViewModel()
{
base.DisplayName = "ResistanceAndSupportView";
watchLists = WatchListDA.GetWatchLists();
watchLists.Insert(0, Constants.CONST_ALL);
selectedWatchList = watchLists.Find(x => x.Equals("Valuations"));
symbols = WatchListDA.GetWatchList(selectedWatchList);
dayCounts = new List<Int32>();
dayCounts.Add(5);
dayCounts.Add(10);
dayCounts.Add(30);
dayCounts.Add(60);
dayCounts.Add(90);
dayCounts.Add(180);
dayCounts.Add(360);
dayCounts.Add(720);
dayCounts.Add(1440);
dayCounts.Add(3600);
selectedDayCount = dayCounts[1];
PropertyChanged += OnResistanceAndSupportViewModelPropertyChanged;
}
public override SaveParameters GetSaveParameters()
{
return null;
}
public override void SetSaveParameters(SaveParameters saveParameters)
{
}
public override bool CanPersist()
{
return false;
}
private void OnResistanceAndSupportViewModelPropertyChanged(object sender, PropertyChangedEventArgs eventArgs)
{
if (eventArgs.PropertyName.Equals("SelectedSymbol") || (eventArgs.PropertyName.Equals("SelectedDayCount") && null != symbol))
{
Task workerTask = Task.Factory.StartNew(() =>
{
SetBusyState(true, "Loading Prices...");
prices = PricingDA.GetPrices(symbol, selectedDayCount);
companyName = PricingDA.GetNameForSymbol(symbol);
resistanceAndSupportList = new List<ResistanceSupport>();
SetBusyState(true, "Generating Resistance and Support Bands...");
foreach (Price price in prices) resistanceAndSupportList.Add(new ResistanceSupport(price));
});
workerTask.ContinueWith((continuation)=>
{
SetBusyState(false);
base.OnPropertyChanged("R1");
base.OnPropertyChanged("S1");
base.OnPropertyChanged("R2");
base.OnPropertyChanged("S2");
base.OnPropertyChanged("High");
base.OnPropertyChanged("Low");
base.OnPropertyChanged("Close");
base.OnPropertyChanged("Title");
});
}
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 Boolean CheckBoxLegendVisible
{
get
{
return isLegendVisible;
}
set
{
isLegendVisible = value;
base.OnPropertyChanged("CheckBoxLegendVisible");
base.OnPropertyChanged("LegendVisible");
}
}
public String LegendVisible
{
get
{
if (isLegendVisible) return "true";
return "false";
}
set
{
isLegendVisible = Boolean.Parse(value);
base.OnPropertyChanged("LegendVisible");
}
}
public void SetBusyState(bool isBusy, String busyContent=null)
{
BusyIndicator = isBusy;
if (isBusy)BusyContent=busyContent;
else busyContent=null;
}
public bool BusyIndicator
{
get { return busyIndicator; }
set
{
busyIndicator = value;
base.OnPropertyChanged("BusyIndicator");
}
}
public String BusyContent
{
get { return busyContent; }
set
{
busyContent = value;
base.OnPropertyChanged("BusyContent");
}
}
public CompositeDataSource R1
{
get
{
CompositeDataSource compositeDataSource = ResistanceAndSupportModel.R1(resistanceAndSupportList);
return compositeDataSource;
}
}
public CompositeDataSource S1
{
get
{
CompositeDataSource compositeDataSource = ResistanceAndSupportModel.S1(resistanceAndSupportList);
return compositeDataSource;
}
}
public CompositeDataSource R2
{
get
{
CompositeDataSource compositeDataSource = ResistanceAndSupportModel.R2(resistanceAndSupportList);
return compositeDataSource;
}
}
public CompositeDataSource S2
{
get
{
CompositeDataSource compositeDataSource = ResistanceAndSupportModel.S2(resistanceAndSupportList);
return compositeDataSource;
}
}
public CompositeDataSource High
{
get
{
CompositeDataSource compositeDataSource = ResistanceAndSupportModel.High(resistanceAndSupportList);
return compositeDataSource;
}
}
public CompositeDataSource Low
{
get
{
CompositeDataSource compositeDataSource = ResistanceAndSupportModel.Low(resistanceAndSupportList);
return compositeDataSource;
}
}
public CompositeDataSource Close
{
get
{
CompositeDataSource compositeDataSource = ResistanceAndSupportModel.Close(resistanceAndSupportList);
return compositeDataSource;
}
}
public override String Title
{
get
{
if (null == companyName || null == prices || 0 == prices.Count) return "";
return companyName + " (" + symbol + ") " + Utility.DateTimeToStringMMHDDHYYYY(prices[prices.Count - 1].Date) + " Thru " + Utility.DateTimeToStringMMHDDHYYYY(prices[0].Date);
}
}
public Boolean Visibility
{
get { return false; }
}
public List<Int32> DayCounts
{
get { return dayCounts; }
}
public Int32 SelectedDayCount
{
get { return selectedDayCount; }
set { selectedDayCount = value; base.OnPropertyChanged("SelectedDayCount"); }
}
public List<String> Symbols
{
get
{
return symbols;
}
}
public String SelectedSymbol
{
get { return symbol; }
set
{
if (value == symbol || String.IsNullOrEmpty(value)) return;
symbol = 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);
}
return refreshCommand;
}
}
}
}