コード例 #1
0
        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();
        }
コード例 #2
0
        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();
            }
        }