Meta Analysis
Live Deployment Automation
Introduction
This page explains how use QuantConnect API in an interactive notebook to deploy and stop a set of live trading algorithms in QC Cloud.
Get Project Ids
To automate live deployments for multiple projects, save the projects under a single directory in QuantConnect Cloud. This tutorial assumes you save all the projects under a /Live
directory.
Follow the below steps to get the project Ids of all projects under the /Live
directory:
- Open a research notebook.
- Call the
list_projects
method to get a list of all project responses. - Obtain the project Ids for the projects in
/Live
directory.
list_project_response = api.list_projects()
project_ids = [ project.project_id for project in list_project_response.projects if project.name.split("/")[0] == "Live" ]
Deploy Live Algorithms
Follow these steps to progromatically deploy the preceding projects with the QuantConnect API:
- Compile all the projects and cache the compilation Ids with a dictionary.
- Get the Ids of all the live nodes that are available and sort them by their speed.
- Configure your brokerage and environment.
- Deploy the projects and cache the project Ids of the successful deployments.
compile_id_by_project_id = {} for project_id in project_ids: compile_response = api.create_compile(project_id) if not compile_response.success: print(f"Errors compiling project {project_id}: \n{compile_response.errors}") else: compile_id_by_project_id[project_id] = compile_response.compile_id
live_nodes = [] node_response = api.read_project_nodes(project_ids[0]) if not node_response.success: print(f"Error getting nodes: \n{node_response.errors}") else: nodes = sorted( [node for node in node_response.nodes.live_nodes if not node.busy], key=lambda node: node.speed, reverse=True ) node_ids = [node.id for node in nodes]
Check the length of node_ids
is greater than 0 to ensure there are live nodes available.
For example, to use the QC paper brokerage, run:
base_live_algorithm_settings = { "id": "QuantConnectBrokerage", "user": "", "password": "", "environment": "paper", "account": "" } version_id = "-1" # Master branch
deployed_ids = [] for project_id, compile_id in compile_id_by_project_id.items(): # Deploy live algorithm node_id = node_ids[len(deployed_ids)] # Fastest node available live_response = api.create_live_algorithm(project_id, compile_id, node_id, base_live_algorithm_settings, version_id) if not live_response.success: print(f"Errors deploying project {project_id}: \n{live_response.errors}") else: print(f"Deployed {project_id}") deployed_ids.append(project_id)
Stop Live Algorithms
To stop multiple live algorithms from an interactive notebook through the QuantConnect API, call the api.stop_live_algorithm
method with each project Id.
for project_id in project_ids: stop_response = api.stop_live_algorithm(project_id) if not stop_response.success: print(f"Errors stopping live algorithm {project_id}: \n{stop_response.errors}") else: print(f"Successfully stopped live algorithm {project_id}")
Examples
Example 1: Create New GPU Deployment
The following example will create a new live algorithm deployment using a GPU live node with the Interactive Brokers in a jupyter notebook. It can help with a streamline deployment.
# Instantiate QuantBook instance for researching. qb = QuantBook() # Get all the nodes available in the current project. project_nodes = api.read_project_nodes(qb.project_id) # Obtain the most powerful live GPU node which is idling. live_node_id = max( [x for x in project_nodes.nodes.live_nodes if x.has_gpu and not x.busy], key=lambda x: x.cpu_count ).id # Compile the project before deploying. compilation = api.create_compile(qb.project_id) compile_id = compilation.compile_id # Deploy the live algorithm with the brokerage settings. brokerage_settings = { "id": "InteractiveBrokersBrokerage", "ib-user-name": "user-name", "ib-account": "account-number", "ib-password": "password", "ib-weekly-restart-utc-time": "00:00:00" } result = api.CreateLiveAlgorithm(qb.project_id, compile_id, live_node_id, brokerage_settings)