Setting and adjusting holdings directly

Prev Next

The standard way to update a portfolio is to book transactions and ask LUSID to generate holdings on demand.

However, if you don’t have a suitable transaction feed, you can set or adjust holdings directly in a portfolio instead. You tell LUSID what your holdings should be on a given date, and LUSID makes the portfolio match. Transactions before and after that date continue behaving normally.

Set or adjust?

These are separate operations. Note the following:

  • Both operations take the same inputs: a list of holdings (instrument, units, and optionally cost, tax lots, sub-holding keys and holding properties) and an effective date.

  • Neither operation creates a profit or loss. If you adjust a holding of 5,000 BP shares at a cost of £50,000 down to 4,000 shares at £36,000, LUSID records the change as an adjustment rather than a sale, and there is no realised gain/loss.

Set holdings

Adjust holdings

What it does

Makes the whole portfolio match the list you send

Changes only the holdings you send

Holdings you leave out

Reduced to zero, including cash

Left untouched

Typical use

Take-on at go-live; a full positions file from a manager or custodian

Fixing one or two positions; topping up cash

API

BatchSetHoldings

BatchAdjustHoldings

Luminesce

Lusid.Portfolio.Holding.Writer with a WriteAction of Set

Lusid.Portfolio.Holding.Writer with a WriteAction of Adjust (the default)

Note: You can't currently set or adjust holdings in the LUSID web app.

What LUSID does when you set or adjust

LUSID stores your list as a target for the effective date. When you generate holdings, LUSID compares the target with the holdings your transactions produce up to that point and generates special ‘true up’ output transactions to close the gap: AdjustmentIncrease, AdjustmentDecrease, or Adjustment for cost-only changes.

Note: You can't edit transactions of these types because LUSID rebuilds them every time. To change the result, change the target (set or adjust again), or book a separate transaction for the difference.

Because LUSID stores the target rather than a fixed change, the result stays correct even if your data changes. If a backdated trade arrives late, LUSID shrinks or grows the true-up so the holding on that date still matches your target. More information.

Common use cases

Taking on a portfolio. Set holdings once on the go-live date, and book transactions from then on. You can still load historic transactions later; any dated before go-live are absorbed into the true-up, so the go-live position doesn't move.

Receiving positions instead of transactions. If an external manager or custodian sends you a positions file, set holdings from it each time it arrives. Each set trues the portfolio up to the latest file.

Correcting one bad position. If a manager reported the wrong units or price for one instrument, you don't need to resend the whole file. Adjust holdings for just that instrument, at the same effective date as the original set. LUSID replaces that one holding in the target and leaves the rest of the set as it was.

Recording a late trade or cancel that should change the position. By default, LUSID absorbs a late trade dated before a set, because the set is treated as the truth. If the trade is genuinely extra to the set, you can stamp it to apply afterwards instead.