Skip to main content

Upcoming changes:

  • Java 21 runtime certification

1.14.110 - April 18th, 2024

  • FIX Drop Copy now supports FIX session initiator mode (connecting out).
  • FIX API Change: started using "MLEG" rather than custom "SYNT" to represent exchange-traded synthetic instrument type in SecurityType(167) tag. System setting deltix.use.legacy.synt.type=true preserves legacy tag value (SYNT).
  • FIX Market Data Gateway now supports custom security types. See Configuration Guide for details.
  • FIX Market Data Gateway introduced new monitoring metrics:
    • ConnectionsClosed - how many FIX clients were disconnected due to various reasons
    • Disconnect.BrokenConnections - how many disconnects happened due to bro
    • Disconnect.InboundQueueIsFull - how many clients disconnected due to inbound queue overflow
    • Disconnect.BackpressureOnSend - how many clients disconnected due to outbound queue overflow
    • Disconnect.SessionRequest - how many client disconnected due to FIX Session logic (e.g. normal LOGOUT)
    • Disconnect.ProtocolError - how many clients disconnected due to FIX protocol error

1.14.105 - April 8th, 2024

  • FIX Market Data Gateway now has better performance for large number of instruments (20000+) and incremental market data mode in general.
  • FIX Market Data Gateway introduced new performance metrics:
    • SubsWaitingForSnapshotAdded - Number of times when incremental subscriptions over all symbols started to wait for snapshot (because they are just subscribed or got affected by backpressure)
    • SubsWaitingForSnapshotRemoved - Number of times when incremental subscriptions over all symbols stopped to wait for snapshot (because the client unsubscribed or snapshot was sent)
    • SubsForcedToWait - Total number of events when a subscription got switched into "waiting for snapshot state" because of backpressure

1.14.99 - March 28th, 2024

  • Starting from this release Ember instantiates connectors, algorithms, and gateways in alphabetical order (previously order was platform dependent).
  • FIX Market Data Gateway now supports TradingSessionStatus messages (35=h).
  • FIX Order Entry Gateway now allows to pass custom FIX tags outside the 0-9999 range. Use maxCustomTag setting to override default value of 9999.

1.14.96 - March 19th, 2024

  • FIX Market Data Gateway now can broadcast market statistics to interested subscribers (where available in upstream feed). More details can be found in Ember Configuration Guide. The following example shows how to enable standard statistic in MDG settings:
        statisticsTypes: [OPENING_PRICE, TRADING_SESSION_HIGH_PRICE, TRADING_SESSION_LOW_PRICE, TRADE_VOLUME, OPEN_INTEREST, SETTLEMENT_PRICE]
customStatisticTypes: [
{originalType="CBOT:Previous_Close", entryType="e", valueTag=MDEntryPx},
{originalType="CBOT:Turnover", entryType="x", valueTag=MDEntryPx},
{originalType="CBOT:Trades", entryType="y", valueTag=MDEntrySize},
]

1.14.92 - February 28st, 2024

  • Latency tracer configuration change: instead of .latencyStatInterval use latencyTracer.statInterval. For example:
connectors.BINANCE.latencyTracer.statInterval = 15s

Alternatively, you can now customize complete set of latency tracer settings:

connectors.BINANCE.latencyTracer {
statInterval = 15s
maxExpectedLatency = 100ms
maxErrorsToLog = 10
ordersUseOriginalTimestamp= false
}
  • FIX API: Deprecated LastUpdateTime(779) in market data messages. This timestamp used to carry approximate (from cached clock reading) time when last market data message was received by MDG.

1.14.91 - February 21st, 2024

  • Internal tick-to-order latency tracing. Ember now has built-in tick-to-order latency tracing capabilities. See this article for more information.
  • API Change: MarketSupplier.ConnectionListener interface now has additional callback method onDataLoss(). This new error listener may notify algorithm that market data producer crashed. Currently, this kind of data loss only reported for a TimeBase topic.

1.14.85 - February 1st, 2024

  • FIX Market Data Gateway started to report original order size in tag MDEntrySize(271) when reporting entry DELETE. Previously MDEntrySize(271) was reported as zero during DELETE.
  • FIX Market Data Gateway now prevents client from subscribing for the same symbol more than once per connection (Use preventDuplicateSymbolSubscription flag to restore all behavior).
  • First beta version of internal tick-to-order latency tracer

1.14.70 - January 10th, 2024

  • Ember now supports OAUTH2 based authentication to TimeBase. More information can be found here.
  • This version requires TimeBase server version 5.6.60+ to be compatible with the following features:
    • Support for OAUTH2 based authentication of Ember into TimeBase server.
    • Support of nanosecond timestamp fields in TimeBase messages.
    • Extensions of TimeBase protocol to control per-topic Aeron term buffer size.

1.14.66 - December 23th, 2023

  • Added MaxDailyPositionLong and MaxDailyPositionShort risk limits for limiting the maximum allowed daily long and short positions.
  • FullOrderProcessor and Ember OMS now has better support for trade corrections and trade busts - previously completed orders can now be properly reactivated.
  • Reworked order status event handler in Ember OMS: from now on synthetic fill, cancel, etc. events are written into the journal. This way Drop Copy, DataWarehouses and Journal compactor will all see the same events as Ember algorithms. Synthetic event ids use "SYN:" prefix.
  • Algorithms can now subscribe to both topics and streams. See Config Guide for more information.

1.14.65 - December 7th, 2023

  • FIX Market Data Gateway now offers memory-optimized version of Level 2 Order book. Available for cases when each MDG instance rebroadcasts data from single exchange.
  • Ember Monitor's UI Redesign: Experience Enhanced Clarity and Usability. Our latest update brings a fresh, modern look with improved navigation.

1.14.63 - November 15th, 2023

  • New tool - Algorithm playback can be used to backtest ember algorithms.
  • FIX Market Data Gateway now uses faster Order Book library (e.g. for Level 3 Market data processing cost decreased by 5x, or by ~4 microseconds).
  • FIX Market Data Gateway configuration change: new optional parameter feedAggregationType replaces flag addExchangeId. Possible values:
    • NONE Default value, used to broadcast single market data source;
    • CONSOLIDATED (Consolidated view on the market from multiple exchanges, you can see individual exchange sizes);
    • AGGREGATED (Aggregated view of multiple exchanges, you can see combined size of each price level.).

1.14.62 - November 9th, 2023

  • Minor API change: Method ExclusiveTimer.execute() now takes EpochClock interface rather than current epoch time.

1.14.58 - October 12th, 2023

  • Fixed a bug in FIX Gateway Resend message handler
  • Added Ember container with Xilinx/Solarflare ONLOAD (TCP Bypass) deltix.docker/anvil/deltix-ember:<version>-onload. Running Ember using ONLOAD TCP Bypass significantly reduces network latency. ONLOAD is now recommended for all data center environments.

1.14.56 - October 4th, 2023

  • Algorithm subscription can now specify cursor performance mode using channelPerformance parameter:
algorithms {

ALGO1 : ${template.algorithm.default} {
factory = "deltix.ember.service.algorithm.samples.MyAlgoFactory"
subscription {
streams = ["COINBASE", "BINANCE"]
performance = LOW_LATENCY # default is MIN_CPU_USAGE
}
}

Possible values are:

  • MIN_CPU_USAGE - Prefer to minimize CPU usage. Don't do anything extra to minimize latency (default mode).
  • LOW_LATENCY - Prefer to minimize latency at the expense of higher CPU usage (one CPU core per process).
  • LATENCY_CRITICAL - Focus on minimizing latency even if this means heavy load on CPU. Danger! Read Timebase cursor API before using.
  • HIGH_THROUGHPUT - Prefer to maximize messages throughput. For loopback connections IPC communication will be used.

1.14.45 - September 14th, 2023

  • FIX Market Data Gateway tuning (tracing timestamps, performance cost histograms)

1.14.38 - September 8th, 2023

  • Java 17 support: you can now run Ember under Java 17 that offers improved GC and JIT. Java 11 runtime environment is still supported.

  • Multiple docker image flavors: The following Ember images are available:

    • deltix.docker/anvil/deltix-ember:<version> - Alpine OS + Amazon Corretto 17 (running as non-root user)
    • deltix.docker/anvil/deltix-ember:<version>-corretto11 - Alpine OS + Amazon Corretto 11 (running as non-root user)
    • deltix.docker/anvil/deltix-ember:<version>-dev - Alpine OS + Amazon Corretto 17 (running as root user)
    • deltix.docker/anvil/deltix-ember:<version>-alpine17 - Alpine OS + Amazon Corretto 17 (non-root user)
    • deltix.docker/anvil/deltix-ember:<version>-azul - CentOS + Zulu Prime 11 (non-root user)
    • deltix.docker/anvil/deltix-ember:<version>-azul17 - CentOS + Zulu Prime 17 (non-root user)
    • deltix.docker/anvil/deltix-ember:<version>-temurin - Alpine OS + Eclipse Temurin 11 (non-root user)
    • deltix.docker/anvil/deltix-ember:<version>-graalvm17 - Oracle Linux + GraalVM 17 (non-root user)

    NOTE: as of now Ember user is responsible for obtaining Azul Zulu Prime platform and Oracle GraalVM licenses!

1.14.29 - September 6th, 2023

  • Added MaxAggressivePriceDifference risk limit that is limiting the % amount by which limit orders are allowed to cross the market

1.14.28 - September 5th, 2023

  • FIX API change: Switched to use InstrumentMessage.nanoTime as source of TransactTime(60) in Market Data messages. Previously we used .originalTimestamp (if provided). Waiting for nano epoch time support for original timestamp to revert this change. Current behavior is fine for Matching Engine produced feeds, but not so good for re-broadcasting market data collected by Aggregator.

1.14.24 - August 29nd, 2023

  • Batching Connector - wrapper for trading connectors that work better when large set of orders (1000s) are submitted using single batch (OrderListRequest)
  • Major enhancement: Support for nanosecond resolution in timestamps and Nanosecond-level clock.
    • New API: ApiMessage.timestamp and OrderEvent.originalTimestamp fields now support nanosecond resolution
    • New API: EpochClock now has timeNs() that returns number of nanoseconds since beginning of Epoch
    • FIX Engine Java API change: Session, MessagePacker, MessageLog, and MessageStore were converted to use nano-based epoch time.
    • Breaking API changes:
      • CachedEpochClock constructor now takes epoch time in nanoseconds,
    • API Change: OrderRequest.originalTimestamp was added to capture user-provided request timestamp. OrderEntryRequest.timestamp will be used to mark order arrival time (e.g. into Ember FIX Order Entry gateway). This is similar to TimeBase timestamping and what Ember API had for OrderEvent.
    • API changes:
      • Journal migrated to nanosecond format of timestamps
      • Internal Ember Monitor backend API switched to textual representation of timestamps (ISO format, with nanoseconds, yyyy-MM-ddTHH:mm:ss.SSSSSSSSSZ) rather than using numeric timestamps (epoch time in nanoseconds doesn't fit into Javascript number data type)
    • Limitations: Some data warehouses still use millisecond-level timestamps: TimeBase, SQL-based, Clickhouse.

1.12.56 - August 1st, 2023

  • Enhanced FIX gateway to handle outbound messages larger than 32K bytes
  • Algorithm API: added ability to override OrderEntry initialization from OrderNewRequest and OrderReplaceRequest
  • Stabilized telemetry / ember counters tracking in Ember Monitor
  • Fixed how Ember algorithms handle instruments that have dot in their symbol name.

1.14.23 - July 28th, 2023

  • NIAGARA Matching Engine: implemented ability to limit market data depth. Deeper orders may disappear and resurface in market feed as order book changes.

1.14.21 - July 19th, 2023

  • Enhanced SOR to provide human-readable exchange problems when execution plan cannot be build

1.12.54 - July 19th, 2023

  • FIX Gateway now support CIDR whitelisting for FIX client source IPs range.
  • Added OrderReplaceFrequencyLimit
  • 7x Improvement of reload speed for some client journals (issue #1334). Duplicate trade checking has been disabled for algo orders, and algorithms. OMS is still checking for duplicate trades that may be reported for DMA orders.
  • Added openBuy and openSell size fields to Position API.

1.14.17 - June 5th, 2023

  • Optimized order-book memory footprint in Market Data Gateway
  • Switched to github version of GFLog

1.12.41 - June 5th, 2023

  • Newer version of Trade Calendar and QuoteFlow libraries
  • Ember Monitor memory optimizations
  • Enhancements to FSRA connector
  • FIX MDG: Topic-based market data gateways no longer need to explicitly specify list of symbols to broadcast

1.12.38 - May 2, 2023

  • Added minPriceUpdateInterval(6036) parameter to TWAP/VWAP algos.

1.14.14 - April 20, 2023

  • Fix Market Data Gateway supports incremental format in DAC mode (Per-order Data Access Control mode).
  • Breaking change in S3 schema: Fixed spelling of order CommissionCurrency attribute output by S3 warehouse with JSON order data records. In previous versions this attribute was spelled ComissionCurrency. This change will only affect any code reading orders. The same messages attribute was spelled correctly and did not change.
  • MMSIM algorithm that simulate market maker liquidity provider and can be used to animate matching engine in UAT
  • Algorithm API: Added InputPollerBuilder API to AlgorithmContext. Marked existing AlgorithmContext.createPoller() method as deprecated. Examples how to migrate: Deprecated API:
    context.createInputPoller(settings.getSessionsStreamKey(),
    System.currentTimeMillis(), new SelectionOptions(false, true), types, null, sessionsPollerCallback)
    New API:
    context.createInputPollerBuilder(settings.getSessionsStreamKey())
    .withInitialTime(System.currentTimeMillis())
    .with(new SelectionOptions(false, true))
    .withTypes(types)
    .build(sessionsPollerCallback)
    Since current time and live/bound-codec is default anyway this can be shortened to:
    context.createInputPollerBuilder(settings.getSessionsStreamKey())
    .withTypes(types)
    .build(sessionsPollerCallback)

1.12.40 - May 2, 2023

  • Added support for custom attribute 6036 with min price update interval to TWAP and VWAP. This attribute can be used to limit frequency of order updates during price chasing.

1.12.37 - April 27, 2023

  • Added new risk rule: MaxDailyNotionalValue, for limiting daily notional value of orders.

1.12.35 - April 20, 2023

  • Fix Market Data Gateway supports incremental format in DAC mode (Per-order Data Access Control mode).
  • Added support for journal import from S3 Warehouse

1.12.34 - April 9th, 2023

  • FIX Order Entry Gateway can be configured to pass custom set of FIX tags from inbound FIX message as custom attributes in normalized OrderRequest message. Until this release FIX Gateway passed tags Text(80), ExecInst(18), ClOrdLinkID(583), ContingencyType(1385), and any tag in range 6000-8999. Set of processed custom tags can be customized via customAttributesSet setting:
     gateways {
    trade {
    ORDERENTRY {
    settings {
    ...
    customAttributesSet: "80,1024,6000-8999"
    ...
    }
    }
    }
    }
    Breaking config change: Starting from this release, default set of custom attributes is 18,6000-8999.
    • If your FIX clients send you complex orders (e.g. bracket orders), make sure to include tags 583 and 1385 to customAttributesSet (this will cover ClOrdLinkID and ContingencyType complex order parameters).
    • If you need to pass value of Text(80) tag supplied in FIX order message, add tag 80 to customAttributesSet list.

1.14.13 - April 4th, 2023

  • Journal Importer toolset provides ability to restore Ember journal from data warehouse. More information can be found here.
  • NIAGARA Matching Engine has been redesigned to use Adaptive Radix Tree (inspired by exchange-core project). Algorithm has been optimized to produce Level 3 market data. You may need to delete output stream if you were running previous version of NIAGARA matching engine (to let it reformat as L3).
  • Added mass-cancel command to ember-console tool.

1.14.12 - March 27th, 2023

  • TWAP, VWAP, PVOL, and ICEBERG execution algorithms now supports per-exchange security metadata attributes when TWAP order target single exchange.
  • TWAP and VWAP now support price offset parameter
  • API: added ability to customize RecordClassDescriptor of output channel, this allows algorithms like NIAGARA to write only meaningful fields to output feed.

1.12.18 - February 28th, 2023

  • Implemented daily trading activity reporting service that emails internal market participants their daily trading stats (matching engine use case).
  • FIX Market Data Gateway now supports Data Access Control (DAC) mode when each quote in L3 Order Book is checked for visibility.
  • Fixed memory allocation in cancel request handler.
  • Fixed a bug in algorithm re-subscription logic.
  • Position Engine became more resilient to missing instrument metadata on Ember restart.
  • Enhanced FSRA Connector to comply with FSRA specification.
  • Bugfixes in PVOL algorithm.

1.12.17 - February 20th, 2023

  • API change: Risk and Positions API started enforcing ASCII-only values for attributes that participate in position projections.
  • API change: AbstractAlgorithmBase no longer implements MarketSupplier.ConnectionListener interface. Please note: algorithm market data subscription logic still have auto-reconnection capability. This also true for custom TimeBase input and output channels constructed via AlgorithmContext.

If you want your algorithm to receive notifications about TimeBase disconnect please do the following.

  1. Add implements MarketSupplier.ConnectionListener to you Algorithm class declaration
  2. Call the following code in algorithm constructor:
        if (marketDataProcessor != null && context.getMarketSupplier() != null)
context.getMarketSupplier().addConnectionListener(this);
  1. Implement onConnected() and onDisconnected() TimeBase callbacks in your algorithm.
  • API change: algorithms that rely on dynamic market data subscription must recover from TimeBase disconnects. Dynamic subscription API is exposed via AlgorithmContext.getMarketSubscription(). Please refer to Algorithm Developer Guide for more information on TimeBase connection recovery.
  • Made OMS Position processor more resilient to handle missing instruments information after restart.

1.14.10 - January 25th, 2023

1.12.11 - January 23th, 2023

  • Added MaxLoss risk limit that halts trading when P&L goes below configured threshold.
  • Added MinDuplicateInterval risk limit that prevents repeated submission of similar orders.

1.12.10 - January 17th, 2023

  • Fixed a bug that was preventing proper detection of missing required parameters in ember.conf. Fixed code is strict about required parameters, you may have to recheck your config on upgrade to this version.

1.14.0 - January 7, 2022

This release brings Java 11 and Timebase 5.6 changes to Ember.

  • Ember now requires Java 11 as minimum compile/runtime Java version.

  • Ember migrated to newer Timebase.Api.Messages 5.6 that contains a number of breaking changes:

    • CurrencyUpdate.inverseQuoted of type Byte, now is called GenericInstrument.inverseContract of boolean data type
      • InstrumentUpdate (common for all instrument types) got the following new fields:
        • minOrderSize and minOrderSizeCurrency
        • minNotional and minOrderNotionalCurrency
        • tick (now called priceIncrement)
        • orderSizePrecision (now called sizeIncrement)
        • makerCommission, takerCommission and commissionCurrency
      • FutureUpdate got new fields:
        • baseCurrency
        • inverseContract and quantoContract
        • settlementIndex and settlementCurrency
    • BookResetEntry.side has been deprecated, now BookResetEntry resets both sides of order book.
    • Option instrument attribute strikePrice changed their data type from Double to Decimal64. If you work with Options please convert your journal using journal-transform tool. Transformation function:
      var transform = function(message) {
      if (message instanceof Packages.deltix.ember.message.smd.OptionUpdate)
      return null; // exclude it
      else
      return message;
      }
  • As a consequence of previous change Ember no longer deals with currency codes in ISO format (circa 2010 way of represeting currencies in Deltix).

  • Migrated to newer version of QuoteFlow (3.8) and RTMath containers. Breaking API change:

    • Replace import rtmath.containers... with import deltix.containers...
  • Migrated to github version of GFLog. Breaking API change:

    • If you import GFLog directly in your Gradle project dependencies, replace deltix:deltix-gflog-api:2.1.12 with com.epam.deltix:gflog-api:3.0.3.
    • Replace deltix.gflog. => import com.epam.deltix.gflog.api..
    • Replace deltix.gflog.appender.* => com.epam.deltix.gflog.core.appender.* (don't forget $EMBER_HOME/gflog.xml files).
  • Faster Order Book component deltix.common.orderbook.OrderBook (it uses significantly less memory). See documentation on our github mirror here.

  • Breaking API change: AbstractL2TradingAlgorithm was switched from QuoteFlow FullOrderBook to new faster OrderBook component.

  • Journal format change: BondUpdate, SyntheticUpdate

  • Central Security Master updated to 2.X

  • deltix.securitymaster.messages.BitmaxCurrency was renamed to .AscendexCurrency

  • Algorithm API: Removed long deprecated method AlgorithmContext.getTerm(). Use NodeStatusChange event if you still need journal term.

  • Algorithm API: TimebaseUtil.introspect() method migrated to deltix.ember.timebase.util.TimebaseUtil.

1.11.31 - October 3rd, 2022

  • Implemented FSRA (Financial Services Regulatory Authority) connector as a powerful alternative to Drop Copy Service.
  • FIX Market Data Gateway now supports incremental market data format. We recommend this to new clients who have smaller number of FIX market data subscribers who care about market data latency. Up until now FIX market data gateway only distributed periodic snapshots (with configurable period, default was 50 millis). See corresponding sections in FIX Protocol RoE, FIX Gateway Administrator Guide and Configuration Manual.
  marketdata: {
MD1 : ${template.gateway.marketdata.incremental} {
settings {
host: "0.0.0.0"
streams: "COINBASE"
expectedMaxBookLevels = 150
}
}
}
  • FIX Market Data Gateway: Breaking change - from now on trades are reported using 35=X (incremental refresh), rather than 35=W (snapshot) FIX messages. If you want to preserve existing FIX format, compatibility option incrementalMode can be used to preserve pre-existing behavior.

  • Algorithm API: algorithms now can receive position report messages. If your algorithm implementation does not use one of Ember algorithm implementations, you may need to add dummy handler of position reports to your algo:

    @Override
public void onPositionReport(PositionReport response) {

}

Tag algorithm factory with @PositionTracker annotation to enable routing of position messages to your algo.

  • Switched all Drop Copy services to use File-backed message store (#1129)

1.12.0 - November 18 2022

  • Journal format change:
    • Bond instrument attributes coupon, redemptionValue, parAmount changed their data type from Double to Decimal64
    • Synthetic instrument got rootSymbol attribute.

1.11.26 - September 16th, 2022

  • FIX API Change: Execution Report sent in response to order status response now contains submission time of order in FIX tag OrigTime(42)

1.11.21 - September 2nd, 2022

  • Kafka Data Warehouse: ember can now stream messages and orders into Kafka
  • TimeBase Data Warehouse change: message timestamps no longer reflect "when message was stored in TimeBase". Instead, Ember tries to store "when it happened" timestamp. However, since TimeBase requires strict chronological order of timestamps, data warehouse will override timestamp of messages that attempt to store "past" timestamps.

1.11.12 - August 1st, 2022

  • Better support for Inverse Future contracts (this time covering P&L and Market Value)
  • Configuration change: decimalPricePrecision and decimalQuantityPrecision parameters of Ember Monitor replace decimalPrecision ($EMBER_HOME/application.yaml).

1.11.0 - June 22, 2022

There are no breaking API changes for algorithms/connectors/journal format in this release.

  • Enhanced Ember cluster mode to support late join. This enables rolling updates and on-the-fly cluster repair.
  • Breaking Cluster Change: If you coordinated Ember cluster using Apache Zookeeper you need to re-create cluster configuration in Zookeeper using cluster-cli tool.
  • Breaking Config Change: Making full order validation mandatory for all production setups. Clients can no longer use MinimalOrderRequestValidatorFactory as it was unable to detect some frequent problems with order requests. If your ember configuration references MinimalOrderRequestValidatorFactory you need to remove it (and hence switch to default validation):

engine.validation = null # <-- REMOVE

engine {
...
validation { # <-- REMOVE THIS BLOCK
factory = "deltix.ember.service.valid.MinimalOrderRequestValidatorFactory"
..
} # <-- REMOVE DOWN TO HERE
}

1.10.45 - June 21, 2022

  • Ember Tools: Added volume-profile-publisher tool for generating VWAP volume profile from aggregated market data
  • VWAP Algorithm:
    • Added ability to compute volume based on weekly profile.
    • Added support for 6034 custom order attribute that can be used to specify the portion of daily or weekly profile data used by VWAP for order clips sizes calculations.

1.10.38 - May 29, 2022

  • Order validation parameter engine.validator.maxOrderRequestTimeDifference has been deprecated. There is now similar option in FIX Order Entry gateway setting:
gateways {
trade {
ORDERENTRY {
settings {
maxOrderRequestTimeDifference: 45s
}
...

1.10.31 - May 17, 2022

  • Updated to Aeron library version 1.38.1. If you use TimeBase topics in Ember, you need to update to TimeBase version 5.5.38+. Agrona library was also updated to version 1.15.2.
  • TWAP Algorithm: added support for the new price offset attribute 6045 that enables more aggressive trading by TWAP (#1003)
  • Risk Rules: added new MaxOpenQuantity risk rule that limits total open BUY or SELL quantities (#755)

1.10.23 - April 18, 2022

  • Added ability to disable "client can see only own positions" filter when serving position requests (#978)
  • Ember Monitor: order search can now retrieve orders from journal (previously search was serving from memory cache only).

1.10.17 - April 11, 2022

  • Ember Cluster: added journal-replica-server and journal-replica-client tools for asynchronous journal replication.
  • Implemented ability to gracefully shutdown ember on TimeBase failure (HA Mode) (#952)

1.10.12 - April 4, 2022

  • Added ability to define event transformers for FIX Drop Copy (#963)
  • Improved TimeBase loss auto-recovery logic for trading algorithms that use input/output channels

1.10.10 - March 25, 2022

  • SOR Algorithm: added support for minNotional and minNotionalCurrency (#901)
  • Fixed trade correction handling for completely filled orders (#940)

1.10.7 - March 17, 2022

  • Drop Copy: Added an ability to filter messages by account and trader (#938)

1.10.6 - March 15, 2022

  • Added an ability to perform commission currency conversion on trade reported by connectors (#929)

1.10.5 - March 5, 2022

  • SOR Algorithm: now has ability to copy custom order attributes from child to parent events (#924) and external order ID (#926)
  • Order Entry API now supports All-Or-None order type (using order flags feature).

1.10.4 - February 28, 2022

  • FIX API: Added an ability to transmit parent order ID, parent source ID, and trader group with each order (#920)
  • SOR Algorithm: improved how child rejection reasons are comminicated in context of parent order cancellation
  • FIX Market Data Gateway correctly supports non-FX/Crypto instrument types (#918)
  • VWAP Algorithm now uses separate volume profiles for BUY and SELL orders

1.10.3 - February 25, 2022

  • Risk API: Support an ability to define custom Projection Value definitions. See Risk API for more information.

  • Algorithm API, Trading Connector API: switched to use open-source version of DFP library. Migration notes:

    • Edit dependencies section in your build.gradle files: Replace deltix:deltix-dfp:0.10.* by com.epam.deltix:dfp:0.11.23.
    • Java sources:
      • replace import deltix.dfp.Decimal; by import com.epam.deltix.dfp.Decimal; in all Java sources
      • replace import deltix.dfp.Decimal64Utils; by import com.epam.deltix.dfp.Decimal64Utils; in all Java sources
      • replace import deltix.dfp.Decimal64; by import com.epam.deltix.dfp.Decimal64; in all Java sources
  • Ember Monitor: "Cancel All" activity now logged in Audit log.

  • Algorithm market data subscription now has ability to subscribe to all symbols in selected stream (Using subscribeToAllInstruments = true parameter).

  • Adopted Deltix Websocket Hub for as Ember market data feed API

1.10.0 - Feb 8, 2022

  • Ember Security Metadata management has been redesigned to optimize memory use for deployments with large number of instruments (100K+). Unfortunately some of API methods offered for Risk and Algorithm development have been changed. See Ember 1.10 API migration notes for more information.

  • Journal data format has been upgraded to version 24 to add more fields for OPTION instruments.

  • Trading Connector API methods that have been marked as @Deprecated more than a year ago have been removed.

1.9.50 - Feb 7, 2022

  • Order Book Viewer (CLOB Monitor) panel has been added to Ember Monitor. This panel provides a view inside matching engine hosted by Ember.

1.9.48 - Jan 3, 2022

  • Cluster shutdown procedure has been re-implemented

Deprecated APIs:

  • AlgorithmContext.createInputChannel(streamKey, from, options, types, instruments)
  • TradingConnectorContext constructors
  • DeltixMarketDataGatewayFactory:warmUpInterval - use warmUpDuration instead

1.9.44 - Dec 1, 2021

  • Ember Monitor got Prices panel that allows to inspect and edit prices used by OMS Risk and Currency Converter services.

1.9.33 - Nov 22, 2021

  • QuoteFlow simulator now supports L1/Trades simulation that can be activated using useClassicSimulator=true setting.
  • Timebase connector (actually algo) can handle timebase disconnect
  • Added journal-probe tool for cluster journal reconciliation

1.9.29 - Nov 11, 2021

  • Journal Snapshots now store CRC. Corrupted snapshots can be detected and repaired by Journal Repair tool.
  • Cluster Configuration: Cluster Coordinator now configured outside of cluster stanza: Old configuration:
cluster {
cluster {
group = EMBER
coordinatorUri = "zk:{{zookeeper_server}}:2181"
...
}

New configuration:

cluster {
group = EMBER
...
}

clusterCoordinator {
factory = "deltix.cluster.coordinator.impl.zk.ZkCoordinatorClientFactory"
settings {
connectUrl = "zk:{{zookeeper_server}}:2181"
sessionTimeout = 10s
startupConnectTimeout = 5s
recreationAttemptInterval = 2s
}
}
  • Not allowing engine to start without request validator (noticed antipattern in PROD).

1.9.26 - Nov 1, 2021

  • MinimalOrderRequestValidator has been renamed to UnsafeOrderRequestValidator due to common pitfalls of its usage
  • Added API to query current state of risk limits. See RiskTableSnapshotRequest for more information.
  • Introduced new API to develop execution algos (so called V2). See Algorithm Developers Guide for more information.
  • Pricing Service supports RFQ quotes
  • Currency Conversion Service supports one-sided bids and offers for some exotic currency pairs
  • Ember OMS API: Order Attributes Transformer
  • FIX Gateway now can transmit OCO/Bracket order attributes

1.9.16 - Sept 35, 2021

  • Added new Risk Rules: MaxShortExposure, MaxLongExposure, MaxNetExposure, MaxGrossExposure, MaxShortLongExposure (see NOP Examples document for more information).

1.9.15 - Sept 12, 2021

  • Added new Risk Rules:
    • MaxNetPosition - limits net position ()
    • MaxOrderValue - limits maximum order value (quantitypricecontract multiplier)
    • MaxDailyOrderCount - limits how many orders can be sent per trading day
    • MaxDailyRequestCount - limits how many requests can be sent per trading day (order submission and modifications requests only, order cancellations are also counted by are exempt from this limit)
  • MaxTradeVolume has been renamed as MaxDailyTradeVolume and now applies to orders of all instrument types. Previously this limit applied to BONDs only. If you want to restore previous behavior, please use this risk rule with InstrumentType projection. For example:
ProjectionMaxDailyTradeVolume
BOND100000
*

1.9.10 - Aug 26, 2021

  • AbstractAlgorithm API change: Interface InstrumentData now enforces that method InstrumentData.getSymbol() return a String rather than CharSequence. This change forces API uses to use immutable keys for InstrumentData.

1.9.0 - Aug 12, 2021

  • Ember codecs now support composite fields (nested structures)
  • OrderNewRequest.settlementType

1.8.29 - Aug 12, 2021

  • API change: AlgorithmContext method getTradingCalendar() has been renamed as getTradingCalendarProvider()
  • API change: AlgorithmContext got new getInputPoller() methods that allows pollers to use raw message format
  • Ability to have custom panels in Ember Monitor

1.8.28 - Aug 9, 2021

  • Order Modification GUI added to Ember Monitor
  • Order can be replaced using correlation order ID (no longer require original order ID to identify most recent working order)
  • Implemented ability to inject frequently used system services into Custom services
  • Docker container switched to newer Alpine image
  • QuoteFlow Trading Simulator no longer needs exchange to be specified on order
  • Added API to list running algorithms and connectors (for C2 Trader)
  • Risk Projections now include InstrumentType
  • Support for Amazon Cognito as OATH provider
  • API change: Timebase data warehouse now stores most recent order ID as OrderId (previously used Correlation Order ID is stored as new field CorrelationOrderID).
  • OrderRestateEvent can now update order Stop Price

1.8.26 - Jul 30, 2021

  • Switched to TimeBase 5.5. The only breaking change is QQL syntax change. Please refer to TimeBase release notes if you use QQL for subscription filters.
  • Added new traderIdResolution mode DTS_DATABASE in this mode each FIX Order Entry session can be used to transmit orders on behalf of multiple traders. In this case FIX tag SenderSubId(50) must match with CryptoCortex user ID (GUID). FIX Gateway will validate order's user is indeed associated with specific FIX session.

1.8.14 - May 25, 2021

  • Added RFQ messages (QuoteRequest, Quote, etc)
  • Trading Connector API was extended to provide access to TimeBase and Deltix.Api.Messages.
  • Changed format of risk-related order rejection reasons. Now human-readable part of the reject message comes first.
  • Added ServiceListRequest to introspect deployed algorithms and connectors
  • ES Monitor: Added decimal digit grouping and supported B=billion, M=million, K=thousand suffix when entering large numbers

1.8.3 - March 29, 2021

  • New "aggregate" risk limits were added to Risk service.
  • ES Monitor: Ability to halt/resume trading at a specific projection level.

1.8.0 - March 29, 2021

  • Support for settlement dates as well as grouping position and risk using Party ID / Clearing Broker
  • Ember journal format has changed. Existing client need to run migration utility. See "Ember Journal format upgrade" utility documentation.
  • Message format changes:
    • Added SettlementDate to OrderNewRequest
    • Added Party and Clearing Broker to OrderRequest and OrderEvent
    • Added RequestId to OrderStatusRequest, OrderStatusEvent, and MassOrderStatusRequest
    • Added UserData to OrderReplaceRequest
  • API change: we had shameless typo in OrderStatus.UNACKNOWLEDGED enum constant (was: UNACKNOWLEGED). This enum is used by some algorithms.
  • API change: OrderRequestTransformer methods were renamed to match general naming pattern in Ember (onOrderCancelRequest=>onCancelOrderRequest)
  • API change: FIX Drop copy ExecutionReport(35=8) message format was extended with Party component block. See FIX Drop Copy spec for more information.

1.7.60 - March 23, 2021

  • Algo pack supports exchange-traded-synthetics

1.7.56 - March 11, 2021

  • ES Monitor: Added Tree Map view for Positions.
  • ES Monitor: Added Group-By feature for Positions view.
  • ES Monitor: Added daily Size, Avg.Cost, Realized and Unrealized P&L, Create/Update timestamps to Positions view.
  • ES Monitor: Added Flow panel to visualize internal message flow in Ember.

1.7.32 - January 27, 2021

  • REST / WebSockets API Gateway. See [https://docs.deltixhub.com/ember-rest-ws-api/] for more information.

1.7.22 - December 24, 2020

  • Ember Risk and Positions now handle partial fills (now partial fills become part of actual position size).
  • added ProxyAlgorithm
  • Changed FIX tags used by FIX Gateway for position project keys. See FIX spec for more details.

1.7.20 - December 24, 2020

  • Ember OMS (including Risk and Positions) support exchange-traded synthetic for FUTURE contracts.

1.7.6 - November ??, 2020

  • SIM exchange simulator now supports scripted order workflows. See "How to use SIM trading simulator" document for more information.

1.7.5 - November 18, 2020

  • New precise epoch clocks optimized for Linux
  • Non-aggregated Level2 Market data support in FIX Gateway, as well exchange ID in Level3.

1.7.2 - October 12, 2020

  • API Change. OrderRouter interface has been extended with OrderNewRequest parameter.
  • ES Monitor will start using user identity for manual order Submit and Cancel (When UAC is enabled)

1.7.0 - September 14, 2020

  • Ember journal format has changed. Existing client need to run migration utility. See "Ember Journal format upgrade" utility documentation.
  • Starting from this build TCP-based message bus is used by default (as opposed to Aeron-based UDP message bus). If you still want to use IPC/UDP based message bus make sure you have the following configuration stanza:
aeron: ${template.aeron}
messageBus: ${template.messageBus.aeron}

Also, if you use Aeron-backed TimeBase streams, make sure to configure for standalone Aeron driver and specify location of your aeron media driver directory:

aeron: ${template.aeron} 
aeron: {
driver {
embedded = false
directory = ... # enter path to Aeron work directory (or null if you use default)
}
}
  • Data model changes:
    • Added ModuleKey and PortfolioKey to orders requests and events
    • Added Commission and CommissionCurrency field to Position, OrderStatusEvent and OrderCorrectEvent
    • Added OriginalTimestamp field to Order Events (reports exchange-time of event)
  • Data warehouse format changed (see data model changes). Schema changes should be applied automatically with one exception - TimeBase schema requires QQL schema change (See Timebase warehouse document, Appendix B).
  • Risk and Positions: projections by order's module key and/or portfolio key are now supported.
  • Trading Connector API: removed deprecated methods
  • Algorithm API: removed deprecated methods
    • Algorithm.makeTradeReportEvent() is replaced by makeParentTradeReportEvent()
    • AlgorithmContext.getServiceId(name) is replaced by AlphanumericCodec.encode(name)
    • AlgorithmContext.getServiceName(id) is replaced by AlphanumericCodec.decode(id)
    • Deprecated CurrencyCodec class - use AlphanumericCodec
  • Deprecated engine.convertTradeTotalToNormalReports setting (it now always true)

1.6.86 - August 19, 2020

  • Ember now requires TimeBase 5.4+

1.6.85 - July 29, 2020

  • ES Monitor now checks CONTROL_FIX_SESSION permission on attempt to enable/disable/disconnect/reset-seq-numbers of a FIX Session in FIX Sessions panel.

1.6.83 - July 2, 2020

  • eFIX Engine supports in-session sequence number reset (helpful for 24/7 FIX sessions)
  • Journal migrator now supports downgrades
  • Numerous bugfixes to FIX Market Data Gateway, OMS Cancel Reject handling, etc.

1.6.77 - May 27, 2020

  • Ember monitor backend now provides Prometheus metrics
  • Algo Orders behavior change: parent order no longer attempts to cancel IOC or FOK children when processing Cancel Request.
  • Ember OMS now broadcast OrderRestateEvent to trading algorithms and FIX/API clients (order source). Previously this event was handled by OMS only.

1.6.71 - May 5, 2020

  • Algorithm API Change: OrderType now stored at Order object (rather than OrderEntryReq)

1.6.70 - April 29, 2020

  • Critical fix for journal-compaction process regression introduced in 1.6.56

1.6.59 - April 21, 2020

  • Commission Algorithm - changed output channel schema L2Message, PackageHeader -> ConnectionStatusChangeMessage, PackageHeader. The existing steam should be deleted.

1.6.55 - April 9, 2020

  • Custom FIX tags used by CORRECTIONS algorithm have been changed to match with Deltix FIX dialect defined by TimeBase API Messages
  • Configuration of COMMISSION algorithm changed to allow per-instrument price rounding rules
  • TransactTime(60) was added to FIX Market Data: FullRefreshMarketSnapshot(35=W) message. Can be configured via addTransactTime setting (default is ON).

1.6.52 - March 26th, 2020

  • First release to officially support Java 11
  • Newer Docker image (jdk:8.242.08-r0-alpine20200122)
  • ES Monitor now supports Single Sign On mechanism used by CryptoCortex (SSO)
  • Algorithm API: import deltix.ember.quoteflow.common.LogProcessorAdapter replaced by deltix.ember.service.algorithm.util.LogProcessorAdapter
  • Journal robustness enhancements

1.6.44 - February 28th, 2020

  • Implemented automatic Ember Journal format migration (based on @Since and @Deprecated tags).
  • Fixed critical issue with position accounting (DMA filter was not working properly).
  • SOR Algorithm: Introduced aggressiveOrdersOnly configuration parameter (default value is false to preserve SOR behavior). To be used in exchange information like so:
sorExchangeConstraints =
[
{
exchangeName = "COINBASE",
aggressiveOrdersOnly = true,
}
...

1.6.43 - February 24th, 2020

  • Various improvements in cluster mode
  • Support for Alphanumeric(10) currency codes in Security Metadata streams

1.6.35 - February 4th 2020

  • TCP Gateway for Ember Message Bus. If you do not use Timebase Topics to produce or consume market data then Aeron is no longer required. See Ember Configuration Guide for more information on how to enable this feature.

1.6.34 - February 2rd, 2020

  • Fixed regression with processing of legacy currency codes (e.g. 741 for BTC). Now these old Security Metadata streams are supported again, with a warning.

1.6.33 - January 30th, 2020

  • Enhanced Aglo Testing framework to detect improper (unsafe) references to CharSequence objects
  • Fixed CharSequence mix-up problem in SOR Algorithm
  • Enhanced PVOL Algorithm to place child order at passive price for configurable amount of time before making them aggressive.
  • Drop Copy now can filter events based on Destination ID.
  • Algo Test Framework API change: method makeLeader(Algorithm) no longer requires any parameter.
  • Fixed regression with support of Security Metadata streams that used legacy ISO codes for crypto-currencies.

1.6.31 - January 7th, 2020

  • Multiple fixes in SOR Preview API (0.4+ version of algo-preview container is required to use with this version)
  • Ember will look for "currencies" stream containing Currency Message (from standard timebase api messages). If no such stream is found, we will use CurrencyCodesList.xml (as before).
  • No longer using deprecated ISO code 741 for BTC (XBT). Algorithm API: removed deprecated method that provided ISO currency code.
  • Deprecated class CurrencyCodec and usage of CurrencyCodeList

1.6.27 - December 5th

  • Fix for QuoteFlow Matching Engine symbol mix-up problem

1.6.26 - December 4th

  • Algorithm API: changed input channel related methods in AlgorithmContext.
  • Introduced configurable limit on maximum number of pending cancel-replace requests for any order. Controlled by maxPendingReplaceCount engine validation parameter. Default is 10. Note that you can still have very large cancel replace chains (tens of thousands), just make sure you don't amend orders significantly faster than exchange accepts them.
  • Added support for IntervalVariance (6027) parameter for TWAP, VWAP and PVOL orders. IntervalVariance is an optional attribute that randomizes time interval between algorithm child orders.
  • Added support for QuantityVariance (6028) parameter for TWAP orders. QauntityVariance is an optional attribute that randomizes quantities of TWAP child orders.
  • Added k8s-like restart strategy to Warehouse App. You can configure it if required:
warehouse {
sample-unit {
restartStrategy {
policy = ON_FAILURE # ALWAYS, NEVER

period {
min = 15s
max = 5m
}
}
}
}

the default is retrying with exponential back-off delay to restart streaming data if some errors occur such as: disconnect and etc.

1.6.25 - November 27

  • Ember now passes Clean Dependency check. Nighly builds check for dependency volunerabilities in OWASP database.

  • Ember Monitor migrated to new version of Spring framework. JVM configuraiton property that defines location of custom application.yml spring.config.location has been replaced by spring.config.additional-location.

  • Configuration of Ember OMS validation has been changed. Custom validation strategies are now supported, however previously defined parameters need to be moved under settings { ... } block. Ember will abort startup if legacy configuration settings are overriden.

engine {
validation {
allowCancelOfFinalOrders = false
}
}

Needs to be converted to:

engine {
validation {
settings {
allowCancelOfFinalOrders = false
}
}
}

For applications like SlowFIX gateway it is recommended to perform only minimal amount of validations. This can be done by switching to "minimal" validation set of checks like shown below:

engine {
validation {
factory = "deltix.ember.service.valid.MinimalOrderRequestValidatorFactory"
settings {
}
}
}

1.6.21 - November 6

  • Deprecated MarketOnClose(6025) parameter for TWAP and VWAP orders. From now on order will be cancelled after user-specififed order duration expires.
  • Deprecated InitialPrice(6020) and PriceLimitApplied(6026) parameter for TWAP and VWAP orders. From now on TWAP and VWAP will always respect limit price.

1.6.20 - October 28th

  • Project passed Spotbugs/SecPlugin Source Code Analysis (fixed all findings ranked as Scariest and Scary)
  • ES Monitor: Load/Store for order entry from
  • Relaxed idle strategy to be more CPU sharing
  • QuoteFlow algorithm enhancements

1.6.12 - October 16th

  • Introduced OMS Debugger tool
  • Fixed support for RootSymbol-based risk limits
  • Added OpenOrdersLimit risk limit
  • Optimized Pricing Service
  • Exchange mappings feature in SIMULATOR and QUOTEFLOW matching engine

1.6.10 - October 4th

  • Reworked Telemetry page in ES Monitor
  • Fixed critical OMS bug related to cancel-replace handling (#365)
  • Introduced journal-transform tool. See G Suite documentation.
  • Improved FIX Gateway performance

1.6.01 - September 16th

  • When ember is hosting a FIX gateway the following block may be used to enable TCP port for health checks.
network.healthcheck {
host = "HOST"
port = PORT
}

1.6.0 - September 15th

  • API change: Order callback onDeactivate() has been replaced by onDeactivate(OrderEvent).
  • First version of S3 data warehouse
  • SOR Algorithm no longer uses uses main security metadata contract for default minimum order size and order precision. Use fallbackToMainInstrument to restore old behavior.
  • SOR Algorithm no longer uses SYMBOL#EXCHANGE security metadata (only SYMBOL.EXCHANGE). Use usePoundIInstrumentExchangeSeparator setting to restore old behavior).

1.5.2 - September 8th

  • Ember Docker image switched from CentOS to Alpine Linux
  • Ember monitor now loads UAC configuration files from $EMBER_HOME (rather from $EMBER_WORK)

1.5.0 - September 5th

  • This release is a fork of stable branch 1.4.11
  • Ember Message Bus now checks client-server versions
  • Important fixes in QuoteFlow library

1.4.15 - August 26, 2019 (Numerous regression in OMS, upgrade to 1.6+ immediately)

  • Exchange Commissions Engine now can recompute part 30-days trading volume while system is running (once a day)

1.4.12 - August 22, 2019 (Numerous regression in OMS, upgrade to 1.5+ immediately)

  • Optimized the way Ember OMS and ES Monitor keep track of order history. OMS now keeps only pending cancel and cancel-replace requests. Rejected replacements simply removed from history. Accepted replacements are kept in memory until OMS cache keeps inactive order ID.
  • Order API: onDeactivate() callback now has OrderEvent argument (event that brought order to inactive state).
  • Centralized Security Master component now can use local cache when remote service is unavailable
  • JSON format of Ember messages: change @type field to $field
  • minor API change: AlgorithmContext method getInstrumentMetadataProvider has been renamed as getRemoteSecurityMetadataProvider.

1.4.7 - July 31, 2019

  • Added XOR (Crossing Order Router) algorithm
  • Including newer version of QuoteFlow library (with important fixes).

1.4.6 - July 31, 2019

  • Added clearingAccount to SQL Tables. Increased SQL schema to 1.

1.4.5 - July 23, 2019

  • Ember now halts trading each time it loses connection to timebase. Use setting engine.exceptions.haltOnTimebaseLoss=false to disable this automatic behavior.
  • Ember Monitor now wait for ember Ember Readiness on start up.
  • Update QF from 3.0.0 to 3.1.2 (Memory leak fix).
  • Added version table to SQL warehouse to support auto-update of table schemas. Warehouse App will fail if you use Ember prior 1.4.5. You can create this table and insert a row per each main table for Ember 1.4.0 - 1.4.4 since table schemas are equal to Ember 1.4.5.
  • Yandex Clickhouse:
  create table ember.version (Name String, Version Int32) engine = MergeTree() order by (Name, Version)
insert into ember.version (Name, Version) values ('orders', 0), ('messages', 0)
  • Amazon Redshift:
  create table version (Name char(256) not null, Version int4 not null)
insert into version (Name, Version) values ('orders', 0), ('messages', 0)
  • Microsoft SQL Server:
  create table ember.dbo.version (Name char(256) not null, Version int not null)
insert into ember.dbo.version (Name, Version) values ('orders', 0), ('messages', 0)

1.4.2 - July 16, 2019

  • Introduced schema migration scripts for data warehouse solutions
  • Improved RedShift data warehouse pipeline

1.4.0

  • Added Term Int64 column in RedShift, ClickHouse, MSSQL Tables.
  • Added OpenSequence Int64, DeltixRejectCode Int32, VendorRejectCode Int32 columns in ReadShift Orders Table.
  • Renamed Text to Reason, Sequence to CloseSequence columns in ReadShift Orders Table.

1.3.0

  • Changed market data subscription API for algorithms. MarketSubscription.subscribe() has been deprecated for safety concerns (to prevent users from mixing subscription patterns). MarketSubscription.subscribe(Symbol) for an algorithm that is subscribed for all symbols will be IGNORED (with a warning)
  • Changed how algorithms subscribe for market data. From this release, when subscription symbols parameter is missing algorithm will subscribe for ALL symbols. Previously such configuration was interpreted as "empty subscription". If you want to deploy an algorithm without initial subscription use symbols = [] parameter.

1.2.1

  • ES Monitor now has easy to access "Cancel All" orders button
  • Added MaxRequestFrequency Risk Limit

1.2.0

  • Switched to version 3.0.0 of QuoteFlow library. For anyone who has direct dependency on this library please change your project from deltix:rtmath-quoteflow:2.X.X to deltix:deltix-quoteflow:3.0.0.
  • Breaking Algorithm API change: replace imports of rtmath.quoteflow. with deltix.quoteflow..
  • FullOrderBook API users are encouraged to initialize order book with setDisconnectBehaviour(DisconnectBehaviour.CLEAR_EXCHANGE) .
  • Make sure FullOrderBook component is fed with MarketMessages (rather than just PackageHeaders)
  • QuoteFlow-based trading simulator SIMULATOR no longer supports legacy market data format by default. Use supportLegacyMarketDataFormat setting to re-enable.
  • Added optional field deltixRejectCode to RequestRejectException
  • Added onKillSwitchEvent() to Algorithm API to notify algos about trading HALTS.
  • Journal format breaking change: trading requests were extended with tradeGroup field.

1.1.27 - 1.1.32

  • Test Releases: Do not use them.

1.1.8: June 5, 2019

  • Algorithm test API: class ExecutionAlgoUnitTest has been renamed as AbstractAlgorithmTest
  • ES Monitor can convert synthetic identifiers used to identify trader, trader group, and account to their human-readable names
  • ES Monitor added an ability to force FIX message sequence numbers for trading connectors
  • Ansible scripts to deploy Algo Pack demo

1.1.3: May 31, 2019

  • Service panel in ES Monitor
  • SimpleOrderRouter now has fallbackToExchange flag that allows to use request exchange as destination if normal destination is not provided by request source.
  • New API for Trading Algorithms
  • SOR Algorithm can now detect stale market data (staleness is controlled by stateMarketDataTimeout parameter which defaults to 1 minute)
  • NIAGARA and QUOTEFLOW no longer have default topic names
  • Algorithms output channels now can create transient streams if stream key starts with '#' sign.

1.1.0: May 8, 2019

  • Currencies now stored using ALPHANUMERIC(10) encoding rather than by their ISO code.
  • Bitcoin currency now represented by BTC rather than less popular XBT abbreviation.
  • Some changes in ember messages format that require version change (changed how we store currency fields, and commissions)

1.0.8: May 7, 2019

  • Fixed multiple issues in SOR algorithm, added SOR Preview functionality
  • Multiple buffixes

1.0.4: April 25, 2019

  • AWS RDS SQL Server data warehouse pipeline
  • Hashicorp Vault Integration for storing configurtion secrets like exchange API keys of trading connectors.
  • SOR Algorithm now supports new flag aggresiveOrdersOnly (7003) when enabled, SOR will not place passive orders.
  • SOR Algorithm no longer supports sequential execution mode. Please remove sequentialExecution parameter from your ember.conf.
  • SOR Algorithm no longer supports eligibleExchanges (comma-separated list) parameter. Use sorConstraints instead.
  • SOR Algorithm now requires sorConstraint entry for each exchange you plan to trade on. This is not a new parameter but now it became default. Here is an example:
   {
exchangeName = "COINBASE",
orderTypeDefinitions =
[
{orderType = MARKET, timeInForces = [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]}
{orderType = LIMIT, timeInForces = [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]}
{orderType = STOP, timeInForces = [GOOD_TILL_CANCEL, IMMEDIATE_OR_CANCEL, FILL_OR_KILL]}
]
}

1.0.3: April 16, 2019

  • Warning: this version of Ember requires TimeBase 5.3
  • Upgraded to Aeron 1.17.0
  • Algorithms and Trading Connectors now have access to Deltix Centralized Security Metadata service
  • SOR Algorithm can now read configuration parameters like minimum order size, order precision, commissions from centralized SMD.

1.0.0: April 6, 2019

  • Main feature: Realtime journal compaction and journal snapshots. See journal documentation for more details.
  • API changes: optional OrderType field now available at OrderRequest level making it possible to use this field in enriched cancel requests.

0.10.14: April 4, 2019

  • Enriched version of order submission request use FX insturment base currency as default currency

0.10.13: April 3, 2019

  • Added an ability to manually adjust theoretical positions in ES Monitor. Also internal API was added to programmatically adjust specific positoin.

0.10.12: March 30, 2019

  • Added commission and commission currency fields to ES Monitor
  • ES Monitor now has ability to limit number of digits in decimal prices and sizes displayed in the GUI. Default precision is 8 digits after decimal point. Configuration file application.yml can be used to override that:
    converters:
    decimalPrecision: 10

0.10.11: March 27, 2019

  • Numerous bugfixes in OMS and ES Monitor
  • Algorithms use different logger. Instead of shared deltix.ember.service.algorithm.Algorithm logger now each algorithm uses ember.algorithm.<AlgorithmID> (for example ember.algorithm.ICEBERG).
  • TWAP Algorithm: changed the meaning of marketOnClose flag. Now when this flag is set to false (or not provided) remaining part of the order will be cancelled at order expiration.

0.10.10: March 13, 2019

  • Added deltix-ember-converter-decimal artifact. Converters for timebase messages which use deltix.dfp.Decimal64 class.

0.10.9: March 6, 2019

  • Changed mapping: ember.timestamp -> timebase.originalTimestamp.

0.10.7: February 19, 2019

  • ES Monitor: Added simple Order submission form to Active Orders panel
  • Docker: Renamed /var/lib/ember-home to /var/lib/emberhome
  • Docker: Switched from Oracle to OpenJDK as base image
  • Docker: Started using EMBER_WORK environment variable (/var/lib/emberwork) for output artifacts (counters, etc)
  • Docker: Added HEALTHCHECK command to docker (runs /opt/deltix/ember/bin/ember-health-check)
  • Docker: Started using std out only for ember logs (to simplify log access under docker)
  • Journal format changed: Positions query now has additional fields that allow to filter results
  • FIX API: Position request now supports filters based on Account/Trader/Exchange/Source/Destination/UserData.
  • By default OMS no longer accepts negative prices: for assets like exchange-traded synthetics set engine.validation.pricesMustBePositive=false.
  • Ember banner in logs now include PID.
  • Minor enhancements in FIX Gateway, algo-testing framework.
  • Added Sim connector to publishing artifacts.
  • Added liveness/readiness probes. Scripts: ember-liveness-probe and ember-readiness-probe.

0.10.6: February 1st, 2019

  • Implemented ember-cli tool to send order requests and halt/resume trading. List of supported commands:
set [<attribute_name> [<attribute_value>]]]
unset [<attribute_name>] [<attribute_name>]
submit [-n <number_of_orders>] [<orderId>]
replace [<originalOrderId> [<newOrderId>]]
cancel [<orderId> [<reason>]
status [<orderId>]
discard [<orderId> [<reason>]]
halt [<projectionPath> [<reason> [CANCEL]]]
resume [<projectionPath> [<reason>]]
exit
help [<command>]
  • TWAP, VWAP, and PVOL Algorithms: format of order duration parameter changed. Instead of notation like "15m30s" new format follows FIX Protocol's UTCTimeOnly data type format (e.g. "00:15:30") and supports milliseconds (e.g. "00:15:30.500").
  • TWAP, and VWAP Algorithms: Misspelled configuration parameter 'eligbleExchanges' has been corrected to 'eligibleExchanges'.
  • Transformer API: Class Misspelled CastTableMessageTransformerFactory has been renamed to CaseTableMessageTransformerFactory
  • Added timebase support to data warehouse.

0.10.3: January 23h, 2019

  • API: Renamed OrderMassCancelRequest to OrderMassCancelRequest, added OrderMassStatusRequest. Added OrderStatusEvent.LastReport field.

0.10.2: January 15th, 2019

  • Configuration of risk parameters in ember.conf has been considerably changed. Remove 'system-wide' limits block if you use it. Sample of new configuration is shown below. For more information read Risk and Positions tutorial.
    risk {
    // names of standard limits live in class LimitDefinitions
    riskTables: {
    Source/Account/Symbol: [MaxOrderSize,MaxPositionLong,MaxPositionShort]
    Exchange: [MaxRejectFrequency]
    }
    rejectUnmatchedOrders: true
    allowUndefined: [Account, Exchange]
    }
    Remove 'risk' block from your ember.conf if you want to run Ember without risk checking.

0.10.1: January 10th, 2019

  • Increased journal version to 11 (format change).
  • API change: API: Order now has .onDeactivate() callback. Existing callback Order.onEvicted() was renamed to .onEvict().
  • Changed ember binary encoding protocol a bit.
  • Removed Flyweights.
  • Split Codec into Encoder/Decoder. Decoder contains context from Flyweight.
  • Moved generated classes to build directory.
  • Removed generated* directories from .gitignore.

0.10.0: January 8th, 2019

  • First version of Risk and Positions API and GUI
  • Breaking change: ember risk and position tracking logic now requires some sort of market data. Engine needs to estimate effect of Market orders and perform order size conversion for contra-currency orders. Use 'pricing' section of ember.conf to define source of market data. Please note that here ES needs approximate (possibly delayed) prices. When real market data comes from several sources you may consider using just one reliable source. If market data is high frequency source you may consider feeding Ember with low frequency aggregated data (e.g. BBO or bars). The following configuration block defines pricing service:
pricing {
settings {
liveSubscription.streams = ["bbo"]
historicalDepth = 1h
}
}

Developers may use stubs like this to fake market prices:

pricing {
factory = "deltix.ember.app.price.FakePricingServiceFactory"
settings {
fixedPrices: {
BTCUSD : 3909.70
ETHUSD : 133
LTCUSD : 31.899
LTCBTC : 0.008148
BCHUSD : 170.27
BCHBTC : 0.046
ETHBTC : 0.034045
XRPUSD : 0.39287
}
}
}

0.9.7: December 30, 2018

  • Added Gateway Type to Authentication Request API
  • Added schedule to FIX Gateways.
  • Moved schedule from efix:endpoint to efix:core.
  • Moved the config property from "timebase.exchangeCalendarStreamKey" to "exchangeCalendar.stream".

0.9.6: December 10, 2018

  • Moved Message Bus to a separate module.
  • Added deltix-ember-tca module to distribution zip.
  • Improved ClickHouseMessageDataLoader to support nullable values of attributes.
  • Fixed #28.

0.9.3: November 28, 2018

  • Upgraded QuoteFlow library to 2.7.0

0.9.2: November 27, 2018

  • Changed schema of ClickHouse data loaders:
    • Renamed column exchange to exchangeId.
    • Renamed column trader to traderId.
    • Changed type of columns from Float64 to Nullable(Decimal128(12)) for Decimal64 fields.
    • Added column currencyCode Nullable(Int16) to orders table.
  • Error level logging in OMS in case order overfill is reported
  • FIX Market Data gateway Level2 feed now can publish synthetic MDEntryID(270) tags (helps with tick-to-order latency experiments)

0.9.1: November 23, 2018

  • Added BOM (Bill Of Materials) to publishing artifacts. It contains versions of all runtime dependencies. So you can import it to simplify dependency management:
plugins {
id "io.spring.dependency-management" version "1.0.6.RELEASE"
}

dependencyManagement {
imports {
mavenBom 'deltix:deltix-ember-bom:0.9.1'
}
}

dependecies {
implementation 'deltix:deltix-algo-api' // the version is taken from BOM
}

0.9.0: November 21, 2018

0.8.2: November 20, 2018

  • Dependency cleanup.
  • Removed Replicator component (Java/C).
  • Removed TradeAcceptor component.
  • Removed ICAP algos into separate repository
  • Pluggable asynchronous session LOGON authentication in FIX Gateway
  • Supported UserData(9999) in FIX Gateway
  • Primitive SecurityDefinition request/response in FIX Gateway
  • Fixed some bugs in ICEBERG algorithm
  • PVOL Execution Algorithm
  • AlgorithmContext API: Provided control over StreamOptions and LoadingOptions when creating output channels of algorithms

0.8.1: November 14, 2018

  • Added SnapshotRequest/SnapshotResponse to Connectors/Gateways/Algorithms/Ember
  • Added journal-compress and journal-decompress scripts to the distribution to make a journal archive while Ember is running.

0.8.0: November 8, 2018

  • Model changes
  • Base class Message was renamed to ApiMessage
  • OrderMassCancelRequest message now has Account/Trader/Exchange filter fields
  • CommissionCurrency and CounterpartyID was added to Trade Reports (OrderTradeReportedEvent).
  • "Trade Total" was deprecated. Trading destinations that report current total should use normal Trade Report event and skip unknown fields.
  • Added UserData "cookie" field to OrderNewRequest and OrderEvent
  • Added QuoteID to OrderEntryRequest

API change:

Removed void onOrderTradeTotalEvent(deltix.ember.message.trade.OrderTradeTotalEvent)

0.7.17: October 31, 2018

Changes

  • Updated to fresh version of QuoteFlow and QuantServer libs
  • OMS: implemented ability to convert OrderStatusEvent to set of simple events (Ack, Fill, Cancel). Use engine.convertStatusEventsToNormalEvents=false setting to disable this new behavior.

0.7.16: October 30, 2018

Changes

  • Added SessionStatusEvent to Algorithm interface to track connector statuses as a default method (for compatibility). Will be not default on the next minor version update.

0.7.15: October 29, 2018

Changes

  • Bugfixes
  • Newer version of QuoteFLow

0.7.12: October 26, 2018

Changes

  • Ember OMS now by default converts "running total" trade reports to normal trades (OrderTradeReported event). Use engine.convertTradeTotalToNormalReports=false setting to disable this new behavior.

0.7.11: October 26, 2018

Changes

  • LMAX Digital trading connector
  • Bugfixes for ES Monitor

0.7.10: October 19, 2018

Changes

  • Active Orders panels was added to Execution Server monitor. Added "Cancel All" (orders) button.
  • SOR algorithm was enhanced to handle the fact that some exchanged don't handle MARKET and GDT orders
  • Various bug fixes

0.7.9: October 11, 2018

Changes

  • Added status indicator to Trade Connector API to track the status of a connector via a counter.

0.7.8: October 10, 2018

Changes

  • OMS now rejects order requests that do not have a timestamp
  • @Decimal, @Alphanumeric, and @Timestamp parameters now supported in ember.conf
  • Improved FIX Order Entry Gateway to send business rejects on unknown messages.
  • Fixed FIX Order Entry Gateway to send conditional OrigClOrdId(41) field for order status events.
  • Added support for AWS Redshift data warehouse. Changed data.warehouse config a bit. See wiki to get the latest info.

0.7.2: October 3, 2018

Changes

  • Improved FIX Order Entry Gateway to send business rejects on unknown messages.
  • Fixed FIX Order Entry Gateway to send conditional OrigClOrdId(41) field for order status events.
  • Improvements in Algo unit test framework

0.7.1: October 1, 2018

Changes

  • Added trader ID resolution to FIX Order Entry Gateway. You can use the gateway.trade.${NAME}.settings.traderIdResolution setting to specify the desired behaviour. It can be SENDER_SUB_ID (uses 50 tag of requests), SENDER_SUB_ID_OR_CUSTOMER_ID (uses 50 tag if present or the customer ID if missing), CUSTOMER_ID (uses the customer ID). Customer IDs are placed in the client database per session.
  • Fixed a bug that used instrument contra-currency instead of base currency as default order currency

0.7.0: September 27, 2018

Changes

  • Changed AlgorithmFactory::create method to take only one AlgorithmContext parameter. It contains name and id now.
  • Changed AbstractAlgorithm::new constructor to take less parameters.
  • Added name check for services (such as gateways, connectors, algorithms and etc) to contain a valid alphanumeric text (upper case letters, digits and some signs) up to 10 characters including.
  • Removed IDResolver/NameResolver classes. Now we use explicitly alphanumeric presentation for sourceId/destinationId fields.
  • Reduced the footprint of FIX Order Entry Gateway by reusing single instances of data messages, encoders and decoders across all sessions.
  • FIX sessions backed by SQL database now check for IsActive flag on each record.

0.6.16: September 19, 2018

Changes

  • Various bugfixes, reduction in memory usage in some algorithms, SOR enhancements
  • Data Loading, Click House integration

0.6.14: September 11, 2018

Changes

  • Ember Binary format changed: please cleanup your journals!
  • Journal trimmer utility.
  • Each Ember message now has sequence number that can be used to deterministically drive ID sequences in places like trading connectors.
  • ES Monitor now runs logger enabled.
  • New API to transform inbound FIX requests before they enter OMS.

0.6.11: September 2, 2018

Changes

  • SOR enhancements (don't forget to add settings.checkBalances = false)

0.6.10: September 2, 2018

Changes

  • FIX Market Data gateway now supports L1 feed. Configuration flag publishMarketByOrder has been replaced by parameters inputFeedType and outputFeedType.
  • Slicing Algorithm API: replaces API callbacks handleNewOrder,handleReplace,handleCancel by processNewOrder,processReplace,processCancel. New version ensures that standard handlers are always called. Also it better supports request reject patterns that are in current use. The new callback methods may simply return text with request rejection reason (framework will take care of the rest).

0.6.8: August 27, 2018

Changes

  • API: Added an ability to specify custom TypeLoader for algorithm cursors
  • FIX gateway no longer require 'agent' configuration block
  • All config components now must use ALPHANUMERIC(10) format. Upper case letters must be used.
  • Polished command line arguments of cluster-cli tool
  • Added FIXED_LEADER cluster mode (follower is prohibited to take leader's role)
  • FIX Gateway fully support Pegged orders

0.6.5: August 21, 2018

Changes

  • Numerous bugfixes
  • Renamed tables used to store FIX Gateway client database to match with DTS style

0.6.0: August 16, 2018

Changes

  • Implemented Cluster mode that uses Zookeeper (for coordination) and Aeron UDP (for replication). See cluster documentation for more information.
  • Ember configuration of Aeron Message Bus has changed. Convert:
messageBus {
settings {
driver {
embedded = false
directory = "{{ aeron_media_driver_dir }}"
}
...
}
}

To new style:

messageBus {
settings {
...
}
}

aeron {
driver {
embedded = false
directory = "{{ aeron_media_driver_dir }}"
}
}
  • Also: Remove aeron.home JVM property from JVM system properties when running Ember or Ember Monitor.
  • Changed configuration of FIX market data gateway: Added 'agent' section and multiple streams can be specified using 'streamKeys' parameter.
  • Implemented FIX Drop Copy. To enable simple Drop Copy service add the following configuration block and launch 'bin/drop-copy' script.
dropCopy {
DROPCOPY {
settings {
host = "{{ ansible_hostname }}"
port = 7001
targetCompId = DELTIXTCA
}
}
}

0.5.28: August 10, 2018

Changes

  • Algo Orders and FIX Session panels in ES Monitor

0.5.26: August 3, 2018

Changes

  • Updated Documentation
  • QuoteFlow Simulator can now publish market data feed

0.5.24: July 19, 2018

Changes

  • Recent Parent/Child Algo orders panel in Execution Server monitor
  • FIX Gateway Monitor (groundwork)

0.5.22: July 12, 2018

Changes

  • Recent Fills tab in Execution Server monitor
  • API cleanup: moved some ember:core pieces to ember:api and ember:algo-api

0.5.21: June 29, 2018

Minor changes

  • Bugfixes in TWAP and SOR algorithms
  • Simple Order Router, Simple FIX Gateway client database (inside ember.conf)
  • Added an ability to wait for TimeBase connection on startup
  • Added an ability to customize FIX Gateway Target CompID

0.5.20: June 22, 2018

Minor changes

  • Updated CME trading connector to support multiple request sources
  • FIX Gateway: new simple client session configuration can be new defined in ember.conf
  • New Ansible deployment script for FIX+MatchingEngine setup on single AWS node
  • Zabbix charts
  • Multiple documentation updates

0.5.19: June 10, 2018

Minor changes

  • QuoteFlow matching engine now produces market data feed
  • Bugfixes in QuoteFlow, ES Monitor

0.5.16: June 1, 2018

Major stuff

  • Multi-server mode now uses Aeron UDP MDC. Ember now uses TB topics that support Multi-Destination-Cast (MDC)
  • Ember now publish own Docker image into Deltix private repo

Minor changes

  • Minor format changes in trade API (added commission to fills and exchange to cancel request)
  • Newer version of market factory connector

0.5.15: May 7, 2018

Major change

  • First version of monitoring agent for Zabbix (JMX-based).

Minor changes

  • Improved Ember client for UDP-based message bus
  • Improved stability of FIX Market Data gateway and matching engine
  • Improvements to Ansible automation
  • Publishing converter

0.5.14: April 28, 2018

Minor changes

  • Added first version of API to run FIX Gateway standalone
  • Fixed serious bug in FIX decimal number formatting, other bugfixes

0.5.13: April 20, 2018

Major change

  • First version of automated AWS Stress test is available (using Ansible)

Minor change

  • FIX Client database now can be stored in SQL
  • Order State Debugger script (/bin/order-debugger)
  • FIX Market Data gateway now can broadcast data from TimeBase stream (in addition to TimeBase topics)
  • FIX Market Data can now broadcast Market-By-Order books (in addition to Market-By-Level). To enable set configuration parameter gateways/marketData/*/settings/publishMarketByOrder=true
  • Bug fixes

0.5.11: March 30, 2018

Major change

  • Entire project switched from decimal4j representation of prices and sizes to Decimal64 (IEEE 754)

0.5.10: March 30, 2018

Minor changes

  • Updated FIX documentation
  • Improved FIX Market Data error handling
  • RTMath containers upgraded to version 1.1.23 (bugfixes)

0.5.8: March 28, 2018

New features

  • SSL support
  • Improved overload protection and disconnect diagnostic in FIX Gateway
  • Polished FIX Gateway dialect
  • Suppressed logging of repeated errors from OMS and Risk

API Change

  • FIX API changes (see documentation)

0.5.5: March 21, 2018

API Change

  • Slicing Algorithm no longer considers unsolicited cancellation of IOC or FOK child order as unrecoverable.

Bug fixes

  • Numerous fixes related to FIX Gateway and QuoteFlow order book processing

0.5.4: March 21, 2018

New features

  • Publishing artifacts to Deltix maven repo in ProGet

0.5.3: March 20, 2018

New features

  • Switched Matching Engine output to use "universal" Level 2 feed. This resolves limited depth snapshot problems.

0.5.2: March 19, 2018

Configuration Change

  • FIX Gateway now has a lot of configurable parameters. Large part of FIX Gateway configuration were moved to template ember-default.conf. Sample config now looks like this:
    gateways {
clientdb {
factory = "deltix.ember.service.gateway.clientdb.test.TestGatewayClientDatabaseFactory"
settings {
clientCount = 500
}
}
trade {
tradeGroup1 {}
}
marketdata {
mdGroup1 {
settings {
topic = "l3feed"
symbols = "EUR/USD, EUR/GBP"
maxLevelsToPublish = 64
minimumUpdateInterval = 50ms
}
}
}
}

New features

  • Added QuoteFlow simulator as standard destination (under "SIMULATOR" name):
    algorithms {
SIMULATOR: ${template.algorithm.SIMULATOR} {
topic : "l3feed"
}
}
  • Simple hierarchy of performance counters. EmberStat console tool now takes optional command line parameter - regex filter pattern of counters to display.
  • Algorithm subscription block now supports "types" parameter that allows limiting consumed message types:
    subscription {
streams = ["sine"]
symbols = ["IFLL ESU0", "IFLL L M2", "IFLL ERM2"]
types = ["deltix.timebase.api.messages.TradeMessage", "deltix.timebase.api.messages.BestBidOfferMessage"]
}

Notable Bugfixes

  • FIX Gateway transport level buffer mix-up fix.

0.5.1: March 12, 2018

Configuration Change

  • For users who run Ember with TimeBase.
  Change ember.conf:

timebase {
url = "dxtick://localhost:8011"
}

needs to be replaced by:

timebase.settings {
url = "dxtick://localhost:8011"
}

0.5.0: March 9, 2018

New features

  • New FIX Gateway (scalable, multi-session, non-blocking I/O, with both order entry and market data broadcasting)
  • Order Matching Engine (now with two implementations: QuoteFlow and Niagara)

This project uses Aeron and Agrona libraries developed by Real Logic.