More changes for BollingerBands.
This commit is contained in:
@@ -73,12 +73,12 @@ namespace PortfolioManager.ViewModels
|
||||
|
||||
private BollingerBands bollingerBands;
|
||||
|
||||
public BollingerBandViewModel()
|
||||
public BollingerBandViewModel(bool loadedFromParams = false)
|
||||
{
|
||||
InitializeDataSources();
|
||||
PropertyChanged += OnViewModelPropertyChanged;
|
||||
DisplayName = "Bollinger";
|
||||
Initialize();
|
||||
Initialize(loadedFromParams ? false : true);
|
||||
}
|
||||
|
||||
protected override void OnDispose()
|
||||
@@ -87,11 +87,11 @@ namespace PortfolioManager.ViewModels
|
||||
base.OnDispose();
|
||||
}
|
||||
|
||||
private void Initialize()
|
||||
private void Initialize(bool executePropertyChanged=true)
|
||||
{
|
||||
Task workerTask = Task.Factory.StartNew(() =>
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, $"WatchListDA.GetWatchLists()");
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, $"BollingerBandViewModel::Initialize()");
|
||||
watchListNames = WatchListDA.GetWatchLists();
|
||||
watchListNames.Insert(0, UIConstants.CONST_ALL);
|
||||
selectedWatchList = watchListNames.Find(x => x.Equals("Valuations"));
|
||||
@@ -99,9 +99,12 @@ namespace PortfolioManager.ViewModels
|
||||
});
|
||||
workerTask.ContinueWith((continuation) =>
|
||||
{
|
||||
base.OnPropertyChanged("Symbols");
|
||||
base.OnPropertyChanged("WatchListNames");
|
||||
base.OnPropertyChanged("SelectedWatchList");
|
||||
if (executePropertyChanged)
|
||||
{
|
||||
base.OnPropertyChanged("Symbols");
|
||||
base.OnPropertyChanged("WatchListNames");
|
||||
base.OnPropertyChanged("SelectedWatchList");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -192,6 +195,10 @@ namespace PortfolioManager.ViewModels
|
||||
}
|
||||
set
|
||||
{
|
||||
if (String.IsNullOrEmpty(selectedSymbol))
|
||||
{
|
||||
return;
|
||||
}
|
||||
selectedSymbol = value;
|
||||
base.OnPropertyChanged("SelectedSymbol");
|
||||
}
|
||||
@@ -325,7 +332,7 @@ namespace PortfolioManager.ViewModels
|
||||
public override SaveParameters GetSaveParameters()
|
||||
{
|
||||
SaveParameters saveParams = new SaveParameters();
|
||||
if (null == selectedSymbol) return null;
|
||||
if (String.IsNullOrEmpty(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>("SelectedWatchList", selectedWatchList));
|
||||
@@ -353,45 +360,56 @@ namespace PortfolioManager.ViewModels
|
||||
{
|
||||
try
|
||||
{
|
||||
Referer=saveParameters.Referer;
|
||||
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;
|
||||
base.OnPropertyChanged("SelectedWatchList");
|
||||
selectedDayCount = Int32.Parse((from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("SelectedDayCount") select item).FirstOrDefault().Value);
|
||||
try
|
||||
|
||||
Task workerTask = Task.Factory.StartNew(() =>
|
||||
{
|
||||
if(saveParameters.ContainsKey("SyncTradeToBand"))syncTradeToBand=Boolean.Parse((from KeyValuePair<String,String> item in saveParameters where item.Key.Equals("SyncTradeToBand") select item).FirstOrDefault().Value);
|
||||
else syncTradeToBand=true;
|
||||
}
|
||||
catch (Exception) { syncTradeToBand = true; }
|
||||
try
|
||||
{
|
||||
if(saveParameters.ContainsKey("ShowTradeLabels"))showTradeLabels = Boolean.Parse((from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("ShowTradeLabels") select item).FirstOrDefault().Value);
|
||||
else showTradeLabels=true;
|
||||
}
|
||||
catch (Exception) { showTradeLabels = true; }
|
||||
try
|
||||
{
|
||||
if(saveParameters.ContainsKey("UseLeastSquaresFit"))useLeastSquaresFit=Boolean.Parse((from KeyValuePair<String,String> item in saveParameters where item.Key.Equals("UseLeastSquaresFit") select item).FirstOrDefault().Value);
|
||||
}
|
||||
catch (Exception){;}
|
||||
try
|
||||
{
|
||||
if(saveParameters.ContainsKey("ShowInsiderTransactions"))showInsiderTransactions=Boolean.Parse((from KeyValuePair<String,String> item in saveParameters where item.Key.Equals("ShowInsiderTransactions") select item).FirstOrDefault().Value);
|
||||
}
|
||||
catch (Exception){;}
|
||||
try
|
||||
{
|
||||
if(saveParameters.ContainsKey("StopHistoryCount"))
|
||||
|
||||
Referer = saveParameters.Referer;
|
||||
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;
|
||||
selectedDayCount = Int32.Parse((from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("SelectedDayCount") select item).FirstOrDefault().Value);
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, $"BollingerBandViewModel::SetSaveParameters('{selectedSymbol}','{selectedWatchList}','{selectedDayCount}')");
|
||||
try
|
||||
{
|
||||
stopLimits = StopLimitsExtensions.FromSaveParams(saveParameters);
|
||||
if (saveParameters.ContainsKey("SyncTradeToBand")) syncTradeToBand = Boolean.Parse((from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("SyncTradeToBand") select item).FirstOrDefault().Value);
|
||||
else syncTradeToBand = true;
|
||||
}
|
||||
}
|
||||
catch(Exception exception)
|
||||
catch (Exception) { syncTradeToBand = true; }
|
||||
try
|
||||
{
|
||||
if (saveParameters.ContainsKey("ShowTradeLabels")) showTradeLabels = Boolean.Parse((from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("ShowTradeLabels") select item).FirstOrDefault().Value);
|
||||
else showTradeLabels = true;
|
||||
}
|
||||
catch (Exception) { showTradeLabels = true; }
|
||||
try
|
||||
{
|
||||
if (saveParameters.ContainsKey("UseLeastSquaresFit")) useLeastSquaresFit = Boolean.Parse((from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("UseLeastSquaresFit") select item).FirstOrDefault().Value);
|
||||
}
|
||||
catch (Exception) {; }
|
||||
try
|
||||
{
|
||||
if (saveParameters.ContainsKey("ShowInsiderTransactions")) showInsiderTransactions = Boolean.Parse((from KeyValuePair<String, String> item in saveParameters where item.Key.Equals("ShowInsiderTransactions") select item).FirstOrDefault().Value);
|
||||
}
|
||||
catch (Exception) {; }
|
||||
try
|
||||
{
|
||||
if (saveParameters.ContainsKey("StopHistoryCount"))
|
||||
{
|
||||
stopLimits = StopLimitsExtensions.FromSaveParams(saveParameters);
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString()));
|
||||
}
|
||||
// base.OnPropertyChanged("SelectedWatchList");
|
||||
// base.OnPropertyChanged("SelectedSymbol");
|
||||
});
|
||||
workerTask.ContinueWith((continuation) =>
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Exception:{0}",exception.ToString()));
|
||||
}
|
||||
base.OnPropertyChanged("SelectedSymbol");
|
||||
base.OnPropertyChanged("SelectedWatchList");
|
||||
base.OnPropertyChanged("SelectedSymbol");
|
||||
});
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
@@ -409,22 +427,24 @@ namespace PortfolioManager.ViewModels
|
||||
// *************************************************************************************************************************************
|
||||
private void OnViewModelPropertyChanged(object sender, PropertyChangedEventArgs eventArgs)
|
||||
{
|
||||
if (eventArgs.PropertyName.Equals("SelectedSymbol"))
|
||||
if (eventArgs.PropertyName.Equals("SelectedSymbol") && !String.IsNullOrEmpty(selectedSymbol))
|
||||
{
|
||||
InitializeDataSources();
|
||||
InitializeData();
|
||||
}
|
||||
|
||||
if (eventArgs.PropertyName.Equals("SyncTradeToBand") ||
|
||||
if ((eventArgs.PropertyName.Equals("SyncTradeToBand") ||
|
||||
eventArgs.PropertyName.Equals("ShowTradeLabels") ||
|
||||
eventArgs.PropertyName.Equals("SelectedSymbol") ||
|
||||
eventArgs.PropertyName.Equals("ShowRiskFree") ||
|
||||
eventArgs.PropertyName.Equals("LeastSquaresFit") ||
|
||||
(eventArgs.PropertyName.Equals("SelectedDayCount") && null != selectedSymbol))
|
||||
eventArgs.PropertyName.Equals("SelectedDayCount"))
|
||||
&& !String.IsNullOrEmpty(selectedSymbol))
|
||||
{
|
||||
IsBusy = true;
|
||||
Task workerTask = Task.Factory.StartNew(() =>
|
||||
{
|
||||
MDTrace.WriteLine(LogLevel.DEBUG,$"OnViewModelPropertyChanged({eventArgs.PropertyName}). Selected symbol '{selectedSymbol}'");
|
||||
base.DisplayName = "Bollinger(" + selectedSymbol + ")";
|
||||
base.OnPropertyChanged("DisplayName");
|
||||
stopLimit = PortfolioDA.GetStopLimit(selectedSymbol);
|
||||
@@ -474,7 +494,6 @@ namespace PortfolioManager.ViewModels
|
||||
});
|
||||
workerTask.ContinueWith((continuation) =>
|
||||
{
|
||||
IsBusy = false;
|
||||
base.OnPropertyChanged("K");
|
||||
base.OnPropertyChanged("KL1");
|
||||
base.OnPropertyChanged("L");
|
||||
@@ -511,6 +530,7 @@ namespace PortfolioManager.ViewModels
|
||||
base.OnPropertyChanged("InsiderTransactionPointMarkersAcquiredSmall");
|
||||
base.OnPropertyChanged("InsiderTransactionPointMarkersAcquiredMedium");
|
||||
base.OnPropertyChanged("InsiderTransactionPointMarkersAcquiredLarge");
|
||||
IsBusy = false;
|
||||
});
|
||||
}
|
||||
else if (eventArgs.PropertyName.Equals("SelectedWatchList"))
|
||||
@@ -719,7 +739,7 @@ namespace PortfolioManager.ViewModels
|
||||
get
|
||||
{
|
||||
if (!showTradeLabels) return null;
|
||||
return ImageCache.GetInstance().GetImage(ImageCache.ImageType.YellowTriangleUp);
|
||||
return ImageCache.GetInstance().GetImage(ImageCache.ImageType.DarkBlueTriangleUp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -750,21 +750,20 @@ namespace PortfolioManager.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
[RelayCommand(CanExecute = nameof(CanExecuteBollingerBand))]
|
||||
public async Task BollingerBands()
|
||||
{
|
||||
if (null == selectedGainLossSummaryItem) return;
|
||||
SaveParameters saveParams = SaveParameters.Parse("Type,PortfolioManager.ViewModels.BollingerBandViewModel,SelectedSymbol," + selectedGainLossSummaryItem.Symbol + ",SelectedWatchList,{All},SelectedDayCount,180,SyncTradeToBand,FALSE");
|
||||
saveParams.Referer = this;
|
||||
WorkspaceInstantiator.Invoke(saveParams);
|
||||
await Task.FromResult(true);
|
||||
}
|
||||
|
||||
// await Task.FromResult(() =>
|
||||
// {
|
||||
// SaveParameters saveParams = SaveParameters.Parse("Type,TradeBlotter.ViewModels.BollingerBandViewModel,SelectedSymbol," + selectedGainLossSummaryItem.Symbol + ",SelectedWatchList,{All},SelectedDayCount,180,SyncTradeToBand,FALSE");
|
||||
// saveParams.Referer = this;
|
||||
// WorkspaceInstantiator.Invoke(saveParams);
|
||||
// });
|
||||
}
|
||||
public bool CanExecuteBollingerBand()
|
||||
{
|
||||
return selectedGainLossSummaryItem == default ? false : true;
|
||||
}
|
||||
|
||||
// ****************************************************** T O O L T I P S *********************************************************
|
||||
public String DollarChangePercent
|
||||
|
||||
@@ -112,6 +112,7 @@ namespace PortfolioManager.ViewModels
|
||||
get
|
||||
{
|
||||
ObservableCollection<MenuItem> collection = new ObservableCollection<MenuItem>();
|
||||
collection.Add(new MenuItem() { Header = "Bollinger Bands...", Command = BollingerBandsCommand, StaysOpenOnClick = false });
|
||||
collection.Add(new MenuItem() { Header = "Close Position...", Command = CloseCommand, StaysOpenOnClick = false });
|
||||
collection.Add(new MenuItem() { Header = "Edit Position...", Command = EditCommand, StaysOpenOnClick = false });
|
||||
collection.Add(new MenuItem() { Header = "Add To WatchList", Command = AddToWatchListCommand, StaysOpenOnClick = false });
|
||||
@@ -122,6 +123,12 @@ namespace PortfolioManager.ViewModels
|
||||
|
||||
// ********************************************************************* R E L A Y S *****************************************************************
|
||||
|
||||
[RelayCommand(CanExecute = nameof(CanExecuteBollingerBands))]
|
||||
public async Task BollingerBands()
|
||||
{
|
||||
await ExecuteBollingerBands();
|
||||
}
|
||||
|
||||
[RelayCommand(CanExecute = nameof(CanClosePosition))]
|
||||
public async Task Close()
|
||||
{
|
||||
@@ -140,6 +147,12 @@ namespace PortfolioManager.ViewModels
|
||||
await OpenEditDialog();
|
||||
}
|
||||
|
||||
public bool CanExecuteBollingerBands()
|
||||
{
|
||||
if (null == selectedPosition || null == selectedPosition.Symbol) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool CanEdit()
|
||||
{
|
||||
if (null == selectedPosition || null == selectedPosition.Symbol || !Utility.IsEpoch(selectedPosition.SellDate)) return false;
|
||||
@@ -164,6 +177,14 @@ namespace PortfolioManager.ViewModels
|
||||
await ReloadTradeFile();
|
||||
}
|
||||
|
||||
public async Task ExecuteBollingerBands()
|
||||
{
|
||||
SaveParameters saveParams = SaveParameters.Parse("Type,PortfolioManager.ViewModels.BollingerBandViewModel,SelectedSymbol," + selectedPosition.Symbol + ",SelectedWatchList,{All},SelectedDayCount,360");
|
||||
saveParams.Referer=this;
|
||||
WorkspaceInstantiator.Invoke(saveParams);
|
||||
await Task.FromResult(true);
|
||||
}
|
||||
|
||||
public async Task ReloadTradeFile()
|
||||
{
|
||||
LoadSessionFile();
|
||||
|
||||
Reference in New Issue
Block a user