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