Read Live Algorithm
Portfolio State
Request
Fetch the live portfolio state for the project Id provided. The /live/portfolio/read
API accepts requests in the following format:
ReadLivePortfolioRequest Model - Request to read the portfolio state from a live algorithm. | |
---|---|
projectId | integer Id of the project from which to read the live algorithm. |
Example |
{ "projectId": 23456789 } |
Responses
The /live/portfolio/read
API provides a response in the following format:
200 Success
LivePortfolioResponse Model - Contains holdings and cash of the live algorithm in the request criteria. | |
---|---|
portfolio | Portfolio object Portfolio object with the holdings and cash information. |
Example |
{ "portfolio": { "holdings": { "AAPL R735QTJ8XC9X": { "symbol": { "value": "string", "id": "string", "permtick": "string" }, "type": "Base", "currencySymbol": "$", "averagePrice": 0, "quantity": 0, "marketPrice": 0, "conversionRate": 0, "marketValue": 0, "unrealizedPnl": 0 } }, "cash": { "USD": { "symbol": "string", "amount": 0, "conversionRate": 0, "currencySymbol": , "valueInAccountCurrency": 0 } } } } |
Portfolio Model - Portfolio object with the holdings and cash information. | |
---|---|
holdings | object Dictionary of algorithm holdings information. |
cash | object Dictionary of algorithm cash currencies information. |
Example |
{ "holdings": { "AAPL R735QTJ8XC9X": { "symbol": { "value": "string", "id": "string", "permtick": "string" }, "type": "Base", "currencySymbol": "$", "averagePrice": 0, "quantity": 0, "marketPrice": 0, "conversionRate": 0, "marketValue": 0, "unrealizedPnl": 0 } }, "cash": { "USD": { "symbol": "string", "amount": 0, "conversionRate": 0, "currencySymbol": , "valueInAccountCurrency": 0 } } } |
Holding Model - Live results object class for packaging live result data. | |
---|---|
symbol | Symbol object Represents a unique security identifier. This is made of two components, the unique SID and the Value. The value is the current ticker symbol while the SID is constant over the life of a security. |
type | string Enum Type of tradable security / underlying asset. Options : ['Base', 'Equity', 'Option', 'Commodity', 'Forex', 'Future', 'Cfd', 'Crypto'] |
currencySymbol | string The currency symbol of the holding. |
averagePrice | number Average Price of our Holding in the currency the symbol is traded in. |
quantity | number Quantity of the Symbol we hold. |
marketPrice | number Current Market Price of the Asset in the currency the symbol is traded in. |
conversionRate | number Current market conversion rate into the account currency. |
marketValue | number Current market value of the holding. |
unrealizedPnl | number Current unrealized P/L of the holding. |
Example |
{ "symbol": { "value": "string", "id": "string", "permtick": "string" }, "type": "Base", "currencySymbol": "$", "averagePrice": 0, "quantity": 0, "marketPrice": 0, "conversionRate": 0, "marketValue": 0, "unrealizedPnl": 0 } |
Symbol Model - Represents a unique security identifier. This is made of two components, the unique SID and the Value. The value is the current ticker symbol while the SID is constant over the life of a security. | |
---|---|
value | string The current symbol for this ticker. |
id | string The security identifier for this symbol. |
permtick | string The current symbol for this ticker. |
Example |
{ "value": "string", "id": "string", "permtick": "string" } |
Cash Model - Represents a holding of a currency in cash. | |
---|---|
symbol | string Gets the symbol used to represent this cash. |
amount | number Gets or sets the amount of cash held. |
conversionRate | number The currency conversion rate to the account base currency. |
currencySymbol | object The symbol of the currency, such as $. |
valueInAccountCurrency | number The value of the currency cash in the account base currency. |
Example |
{ "symbol": "string", "amount": 0, "conversionRate": 0, "currencySymbol": , "valueInAccountCurrency": 0 } |
401 Authentication Error
UnauthorizedError Model - Unauthorized response from the API. Key is missing, invalid, or timestamp is too old for hash. | |
---|---|
www_authenticate | string Header |
Examples
The following example demonstates creating, reading, updating, and listing live algorithms of a project through the cloud API.
from base64 import b64encode from hashlib import sha256 from time import time from requests import get, post BASE_URL = 'https://www.quantconnect.com/api/v2/' # You need to replace these with your actual credentials. # You can request your credentials at https://www.quantconnect.com/settings/ # You can find our organization ID at https://www.quantconnect.com/organization/ USER_ID = 0 API_TOKEN = '____' ORGANIZATION_ID = '____' def get_headers(): # Get timestamp timestamp = f'{int(time())}' time_stamped_token = f'{API_TOKEN}:{timestamp}'.encode('utf-8') # Get hased API token hashed_token = sha256(time_stamped_token).hexdigest() authentication = f'{USER_ID}:{hashed_token}'.encode('utf-8') authentication = b64encode(authentication).decode('ascii') # Create headers dictionary. return { 'Authorization': f'Basic {authentication}', 'Timestamp': timestamp } # Authenticate to verify credentials response = post(f'{BASE_URL}/authenticate', headers = get_headers()) print(response.json()) # -------------------- ### Create Live Algorithm # Define placeholder IDs for compilation and node (replace with actual values) project_id = 12345678 compile_id = "compile_id..." node_id = "node_id..." # Prepare the data payload for creating a live algorithm with necessary details payload = { "versionId": "-1", # Use the latest version of the algorithm "projectId": project_id, # ID of the project to deploy as a live algorithm "compileId": compile_id, # Compilation ID for the algorithm code "nodeId": node_id, # Node ID where the algorithm will run "brokerage": { # Brokerage configuration for live trading "id": "QuantConnectBrokerage", # Brokerage identifier "user": "", # Brokerage username (replace with actual value) "password": "", # Brokerage password (replace with actual value) "environment": "live-paper", # Trading environment (live or paper) "account": "" # Brokerage account ID (replace with actual value) }, "dataProviders": { # Data provider configuration "QuantConnectBrokerage": { "id": "QuantConnectBrokerage" # Data provider identifier } }, "parameters": {}, # Optional algorithm parameters (empty in this example) "notification": {} # Optional notification settings (empty in this example) } # Send a POST request to the /live/create endpoint to deploy the algorithm response = post(f'{BASE_URL}/live/create', headers=get_headers(), json=data) # Parse the JSON response into python managable dict from the API result = response.json() # Extract the deploy ID from the response for future operations deploy_id = result['deployId'] # Check if the request was successful and print the result if result['success']: print("Live Algorithm Created Successfully:") print(result) ### Read Live Algorithm Statistics # Prepare data payload with project and deploy IDs to fetch statistics payload = { "projectId": project_id, # ID of the project "deployId": deploy_id # ID of the deployed live algorithm } # Send a POST request to the /live/read endpoint to get algorithm statistics response = post(f'{BASE_URL}/live/read', headers=get_headers(), json=payload) # Parse the JSON response into python managable dict result = response.json() # Check if the request was successful and print the statistics if result['success']: print("Live Algorithm Statistics:") print(result) ### Liquidate Live Algorithm # Prepare data payload with project ID to liquidate the algorithm payload = { "projectId": project_id # ID of the project to liquidate } # Send a POST request to the /live/update/liquidate endpoint to liquidate response = post(f'{BASE_URL}/live/update/liquidate', headers=get_headers(), json=payload) # Parse the JSON response into python managable dict result = response.json() # Check if the request was successful and print the result if result['success']: print("Live Algorithm Liquidated Successfully:") print(result) ### Stop Live Algorithm # Prepare data payload with project ID to stop the algorithm payload = { "projectId": project_id # ID of the project to stop } # Send a POST request to the /live/update/stop endpoint to stop the algorithm response = post(f'{BASE_URL}/live/update/stop', headers=get_headers(), json=payload) # Parse the JSON response into python managable dict result = response.json() # Check if the request was successful and print the result if result['success']: print("Live Algorithm Stopped Successfully:") print(result) ### List Live Algorithms # Prepare data payload with filters for listing live algorithms payload = { "status": "Running", # Filter to show only running algorithms "start": 1717801200, # Start time (Unix timestamp) for the list range "end": 1743462000 # End time (Unix timestamp) for the list range } # Send a POST request to the /live/list endpoint to list algorithms response = post(f'{BASE_URL}/live/list', headers=get_headers(), json=payload) # Parse the JSON response into python managable dict result = response.json() # Check if the request was successful and print the list if result['success']: print("List of Live Algorithms:") print(result)