Vision Upload Format: HoldingsFeed
Vision Portfolio Management Application Layer: Data 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:
Field | Holding Property | Type | Description |
---|---|---|---|
--- 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.
- PortfolioMaster: creates Portfolio instances
- PortfolioMaster: creates AggAccount instances
- PortfolioAggregates: defines Portfolio memberships in AggAccounts over time
- CompositeAccountMaster: creates CompositeAccount instances
- CompositeAccountMembers: defines weighted combinations of Portfolio, AggAccount, IndexAccount, and/or other CompositeAccount instances that make up a composite over time
- IndexAccountMaster: creates IndexAccount instances
- IndexAccountBuilder: creates holdings for one or more IndexAccount instances over time using existing Security Universe instances and a weighting rule
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 " ;