Portfolio report based on a particular timeseries

Hi ,

Say i want to see all the values of a particular historical time-series over a portfolio , is there anyway i can currently achieve this.

For instance , i want to see the volume (Volume is a historical timeseries) of a particular portfolio. This means that i want to see the individual volume of each position (or security) and aggregated value of the portfolio.
Here volume field can be substituted for any field in the historical timeseries.

Is this possible with the current OG infrastructure ?

Thanks
Vineeth

You mean you want to see the traded volume of the security associated with each position in a portfolio? Would you want to adjust this depending on the quantity of your position? Either way, the answer is yes, you can do this, but it requires a new function. There is already a function that returns a time series, but it requires the UniqueId of the time series in question (HistoricalTimeSeriesFunction) as the target, so it requires another function to resolve from the ExternalIdBundle of the security into a UniqueId in the HistoricalTimeSeriesMaster/Source.

I’ll try and put something together that will do the job for you.

Hello @Jim ,

Yes , that is exactly what i want. But then as you pointed out the user will have to somehow pass a parameter to the function to be executed here. In this case the parameter would be name of the field , that is “Volume” .
This parameter can also be values like “close”,“open”,“PX_LAST” or any other timeseries in the HistoricalTimeSeriesMaster/Source.
So my requirement here would be something like “per cycle computation” , but then if there is some other way to accomplish it , let me know.
Also i feel this is one basic functionality given by any portfolio management software.

Thanks
Vineeth

I’ve pushed a function to develop called ‘HistoricalTimeSeriesSecurityFunction’. There’s also three lines added to DemoStandardFunctionConfiguration. Firstly to add the function, then to add functions to do Position scaling and Node level summing. At the moment I’ve set it up so it does ‘unit scaling’, which means it does NOT multiple the series by the quantity of the position, but it is set to ‘summing’, which means it’ll try and sum the time series to aggregate nodes. This obviously won’t make sense for some measures and you may want to do something else here.

Hope that helps.

Hello @jim ,

Thanks for your quick reply.
If i see it right , you are maintaining a different DEFAULT_TSS_CONFIG for a different data field of historic time series.
Am i right here ?

Thanks
Vineeth

Ok , that is not it … :frowning:

Hello @jim ,
Can you tell me how the function to be executed understand which datafield i am looking for ?

Thanks
Vineeth

You should be able to add a portfolio value requirement of ‘Historical Time Series’ (HISTORICAL_TIME_SERIES), with a contraints of ‘DataField’ with a value of ‘PX_LAST’ or ‘PX_VOLUME’ for example. There are various other fields you can fiddle around with (StartDate, EndDate, IncludeStartDate, IncludeEndDate, etc) if you want. If you want the normalised time series values, use the MarketDataRequirementNames equivalent e.g. Market_Value.

As for DEFAULT_TSS_CONFIG, that allows you to specify which series is chosen if you have multiple available. E.g. choose a preferred data source or data provider first. The way it works is that it runs each rule against the field in question, adds up the scores for each matching time series and returns the one with the highest score. So if I have in my config (I’m showing the JSON version, you probably will need to edit via the XML version on the green screens):


   {
      "fieldName": "dataSource",
      "fieldValue": "BLOOMBERG",
      "rating": 3
    },
   {
      "fieldName": "dataSource",
      "fieldValue": "ICAP",
      "rating": 5
    },
   {
      "fieldName": "dataProvider",
      "fieldValue": "CMPL",
      "rating": 3
    },
   {
      "fieldName": "dataProvider",
      "fieldValue": "CMPN",
      "rating": 2
    },

and I have available:

  • dataSource = BLOOMBERG, dataProvider = CMPL, score = 3 + 3 = 6
  • dataSource = ICAP, dataProvider = CMPN, score = 5 + 2 = 7
Then I choose the ICAP data because it has a higher score. Note I usually need some wildcard scoring to catch anything that doesn't match, and give it a low score.