Block trading for multiple accounts

Investment advisors often have use cases which require trading once on behalf of many customers. DriveWealth can facilitate this via APIs specifically designed for managing money.

Accounts that use this flow must be setup as managed by an advisor:

GET /back-office/accounts/:accountID
{
  "id": "e41ec4b9-2c65...",
  "accountNo": "ABCD000001",
  "accountType": {
    "name": "LIVE",
    "description": "Live Account"
  },
  "accountMgmtType": {
    "name": "RIA_MANAGED",
    "description": "Robo Advisor Managed Account"
  },
  "tradingType": {
    "name": "CASH",
    "description": "Cash account"
  },   
  "nickname": "Daryl's Robo Advisor Managed Account",
  "userID": "e41ec4b9-2c65...",
  "ria": {
    "advisorID": "c85b6469-a426...",
    "productID": "product_5a5d538e...",
    "portfolioID": "portfolio_f12cf2d6..."
  },
  ...
}

Refer to Opening accounts to learn more about the Account creation process.

Step-by-step

Step 1: Getting the Beginning of Day file (optional)

Many advisors need to know all of their customers’ positions at the start of the day. This is usually piped into Portfolio Management Software or other advisor tools. If you need this, refer to the Get Beginning of Day API.

Step 2: Place a block trade

Placing a block trade follows the same workflows described in Creating an order. However, rather than specifying a customer’s Account, DriveWealth will provide you the details for a unique Master Trading Account. This Account is in your firm’s name, and does not need to be separately funded.

POST /back-office/orders
{
  "accountNo": "{masterAccountNum}",
  "orderType": "LIMIT",
  "symbol": "ABCD",
  "side": "BUY",
  "quantity": 1000,
  "price": 135
}

Response:
{
  "orderNo": "ORDA000321",
  "orderID": "FJ.40456fd3-"
}

Step 3: Allocating the execution

After the trade has been executed, you must now indicate which customers participated in that trade. You do so by creating an Allocation:

POST /back-office/managed/allocations
{
  "userID": "{advisorUserID}",
  "orders": [
    {
      "orderID": "FJ.40456fd3-",
      "allocations": [
        {
          "accountID": "ABCD000023",
          "qty": 10.3,
          "useClientFunds": true
        },
        {
          "accountID": "ABCD000038",
          "qty": 32.932,
          "useClientFunds": true
        }
      ]
    }
  ]
}

All customers receive the same unit price. They will also receive a Trade Confirmation, Order, and Transaction posted to each Account.

Step 4: Cleanup

All trades done in the Master Trading Account need to be allocated somewhere. This Account won’t permanently hold any cash or securities.

To aid in finding unallocated trades, use the Advisor List All Orders API. This is similar to listing all Orders for an Account, but also shows whether these Orders are fully allocated to customers.

Sometimes, some quantity of shares will not be allocated by the advisor, purposely. This can happen when customers participated in a trade equally, but the amount of shares purchased or sold was not evenly divisible. Each day, DriveWealth will look for unallocated shares from the previous day, and if it finds any, will automatically allocate them to a unique Cleanup Account. This is another Account in the firm’s name that can permanently hold assets.

By default, DriveWealth will also automatically liquidate any securities held in the Cleanup Account each day, to avoid long term exposure.