diff --git a/ViewModels/CMMomentumViewModel.cs b/ViewModels/CMMomentumViewModel.cs index 6143d5c..bfd3c1d 100644 --- a/ViewModels/CMMomentumViewModel.cs +++ b/ViewModels/CMMomentumViewModel.cs @@ -28,6 +28,7 @@ using Position = MarketData.Generator.CMMomentum.Position; using TradeBlotter.UIUtils; using MarketData.Generator.Model; using MarketData.CNNProcessing; +using System.Runtime.InteropServices.WindowsRuntime; namespace TradeBlotter.ViewModels { @@ -1120,39 +1121,60 @@ namespace TradeBlotter.ViewModels return; } } + public bool LoadSessionFile() { - if (!CMSessionManager.IsValidSessionFile(pathFileName)) return false; - initialPath = Path.GetDirectoryName(pathFileName); - sessionParams=CMSessionManager.RestoreSession(pathFileName); - if (null == sessionParams) { MessageBox.Show(String.Format("Unable to open {0}", pathFileName)); pathFileName = null; return false; } - modelStatistics=CMMomentumBacktest.GetModelStatistics(sessionParams); - modelPerformanceSeries=CMMomentumBacktest.GetModelPerformance(sessionParams); - cmParams = sessionParams.CMParams; - NVPCollection nvpCollection = sessionParams.CMParams.ToNVPCollection(); - nvpDictionary = nvpCollection.ToDictionary(); - nvpDictionaryKeys = new ObservableCollection(nvpDictionary.Keys); - selectedParameter = nvpDictionaryKeys[0]; - positions = new CMPositionModelCollection(); - positions.Add(sessionParams.ActivePositions); - positions.Add(sessionParams.AllPositions); - UpdatePositionPrices(false); - UpdatePositionRSI3(true); - RunPerformance(); - base.OnPropertyChanged("Parameters"); - base.OnPropertyChanged("SelectedParameter"); - base.OnPropertyChanged("ParameterValue"); - base.OnPropertyChanged("Title"); - base.OnPropertyChanged("DisplayName"); - base.OnPropertyChanged("AllPositions"); - base.OnPropertyChanged("CanMonitor"); - base.OnPropertyChanged("CashBalance"); - base.OnPropertyChanged("NonTradeableCash"); - base.OnPropertyChanged("ModelExpectation"); - base.OnPropertyChanged("ExpectationColor"); - base.OnPropertyChanged("ExpectationDescription"); + BusyIndicator = true; + BusyContent = $"Loading {Utility.GetFileNameNoExtension(pathFileName)}..."; + + Task workerTask = Task.Factory.StartNew(() => + { + try + { + if (!CMSessionManager.IsValidSessionFile(pathFileName)) return false; + initialPath = Path.GetDirectoryName(pathFileName); + sessionParams=CMSessionManager.RestoreSession(pathFileName); + if (null == sessionParams) { MessageBox.Show(String.Format("Unable to open {0}", pathFileName)); pathFileName = null; return false; } + modelStatistics=CMMomentumBacktest.GetModelStatistics(sessionParams); + modelPerformanceSeries=CMMomentumBacktest.GetModelPerformance(sessionParams); + cmParams = sessionParams.CMParams; + NVPCollection nvpCollection = sessionParams.CMParams.ToNVPCollection(); + nvpDictionary = nvpCollection.ToDictionary(); + nvpDictionaryKeys = new ObservableCollection(nvpDictionary.Keys); + selectedParameter = nvpDictionaryKeys[0]; + positions = new CMPositionModelCollection(); + positions.Add(sessionParams.ActivePositions); + positions.Add(sessionParams.AllPositions); + UpdatePositionPrices(false); + UpdatePositionRSI3(true); + RunPerformance(); + return true; + } + catch(Exception exception) + { + System.Windows.MessageBox.Show(String.Format("Exception {0}",exception.ToString()),"Error",MessageBoxButton.OK,MessageBoxImage.Exclamation); + return false; + } + }); + workerTask.ContinueWith(continuation => + { + BusyIndicator=false; + base.OnPropertyChanged("Parameters"); + base.OnPropertyChanged("SelectedParameter"); + base.OnPropertyChanged("ParameterValue"); + base.OnPropertyChanged("Title"); + base.OnPropertyChanged("DisplayName"); + base.OnPropertyChanged("AllPositions"); + base.OnPropertyChanged("CanMonitor"); + base.OnPropertyChanged("CashBalance"); + base.OnPropertyChanged("NonTradeableCash"); + base.OnPropertyChanged("ModelExpectation"); + base.OnPropertyChanged("ExpectationColor"); + base.OnPropertyChanged("ExpectationDescription"); + }); return true; } + private void RunPerformance() { if(null==sessionParams)return; diff --git a/ViewModels/CMTTrendViewModel.cs b/ViewModels/CMTTrendViewModel.cs index 432c918..0aead12 100644 --- a/ViewModels/CMTTrendViewModel.cs +++ b/ViewModels/CMTTrendViewModel.cs @@ -1236,42 +1236,63 @@ namespace TradeBlotter.ViewModels return; } } + public bool LoadSessionFile() { - if(!CMTSessionManager.IsValidSessionFile(pathFileName)) return false; - initialPath=Path.GetDirectoryName(pathFileName); - sessionParams=CMTSessionManager.RestoreSession(pathFileName); - if(null==sessionParams) { MessageBox.Show(String.Format("Unable to open {0}",pathFileName)); pathFileName=null; return false; } - modelStatistics=CMTTrendModel.GetModelStatistics(sessionParams); - configuration=sessionParams.CMTParams; - NVPCollection nvpCollection=sessionParams.CMTParams.ToNVPCollection(); - nvpDictionary=nvpCollection.ToDictionary(); - nvpDictionaryKeys=new ObservableCollection(nvpDictionary.Keys); - selectedParameter=nvpDictionaryKeys[0]; - positions=new CMTPositionModelCollection(); - positions.Add(sessionParams.ActivePositions); - positions.Add(sessionParams.AllPositions); - trendCandidates=new ObservableCollection(); - foreach(CMTCandidate candidate in sessionParams.Candidates)trendCandidates.Add(candidate); - UpdatePositionPrices(true); - RunPerformance(); - base.OnPropertyChanged("Parameters"); - base.OnPropertyChanged("SelectedParameter"); - base.OnPropertyChanged("ParameterValue"); - base.OnPropertyChanged("Title"); - base.OnPropertyChanged("DisplayName"); - base.OnPropertyChanged("AllPositions"); - base.OnPropertyChanged("CanMonitor"); - base.OnPropertyChanged("AllItems"); - base.OnPropertyChanged("CashBalance"); - base.OnPropertyChanged("NonTradeableCash"); - base.OnPropertyChanged("ModelExpectation"); - base.OnPropertyChanged("ExpectationColor"); - base.OnPropertyChanged("ExpectationDescription"); - base.OnPropertyChanged("TradeableCashDescription"); - base.OnPropertyChanged("NonTradeableCashDescription"); + BusyIndicator = true; + BusyContent = $"Loading {Utility.GetFileNameNoExtension(pathFileName)}..."; + + Task workerTask = Task.Factory.StartNew( () => + { + try + { + if(!CMTSessionManager.IsValidSessionFile(pathFileName)) return false; + initialPath=Path.GetDirectoryName(pathFileName); + sessionParams=CMTSessionManager.RestoreSession(pathFileName); + if(null==sessionParams) { MessageBox.Show(String.Format("Unable to open {0}",pathFileName)); pathFileName=null; return false; } + modelStatistics=CMTTrendModel.GetModelStatistics(sessionParams); + configuration=sessionParams.CMTParams; + NVPCollection nvpCollection=sessionParams.CMTParams.ToNVPCollection(); + nvpDictionary=nvpCollection.ToDictionary(); + nvpDictionaryKeys=new ObservableCollection(nvpDictionary.Keys); + selectedParameter=nvpDictionaryKeys[0]; + positions=new CMTPositionModelCollection(); + positions.Add(sessionParams.ActivePositions); + positions.Add(sessionParams.AllPositions); + trendCandidates=new ObservableCollection(); + foreach(CMTCandidate candidate in sessionParams.Candidates)trendCandidates.Add(candidate); + UpdatePositionPrices(true); + RunPerformance(); + return true; + } + catch(Exception exception) + { + System.Windows.MessageBox.Show(String.Format("Exception {0}",exception.ToString()),"Error",MessageBoxButton.OK,MessageBoxImage.Exclamation); + return false; + } + }); + workerTask.ContinueWith(continuation => + { + BusyIndicator = false; + base.OnPropertyChanged("Parameters"); + base.OnPropertyChanged("SelectedParameter"); + base.OnPropertyChanged("ParameterValue"); + base.OnPropertyChanged("Title"); + base.OnPropertyChanged("DisplayName"); + base.OnPropertyChanged("AllPositions"); + base.OnPropertyChanged("CanMonitor"); + base.OnPropertyChanged("AllItems"); + base.OnPropertyChanged("CashBalance"); + base.OnPropertyChanged("NonTradeableCash"); + base.OnPropertyChanged("ModelExpectation"); + base.OnPropertyChanged("ExpectationColor"); + base.OnPropertyChanged("ExpectationDescription"); + base.OnPropertyChanged("TradeableCashDescription"); + base.OnPropertyChanged("NonTradeableCashDescription"); + }); return true; } + private void RunPerformance() { if(null==sessionParams)return; diff --git a/ViewModels/MomentumViewModel.cs b/ViewModels/MomentumViewModel.cs index e7220ef..c7b6aac 100644 --- a/ViewModels/MomentumViewModel.cs +++ b/ViewModels/MomentumViewModel.cs @@ -1103,37 +1103,54 @@ namespace TradeBlotter.ViewModels } else LoadSessionFile(); } + public bool LoadSessionFile() { - try + BusyIndicator = true; + BusyContent = $"Loading {Utility.GetFileNameNoExtension(pathFileName)}..."; + + Task workerTask = Task.Factory.StartNew(() => { - if(!MGSessionManager.IsValidSessionFile(pathFileName)) + try { - MessageBox.Show(String.Format("'{0}' is not a valid model. IsValidSessionFile returned false.",pathFileName)); - pathFileName = null; + if(!MGSessionManager.IsValidSessionFile(pathFileName)) + { + MessageBox.Show(String.Format("'{0}' is not a valid model. IsValidSessionFile returned false.",pathFileName)); + pathFileName = null; + return false; + } + initialPath=Path.GetDirectoryName(pathFileName); + sessionParams=MGSessionManager.RestoreSession(pathFileName); + if(null==sessionParams) + { + MessageBox.Show(String.Format("Unable to open '{0}'. Restore session failed.",pathFileName)); + pathFileName=null; + return false; + } + modelStatistics=MomentumBacktest.GetModelStatistics(sessionParams); + modelPerformanceSeries=MomentumBacktest.GetModelPerformance(sessionParams); + configuration=sessionParams.Configuration; + NVPCollection nvpCollection=sessionParams.Configuration.ToNVPCollection(); + nvpDictionary=nvpCollection.ToDictionary(); + nvpDictionaryKeys=new ObservableCollection(nvpDictionary.Keys); + selectedParameter=nvpDictionaryKeys[0]; + positions=new MGPositionModelCollection(); + positions.Add(sessionParams.ActivePositions); + positions.Add(sessionParams.AllPositions); + UpdatePositionPrices(false); + UpdatePositionRSI3(true); + RunPerformance(); + return true; + } + catch(Exception exception) + { + System.Windows.MessageBox.Show(String.Format("Exception {0}",exception.ToString()),"Error",MessageBoxButton.OK,MessageBoxImage.Exclamation); return false; } - initialPath=Path.GetDirectoryName(pathFileName); - sessionParams=MGSessionManager.RestoreSession(pathFileName); - if(null==sessionParams) - { - MessageBox.Show(String.Format("Unable to open '{0}'. Restore session failed.",pathFileName)); - pathFileName=null; - return false; - } - modelStatistics=MomentumBacktest.GetModelStatistics(sessionParams); - modelPerformanceSeries=MomentumBacktest.GetModelPerformance(sessionParams); - configuration=sessionParams.Configuration; - NVPCollection nvpCollection=sessionParams.Configuration.ToNVPCollection(); - nvpDictionary=nvpCollection.ToDictionary(); - nvpDictionaryKeys=new ObservableCollection(nvpDictionary.Keys); - selectedParameter=nvpDictionaryKeys[0]; - positions=new MGPositionModelCollection(); - positions.Add(sessionParams.ActivePositions); - positions.Add(sessionParams.AllPositions); - UpdatePositionPrices(false); - UpdatePositionRSI3(true); - RunPerformance(); + }); + workerTask.ContinueWith(continuation => + { + BusyIndicator=false; base.OnPropertyChanged("Parameters"); base.OnPropertyChanged("SelectedParameter"); base.OnPropertyChanged("ParameterValue"); @@ -1146,14 +1163,10 @@ namespace TradeBlotter.ViewModels base.OnPropertyChanged("ModelExpectation"); base.OnPropertyChanged("ExpectationColor"); base.OnPropertyChanged("ExpectationDescription"); - return true; - } - catch(Exception exception) - { - System.Windows.MessageBox.Show(String.Format("Exception {0}",exception.ToString()),"Error",MessageBoxButton.OK,MessageBoxImage.Exclamation); - return false; - } + }); + return true; } + private void RunPerformance() { if(null==sessionParams)return;