Overview
The Tilt Portfolio Optimization Platform enables you to create personalized portfolio optimizations for your clients. This guide walks through the complete workflow from initial organization setup to generating optimized trade proposals.Step 1: Organization Setup
Configure Asset Classes
We’ll start by defining the asset classes available in your organization. An asset class consists of a name, description, and a benchmark that represents it. We’ll first search for available benchmark indexes, and then use that to create the asset class.Search Available Benchmarks
Create Asset Classes
Now we can create an asset class using one of our benchmarks. The example below usesM75BNK-R, which is the identifier for the SPY ETF.
Step 2. Portfolio Setup
Now that we have an asset class, let’s create a portfolio which uses that asset class. We can make an example portfolio with a single allocation to US equities, although it is possible to blend multiple asset classes together. We reference the asset class using it’s UUID that was returned when creating it. We can always list available asset classes to retrieve all asset classes. At this point, we can enable direct indexing per asset class, for this portfolio. Later, we can override this setting per client too.Step 3: Client and Account Setup
Understanding Clients and Accounts
In Tilt, a client represents a person or entity in your system, and each client can have one or more accounts. Holdings, portfolio assignments, and optimizations all operate at the account level. When you create a client, a default account is automatically created. The response includes both the client UUID and the account UUID within theaccounts array.
Create a Client
Let’s create a new client, which will also create a default account. Theexternal_id should be a string that represents this client in your system.
uuid: The client UUIDaccounts: An array containing the default account with its ownuuid
Update Account Holdings
Now, let’s assign the account to a portfolio and update its holdings. We use the portfolio UUID which was returned when creating the portfolio, or we can find it by listing the available portfolios.Update Direct Indexing Preference
We may override the direct indexing preferences for an account by updatingasset_class_settings. For example, we can disable direct indexing for a particular asset class:
Step 4: Portfolio Optimization
We can run optimization either for a single account, or in bulk across many accounts and clients. To start with, let’s run the optimization for a single account.Single Account Optimization
Run an optimization for an individual account to get customized portfolio weights:Generate Trade Proposals
Convert the optimized weights into actionable trade proposals.Step 5: Bulk Operations
Bulk Optimization and Proposals
We can optimize clients in bulk by calling the bulk optimize endpoint, passing in a list of client UUIDs. This responds with a list of proposal UUID’s, that we can then check the result of.Check Task Results
We can get the status for each proposal by calling the check status endpoint:Configuration Hierarchy
Optimization configuration can be set on the account-level, portfolio-level, and organization level, and are merged together based on this order of precedence:- Account config (highest priority)
- Portfolio config
- Organization config (fallback defaults)
customization_config field in their respective schemas.
Note that account and organization values outside of customization_config are unique to the account or organization, and are not merged. For example, factor_values is a top-level field in the organization schema. It is set globally for the organization, and cannot be overridden. Most properties are set via config however, and can be flexibly overridden as needed.
For list values (e.g.,
no_trade assets), the system uses the most specific non-empty list available. For example, if an account has any no_trade assets defined, these completely replace any organization-level no_trade assets rather than merging.