IBM Cloud API Docs

Introduction

The Portfolio Optimization service helps investment managers understand the optimal trade-offs between risk and reward based on changes in the portfolio. The framework is built upon a flexible mathematical model which allows for solving a wide range of investment problems based on the objectives and constraints.

Error handling

This API uses standard HTTP response codes to indicate whether a method completed successfully. A 200 response always indicates success. A 400 type response is some sort of failure, and a 500 type response usually indicates an internal system error.

Methods

Construct an optimal portfolio

This operation constructs a portfolio given certain constraints.

Use this operation to construct a new portfolio from a defined universe of assets. You must specify an investable amount.

The operation builds the optimal portfolio given a universe of assets, an objective, and constraints. This operation can be done on an absolute (no benchmark) or relative (against a benchmark) basis.

POST /portfolio/construct

Request

Custom Headers

  • API key obtained when you created the service

The specifications for constructing the portfolio

  • curl --request POST --url https://ibm.com/api/v1/optimization/portfolio/construct --header 'accept: application/json' --header 'content-type: application/json'  --header 'x-ibm-access-token: string' --data '{"constraints":[{"CashAdjust":0,"InPortfolio":"string","attribute":"string","constant":0,"description":"string","measure":"string","members":"string","portfolio":"string","relation":"string","timestep":0}],"objectives":[{"TargetPortfolio":"string","attribute":"string","description":"string","measure":"string","portfolio":"string","sense":"string","timestep":0}],"portfolios":[{"ParentPortfolio":"string","holdings":[{"asset":"string","quantity":0}],"name":"string","type":"string"}]}'
  • HttpResponse<String> response = Unirest.post("https://ibm.com/api/v1/optimization/portfolio/construct")
      .header("x-ibm-access-token", "string")
      .header("accept", "application/json")
      .header("content-type", "application/json")
      .body("{"constraints":[{"CashAdjust":0,"InPortfolio":"string","attribute":"string","constant":0,"description":"string","measure":"string","members":"string","portfolio":"string","relation":"string","timestep":0}],"objectives":[{"TargetPortfolio":"string","attribute":"string","description":"string","measure":"string","portfolio":"string","sense":"string","timestep":0}],"portfolios":[{"ParentPortfolio":"string","holdings":[{"asset":"string","quantity":0}],"name":"string","type":"string"}]}")
      .asString();
    
  • import http.client
    
    conn = http.client.HTTPSConnection("ibm.com")
    
    payload = "{"constraints":[{"CashAdjust":0,"InPortfolio":"string","attribute":"string","constant":0,"description":"string","measure":"string","members":"string","portfolio":"string","relation":"string","timestep":0}],"objectives":[{"TargetPortfolio":"string","attribute":"string","description":"string","measure":"string","portfolio":"string","sense":"string","timestep":0}],"portfolios":[{"ParentPortfolio":"string","holdings":[{"asset":"string","quantity":0}],"name":"string","type":"string"}]}"
    
    headers = {
        'x-ibm-access-token': "string",
        'accept': "application/json",
        'content-type': "application/json"
        }
    
    conn.request("POST", "/api/v1/optimization/portfolio/construct", payload, headers)
    
    res = conn.getresponse()
    data = res.read()
    
    print(data.decode("utf-8"))
    

Response

Status Code

  • OK

  • Invalid input. The portfolio cannot be optimized.

  • Error occurred in the optimizer.

Example responses
  • [
      {
        "holdings": {
          "asset": "STRING",
          "optimizedQuantity": "DOUBLE",
          "optimizedTrade": "DOUBLE",
          "quantity": "DOUBLE"
        },
        "metadata": {
          "message": "STRING",
          "objectiveValue": "DOUBLE",
          "status": "STRING",
          "statusCode": "DOUBLE"
        },
        "performance": {
          "algorithm": "STRING",
          "threads": "DOUBLE",
          "time": "DOUBLE"
        }
      }
    ]
  • [
      {
        "description": "STRING",
        "httpcode": "DOUBLE",
        "requestendtimestamp": "STRING",
        "requeststarttimestamp": "STRING",
        "transactionid": "STRING"
      }
    ]
  • [
      {
        "description": "STRING",
        "httpcode": "DOUBLE",
        "requestendtimestamp": "STRING",
        "requeststarttimestamp": "STRING",
        "transactionid": "STRING"
      }
    ]

Rebalance the given portfolio

This operation optimizes a portfolio.

Use this operation to rebalance a portfolio based on an objective and constraints. The portfolio must be investable and contain assets with both values and quantities. This operation can be done on an absolute (no benchmark) or relative (against a benchmark) basis.

POST /portfolio/rebalance

Request

Custom Headers

  • API key obtained when you created the service

The specifications for rebalancing the portfolio

  • curl --request POST --url https://ibm.com/api/v1/optimization/portfolio/rebalance --header 'accept: application/json' --header 'content-type: application/json' --header 'x-ibm-access-token: string' --data '{"constraints":[{"CashAdjust":0,"InPortfolio":"string","attribute":"string","constant":0,"description":"string","measure":"string","members":"string","portfolio":"string","relation":"string","timestep":0}],"objectives":[{"TargetPortfolio":"string","attribute":"string","description":"string","measure":"string","portfolio":"string","sense":"string","timestep":0}],"portfolios":[{"ParentPortfolio":"string","holdings":[{"asset":"string","quantity":0}],"name":"string","type":"string"}]}'
  • HttpResponse<String> response = Unirest.post("https://ibm.com/api/v1/optimization/portfolio/rebalance")
      .header("x-ibm-access-token", "string")
      .header("accept", "application/json")
      .header("content-type", "application/json")
      .body("{"constraints":[{"CashAdjust":0,"InPortfolio":"string","attribute":"string","constant":0,"description":"string","measure":"string","members":"string","portfolio":"string","relation":"string","timestep":0}],"objectives":[{"TargetPortfolio":"string","attribute":"string","description":"string","measure":"string","portfolio":"string","sense":"string","timestep":0}],"portfolios":[{"ParentPortfolio":"string","holdings":[{"asset":"string","quantity":0}],"name":"string","type":"string"}]}")
      .asString();
    
  • import http.client
    
    conn = http.client.HTTPSConnection("ibm.com")
    
    payload = "{"constraints":[{"CashAdjust":0,"InPortfolio":"string","attribute":"string","constant":0,"description":"string","measure":"string","members":"string","portfolio":"string","relation":"string","timestep":0}],"objectives":[{"TargetPortfolio":"string","attribute":"string","description":"string","measure":"string","portfolio":"string","sense":"string","timestep":0}],"portfolios":[{"ParentPortfolio":"string","holdings":[{"asset":"string","quantity":0}],"name":"string","type":"string"}]}"
    
    headers = {
        'x-ibm-access-token': "string",
        'accept': "application/json",
        'content-type': "application/json"
        }
    
    conn.request("POST", "/api/v1/optimization/portfolio/rebalance", payload, headers)
    
    res = conn.getresponse()
    data = res.read()
    
    print(data.decode("utf-8"))
    

Response

Status Code

  • OK

  • Invalid input. The portfolio cannot be optimized.

  • Error occurred in the optimizer.

Example responses
  • [
      {
        "holdings": {
          "asset": "STRING",
          "optimizedQuantity": "DOUBLE",
          "optimizedTrade": "DOUBLE",
          "quantity": "DOUBLE"
        },
        "metadata": {
          "message": "STRING",
          "objectiveValue": "DOUBLE",
          "status": "STRING",
          "statusCode": "DOUBLE"
        },
        "performance": {
          "algorithm": "STRING",
          "threads": "DOUBLE",
          "time": "DOUBLE"
        }
      }
    ]
  • [
      {
        "description": "STRING",
        "httpcode": "DOUBLE",
        "requestendtimestamp": "STRING",
        "requeststarttimestamp": "STRING",
        "transactionid": "STRING"
      }
    ]
  • [
      {
        "description": "STRING",
        "httpcode": "DOUBLE",
        "requestendtimestamp": "STRING",
        "requeststarttimestamp": "STRING",
        "transactionid": "STRING"
      }
    ]