Vision Upload Format: HoldingsFeed

Vision Portfolio Management Application Layer: Data Feeds

| Application Feeds |


Data Feed: HoldingsFeed

Category: TransactionFeed

Summary:

    The HoldingsFeed feed is used to create Holding instances for one or more Portfolio or IndexAccount instances for one or more time periods. Instances of the class Holding are used to represent the amount of a security that is held in an account at a specific point in time. Each record supplied by this feed is used to create a new Holding instance for the referenced account.

    The Holding class and its relationship to the Account subclasses are described in detail in the Portfolio Management Application Classes document. A number of related feeds are available to create new Portfolio, AggAccount, IndexAccount, and CompositeAccount instances and to update other account-based information.

Available Fields:

FieldHolding PropertyTypeDescription
--- Required Fields ---
acctId account String id of existing Portfolio or IndexAccount instance
secId security String id of existing Security instance
date date Date date of the Holding
--- Suggested Fields ---
mval _totalMarketValue Number market value of security held in account on date
shares _shares Number shares (or units of security) held in account on date
--- Other Fields ---
price _accountingPrice Number price used to compute market value of security
totalCost _totalCost Number total cost of holding
unitCost _totalCost Number unit cost of holdings
adjustDate _adjustmentDate Date date holding is adjusted through
currencyId baseCurrency String currency of the holding

Special Processing Rules:

  • The acctId, secId, and date fields must be supplied. The acctId must correspond to an existing Portfolio or IndexAccount instance. The secId must correspond to an existing Security instance. The date can be in any valid date format such as 19971215 or 12/15/97.

  • Holdings created by this feed will replace existing holdings for any acctId/date combination included in this feed. You must therefore supply a record for each security held for each acctId/date included, even if you are just modifying existing holdings.

  • The total market value of the holding is derived using the following rules:

    - If the mval field is supplied, it represents the market value.
    - Otherwise, if the secId is "CashUS", the value of the shares field is used, if present.
    - Otherwise, if the referenced account is an IndexAccount and no shares are supplied, the security's market capitalization as of the supplied date is used.
    - Otherwise, the market value is computed as the supplied shares field multiplied by the security's price. If the price field is supplied, this price is used; otherwise, the stored price for the security as of the supplied date is used. This computed value is multiplied by the unitCalc of the security's type (which is usually 1).

    This value is used to update the _totalMarketValue property of the holding. The value is assumed to be in the same currency as the referenced account.

  • If the mval field is not supplied, then the unitCalc field must be used in the SecurityType Master.

  • If the shares field is not supplied, it is calculated as the computed total market value divided by the supplied price if present, the security's price otherwise. If the shares field is supplied, it should refer to the actual shares held on the supplied date, unadjusted for any splits that have occurred since that date. This value is used to update the _shares property of the holding.

  • If the totalCost field is not supplied, it is computed as the product of the shares and unitCost fields if they are supplied. This value updates the _totalCost property of the holding. The value is assumed to be in the same currency as the referenced account.

  • If the price is supplied, it will update the _accountingPrice property of the holding as well as the _accountingPrice and accountingCurrency properties in the price record. The accountingCurrency is set to the currency of the Portfolio. If the mval field is not provided, this price will be used in the calculation of total market value if present. This value is assumed to be in the same currency as the referenced account and should represent the actual price on the supplied date, unadjusted for any splits that have occurred since that date.

  • For each acctId/date combination present, the account time series properties _totalMarketValue, _totalMarketValueCash, _totalMarketValueEquity, _totalMarketValueFixed, and _totalCost, are computed from the holdings created by this feed. The holding properties percentOfPort and percentOfEquity are also computed.

  • If an adjustDate is supplied, it will update the adjustmentDate property of the holding and split adjustments for the shares property will be computed relative to this date.

  • If a currencyId is supplied, the baseCurrency property for the holding will updated and totalMarketValue will be computed using this value.

  • Holdings are recreated for any AggAccount that includes one or more Portfolios updated for each date present in the feed. If Portfolio instances are included in the feed, the holdings cross reference by security is rebuilt for each date present.

Tips:

  • If the referenced account is an IndexAccount, you can create even-dollar holdings by setting the mval field to the same value for each record supplied for the acctId/date.

  • If the referenced account is an IndexAccount, you can create market-cap-weighted holdings by setting the mval field to the market capitalization for the security for each record supplied for the acctId/date. Alternatively, you can omit the shares and the mval fields, and the stored market capitalization for the security as of the supplied date will be used.

  • If the referenced account is an IndexAccount for which only the weight is available, use the HoldingsFeed with the mval field set to the weight. This has the effect of creating an IndexAccount with total market value of 100 with the individual securities held in proportion to their supplied weight.

Related Feeds:

Sample Upload:

The following tab-delimited feed could be used to create Portfolio holdings for several portfolios on a single date. Market values will be derived for each holding:

     Interface ExternalFeedManager upload: "HoldingsFeed" using:
     "date     acctId      secId     shares
      9712     PORT1       GM        1000
      9712     PORT1       F         2000
      9712     PORT1       CASH     20000
      9712     PORT2       IBM      10000
      9712     PORT2       DELL     15000
      9712     PORT2       CASH     20000
     " ;

The following tab-delimited feed could be used to create Portfolio holdings for several portfolios on several dates. Market values are assigned directly from this feed:

     Interface ExternalFeedManager upload: "HoldingsFeed" using:
     "date     acctId      secId     mval
      9712     PORT1       GM        1234.56
      9712     PORT1       F         2345.67
      9712     PORT1       CASH     20000.00
      9712     PORT2       IBM       9876.54
      9712     PORT2       DELL      8765.43
      9712     PORT2       CASH     10000.00
      9711     PORT1       GM        1233.21
      9711     PORT1       F         2344.32
      9711     PORT1       CASH     20000.00
     " ;

The following tab-delimited feed could be used to create even dollar holdings for several IndexAccounts:

     Interface ExternalFeedManager upload: "HoldingsFeed" using:
     "date     acctId       secId     mval
      9712     INDEX1       GM        100
      9712     INDEX1       F         100
      9712     INDEX1       C         100
      9712     INDEX2       IBM       100
      9712     INDEX2       DELL      100
      9712     INDEX2       HWP       100
      9711     INDEX1       GM        100
      9711     INDEX1       F         100
      9711     INDEX1       C         100
     " ;

The following tab-delimited feed could be used to create market-cap-weighted holdings for several IndexAccounts:

     Interface ExternalFeedManager upload: "HoldingsFeed" using:
     "date     acctId       secId
      9712     INDEX1       GM
      9712     INDEX1       F
      9712     INDEX1       C
      9712     INDEX2       IBM
      9712     INDEX2       DELL
      9712     INDEX2       HWP
      9711     INDEX1       GM
      9711     INDEX1       F
      9711     INDEX1       C
     " ;