Exemple #1
0
        public static List <Day> Backtest(Database db, Mixture mixture, string symbol, DateTime startDate, DateTime endDate,
                                          double initialEquity, double marginFactor, double tradeCost)
        {
            var preloadStart = startDate.AddYears(-1);
            var allBars      = new DataSeries <Bar>(symbol, db.QueryAll <DbBar>(x => x.Symbol == symbol, "Timestamp")
                                                    .Select(DataPreprocessing.DbBarToBar));
            var bars      = DataPreprocessing.TrimToWindow(allBars, DataPreprocessing.GetWindow(preloadStart, endDate, allBars));
            var data      = DataPreprocessing.LoadTrainingSet(db, symbol, preloadStart, endDate, Signals.Null);
            var predictor = new MixturePredictor(mixture, data);

            Debug.Assert(bars.Length == data.Input.ColumnCount);
            var backtestStartIndex = bars.ToList().FindIndex(x => x.Timestamp >= startDate);

            // preload
            for (int t = 0; t < backtestStartIndex; t++)
            {
                predictor.Predict(t);
            }

            int totalPredictions   = 0;
            int correctPredictions = 0;

            // backtest
            var account = new VAccount(initialEquity, marginFactor, tradeCost);

            for (int t = backtestStartIndex + 1; t < bars.Length; t++)
            {
                var prediction = predictor.Predict(t - 1);
                Debug.Assert(prediction != 0);
                var wasCorrect = ActOnSignal(bars[t - 1], bars[t], prediction, account, symbol);
                totalPredictions++;
                if (wasCorrect)
                {
                    correctPredictions++;
                }
            }

            double correctPct = (double)correctPredictions / totalPredictions;

            return(null);
        }
Exemple #2
0
        //[Test]
        public void LocalEvolveTest()
        {
            var mongoDb = TestHelpers.GetCleanDatabase();
            var db      = new Database(mongoDb);

            var protoRun      = new ProtoRun(db, "LocalEvolveTest", 4, Initialization.MakeProtoChromosome(), 10, 6, 4, 4, 0.05);
            var trainingStart = "11/11/2001";
            var validationEnd = "05/12/2003";
            var dataSets      = MakeTrainingAndValidationSets(db, trainingStart, validationEnd);
            var run           = Functions.Evolve(protoRun, new LocalParallelTrainer(), dataSets.Item1, dataSets.Item2);

            Trace.WriteLine("Generation fitnesses: " + run.Generations.Select(x => x.Evaluated.Fitness).Join(", "));
            var bestMixtures = run.Generations.SelectMany(g => g.Mixtures).OrderByDescending(m => m.Evaluated.Fitness).Take(10).ToList();

            var testingSet = MakeTrainingSet(db, validationEnd, "12/12/2003");

            Lists.Repeat(bestMixtures.Count, i => {
                var predictor     = new MixturePredictor(bestMixtures[i], testingSet);
                var testedFitness = Functions.ComputeFitness(predictor, testingSet, 20);
                Trace.WriteLine(string.Format("Tested fitness for best mixture #{0}: {1}", i, testedFitness));
            });
        }
Exemple #3
0
 static MixtureEval EvaluateMixture(Mixture m, DataSet data)
 {
     using (var mixturePredictor = new MixturePredictor(m, data))
         return(new MixtureEval(m, ComputeFitness(mixturePredictor, data)));
 }