Treasury Management Platforms at Apex

This document provides an overview of how treasury management platforms at Apex can leverage Moment’s trading and portfolio management products to deliver personalized, automated bond portfolios to their clients. The first section, Strategy & Account Setup, covers the process of creating a menu of strategies for users and assigning user portfolios to strategies. The second section, Daily Optimization Flow, describes the daily process that treasury management platforms should follow to pull SOD holdings from Apex, generate proposed trades using Moment's Portfolio Optimizer, and automatically execute those trades through Moment's Execution Management System. The final section covers how to display reference data, pricing data, and analytics to users on their holdings.

Strategy & Account Setup

1. Create Strategies

Create a set of strategies that you would like to offer to users. Whenever you optimize a portfolio, you’ll provide the user’s target strategy to Moment’s Portfolio Optimizer, which will propose a set of trades to bring the user’s portfolio in line with their target strategies. When choosing what strategies to offer to their users, most platforms follow one of two approaches:

Offering a Menu of Strategies

It’s common for platforms to simply offer a menu of predefined strategies that users can browse and allocate to. We’ve listed some of the most common strategies for treasury management platforms below, as well as the associated strategy schemas that can be provided to Moment’s Portfolio Optimizer to generate proposed trades.


1-6 Month Ladder

[
  {
    "type": "universe",
    "filter": {
	    "type": {"equal_to": "treasury"},
      "treasury_subtype": {"in_list": ["bill", "note", "bond"]}
    }
  },
  {
    "type": "ladder_policy",
    "period_length": 1, // months
    "num_periods": 6,
    "weight_tolerance": 0.025
  }
]

1-12 Month Ladder

[
  {
    "type": "universe",
    "filter": {
	    "type": {"equal_to": "treasury"},
      "treasury_subtype": {"in_list": ["bill", "note", "bond"]}
    }
  },
  {
    "type": "ladder_policy",
    "period_length": 1, // months
    "num_periods": 12,
    "weight_tolerance": 0.025
  }
]

1-18 Month Ladder

[
  {
    "type": "universe",
    "filter": {
	    "type": {"equal_to": "treasury"},
      "treasury_subtype": {"in_list": ["bill", "note", "bond"]}
    }
  },
  {
    "type": "ladder_policy",
    "period_length": 1, // months
    "num_periods": 18,
    "weight_tolerance": 0.025
  }
]

1-3 Year Ladder

[
  {
    "type": "universe",
    "filter": {
	    "type": {"equal_to": "treasury"},
      "treasury_subtype": {"in_list": ["bill", "note", "bond"]}
    }
  },
  {
    "type": "ladder_policy",
    "period_length": 3, // months
    "num_periods": 12,
    "weight_tolerance": 0.025
  }
]

1-5 Year Ladder

[
  {
    "type": "universe",
    "filter": {
	    "type": {"equal_to": "treasury"},
      "treasury_subtype": {"in_list": ["bill", "note", "bond"]}
    }
  },
  {
    "type": "ladder_policy",
    "period_length": 5, // months
    "num_periods": 12,
    "weight_tolerance": 0.025
  }
]

Offering Custom Strategies Based on User Inputs

Because treasury ladders are typically very simple to define in Moment’s modeling schema, some platforms allow users to define a custom ladder duration. Instead of choosing from a menu of strategies with different durations, the user simply inputs the length of the ladder in terms of months to maturity (which can default to a common value like 24 months).

In this case, the strategy schema should be as follows:

[
  {
    "type": "universe",
    "filter": {
	    "type": {"equal_to": "treasury"}
      "treasury_subtype": {"in_list": ["bill", "note", "bond"]}
    }
  },
  {
    "type": "ladder_policy",
    "period_length": 1, // months
    "num_periods": {USER_INPUT_HERE},
    "weight_tolerance": 0.025
  }
]

2. Assign Accounts to Strategies

When a user selects a strategy from the menu or builds a custom strategy, you should save that strategy schema internally and associate it with the user’s account. You’ll need the user’s strategy schema in order to call Moment’s Portfolio Optimizer and generate proposed trades.

Daily Optimization Flow

Every day, you’ll want to determine whether any of your user’s portfolios require attention and, if so, process any proposed trades. To do this, you should

  1. Pull the user’s start-of-day (SOD) holdings from Apex.
  2. Call Moment’s Portfolio Optimizer with the user’s SOD holdings and target strategy.
  3. Review the proposed trades.
  4. Submit the approved trades to the Orders API.

Let’s dive into each of these in more detail.

1. Pull SOD Holdings from Apex

You can pull the user’s SOD holdings from Apex’s SOD Files System.


2. Run Moment's Portfolio Optimizer


Given a set of holdings and a target strategy, Moment’s Portfolio Optimizer will automatically propose the necessary trades in order to invest the user’s portfolio or bring the user’s portfolio into alignment with the target strategy. For each account, you should call the Submit an Optimization Endpoint to run an optimization. Here’s a sample API request body for a new account with $10M assigned to the 1-6 Month Treasury Ladder strategy:

{
  "accounts": [
    {
      "account_id": "{APEX_ACCOUNT_ID}",
      "federal_tax_rate": 0.0,
      "state_tax_rate": 0.0,
      "cash": 10000000.0,
      "state": "CA",
      "risk_group_id": null,
      "holdings": [
	      {"instrument_id": "USD", "quantity": 10000000}
      ],
      "strategy": {
        "schema_version": 1,
        "constraints": [
            {
	            "type": "universe",
	            "filter": {
                "type": {"equal_to": "treasury"},
                "treasury_subtype": {"in_list": ["bill", "note", "bond"]}
            }
            },
            {
	            "type": "ladder_policy",
	            "period_length": 1,
	            "num_periods": 6,
	            "weight_tolerance": 0.025
            }
        ]
      },
      "assignment_date": "{TODAY}"
    }
  ]
}

For an account with existing holdings, you simply include the ISIN and quantity in par value for each instrument in the holdings field. Here’s an example holdings schema for a portfolio with five holdings ($1M par value each) and $5M in uninvested cash.

"holdings": [
   {"instrument_id": "USD", "quantity": 5000000},
   {"instrument_id": "US912821CX10", "quantity": 1000000},
   {"instrument_id": "US91282CLB53", "quantity": 1000000},
   {"instrument_id": "US912810RP57", "quantity": 1000000},
   {"instrument_id": "US91282CLG41", "quantity": 1000000},
   {"instrument_id": "US91282CLA70", "quantity": 1000000},
]

3. Review Proposed Trades

You can retrieve the results of an optimization using the Get Optimization Orders Endpoint, which returns the proposed trades for the portfolio. An example response is shown below.

{
    "orders": [
        {
            "account_id": "APEX_ACCOUNT_ID",
            "instrument_id": "US912797KL06",
            "quantity": 2175000.0,
            "side": "buy",
            "limit_price": 99.565,
            "limit_ytw": 5.22,
            "tax_effective_limit_ytw": 5.22,
            "net_money": 2165538.75,
            "block_id": 0,
            "par_value": 1000.0
        },
        {
            "account_id": "APEX_ACCOUNT_ID",
            "instrument_id": "US912797MC88",
            "quantity": 1182000.0,
            "side": "buy",
            "limit_price": 98.726,
            "limit_ytw": 5.04,
            "tax_effective_limit_ytw": 5.04,
            "net_money": 1166941.32,
            "block_id": 1,
            "par_value": 1000.0
        },
        {
            "account_id": "APEX_ACCOUNT_ID",
            "instrument_id": "US912828YE44",
            "quantity": 2156000.0,
            "side": "buy",
            "limit_price": 99.871,
            "limit_ytw": 5.54,
            "tax_effective_limit_ytw": 5.54,
            "net_money": 2165888.189347826,
            "block_id": 2,
            "par_value": 1000.0
        },
        {
            "account_id": "APEX_ACCOUNT_ID",
            "instrument_id": "US912828YY08",
            "quantity": 1178000.0,
            "side": "buy",
            "limit_price": 98.849,
            "limit_ytw": 4.98,
            "tax_effective_limit_ytw": 4.98,
            "net_money": 1167298.1901086955,
            "block_id": 3,
            "par_value": 1000.0
        },
        {
            "account_id": "APEX_ACCOUNT_ID",
            "instrument_id": "US91282CFQ96",
            "quantity": 2141000.0,
            "side": "buy",
            "limit_price": 99.84,
            "limit_ytw": 5.133,
            "tax_effective_limit_ytw": 5.133,
            "net_money": 2166082.2804347826,
            "block_id": 4,
            "par_value": 1000.0
        },
        {
            "account_id": "APEX_ACCOUNT_ID",
            "instrument_id": "US91282CGG06",
            "quantity": 1169000.0,
            "side": "buy",
            "limit_price": 99.652,
            "limit_ytw": 4.912,
            "tax_effective_limit_ytw": 4.912,
            "net_money": 1167552.6001086957,
            "block_id": 5,
            "par_value": 1000.0
        }
    ]
}

4. Submit Approved Trades for Auto-Execution

Once you’ve reviewed the proposed orders, you can submit them for automated execution. Apex correspondents should use Apex’s Fixed Income Orders API to submit proposed orders for execution. Submitted orders will flow through to Moment’s Execution Management System, which automatically executes them at the best available price across multiple sources of liquidity and books executed trades into Apex’s back office for post-trade processing. The diagram below illustrates the end-to-end lifecycle of a trade, including pre-trade risk checks, automated smart order routing, and automated post-trade processing and reporting.


Displaying Data on User Portfolios

Portfolio Statistics & Analytics

To show statistics and analytics to users on their portfolios, you can use Moment’s Portfolio Analytics Endpoint. Provide the user’s holdings and the endpoint will return the minimum, maximum, and average yield to worst, yield to maturity, S&P rating, coupon, duration, and years to maturity, as well as the forecasted cashflows of the portfolio.

Reference & Pricing Data

To display reference data and prices for users' holdings, you can leverage Moment's Reference Data API and Evaluated Prices API.

FAQ

What if I want to offer corporate and CD strategies?

If you would like to offer investment strategies that include corporate bonds or certificates of deposit, reach out to Moment’s team! We will work closely with you to define a set of template strategies that you can offer to your users. You can also use our suite of backtesting tools to compare the performance of treasury bond, corporate bond, and certificate of deposit portfolios historically.