API Forecast Management

To focus on your alpha as captured by your forecasts, forecast endpoints have been created so you can programmatically create, update, and manage forecasts.

Forecast management sets up a series of API calls around managing forecast data. This is pre-requisite step in order to configure the Omega Point Optimizer to utilize your custom forecasts.

Create, Update, & Delete Forecasts

Forecast container are objects that connect the per-security forecasts with an optimization. Managing forecast containers and their metadata helps organize per-security forecast into manageable lists.

mutation.createForecast provisions the forecast object with a name and ID.
mutation.updateForecast allows an existing forecast object’s metadata to be updated.
mutation.deleteForecast will remove a specified forecast and all its associated data from the platform.

Upload Forecast Securities Data

The forecast data structure fills in the forecast container with per-security forecasts.

mutation.uploadForecastSecurities uploads forecast data for individual securities into the forecast container. 

uploadForecastSecurities Inputs

id — Provide the ID of forecast container, as returned from createForecast.
values.id — Each per-security forecast is identified by the security ID: sedol, or ticker + mic
values.expectedReturn — Forecasts should include an expected return value, and an optional horizon (default is 252 days). If an expected return is uploaded with a horizon of 20 day, then the expected return value is treated as its expected return on a monthly basis
values.label — Provide the security-level forecast with an optional label
values.asOf — The first valid date of the security’s forecast.
values.

uploadForecastSecurities Outputs

successCount - displays the number of per-security forecasts that were successfully uploaded into the system, where the provided values.id was found to be associated with an existing security.
unmappedSecurities - provides a report on which forecasts could not be mapped to a security. This node returns the values provided to values.id so you can identify which securities need to be updated.

uploadForecastSecurities Mutation

mutation(
  $forecastId:ShortId!,
  $forecastValues:[ForecastSecurityInput!]!
){
  uploadForecastSecurities(
    id:$forecastId,
    values: $forecastValues
  ){
    successCount
    unmappedSecurities{
      id{
        sedol
        ticker
      }
    }
  }
}


Query Variables

{
  "forecastId": "forecast_ID",
  "forecastValues": [
    {
      "id": {
        "sedol": "2588173",
        "ticker": "MSFT"
        "mic": "XNYS"
      },
      "label": "MSFT annualized forecast, updated 2017-01-05",
      "asOf": "2017-01-05",
      "expectedReturn": {
        "return": 2.45,
        "horizon": 252
      }
    },
    { ... } # Ideally a forecast includes all securities from a
            # portfolio. Missing securities are treated as 0 return
  ]
}

Reading Forecast Data

Forecasts can be retrieved in two ways. The first manner includes retrieving forecast metadata:

query.portfolio(id).forecast returns a full list of available forecast containers on a per-portfolio basis.
query.portfolio(id).forecast(id) retrieves a forecast container’s metadata and the per-security forecasts that have been provided using mutation.uploadForecastSecurities.

A second forecast retrieval method configures an optimization to use your custom forecasts, described in this next section.

Optimizing with Forecasts

query.model(id).optimization(positionSet(portfolioId) forecast(customForecast) ...) configures the optimization endpoint such that all optimization sub-nodes — such as performance, risk contributors, grouped exposure contributors, composition, etc — will return an optimized portfolio based on the provided forecasted metrics.

Note
Only one forecast can be selected, please ensure the selected forecast includes all the securities in your portfolio. If a security is missing from the forecast, it will be treated as having 0 expected return.

The Omega Point API returns forecast data in easy-to-use JSON format that mimics the request structure, and returns data within seconds. We hope these API endpoints superpower your research and rebalance processes.

Did this answer your question?