Пример #1
0
        public Report Evaluate(IEnumerable <StockHandle> stocks, DateTime dateUnderAnalysis)
        {
            // XXX: system is only created to get the name for the report
            var system  = myTradingSystemBuilder();
            var report  = new BackTestingReport(system.Name, dateUnderAnalysis);
            var lockObj = new object();

            Parallel.ForEach(stocks, stock =>
            {
                using (PerfMon.Profile("Evaluating stock: {0}", stock.Isin))
                {
                    lock ( lockObj )
                    {
                        system = myTradingSystemBuilder();
                    }

                    var systemResult  = system.Evaluate(stock, dateUnderAnalysis);
                    var tradingResult = PerformBackTesting(systemResult);

                    lock ( lockObj )
                    {
                        report.AddResult(tradingResult);
                    }
                }
            });

            return(report);
        }
Пример #2
0
        private Report RunBackTesting(Func <TradingSystem> tradingSystemBuilder)
        {
            using (PerfMon.Profile("Performing back-testing"))
            {
                var stockListBuilder = new StockListBuilder();
                stockListBuilder.Add(StockArgs.Catalog);

                var task   = new BackTestingTask(tradingSystemBuilder, new DibaBroker());
                var report = task.Evaluate(stockListBuilder.Stocks, DateTime.Today.GetMostRecentTradingDay());

                return(report);
            }
        }
Пример #3
0
        private Report RunStockRankingEvaluation(Func <TradingSystem> tradingSystemBuilder)
        {
            using (PerfMon.Profile("Performing evaluation"))
            {
                var stockListBuilder = new StockListBuilder();
                stockListBuilder.Add(StockArgs.Catalog);

                var task   = new StockRankingTask(tradingSystemBuilder);
                var report = task.Evaluate(stockListBuilder.Stocks, DateTime.Today.GetMostRecentTradingDay());

                return(report);
            }
        }
Пример #4
0
        private void RenderReport(Report report)
        {
            if (!Directory.Exists(ReportOutputDirectory))
            {
                Directory.CreateDirectory(ReportOutputDirectory);
            }

            using (PerfMon.Profile("Rendering report"))
            {
                var renderer = new HtmlRenderer();
                renderer.Render(report, ReportOutputDirectory);
            }

            Console.WriteLine("Report written to: {0}", ReportOutputDirectory);
        }