Ejemplo n.º 1
0
        void Supervise()
        {
            ThreadSync = SyncContext.Current;

            Console.Write("Supervisor is loading dataset...");
            var db          = Database.GetProductionDatabase(MongoHostInfo.FromAppSettings());
            var trainingSet = DataPreprocessing.LoadTrainingAndValidationSets(db, MasterRequest.Symbol, MasterRequest.StartDate,
                                                                              MasterRequest.EndDate, MasterRequest.ValidationPct,
                                                                              VersaceMain.GetSignalFunc(MasterRequest.SignalType)).Item1;

            Console.WriteLine("done");

            Console.Write("Supervisor is starting {0} slaves..", SlaveCount);

            Slaves = Lists.Repeat(SlaveCount, _ => {
                Slave slave = new Slave(CloneDataSet(trainingSet));
                slave.Task  = Task.Factory.StartNew(slave.Run).ContinueWith(t => {
                    Slaves.RemoveAll(x => x.Task == t);
                    if (t.IsFaulted)
                    {
                        Console.WriteLine("Slave faulted: " + t.Exception);
                    }
                });
                return(slave);
            });

            Console.WriteLine("done");

            Waiter.Wait(() => !Slaves.Any());
        }
Ejemplo n.º 2
0
        public Slave(MasterRequest masterReq)
        {
            Database = Database.GetProductionDatabase(ConfigurationManager.AppSettings["MongoHost"]);
            var dataSets = DataPreprocessing.MakeTrainingAndValidationSets(masterReq.Symbol, masterReq.StartDate,
                                                                           masterReq.EndDate, masterReq.ValidationPct, DataPreprocessing.GetSignalFunc(masterReq.SignalType));

            TrainingSet = dataSets.Item1;
        }
Ejemplo n.º 3
0
        public static void DownloadData(string predictedSymbol, DateTime start, DateTime end)
        {
            var dir = @"d:\users\wintonpc\git\Quqe\Share\VersaceData";

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            foreach (var ticker in DataPreprocessing.GetTickers(predictedSymbol))
            {
                Console.Write("Fetching {0} ...", ticker);
                using (var c = new WebClient())
                {
                    var fn = Path.Combine(dir, ticker + ".txt");

                    if (ticker.StartsWith("^DJ")) // historical downloads of dow jones indices are not allowed
                    {
                        GetDowJonesData(c, ticker, fn, start, end);
                    }
                    else
                    {
                        var address = string.Format("http://ichart.finance.yahoo.com/table.csv?s={0}&a={1}&b={2}&c={3}&d={4}&e={5}&f={6}&g=d&ignore=.csv",
                                                    ticker, start.Month - 1, start.Day, start.Year, end.Month - 1, end.Day, end.Year);
                        c.DownloadFile(address, fn);
                    }

                    var fixedLines = File.ReadAllLines(fn).Skip(1).Reverse().Select(line => {
                        var toks      = line.Split(',');
                        var timestamp = DateTime.ParseExact(toks[0], "yyyy-MM-dd", null, DateTimeStyles.AdjustToUniversal);
                        var open      = double.Parse(toks[1]);
                        var high      = double.Parse(toks[2]);
                        var low       = double.Parse(toks[3]);
                        var close     = double.Parse(toks[4]);
                        var volume    = long.Parse(toks[5]);
                        return(string.Format("{0:yyyyMMdd};{1};{2};{3};{4};{5}",
                                             timestamp, open, high, low, close, volume));
                    });
                    File.WriteAllLines(fn, fixedLines);
                }
                Console.WriteLine("done");
            }
        }
Ejemplo n.º 4
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);
        }