Ejemplo n.º 1
0
        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);
            }
        }
        /// <summary>
        /// Backtest project on QC
        /// </summary>
        /// <param name="compile"></param>
        /// <param name="projectID"></param>
        public static string GetBacktestID(PacketCompile compile, int projectID)
        {
            string backtestID = "";
            string projectName = DateTime.Now.ToString() + " " + ProjectName;

            PacketBacktest backtestResult = API.Backtest(projectID, compile.CompileId, projectName);
            if (backtestResult.Errors.Count > 0 && backtestResult.Errors[0].Contains("Please upgrade your account"))
            {
                RateLimitReached = true;
                return backtestID;
            }
            else
            {
                backtestID = backtestResult.BacktestId;
            }
            return backtestID;
        }