/// <summary> /// Refresh the data source, polling the API. /// </summary> private void timerRefresh_Tick(object sender, EventArgs e) { if (_processing) { return; } _processing = true; statusLabel.Text = "Updating Results for Backtest Id: " + _backtestId + "..."; Async.Add(new APIJob(APICommand.BacktestResults, (backtestResult, errors) => { //Handle login and API errors: switch (QuantConnectPlugin.HandleErrors(errors)) { //Handle project specific actions with a login error: case APIErrors.NotLoggedIn: this.SafeInvoke(d => d.ShowLogin(() => { FormOpenProject form = new FormOpenProject(); form.StartPosition = FormStartPosition.CenterScreen; form.Show(); })); this.SafeInvoke(d => d.Close()); return; } //Handle Results Packet: PacketBacktestResult packet = (PacketBacktestResult)backtestResult; this.SafeInvoke(d => d.SetBacktestResult(packet)); }, _backtestId)); // End of Async } // End of timer:
/// <summary> /// Read this backtest result back: /// </summary> public PacketBacktestResult BacktestResults(string backtestId) { PacketBacktestResult packet = new PacketBacktestResult(); try { var request = new RestRequest("backtests/read", Method.POST); request.AddParameter("application/json", JsonConvert.SerializeObject(new { backtestId = backtestId }), ParameterType.RequestBody); packet = Execute <PacketBacktestResult>(request); } catch (Exception err) { Console.WriteLine("QuantConnect.RestAPI.BacktestResults(): " + err.Message); } return(packet); }
static async Task MainAsync(string[] args) { try { // Init the new API: email, password. API api = new API(); await api.Authenticate("*****@*****.**", "demo123"); Console.WriteLine("=========================================="); Console.WriteLine("Test 1: Create Project: "); PacketCreateProject projectCreated = await api.ProjectCreate("New Test Project"); Console.WriteLine("New Project Id: " + projectCreated.ProjectId); int newProjectId = projectCreated.ProjectId; Console.WriteLine("=========================================="); Console.WriteLine("Test 2: List Projects: "); PacketProject projects = await api.ProjectList(); foreach (Project project in projects.Projects) { Console.WriteLine("Name: " + project.Name + " Id: " + project.Id + " Date: " + project.Modified.ToLongTimeString()); } Console.WriteLine("=========================================="); Console.WriteLine("Test 3: Update Our New Project: (Set new project as basic template strategy)"); List <QCFile> files = new List <QCFile>(); files.Add(new QCFile("Main.cs", System.IO.File.ReadAllText("demo.cs"))); PacketBase updateSuccess = await api.ProjectUpdate(newProjectId, files); Console.WriteLine("Updated project: " + updateSuccess.Success); Console.WriteLine("=========================================="); Console.WriteLine("Test 4: List Project Contents:"); var projectFiles = await api.ProjectFiles(newProjectId); foreach (QCFile file in projectFiles.Files) { Console.WriteLine("File Name: " + file.Name + " Contents: " + file.Code); } Console.WriteLine("=========================================="); Console.WriteLine("Test 5: Compile Project:"); PacketCompile compileResult = await api.Compile(newProjectId); Console.WriteLine("CompileId: " + compileResult.CompileId); foreach (CompileLog entry in compileResult.Logs) { Console.WriteLine("Compile Result : Time: " + entry.Time + " Type: " + entry.Type.ToString() + " Entry: " + entry.Entry); } Console.WriteLine("=========================================="); Console.WriteLine("Test 6: Backtest Compiled Project:"); PacketBacktest backtestResult = await api.Backtest(newProjectId, compileResult.CompileId, "New Random Name!"); Console.WriteLine("Backtest Id: " + backtestResult.BacktestId); Console.WriteLine("=========================================="); Console.WriteLine("Test 7: Reading Backtest Results:"); PacketBacktestResult readResult = await api.BacktestResults(backtestResult.BacktestId); Thread.Sleep(3000); foreach (Chart chart in readResult.Results.Charts.Values) { Console.WriteLine("Result Chart Name: " + chart.Name); } Console.WriteLine("=========================================="); Console.WriteLine("Test 8: Reading Backtest List:"); PacketBacktestList backtestList = await api.BacktestList(newProjectId); foreach (var summary in backtestList.Summary) { Console.WriteLine("Backtest: " + summary.BacktestId + " Requested: " + summary.Requested.ToShortDateString()); Console.WriteLine("=========================================="); Console.WriteLine("Test 9: Delete Backtest:"); PacketBase deleteBacktest = await api.BacktestDelete(summary.BacktestId); if (deleteBacktest.Success) { Console.WriteLine("Deleted: " + summary.BacktestId); } } Console.WriteLine("=========================================="); Console.WriteLine("Test 8: Delete Project: "); PacketBase deleteSuccess = await api.ProjectDelete(newProjectId); Console.WriteLine("Deleted project: " + deleteSuccess.Success.ToString()); } catch (Exception ex) { Console.WriteLine("=========================================="); Console.WriteLine(ex.ToString()); } Console.ReadKey(); }
/// <summary> /// Set the results: /// </summary> public void SetBacktestResult(PacketBacktestResult result) { this._results = result; this._backtestResultUpdated = true; }
public static void Consumer() { while (true) { if (Queue.Count > 0) { APIJob job; if (Queue.TryDequeue(out job)) { switch (job.Command) { case APICommand.Authenticate: bool loggedIn = false; if (job.Parameters.Length == 2) { loggedIn = QuantConnectPlugin.API.Authenticate((string)job.Parameters[0], (string)job.Parameters[1]); } job.Callback(loggedIn, new List <string>()); break; case APICommand.ProjectList: var packet = QuantConnectPlugin.API.ProjectList(); List <Project> projectList = new List <Project>(); if (packet.Projects != null) { projectList = packet.Projects; } job.Callback(projectList, packet.Errors); break; case APICommand.NewProject: var projectCreate = QuantConnectPlugin.API.ProjectCreate(job.Parameters[0].ToString()); var newProject = 0; if (projectCreate.ProjectId != null) { newProject = projectCreate.ProjectId; } job.Callback(newProject, projectCreate.Errors); break; case APICommand.OpenProject: var files = new PacketProjectFiles(); List <File> projectFiles = new List <File>(); if (job.Parameters.Length == 1) { files = QuantConnectPlugin.API.ProjectFiles((int)job.Parameters[0]); } if (files.Files != null) { projectFiles = files.Files; } job.Callback(projectFiles, files.Errors); break; case APICommand.CheckQCAlgoVersion: bool latestversion = QuantConnectPlugin.API.CheckQCAlgorithmVersion(); job.Callback(latestversion, new List <string>()); break; case APICommand.Compile: QuantConnectPlugin.SaveToCloud(false); var compile = new PacketCompile(); if (job.Parameters.Length == 1) { compile = QuantConnectPlugin.API.Compile((int)job.Parameters[0]); } job.Callback(compile, compile.Errors); break; case APICommand.UpdateTemplate: job.Callback(true, new List <string>()); break; case APICommand.BacktestResults: var backtestResult = new PacketBacktestResult(); if (job.Parameters.Length == 1) { backtestResult = QuantConnectPlugin.API.BacktestResults((string)job.Parameters[0]); } job.Callback(backtestResult, backtestResult.Errors); break; } } } Thread.Sleep(10); } }