Migration notes 5.4
This page explains the changes required to migrate to the stated version of Atoti Market Risk.
Migrate to 5.4.2
Upgrading from version 5.4.1 - see Atoti Market Risk 5.4.2 Release Notes.
- Atoti Market Risk uses Atoti Server 6.0.18-sb3 and Atoti UI 5.1.x. For new features and fixes included in these releases, please see the Atoti UI documentation and Atoti UI Migration Notes, and the release notes for Atoti Server.
Headline announcement
- Dependency upgrades : This release includes updates to Atoti Server (6.0.18-sb3) and DaSH (3.3.1-AS6.0). These updates contain a number of bug fixes and improvements. Please see the release notes for these products for further information.
- DirectQuery table validation timeout : The timeout for DirectQuery table validation queries can now be configured with a property.
- Cash market data measures : Market data measures for Cash now correctly return the FX rate instead of using the FX post-processor with dynamic aggregation.
- Missing FX rates : Attempting to retrieve FX rates for missing currencies no longer causes an error or causes queries to fail.
Missing FX Rates
This release introduces a new behavior for FX conversion. When the application converts from the currency of a trade to the display currency, it attempts to retrieve an FX rate from the FxRateMarketData
store. This is handled by the FXRate
post-processor, utilizing the FXRateWrapper
bean. Before this release, no FX rates relating to the currency of the trade resulted in an error, causing queries to fail. In this release, instead of throwing an exception, the FXRate
post-processor returns null, so these trades are not included in the displayed results. Please take this into account. In this event a warning log is reported.
Configuration Properties
Properties added
Property | Default value | Description |
---|---|---|
directquery.schema.validation.table-validation-query-timeout | 1 minute | This property can be used to change the timeout that is used for table validation queries with DirectQuery. |
Migrate to 5.4.1
Upgrading from version 5.4.0 - see Atoti Market Risk 5.4.1 Release Notes.
- Atoti Market Risk uses Atoti Server 6.0.17-sb3 and Atoti UI 5.1.x. For new features and fixes included in these releases, please see the Atoti UI documentation and Atoti UI Migration Notes, and the release notes for Atoti Server.
Headline announcement
- Upgrade to Atoti 6.0.17-sb3 : This picks up the latest bug fixes and optimizations from Atoti.
- Fix Swagger UI : Swagger UI is now accessible and documents the REST endpoints in Atoti Market Risk.
- Fix Logback file configuration : The
mr-application/src/main/resources/logback-spring-file.xml
configuration has been fixed and writes logs to a local file. - Configurable parent child depth: You can now configure the maximum depth of parent-child hierarchies.
- Market Data chain changes: Market data chain has been changed: it is now required to add the sensitivity name and risk class levels in the views to display market data.
- Updated dashboards : A number of dashboards have been updated due to market data measure and context value changes. For details, see Updated dashboards.
- Compatibility with Atoti Sign-off 5.3: This version of Atoti Market Risk is compatible with Atoti Sign-off 5.3.
- Adjustment fixes: Cube level adjustments for the Sensitivity and VaR modules can now be executed and the adjusted values can be found in the UI by using the corresponding
<measure>_adjusted
measures. Deleting adjustments no longer fails when cubes are disabled.
Configurable parent child depth
You can now configure the maximum depth of the parent-child hierarchies (books, legal entities, counterparties) with new properties.
To achieve this, the stores BookHierarchy
, CounterpartyHierarchy
, LegalEntityHierarchy
now also have a variable number of fields to store the corresponding level entries.
In addition, the summary flat stores (PnLBaseStore
, SensiBaseStore
, BaseStore
) have a variable number of fields to be in line with the variable depth.
Market Data chain changes
xxx Current MD / xxx Previous MD
The following measures do not handle FX conversion anymore. They return the same value as the underlying xxx xxx MD Native
metric.
Correlation Current MD
Correlation Previous MD
CrossGamma Current MD
CrossGamma Current MD 2
CrossGamma Previous MD
CrossGamma Previous MD 2
Delta Current MD
Delta Previous MD
Dividend Current
Dividend Previous
Gamma Current MD
Gamma Previous MD
Vanna Current MD
Vanna Current MD 2
Vanna Previous MD
Vanna Previous MD 2
Vega Current MD
Vega Previous MD
Volga Current MD
Volga Previous MD
In addition, the axes needed to fetch the underlying market data are now required: sensitivity name ([Sensitivities].[Sensitivity].[SensitivityName]
), risk
class ([Risk].[Risk Classes].[RiskClass]
), risk factor, and other dimensional axes such as tenor/maturity/moneyness (for curve/surface/cubes market data).
Even if two pieces of market data are the same, they can’t be merged for display anymore.
Hidden measures
The following measures are now hidden, since the notion of native currency is not applicable to market data.
The value of a measure xxx MD Native
value is now equal to the value of the corresponding xxx MD
measure.
In addition, the axes needed to fetch the underlying market data are now required: sensitivity name ([Sensitivities].[Sensitivity].[SensitivityName]
), risk
class ([Risk].[Risk Classes].[RiskClass]
), risk factor, and other dimensional axes such as tenor/maturity/moneyness (for curve/surface/cubes market data).
Even if two pieces of market data are the same, they can’t be merged for display anymore.
Correlation Current MD Native
Correlation Previous MD Native
CrossGamma Current MD 2 Native
CrossGamma Current MD Native
CrossGamma Previous MD 2 Native
CrossGamma Previous MD Native
Delta Current MD Native
Delta Previous MD Native
Dividend Previous Native
Dividend Current Native
Gamma Current MD Native
Gamma Previous MD Native
Vanna Current MD 2 Native
Vanna Current MD Native
Vanna Previous MD 2 Native
Vanna Previous MD Native
Vega Current MD Native
Vega Previous MD Native
Volga Current MD Native
Volga Previous MD Native
Updated dashboards
The following dashboards have have been updated with the levels [Sensitivities].[Sensitivity].[SensitivityName]
and [Risk].[Risk Classes].[RiskClass]
added to their MDX queries so that market data can be displayed:
Atoti MR & PL/Story-Telling Target Views/Delta and Gamma P&L Explain
Atoti MR & PL/Story-Telling Target Views/Vega P&L Explain
MR/03 - PnL Explain/02 - Example for one trade
MR/03 - PnL Explain/03 - Vega Market data
MR/01 - VaR-ES/03 - VaR Explain Dashboard
has been fixed: a context value that was removed in a previous version was incorrectly used in the dashboard.
Configuration
Configuration properties
Properties added
Property | Default value | Description |
---|---|---|
mr.parent-child.book-depth | 15 | Maximum level of BookHierarchy . |
mr.parent-child.counterparty-depth | 10 | Maximum level of LegalEntityHierarchy . |
mr.parent-child.counterparty-depth | 5 | Maximum level of CounterpartyHierarchy . |
Properties changed
Property | Previous default | New default | Description |
---|---|---|---|
mr.sign-off.common.hierarchy.level2.approved | APPROVED | EXPORT_SUCCEEDED | This is for compatibility with Sign-off 5.3, ensuring the Official sign-off feed status is updated after export. |
Property | Previous default | New default | Description |
---|---|---|---|
mr.sign-off.sensi.sensi-cube-adjustments.hierarchies-to-exclude | Date@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,DynamicMaturities@DynamicBucketing,DynamicMoneyness@DynamicBucketing,DynamicTenors@DynamicBucketing,DayToDay@Dates | Date@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,DynamicMaturities@DynamicBucketing,DynamicMoneyness@DynamicBucketing,DynamicTenors@DynamicBucketing,MarketShiftDate@Dates,displayCurrency@Currencies,DayToDay@Dates | Added MarketShiftDate and DisplayCurrencies hierarchies to the list of excluded hierarchies as these are slicing hierarchies. |
Property | Previous default | New default | Description |
---|---|---|---|
mr.sign-off.var.var-cube-adjustments.hierarchies-to-exclude | Date@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,CalculationIds@Risk,DayToDay@Dates | Date@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,CalculationIds@Risk,MarketShiftDate@Dates,displayCurrency@Currencies,DayToDay@Dates | Added MarketShiftDate and DisplayCurrencies hierarchies to the list of excluded hierarchies as these are slicing hierarchies. |
Other changes
Sign-off 5.3 compatibility
In order to achieve compatibility with Atoti Sign-off 5.3 the following REST endpoint was added to SignOffRestService
: @PostMapping("/update-state")
.
Sign-off uses this endpoint to update the sign-off status in Atoti Market Risk.
note
If you have a custom implementation of ISignOffRestService
you will need to add this endpoint to be compatible with Sign-off 5.3.
Migrate to 5.4.0
Upgrading from version 5.3.0 - see Atoti Market Risk 5.4 Release Notes.
- Atoti Market Risk uses Atoti Server 6.0.14-sb3 and Atoti UI 5.1.x. For new features and fixes included in these releases, please see the Atoti UI documentation and Atoti UI Migration Notes, and the release notes for Atoti Server.
Headline announcement
-
Market Data API: The new Market Data API has been significantly updated with new features. It has also been moved to dedicated modules, the
market-data-api
library module and themarket-data-api-spring-boot-starter
module for easy auto-configuration. The changes include:- Improved design: The design of the Market Data API has been refined to better reflect real-life usage and remove unintended complexity. For details about the design and implementation suggestions, see Market Data API.
- MarketDataDateShift enum: Changed the
MarketDataDateShift
enum valueTODAY
toCURRENT_DAY
to clarify its meaning. - Interpolators: New interpolators are now accessible from the
IInterpolationService
:InterpolationMode.LINEAR
on two axes lets you perform linear interpolation on a 2D surface of values.InterpolationMode.VOL_TO_VARIANCE
on two axes lets you perform linear interpolation on a 2D surface of values, with a volatility-to-variance transformation applied to the input data and a variance-to-volatility transformation applied to the results of interpolation.InterpolationMode.LINEAR
on three axes lets you perform linear interpolation on a 3D cube of values.
- Changed new Market Data API data model: The
MarketDataSet
andID
fields in the new Market Data API data model have been swapped around. - Migrated scalar measures: The scalar sensitivities market data measures have been migrated to the new Market Data API.
- Support for Corporate Actions: Corporate actions (splits and dividends) are now supported using the new Market Data API.
warning
Important note for Taylor VaR: The Taylor VaR measure chains still use the deprecated market data API. Only the PnL Explain measure and market data chains have been updated to use the new market data API.
-
Atoti Server: Upgraded to Atoti Server 6.0.14-sb3.
-
Spring Boot 3: Upgraded to Spring Boot 3.2.0, which uses Spring Framework 6.
-
Hibernate: The application has been upgraded to Hibernate 6.3.1.Final.
-
H2: The application has been upgraded to H2 2.2.224.
-
Security configuration: Some classes related to security configuration have been moved from the
mr-common-config
project to themr-application
project. -
Spring Profiles: Profile-based configuration has been replaced with properties (backwards compatible). For details, see Profile-based configuration.
-
Fluent post-processors: Post-processor metrics are now set up in a Fluent style. The levels and hierarchies use strong types. For more details, see Fluent post-processor setup.
-
Specific alias classes for lambda generics: Lambda generics have been replaced with specific alias classes (e.g. MeasurePublisher for Consumer
intended for publishing measures). -
Topic Aliases: The topic aliases used by the Data Load Controller (DLC) are now defined for each topic rather than in a single place during DLC initialization.
-
New moneyness default value: The default value of the moneyness field in the sensitivities and market data has been changed from ATM to N/A.
-
Catalog name: The catalog has been changed from
MarketRiskAccelerator
toMR
. -
Combined cube metrics: The metrics of the combined cube are now defined in the class
MRCombinedCubeMeasuresConfig
, their definition in pure Copper is also provided but should not be used. For details, see The MRCombinedCube metrics. -
Property cleanup: The unused property
SENSITIVITY_TYPE
has been removed in theDynamicTenorsAndMaturitiesPostProcessor
class. -
Added a new abstract tuple publisher: Introduced new abstract tuple publisher (
ATableFormatTuplePublisher
) for publishers where the file format does not match the table data model. For details, see New abstract tuple publisher. -
Admin UI: The Admin UI has been upgraded to version 5.1.5. For details, see Upgrade to Admin UI 5.1.5.
-
PnL Explain with DirectQuery: PnL Explain is now working across the transition between DirectQuery and in-memory sensitivity cubes. For details, see PnL Explain with DirectQuery.
-
UI Activation: An import of
react-query
is required when usingmr-sdk
. See UI activation for more details. -
Databricks: Added support for DirectQuery with Databricks.
-
Removed Debug measures: The debug market data measures and subsequent classes have been removed from the product.
-
Scalar sensitivities default: The default data model for sensitivities changed from vector model to scalar model.
-
Vector sensitivities deprecated: The vector sensitivities data model is deprecated and planned for removal. If you need to switch from vectorized to scalar sensitivities, see Customizing Atoti Market Risk to use store-backed maturity conversion with scalar sensitivities.
-
Market Data bookmark removed: The
Risk Factor History
bookmark underAtoti MR & PL/Story-Telling Target Views
has been removed. -
Content server reset on start: The default behavior driven by the in-memory database properties in
application.yaml
has been changed to reset the content server on start with the bookmarks folder (mr-application/src/main/resources/mr-bookmarks). -
Added topic alias
AllMarketData
: All the market data tables are regrouped under the new topic aliasAllMarketData
, used for loading the input files.
Breaking changes
- A number of classes named
...Helper(s)
have been renamed to...Utils
for naming consistency with similar classes. - All Utils and Constants classes, as well as other classes containing only static variables and/or methods, now have a private constructor.
com.activeviam.mr.common.calculations.adjustments.constants.AdjustmentsConstants
has been removed and the two constants from this class added tocom.activeviam.mr.common.constants.AdjustmentsConstants
.ASecurityConfig.PIVOT_USER_ROLES
has changed fromString[]
toList<String>
.- The
METRIC
variable on a number of measure chain classes is now a static constant in place of a final instance variable. - Fields on two What-If classes are now final, with corresponding getter/setter methods available.
- The lambda generic classes have been replaced by specific classes.
- Some classes related to security configuration have been moved from the
mr-common-config
project to themr-application
project. - In the
mr-common-config
project, the classUnsecuredDatabaseServiceConfig
has been renamed toWhatIfAwareUnsecuredDatabaseServiceConfig
. - The issue described in the ticket MR-1626
(trying to log in with a user that does not have admin rights throws a 403 HTTP error) has been fixed in the class
MRSecurityFilterChainsConfig
. - The
NoOpPostProcessor
is defined in the Common Library, the package is nowcom.activeviam.accelerator.common.postprocessor.impl
. - The tuple publishers that target multiple stores, or stores with a data model distinct from the input file format now extend
ATableFormatTuplePublisher
. - The unused property
SENSITIVITY_TYPE
has been removed in theDynamicTenorsAndMaturitiesPostProcessor
class. - The topic aliases used by the Data Load Controller (DLC) are now defined for each topic rather than in a single place during DLC initialization. The
ChannelParametersHolder::addTopic
now has a 4th parameter that holds the list of all topic aliases to which the topic belongs. The functionDataLoadControllerConfig::registerTopicAliases
computes the aliases based on this extension and shouldn’t be modified anymore. For details, see Step 3 in Data loading and unloading. - Replaced the Atoti Market Risk
ReferenceLevelLocationShift
post-processor with the Common LibraryReferenceLevelLocationShiftLight
. Any usage of the post-processor will have to be replaced, as will any usage of themr.metrics.rlshift.post-processor
property referring to the old plugin key. The default value of the property has been changed toReferenceLevelLocationShiftLight
. - The application has been upgraded to Hibernate 6.3.1.Final and H2 2.2.224. As a consequence, the content of the content server database has changed. See Migration of the content server database.
- The catalog name has been renamed from “MarketRiskAccelerator” to “MR”.
- The new configuration class
ApplicationJwtConfig
has been added to handle the configuration used for JWT authentication. - The constant
VALUE_CCY
inStoreFieldConstants
has been removed and replaced by the constantCCY
. - The
MRCombinedCube
metrics are now configured by beans with the qualifierSP_QUALIFIER__COMMON_MEASURE_BUILDERS
andSP_QUALIFIER__COMMON_MEASURES
. - The interface
IAsyncTask
has been replaced byIRefreshTask
that is more specific and used to perform refresh action upon DirectQuery refresh request. - Vectorized sensitivities have been deprecated: scalar sensitivities should be used instead of vectorized sensitivities.
- The default data model for sensitivities changed from vector model to scalar model.
- The CorporateAction store has been removed for scalar sensitivities, and deprecated for vectorized sensitivities: it is still used to handle dividends for vectorized sensitivities, but is not used anymore for scalar sensitivities.
- Stock splits are handled in a new store: the
SplitRatioMarketData
store is used for the handling of stock split ratios both for vectorized and scalar sensitivities. - New input files for Dividends and stock Split Ratios have been created.
- New Market Data input files: spot, curve, surface, cube, and correlation market data files have been created to replace the previous market data input file.
- The Market Data Cube has been deleted : Market data measures in the Sensitivities Cube need to be used to display market data instead of the Market Data Cube.
- The debug market data measures have been removed.
- The modules
mr-market-data-lib
andmr-market-data-config
have been removed. They were used for the configuration of the Market Data Cube. - In the ThetaCopper class, some methods have been renamed. The
marketDataPostProcessor
andscalarMarketDataPostProcessor
methods have been renamed. - The
com.activeviam.accelerator.common.dates.IMaturityConverter
interface has been removed from the modulemr-common-lib
and has been replaced by the interfacecom.activeviam.accelerator.common.dates.IMaturityConverter
. - Some methods have been added to the
ISensitivityMarketDataMeasures
interface and the following methods have been changed:scalarNativeIntermediateInterpolatedDividend
scalarNativeIntermediateInterpolatedTheta
vectorNativeIntermediateInterpolatedTheta
- For the market data measure chains configuration: the class names
*CurrentDateMarketDataChain
,*NextDateMarketDataChain
and*PreviousDateMarketDataChain
have been changed to use the new Market Data API. - The SQL scripts to create and load data for DirectQuery with Microsoft SQL Server and Snowflake have been modified to match the schema of the new Market Data API.
- Default content server startup settings changed to reset its content to the content in
mr-application/src/main/resources/mr-bookmarks
. No persistence upon restart with new default properties. - The
MaturityDate
&TradeDate
fields of theTradeAttributes
store, and theMaturityDates
andTenorDates
fields of theTradeSensitivities
store are now typed as Date instead of String. Code that requires these to be Strings will need updating. - The constructor of the
MraSimpleTenorConverter
class in themr-common-lib
module has changed. In addition to a String-typed default for tenors and maturities, this class now also requires a Date-typed default. This change is due to the type change of the fields mentioned above. - The properties beginning
mr.sensi.rules.<sensitivity-type>...
have been renamedmr.sensi.rules.<sensitivity-type>.pnl-explain
. This is to accommodate the newmr.sensi.rules.<sensitivity-type>.taylor-var
properties that allow Taylor VaR and PnL Explain calculations to be configured independently. - The
ISensiRuleConfigurationService
interface has been replaced by theIPnlExplainRuleConfigurationService
andITaylorVarRuleConfigurationService
interfaces. - The
ISensiRuleConfigurationServicAware
interface has been removed. - The method
getVaRExplainFormula
inIPnLExplainFormulaProvider
has been renamed togetPnlExplainFormulaForShift
as this method is now only used for PnL Explain calculations. - The constructor for the
PnLExplainFormulaProvider
class now requires anIPnlExplainRuleConfigurationService
instead of anISensiRuleConfigurationService
. - The
InputSelector
class has been renamed toPnlExplainInputSelector
. There is a correspondingTaylorVarInputSelector
and they both implementIInputSelector
. To autowire these beans you must now use the new qualifiers:SP_QUALIFIER__PNL_EXPLAIN_INPUT_SELECTOR
andSP_QUALIFIER__TAYLOR_VAR_INPUT_SELECTOR
. - The
IInputSelectorAware
interface has been replaced by theIPnlExplainInputSelectorAware
andITaylorVarInputSelectorAware
interfaces. - The
APnlVectorFromRiskSensiPostProcessor
post-processor now implements theITaylorVarFormulaProviderAware
interface instead of theIPnLExplainFormulaProviderAware
interface. - Tenor Converter / Maturity Converter: When a parsing error occurs, a null value (for object based return functions) or a NaN value (for double return functions) is returned.
Tenor Converter / Maturity Converter
When a parsing error occurs, a null value (for object based return functions) or a NaN value (for double return functions) is returned. The caller should take action to handle the error case correctly, for instance, by calling the error handler.
Profile-based configuration
The code in Atoti Market Risk will no longer change behavior based directly on Spring profiles. Instead, the behavior will be determined by properties. The properties can be set by profile-selected configuration files. Default property files are included to preserve backwards compatibility with the use of profiles.
In particular, instead of the profiles dist-data-node
, dist-query-node
, and forceNetty
(and the property directquery.enabled
), we have the following properties:
Property | Description | Values |
---|---|---|
starter.deployment.type |
Specifies the nature of the database used for the cube. | It can take three values:
|
starter.deployment.transport |
Specifies the messenger to use for communication between cubes. | It can take two values:
|
mr.enable.cubes.common=false |
An existing flag, which turns the MRCombinedCube polymorphic cube on or off. |
The following configuration files have been added to match the behavior of the profiles:
Spring profile | Configuration file | starter.deployment.type | starter.deployment.transport | combined.disable |
---|---|---|---|---|
default | in-memory |
local |
unset (false ) |
|
dist-data-node |
application-dist-data-node.yaml |
in-memory |
netty |
true |
dist-query-node |
application-dist-query-node.yaml |
query-node |
netty |
unset (false ) |
forceNetty |
application-forceNetty.yaml |
unset (in-memory ) |
netty |
unset (false ) |
See the Externalized Configuration section of the Spring Boot documentation for more information on profiles and property management.
The MRCombinedCube
metrics
The polymorphic metrics of the combined cube (using metrics from several underlying data cubes) are now defined by beans.
The configuration is located in MRCombinedCubeMeasuresConfig
configuration class.
The metrics could be defined in the legacy way under the qualifier @Qualifier(SP_QUALIFIER__COMMON_MEASURE_BUILDERS)
that will be aggregated by the cube configuration.
They can also be defined in Copper style with the qualifier @Qualifier(SP_QUALIFIER__COMMON_MEASURES)
. The Copper for polymorphic metrics is an alpha feature and
is only present for demonstration.
The Copper for polymorphic metrics is activated by the environment variable activeviam.feature.experimental.copper_in_distributed_cube.enabled=true
.
The Spring condition @ConditionalOnExperimentalCopperInDistributedCube
checks that the environment variable is set.
The Spring condition @ConditionalOnNotExperimentalCopperInDistributedCube
checks that the environment variable is not set.
PnL Explain with DirectQuery
By setting up Atoti Market Risk using in-memory node and DirectQuery nodes, the transition between the two nodes is now correctly handled for the PnL Explain computation. As before, the dates defined in the property mr.data-load.initial-business-dates are loaded on the in-memory node and NOT loaded in the DirectQuery node. However, on the DirectQuery node, the FXRates and MarketData stores are now loaded from both DirectQuery for the non-defined dates and from the files for the defined dates in the property. By doing this, the Day PnL Explain computation can fetch the market data for Day-1 and Day on the DirectQuery node of Day-1.
This is done by adding in-memory sources on DirectQuery setup:
Condition changes
Storage source | Previously used condition | Common condition (DQ & in-memory) | In-memory only condition | DirectQuery only condition |
---|---|---|---|---|
Local | @ConditionalOnLocalData | @ConditionalOnLocalSource | @ConditionalOnLocalData | @ConditionalOnDirectQueryWithLocalSource |
Azure | @ConditionalOnAzureData | @ConditionalOnAzureSource | @ConditionalOnAzureData | @ConfigurationDirectQueryWithAzureSource |
New Sources
A new source configuration dedicated to DirectQuery has been added by the configuration classes SensiPnLAzureCsvSourceConfig
, SensiPnLLocalCsvSourceConfig
, and DirectQuerySensiCsvSourceParametersProviderConfig
.
It loads the FX and market data on in-memory based for the dates defined by the property mr.data-load.initial-business-dates
.
It uses the same topics and aliases as the in-memory setup (Attributes/AllAttributes/FXRates for FX, DailySensiConfig/SensiConfig/AllSensi/AllAttributes/AllFacts/MarketData for Market Data).
A refresh issued to DirectQuery will also reload the initial data.
New qualifiers
To handle this source, several qualifiers have been added:
Constant | Qualifier | Type | Source |
---|---|---|---|
SP_QUALIFIER__DQ_SENSI_TOPIC_PUBLISHERS | “dq-sensi-topic-publishers” | Publisher generator Function |
Sensi for DirectQuery |
SP_QUALIFIER__DQ_SENSI_TOPIC_COLUMNS | “dq-sensi-topic-columns” | Columns generator Function |
Sensi for DirectQuery |
SP_QUALIFIER__DQ_SENSI_TOPIC_TO_STORE_AND_FILE_MAP | “dq-sensi-topic-to-store-and-file-map” | Definition of the topics | Sensi for DirectQuery |
Configuration classes
Files Modified
- Application configuration
- Measures configuration
- What-If configuration
- Security configuration
- Market Data configuration
- Interpolation configuration
- Preview Market Data property removal
- DirectQuery configuration
Application configuration
Three classes have been renamed from ...Helper(s)
to ...Utils
for consistency with similar classes. In MR, a Utils class is one that contains only static methods. These three classes are:
Old class name | New class name |
---|---|
DatastoreDescriptionHelper | DatastoreDescriptionUtils |
MeasureChainHelpers | MeasureChainUtils |
SchemaHelpers | SchemaUtils |
We have also consolidated two Utils classes: com.activeviam.mr.common.calculations.adjustments.constants.AdjustmentsConstants
has been removed and the two constants in this class have been moved to com.activeviam.mr.common.constants.AdjustmentsConstants
. These constants are unchanged, you simply need to update the import statements.
Utils classes and others, such as Constants classes, that contain only static variables and/or methods are not intended to be instantiated. Therefore, for clarity, we have added private constructors to these classes. They are as follows:
- ComponentVaRCalc
- CookieUtil
- DatastoreConstants
- DatastoreDescriptionUtils
- DimensionConstantsConfig
- DimensionUtils
- MeasureChainHelpers
- MeasureConstants
- SchemaConstants
- SignOffConstants
- StoreUtils
- WhatIfConstants
- WhatIfUtils
The type of the constant ASecurityConfig.PIVOT_USER_ROLES
has changed from String[]
to List<String>
, where the list is an unmodifiable list. This is to ensure the immutability of this constant.
Measures configuration
A number of abstract measure chains have a METRIC
field, representing the metric that the chain creates measures for. On all these classes, this is now a static constant in place of a final instance variable. These chains are:
- AESChain
- AETGChain
- AHDChain
- ASummaryESChain
- ASummaryETGChain
- ASummaryVaEChain
- ASummaryVaRChain
- ASummaryWESChain
- ASummaryWETGChain
- ASummaryWVaEChain
- ASummaryWVaRChain
- AVaEChain
- AVaRChain
- AWESChain
- AWETGChain
- AWVaEChain
- AWVaRChain
What-If configuration
A number of instance variables have been made private on What-If configuration classes. In all cases there is a corresponding getter and setter that was already available and is now required to be used in all cases. These fields are:
Class name | Field name |
---|---|
FileUploadPayload | filePathSeparator |
FileUploadPayload | topics |
FileUploadTopic | name |
FileUploadTopic | files |
Security configuration
The following files have been moved from the mr-common-config
project to the mr-application
project:
File name | Old package | New package |
---|---|---|
IUserLogoutSuccessHandler | com.activeviam.mr.common.config.security.filter | com.activeviam.mr.application.config.security |
CookieUtil | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
CorsConfig | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
JwtAuthenticationConfigurer | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
SameSiteConfig | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
SecurityJwtProperties | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
UserDetailsServiceConfig | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
In the mr-common-config
project, the class UnsecuredDatabaseServiceConfig
has been renamed to WhatIfAwareUnsecuredDatabaseServiceConfig
.
The following files, which were not used in the code, have been removed from the mr-common-config
project:
- CommonWebSecurityFiltersConfig
- ApplicationJwtConfig
- GlobalSecurityConfig
- InMemoryAuthenticationSecurityConfig
- InMemoryUserDetailsManagerBuilder
- PasswordEncoderConfig
The class MRSecurityFilterChainsConfig
has been changed to fix known issue MR-1626
(trying to log in with a user that does not have admin rights throws a 403 HTTP error).
The class DispatcherServletConfig
has been added in com.activeviam.mr.application.config.security
to contain cookie configuration taken from the MarketRiskApplication
class.
Preview Market Data property removal
The mr.enable.preview.market-data
property has been removed, together with the following Spring @Conditional
classes based on it:
Class | Condition | Replacement |
---|---|---|
@ConfigurationEnabledPreviewMarketData |
mr.enable.preview.market-data is true |
market-data-api-spring-boot-starter is a dependency of the current project. |
@ConfigurationDisabledPreviewMarketData |
mr.enable.preview.market-data is false |
|
@BeanEnabledPreviewMarketData |
mr.enable.preview.market-data is true |
market-data-api-spring-boot-starter is a dependency of the current project. |
@BeanDisabledPreviewMarketData |
mr.enable.preview.market-data is false |
|
@ConditionalOnPreviewMarketDataEnabled |
mr.enable.preview.market-data is true |
market-data-api-spring-boot-starter is a dependency of the current project. |
@ConditionalOnPreviewMarketDataDisabled |
mr.enable.preview.market-data is false |
DirectQuery configuration
The following configuration classes have been added to enable DirectQuery with Databricks:
Class | Details |
---|---|
DatabricksSessionConfig | Configures the connection to Databricks |
MRDirectQueryConfig | Imports required Databricks configuration classes |
Migration of market data measures to new Market Data API for scalar sensitivities
The market data measures for sensitivities chains have been migrated to the new Market Data API.
Several modifications were required, falling into the following categories:
- Introduced distinct measures for the previous date market data, rather than location-shifting the current date market data measures.
- Changed the native intermediate interpolated market data beans to generate market data retrieval measures based on the MarketDataProperties configuration properties, with a switching post-processor using the generated measures as underliers.
- Added a specific market data type (
SensitivityMarketDataType.EQ_SPOT
) for market data that requires multiplication by a split ratio for the next date market data measure.
The following classes have been modified in the mr-sensi-config
module:
Modified class | Changes |
---|---|
DeltaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
DeltaNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
DeltaPreviousDateMarketDataChain | New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD | |
GammaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
GammaNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
GammaPreviousDateMarketDataChain | New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD | |
VegaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
VegaNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
VegaPreviousDateMarketDataChain | New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD | |
VolgaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
VolgaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
VolgaPreviousDateMarketDataChain | New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD | |
CrossGammaCurrentDateMarketDataChain | New bean with Qualifier SPLIT_RATIO_2_CURRENT |
Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + CURRENT_MD_2_NATIVE_INTERMEDIATE_INT | |
CrossGammaNextDateMarketDataChain | New bean with Qualifier SPLIT_RATIO_2_NEXT |
Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + NEXT_MD_2_NATIVE_INTERMEDIATE_INT | |
CrossGammaPreviousDateMarketDataChain | New bean with Qualifier SPLIT_RATIO_2_PREVIOUS |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_INTERMEDIATE_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_EXPAND_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_2 | |
VannaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + CURRENT_MD_2_NATIVE_INTERMEDIATE_INT | |
VannaNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + NEXT_MD_2_NATIVE_INTERMEDIATE_INT | |
VannaPreviousDateMarketDataChain | New bean with Qualifier SPLIT_RATIO_2_PREVIOUS |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_INTERMEDIATE_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_EXPAND_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE | |
CorrelationCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
CorrelationNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
CorrelationPreviousDateMarketDataChain | New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD | |
DividendCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_2_NATIVE_INTERMEDIATE |
DividendNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
DividendPreviousDateMarketDataChain | New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT | |
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE | |
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD |
For further details on retrieval in the market data API, see Market data retrieval in the market data API data model
Input file formats
warning
- The input file
MarketData.csv
has been deprecated. It’s only used for vectorized sensitivities. For scalar sensitivities, use the following input files: - The input file
CorporateAction.csv
has been deprecated. It’s only used for handling dividend market data for vectorized sensitivities.- For dividends with scalar sensitivities, use the
Dividend.csv
input file. - For stock split ratios, both for vectorized and scalar sensitivities, use
SplitRatio.csv
.
- For dividends with scalar sensitivities, use the
New files
File | Purpose |
---|---|
Correlation_Market_Data.csv | Stores the correlation market data. |
FX_Rate_Market_Data.csv | Stores the FX rate market data. |
Dividend.csv | Stores the dividend market data. |
SplitRatio.csv | Stores the stock split ratio market data. |
Modified
The file Instrument_Market_Data.csv
has been renamed to Spot_Market_Data.csv
Modification | File | Field | Optional | Description |
---|---|---|---|---|
Changed default | MarketData.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
Changed default | VannaSensitivities.csv, CrossGammaSensitivities.csv, CorrelationSensitivities.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
Changed default | DeltaSensitivities.csv, GammaSensitivities.csv, VegaSensitivities.csv, VolgaSensitivities.csv, CashSensitivities.csv, ThetaSensitivities.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
Changed header | VannaSensitivities.csv, CrossGammaSensitivities.csv, CorrelationSensitivities.csv | None | N/A | The header ValueCCy has been replaced by Ccy . |
Changed header | DeltaSensitivities.csv, GammaSensitivities.csv, VegaSensitivities.csv, VolgaSensitivities.csv, CashSensitivities.csv, ThetaSensitivities.csv | None | N/A | The header ValueCCy has been replaced by Ccy . |
Changed default | Spot_Market_Data.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
Changed fields | Spot_Market_Data.csv | InstrumentId, MarketDataSet | - | Changed order to MarketDataSet, InstrumentId. |
Changed default | Curve_Market_Data.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
Changed fields | Curve_Market_Data.csv | CurveId, MarketDataSet | - | Changed order to MarketDataSet, CurveId. |
Changed default | Surface_Market_Data.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
Changed fields | Surface_Market_Data.csv | SurfaceId, MarketDataSet | - | Changed order to MarketDataSet, SurfaceId. |
Changed default | Cube_Market_Data.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
Changed fields | Cube_Market_Data.csv | CubeId, MarketDataSet | - | Changed order to MarketDataSet, CubeId. |
Removed
File | Details |
---|---|
FXRates.csv |
Use FX_Rate_Market_Data.csv instead. |
Configuration
Configuration properties
Properties added
market-data-api-spring-boot-starter module:
Property | Default value | Description |
---|---|---|
market-data-api.defaults.tenor | “N/A” | Default value for tenor coordinates. This is equivalent to the mr.tenors-and-maturities.default-value property of the old market data API. |
market-data-api.defaults.moneyness | “N/A” | Default value for moneyness coordinates. This is equivalent to the mr.moneyness.default-value property of the old market data API. |
market-data-api.defaults.maturity | “N/A” | Default value for maturity coordinates. This is equivalent to the mr.tenors-and-maturities.default-value property of the old market data API. |
market-data-api.fx.pivot-currency | “EUR” | Where no FX rate exists between two currencies, a third (pivot) currency provides rates against both and is used to derive a rate between them. This is equivalent to the mr.fx.common-currency property of the old market data API. |
Property | Default value | Description |
---|---|---|
mr.sensi.file-patterns.split-ratio | “*SplitRatio.csv” | Pattern for the Split Ratio input file. |
mr.sensi.file-patterns.dividends | “*Dividends.csv” | Pattern for the Dividend input file. |
mr.sensi.file-patterns.correlation-market-data | “*Correlation_Market_Data.csv” | Pattern for the Correlation market data input file. |
-
The properties prefixed with
mr.sensi.rules
allow users to configure the PnL Explain and Taylor VaR formulas. With this release, each sensitivity now has a set of default properties for each of the main risk classes, as well asany
properties that will apply to custom risk classes if they are not explicitly configured.
As before, you can still add properties for custom sensitivities and custom risk classes. -
Additionally, there is a new set of properties beginning
mr.sensi.rules.<sensitivity-type>.taylor-var
.
These properties mirror the previousmr.sensi.rules
properties (which have moved tomr.sensi.rules.<senitivity-type>.pnl-explain
), allowing Taylor VaR and PnL Explain calculations to be configured independently.
As there are a significant number of these properties they are not all listed here but full details can be seen in the mr-common-config properties documentation.
The following properties have been added to configure sensitivity calculations with the new Market Data API:
Property | Default value | Description |
---|---|---|
mr.sensi.market-data.correlation.any.any.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.correlation.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.correlation.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | correlation |
mr.sensi.market-data.correlation.any.custom | Custom market data properties for specific risk classes. The key is the risk class name, and the values are the properties for that risk class. | |
mr.sensi.market-data.correlation.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.cross-gamma1.any.any.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.cross-gamma1.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.cross-gamma1.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | spot |
mr.sensi.market-data.cross-gamma1.any.custom | Custom market data properties for specific risk classes. The key is the risk class name, and the values are the properties for that risk class. | |
mr.sensi.market-data.cross-gamma1.any.equity.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.cross-gamma1.any.equity.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.cross-gamma1.any.equity.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | eq spot |
mr.sensi.market-data.cross-gamma1.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.cross-gamma2.any.any.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.cross-gamma2.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.cross-gamma2.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | spot |
mr.sensi.market-data.cross-gamma2.any.custom | Custom market data properties for specific risk classes. The key is the risk class name and the values are the properties for that risk class. | |
mr.sensi.market-data.cross-gamma2.any.equity.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.cross-gamma2.any.equity.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.cross-gamma2.any.equity.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | eq spot |
mr.sensi.market-data.cross-gamma2.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.custom | Custom market data properties for specific sensitivity types, names and risk classes. The first key is the sensitivity type, the second is the sensitivity name, and the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.delta.any.any.interpolate | Whether to perform interpolation of market data. | true |
mr.sensi.market-data.delta.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.delta.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | curve |
mr.sensi.market-data.delta.any.custom | Custom market data properties for specific risk classes. The key is the risk class name and the values are the properties for that risk class. | |
mr.sensi.market-data.delta.any.equity.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.delta.any.equity.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.delta.any.equity.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | eq spot |
mr.sensi.market-data.delta.any.fx.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.delta.any.fx.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.delta.any.fx.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | fx spot |
mr.sensi.market-data.delta.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.dividend.any.any.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.dividend.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.dividend.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | dividend |
mr.sensi.market-data.dividend.any.custom | Custom market data properties for specific risk classes. The key is the risk class name and the values are the properties for that risk class. | |
mr.sensi.market-data.dividend.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.gamma.any.any.interpolate | Whether to perform interpolation of market data. | true |
mr.sensi.market-data.gamma.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline, etc. | linear |
mr.sensi.market-data.gamma.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | curve |
mr.sensi.market-data.gamma.any.custom | Custom market data properties for specific risk classes. The key is the risk class name and the values are the properties for that risk class. | |
mr.sensi.market-data.gamma.any.equity.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.gamma.any.equity.interpolation-mode | The type of interpolator to use: linear, cubic, spline. | linear |
mr.sensi.market-data.gamma.any.equity.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | eq spot |
mr.sensi.market-data.gamma.any.fx.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.gamma.any.fx.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.gamma.any.fx.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | fx spot |
mr.sensi.market-data.gamma.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.vanna1.any.any.interpolate | Whether to perform interpolation of market data. | true |
mr.sensi.market-data.vanna1.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.vanna1.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | surface |
mr.sensi.market-data.vanna1.any.custom | Custom market data properties for specific risk classes. The key is the risk class name and the values are the properties for that risk class. | |
mr.sensi.market-data.vanna1.any.girr.interpolate | Whether to perform interpolation of market data. | true |
mr.sensi.market-data.vanna1.any.girr.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.vanna1.any.girr.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | cube |
mr.sensi.market-data.vanna1.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.vanna2.any.any.interpolate | Whether to perform interpolation of market data. | true |
mr.sensi.market-data.vanna2.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.vanna2.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | curve |
mr.sensi.market-data.vanna2.any.custom | Custom market data properties for specific risk classes. The key is the risk class name and the values are the properties for that risk class. | |
mr.sensi.market-data.vanna2.any.equity.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.vanna2.any.equity.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.vanna2.any.equity.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | eq spot |
mr.sensi.market-data.vanna2.any.fx.interpolate | Whether to perform interpolation of market data. | false |
mr.sensi.market-data.vanna2.any.fx.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.vanna2.any.fx.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | fx spot |
mr.sensi.market-data.vanna2.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.vega.any.any.interpolate | Whether to perform interpolation of market data. | true |
mr.sensi.market-data.vega.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.vega.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | surface |
mr.sensi.market-data.vega.any.custom | Custom market data properties for specific risk classes. The key is the risk class name and the values are the properties for that risk class. | |
mr.sensi.market-data.vega.any.girr.interpolate | Whether to perform interpolation of market data. | true |
mr.sensi.market-data.vega.any.girr.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.vega.any.girr.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | cube |
mr.sensi.market-data.vega.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. | |
mr.sensi.market-data.volga.any.any.interpolate | Whether to perform interpolation of market data. | true |
mr.sensi.market-data.volga.any.any.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.volga.any.any.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | surface |
mr.sensi.market-data.volga.any.custom | Custom market data properties for specific risk classes. The key is the risk class name, and the values are the properties for that risk class. | |
mr.sensi.market-data.volga.any.girr.interpolate | Whether to perform interpolation of market data. | true |
mr.sensi.market-data.volga.any.girr.interpolation-mode | The type of interpolator to use: linear, cubic, spline etc. | linear |
mr.sensi.market-data.volga.any.girr.market-data-type | The type of market data. This is used to decide which market data store to retrieve the data from. For example, spot, curve, cube. | cube |
mr.sensi.market-data.volga.custom | Custom market data properties for specific sensitivity names and risk classes. The first key is the sensitivity name, the second is the risk class name, and the values are the properties for that sensitivity name and risk class. |
Properties modified
Property Name | Comment | Value |
---|---|---|
mr.moneyness.default-value | The default value has changed to N/A from ATM . |
N/A |
mr.enable.data-model.scalar-sensitivities | The default value has changed to true from false . |
true |
mr.sign-off.extractionTemplates.defaultMapping | The default value has changed to true from false . |
true |
mr.sign-off.extractionTemplatesScalar.defaultMapping | The default value has changed to CubeAdjustmentExport, FXRateExport, FxRateMarketDataExport, "BookParentChildExport from CubeAdjustmentExport, FXRateExport, BookParentChildExport . |
CubeAdjustmentExport, FXRateExport, FxRateMarketDataExport, "BookParentChildExport |
mr.application.content-server.reset | The default value has changed to folder to enable resetting the content server by default. |
folder |
- Properties in the
mr-common-config
module beginningmr.sensi.rules
have been renamed tomr.sensi.rules.<sensitivity-type>.pnl-explain
.
Along with the newmr.sensi.rules.<sensitivity-type>.taylor-var
properties, this allows Taylor VaR and PnL Explain calculations to be configured independently. - Additionally, the
base
properties that applied to any risk class without specified properties (e.g.mr.sensi.rules.delta.base
) have been renamed toany
(e.g.mr.sensi.rules.delta.pnl-explain.any
).
As there are a significant number of these properties they are not all listed here but full details can be seen in the mr-common-config properties documentation.
Properties removed
The following properties have been removed as the Market Data API is no longer in preview:
Property name |
---|
mr.enable.preview.market-data |
mr.enable.cubes.market-data |
Properties deprecated
The sensitivity rules properties concerning interpolation have been deprecated as interpolation is now the responsibility of the new Market Data API. These properties follow the format:
mr.sensi.rules.<sensitivity-type>.pnl-explain/taylor-var.<risk-class>.interpolate
mr.sensi.rules.<sensitivity-type>.pnl-explain/taylor-var.<risk-class>.preInterpolationFunctions
mr.sensi.rules.<sensitivity-type>.pnl-explain/taylor-var.<risk-class>.postInterpolationFunctions
The following market data properties have been deprecated. They are only used for the Taylor VaR measure chains. For PnL explain and market data measure chains, the newly added properties need to be used instead. See Properties added.
mr.tenors-and-maturities.default-value
mr.moneyness.default-value
mr.tenors-and-maturities.default-value
mr.fx.common-currency
Property Files
Files Modified
application.yaml
The following properties have been added to address CORS issues and the removal of the distribution Spring profiles:
Key | Value | Description |
---|---|---|
server.servlet.session.cookie.secure | true | Enables/disables always marking the cookie as secure. |
server.servlet.session.cookie.http-only | true | Enables/disables using the “HttpOnly” attribute for the cookie. |
server.servlet.session.cookie.same-site | none | SameSite setting for the cookie. |
starter.deployment.type | in-memory | Specifies the nature of the database used for the cube. |
starter.deployment.transport | local | Specifies the messenger to use for communication between cubes. |
The following property has been unset to comply with the change in the default behavior of the content-server (now reset on restart). This eases the start of multiple instances (e.g. distributed configuration).
Key | Value | Description |
---|---|---|
mr.application.content-server.db.file.name | null | Specifies the name of the file to which content server is persisted. |
Files Deleted
tracing.properties
This property file has been deleted and replaced by configuration properties. In addition, due to swapping the Brave tracing configuration for OpenTelemetry, properties have been updated.
The new properties are:
Property Name | Comment | Value |
---|---|---|
mr.enable.tracing.open-telemetry | Enables the OpenTelemetry Configuration. | false |
mr.open-telemetry.zipkin-span-exporter-url | URL to use for zipkin SpanProcessor bean. | http://localhost:9411/api/v2/spans |
mr.open-telemetry.logging-span-exporter-enabled | Enables the SpanProcessor bean with LoggingSpanExporter. | false |
The following properties have been replaced by OpenTelemetry properties:
- spring.zipkin.baseUrl
- spring.zipkin.api-path
- spring.zipkin.service.name
- spring.zipkin.sender.type
- spring.zipkin.enabled
- spring.sleuth.traceId128
- activeviam.apm.zipkin.span.level
Datastores
Added store configurations
Store | Class | Details |
---|---|---|
CorrelationMarketData | CorrelationMarketDataStore | Contains correlation market data. |
DividendMarketData | DividendMarketDataStore | Contains split ratio market data. |
FxRateMarketData | FxRateMarketDataStore | A store that is part of the new Market Data API for FX Rate market data. |
SplitRatioMarketData | SplitRatioMarketDataStore | Contains dividend market data. |
For details, see New Dividend and Split Ratio stores.
Modified store configurations
Modification | Store | Class | Field | Type | Description |
---|---|---|---|---|---|
Reordered | CubeMarketData | CubeMarketDataStore | MarketDataSet | String | This now precedes CubeId. |
Reordered | CubeMarketData | CubeMarketDataStore | CubeId | String | This is now preceded by MarketDataSet. |
Reordered | CurveMarketData | CurveMarketDataStore | MarketDataSet | String | This now precedes CurveId. |
Reordered | CurveMarketData | CurveMarketDataStore | CurveId | String | This is now preceded by MarketDataSet. |
Reordered | SpotMarketData | SpotMarketDataStore | MarketDataSet | String | This now precedes InstrumentId. |
Reordered | SpotMarketData | SpotMarketDataStore | InstrumentId | String | This is now preceded by MarketDataSet. |
Reordered | SurfaceMarketData | SurfaceMarketDataStore | MarketDataSet | String | This now precedes SurfaceId. |
Reordered | SurfaceMarketData | SurfaceMarketDataStore | SurfaceId | String | This is now preceded by MarketDataSet. |
Secondary index added | CubeMarketData | CubeMarketDataStore | MarketDataSet | String | A secondary index has been added on the AsOfDate, MarketDataSet, and CubeId fields. |
Secondary index added | SurfaceMarketData | SurfaceMarketDataStore | MarketDataSet | String | A secondary index has been added on the AsOfDate, MarketDataSet, and SurfaceId fields. |
Renamed | CubeMarketData | CubeMarketData | The CubeMarketDataStore store has been renamed to CubeMarketData . |
||
Renamed | CurveMarketData | CurveMarketData | The CurveMarketDataStore store has been renamed to CurveMarketData . |
||
Renamed | SpotMarketData | SpotMarketData | The InstrumentMarketData store has been renamed to SpotMarketData . |
||
Renamed | SurfaceMarketData | SurfaceMarketData | The SurfaceMarketDataStore store has been renamed to SurfaceMarketData . |
The types of the following store fields have been changed:
Store | Field | Old type | New type | Old default | New default | Note |
---|---|---|---|---|---|---|
TradeAttributes | MaturityDate | String | Date | N/A | 1970-01-01 | |
TradeAttributes | TradeDate | String | Date | N/A | 1970-01-01 | |
TradeSensitivities | MaturityDates | String | Date | N/A | 1970-01-01 | This change does not apply to the vectorized TradeSensitivities store. |
TradeSensitivities | TenorDates | String | Date | N/A | 1970-01-01 | This change does not apply to the vectorized TradeSensitivities store. |
Marked for removal
- The
CorporateAction
store has been deprecated. It is still used to handle dividends for vectorized sensitivities, but not for scalar sensitivities. UseDividendMarketData
andSplitRatioMarketData
instead. - The
MarketData
store has been deprecated. It is still used to handle dividends for vectorized sensitivities, but not for scalar sensitivities. For scalar sensitivities, use the following stores:
Name | Type | Module | Affected Class |
---|---|---|---|
CorporateAction | mr-sensi-config | ||
Market Data Store | Store configuration for vectors format | mr-sensi-config | VectorMarketDataStoreConfig |
TradeSensitivities Store | Store configuration for vectors format | mr-sensi-config | VectorTradeSensitivitiesStoreConfig |
Sensitivities Aggregated Store | Store configuration for vectors format | mr-sensi-config | VectorSensiAggregatedStoreConfig |
Sensitivities Flat Store | Store configuration for vectors format | mr-sensi-config | VectorSensiFlatStoreConfig |
Removed
Name | Type | Module | Affected Class |
---|---|---|---|
FXRates Store | Store configuration for FX rates that is not used anymore | mr-common-config | FxRateStoreConfig |
The FxRateMarketData
store needs to be used instead of the FXRates
store.
On top of that, the FX rate service uses the Market Data API: the FXRateWrapper
, implementation of IFxRates
, uses the Market Data API to get the FX rates,
see Exchange Rate and Market Data API.
Database
Added tables
Table | Details |
---|---|
CORRELATION_MARKET_DATA | Market data related to the correlation between risk factors |
CUBE_MARKET_DATA | Market data defined along three axes (tenors, moneyness and underlying maturities). |
CURVE_MARKET_DATA | Market data defined along a tenor axis. |
DIVIDEND_MARKET_DATA | Market data related to dividends. |
FX_RATE_MARKET_DATA | FX rates. |
SPLIT_RATIO_MARKET_DATA | Market data related to stock splits. |
SPOT_MARKET_DATA | Spot price market data. |
SURFACE_MARKET_DATA | Market data defined along two axes (tenors and moneyness). |
Modified tables
The types of the following database table fields have been changed:
Table | Field | Old type | New type | Old default | New default | Note |
---|---|---|---|---|---|---|
TRADE_ATTRIBUTES | MATURITY_DATE | String | Date | N/A | 1970-01-01 | |
TRADE_ATTRIBUTES | TRADE_DATE | String | Date | N/A | 1970-01-01 | |
TRADE_SENSITIVITIES | MATURITY_DATES | String | Date | N/A | 1970-01-01 | |
TRADE_SENSITIVITIES | TENOR_DATES | String | Date | N/A | 1970-01-01 | |
TRADE_SENSITIVITIES_VECTOR | MATURITY_DATES | String | Date | N/A | 1970-01-01 | |
TRADE_SENSITIVITIES_VECTOR | TENOR_DATES | String | Date | N/A | 1970-01-01 |
Deleted tables
FXRATES has been removed and replaced by the new Market Data API store FxRateMarketData.
Cube schema
The Market Data Cube has been deleted.
Measures
Added
Cube | Measure | Details |
---|---|---|
Sensitivity Cube | Split Ratio 2 Current | Split of the secondary underlying instrument as of current date |
Sensitivity Cube | Split Ratio 2 Previous | Split of the secondary underlying instrument as of previous date |
Removed
The following debug market data measures found in the mr-sensi-config
module were removed.
Measure removed | File location |
---|---|
Current Market Data Native Intermediate Int Debug | CorrelationCurrentDateMarketDataChain.java , DeltaCurrentDateMarketDataChain.java , GammaCurrentDateMarketDataChain.java , VannaCurrentDateMarketDataChain.java , VegaCurrentDateMarketDataChain.java , VolgaCurrentDateMarketDataChain.java |
Current Market Data 2 Native Intermediate Int Debug | CorrelationCurrentDateMarketDataChain.java , VannaCurrentDateMarketDataChain.java |
Current Market Data Native Intermediate Filtered Int Debug | CorrelationCurrentDateMarketDataChain.java , DeltaCurrentDateMarketDataChain.java , GammaCurrentDateMarketDataChain.java , VannaCurrentDateMarketDataChain.java , VegaCurrentDateMarketDataChain.java , VolgaCurrentDateMarketDataChain.java |
Current Market Data 2 Native Intermediate Filtered Int Debug | CorrelationCurrentDateMarketDataChain.java , VannaCurrentDateMarketDataChain.java |
Current Market Data Native Expand Intermediate Int Debug | CorrelationCurrentDateMarketDataChain.java , DeltaCurrentDateMarketDataChain.java , GammaCurrentDateMarketDataChain.java , VannaCurrentDateMarketDataChain.java , VegaCurrentDateMarketDataChain.java , VolgaCurrentDateMarketDataChain.java |
Current Market Data 2 Native Expand Intermediate Int Debug | CorrelationCurrentDateMarketDataChain.java , VannaCurrentDateMarketDataChain.java |
Current Market Native Debug | CorrelationCurrentDateMarketDataChain.java , DeltaCurrentDateMarketDataChain.java , GammaCurrentDateMarketDataChain.java , VannaCurrentDateMarketDataChain.java , VegaCurrentDateMarketDataChain.java , VolgaCurrentDateMarketDataChain.java |
Current Market Native 2 Debug | CorrelationCurrentDateMarketDataChain.java , VannaCurrentDateMarketDataChain.java |
Previous Market Native Debug | CorrelationPreviousDateMarketDataChain.java , DeltaPreviousDateMarketDataChain.java , GammaPreviousDateMarketDataChain.java , VannaPreviousDateMarketDataChain.java , VegaPreviousDateMarketDataChain.java , VolgaPreviousDateMarketDataChain.java |
Previous Market Native 2 Debug | CorrelationPreviousDateMarketDataChain.java , VannaPreviousDateMarketDataChain.java |
info
For additional changes, see Removal of debug market data measures.
Deprecation of Sensitivities vector measures
Name | Type | Module | Affected Class |
---|---|---|---|
Current MD Native Intermediate Int. | Vector Measure | mr-sensi-config | *CurrentDateMarketDataChain |
Current MD Native Intermediate Filtered Int. | Vector Measure | mr-sensi-config | *CurrentDateMarketDataChain |
Current MD Native Expand Intermediate Int. | Vector Measure | mr-sensi-config | *CurrentDateMarketDataChain |
Next MD Native Intermediate Int. | Vector Measure | mr-sensi-config | *NextDateMarketDataChain |
Next MD Native Intermediate Int.filtered | Vector Measure | mr-sensi-config | *NextDateMarketDataChain |
PnL Explain Native Intermediate Next Date | Vector Measure | mr-sensi-config | *PnLExplainChain |
PnL Explain Native Expand Next Date | Vector Measure | mr-sensi-config | *PnLExplainChain |
.Ladder.Pillars.Vector.Expand | Vector Measure | mr-sensi-config | *LadderExpansionChain |
.Native.SUM.Technical.Filtered | Vector Measure | mr-sensi-config | *NativeCurrencyChain |
.Native.Vector.Expand | Vector Measure | mr-sensi-config | *NativeCurrencyChain |
Previous Vector Native Expand | Vector Measure | mr-sensi-config | *NativeCurrencyChain |
Shift Vector | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Expanded | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Max Level | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Interpolated | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Interpolated Expanded | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Interpolated Max Level | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Normalized | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Normalized Expanded | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Normalized Max Level | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Interpolated Normalized | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Interpolated Normalized Expanded | Vector Measure | mr-sensi-config | *ShiftViewerChain |
Shift Vector Interpolated Normalized Max Level | Vector Measure | mr-sensi-config | *ShiftViewerChain |
.Native.SUM.Technical.Filtered.Retrieval | Vector Measure | mr-sensi-config | *TaylorChain |
.Native.SUM.Technical.Filtered | Summary Vector Measure | mr-sensi-config | Summary*NativeCurrencyChain |
Native | Summary Vector Measure | mr-sensi-config | Summary*NativeCurrencyChain |
Vector Measure | mr-sensi-config |
* {Cash, Correlation, Crossgamma, Delta, Dividend, Gamma, Theta, Vanna, Vega}
Context values
Removed
Name | Details |
---|---|
EnableMDStringDebug | The context value was removed as part of removing the Debug measures. |
DirectQuery scripts
Added
Script | Details |
---|---|
mr-directquery/src/test/resources/databases/databricks/createMR.sql | Creates the current MR schema in a Databricks database. |
mr-directquery/src/test/resources/databases/databricks/loadMR.sql | Loads MR reference data into a Databricks database. |
Changed
Script | Details |
---|---|
mr-directquery/src/test/resources/databases/mssql/createMR.sql | Removed creation of MarketData store. Added creation of new Market Data stores (spot, curve, surface, cube, dividend, split-ratio). Modified creation of FXRate store. |
mr-directquery/src/test/resources/databases/mssql/loadMR.sql | Removed SQL to write to MarketData store. Added SQL to write to new Market Data stores (spot, curve, surface, cube, dividend, split-ratio). |
mr-directquery/src/test/resources/databases/snowflake/createMR.sql | Removed creation of MarketData store. Added creation of new Market Data stores (spot, curve, surface, cube, dividend, split-ratio). Modified creation of FXRate store. |
mr-directquery/src/test/resources/databases/snowflake/loadMR.sql | Removed SQL to write to MarketData store. Added SQL to write to new Market Data stores (spot, curve, surface, cube, dividend, split-ratio). |
Modules removed
The modules mr-market-data-lib
and mr-market-data-config
have been removed. They were used for the configuration of the Market Data Cube.
PnL Explain and Taylor VaR Formula Split
PnL Explain and Taylor VaR calculations can now be configured independently of one another. The following changes enable this.
Properties
The mr.sensi.rules
properties have been split into mr.sensi.rules.<sensitivity-type>.pnl-explain
and mr.sensi.rules.<sensitivity-type>.taylor-var
properties. If the Taylor VaR properties are not set, Taylor VaR calculations will continue to use the corresponding PnL Explain properties, but these new properties allow you to specify different values specifically for Taylor VaR.
The values of these properties were previously accessed at runtime using the ISensiRuleConfigurationService
interface. This has been replaced by IPnlExplainRuleConfigurationService
and ITaylorVarRuleConfigurationService
interfaces.
The ISensiRuleConfigurationServiceAware
interface has been removed as this was no longer used.
Formula Providers
In addition to the existing IPnLExplainFormulaProvider
, there is now an ITaylorVarFormulaProvider
class. This is available as a Spring bean, created by the TaylorVarFormulaProviderConfig
class.
The method getVaRExplainFormula
in IPnLExplainFormulaProvider
has been renamed to getPnlExplainFormulaForShift
as this method is now only used for PnL Explain calculations.
The constructor for the PnLExplainFormulaProvider
class now requires an IPnlExplainRuleConfigurationService
instead of an ISensiRuleConfigurationService
.
Input Selector
The Input Selector classes that are used to perform ladder calculations have also been split. The IInputSelector
interface remains unchanged but the InputSelector
implementation is now renamed to PnlExplainInputSelector
and there is a corresponding TaylorVarInputSelector
.
The InputSelectorConfig
configuration class now publishes two beans of type IInputSelector
, one for PnL Explain and the other for Taylor VaR. These can be autowired by using the new qualifiers: SP_QUALIFIER__PNL_EXPLAIN_INPUT_SELECTOR
and SP_QUALIFIER__TAYLOR_VAR_INPUT_SELECTOR
.
The IInputSelectorAware
interface has been replaced by the IPnlExplainInputSelectorAware
and ITaylorVarInputSelectorAware
interfaces.
Post-processor
The APnlVectorFromRiskSensiPostProcessor
post-processor now implements the ITaylorVarFormulaProviderAware
interface instead of the IPnLExplainFormulaProviderAware
interface, and the ITaylorVarInputSelectorAware
interface instead of the IInputSelectorAware
interface.
The following post-processors now implement the IPnlExplainInputSelectorAware
interface instead of the IInputSelectorAware
interface:
- AScalarPnLExplainPostProcessor
- PnLExplainCrossPostProcessor
- PnLExplainPostProcessor
Other changes
- Code changes in mr-application
- Market Data API changes
- Lambda interface changes
- Other interface changes
- New API to define dimension and hierarchies
- New abstract tuple publisher
- Upgrade to Admin UI 5.1.5
- Unused property removed in AsOfDateNeighbourValuePostProcessor
- MarketDataDateShift enum
- Deprecated unused column calculator
- Unused property removed in DynamicTenorsAndMaturitiesPostProcessor
- New configuration class ApplicationJwtConfig
- Tomcat server version bumped to 10.1.19
- Migration of the content server database
- Fluent post-processor setup
- Constant VALUE_CCY in StoreFieldConstants removed and replaced by constant CCY.
- Catalog name change
- Removal of debug market data measures
- Deprecation of Sensitivities vector data model
- Customizing the Market Risk Solution to use store-backed maturity conversion with scalar sensitivities
- New Dividend and Split Ratio stores
- Deletion of Market Data Cube
- Maven dependencies
- IMaturityConverterAware class
- Theta: methods renamed
- Logback Fix
- Swagger UI Fix
Code changes in mr-application
A number of code-level changes have been made to classes in the mr-application module to improve clarity and consistency. These are:
LocalContentService.createHibernateConfiguration
now throws anActiveViamRuntimeException
instead of aRuntimeException
.StaticResourcesHandler.CLASSPATH
is a new private constant with the value"classpath:"
.- Nested
if
conditions have been removed fromAdjustedCellPropertiesHandler.getForeColor\getBackColor
. - The static variable
MarketRiskApplication.context
, of typeConfigurableApplicationContext
, has been removed. - The
JMXEnabler
bean namedJMXDatastoreEnabler
, defined inMarketRiskConfig
has been renamed tojmxDatastoreEnabler
. - The
JMXEnabler
bean namedJMXDirectMemoryMonitoringEnabler
, defined inMonitorConfig
has been renamed tojmxDirectMemoryMonitoringEnabler
. - The private method
performTransaction
has been added to theAdjustmentExecutionConfig
class to avoid the nesting of try-catch statements. - In a number of places, where a local variable is created and assigned just to be returned by a method, the local variable is no longer created. For instance, this has been changed for the
getConfiguredStageTopics
method of theFileUploadWhatIfRestfulService
class. - The main method of the
InvokeBranchRelease
class now uses theMap.of
method to store the JMX credentials, instead of instantiating a HashTable. - The new configuration class
ApplicationJwtConfig
has been added to handle the configuration of the properties used to define JWT authentication. - Deprecated description
IStoreFormat
is replaced byIDataTable
.
Market Data API changes
The new Market Data API that was introduced as a preview in Atoti Market Risk 5.3.0 has undergone significant changes to add functionality and improve flexibility.
To reflect the independence of the API, it has been moved to a new Maven module: market-data-api
. This module is not dependent on any Atoti Market Risk modules, although it has a dependency on the Datastore Helper (DASH) and DASH is required to use the store configurations. This module is a dependency of the mr-common-lib
module and so its classes are available throughout the Atoti Market Risk project.
In addition to the base module, which provides interfaces and implementation classes, there is a market-data-api-spring-boot
module. This contains Spring bean definitions for market data stores and retrievers, and interpolation services. As a Spring Boot starter, when you add this module as a dependency to a Spring Boot application, the beans within it are automatically configured by Spring and made available to the application context. The following classes are automatically imported from the starter module:
- com.activeviam.marketdata.api.configuration.retrievers.CubeMarketDataRetrievalConfig
- com.activeviam.marketdata.api.configuration.retrievers.CurveMarketDataRetrievalConfig
- com.activeviam.marketdata.api.configuration.retrievers.FxRateMarketDataRetrievalConfig
- com.activeviam.marketdata.api.configuration.retrievers.SpotMarketDataRetrievalConfig
- com.activeviam.marketdata.api.configuration.retrievers.SurfaceMarketDataRetrievalConfig
- com.activeviam.marketdata.api.configuration.interpolation.AllMarketDataInterpolatorsConfig
- com.activeviam.marketdata.api.configuration.interpolation.AllInterpolationTransformationsConfig
In addition to supporting cube, curve, instrument, and surface market data, FX rates are now supported and a corresponding FxRateMarketDataStore now exists.
The structure of the new Market Data API has also changed significantly from the previous release. The interfaces for retrieving market data from stores are different. Previously, a common IMarketDataRetriever
interface allowed you to retrieve single values from market data stores and specific retrievers, e.g. ICubeMarketDataRetriever
interfaces supported retrieval of market data collections (cubes, curves, etc.). Instead, each market data type now has a specific, corresponding retriever interface that supports retrieval from that store using the semantics relevant to it. For instance, the ICurveMarketDataRetriever
store now retrieves a single value from a curve or a whole curve, and the method parameters reflect the properties of a curve.
In addition to the base retriever interfaces, each market data type also now has a “contextual” variant, e.g. IContextualCurveMarketDataRetriever
. This retriever accepts a MarketDataRetrieverContext
that may modify the retrieval. Out-of-the-box implementations apply the date shift from the context before retrieving the market data.
Beyond retrievers, the IMarketDataService
interface has been renamed to IMarketDataRetrievalService
. A retrieval service contains the business rules to retrieve market data for a specific purpose. It may use multiple underlying retrievers or interpolation services to do this. We provide an abstract implementation of this interface, which handles caching within a query cache.
Finally, an AMarketDataPostProcessor
is now provided that should serve as the basis for market data retrieval within a measure chain.
Lambda interface changes
Old interface | New interface | Usage |
---|---|---|
BiFunction<ICanStartBuildingSchema, IDatastoreSchemaDescription, BuildableActivePivotSchemaDescriptionBuilder> | CubeBuilderFunction | All the beans with @Qualifier("Cube") . |
DoubleBinaryOperator | ShiftScalingFunction | IInterpolationConfiguration::normalizationShiftOperator |
BinaryOperator |
PrePostFunction | IInterpolationConfiguration::getPreMarketDataInterpolationFunction |
BinaryOperator |
PrePostFunction | IInterpolationConfiguration::getPostMarketDataInterpolationFunction |
BinaryOperator |
PrePostFunction | IInterpolationConfiguration::getPreShiftDataInterpolationFunction |
BinaryOperator |
PrePostFunction | IInterpolationConfiguration::getPostShiftDataInterpolationFunction |
DoubleBinaryOperator | AbsoluteToRelativeFunction | IInterpolationConfiguration::absoluteToRelativeMarketDataOperator |
DoubleBinaryOperator | RelativeToAbsoluteFunction | IInterpolationConfiguration::relativeToAbsoluteMarketDataOperator |
DoubleBinaryOperator | ShiftScalingFunction | IInterpolationConfiguration::normalizationShiftOperator |
BiFunction<Double, ICorporateAction, Double> | CorporateActionOperator | IInterpolationConfiguration::corporateActionOperator |
UnaryOperator<ICanBuildCommonCubeDescription |
QueryCubeAggregateProviderConfig | Bean with @Qualifier("MRCombinedCubeConfiguration") . |
UnaryOperator<ICanBuildCubeDescription |
AggregateProviderConfig | All beans with the corresponding return signature. |
ICustomParameters.ILocationFunction | LocationFunction | ICustomParameters::getLeafCoordinatesFunction |
BiConsumer<String, Collection<Object[]» | DatastorePublisher | A function with the behavior of ITransactionalWriter::addAll . |
Supplier |
Constructor |
Every time a constructor without arguments needs to be provided. |
Supplier |
NotNullCacheSupplier |
Supplier of function PostProcessorUtils::getInCacheOrComputeNeverNull . |
Supplier |
NullableCacheSupplier |
Supplier of function PostProcessorUtils::getInCacheOrCompute . |
BiFunction<ILocation, IQueryCache, List | LeafFunction | Return type of ICustomLeaf::apply . |
Function<Double, Pair<T, String» | DataRetrieverFunction |
Parameter of IInterpolation::interpolation used to get the underlying data. |
UnaryOperator |
SimpleNameConverter | Simple naming convention change, used for DirectQuery. |
BiPredicate<IPillar, IPillar> | EqualsFunction | ModifiedPillarSetOfPillar equals function. |
BiFunction<LocalDate, Boolean, LocalDate> | DateSearchStepper | Used in PostProcessorUtils::dateSearch to go to the next date. |
Function<LocalDate, T> | DateSearchRetriever |
Used in PostProcessorUtils::dateSearch to get the value for a given date. |
UnaryOperator | AdjustmentConverterOperator | Used to define basic operation for the adjustment. |
BiFunction<Map<String, Object>, List |
AdjustmentInputConverter | Converts the user request into a pre-processed input request for the adjustment. |
BiFunction<AdjustmentRequestDTO, SupportedAdjustmentDTO, Map<String, Object» | AdjustmentInputParser | Transforms a user request into adjustment values. |
TriFunction<Object[], IStoreFormat, List |
AdjustmentInputRetriever |
Pre-processing of a line before adjustment. |
TriFunction<String, String, String, Map<String, Object» | AdjustmentSourceTagger | Fills the adjustment columns with the type of adjustment. |
BiFunction<T, U, List |
AdjustmentStep<T, U, V> | One step of adjustment to modify a store line. |
BiFunction<Map<String, Object>, List |
DoubleAdjustmentInputConverter | Converts the user request into a pre-processed input request for the adjustment. |
TriFunction<Object[], IStoreFormat, List |
DoubleAdjustmentInputRetriever | Pre-processing of a line before adjustment. |
BiFunction<Double, Double, List |
DoubleAdjustmentStep | One step of adjustment to modify a store line. |
Consumer |
DatastoreConfiguratorConsumer | Used for applying customizations to the IDatastoreConfigurator object. |
Function<String, Set |
BookRetriever | Helper function for adjustment executions that retrieves a set of books belonging to a desk. |
BiFunction<String, String, Set |
TradeRetriever | Helper function for adjustment executions that retrieves a set of trades belonging to a specific desk and book. |
Supplier |
FileUploadAddressSupplier | Used by the file upload What-If implementation to get the addresses for file upload services present in a distributed cluster. |
BiFunction<IDatastoreSchemaDescription, String, T> | BaseSelectionCreator |
Used to configure schema selection based on a datastore schema and the name of the base store. |
UnaryOperator |
ExtraSelectionApplier |
Used to apply extra schema selections. |
Function<IDatastoreSchemaDescription, ISelectionDescription> | SelectionDescriptionCreator | Used to create a selection description based on a datastore schema description. |
Function<IActivePivotManagerDescriptionBuilder, IActivePivotManagerDescriptionBuilder> | CatalogCreator | Used to add catalogs to the IActivePivotManagerDescriptionBuilder. |
Consumer |
CopperCubePublisher | Used to add Copper cube components to the Copper context. |
Consumer |
MeasurePublisher | Used to publish measures to the Copper context. |
Function<ICanStartBuildingMeasures, IHasAtLeastOneMeasure> | MeasureAdder | Adds a measure through the Fluent API. |
Function<T, String> | NameRetriever |
Selects a measure name from the names object (e.g. SensiMeasureNames). |
Function<T, String> | ParameterRetriever |
Selects a parameter from the parameters object (e.g. SensiMeasureParameters). |
Consumer |
DatastorePostprocessorConfigurator | Used to add datastore post-processors to the datastore. |
Consumer |
DataLoadControllerConfigurator | Used for customizing the Data Load Controller. |
BiFunction<String, Map<String, Object>, ICondition> | StoreAndScopeToConditionConverter | Converts a store name and a DLC scope to an ICondition. |
Function<String, IFilesScopedTopic.IScopeToFileScanParametersConverter> | TopicToScopeToLoadConverter | Matches a topic name to a DLC scope-to-file-scan converter. |
Function<String, IDataLoadController.IScopeToRemoveWhereConditionConverter> | TopicToScopeToRemoveWhereConditionConverter | Matches a topic name to a DLC scope-to-remove-where-condition converter. |
Function<IStoreMessageChannelFactory<I, ?>, IMessageChannel<I, ?» | MessageChannelCreator | Creates a message channel from the given factory. |
BiConsumer<AdjustmentRequestDTO, String> | AdjustmentExecutor | Object that contains the execution steps of the adjustments. |
BiConsumer<AdjustmentDeletionRequestDTO, String> | AdjustmentDeleter | Object that contains the execution steps of the adjustments deletion. |
Wherever the changes above have resulted in a removal of ambiguity, the associated Spring @Qualifier has been removed:
Qualifier | Replacement interface alias |
---|---|
@Qualifier(SP_QUALIFIER__CUSTOMISATIONS) | DatastoreConfiguratorConsumer |
@Qualifier(“Catalog”) | CatalogCreator |
@Qualifier(“Cube”) | CubeBuilderFunction |
@Qualifier(“DLC-registration”) | DataLoadControllerConfigurator |
@Qualifier(“DLC-source”) | Removed as ICsvSource is generic |
Other interface changes
Old interface | New interface | Usage |
---|---|---|
Pair<U, String> | Result | Return type of IInterpolation::interpolation |
New API to define dimension and hierarchies
You can now define a new hierarchy belonging to an existing dimension by registering an extra bean. Previously this was only possible at dimension level.
To be able to define a new hierarchy in a cube inside an existing dimension, the signature of the dimension beans has changed.
It now returns HierarchyBuilderConsumer
, replacing DimensionsAdder
. This return type lets you define a hierarchy by itself.
Here’s how it works:
// The return object will be consumed at cube creation
@Bean
@Qualifier("commonDimension")
public HierarchyBuilderConsumer bookingDimension() {
return BookingDimensionConfig::getBookingDimension;
}
// We can group the declaration inside the bean
public static void getBookingDimension(@NonNull HierarchyBuilder hierarchyBuilder) {
getDesksHierarchy(hierarchyBuilder);
getSrcCurrencyHierarchy(hierarchyBuilder);
getDateHierarchy(hierarchyBuilder);
}
// This is a vanilla hierarchy
public static void getDesksHierarchy(@NonNull HierarchyBuilder hierarchyBuilder) {
hierarchyBuilder.toDimension(BOOKING_DIMENSION, builder -> builder.withHierarchy(DESKS_HIERARCHY).withLevel(DESK_LEVEL));
}
// This is an analysis hierarchy with a shorthand compared to the previous syntax
public static void getSrcCurrencyHierarchy(@NonNull HierarchyBuilder hierarchyBuilder) {
hierarchyBuilder.toDimension(CURRENCY_DIMENSION, FxHierarchy.hierarchy(SRC_FX_HIERARCHY).withLevel(SRC_FX_LEVEL));
}
// Here you can see the setting of an extra property at dimension level
public static void getDateHierarchy(@NonNull HierarchyBuilder hierarchyBuilder) {
hierarchyBuilder.withType(DATES_DIMENSION, TIME);
hierarchyBuilder.toDimension(DATES_DIMENSION, b -> b.withHierarchy(DATE_HIERARCHY).withLevel(AS_OF_DATE_LEVEL).withType(ILevelInfo.LevelType.TIME));
}
New abstract tuple publisher
We have introduced the ATableFormatTuplePublisher
for sources where the input file format does not match the table data model.
Publishers extending this abstract class can define a mapping between the table fields and the input file fields. The tuples will be generated according to matching field names and this custom mapping.
Upgrade to Admin UI 5.1.5
The Admin UI has been upgraded to version 5.1.5 from version 5.1.1.
A new property has been added to the market-risk
POM file for the Admin UI version:
<admin-ui.version>5.1.5</admin-ui.version>
and the admin-ui
artifact has been added in the dependency management section of that POM file:
<dependency>
<groupId>com.activeviam.tech</groupId>
<artifactId>admin-ui</artifactId>
<version>${admin-ui.version}</version>
</dependency>
and the hard-coded version number has been removed in the mr-application
POM file for that artifact:
<dependency>
<groupId>com.activeviam.tech</groupId>
<artifactId>admin-ui</artifactId>
</dependency>
Unused property removed in AsOfDateNeighbourValuePostProcessor
The unused property IS_PARTITIONED_ON_RANGE_LEVELS_PROPERTY
has been removed from the class AsOfDateNeighbourValuePostProcessor
.
MarketDataDateShift enum
The MarketDataDateShift
enum value TODAY
has been renamed to CURRENT_DAY
to clarify its meaning.
Deprecated unused column calculator
The unused SensiValueCalculator
is now deprecated.
Unused property removed in DynamicTenorsAndMaturitiesPostProcessor
The unused property SENSITIVITY_TYPE
has been removed from the DynamicTenorsAndMaturitiesPostProcessor
class.
The signatures of the methods that used to have the sensitivityType parameter as an argument have been changed to remove that argument.
As a consequence, the default implementation of the method rebucketing
in the INativeCurrencyMeasures
interface has been changed.
New configuration class ApplicationJwtConfig
The new configuration class ApplicationJwtConfig
has been added to handle the configuration used for JWT authentication.
This class can also handle the activeviam.jwt.failOnDifferentAuthorities
property that was not taken into account previously.
It is imported in the class MarketRiskConfig
instead of the previously used JwtConfig
class.
Tomcat server version bumped to 10.1.19
In the mr-application module, this version override of the spring-boot-starter-web dependency is required to customize the use of cookies to allow websocket connections.
Migration of the content server database
The application has been upgraded to Hibernate 6.3.1.Final and H2 2.2.224. As a consequence, the content of the content server database has changed. To export your existing bookmarks from Atoti Market Risk 5.3.0 and import them into 5.4.0, follow these steps:
- Launch your Atoti Market Risk 5.3.0 application.
- Export the bookmarks by executing the
main
method of the classExportReferenceContentServer
in themr-application-tests
module. You may need to change the values of the properties used for bookmark export - see mr.bookmark.properties. The bookmarks are exported into the folder specified in the value of thecontentServer.bookmarks.export-folder-name
property. - Launch the Atoti Market Risk 5.4.0 application with the following properties:
warning
Please note that this will create a new content server database from scratch and erase your existing database.
mr.application.content-server.db.hibernate.hbm2ddl.auto=create
mr.application.content-server.reset=folder
mr.application.content-server.factory-reset.folder-name=file:full_path_to_the folder_where_bookmarks_were_exported
Check in Atoti UI that the imported bookmarks are present.
- Stop the Atoti Market Risk 5.4.0 application and copy the
mr_ref_impl_content_service.mv.db
file from the target folder of themr-application
module to thesrc/main/resources
folder of themr-application
module. - Launch the MR 5.4.0 application without the following properties being set:
mr.application.content-server.db.hibernate.hbm2ddl.auto
mr.application.content-server.reset
mr.application.content-server.factory-reset.folder-name
You should now see your imported bookmarks in Atoti UI.
Fluent post-processor setup
The measure creation function returning a CopperMeasure
is now deprecated, for instance the old definition:
default MeasureCreator pnlDistribution() {
return underlier -> PnLDistributionPostProcessor.measure(
underlier[0],
getMeasureParameters().getPercentileLevel(),
getMeasureParameters().getPnlDistributionConfigurationService(),
false)
.withFormatter(getMeasureParameters().getFormatters().getPercentFormat())
.withinFolder(getMetricParameters().getValueAtRiskFolder() + "\\" + getMetricParameters().getVarFolder())
.as(getMetricParameters().getPnlDistribution());
}
is now replaced by a Fluent way of defining a custom measure:
default MeasureCreator pnlDistribution() {
return underlier -> PnLDistributionPostProcessor.measure()
.withUnderlyingMeasure(underlier[0])
.withAnalysisLevels(getMeasureParameters().getPercentileLevelId())
.withNumberOfBuckets(getMeasureParameters().getPnlDistributionConfigurationService().getNumberOfBuckets())
.withIsAccumulate(false)
.withFormatter(getMeasureParameters().getFormatters().getPercentFormat())
.withinFolder(getMetricParameters().getValueAtRiskFolder() + "\\" + getMetricParameters().getVarFolder())
.as(getMetricParameters().getPnlDistribution());
}
The functions providing levels as strings are also deprecated and replaced by a function that returns a LevelIdentifier
. Those functions are suffixed with “…Id”.
The Property partitionedOnRangeLevels=false
has been removed from all post-processor setups.
Constant VALUE_CCY
in StoreFieldConstants
removed and replaced by constant CCY
.
In the mr-common-lib
module, the VALUE_CCY
constant in StoreFieldConstants
has been removed, and the constant CCY
is used instead, because those two
constants had the same value: Ccy
.
In the mr-pnl-config
module, the following classes now use the CCY
constant instead of the VALUE_CCY
constant:
- SupportedAdjustmentsPnLConfig
- PnLStoreConfig
- PnLAggregatedStoreConfig
- PnLFlatStoreConfig
- SignoffSummaryPnlPublisher
- SummaryPnlPublisher
Catalog name change
The catalog has been renamed to MR
from MarketRiskAccelerator
. If you are using Atoti Limits with Atoti Market Risk, you need
to change your UI settings. See the Atoti Limits documentation.
Removal of debug market data measures
In addition to the removed debug measures, the following changes have been made.
With the post-processor property debug string no longer relevant, the following post-processors were modified:
Post Processor | Module | Status |
---|---|---|
APnlVectorFromRiskSensiPostProcessor.java | mr-sensi-lib |
Modified |
MarketDataDebugStringPostProcessor.java | mr-sensi-lib |
Removed |
MarketDataPostProcessor.java | mr-sensi-lib |
Modified |
PnlVectorFromCrossRiskSensiPostProcessor.java | mr-sensi-lib |
Modified |
PnlVectorFromRiskSensiPostProcessor.java | mr-sensi-lib |
Modified |
ScalarPnlVectorFromCrossRiskSensiPostProcessor.java | mr-sensi-lib |
Modified |
ScalarPnlVectorFromRiskSensiPostProcessor.java | mr-sensi-lib |
Modified |
ShiftVectorPostProcessor.java | mr-sensi-lib |
Modified |
TenorMaturityAndMoneynessStringDebugExpand.java | mr-sensi-lib |
Removed |
PriceMarketDataPostProcessor.java | mr-market-data-lib |
Modified |
PriceShiftVectorPostProcessor.java | mr-market-data-lib |
Modified |
AMarketDataPostProcessor.java | mr-common-lib |
Modified |
AShiftVectorPostProcessor.java | mr-common-lib |
Modified |
AsOfDateNeighbourValuePostProcessor.java | mr-common-lib |
Modified |
ScalarMarketDataPostProcessor.java | mr-common-lib |
Modified |
ScalarShiftVectorPostProcessor.java | mr-common-lib |
Modified |
Measure factories have been modified in consequence.
Other files affected:
File | Module | Status |
---|---|---|
EnableMDStringDebug.java | mr-common-lib |
Removed |
EnableMDStringDebugTranslator.java | mr-common-lib |
Removed |
IEnableMDStringDebug.java | mr-common-lib |
Removed |
Deprecation of Sensitivities vector data model
The vectorized sensitivities are marked as deprecated and for removal in the next version. The sensitivities measure chains and sensitivities store are primarily affected, the following are removed:
tip
Customers needing to switch from vectorized to scalar sensitivities may want to keep the store-backed maturity conversion instead of the maturity conversion used by default for scalar sensitivities. See Customizing the Market Risk Solution to use store-backed maturity conversion with scalar sensitivities
This deprecation includes the removal of the following classes:
Class | Module |
---|---|
MarketDataPostProcessor | mr-sensi-lib |
PnLExplainCrossPostProcessor | mr-sensi-lib |
PnLExplainPostProcessor | mr-sensi-lib |
PnlVectorFromCrossRiskSensiPostProcessor | mr-sensi-lib |
PnlVectorFromRiskSensiPostProcessor | mr-sensi-lib |
SensiTradeStoreTuplePublisher.java | mr-sensi-config |
VectorMarketDataStoreConfig | mr-sensi-config |
VectorTradeSensitivitiesStoreConfig | mr-sensi-config |
VectorRiskDimensionConfig | mr-sensi-config |
BeanScalar | mr-common-config |
BeanVectorised | mr-common-config |
ConditionalOnVectorizedSensitivity | mr-common-config |
ConditionalOnScalarSensitivity | mr-common-config |
Customizing the Market Risk Solution to use store-backed maturity conversion with scalar sensitivities
Customers needing to switch from vectorized to scalar sensitivities may want to keep the store-backed maturity conversion instead of the maturity conversion used by default for scalar sensitivities.
To allow the maturity conversion to use stores for the definition of tenors, maturities, and moneynesses when running Atoti Market Risk with scalar sensitivities, a number of @Beans
should be provided in a custom @Configuration
class:
- A
@Bean
for adding the tenors, maturities, and moneyness stores. - A
@Bean
for adding the Data Load Controller topics for loading data into the stores. - A
@Bean
for the maturity converter using the stores.
The store configuration @Bean
This can be either an AConfigurableSchema
or a DatastoreConfiguratorConsumer
@Bean
creating the three stores.
As we already provide an AConfigurableSchema
for the stores, we can use it directly:
@Bean
public AConfigurableSchema bucketStores() {
return new TenorsStoreConfig();
}
Alternatively, the stores can be created explicitly:
@Bean
public DatastoreConfiguratorConsumer bucketStores() {
return configurator -> {
configurator.addStore(
configurator.storeBuilder()
.withStoreName(StoreConstants.TENOR_STORE_NAME)
.withField(StoreFieldConstants.SENSITIVITY_TENORS).asKeyField()
.withField(StoreFieldConstants.TENOR_SENSITIVITY_NAME).asKeyField()
.withField(StoreFieldConstants.TENOR_NUMBER_OF_DAYS, DOUBLE)
.withField(StoreFieldConstants.TENOR_INDICES, INT)
.withDuplicateKeyHandler(DuplicateKeyHandlers.LOG_WITHIN_TRANSACTION)
.updateOnlyIfDifferent()
.build()
);
//...
};
}
The data loading @Bean
This is a copy of the configuration done for the vectorized sensitivities.
@Qualifier(SP_QUALIFIER__SENSI_TOPIC_TO_STORE_AND_FILE_MAP)
@Bean
@Order(10)
public ChannelParametersHolderOperator bucketFilePatterns(SensiFilePatternProperties filePatterns) {
var TOPIC_ALIASES = List.of(STATIC_SENSI_PILLARS, SENSI_PILLARS, SENSI_CONFIG, ALL_CONFIGURATION);
return patterns -> {
patterns.addTopic(StoreConstants.TENOR_STORE_NAME, StoreConstants.TENOR_STORE_NAME, filePatterns.getTenors(), TOPIC_ALIASES);
patterns.addTopic(StoreConstants.MATURITY_STORE_NAME, StoreConstants.MATURITY_STORE_NAME, filePatterns.getMaturities(), TOPIC_ALIASES);
patterns.addTopic(StoreConstants.MONEYNESS_STORE_NAME, StoreConstants.MONEYNESS_STORE_NAME, filePatterns.getMoneyness(), TOPIC_ALIASES);
};
}
The maturity converter @Bean
We can copy the maturity converter from the vectorized sensitivities configuration. To ensure the converter is used by the Solution, mark the @Bean
as @Primary
.
/**
* This will instantiate the duration service based on the bucket stores.
*
* @param smileConverter The smile converter to use in the maturity converter.
* @return maturity converter
*/
@Bean
@Qualifier(SP_QUALIFIER__MATURITY_CONVERTER)
@Primary
public IMaturityConverter storeBackedMaturityConverter(
@Qualifier(SP_QUALIFIER__DAY_COUNT_CONVENTION) IDayCountConvention dayCountConvention,
@Qualifier(SP_QUALIFIER__TENOR_CONVERTER) ITenorConverter tenorConverter,
@Qualifier(SP_QUALIFIER__SMILE_CONVERTER) ISmileConverter smileConverter) {
Map<BucketType, StoreQueryMaturityConverter.StoreDescription> storeDescriptionMap = ImmutableMap
.<BucketType, StoreQueryMaturityConverter.StoreDescription>builder()
.put(TENOR_INPUT, new StoreQueryMaturityConverter.StoreDescription(
StoreConstants.TENOR_STORE_NAME,
StoreFieldConstants.TENOR_NUMBER_OF_DAYS,
BaseConditions.equal(FieldPath.of(StoreFieldConstants.TENOR_LABELS)).as(StoreFieldConstants.TENOR_LABELS)))
.put(MATURITY_INPUT, new StoreQueryMaturityConverter.StoreDescription(
StoreConstants.MATURITY_STORE_NAME,
StoreFieldConstants.TENOR_NUMBER_OF_DAYS,
BaseConditions.equal(FieldPath.of(StoreFieldConstants.TENOR_LABELS)).as(StoreFieldConstants.TENOR_LABELS)))
.put(MONEYNESS_INPUT, new StoreQueryMaturityConverter.StoreDescription(
StoreConstants.MONEYNESS_STORE_NAME,
StoreFieldConstants.TENOR_NUMBER_OF_DAYS,
BaseConditions.equal(FieldPath.of(StoreFieldConstants.TENOR_LABELS)).as(StoreFieldConstants.TENOR_LABELS)))
.put(TENOR_DYNAMIC, new StoreQueryMaturityConverter.StoreDescription(
StoreConstants.DYNAMIC_TENOR_STORE_NAME,
StoreFieldConstants.TENOR_NUMBER_OF_DAYS,
BaseConditions.and(BaseConditions.equal(FieldPath.of(StoreFieldConstants.TENOR_LABELS)).as(StoreFieldConstants.TENOR_LABELS),
BaseConditions.equal(FieldPath.of(StoreFieldConstants.TENOR_SET)).as(StoreFieldConstants.TENOR_SET))))
.put(MATURITY_DYNAMIC, new StoreQueryMaturityConverter.StoreDescription(
StoreConstants.DYNAMIC_MATURITY_STORE_NAME,
StoreFieldConstants.TENOR_NUMBER_OF_DAYS,
BaseConditions.and(BaseConditions.equal(FieldPath.of(StoreFieldConstants.TENOR_LABELS)).as(StoreFieldConstants.TENOR_LABELS),
BaseConditions.equal(FieldPath.of(StoreFieldConstants.TENOR_SET)).as(StoreFieldConstants.TENOR_SET))))
.put(MONEYNESS_DYNAMIC, new StoreQueryMaturityConverter.StoreDescription(
StoreConstants.DYNAMIC_MONEYNESS_STORE_NAME,
StoreFieldConstants.TENOR_NUMBER_OF_DAYS,
BaseConditions.and(BaseConditions.equal(FieldPath.of(StoreFieldConstants.TENOR_LABELS)).as(StoreFieldConstants.TENOR_LABELS),
BaseConditions.equal(FieldPath.of(StoreFieldConstants.TENOR_SET)).as(StoreFieldConstants.TENOR_SET))))
.build();
return new StoreQueryMaturityConverter(storeDescriptionMap,
new MraSimpleMaturityConverter(dayCountConvention,
Map.of(TENOR_INPUT, tenorConverter,
MATURITY_INPUT, tenorConverter,
MONEYNESS_INPUT, smileConverter,
TENOR_DYNAMIC, tenorConverter,
MATURITY_DYNAMIC, tenorConverter,
MONEYNESS_DYNAMIC, smileConverter)
)
);
}
New Dividend and Split Ratio stores
In the mr-application
module:
- The following attributes have been added to the
RiskPostProcessorInjector
class:
protected final IContextualCorporateActionMarketDataRetriever contextualCorporateActionMarketDataRetriever;
protected final IContextualDividendMarketDataRetriever contextualDividendMarketDataRetriever;
- In the same class, the following injections are performed in post-processors in the method:
injectAll(IContextualCorporateActionMarketDataRetrieverAware.class, contextualCorporateActionMarketDataRetriever);
injectAll(IContextuaDividendMarketDataRetrieverAware.class, contextualDividendMarketDataRetriever);
-
In the
DataLoadControllerFileConfig
class, the following constants are used in thetopicToScopeToLoadConverter
andtopicToScopeToRemoveWhereConditionConverter
:SPLIT_RATIO_STORE_NAME
DIVIDEND_MARKET_DATA_STORE_NAME
-
In the
MarketRiskConfig
class, the following configuration imports have been added:
CorporateActionMarketDataRetrievalConfig.class,
DividendMarketDataRetrievalConfig.class,
In the mr-common-lib
module:
- In the file
StoreConstants
, these two constants have been added:- SPLIT_RATIO_STORE_NAME
- DIVIDEND_MARKET_DATA_STORE_NAME
In the mr-sensi-config
module:
- The store
CorporateAction
has been deprecated. It is still used to handle dividends for vectorized sensitivities, but is not used anymore for scalar sensitivities. The storesDividendMarketData
andSplitRatioMarketData
need to be used instead of theCorporateAction
store. - The
SplitRatioMarketData
store is used for handling stock split ratios both for vectorized and scalar sensitivities. - The
SensiFilePatternProperties
class has been updated to take into account the file patterns for Dividends and Split Ratios. - In the
AllSensiStoresConfig
class, theDividendMarketDataStoreConfig
andSplitRatioStoreConfig
configuration classes are imported. - The
DividendCurrentDateMarketDataChain
uses the constantMarketDataDateShift.CURRENT_DAY
instead of the constantDateShift.CURRENT_DATE
. and theDividendNextDateMarketDataChain
uses the constantMarketDataDateShift.NEXT_DAY
instead of the constantDateShift.NEXT_DATE
. - In the
DividendPnLExplainMeasuresConfig
class, theDividendMarketDataRetrievalConfig
configuration class is imported. - In the
SensiCsvSourceParametersProviderConfig
class, the following lines have been added:
patterns.addTopic(StoreConstants.SPLIT_RATIO_STORE_NAME, StoreConstants.SPLIT_RATIO_STORE_NAME, sensiFilePatterns.getSplitRatio(), DAILY_SENSI_ALIASES);
patterns.addTopic(StoreConstants.DIVIDEND_MARKET_DATA_STORE_NAME, StoreConstants.DIVIDEND_MARKET_DATA_STORE_NAME, sensiFilePatterns.getDividends(), DAILY_SENSI_ALIASES);
In the mr-sensi-lib
module:
- The following constants have been added to the
MeasureConstants
class:
public static final String DIVIDEND_RETRIEVER_NAME = "DIVIDEND_MARKET_DATA_RETRIEVER";
public static final String SPLIT_RATIO_RETRIEVER_NAME = "SPLIT_RATIO_MARKET_DATA_RETRIEVER";
- In the class
SensiFactory
, the attributedividendCopper
and the methodgetDividendCopper()
have been removed. - The signature of the method
scalarNativeIntermediateInterpolatedDividend
changed from:LevelParameterRetriever<SensiMeasureParameters> riskFactorLevelRetriever, IDateShift dateShift)
toLevelParameterRetriever<SensiMeasureParameters> riskFactorLevelRetriever, MarketDataDateShift marketDataDateShift)
and its default implementation has been changed. - The default implementation of the method
ISplitMeasures.corporateSplit
has been changed. - In the
DividendSensiMeasureNames
class, the constantsSPLIT_RATIO_CURRENT
andSPLIT_RATIO_PREVIOUS
and the methodsgetSplitNameCurrent()
andgetSplitNamePrevious()
have been removed.
In the mr-directquery
module:
- The snowflake database scripts have been updated:
createMR.sql
now createsDIVIDEND_MARKET_DATA
andSPLIT_RATIO_MARKET_DATA
storesloadMR.sql
now loads data in the storesDIVIDEND_MARKET_DATA
andSPLIT_RATIO_MARKET_DATA
- The mssql database scripts have been update:
createMR.sql
now createsDIVIDEND_MARKET_DATA
andSPLIT_RATIO_MARKET_DATA
storesloadMR.sql
now loads data in the storesDIVIDEND_MARKET_DATA
andSPLIT_RATIO_MARKET_DATA
Deletion of Market Data Cube
The Market Data Cube has been deleted.
The modules mr-market-data-lib
and mr-market-data-config
have been removed. They were used for the configuration of the market data cube.
In the mr-application
POM file, the following dependency has been removed:
<dependency>
<groupId>com.activeviam.apps</groupId>
<artifactId>mr-market-data-config</artifactId>
<version>${project.version}</version>
</dependency>
The MRCombinedCube
class has been updated to take into account the removal of the Market Data Cube.
In the mr-common-config
module, the following classes were deleted:
BeanEnabledMarketDataCube
ConfigurationEnabledMarketDataCube
TheBeanEnabledAnyCube
class has been updated to take into account the removal of the Market Data Cube.
Maven dependencies
The following test dependency has been added to the mr-sensi-lib
module:
<dependency>
<groupId>com.activeviam.apps</groupId>
<artifactId>market-data-api</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
IMaturityConverterAware class
The com.activeviam.accelerator.common.dates.IMaturityConverter
interface has been removed from the module mr-common-lib
and has been replaced by the
interface com.activeviam.accelerator.common.dates.IMaturityConverter
.
Theta: methods renamed
In the class ThetaCopper
, the following methods have been renamed:
New method name | Old method name |
---|---|
vectorTimeToMaturity | marketDataPostProcessor |
scalarTimeToMaturity | scalarMarketDataPostProcessor |
Logback Fix
We provide a logback configuration (mr-application/src/main/resources/logback-spring-file.xml
) that outputs to a local log file. This configuration references classes that are no longer present, causing the application startup to fail.
You can fix this configuration by making the following changes:
- In
<conversionRule conversionWord="thread" converterClass="com.activeviam.apm.logging.impl.APMThreadConverter"/>
<conversionRule conversionWord="user" converterClass="com.activeviam.apm.logging.impl.APMUserConverter"/>
<conversionRule conversionWord="instance" converterClass="com.activeviam.apm.logging.impl.APMInstanceConverter"/>
with:
<conversionRule conversionWord="thread" converterClass="com.activeviam.apm.logging.impl.LogThreadConverter" />
<conversionRule conversionWord="user" converterClass="com.activeviam.apm.logging.impl.LogUserConverter" />
<conversionRule conversionWord="instance" converterClass="com.activeviam.apm.logging.impl.LogInstanceConverter" />
- Delete
<file>${custom.json.log.dir}/activepivot.log</file>
on line 51.
Swagger UI Fix
Swagger UI is used to document REST endpoints in Atoti Market Risk. It should be available at .../swagger-ui/index.html
but this endpoint results in a not found exception. This is a known issue in Atoti Market Risk 5.4 and is due to an outdated dependency. You can resolve this issue with the following steps:
- In the project root pom.xml file replace:
<springdoc.version>1.6.0</springdoc.version>
with:
<springdoc.version>2.2.0</springdoc.version>
and replace:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${springdoc.version}</version>
</dependency>
with:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>${springdoc.version}</version>
</dependency>
- In the pom.xml file of the mr-application module replace:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
</dependency>
with:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
</dependency>