private void InitTestEntries()
        {
            Random rand = new Random();

            int seasonCount = 20, valuePerSeason = 15, maxValueChangePerDay = 5, maxValueChangeJumped = 10, lastSeasonValue = 50;

            double enoughJumpProbability = 0.8;

            bool isGrowExpected;

            for (int i = 0; i < seasonCount; ++i)
            {
                isGrowExpected = rand.Next(0, 2) > 0 ? true : false;

                for (int j = 1; j < valuePerSeason + 1; ++j)
                {
                    DateTime date = DateTime.Now.AddDays(i * seasonCount + j);

                    double close, jumpProbability = rand.NextDouble();

                    if (isGrowExpected)
                    {
                        if (jumpProbability > enoughJumpProbability)
                        {
                            close = rand.Next(lastSeasonValue, lastSeasonValue + maxValueChangeJumped);
                        }
                        else
                        {
                            close = rand.Next(lastSeasonValue, lastSeasonValue + maxValueChangePerDay);
                        }
                    }
                    else
                    {
                        int minClose;

                        if (jumpProbability > enoughJumpProbability)
                        {
                            minClose = lastSeasonValue - maxValueChangePerDay;
                        }
                        else
                        {
                            minClose = lastSeasonValue - maxValueChangeJumped;
                        }

                        if (minClose < 1)
                        {
                            minClose = 1;
                        }

                        close = rand.Next(minClose, lastSeasonValue);
                    }

                    BasicDataset dataset = new BasicDataset(date, close);

                    Entries.Add(dataset);
                }

                lastSeasonValue = (int)Entries[Entries.Count - 1].Close;
            }
        }
        private BasicDataset CreateBasicDataset(string[] csvLine, Dictionary <string, int> headersPosition)
        {
            try
            {
                BasicDataset dataset = new BasicDataset
                {
                    Close = GetCsvDecimal(csvLine, headersPosition, vitalHeaders["Close"]),
                    Date  = GetCsvDate(csvLine, headersPosition, vitalHeaders["Date"])
                };

                return(dataset);
            }
            catch (IndexOutOfRangeException ex)
            {
                Console.WriteLine("CreateDataset Exception: " + ex.Message);

                return(null);
            }
            catch (FormatException ex)
            {
                Console.WriteLine("CreateDataset Exception: " + ex.Message);

                return(null);
            }
        }
        private static void AddRow(DataTable table, BasicDataset dataset)
        {
            DataRow row = table.NewRow();

            row["Close"] = dataset.Close;
            row["Date"]  = dataset.Date.ToString("yyyy-MM-dd");

            table.Rows.Add(row);
        }
Example #4
0
        private List <BasicDataset> ConvertToDatasetRange(DateTime[] dates, double[] closes)
        {
            List <BasicDataset> datasets = new List <BasicDataset>(dates.Length);

            for (int i = 0; i < datasets.Capacity; ++i)
            {
                BasicDataset dataset = ConvertToDataset(dates[i], closes[i]);

                datasets.Add(dataset);
            }

            return(datasets);
        }
        //public List<BasicDataset> Predict(IEnumerable<BasicDataset> dataset)
        //{
        //    var predcitedStockList = new List<BasicDataset>(daysToPredict);

        //    List<BasicDataset> average = dataset.ToList();

        //    BasicDataset nextPredicted;

        //    for (int i = 0; i < daysToPredict; ++i)
        //    {
        //        nextPredicted = GetSinglePrediction(average);

        //        predcitedStockList.Add(nextPredicted);

        //        average = CreateAverage(average, nextPredicted);
        //    }

        //    return predcitedStockList;
        //}

        private BasicDataset GetSinglePrediction(IEnumerable <BasicDataset> average)
        {
            BasicDataset predictedData = new BasicDataset();

            decimal summ = 0;

            foreach (BasicDataset stockData in average)
            {
                summ += stockData.Close;
            }

            predictedData.Close = summ / average.Count();

            predictedData.Date = average.ElementAt(average.Count() - 1).Date.AddDays(1);

            return(predictedData);
        }
        public IEnumerable <BasicDataset> Predict(IEnumerable <BasicDataset> average)
        {
            SplitSet(average, out IEnumerable <BasicDataset> trainingSet, out IEnumerable <BasicDataset> controlSet);

            int predictionCount = controlSet.Count();

            List <BasicDataset> predictedSet = new List <BasicDataset>(predictionCount);

            BasicDataset singlePrediction;

            decimal summ = 0;

            for (int i = 0; i < predictionCount; ++i)
            {
                summ = trainingSet.Skip(trainingSet.Count() - predictionCount + i).Sum(x => x.Close) + predictedSet.Sum(x => x.Close);

                //DateTime predictedDate = predictedSet.Count > 0 ?
                //    predictedSet.ElementAt(predictedSet.Count() - 1).Date.AddDays(1) :
                //    average.ElementAt(average.Count() - 1).Date.AddDays(1);

                DateTime predictedDate = controlSet.ElementAt(i).Date;

                //switch (predictedDate.Date.DayOfWeek)
                //{
                //    case DayOfWeek.Saturday:
                //        predictedDate = predictedDate.AddDays(2);
                //        break;
                //    case DayOfWeek.Sunday:
                //        predictedDate = predictedDate.AddDays(1);
                //        break;
                //}

                singlePrediction = new BasicDataset(predictedDate, summ / predictionCount);

                predictedSet.Add(singlePrediction);
            }

            return(predictedSet);
        }
        private IEnumerable <BasicDataset> CreateBasicDatasetRange(IEnumerable <string[]> csvContent, Dictionary <string, int> headersPosition)
        {
            try
            {
                List <BasicDataset> datasets = new List <BasicDataset>(csvContent.Count());

                foreach (string[] csvLine in csvContent)
                {
                    BasicDataset dataset = CreateBasicDataset(csvLine, headersPosition);

                    if (dataset != null)
                    {
                        datasets.Add(dataset);
                    }
                }

                return(datasets);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private List <BasicDataset> CreateAverage(IEnumerable <BasicDataset> oldAverage, BasicDataset nextPredicted)
        {
            List <BasicDataset> average = oldAverage.ToList();

            if (average != null)
            {
                if (average.Count() > 0)
                {
                    average.RemoveAt(0);
                }

                average.Add(nextPredicted);
            }
            else
            {
                throw new Exception("Old average not initialized");
            }

            return(average);
        }