Symbols and intervals
Marketfeed symbols are self-describing. The base grammar is:
class:venue:ticker[:qualifier...]Each part answers a different question:
- class says what kind of instrument this is, so qualifiers can be validated without consulting a registry;
- venue identifies the listing or publishing venue, normally with a MIC-like code;
- ticker is the product or instrument name at that venue;
- qualifiers select an adjustment stream, dated futures contract or other class-specific view.
Common classes and examples are:
| Class | Meaning | Example |
|---|---|---|
eq | Equity or ETF | eq:XNAS:AAPL |
fut | Future | fut:XCME:ES or fut:XCME:ES:M26 |
idx | Index | idx:XNAS:NDX |
vol | Volatility index | vol:CBOE:VIX |
mkint | Market internal | mkint:US:ADVSP |
fx | Foreign exchange | fx:RBA:AUD-USD |
macro | Economic series | macro:FRED:GDP |
cot | Commitments of Traders | cot:CFTC:13874A:MM |
The venue is part of identity, not decoration. XNAS is Nasdaq, ARCX is NYSE Arca, XCME is CME, XCEC is COMEX and XNYM is NYMEX in common archive symbols. Marketfeed’s symbol registry supplies the longer exchange description, timezone, sessions, tick size, point value, currency and vendor aliases. Strategies can read the engine’s resolved subset with ctx.Instrument(symbol).
Do not pass vendor notation such as Databento’s ES.c.0 to the adapter. Databento parent and continuous symbols are acquisition-side aliases; the local archive and Algolang run use canonical marketfeed names.
Equity qualifiers
An equity with no qualifier means the raw series. The explicit forms are:
| Symbol | Price view |
|---|---|
eq:XNAS:AAPL:adj=raw | Unadjusted prices. |
eq:XNAS:AAPL:adj=split | Split-adjusted prices. |
eq:XNAS:AAPL:adj=splitdiv | Split-and-dividend-adjusted prices. |
The feed serves the view the symbol names, and the engine adjusts nothing (GLE-328, GLE-228 Decision 5a). An adj=split or adj=splitdiv bar arrives with is_adjusted set, the raw prices in raw_* and the symbol’s cumulative_price_ratio. The strategy receives it as served, so OHLC and indicators run in the adjusted view and the raw accessors described earlier expose the venue-real one, while the fill simulator, the corporate-action firing passes and the report recorder receive its raw projection, so fills are at historical prices. An order placed in the adjusted view is translated onto raw prices by the symbol’s latest served ratio, and a fill is translated back by the ratio of the bar it filled in. Corporate actions are fetched for every eq symbol, raw or adjusted, on the run symbol as given, so a split rewrites the held quantity and a dividend is credited whatever the price view. The two adjusted forms travel on the protobuf wire only and force it in auto negotiation, and a feed that serves plain bars under an adjusted name is refused before the first bar. A declared eq: reference series is served as is, with no accounting. See Equities and live reconciliation.
Futures qualifiers
A futures root and a dated contract are different requests:
| Symbol | Meaning |
|---|---|
fut:XCME:ES | Bare E-mini S&P 500 root; runs as marketfeed’s Panama-adjusted composite (:cont:adj=panama on the wire). |
fut:XCME:ES:M26 | June 2026 dated contract. |
fut:XCME:ES:cont | Marketfeed’s schedule-backed composite, rolled on the feed’s served schedule. algo run runs it through the same continuous path as the bare root (GLE-325): adj=panama|ratio|none is the only qualifier it may carry (bare :cont is panama); ofs=, straddle= and an @ suffix are refused (see Continuous futures). Report benchmarks fetch it for their futures sleeves. |
Futures month letters are F G H J K M N Q U V X Z, January through December. A dated qualifier is one letter plus a two-digit year, so H27 is March 2027 and Z26 is December 2026.
Relative forms such as fut:XCME:ES+1 or fut:XCME:ES+V are valid members of marketfeed’s wider grammar, but its data readers do not resolve them. They encode a roll decision, which belongs to the engine. Use a dated contract for one contract or a configured continuous root for a stitched series.
Intervals and ranges
The bar interval is not part of the symbol. It is a property of the requested series, supplied with --interval for a time-bar run:
--symbols eq:XNAS:AAPL --interval 1d
--symbols fut:XCME:ES:M26 --interval 5mIntervals use duration-style tokens such as 1s, 5m, 1h, and 1d. --start is inclusive and --end is exclusive; both are RFC 3339 in single-run mode. Marketfeed may hold different native granularities in different eras. The adapter composes those eras and follows the platform rule: coarsening is allowed only by whole multiples, refinement is refused. Thus a 5-minute request can be built from 1-minute storage, but a 30-second request cannot be made from that same storage.
When a coarse bar was constructed from finer stored bars, --include-path asks marketfeed to carry those constituents to the engine. The simulator uses them to resolve intra-bar execution ordering; the strategy still sees one ordinary coarse bar.