/// <summary> /// Read out a backtest in the project id specified. /// </summary> /// <param name="projectId">Project id to read</param> /// <param name="backtestId">Specific backtest id to read</param> /// <param name="getCharts">True will return backtest charts</param> /// <returns><see cref="Backtest"/></returns> public Backtest ReadBacktest(int projectId, string backtestId, bool getCharts = true) { var request = new RestRequest("backtests/read", Method.POST) { RequestFormat = DataFormat.Json }; request.AddParameter("application/json", JsonConvert.SerializeObject(new { projectId, backtestId }), ParameterType.RequestBody); BacktestResponseWrapper result; ApiConnection.TryRequest(request, out result); if (!result.Success) { // place an empty place holder so we can return any errors back to the user and not just null result.Backtest = new Backtest { BacktestId = backtestId }; } // Go fetch the charts if the backtest is completed and success else if (getCharts && result.Backtest.Completed) { // For storing our collected charts var updatedCharts = new Dictionary <string, Chart>(); // Create backtest requests for each chart that is empty foreach (var chart in result.Backtest.Charts) { if (!chart.Value.Series.IsNullOrEmpty()) { continue; } var chartRequest = new RestRequest("backtests/read", Method.POST) { RequestFormat = DataFormat.Json }; chartRequest.AddParameter("application/json", JsonConvert.SerializeObject(new { projectId, backtestId, chart = chart.Key.Replace(' ', '+') }), ParameterType.RequestBody); BacktestResponseWrapper chartResponse; ApiConnection.TryRequest(chartRequest, out chartResponse); // Add this chart to our updated collection if (chartResponse.Success) { updatedCharts.Add(chart.Key, chartResponse.Backtest.Charts[chart.Key]); } } // Update our result foreach (var updatedChart in updatedCharts) { result.Backtest.Charts[updatedChart.Key] = updatedChart.Value; } } // Use API Response values for Backtest Values result.Backtest.Success = result.Success; result.Backtest.Errors = result.Errors; // Return only the backtest object return(result.Backtest); }