public static string InvestmentSimulations(string stockDataFileName, string predictionsFileName, double investorStartMoney = 100000.0) { var spfr = new StockPredictionsFileReader(predictionsFileName); var rsdr = new RawStockDataReader(stockDataFileName); int diffrence = 0; List<InvestorRow> mergedData = new List<InvestorRow>(); for (int i = 0; i < rsdr.GetCount(); i++) { if (spfr.GetDate(0) == rsdr.GetDates()[i]) { diffrence = i; break; } } for (int i = diffrence; i < rsdr.GetCount() && i - diffrence < spfr.GetCount(); i++) { var row = new InvestorRow(); row.Closing = rsdr.GetClosing()[i]; row.Date = rsdr.GetDates()[i]; row.Highest = rsdr.GetHighest()[i]; row.Lowest = rsdr.GetLowest()[i]; row.Opening = rsdr.GetOpening()[i]; row.Volume = rsdr.GetVolume()[i]; row.NetworkFitness = spfr.GetFitness(i - diffrence); row.PredictionForTommorow = spfr.GetPredicted(i - diffrence); row.AccualClosingForTommorow = spfr.GetAccual(i - diffrence); mergedData.Add(row); } Investor.Investor investor = new Investor.Investor(mergedData); investor.StartMoney = investorStartMoney; investor.SimulateAll(); //save the output string f = Utilities.OutputFileName("investor.csv"); System.IO.StreamWriter file = new System.IO.StreamWriter(f); file.Write(investor.GetCSVOutput()); file.Close(); return f; }
public string PreprocesData() { var rsdr = new RawStockDataReader(_filename); int cnt = rsdr.GetCount(); if (rsdr.GetCount() < _period + 1) throw new IndexOutOfRangeException("Dataset is to small"); var closing = rsdr.GetClosing(); var highest = rsdr.GetHighest(); var opening = rsdr.GetOpening(); var lowest = rsdr.GetLowest(); var volume = rsdr.GetVolume(); var dates = rsdr.GetDates(); var sma = TechnicalAnalisysMethods.SimpleMovingAverage(closing, _period, 0, cnt-1); sma = NormalizeColumnRescaling(sma).ToArray(); var ema = TechnicalAnalisysMethods.ExponentialMovingAverage(closing, _period, 0, cnt - 1); ema = NormalizeColumnRescaling(ema).ToArray(); var dema = TechnicalAnalisysMethods.DoubleExponentialMovingAverage(closing, _period, 0, cnt - 1); dema = NormalizeColumnRescaling(dema).ToArray(); var roc = TechnicalAnalisysMethods.ROC(closing, _period, 0, cnt - 1); var rsi = TechnicalAnalisysMethods.RSI(closing, _period, 0, cnt - 1); rsi = NormalizeColumnRescaling(rsi).ToArray(); var natr = TechnicalAnalisysMethods.NormalizedAverageTrueRange(closing, highest, lowest, _period, 0, cnt - 1); natr = NormalizeColumnRescaling(natr).ToArray(); var obv = TechnicalAnalisysMethods.OnBalanceVolume(closing, volume, 0, cnt - 1); obv = NormalizeColumnRescaling(obv).ToArray(); var chosc = TechnicalAnalisysMethods.ChaikinOscilator(closing, highest, lowest, volume, _period, _period*2, 0, cnt - 1); chosc = NormalizeColumnRescaling(chosc).ToArray(); var adx = TechnicalAnalisysMethods.AverageDirectionalMovementIndex(closing, highest, lowest, _period, 0, cnt - 1); adx = NormalizeColumnRescaling(adx).ToArray(); closing = NormalizeColumnRescaling(closing).ToArray(); highest = NormalizeColumnRescaling(highest).ToArray(); opening = NormalizeColumnRescaling(opening).ToArray(); lowest = NormalizeColumnRescaling(lowest).ToArray(); volume = NormalizeColumnRescaling(volume).ToArray(); var tsf = TechnicalAnalisysMethods.TimeSeriesForecast(closing, _period, 0, cnt - 1); for (int i = _period; i < cnt -1; i++) { _outputDates.Add(dates[i]); List<double> learingExample = new List<double>(); for (int j = _period-1; j >= 0; j--) { //Opening,Highest,Lowest,Closing,Volume List<double> day = new List<double>(); int i_day = i - j; day.Add(opening[i_day]); //0 day.Add(highest[i_day]); //1 day.Add(lowest[i_day]); //2 day.Add(closing[i_day]); //3 day.Add(volume[i_day]); //4 day.AddRange(rsdr.Records[i_day].CalculatePercentChange(rsdr.Records[i_day-1])); //+5 kolumn day.Add(sma[i_day]); //9 day.Add(ema[i_day]); //10 day.Add(dema[i_day]); //11 day.Add(roc[i_day]); //12 day.Add(rsi[i_day]); //13 day.Add(natr[i_day]); //14 day.Add(obv[i_day]); //15 day.Add(chosc[i_day]); //16 day.Add(tsf[i_day]); //17 nowosc day.Add(adx[i_day]); //18 nowosc learingExample.AddRange(day); } learingExample.Add(GetNextDayOfWeek(rsdr.Records[i].Date)); double desiredOutput = (rsdr.Records[i+1].Closing - rsdr.Records[i].Closing) / rsdr.Records[i].Closing; learingExample.Add(desiredOutput); _outputNumbers.Add(learingExample); } SaveResults(); return _outputFilename; }