private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            var psdFileReader = new PreprocessedStockDataFileReader(acorFileLabel.Text);
            var inputData = psdFileReader.GetInputData();
            var outputData = psdFileReader.GetDesiredOutputData();
            var datesData = psdFileReader.GetDates();

            int examples = _lengthOfPrediction + (_windowWidth - 1);
            int predictionsCnt = examples - (_windowWidth - 1);

            double[][] predictions = new double[predictionsCnt][];
            string[] dates = new string[predictionsCnt];

            int predictionsCalculated = 0;
            int offset = _startDayIndex + _windowWidth;

            BackgroundWorker worker = sender as BackgroundWorker;

            Parallel.For(0, predictionsCnt, i =>
            {

                var inSlice = inputData.SubArray(i + _startDayIndex, _windowWidth);
                var outSlice = outputData.SubArray(i + _startDayIndex, _windowWidth);

                var trainer = _trainerFactory.GetTrainer();

                trainer.Initialize(inSlice, outSlice);

                trainer.TrainNeuralNetwork();

                double[] predictionExample = inputData[i + offset];
                double accual = outputData[i + offset];

                double prediction = trainer.AskNeuralNetwork(predictionExample);

                predictions[i] = new double[] { accual, prediction, trainer.BestFittness() };
                dates[i] = datesData[i + offset];

                Interlocked.Increment(ref predictionsCalculated);
                worker.ReportProgress((predictionsCalculated*100)/predictionsCnt);
            });

            Program.SavePredictions(_outputFilename, predictions, dates);
        }
        private static void GeneratePredictionsSequential(string filename, int windowWidth = 7)
        {
            _psdFileReader = new PreprocessedStockDataFileReader(filename);
            var inputData = _psdFileReader.GetInputData();
            var outputData = _psdFileReader.GetDesiredOutputData();
            var datesData = _psdFileReader.GetDates();

            int examples = _howManyDaysToPredict + (windowWidth - 1);
            int predictionsCnt = examples - (windowWidth - 1);

            double[][] predictions = new double[predictionsCnt][];
            string[] dates = new string[predictionsCnt];

            int offset = _startDayIndex + windowWidth;
            //for (int i = windowWidth - 1; i < inputData.Length - 1; i++)

               // for(int i = windowWidth - 1 + _startDayIndex; i < examples +_startDayIndex; i++)
            for(int i=0; i < predictionsCnt; i++)
            {
                var inSlice = inputData.SubArray(i + _startDayIndex, windowWidth);
                var outSlice = outputData.SubArray(i + _startDayIndex, windowWidth);

                var trainer = _trainerFactory.GetTrainer();

                trainer.Initialize(inSlice, outSlice);

                trainer.TrainNeuralNetwork();

                double[] predictionExample = inputData[i + offset];
                double accual = outputData[i + offset];

                double prediction = trainer.AskNeuralNetwork(predictionExample);

                predictions[i] = new double[] { accual, prediction, trainer.BestFittness() };
                dates[i] = datesData[i + offset];
            }

            SavePredictions(_predictionOutputFilename, predictions, dates);
        }