dxFeed Blog
Market Pulse
Delayed daily chart for last 90 days.
See disclaimer.
Powered by dxFeed JavaScript API.
Turkish Market Data

Entries in dxFeed API (13)


dxFeed/QDS API release notes 3.203-3.240

Release Notes - QD - Version 3.240
** Change Request
QD-856: RecordBuffer may contain non-zero values beyond limit
QD-875: dxFeed API: add method DXEndpoint.disconnectAndClear
** Defect Report
QD-874: ExecutionManager must be removed from HashMap, when the RMIChannel is closed
Release Notes - QD - Version 3.239
** Change Request
QD-871: dxFeedScheme: MarketMaker shall contain counts of individual orders
** Defect Report
QD-862: DXFeed API Ignores exceptions thrown from DXFeedEventListener.eventsReceived
QD-866: Logged agent must log subscription going through addSubscriptionPart
QD-868: Agent aggregation period does not work properly with socket connectors
QD-869: NoSuchElementException in ClientSocketSource.getLocalAddresses(), local-address priority fails silently
QD-870: dxFeed API: IPF: Error reading empty lines in some cases.
** Improvement
QD-867: TextQTPParser shall understand date-only time specification history subscription
Release Notes - QD - Version 3.238
** Change Request
QD-832: QD RMI Shall have ability to limit default Java Serialization to a white-list of classes
QD-857: dxFeedScheme: OpenInterest field in Fundamental record shall be limited to composite only
** Defect Report
QD-861: Deadlock between QDEndpoint$Lock in RMIEndpointImpl.getRMILoadBalancerFactory and ClientSideServices lock in RMIClientImpl.removeConnection
Release Notes - QD - Version 3.237
** Change Request
QD-848: dxFeed API: Add and update rounding methods in PriceIncrements
QD-849: Tools: Instrument tool performance option shall work for read option.
QD-850: Schedule: add system property to control cache limit
QD-852: dxFeed API: Summary shall contain PrevDayVolume (composite only) and OpenInterest shall be limited to composite only.
QD-854: dxFeed API: Order shall contain count of individual orders
** Defect Report
QD-843: ConcurrentModificationException in MARSScheduler.cancel
QD-851: BUG FIX: current message shall be properly aborted upon error or session reset
QD-853: RMI: Deadlock between ClientSideServices and QDEndpoint$Lock
Release Notes - QD - Version 3.236
** Change Request
QD-605: RMI Channels
QD-771: Tools: FileWriter shall release completed files as time passes
QD-811: dxFeedViewer: Refactor and commit latest changes in dxfeed-viewer
QD-818: dxFeed API: Support TOS-specific data fields
QD-828: dxFeed API: IPF: Improve performance of reading IPF from file
QD-842: Schedule: update holidays and short days
** Defect Report
QD-535: FileConnector repeatedly tries to read a file that is already deleted or corrupted
QD-825: dxFeed API shall support integer Candle.Count fields in scheme
QD-836: Redundant libs in and dxfeed-webservice.war
QD-838: dxFeed API: OrderBookModel incorrectly processes change of lot size
Release Notes - QD - Version 3.235
** Change Request
QD-809: Dgen: move to DXLIB project group
QD-824: dxFeed API: Make Greeks a TimeSeriesEvent with Time and Sequence.
** Defect Report
QD-823: BUG FIX: IPF: InstrumentProfileConnection does not read instruments from old services.
Release Notes - QD - Version 3.234
** Defect Report
QD-816: Event flags are not sent over the network connection
** Improvement
QD-817: DXFeed API: make all executor threads "daemon"
Release Notes - QD - Version 3.233
** Change Request
QD-779: Dgen: Javac plugin for automated generation of Description annotations from Javadocs
QD-815: Schedule: update holidays and short days
** Improvement
QD-807: Redirect tests output to separate files on maven build
Release Notes - QD - Version 3.231
** Defect Report
QD-782: BUG FIX: Minor memory leak in OrderBookModel
Release Notes - QD - Version 3.207
** Defect Report
QD-804: Dynamic IPF filter: ipf changes were not applied
QD-820: QD Connectors shall throw exception when ')' is missing in address
QD-822: BUG FIX: dxFeed API: Symbol attributes mishandled for regional symbols.
Release Notes - QD - Version 3.206
** Defect Report
QD-812: Post tool does not wait for protocol descriptors (event flags are not sent immediately after connection establishment)
QD-813: Writing objects to BYTE_ARRAY fields fails
QD-814: Some dxFeed samples are failing when trying to addEventListener
Release Notes - QD - Version 3.205
** Change Request
QD-801: QDS API: Introduce RecordCursor.Owner.setAs(RecordCursor) method
QD-802: QDS Message connectors shall report "connectors_closed" rate to MARS
** Defect Report
QD-808: Event flags are not sent immediately after connection establishment (random effect)
Release Notes - QD - Version 3.204
** Change Request
QD-709: NIO Connector: Better internal statistics
QD-787: dxFeed REST API: Support requests with timeout=0
QD-788: dxFeed API: Introduce DXFeed.getXXXIfSubscribed methods
QD-791: dxFeed API: Throw IllegalStateException when trying to addEventListener on non-empty and attached DXFeedSubscription
** Defect Report
QD-664: dxFeed API: ConcurrentModificationException during DXEndpoint.close().
QD-775: dxFeed REST API: Memory leak on timed-out events resource request
QD-789: dxFeed API: Subscription change notification for publisher should not be conflated on fast subscription remove/add
QD-792: NPE and connection reset when subscriber use older QD (same scheme)
** Improvement
QD-776: dxFeed REST API shall log "events" requests and responses
QD-794: Use while-guarded LockSupport.park in HistorySnapshotMTStressTest



dxFeed/QDS 3.203 has been released

dxFeed/QDS 3.203 has been released to public.
Available at:

Build 3.203 introduces a number of changes since the last public build 3.200, in preparation to the upcoming 3.230+ public releases.

Summary of changes in build 3.203: 

** Defect Report

QD-714 History snapshot mode is not activated when initial data was without snapshot begin flag
QD-718 NullPointerException in AbstractIndexedEventModel
QD-721 QDS Post Tool does not support event flags
QD-727 BUG FIX: IllegalArgumentException in CheckedTreeSimpleTest
QD-730 RecordBuffer maxObFields tracking optimization is broken
QD-737 dxFeedAPI OrderBookModel hang/NPE in CheckedTreeList
QD-738 dxFeed REST API shall support comma-separated as well as repeated query parameters
QD-740 Tools: Sending data via pipe to post tool fails.
QD-750 Dynamic IPF filters: memory leak
QD-758 RecordBuffer.compact does not always properly cleans up
QD-765 Cannot receive data when connecting using 3rd party scheme to dxFeed scheme
QD-767 dxFeed REST API eventSource fails to create session sometimes
QD-769 Tools: Instruments tool shall fill TRADING_HOURS field for created products.
** Change Request
QD-387 Use record description from receiving data distributor to send only fields that are present in the scheme on the receiving side
QD-679 dxFeed REST API shall have auto-generated human-readable documentation
QD-681 dxFeed REST service demo shall provide links to event documentation
QD-713 dxlib: update gzip mime type and move utility classes to public package
QD-716 Support specifying time when subscription is set with dxfeed.qd.subscribe.history
QD-717 Transforms shall warn on use of undeclared variables
QD-720 History Snapshot protocol shall include SNAPSHOT_SNIP flag for compatibility with HistorySubscriptionFilter
QD-724 Tools: Instruments tool shall support transheader command in scripts
QD-725 Add methods to transform single InstrumentProfile
QD-726 Tools: Instruments tool shall support multi-line transforms command in scripts
QD-729 Tools: Instruments tool shall support transform performance option.
QD-731 Support ":" character in qd symbol patterns without additional escaping
QD-733 Tools: Collector option in tools shall support storeEverything mode for history contract.
QD-734 IPF: New transform functions to quickly check symbol category.
QD-735 dxFeed REST API shall support Server-Sent Events EventSource
QD-741 IPF: Support multiple labels in switch statement.
QD-742 Introduce RecordSource.VOID constant
QD-746 dxFeed REST API shall have option to create a session and change its subscription
QD-748 IPF: Support IPF files in in and notin expressions.
QD-749 OrderBookModel shall work correctly with tape files without SNAPSHOT_END flags
QD-751 dxFeed API: Introduce OrderBookModel.addListener, clean up flags, and improve JavaDoc
QD-752 dxFeed API: Add HighLimitPrice and LowLimitPrice to Profile event and record.
QD-753 Support wildcard pattern in any place of symbol filter
QD-756 dxFeed API CandleSymbol shall include documentation on its string representation
QD-757 CollectorMXBean shall print eventFlags in reportData, introduce reportSubscription, and support wildcard
QD-759 Schedule: add last modification date to default properties
QD-764 Synchronize iterations on the results of System.getProperties
** Improvement
QD-732 dxFeed webservice: Migrate to CometD 3.0.4, works with Servlet 3.0+JSR 356 containers (Jetty 9, Tomcat 8)
QD-755 IPF: Add COMPLETED state to InstrumentProfileConnection



dxFeed/QDS 3.200 released

dxFeed/QDS 3.200 has been released to public.
Available at:

Build 3.200 introduces a number of changes since the last public build 3.154, including implementation of new transaction mechanism for historical snapshots and book delivery, a lot of changes in RMI and order source support for blended full order depth order books.

Summary of changes in internal builds 3.160-3.200: 

Release Notes - QD - Version 3.200
** Change Request
QD-678: dxFeed API shall have consistent properties documentation for all event types
QD-680: dxFeed API shall use enum types in Order and TimeAndSale events
QD-687: dxFeed API: Default doubles values in event objects shall be Double.NaN
QD-699: dxFeed API: Expose Short Sale Restriction flag in Profile
QD-701: dxFeed API: OrderBookModel sort order
QD-703: QD Core: Add sequence to Order records and events
QD-708: dxFeed API: Undeprecate Promise.whenDoneAsync method
QD-710: dxFeed REST API JSON serialization must be similar to results of dxFeed JS API
QD-711: dxlib: enable sync flush for ZIP compression
** Defect Report
QD-694: Tools: Dump doesn't support filtering anymore
QD-702: NullPointerException in AgentChannel/AgentAdapter
QD-704: dxViewer: Application stops updating after any exception
QD-707: NullPointerException in OrderBookModel
QD-712: History snapshot flags do not pass through when using striping
** Improvement
QD-705: DXFeed API: Optimize QDCore usage when DXFeedSubscription.addSymbols is used with new string reference
QD-706: DXFeed API: Optimize DXFeedSubscription.addSymbols for a case of one symbol that is already in subscription set
Release Notes - QD - Version 3.199
** Change Request
QD-685: Introduce OrderSource for DirectEdge BATS One Market Depth Feed
** Defect Report
QD-671: String representation of built-in filters like "feed" should not be expanded to a list of records
QD-690: BUG FIX: Writing data with restricted event flags breaks data format.
QD-691: BUG FIX: History collector shall ignore incoming records which has no time.
QD-695: NullPointerException at AgentQueue.retrieveSnapshotForHistory
QD-696: BUG FIX: NullPointerException in FeedFileHandler.writeFile
QD-697: BUG FIX: stats overflow
Release Notes - QD - Version 3.198
** Change Request
QD-663: dxFeed API: Support subscription and publishing of indexed events from a specific source
QD-665: dxFeed API: Support getIndexedEventsPromise and getTimeSeriesPromise with snapshots
QD-666: dxFeed API: Deprecate Promise.whenDoneAsync method
QD-667: dxFeed API: Optimize Promise for a case of a single PromiseHandler
QD-668: dxFeed REST API for time series and indexed events
QD-669: dxlib: TimeFormatTest shall support parsing and formatting of full ISO6801 (like in XML)
QD-670: dxFeed API: Provide DailyCandle event with impVolatility and openInterest
Release Notes - QD - Version 3.197
** Change Request
QD-476: Support storeEverything mode in History
QD-642: dxFeed API: IndexedEventModel should not extend List, but provide getEventsList method
QD-643: QD History shall set transaction flags in examineData() method
QD-644: QD Core: Update QDCollector.remove method and support it in History
QD-645: Tools: Multiplexor shall write DESCRIBE_PROTOCOL header to its snapshot file and support flags
** Defect Report
QD-611: QD Core: Examine Data from History shall avoid holding global lock while flushing data to disk.
Release Notes - QD - Version 3.196
** Change Request
QD-320: dxFeed API: Add support for Complex Orders (e.g. ISE Spread Book / Complex Order feed)
QD-335: dxFeed API: Implement IndexedEventModel and TimeSeriesEventModel
QD-549: History snapshots and cleanups
QD-625: dxFeed API: support for snapshots and transactions on indexed events and time series events
Release Notes - QD - Version 3.169
** Change Request
QD-640: RMI: Introduce BasicSubject with user+password and use it when there is no explicitly set subject
QD-693: Schedule: add new holiday calendar for TR
** Improvement
QD-684: Use JSR-305 annotations for nullability, GuardedBy, etc
Release Notes - QD - Version 3.168
** Change Request
QD-595: IPF filter: ability to specify user/pass and escape special symbols in URL
QD-612: QD Core: Support dynamic filters on agent (data provider) side without connection reset
QD-649: dxlib: Introduce explicit Marshalled.NULL constant with the result of Marshalled.forObject(null)
QD-652: RMI: Support remote interface methods with Promise<T> as their declared return type
QD-654: Common configuration framework for application protocols and agent adapters
QD-655: QD AgentAdapter shall support channels configuration properties
QD-656: RMI: More mechanisms to fail-fast when client code is using suspend/resume improperly
QD-659: RMI: RMIServiceInterface annotation
QD-660: Tools: "-s|--stat" shall be specified for each tool when running multiple tools using "+" option
** Defect Report
QD-530: Tools: Connect and compare "-f|--fields" option does not understand property names (new field names)
QD-620: RMI: Tests are highly unreliable, time-depended, and fail randomly
QD-647: Tools: Compare does not work (IllegalArgumentException) again
QD-648: Marshalled, which supports Null Object incorrectly deserialized
QD-657: RMI: When task is cancelled before it has started execution error type is TASK_CANCEL_LISTENER_NOT_SET
QD-658: RMI: Unknown subject identifier
QD-662: dxFeed API methods shall operate silently without exception on closed endpoint
** Improvement
QD-650: Improve user-perceived latency of QD History snapshot retrieval
QD-651: RMI: Improve memory footprint of some RMI client-side and server-side data structures
QD-661: Do not use DXEndpoint.close() in sample code to make it fool-proof
Release Notes - QD - Version 3.166
** Change Request
QD-513: RMI: Support request continuations (suspend/resume) for convenient asynchronous calls that do not consume executor thread
QD-635: dxFeed API: Enable safe and convenient use of xxxModel classes in multi-threaded backend application via setExecutor
QD-637: TDP: Analyze and show true stack trace trees in thread dump parser
** Defect Report
QD-627: RMI: A race in abort of incoming request on close of RMIEndpoint that may lead to non-aborted requests on a closed connection
** Improvement
QD-629: RMI: Shall log local request processing errors of all type (with the only exception of checked application exceptions)
QD-638: Agent channels shall buffer subscription requests in chunks filled up to buffer capacity
Release Notes - QD - Version 3.165
** Defect Report
QD-615: Different monitored QD endpoints in the same JVM are in conflict when publishing their stats under the same MARS node
QD-636: MARS Connectors log with "ERROR" level
Release Notes - QD - Version 3.164
** Defect Report
QD-634: NullPointerException at AgentAdapter.prepareProtocolDescriptor
Release Notes - QD - Version 3.163
** Change Request
QD-598: dxFeed API and RMI: Default executors shall log unhandled exceptions
** Defect Report
QD-628: dxFeed API: Missing logging of uncaught errors in event listener
** Improvement
QD-630: Agent channels shall filter subscription before submitting it to QD core to increase throughput
QD-631: QD Core shall support REMOVE_SYMBOL event flag in addSubscription invocation to combine add/remove sub under one lock
QD-632: NIOConnector shall have better configuration and monitoring of reader/writer thread pools
Release Notes - QD - Version 3.162
** Defect Report
QD-621: RMI: Task that is cancelled before it had a chance to run in executor throws IllegalStateException
QD-622: ThreadDumpParser does not recognize "eliminated" locks in stack trace
QD-626: AddressSyntaxException when trying to use filter with DXEndpoint
** Improvement
QD-623: ThreadDumpParser shall print consistent percents (vs number of dumps) and sort depth by the number of occurrences (descending)
QD-624: ThreadDumpParser shall not count recursive methods multiple times
Release Notes - QD - Version 3.161
** Defect Report
QD-613: ArrayIndexOutOfBoundsException in TransformContext
QD-618: IndexOutOfBoundsException in History
QD-619: Copying data between RecordBuffers in different modes does not correctly transfer extra stuff
** Improvement
QD-606: RMI: RMIRequest shall be an abstract class that is extended by RMIRequestImpl
QD-610: Improve speed of RMI tests
Release Notes - QD - Version 3.160
** Change Request
QD-88: RMI: Explicit class-loader support
QD-250: RMI: Should not require ExecutorService implementation, should work with Executor
QD-313: RMI: Support basic forwarding of requests from one endpoint to another
QD-388: Tools: Multiplexor shall support RMI request forwarding
QD-408: QD Core: Retrieve first incoming data record on subscription separately as snapshot, prioritize its processing and network transfer
QD-506: RMI: Asynchronous server-side task API
QD-510: Schedule: update RussellTick
QD-511: RMI: Expose RMIServiceImplementation class and simplify a set of RMIServer.export methods
QD-512: Tools: Forward: RMI request forwarding tool
QD-523: RMI: add getPromise methods to RMIRequest
QD-524: RMI: Provide client-side executor for notification 
QD-533: RMI: Introduce RMIEndpoint.Side enum
QD-592: dxFeed API: Integrate news API via RMI
QD-594: QD Core: Support linking of records in RecordBuffer
QD-596: MessageConnectors shall support special characters in password and other properties
QD-599: dxlib: Provide additional utility methods in SystemProperties class for use in class-local static magic constants
QD-600: Timing: Add US holidays for 2015-2023 to Timing.
QD-603: RMI: Shall do nothing when connect is called with the same address 
QD-604: RMI: Provide public QD-level API integrate arbitrary QDCollectors with RMI
** Defect Report
QD-525: RMI: Non-public exported class does not work
QD-607: DXFeed API: User and password set via DXEndpoint methods are not sent with SSL
QD-608: RMI: Race condition can get RMIRequest stuck queued on closed connection
QD-609: QD Core: IllegalStateException when using Ticker.examineData, OnDemand in DXFeed API does not work
** Improvement
QD-79: RMI: Local toString handling in RMIInvocationHandler when toString is not explicitly declared in remote interface
QD-473: RMI: Provide separate RMIClient and RMIServer for RMIEndpoint
QD-475: RMI: Support internally-marshalled representation of RMIOperation
QD-481: RMI: Extract immutable marshalled RMIxxxMessage classes
QD-521: RMI: Make sure that the order of calls to RMIRequest.send and RMIRequest.setListener does not matter
QD-541: RMI: Should work when connect method is invoked on an attached DXEndpoint
QD-552: RMI: Proxy invocation handler shall have a local cache of operations
QD-597: RMI: Ensure that RMIRequest is fully thread-safe

dxFeed/QDS 3.154 released

Important bugfix:

[QD-593] dxFeed API: getLastEventPromise(..).cancel() does not work


dxFeed/QDS 3.153 released

dxFeed/QDS 3.153 has been released to public.
Available at:

Changes since last public release were introduced in three releases: 3.151 which is a major release focused on infrastructure, performance and onDemand historical data services integration and 3.152, 3.153 which are focused on dxFeed API extensions.

Notable changes are:
- migration to Java 7
- revised dxlib library with chunged I/O infrastructure and utilities.
- revised tape file R/W architecture giving substantial increases in performance and reliability
- direct support of onDemand historical tick data services in dxFeed API
- dxFeed API: TradeETH event which mirrors Trade behavior but contains only ETH trade information
- dxFeed API: convenience methods for bulk snapshot operations
- dxFeed API: live instrument profile service with intraday push notifications

Full list of changes:

QDS 3.153:

Change Request
* [QD-529] - dxFeed API: add to DXFeed convenient method to retrieve bulk snapshots
* [QD-565] - QD Core: Introduce ability to attach arbitrary objects to subscriptions
* [QD-590] - Tools: Instruments shall print QDS version on start

Defect Report
* [QD-587] - QD: TradeETH record shall be added to built-in QD filters feed, compfeed and regfeed.
* [QD-588] - dxFeed API: Live Instrument Profile connections report EOF with various exceptions on server side
* [QD-589] - dxFeed API: DXFeedSubscription notification on Order events happens from multiple threads

* [QD-559] - dxFeed API: Improve performance of multiple getLastEventPromise invocations

QDS 3.152:

Change Request
* [QD-551] - dxFeed API: Introduce Underlying and Series events for calculated option-related values
* [QD-578] - dxFeed API: Hide implementation-specific properties from event classes
* [QD-579] - dxFeed API: Introduce TradeETH event
* [QD-582] - Modularity: Move SSL support to qds.jar from qds-tools.jar
* [QD-583] - Tools: Multiplexor shall support “multiplexor.qd.subscribe.*” JVM properties for permanent subscription
Defect Report
* [QD-584] - dxlib: TimeFormat formatting timezone breaks (switches zone) after parsing string with a non-default timezone
* [QD-585] - dxFeed API: InstrumentProfileCollector does not process "REMOVED" instrument type properly w.r.t. to update time
* [QD-586] - RMICommonTest hangs from time to time in testRMIException

QDS 3.151 - Major release:

  • [QD-498] Migrate to Java 7
    - Check that only Java 7 APIs are used during compilation (from rt.jar + jce.jar)
    (allow,, and sun.misc.Unsafe)
    - String.isEmpty() usage (mass search and replace)
    - StandardCharsets.UTF_8 is used instead of "UTF-8" string (mass search and replace)
    - ArrayUtil uses Arrays.copyOf
  • [QD-497] dxlib: Include utilities
  • [QD-501] MARS: JMX JVMSelfMonitoring.makeThreadDumps operation
    - Use com.devexperts.mars:type=JVMSelfMonitoring bean to make period thread dumps to stdout of file.
    - Supports a specified number of dumps, with a specified period, and (optionally) scheduled to start at a
    specified time.
    - Can be configured to start at JVM start with the following system options:
    -Dcom.devexperts.mars.jvm.JVMSelfMonitoring.threadDumpsFile= (leave empty for stdout)
    -Dcom.devexperts.mars.jvm.JVMSelfMonitoring.threadDumpsPeriod= (leave empty for 1s period)
    -Dcom.devexperts.mars.jvm.JVMSelfMonitoring.threadDumpsScheduledAt= (leave empty to start immediately)
  • [QD-159] dxlib: Include*
    -* moved to "dxlib" module.
    - BufferedOutput.totalPosition() method is introduced to track the total number of written bytes, which
    is important for StreamOutput and ChunkedOutput.
    - Get rid of Compare-And-Set owner updates and well as from other broken attempts to provide concurrency.
    Chunks and ChunkLists are NOT THREAD-SAFE. Owner tracking is "fail-fast" way to detect errors. It works correctly
    in single-thread, and only does best-effort when somebody tries to work with chunks concurrently.
    - writeFromInputStream, writeFromDataInput, and writeFromByteBuffer utility methods are promoted into BufferedOutput.
    - writeFromChunk and writeAllFromChunkList are introduced in BufferedOutput.
    - There is a special implementation of writeFromChunk in ChunkedOutput that balances the need to have fewer chunks
    by copying small chunks (less that 256 by default) into a single chunk, with a need to avoid copying large chunks
    of data by appending big chunks from the same pool to the list of chunk without actually copying any bytes.
    - readToOutputStream, readToDataOutput, and readToByteBuffer utility methods are promoted into BufferedInput.
    - Default constructor for ChunkedOutput is introduced.
    - getPool() methods are introduced in Chunk and ChunkList.
    - Debug toString() are introduced in Chunk, ChunkList, ChunkPool, ChunkedInput and ChunkedOutput.
  • [QD-486] dxlib: Improve mark/reset support in io.BufferedInput
    - mark(int/long) is be deprecated, because the actual value is irrelevant for all implementations of BufferedInput.
    - mark() and unmark() methods without parameters are be introduced.
  • [QD-470] Get rid of "plugins as modules" in project structure, so that "mvn clean" correctly works
    - jspc-compiler-plugin is no longer a child module. It is a separately deployed project with a fixed version 1.0
    - dxfeed-codegen is no longer a plugin
    - Switch to maven-enforcer-plugin v1.2 to get rid of extra logging (see MENFORCER-135)
  • [QD-461] More speed improvements for reading/writing
    - FileWriter defers file opening until first block is to be flushed and does it in parallel thread, too
    - All QTP-related buffer sizes are moved into a separate QTPConstants class
    - AbstractByteArrayComposer/Parser classes are renamed to AbstractQTPComposer/Parser with the
    corresponding name updates for their descendant classes. ByteArrayComposer/Parser classes are
    - QTP parsers are now reading bytes from an arbitrary BufferedInput (which would be typically StreamInput,
    ChunkedOutput, or ByteArrayInput) that is set with setInput method. There are no more getProcessed, getBytes,
    removeBytes methods.
    - ByteArrayParser is deprecated. It still parser from ByteArrayInput for backwards compatibility and has all
    the legacy methods (getProcessed, getBytes, removeBytes, etc).
    - InputStreamParser class is introduced as a counterpart to OutputStreamComposer that provides a facade to
    parser a single file with binary QTP data (like a snapshot) that is created with OutputStreamComposer.
    - QTP composers are now writing bytes to an arbitrary BufferedOutput (which would be typically StreamOutput or
    ChunkedOutput) that is set with setOutput method. There are no more getProcessed, getBytes, removeBytes methods.
    - ByteArrayComposer is deprecated. It still writes to ByteArrayOutput for backwards compatibility and has all
    the legacy methods (getProcessed, getBytes, removeBytes).
    - Default QTP composer implementations for Binary/Tesxt/Blob formats limit only the message size in their
    "hasCapacity" method to avoid big data and subscription messages. However, ByteArrayComposer and
    ConnectionQTPComposer override hasCapacity to limit the overall number of bytes buffered while composing message
    to avoid reallocation of byte array (in case of ByteArrayComposer) and to limit the latency
    (in case of ConnectionQTPComposer).
    - MessageConsumer.processOtherMessage(...) method with byte[] data is deprecated,
    MessageConsumerAdapter.processOtherMessage(...) method with BufferedInput data is used instead
    - BufferedInput.hasAvailable() is introduced as a faster way to check if available() > 0
    - BufferedInput.hasAvailable(bytes) is introduced as a faster way to check if available() >= bytes
    - Error dumps now include offset from the beginning of file/stream.
    - BufferedInputPart.totalPosition() is changed to return position from the start of the parent input and
    the contracts of BufferedInputPart class are documented.
    - Error dumps now include bytes following parsed position (when available) for quick visual identification
    on what kind of invalid bytes are there in the file
    - Protected ByteArrayInput.readData(int) is reintroduced as a deprecated method to restore compatibility
    with a legacy code.
    - Default chunk size is 8k (for socket operation, etc)
    - FileConnector uses its own chunk pool with chunks of 64k. The size of the chunk for a file reading/writing
    can be changed with a system property:
  • [QD-464] FileAnalysis Tool: Support ".gz" files
    - FileAnalysis now reads files via FileReader, which gives it support for container (gzip), file format detection,
    and split files. However, it works only for binary formats.
  • [QD-465] FileAnalysis Tool: Improve reports
    - FileAnalysis tool print number of times each item was encountered and its average size
    - Symbols are categorized with respect to built-in filters (fx, fut, ind, spread, fut_op, bs_opt, other)
    - Percentages in reports are always displayed with respect to the complete file size
    - Distribution of data message body bytes by record category is also printed separately for each symbol category
  • [QD-462] FileConnector option to parse messages without record descriptions using a specified scheme
    - Use [schemeKnown] option to file reader to enable this behavior
    - FileAnalysis also parses additional file options.
  • [QD-463] BUG FIX: FileConnector shall understand full file paths on windows
    - "file:C:\Projects\" now works
    - It is also fixed in -Dscheme=... (full jar file path can be specified) and in logging configuration
  • [QD-485] RMI shall log request details (who and what) for server-side request-processing errors
  • [QD-487] dxFeed API: Disable WildcardSymbol subscription by default and give stronger language in JavaDoc
    - If you need to enable wildcards, you have to contract data provider for configuration and include the
    following option in "": dxfeed.wildcard.enable=true
  • [QD-508] BUG FIX: dxFeed JS API: dxfeed-webservice leaks memory when undeployed
  • [QD-509] Do not track per-record stats for anonymous agents and distributors (reduces memory consumption)
  • [QD-514] Support reading of partial/broken collectors debug dumps and symbol+record analysis
  • [QD-516] Misc improvements in debug dump reader and collector debug infrastructure
    - Support full data dumps (ticker and history storage is dumped)
    - Support time in subscription dumps (both total and agent subscription is dumped)
    - Support queue analysis (including known time, sub time, queue status)
    - Filter any data, subscription, queue or symbol reference analysis by symbol and/or record
    - Support multiple, "+" separated, commands on a single line
    - Write everything to stdout in DebugDumpReader
    - Verification checks consistency of total subscription in addition to symbol counters
  • [QD-517] FileConnector support for tcpdump-captured streams with "resyncOn" option
    - Binary TCP streams captured with tcpdump can be decoded. There is a built-in login to resync onto the
    potential beginning of the message in the stream with "resyncOn" option that takes an expected message type.
    - For example, to parse a file that is expected to contain history data, use the following command:
    qds dump file:[resyncOn=history_data,schemeKnown,speed=max]
    - Note, that scheme library/class can be provided with -Dscheme= option
    - By default, the byte stream is scanned for a message with a specified type and at most 8100 bytes long.
    - To change this threshold use -Dcom.devexperts.qd.qtp.file.BinaryFileQTPParser.maxResyncMessageLength=xxx
  • [QD-538] Add method readUTFBody to BufferedInput and IOUtil.
  • [QD-537] Improve subscription filter performance for en-cipher-ed symbols.
  • [QD-543] Tools: ConnectionHandler (connect and compare tools) stops working (looses notification) on unexpected
    runtime exceptions
    - QD Collector implementations (Ticker, Stream, and History) are changed to make sure that if the RecordSink to
    which data is retrieved throws exception, then the record that caused the exception is already marked as
    processed and the next invocation of retrieve method skips it.
  • [QD-544] dxFeed JS API Chart Demo does not work for symbols with attributes (like forex)
  • [QD-546] dxFeed API: Explain limitations of getTimeSeriesPromise in JavaDoc
  • [QD-545] Tools: Old tapes (without protocol descriptor) converted with "dump" tool give
    "NOT COMPATIBLE" warning on read
  • [QD-547] Tools: Connect shows non user-friendly "Closing Thread[...]" message before exit
    - Internal class ConnectionHandler is renamed to ConnectionProcessor to better explain what it does
  • [QD-550] FileConnector: Shall report 1 connection when reading file
  • [QD-151] dxlib: Support custom Marshallers for Marshalled objects
    - Marshaller class is introduced
    - Marshalled class instance has a reference to Marshaller
    - Marshaller.Typed is a replacement for IOUtil.bytesToObjects/objectsToBytes, the later are removed
    - Marshalled.ensureBytes() method is introduced to convert object to bytes internally without necessarily
    requiring a byte array representation (that might change in the future).
    - ByteArrayOutput's min buffer size is reduced to 64 bytes
    - ByteArrayOutput.write method is optimized for Marshaller's use-case of converting object to a byte array
    without allocation of extra temporary arrays
    - ByteArrayOutput.needSpace method is final
  • [QD-502] dxlib: Support reading/writing Marshalled objects to/from BufferedOutput/Input
    - BufferedOutput.writeMarshalled and BufferedInput.readMarshalled methods are introduced
  • [QD-520] dxlib: Marshalled object shall be thread-safe and perform conversion under synchronization
  • [QD-553] dxFeed API: Sample for application with permanent subscription retrieving last events
  • [QD-557] dxlib: TimeFormatTest failed sometimes
  • [QD-570] dxlib: Introduce for transparent gzip/zip support
    - gzip supports sync flush and can be for compression/decompression of live data streams
  • [QD-554] FileConnector/Tape: Rename "container" to "compression" and support zip
  • [QD-575] dxlib: Static helper methods in URLInputStream to openConnection and checkConnectionResponseCode
  • [QD-560] dxFeed API: Introduce Promise.awaitWithoutException convenience method
  • [QD-561] dxlib: Introduce ThreadLocalPool and convenience constructors that enable override of pool sizes via
    JVM system properties
    - Also introduced LockFreePool convenience constructor that enables override of pool size via JVM system property
    - Default ChunkPool now uses ThreadLocalPool and property names to change pool sizes have changed:
    + - the capacity of thread-local pool of chunks (3 by default)
    + - the capacity of global pool of chunks (4096 by default)
    + - the capacity of thread-local pool of chunk lists (3 by default)
    + - the capacity of global pool of chunk lists (1024 by default)
    Other properties for this pool (have not changed):
    + - the size of the chunk (8192 by default)
    + - the maximum size of pooled chunk list (1024 by default)
    - Compression/decompression and object serialization/deserialization pools can be sized with:
    + - the capacity of object serializer pool (16 by default)
    + - the capacity of object deserializer pool (16 by default)
    + - the capacity of deflater pool (16 by default)
    + - the capacity of inflater pool (16 by default)
    - RecordBuffer now uses ThreadLocalPool and property names to change pool sizes have changed:
    + - the capacity of thread-local pool of bufs (3 by default)
    + - the capacity of global pool of bufs (1024 by default)
    - QD implementation system properties to change pool sizes have changed:
    + com.devexperts.qd.impl.matrix.Distribution.poolCapacity - the capacity of distribution objects pool (2*CPUs by default)
    + com.devexperts.qd.impl.matrix.Notification.poolCapacity - the capacity of notification objects pool (2*CPUs by default)
    - QD RMI implementation system properties to change pool sizes have changed:
    + com.devexperts.rmi.Message.poolCapacity - the capacity of RMI ComposedMessage objects pool (1024 by default)
    + com.devexperts.rmi.Chunk.threadLocalCapacity - the capacity of thread-local pool of chunks (3 by default)
    + com.devexperts.rmi.Chunk.poolCapacity - the capacity of global pool of chunks (4096 by default)
    + com.devexperts.rmi.ChunkList.threadLocalCapacity - the capacity of thread-local pool of chunk lists (3 by default)
    + com.devexperts.rmi.ChunkList.poolCapacity - the capacity of global pool of chunk lists (1024 by default)
    - QDS file ChunkPool now uses ThreadLocalPool and property names to change pool sizes have changed:
    + com.devexperts.qd.qtp.file.Chunk.threadLocalCapacity - the capacity of thread-local pool of chunks (3 by default)
    + com.devexperts.qd.qtp.file.Chunk.poolCapacity - the capacity of global pool of chunks (512 by default)
    + com.devexperts.qd.qtp.file.threadLocalCapacity - the capacity of thread-local pool of chunk lists (3 by default)
    + com.devexperts.qd.qtp.file.poolCapacity - the capacity of global pool of chunk lists (128 by default)
    Other properties for this pool (have not changed):
    + com.devexperts.qd.qtp.file.chunkSize - the size of the chunk (65536 by default)
    + com.devexperts.qd.qtp.file.recyclableChunkListCapacity - the maximum size of pooled chunk list (1024 by default)
  • [QD-563] QD Core: API infrastructure to define an extensible list of parameters when creating agents and distributors
    - QDAgent.Build and QDDistributor.Builder interface are introduced.
    - The recommended way of creating an agent in collector is now collector.agentBuilder().build()
    - The recommended way of creating a distributor in collector is now collector.distributorBuilder().build()
  • [QD-566] dxlib: Update behavior of Promises.allOf to actually wait for completion of all promises
    - It is be better suited to retrieving multiple promise and should not cancel other promises when one of the
    promises completes exceptionally.
  • [QD-567] dxFeed API: Improve getLastEventPromise JavaDoc to explain retrieval of multiple events
  • [QD-154] dxFeed API: Authorization
    - DXEndpoint.user(...) and password(...) methods are introduced.
    - "dxfeed.user" and "dxfeed.password" properties are supported.
    - demo/demo becomes default user/password for all samples and all free demo services.
  • [QD-124] dxFeed API: Access to historical onDemand data
    - com.dxfeed.ondemand.OnDemandService is introduced in "dxfeed-api" module.
    - Methods to control on-demand historical tick data replay are introduced.
    - Available control methods: replay, pause, setSpeed, stopAndResume, stopAndClear.
    - Available state query methods: isReplaySupported, isReplay, isClear, getTime, getSpeed.
    - add/removePropertyChangeListener to track state changes.
    - "dxfeed-ondemand" module provides implementation on OnDemandService.
    - "dxfeed-samples" modules provides "ondemand" console sample and
    "ui_quotetable_ondemand" Swing UI sample with simple replay controls.
    - Old "replay.jar" from MDS is integrated into "dxfeed-ondemand" module:
    + com.devexperts.mds.replay package becomes com.dxfeed.ondemand.impl
    + com.devexperts.mds.replay.impl package also moves to com.dxfeed.ondemand.impl
    + com.devexperts.mds.replay.impl.event package becomes com.dxfeed.ondemand.impl.event with
    all classes from this package acquiring "MDR" prefix (Event becomes MDREvent,
    MarketMaker becomes MDRMarketMaker, etc).
    - BUG FIX: MarketDataReplay becomes compatible with fresh version of dxlib. Loading
    of stored "mdrcache" file now works properly.
    - MarketDataReplay becomes compatible with modern dxFeed data scheme. It now support both
    legacy Fundamental and TradeHistory records as well as modern Summary and TimeAndSale records.
    - MarketDataReplay uses unique temp file names when writing cache.
    - OnDemandConnector is implemented. It supports "ondemand:
    " scheme. This connector is
    used by OnDemandService implementation and must be present in the address string to make
    replay service available. This connector can be used with all qds tools like connect, dump,
    etc. Use "Help" tool to get help on "ondemand" topic to see what properties this connector supports.
    - DXEndpoint.Role.ON_DEMAND_FEED is introduced for "on-demand only" use. It does not connect to its
    until OnDemandService.replay is called and cannot be connected to an ordinary data feed at all
    (non-on-demand connectors are ignored in its connection string)
  • [QD-352] BUG FIX: dxlib: TimeFormat fails to parse ISO 8601 data with "Z" for GMT
  • [QD-356] BUG FIX: dxFeed API: DXFeed.detachSubscription does not work.
  • [QD-359] dxFeed API: Introduce DXFeed.detachSubscriptionAndClear method
  • [QD-340] dxFeed JS API: onDemand integration
    - Multiple MarketDataReplay instances with the same configuration share a single cache instance.
    - dx.feed JS object includes onDemand control methods: replay, pause, setSpeed, stopAndResume, stopAndClear.
    - dx.feed.state object provides state properties: connected, replaySupported, replay, clear, time, speed.
    - dx.feed.state.onChange can be assigned to track dx.feed.state changes.
    - JS API "Debug console" sample includes onDemand controls similar to DXFeedQuoteTableOnDemand sample.
  • [QD-568] dxFeed API: Support Instrument Profile connections with live streaming updates
    - package is introduced for clients.
    - InstrumentProfileCollector class to keep a live set of instrument profiles.
    - InstrumentProfileConnector class to connect to a live stream of instrument profile updates. It identifies
    itself with "X-Live: yes" header in the requests it makes. It can also periodically check regular files
    and regular http servers for updates with HEAD requests.
    - InstrumentProfileReader works as before, but identifies itself with "X-Live: no" header in the requests it makes.
    - package is updated for servers.
    - InstrumentProfileServer is introduced to support live instrument profiles protocol. It correctly responds
    to HTTP HEAD requests and reports last modification time. It primarily detects the required protocol (live
    vs snapshot) via "X-Live" header, but it also support "?live" request parameter for testing purposes mainly.
    - InstrumentProfileService is deprecated and is reimplemented on top of InstrumentProfileServer, so that
    a drop-in replacement provides additional features for instrument profile providers that are currently implemented
    on top of InstrumentProfileService. Live stream is not supported, but last modification time is tracked
    and supported, which gives much better overall performance both with InstrumentProfileConnector and with
    dynamic ipf filters (that also rely on HEAD requests and last modification times).
    - Instruments tool can work in a server mode when --write : option is specified.
  • [QD-576] dxFeed API: Improve javadocs style
    - Added stylesheet.css
    - Fixed javadoc problems in dxlib and in dxfeed-api modules.
    - Consistent "Provides ..." wording in package.htmls
  • [QD-573] FileConnector should continue to the next file on detection of corrupted file
    - Also fixed a bug with handling of broken binary files that was introduced by QD-457 parsing aggregation.
    Now, if a broken message in binary QTP format follows a set of correct messages of the same type,
    the parse processes messages from the correct message and ignore everything in the broken one.
    There is a unit-test to expose this case.
  • [QD-574] Tools: connect and dump tape shall flush file even when data stops coming
    - Use the following system property to adjust the maximal time data can be kept in memory before being flushed
    + com.devexperts.qd.qtp.file.maxBufferTime (default value is "1s")