Portfolio Upload

The Portfolio Upload feature allows the user to upload a CSV File to create a custom model. Each row in the CSV must be structured as Date-ISIN-Country-Currency-Allocation.

These columns represent the constraints for mapping a particular security. For instance, if a row is “2015-01-01,US0231351067,USA,USD,1”, then we may only map this row to a security in our database that exists on 2015-01-01, has region USA, and currency USD.


For “Country” and “Currency” columns, the feature supports the magic fields “ANY” and “P_”.

  • Will accept any security that meets other requirements ; i.e. disregard the field’s constraint while mapping the security.
  • For example: an “ANY” under the column “Country” will tell the mapping process to ignore the security’s country.
  • Note that a row with “ANY” will not blindly map to just ANY security. Based on factors (i.e. other securities in the upload, the ISIN code, etc.), the code will select the best match for the security.
  • This stands for “preferred”. It will map to a security that satisfies the preference.
  • For example, the row “US0231351067,2000-01-01,2021-01-01,P_USA,ANY” will map to a USA region security, if possible.
  • If there is no match satisfying the preferred field, it acts the same as ANY.


The upload is region agnostic. Users can input universes with securities from any region.

For setting the benchmark, the server will compute which region is most frequent within the uploaded universe.


“Invalid number of columns on row X” The input format needs five columns:
  • Date-ISIN-Country-Currency-Allocation.
If there are not exactly five columns in a row, this error will appear.
“Unable to parse as date: X” This error appears when X is not in YYYY-MM-DD format.
“Unable to parse allocation value at row X for security Y” This error appears when a given row has an allocation value that failed to be parsed as a number. Check to ensure the allocation is either in integer or decimal format.


Common Warning Messages Description
“No matches found for security with ISIN X on date Y” This means that the inputted security could not be found on the inputted date. This could be for a number of reasons including:
  • Typo in the input ISIN
  • Inputting a date before the security was public
  • Inputting a date after the security ceased to be public (i.e. due to acquisition, delisting, etc.)
  • Inputting a country/currency combination that does not exist for the given security, or a typo in the country or currency
“Date X is not on a trading day. Using next available trading day Y”
  • This means that a row in the inputted CSV contains a date that is not a trading date. This is due to weekends and/or holidays.
  • Note that if you have a portfolio with multiple countries, the holidays used to determine the model will be the union of the countries’ holidays.
“Multiple days map to the same trading day X”
  • This means that in the input CSV file, there are multiple dates which resolve to the same trading day.
  • For example, 12-25-2019 is a holiday (Christmas). If an input CSV had rows with 12-25-2019 and 12-26-2019, both rows would map to the same trading date of 12-26-2019.
  • In this case, the rows from the latest date (in this case, 12-26-2019) would be used to determine the portfolio holdings on that date.



What is the Warnings CSV file that was downloaded? If there were more than 10 rows from the input CSV that could not be mapped to a public security on the given date, the CSV will contain a list of all the rows that failed to be mapped.
When to use the magic field “ANY” versus “P_” (preferred?) For most use cases, using “ANY” will be sufficient. Behind the scenes, rows with “ANY” will try to map to securities with countries and currencies most similar to the other securities in the portfolio, or the country associated with the security’s ISIN code. However, if it is strongly preferred for a security to have a specific attribute (i.e. only want securities that trade in USD), then using the “P_...” keyword is a better choice.