public async Task FullTest(int numberOfHiddenLayers, int numberOfNeurons) { _stock.Name = await _downloadService.GetName(_stock); _stock.HistoricalData = await _downloadService.GetHistoricalData(_stock, _startDate, refresh : true); _trainingSession = new TrainingSession(_portfolio, _stock) { NumberAnns = 5000, NumberHiddenLayers = numberOfHiddenLayers, NumberNeuronsPerHiddenLayer = numberOfNeurons, TrainSamplePercentage = 0.55 }; var timer = new Stopwatch(); timer.Start(); _trainingSession.PropertyChanged += (sender, args) => { if (args.PropertyName == "BestProfitLossCalculator" && timer.ElapsedMilliseconds > 7000) { Trace.Write($"\n{_trainingSession.AllNetworksPLsStdDevs.Count:N0}"); Trace.Write($" -> PL: {_trainingSession.BestProfitLossCalculator.PL:C2}"); Trace.Write($" ({_trainingSession.BestProfitLossCalculator.PLPercentage:P2})"); Trace.Write($" | median: {_trainingSession.AllNetworksPL:C2}"); Trace.Write($" | acc: {_trainingSession.BestProfitLossCalculator.PercentageWinningTransactions:P2}"); Trace.Write($" | study1: {_trainingSession.BestPrediction.BuyLevel}"); Trace.Write($" | study2: {_trainingSession.BestPrediction.SellLevel}"); timer.Restart(); } }; _trainingSession.FindBestAnn(new CancellationToken(), new NeuralStockSettings()); Console.Write("PL: {0:C2}", _trainingSession.BestProfitLossCalculator.PL); Console.Write(" ({0:P2})", _trainingSession.BestProfitLossCalculator.PLPercentage); Console.Write(" | median: {0:C2}", _trainingSession.AllNetworksPL); Console.Write(" | acc: {0:P2}", _trainingSession.BestProfitLossCalculator.PercentageWinningTransactions); Assert.Pass(); }
public async void Train() { IsBusy = true; IsTraining = true; if (!Stock.HistoricalData.Quotes.Any()) { Messenger.Default.Send(new TrainStatusMessage($"Historical data for stock {Stock.Name} not downloaded.", SeverityEnum.Error)); return; } try { if (_cancellationTokenSource != null && _cancellationTokenSource.Token.CanBeCanceled && !_cancellationTokenSource.IsCancellationRequested) { _cancellationTokenSource.Cancel(); return; } await DownloadData().ConfigureAwait(false); _cancellationTokenSource = new CancellationTokenSource(); await Task.Run(() => TrainingSession.FindBestAnn(_cancellationTokenSource.Token, _settings)); } catch (Exception ex) { Messenger.Default.Send(new TrainStatusMessage($"Could not train {Stock.Name}. Exception: {ex.Message}", SeverityEnum.Error)); } finally { IsTraining = false; IsBusy = false; _cancellationTokenSource = null; CommandManager.InvalidateRequerySuggested(); } }