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); }
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); }