The OpenGamma Platform is a modern software stack at the centre of which is the OpenGamma Engine, a distributed computation engine designed specifically for financial calculations. The Platform consists of various components and subsystems which can all be customised or replaced to meet the needs of any particular installation.
This document explores the broad categories of components and subsystems which occur in the OpenGamma Platform.
Data components form a large part of the OpenGamma Platform, reflecting the importance and variety of data required in modern computational finance. There are two distinct types of data requirements: live streaming data, and everything else.
Live data is anything that may change in real-time, which is often provided on a subscription basis from external systems. Furthermore, it is often the data for which changes must take effect as soon as possible in computations.
The OpenGamma Engine supports live data as the ultimate source of input data into the dependency graph, with changes able to trigger a computation cycle. This is normally satisfied by external market data. Market data sources may be based on the OpenGamma Live Data subsystem for feed aggregation and processing, or developers may provide custom implementations directly by implementing the required interfaces.
The OpenGamma Live Data subsystem is a standalone library which supports everything usually required to handle live financial data in a generic way. The client portion of the library is used by the OpenGamma Engine to make the subscriptions required for live data inputs. These will be satisfied by a remote live data server, without any coupling between the OpenGamma Engine and the available live data sources.
Developers wishing to write their own OpenGamma Live Data server around a custom feed of live data should refer to Writing a custom OpenGamma Live Data Server.
We are pleased to say we can now provide a Bloomberg OpenGamma Live Data Server as part of our open source release as a result of Bloomberg's Open Market Data Initiative. This provides support for integration with:
|Commercial customers have access to three built-in market data feed handlers fully supported by OpenGamma, and implemented as OpenGamma Live Data servers:
These components are available for evaluation use by contacting OpenGamma.
Since OpenGamma Live Data is a standalone library, the client portion may be used by other, arbitrary systems to access live data from an OpenGamma Live Data server, without any dependencies on the rest of the OpenGamma Platform.
Data which is not expected to change in real-time is that which is accessed on demand by querying, and is typically stored in a database. This includes reference data as well as trading data such as positions. This forms the majority of data which the OpenGamma Platform requires, and there is extensive discussion of its treatment in Sources, Masters, and Databases.
Access to Bloomberg security reference data is available through the [Bloomberg Reference Data] implementation in the newly open sourced OpenGamma Bloomberg Module.
Calculations are performed by the OpenGamma Engine across the available computation resources. This sits at the heart of the Platform, and at its core is a dependency graph executor which transforms a declarative definition of the required outputs into the calculated results. The Engine is responsible for meeting client demand for particular computation results, and for ensuring that this occurs in the most efficient way possible.
For a complete overview, see Views and Results.
Clients are a key tool in allowing users to harness the power of the OpenGamma Platform. Several fully-supported clients are available, and it is also possible to develop custom clients against our language-specific APIs, or from any language against our REST API.
The web client is our standard interface to the OpenGamma Platform, which provides streaming computation results to the browser as well as the ability to view and modify all Non-Live Data available to the platform.
For a complete overview, see OpenGamma Web Interface.
|This is a commercial component. It is available for evaluation use by contacting OpenGamma.|
The OpenGamma Tools for Microsoft Excel are based around an XLL plugin with a unique feature set, allowing for powerful, natural interaction with the services available through the OpenGamma Platform. It allows, from within the Excel environment:
- the ad-hoc creation of securities, positions, portfolios and view definitions
- computations to be driven around any of this ad-hoc, or permanent, data
- computation results, whether driven from Excel or not, to be streamed to Excel or any other client
These tools use the core language services also used by The R Statistical Programming Language, which can be configured to run as a Windows service.
For a complete overview, see OpenGamma Tools for Microsoft Excel.
The OpenGamma R Integration is primarily intended to provide facilities for scenario analysis and, as such, allows R functions to be used to perturb input data and run batch jobs based on snapshots and/or historical data. R's powerful graphing and statistical analysis functions can then be used to post-process the results.
This integration uses the core language services also used by the OpenGamma Tools for Microsoft Excel.
Developer APIs are provided for popular languages which provide full, remote client access to to the OpenGamma Platform.
The Java API is the same API used internally in the Platform and by many of the supported clients.
For a complete overview, see Writing a Java Client.
The .NET API allows the full power of the OpenGamma Platform to be harnessed from languages such as C#, for easy integration with existing applications or to access powerful graphical rendering capabilities.
For a complete overview, see Writing a C Sharp Client.
The REST API is used by both the Java and .NET APIs to provide remote access to the OpenGamma Platform, and it is available for use directly from any language. It provides a natural, REST-oriented view of the Platform including full support for injecting ad-hoc data structures, driving computations and retrieving results.