External market data identifiers
Table of Contents
Summary
Market data series are identified differently by different data vendors and
systems. Reuters/Refinitiv (now LSEG) uses RICs (e.g. EUR=), Bloomberg uses
its own ticker syntax (e.g. EURUSD BGN Curncy), the Open Source Risk
Engine (ORE) uses a slash-delimited canonical key (e.g. FX/RATE/EUR/USD),
and MDDL (Market Data Definition Language, FISD/SIIA's XML-based standard —
see Market Data Definition
Language (MDDL)) wraps an instrumentIdentifier container element
(code + codeType) around whichever identifier a source system already uses
(ISIN, RIC, ticker, …) rather than minting its own short-string
notation. FIX (Financial Information eXchange — see
Financial Information eXchange
(FIX) Protocol) takes the same wrapping approach for symbology via its
SecurityIDSource field, which names RIC_CODE and BLOOMBERG_SYMBOL as
explicit member schemes, but adds a dedicated wire-message family for
market data itself (MarketDataSnapshotFullRefresh,
MarketDataIncrementalRefresh, …) that neither MDDL nor the other
schemes have. OpenGamma Strata's com.opengamma.strata.data.MarketDataId<T>
takes yet another approach: an open-source Java generic interface that names
no concrete fields at the base level, leaving field structure entirely to
each implementing class — the only scheme here that is a type abstraction
rather than a string format or wire protocol. This document is a comparative
analysis of these six schemes on their own terms — what each is, who owns
it, whether a formal specification exists, and each scheme's pros, cons, and
limitations — independent of any particular consumer of the schemes.
Format overviews
RIC (Reuters Instrument Code)
The Reuters Instrument Code, now called the Refinitiv Identification Code
but still universally referred to as RIC, is a ticker-like code that
Reuters — and, through successive acquisitions, Refinitiv and now LSEG
(London Stock Exchange Group) — has used since the 1980s to identify
tradeable instruments and indices across its market data terminals and
feeds. It is the oldest of the schemes covered in this document and carries
that history in its design: rather than a single systematic
grammar, RIC is a loose family of per-asset-class conventions that grew
organically as new instrument types were added to Reuters' systems over
decades — an equity RIC appends an exchange suffix (AAPL.OQ), an index
RIC is prefixed with a dot (.SPX), an FX spot RIC appends an equals sign
(EUR=), and credit/rates RICs often carry a broker-specific suffix
(ICAP, GFI) reflecting which inter-dealer broker's screen the quote
was sourced from. There is no independent standards body governing RIC —
it is entirely owned and controlled by LSEG as a proprietary asset of its
data business, and there is no open, publicly published specification: the
authoritative definition of RIC syntax exists only inside the licensed
Refinitiv Data Platform / Eikon / Workspace customer documentation,
accessible to paying subscribers. Using RIC as an identifier therefore
means depending on a data vendor's proprietary naming scheme rather than an
open standard, and, mechanically, on characters (= and .) that many
downstream systems — including hierarchical pub/sub subject naming — cannot
carry unescaped. No dedicated open-source C++ library for parsing or
generating RIC syntax was found; LSEG's own Real-Time SDK (formerly RFA
/ the Enterprise Message API, written in C++) consumes RIC-tagged
real-time feeds, but it is itself a proprietary, licence-gated SDK aimed at
feed consumption, not a general-purpose open parser. See
LSEG Data & Analytics for the
vendor's own (login-gated) documentation portal, and the
Reuters Instrument
Code Wikipedia article for a general-audience, non-authoritative summary.
Bloomberg ticker
The Bloomberg ticker is Bloomberg L.P.'s own instrument-identification
scheme, used throughout the Bloomberg Terminal and its programmatic
interfaces since the Terminal's introduction in the early 1980s. Unlike
RIC, every Bloomberg ticker follows one consistent two-part shape: a
free-form ticker string followed by a space and a "yellow key" — a short,
explicit asset-class tag such as Equity, Curncy, Index, Comdty, or
Corp (e.g. AAPL US Equity, EURUSD BGN Curncy). That yellow key gives
Bloomberg tickers a more systematic feel than RIC — a reader can always
tell the asset class from the last token — but the internal structure of
the ticker portion itself still varies by asset class: an equity ticker
carries an exchange code (US, LN) as part of the ticker, while an FX
or rates ticker does not, so there remains no single universal grammar
that a program could apply uniformly across asset classes. Bloomberg
ticker syntax is entirely proprietary to Bloomberg L.P.; there is no open
standards body and no publicly published formal specification — the
authoritative reference exists only inside the licensed Bloomberg
Terminal and Bloomberg API (BLPAPI) customer documentation. No dedicated
open-source C++ library for parsing or generating Bloomberg ticker syntax
was found. Bloomberg's official BLPAPI C++ SDK lets a client query data
by passing a ticker string, but it is itself a proprietary, licence-gated
query API rather than an open parsing library, and it does not parse or
validate ticker syntax on the client side — the string is passed through
as an opaque key to Bloomberg's own backend for resolution. Bloomberg does
maintain a large open-source C++ presence (its
BDE, Basic Development Environment,
libraries), but these are general-purpose foundational libraries and are
unrelated to ticker parsing. See
Bloomberg Professional
Services for the vendor's own (login-gated) documentation, and the
Bloomberg Terminal
Wikipedia article for a general-audience, non-authoritative summary.
ORE canonical key
The ORE canonical key is the identifier scheme native to the Open Source
Risk Engine (ORE), an open-source pricing and risk analytics library.
Unlike RIC and Bloomberg, it was not designed as a market-data vendor's
product identifier — it was designed purely as ORE's own internal input
format for the marketdata.csv files that feed every ORE pricing run,
and it is defined and owned entirely by
the ORE open-source project, currently maintained by Acadia (formerly
Quaternion Risk Management / AcadiaSoft). Because it exists to serve one
program's input format rather than to label instruments for human traders
across a whole industry, it is the most systematic of the three short-string schemes:
every key follows the same top-level slash-delimited shape,
TYPE/SUBTYPE/dim1/.../dimN, regardless of asset class — though, unlike
a flatter scheme, the number and meaning of the dimensions after
TYPE/SUBTYPE is fixed per type rather than universal (see
ORE quote key structure below for the
detail this simplification glosses over). There is no external standards body governing it
either, but — in sharp contrast to RIC and Bloomberg — its specification
is entirely open: the format is defined by ORE's own open-source code and
by the example marketdata.csv files shipped with every ORE release, all
of it freely readable without a licence of any kind. A C++ library for
parsing and generating this format already exists and ships as part of
ORE itself: the OREData library's CSVLoader reads marketdata.csv
files into ore::data::MarketDatum objects keyed on this exact
structure, and the same classes serialise back out to CSV — there is no
separate parsing library to seek out, because parsing and generation are
first-class, built-in parts of ORE. See
Open Source Risk Engine — project
home and OpenSourceRisk/Engine
on GitHub (the Examples/ directory contains the marketdata.csv files
this key format is drawn from; OREData/ored/marketdata/ contains the
CSVLoader=/=MarketDatum parsing code).
ORE's CurveSpec class hierarchy
Alongside the canonical key format, ORE has a parallel internal
addressing scheme used within its own engine: the CurveSpec class
hierarchy, declared in OREData/ored/marketdata/curvespec.hpp. The base
class carries a curveConfigID field common to every curve type, and
each concrete subclass — YieldCurveSpec, FXVolatilityCurveSpec,
SwaptionVolatilityCurveSpec, and so on — adds the type-specific fields
that particular curve family needs to be uniquely addressed within ORE's
own engine (a currency code for a yield curve; a currency pair for an FX
volatility curve). CurveSpec additionally carries an explicit
CurveType enumeration (FX, Yield, CapFloorVolatility, …)
discriminating which concrete subclass applies.
CurveSpec is ORE's internal C++ representation, not the canonical key
format: an external consumer's system produces a canonical key string
(e.g. DISCOUNT/RATE/EUR/EUR-DUMMY/2Y) that ORE resolves to the
corresponding CurveSpec object internally. From the point of view of
a system projecting its own identifiers into ORE's notation, CurveSpec
is the target that projection must produce — not a peer identifier
scheme to be compared directly against the canonical key. The fields that
\(T_{\text{ORE}}\) would need to populate a CurveSpec (curveConfigID,
ORE-specific curve-building hints) represent the physical-field gap that
a purely logical identifier does not yet carry.
One terminological trap is worth flagging explicitly: the file-level
documentation comment at the top of curvespec.hpp reads "Curve
requirements specification." ORE's own prose calls CurveSpec — which
sits on the identifier side of the requirement/identifier distinction
and squarely on the vendor side of the identifier/vendor-key
distinction — a "requirement." This is not a contradiction to resolve;
it is a warning that "requirement" is not a safe, field-wide term with
one settled meaning, and a reader moving between an external conceptual
document and ORE's own source comments should not assume the word carries
the same meaning in both places.
MDDL (Market Data Definition Language)
MDDL is an XML-based market data description language originally
developed by the Financial Information Services Division (FISD) of the
Software & Information Industry Association (SIIA), first published in
the early 2000s; see
Market Data Definition
Language (MDDL) for its full version history and current status.
Structurally it differs from the short-string schemes covered here:
RIC, Bloomberg, and the ORE canonical key are each a short single
string that is the identifier, whereas MDDL is a full XML instrument
record, and instrument identity is carried by an instrumentIdentifier
container element (a code plus a codeType controlled vocabulary)
nested inside that record — MDDL does not mint a competing short-string
notation of its own, it wraps whichever identifier the source system
already uses (ISIN, RIC, a vendor ticker, …). Its specification is
open and committee-governed rather than proprietary to a single vendor,
in contrast to RIC and Bloomberg, but unlike ORE's canonical key it was
never adopted as any single pricing engine's native input format. The
last full specification release is MDDL 3.0-beta (2007-03-01); FISD
never published a later version, instead contributing MDDL's vocabulary
toward ISO 20022 and the FIX Protocol. Files retrieved from the (now
defunct) mddl.org are archived at
external/mddl/.
FIX (Financial Information eXchange) Protocol
FIX is a wire message protocol and field/message dictionary maintained
by the FIX Trading Community (formerly FIX Protocol Ltd.), first
published in 1992; see
Financial Information
eXchange (FIX) Protocol for its full version history and content
model. Unlike MDDL, FIX was never wound down — it remains the dominant
open standard for pre-trade, trade, and post-trade messaging and, since
2019, is continuously extended as "FIX Latest" rather than released in
numbered versions. It is the only one of the six schemes here with a
dedicated market data message family: MarketDataRequest,
MarketDataSnapshotFullRefresh, MarketDataIncrementalRefresh, and
MarketDataRequestReject (plus MarketDataStatisticsRequest/Report and
MarketDataReport added in FIX 5.0 SP2) — RIC, Bloomberg, the ORE key,
and MDDL each define an identifier or record shape, but none defines the
wire messages that move a live tick from producer to consumer the way
FIX does. Instrument identity is carried by the Instrument component's
Symbol=/=SecurityID fields tagged with a SecurityIDSource (tag 22)
enum — the same wrapping approach MDDL's codeType takes, and the enum
explicitly includes RIC_CODE and BLOOMBERG_SYMBOL as named member
schemes, alongside CUSIP, SEDOL, ISIN_NUMBER, and others. Its
specification is open, committee-governed, and free of vendor licensing,
much like MDDL and ORE's canonical key, in contrast to RIC and Bloomberg.
Files retrieved from the QuickFIX open-source engine project (which
redistributes the FIX Trading Community's own data dictionaries) are
archived at external/fix/.
OpenGamma Strata's MarketDataId
OpenGamma Strata is an open-source Java library for OTC derivatives
pricing and risk analytics, originally developed by OpenGamma Ltd and
now maintained by the open-source community. Its identifier abstraction,
com.opengamma.strata.data.MarketDataId<T>, differs fundamentally in
kind from the other five schemes covered here — it is a Java generic
interface, not a string format or wire protocol. The Javadoc describes it
as "an identifier for a unique item of market data… Implementations can
identify any piece of market data. This includes observable values, such
as the quoted market value of a security, and derived values, such as a
volatility surface or a discounting curve." The interface's only contract
is uniqueness and a declared value type T (the type of the value the
identifier resolves to — e.g. double for a spot rate, or a curve
object for a full discount curve). All field structure is pushed down
into each concrete implementing class; there is no single canonical field
list at the interface level by design. Strata's rationale is
extensibility across an open-ended set of data kinds a third-party
library cannot anticipate in advance, in contrast to schemes that commit
to a shared field shape across instrument types.
Unlike every other scheme in this document, there is no canonical short
string a consumer would use as a compact map key or pub/sub subject; the
identifier is the Java object, not a serialisation of it. Strata does
not mint a competing short-string notation and does not define a
wire-message protocol. Like ORE's canonical key and unlike RIC,
Bloomberg, MDDL, and FIX, Strata's MarketDataId is also silent on
physical fields at the interface level — an implementing class is free to
carry a source or convention, but nothing at the base contract requires
or names one.
The library is open source (Apache 2.0) and its source and Javadoc are
freely readable without a licence of any kind. See
OpenGamma/Strata on GitHub;
the identifier interface lives in the com.opengamma.strata.data
package, and concrete implementations such as QuoteId, IborIndexId,
and CurveId illustrate the per-class field shape the interface
deliberately omits at the base level.
Identifier scheme comparison
Three of the six schemes address the same instruments with a short
string: RIC (Reuters/Refinitiv, now LSEG) is instrument-type-specific and
not fully systematic; Bloomberg uses a space-separated <ticker>
<yellow-key> composite; ORE uses a slash-delimited, per-type
TYPE/SUBTYPE/dim1/.../dimN key consumed directly by the ORE pricing
engine (marketdata.csv), documented type by type in the
ORE market data catalogue.
Two more, MDDL and FIX, do not — both wrap whichever short-string
identifier a source system already publishes (MDDL's
instrumentIdentifier/codeType, FIX's SecurityIDSource) rather than
minting a competing one, so their comparison tables below carry a worked
XML/message example instead of a short-string cell. OpenGamma Strata is
similarly absent from the short-string columns — not because it wraps an
existing scheme, but because it is a type abstraction with no canonical
serialised form; it does not participate in an instrument-level comparison
table and is covered separately in the
format overview above. RIC and Bloomberg cells below are compiled from
publicly visible instrument examples, not a primary vendor spec — see
Sources. Every cell below is filled with either a concrete
identifier or an explicit statement of why none exists (no standard public
convention, no matching ORE quote type, or "not a single tradeable
instrument") — see each subsection's notes for the reasoning behind any
such cell.
FX
| Instrument | RIC | Bloomberg ticker | ORE quote key |
|---|---|---|---|
| EUR/USD spot | EUR= |
EURUSD BGN Curncy |
FX/RATE/EUR/USD |
| GBP/USD spot | GBP= |
GBPUSD BGN Curncy |
FX/RATE/GBP/USD |
| USD/JPY spot | JPY= |
USDJPY BGN Curncy |
FX/RATE/USD/JPY |
| EUR/GBP cross | EURGBP= |
EURGBP BGN Curncy |
FX/RATE/EUR/GBP |
| EUR/USD 1M forward | EURUSD1MF= |
EURUSD1M BGN Curncy |
FXFWD/RATE/EUR/USD/1M |
Comparative analysis
- RIC: major pairs use base currency code +
=; crosses use the 6-char pair +=; outright forwards append tenor +F. Shortcoming: the encoding is inconsistent even within FX itself — a major pair and a cross are different string lengths, and the forward suffix (F) changes the meaning of the+=character rather than adding a clean, separate field, so a parser cannot reliably split "currency pair" from "instrument type" without an asset-class-specific rule table. - Bloomberg ticker: the ticker portion mirrors RIC's currency-pair
string, but the yellow key (
Curncy) andBGNfixing tag are always explicit, separate tokens. Shortcoming: still a flat, space-delimited string with no distinction between "the pair" and "the tenor" for a forward (EURUSD1Mpacks both into one token, same weakness as RIC'sFsuffix, just with different characters). - ORE quote key: FX spot is a scalar series with no
point_idsegment; the FX forward row's1Mis a genuinepoint_id— forward points form a term structure per currency pair, and ORE's schema has a dedicated dimension for that, unlike RIC or Bloomberg. Shortcoming: this uniformity is bought by having a separate top-levelTYPE(FXvsFXFWD) for spot vs. forward rather than one type with a tenor dimension that is merely absent for spot — spot and forward are not, in ORE's own model, the same series with an optional extra field; they are two different series types that happen to share a currency pair. - MDDL: no short-string row — a
foreignExchangeDomainrecord identifies the pair viainstrumentIdentifierand carries the rate itself asbid=/=ask=/=midcontainer elements (each anmdDecimalplus inheritablecurrency=/=crossrateproperties), rather than a single scalar the way ORE'sFX/RATE/EUR/USDis. Shortcoming: three separate elements (bid=/=ask=/=mid) for what RIC, Bloomberg, and ORE each treat as a single quoted rate means a consumer must know which of the three fields a given feed actually populates — the schema does not mandate all three be present together. - FIX: no short-string row either — a
MarketDataSnapshotFullRefreshidentifies the pair via theInstrumentcomponent'sSymbol(free text, e.g.EUR/USD) and carries bid/offer asMDEntryType0=/=1entries inMDFullGrp, the same shape used for every other asset class in this document. Shortcoming: FIX has no FX-specificSecurityIDSourcevalue — a currency pair is just aSymbolstring with no controlled-vocabulary backing the way RIC's+=suffix or MDDL'sforeignExchangeDomainat least signal "this is FX" structurally.
<mddl version="3.0-beta" xmlns="http://www.mddl.org/mddl/3.0-beta"> <header> <dateTime>2026-07-26</dateTime> <source>EBS</source> </header> <snap> <dateTime>2026-07-26T12:00:00</dateTime> <snapType>tick</snapType> <foreignExchangeDomain> <instrumentIdentifier> <name>EUR/USD spot</name> </instrumentIdentifier> <currency>USD</currency> <crossrate>EUR</crossrate> <bid> <mdDecimal>1.0842</mdDecimal> </bid> <ask> <mdDecimal>1.0844</mdDecimal> </ask> </foreignExchangeDomain> </snap> </mddl>
(Constructed for illustration from the retrieved schema's
foreignExchangeDomain element structure — see
external/mddl/mddl-3.0-beta-full.xsd
— not copied from a real feed; no worked FX example was included in
the retrieved release's Examples/ set.)
8=FIX.4.4|9=140|35=W|49=SENDER|56=TARGET|34=1|52=20260726-12:00:00.000| 262=MDREQ002| 55=EUR/USD| 268=2| 269=0|270=1.0842|271=1000000|273=12:00:00.000| 269=1|270=1.0844|271=1000000|273=12:00:00.000| 10=044|
(Field-per-line for readability; | stands in for the real SOH
delimiter. Constructed by hand from the retrieved FIX 4.4 dictionary —
see external/fix/FIX44.xml — not
copied from a live feed; BodyLength (tag 9) and CheckSum (tag
10) are illustrative placeholder values, not computed from the
actual message bytes.)
Interest rates
| Instrument | RIC | Bloomberg ticker | ORE quote key |
|---|---|---|---|
| USD overnight rate (SOFR) | USDSOFR= |
SOFRRATE Index |
No standalone ORE type for a raw overnight fixing (see note); closest concrete ORE representation is the front SOFR future, OI_FUTURE/PRICE/USD/2025-09/SOFR |
| EUR 6M EURIBOR | EUR6MFSR= |
EUR006M Index |
MM/RATE/EUR/2D/6M (money-market deposit rate at the 6M tenor — the closest single-rate analog to a EURIBOR fixing) |
| USD 5Y IRS par rate | USDSB5Y=ICAP |
USSA5 Curncy |
IR_SWAP/RATE/USD/2D/3M/5Y |
| EUR 10Y IRS par rate | EURABS10Y=ICAP |
EUSA10 Curncy |
IR_SWAP/RATE/EUR/2D/6M/10Y |
| 10Y US Treasury yield | US10YT=RR |
USGG10YR Index |
No sovereign-bond-yield type exists in ORE's quote-key inventory; closest analog is a directly-quoted zero rate, ZERO/RATE/USD/A365/Continuous/10Y (see note) |
| 10Y German Bund yield | DE10YT=RR |
GDBR10 Index |
Same limitation; closest analog ZERO/RATE/EUR/A365/Continuous/10Y (see note) |
| EUR discount curve, 2Y point | Not a single tradeable instrument (a curve point, not a quoted security) | Not a single tradeable instrument, same reason | DISCOUNT/RATE/EUR/EUR-DUMMY/2Y |
| USD discount curve, 5Y point | Not a single tradeable instrument, same reason | Not a single tradeable instrument, same reason | DISCOUNT/RATE/USD/USD-DUMMY/5Y |
Comparative analysis
- RIC: a broker-composite suffix (
ICAP,GFI) or a Reuters-composite tag (RR) is appended to a base code per instrument —USDSB5Y=ICAPfor a swap par rate,US10YT=RRfor a government bond yield. Shortcoming: the suffix vocabulary is not itself systematic —ICAP=/ =GFIname a specific inter-dealer broker whileRRnames a composite calculation method, so the same trailing-code slot means two different kinds of thing depending on asset class, and a raw overnight fixing (SOFR) has no RIC row of its own at all in this table. - Bloomberg ticker: the yellow key stays a stable, explicit tag
(
Curncy,Index) across every rates instrument in this table. Shortcoming: unlike RIC, there is no visible broker/composite provenance in the ticker itself —USSA5 Curncydoes not say whether the quote is a specific broker's screen or a Bloomberg-generic composite, information RIC at least surfaces via its suffix. - ORE quote key: keys are per the
ORE market data catalogue's
documented
IR_SWAP/RATE/CCY/spot_lag/float_index_tenor/swap_tenorandDISCOUNT/RATE/CCY/curve_id/tenorshapes — richer than the simplifiedseries_type/metric/qualifier[/point_id]shown later in this document (see ORE quote key structure). Shortcoming: ORE has no standalone type for a raw overnight fixing or a sovereign bond's own yield-to-maturity — SOFR enters only as an index-tenor dimension insideIR_SWAP/RATEor viaOI_FUTURE/PRICE, and government yields are represented, if at all, via the genericZERO/RATEcurve-construction type rather than a bond-specific yield quote; treating aZERO/RATEpoint as equivalent to a Treasury or Bund's quoted yield is an approximation, not an identity, sinceZERO/RATEis a curve input, not a specific bond's yield-to-maturity. No RIC/Bloomberg row above lines up one-to-one with an ORE key and vice versa — the RIC/Bloomberg rows quote par rates or fixings for specific indices/tenors, while the ORE rows are term-structure series (a tenor dimension carries the point on the curve). - MDDL: for the USD 5Y IRS par rate row, a generic
instrumentDomainrecord'sinterestRateContainersub-container (rate,period,compounding,accrual, …) can carry a swap's fixed-rate terms, withinstrumentIdentifiernaming the instrument andinstrumentTypean open, source-defined value (no fixed enumeration of instrument types ships in the schema itself, unlikeMDEntryTypein FIX or ORE'sTYPE/SUBTYPE). Shortcoming: becauseinstrumentTypeis open-vocabulary, two MDDL producers could each publish a 5Y USD swap under differentinstrumentTypestrings with no schema-level way to detect they mean the same thing — a structural gap none of RIC, Bloomberg, or ORE's fixed vocabularies have. - FIX: has no standard, widely-documented Market Data convention for
publishing an OTC swap's par rate as a tick — swap rates are
typically negotiated/executed via FIX's order and trade-capture
messages (multi-leg
Instrument=/=InstrmtLegGrpstructures) rather than streamed throughMarketDataSnapshotFullRefresh. Shortcoming: this is the same broker-composite, not-retail-ticker gap RIC and Bloomberg both have for this row — none of the schemes here has a clean, publicly documented tick-level convention for an IRS par rate, only ORE'sIR_SWAP/RATEkey (a pricing-engine input, not a market feed convention) comes close.
Swaptions
| Instrument | RIC | Bloomberg ticker | ORE quote key |
|---|---|---|---|
| EUR swaption vol, 5Y expiry / 2Y tenor, ATM | No standard public RIC convention found — swaption vol is broker-composite data (e.g. ICAP screens), not retail-ticker data | No standard public Bloomberg ticker convention found — same reason | SWAPTION/RATE_LNVOL/EUR/5Y/2Y/ATM |
Comparative analysis
- RIC and Bloomberg ticker: neither vendor has a documented public convention for swaption volatility — it is inherently broker-composite, over-the-counter data (sourced from inter-dealer brokers such as ICAP or Tullett Prebon) rather than data with a standardised single-vendor ticker convention. Shortcoming: this is a genuine gap in public documentation for both vendors, not an omission from this table — a consumer needing swaption vol by RIC or Bloomberg ticker must go through a broker's own proprietary screen naming, which neither vendor publishes.
- ORE quote key: the key follows the catalogue's documented
SWAPTION/RATE_LNVOL/CCY/expiry/swap_tenor/strikeshape — a genuine advantage here, since it is the only one of the short-string schemes with an openly documented structure for this instrument at all. Shortcoming: the four-dimension surface coordinate (expiry, tenor, strike) is carried entirely inside thepoint_idsegment, so — unlike the FX or rates rows — a consumer must already know this type's specific dimension count to parse the key; the same top-level shape gives no hint that a swaption key has three trailing dimensions where an FX key has none. - MDDL and FIX: neither has any documented representation for a
swaption volatility surface point in the retrieved specification
material — no dedicated instrument type, message, or property was
found for expiry/tenor/strike-keyed implied vol in either the 3.0-beta
schema or the FIX 4.4/5.0 SP2 dictionaries. Shortcoming: this is a
genuine gap for all four of the non-ORE schemes here, not just RIC and
Bloomberg — swaption vol is broker-composite, over-the-counter data
that none of RIC, Bloomberg, MDDL, or FIX has a standardised public
convention for; ORE's
SWAPTION/RATE_LNVOLkey remains the only openly documented structure for this instrument among all six schemes compared in this document.
Equities and indices
| Instrument | RIC | Bloomberg ticker | ORE quote key |
|---|---|---|---|
| Apple (NASDAQ) | AAPL.OQ |
AAPL US Equity |
EQUITY/PRICE/AAPL/USD |
| Vodafone (LSE) | VOD.L |
VOD LN Equity |
EQUITY/PRICE/VOD/GBP |
| S&P 500 index | .SPX |
SPX Index |
EQUITY/PRICE/SP5/USD |
| FTSE 100 | .FTSE |
UKX Index |
EQUITY/PRICE/UKX/GBP |
| S&P 500 front-month future | ESc1 |
Not verified (see note) | No equity-future quote type exists in ORE's inventory (see note) |
Comparative analysis
- RIC: a single suffix convention covers both single names and
indices — an exchange suffix (
.OQ= NASDAQ,.L= London) for tradeable names, a leading dot for indices (.SPX,.FTSE), andc1for a continuous front-month future. Shortcoming: the meaning of the leading.character is overloaded — it marks "this is an index" for.SPXbut is also, confusingly, part of the exchange-suffix punctuation for.OQ=/.L=, so a parser cannot treat a leading dot as a reliable index marker without also checking position. - Bloomberg ticker: the yellow key distinguishes equities from indices
explicitly (
Equityvs.Index) rather than relying on punctuation position. Shortcoming: no verified public ticker convention was found for a listed equity future (ES1 Indexis plausible but unconfirmed here), so Bloomberg's coverage gap for this instrument class cannot be documented with the same confidence as its spot conventions. - ORE quote key: keys follow the catalogue's documented
EQUITY/PRICE/ENTITY/CCYshape (SP5is the catalogue's own documented entity code for the S&P 500; the others are constructed the same way, sinceENTITYis a free-form ticker/index-ID field, not a fixed enumeration) — a single, uniform shape for both single names and indices, unlike RIC's punctuation split. Shortcoming: ORE's equity asset class covers spot, dividend yield, and forward price only (EQUITY/PRICE,EQUITY_DIVIDEND/RATE,EQUITY_FWD/PRICE) — no listed-equity-future quote type is documented, so "S&P 500 front-month future" (an exchange-traded futures contract, distinct from the OTC equity forward ORE does support) has no ORE representation at all, a gap neither RIC nor Bloomberg has for this instrument. - MDDL: has no equivalent row above, because it does not identify an
equity with a short string at all — it wraps a full
instrumentDomainrecord around whichever codes the source already publishes. The example below is adapted, for like-for-like comparison with this table's Apple row, from the retrieved real worked examplemddl-equity-example1.xml(Lafarge SA, an EOD equity snap — see that file for the authentic, unmodified vendor example); the shape is unchanged, only the instrument-specific values (name, codes, currency, market) are substituted. It shows aninstrumentIdentifiercarrying two codes at once (an exchange/ticker code and an ISIN, each tagged with its ownschemeURI) plus a nestedmarketIdentifier(an ISO 10383 MIC) andinstrumentData/instrumentType. Shortcoming: this is far richer than any RIC, Bloomberg, or ORE row above, but it is also not a compact key — there is no single short string a consumer could use as a map/dictionary key or a pub/sub subject the wayAAPL.OQ,AAPL US Equity, orEQUITY/PRICE/AAPL/USDcan be used directly.
<mddl version="3.0-beta" xmlns="http://www.mddl.org/mddl/3.0-beta"> <header> <dateTime>2026-07-26</dateTime> <source>NASDAQ</source> </header> <snap> <dateTime>2026-07-26</dateTime> <snapType>EOD</snapType> <instrumentDomain> <instrumentIdentifier> <name>Apple Inc</name> <code scheme="http://www.mddl.org/ext/scheme/symbol?SRC=TICKER"> <mdString>AAPL</mdString> </code> <code scheme="http://www.mddl.org/ext/scheme/symbol?SRC=ISIN"> <mdString>US0378331005</mdString> </code> <instrumentData> <instrumentType>equityCommon</instrumentType> </instrumentData> <marketIdentifier> <code scheme="http://mddl.org/ext/scheme/iso10383.xml"> <mdString>XNAS</mdString> </code> </marketIdentifier> </instrumentIdentifier> <currency>USD</currency> <last> <mdDecimal>229.10</mdDecimal> </last> </instrumentDomain> </snap> </mddl>
(Trimmed for brevity — namespace/schema-location attributes and
comments elided. Adapted from the real retrieved example at
external/mddl/mddl-equity-example1.xml;
instrumentType and element shapes are unchanged from that authentic
file. Instrument values are substituted for comparability with this
table's Apple row, and one code scheme URI is swapped from the
original's local-exchange-code scheme
(.../symbol?SRC=ISO6166-style) to a ticker-symbol scheme
(.../symbol?SRC=TICKER), since AAPL is a US ticker rather than a
local exchange code the way the original file's LG was — the ISIN
code's scheme URI is unchanged.)
- FIX: like MDDL, has no short-string row above — instrument identity
travels inside a
MarketDataSnapshotFullRefresh(35=W) message'sInstrumentcomponent, tagged with aSecurityIDSource(tag22) naming which external scheme the accompanying code belongs to; the same message'sMDFullGrprepeating group carries the actual price points (bid/offer/trade/…). Unlike MDDL's rich but message-less XML record, FIX pairs a comparably rich instrument description with a dedicated wire-level delivery mechanism — theMarketDataRequest=/ =MarketDataSnapshotFullRefresh=/=MarketDataIncrementalRefreshmessage family — that none of the other five schemes define. Shortcoming: FIX messages are typically consumed and generated through a FIX engine rather than read as a standalone document the way an MDDL or OREmarketdata.csvfile can be; correctly parsing tag=value framing (session header, checksum, repeating groups) requires that engine or an equivalent decoder, whereas RIC, Bloomberg, ORE, and MDDL are all readable with generic string/XML tooling alone.
8=FIX.4.4|9=185|35=W|49=SENDER|56=TARGET|34=1|52=20260726-10:15:00.000| 262=MDREQ001| 55=AAPL|48=US0378331005|22=4| 268=2| 269=0|270=229.10|271=500|273=10:14:59.500| 269=1|270=229.15|271=300|273=10:14:59.500| 10=087|
(Field-per-line for readability; a real FIX message is a single
SOH-delimited (\x01) string, shown here with | standing in for
SOH and line breaks added only for display. 55=Symbol=AAPL,
48=SecurityID=US0378331005 (a CUSIP), 22=SecurityIDSource=4
ISIN_NUMBER;
268=NoMDEntries=2, each entry an MDEntryType=/=MDEntryPx=/
=MDEntrySize=/=MDEntryTime tuple — 269=0 is BID, 269=1 is
OFFER, per the retrieved FIX 4.4 dictionary's MDEntryType enum.
Constructed by hand from the dictionary for illustration, not copied
from a live feed — see
external/fix/FIX44.xml for the
authoritative field/message definitions this example is built from;
BodyLength (tag 9) and CheckSum (tag 10) are illustrative
placeholder values, not computed from the actual message bytes.)
Credit
| Instrument | RIC | Bloomberg ticker | ORE quote key |
|---|---|---|---|
| iTraxx Europe 5Y CDS index | ITRAXX-EUROPE-5Y-CDS=GFI |
ITRX EUR 5Y Corp |
CDS/CREDIT_SPREAD/ITRAXX-EUROPE/SR/EUR/5Y |
| Single-name CDS (Vodafone) | VOD5YEUAM=ICAP |
Not verified (see note) | CDS/CREDIT_SPREAD/VOD/SR/EUR/5Y |
Comparative analysis
- RIC: a single broker-suffix convention (
GFI) covers both an index and a single name, appended after a tenor-and-currency-qualified base code. Shortcoming: as with rates, the broker suffix leaks a specific inter-dealer broker's identity into the instrument key rather than naming the credit instrument in vendor-neutral terms. - Bloomberg ticker: has a clean, explicit ticker for the CDS index
(
ITRX EUR 5Y Corp) but no verified public ticker convention for the single-name CDS. Shortcoming: single-name CDS coverage cannot be documented with the same confidence as the index — a real gap in Bloomberg's publicly visible conventions for this instrument class. - ORE quote key: keys follow the catalogue's documented
CDS/CREDIT_SPREAD/entity/seniority/CCY/tenorshape (entityis a free-form reference-entity name, not a fixed enumeration;SR= senior) — the same shape covers both the index and the single name, unlike Bloomberg's asymmetric coverage. Shortcoming: this shape only covers the credit spread itself; ORE separately models CDS index tranches (as opposed to the index spread) via the dedicatedCDS_INDEX/BASE_CORRELATION/INDEX_CDS_TRANCHE/BASE_CORRELATIONtypes, not shown here, so the same "credit" asset class is split across quote types that a consumer must know to look for separately. - MDDL: has no dedicated credit-derivative domain (there is no
creditDomainamong the schema's eight top-level domains) — a CDS index or single-name CDS would have to be modelled as a genericinstrumentDomainrecord with an open, source-definedinstrumentTypevalue, the same open-vocabulary gap noted for interest-rate swaps above. Shortcoming: no worked example for a CDS instrument was found in the retrieved 3.0-beta release, so unlike the equity and FX cases, this is not just "no compact key" but "no documented convention at all" for this instrument class. - FIX: later FIX versions add trade-capture support for credit
default swaps (e.g. a
CDSInstrumentproduct qualifier), but no standard, widely-documented Market Data tick convention was found in the retrieved FIX 4.4/5.0 SP2 dictionaries for a CDS index or single-name spread — as with IRS par rates above, CDS spreads are broker-composite OTC data, not somethingMarketDataSnapshotFullRefreshis commonly used to stream. Shortcoming: same gap as RIC/Bloomberg's single-name row — none of RIC, Bloomberg, MDDL, or FIX documents a public tick-level convention for credit spreads with the confidence ORE'sCDS/CREDIT_SPREADkey has as a pricing-engine input.
Commodities
| Instrument | RIC | Bloomberg ticker | ORE quote key |
|---|---|---|---|
| WTI crude front-month future | CLc1 |
CL1 Comdty |
COMMODITY_FWD/PRICE/WTI/USD/1M |
| Brent crude front-month | LCOc1 |
CO1 Comdty |
COMMODITY_FWD/PRICE/BRENT/USD/1M |
| Gold spot | XAU= |
XAU BGN Curncy |
COMMODITY/PRICE/GOLD/USD |
Comparative analysis
- RIC: treats gold spot as FX-like (
XAU=, the same trailing-= convention as an FX pair) and continuous futures with ac1suffix. Shortcoming: reusing the FX+=convention for gold spot means a parser cannot distinguish "this is a currency pair" from "this is a metal" without a lookup table of known metal codes — the syntax itself carries no asset-class signal. - Bloomberg ticker: uses
Comdtyas an explicit, unambiguous asset-class tag for both futures and spot (CL1 Comdty,XAU BGN Curncybeing the one exception, since gold is quoted through the FX desk). Shortcoming: that same gold exception shows the yellow key is not fully reliable as an asset-class signal either — gold spot carriesCurncy, notComdty, so a consumer still needs asset-specific knowledge to interpret it correctly. - ORE quote key: keys follow the catalogue's documented
COMMODITY/PRICE/entity/CCY(spot) andCOMMODITY_FWD/PRICE/entity/CCY/tenor(forward strip) shapes —GOLDis the catalogue's own documented entity code, and unlike RIC, gold gets its ownCOMMODITYtype rather than borrowing FX's. Shortcoming: ORE has no separate "front-month future" type distinct from a point on theCOMMODITY_FWD/PRICEtenor strip, so the WTI/Brent rows use1Mas a representative near-dated tenor rather than a dedicated front-month construct — the same spot/forward type-split seen in the FX section recurs here. - MDDL: a
commodityDomainrecord's applicable properties are justdescription,instrumentIdentifier, andlast— deliberately narrow, since the schema's own annotation says this domain is "often used with a derivative like future or option" (i.e. commodity futures are expected to be modelled viainstrumentDomainreferencing the commodity, not entirely insidecommodityDomainitself). Shortcoming: unlike RIC's FX-borrowing or Bloomberg'sCurncyexception, MDDL at least gives gold its own domain distinct from FX — but that domain's three-property scope is noticeably thinner thanforeignExchangeDomain'sbid=/=ask=/=midorinstrumentDomain's much larger property set. - FIX: commodities and commodity futures use the same generic
Instrument=/=MarketDataSnapshotFullRefreshshape as every other asset class —SecurityType(a separate, general field) rather than a commodity-specific message family distinguishes a commodity future from an equity or FX instrument. Shortcoming: this genericity is a double-edged sword — it means FIX never needs a new message for a new asset class, but, unlike MDDL's dedicated (if narrow)commodityDomain, nothing in the message shape itself signals "this is gold" beyond theSymbolstring andSecurityTypevalue.
<mddl version="3.0-beta" xmlns="http://www.mddl.org/mddl/3.0-beta"> <header> <dateTime>2026-07-26</dateTime> <source>LBMA</source> </header> <snap> <dateTime>2026-07-26</dateTime> <snapType>EOD</snapType> <commodityDomain> <instrumentIdentifier> <name>Gold spot</name> </instrumentIdentifier> <currency>USD</currency> <last> <mdDecimal>2412.50</mdDecimal> </last> </commodityDomain> </snap> </mddl>
(Constructed for illustration from the retrieved schema's
commodityDomain element structure — see
external/mddl/mddl-3.0-beta-full.xsd
— not copied from a real feed; no worked commodity example was included
in the retrieved release's Examples/ set.)
8=FIX.4.4|9=132|35=W|49=SENDER|56=TARGET|34=1|52=20260726-17:00:00.000| 262=MDREQ003| 55=XAUUSD| 268=1| 269=2|270=2412.50|271=100|273=17:00:00.000| 10=118|
(Field-per-line for readability; | stands in for the real SOH
delimiter. 269=2 is TRADE per the retrieved FIX 4.4 dictionary's
MDEntryType enum. Constructed by hand — see
external/fix/FIX44.xml — not copied
from a live feed; BodyLength (tag 9) and CheckSum (tag 10) are
illustrative placeholder values, not computed from the actual message
bytes.)
ORE quote key structure
Every ORE quote key shares the same top-level shape,
TYPE/SUBTYPE/dim1/dim2/.../dimN, but the number and meaning of the
dimensions after TYPE/SUBTYPE is fixed per type, not universal — an
IR_SWAP/RATE key has five dimensions (currency, spot lag, float index
tenor, swap tenor), an EQUITY/PRICE key has two (entity, currency), and
a CAPFLOOR/RATE_LNVOL key has six. The table below shows this shape at
a simplified, four-field level of abstraction (series/metric/qualifier/
point), which is a useful mental model but understates the real
dimension count for most types — see the
ORE market data catalogue
for the authoritative, per-type dimension inventory (49 distinct types)
that every row in this document's comparison tables above draws from.
| Segment | Meaning | Example |
|---|---|---|
series_type (TYPE) |
Asset class and curve family | FX, DISCOUNT, SWAPTION, CAPFLOOR |
metric (SUBTYPE) |
What is being quoted | RATE, RATE_LNVOL, PRICE, SPREAD |
qualifier (dim1, dim2, …) |
One or more series-specific dimensions (CCY, CCY pair, index tenor, entity, seniority, …) — the count varies by type | EUR/USD, USD/2D/3M, VOD/SR/EUR |
point_id (last dimN) |
Tenor or surface coordinate (absent for scalar series) | 1Y, 5Y/2Y/ATM, 6M/25RR |
Pros, cons, and limitations
| Scheme | Pros | Cons / limitations |
|---|---|---|
| RIC | Widely deployed across sell-side systems and data terminals; per-asset-class conventions are well understood in the industry. | Proprietary, licence-gated (no open spec); instrument-type-specific and not fully systematic — conventions differ by asset class; contains characters (=, .) that many downstream systems (e.g. hierarchical pub/sub subjects) cannot use unescaped; broker-specific suffixes (ICAP, GFI) leak vendor/broker identity into the instrument key; no native concept of curve family or discount-vs-projection role. |
| Bloomberg ticker | Widely deployed in buy-side and sell-side systems; yellow key gives an explicit, human-readable asset-class tag. | Proprietary, licence-gated (no open spec); space-separated composite is awkward for systems that expect a single token or path-like key; mixed case and spaces conflict with many downstream systems; like RIC, no native concept of curve family or discount-vs-projection role. |
| ORE canonical key | Open source and openly documented; the native format of every ORE pricing-engine input file; every type shares the same top-level TYPE/SUBTYPE/dim1/.../dimN shape, and the per-type dimension count and meaning is precisely documented for all 49 types; free of vendor licensing. |
The per-type dimension count varies (2 to 8+), so — unlike RIC's or Bloomberg's flatter shapes — a consumer must know each type's specific dimension schema rather than applying one universal rule; several common real-world instruments (sovereign bond yields, listed equity/index futures) have no direct quote type at all; has no structured field for curve family or discount-vs-projection role. |
| MDDL | Open, committee-governed specification (FISD/SIIA) rather than proprietary to one vendor; a full instrument-record XML schema, not just a key, so it carries far richer instrument/event data than a short identifier string; instrumentIdentifier's codeType controlled vocabulary can wrap ISIN, RIC, or any other existing scheme rather than forcing a migration. |
Never adopted as any pricing engine's native input format (unlike ORE's key); last full release was 3.0-beta (2007) and the project was never finalised or continued — FISD instead contributed its vocabulary into ISO 20022/FIX; being a full XML record rather than a short string, it cannot serve as a compact pub/sub key or a natural map/dictionary key the way the other three schemes can. |
| FIX | Open, committee-governed specification (FIX Trading Community), actively maintained (unlike MDDL) as "FIX Latest" since 2019; SecurityIDSource symbology explicitly names RIC and Bloomberg as member schemes rather than competing with them; the only scheme here with a dedicated market-data wire-message family (request/snapshot/incremental refresh/reject), not just an identifier or record shape; free of vendor licensing. |
Not a compact string identifier any more than MDDL is — instrument identity plus market data both live inside multi-field messages, not a short key; correctly parsing tag=value framing (session header, checksum, repeating groups) generally requires a FIX engine rather than generic string/XML tooling; no native concept of curve family or discount-vs-projection role, same gap as the other four. |
| OpenGamma Strata | Open source (Apache 2.0), freely readable without a licence; an interface-based design cleanly separates the identifier concept from any concrete field shape or string serialisation, giving implementations full freedom over field structure; actively maintained; like ORE's canonical key, silent on physical fields at the base level — a deliberate design choice, not an oversight. | Not a string identifier at all — no compact key usable as a pub/sub subject or map key without serialising the Java object; all field structure is per-implementation with no shared base-level shape, so two implementations covering the same logical instrument may be incompatible; Java-specific with no language-neutral wire form; no native concept of curve family, discount-vs-projection role, or physical source fields at the interface level, the same logical-only gap as ORE's canonical key. |
Sources
- RIC (Reuters Instrument Code) — proprietary to LSEG/Refinitiv. No open public
specification; documented only inside the licensed Refinitiv Data Platform /
Eikon customer portal (
lseg.com, login required). Not linkable here as a primary source — the RIC table above is compiled from publicly visible instrument examples, not a primary LSEG document. - Bloomberg ticker / yellow key — proprietary to Bloomberg L.P. No open public
specification; documented only inside the licensed Bloomberg Terminal / BLPAPI
customer portal (
bloomberg.com/professional, login required). Not linkable here as a primary source — the Bloomberg table above is compiled from publicly visible instrument examples, not a primary Bloomberg document. - ORE canonical key — open source, documented in the Open Source Risk Engine (ORE)
user guide and
marketdata.csvformat reference. See Open Source Risk Engine (ORE) below. - MDDL — open source, documented in the retrieved 3.0-beta specification. See Market Data Definition Language (MDDL) below.
- FIX — open, committee-governed specification published by the FIX Trading Community. See Financial Information eXchange (FIX) Protocol below.
- OpenGamma Strata — open source (Apache 2.0), maintained by the
open-source community. See
OpenGamma/Strata on GitHub;
com.opengamma.strata.data.MarketDataIdis the base identifier interface, and thecom.opengamma.strata.datapackage contains the concrete implementations (QuoteId,IborIndexId,CurveId, …) that illustrate how field structure is expressed at the implementation level.
See also
- Open Source Risk Engine (ORE) — source of the canonical key format.
- ORE market data catalogue — the authoritative, per-type quote-key dimension inventory (49 types) that every ORE quote key in this document's comparison tables is drawn from.
- Market Data Definition Language (MDDL) — the fourth scheme compared above: version history, content model, and where its retrieved specification files live.
- Financial Information eXchange (FIX) Protocol — the fifth scheme compared above: version history, the Market Data message family, symbology, and where its retrieved data dictionaries live.
- Market Data Identifier — the conceptual document that uses ORE's and OpenGamma Strata's independent convergence on the same logical field shape as evidence for that shape's irreducibility.
- oresmd: ORE Studio Market Data URI — a proposed extension of the ORE-derived logical identifier with an explicit physical field group, structured tenor/curve-role/instrument-type grammar, and deterministic projection rules into every scheme compared in this document.