custom-cryptofeed


Namecustom-cryptofeed JSON
Version 0.0.1 PyPI version JSON
download
home_page
SummaryCryptocurrency Exchange Websocket Data Feed Handler
upload_time2023-01-10 11:44:17
maintainer
docs_urlNone
authorHooman Radmehr
requires_python>=3.8
licenseXFree86
keywords cryptocurrency bitcoin btc feed handler market feed market data crypto assets trades tickers bbo funding open interest liquidation order book bid ask fmfw.io bitfinex bitflyer ascendex bitstamp bittrex blockchain.com bybit binance binance delivery binance futures binance us bitmex coinbase deribit exx ftx ftx us gate.io gemini hitbtc huobi huobi dm huobi swap kraken kraken futures okcoin okx poloniex probit upbit
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Cryptocurrency Exchange Feed Handler
[![License](https://img.shields.io/badge/license-XFree86-blue.svg)](LICENSE)
![Python](https://img.shields.io/badge/Python-3.8+-green.svg)
[![Build Status](https://travis-ci.com/bmoscon/custom_cryptofeed.svg?branch=master)](https://travis-ci.com/bmoscon/custom_cryptofeed)
[![PyPi](https://img.shields.io/badge/PyPi-custom_cryptofeed-brightgreen.svg)](https://pypi.python.org/pypi/custom_cryptofeed)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/efa4e0d6e10b41d0b51454d08f7b33b1)](https://www.codacy.com/app/bmoscon/custom_cryptofeed?utm_source=github.com&utm_medium=referral&utm_content=bmoscon/custom_cryptofeed&utm_campaign=Badge_Grade)

Handles multiple cryptocurrency exchange data feeds and returns normalized and standardized results to client registered callbacks for events like trades, book updates, ticker updates, etc. Utilizes websockets when possible, but can also poll data via REST endpoints if a websocket is not provided.

## Supported exchanges

* [AscendEX](https://ascendex.com/)
* [Bequant](https://bequant.io/)
* [Bitfinex](https://bitfinex.com)
* [bitFlyer](https://bitflyer.com/)
* [Bithumb](https://en.bithumb.com/)
* [Bitstamp](https://www.bitstamp.net/)
* [Bittrex](https://global.bittrex.com/)
* [Blockchain.com](https://www.blockchain.com/)
* [Bybit](https://www.bybit.com/)
* [Binance](https://www.binance.com/en)
* [Binance Delivery](https://binance-docs.github.io/apidocs/delivery/en/)
* [Binance Futures](https://www.binance.com/en/futures)
* [Binance US](https://www.binance.us/en)
* [Bit.com](https://www.bit.com)
* [Bitget](https://www.bitget.com/)
* [BitMEX](https://www.bitmex.com/)
* [Coinbase](https://www.coinbase.com/)
* [Crypto.com](https://www.crypto.com)
* [Delta](https://www.delta.exchange/)
* [Deribit](https://www.deribit.com/)
* [dYdX](https://dydx.exchange/)
* [FMFW.io](https://www.fmfw.io/)
* [EXX](https://www.exx.com/)
* [FTX](https://ftx.com/)
* [FTX US](https://ftx.us/)
* [Gate.io](https://www.gate.io/)
* [Gemini](https://gemini.com/)
* [HitBTC](https://hitbtc.com/)
* [Huobi](https://www.hbg.com/)
* [Huobi DM](https://www.huobi.com/en-us/markets/hb_dm/)
* Huobi Swap (Coin-M and USDT-M)
* [Independent Reserve](https://www.independentreserve.com/) 
* [Kraken](https://www.kraken.com/)
* [Kraken Futures](https://futures.kraken.com/)
* [KuCoin](https://www.kucoin.com/)
* [OKCoin](http://okcoin.com/)
* [OKX](https://www.okx.com/)
* [Phemex](https://phemex.com/)
* [Poloniex](https://www.poloniex.com/)
* [ProBit](https://www.probit.com/)
* [Upbit](https://sg.upbit.com/home)


## Basic Usage

Create a FeedHandler object and add subscriptions. For the various data channels that an exchange supports, you can supply callbacks for data events, or use provided backends (described below) to handle the data for you. Start the feed handler and you're done!

```python
from custom_cryptofeed import FeedHandler
# not all imports shown for clarity

fh = FeedHandler()

# ticker, trade, and book are user defined functions that
# will be called when ticker, trade and book updates are received
ticker_cb = {TICKER: ticker}
trade_cb = {TRADES: trade}
gemini_cb = {TRADES: trade, L2_BOOK: book}


fh.add_feed(Coinbase(symbols=['BTC-USD'], channels=[TICKER], callbacks=ticker_cb))
fh.add_feed(Bitfinex(symbols=['BTC-USD'], channels=[TICKER], callbacks=ticker_cb))
fh.add_feed(Poloniex(symbols=['BTC-USDT'], channels=[TRADES], callbacks=trade_cb))
fh.add_feed(Gemini(symbols=['BTC-USD', 'ETH-USD'], channels=[TRADES, L2_BOOK], callbacks=gemini_cb))

fh.run()
```

Please see the [examples](https://github.com/bmoscon/custom_cryptofeed/tree/master/examples) for more code samples and the [documentation](https://github.com/bmoscon/custom_cryptofeed/blob/master/docs/README.md) for more information about the library usage.


For an example of a containerized application using custom_cryptofeed to store data to a backend, please see [Cryptostore](https://github.com/bmoscon/cryptostore).


## National Best Bid/Offer (NBBO)

custom_cryptofeed also provides a synthetic [NBBO](examples/demo_nbbo.py) (National Best Bid/Offer) feed that aggregates the best bids and asks from the user specified feeds.

```python
from custom_cryptofeed import FeedHandler
from custom_cryptofeed.exchanges import Coinbase, Gemini, Kraken


def nbbo_update(symbol, bid, bid_size, ask, ask_size, bid_feed, ask_feed):
    print(f'Pair: {symbol} Bid Price: {bid:.2f} Bid Size: {bid_size:.6f} Bid Feed: {bid_feed} Ask Price: {ask:.2f} Ask Size: {ask_size:.6f} Ask Feed: {ask_feed}')


def main():
    f = FeedHandler()
    f.add_nbbo([Coinbase, Kraken, Gemini], ['BTC-USD'], nbbo_update)
    f.run()
```

## Supported Channels

custom_cryptofeed supports the following channels from exchanges:

### Market Data Channels (Public)

* L1_BOOK - Top of book
* L2_BOOK - Price aggregated sizes. Some exchanges provide the entire depth, some provide a subset.
* L3_BOOK - Price aggregated orders. Like the L2 book, some exchanges may only provide partial depth.
* TRADES - Note this reports the taker's side, even for exchanges that report the maker side.
* TICKER
* FUNDING
* OPEN_INTEREST - Open interest data.
* LIQUIDATIONS
* INDEX
* CANDLES - Candlestick / K-Line data.

### Authenticated Data Channels

* ORDER_INFO - Order status updates
* TRANSACTIONS - Real-time updates on account deposits and withdrawals
* BALANCES - Updates on wallet funds
* FILLS - User's executed trades


## Backends

custom_cryptofeed supports `backend` callbacks that will write directly to storage or other interfaces.

Supported Backends:
* Redis (Streams and Sorted Sets)
* [Arctic](https://github.com/manahl/arctic)
* ZeroMQ
* UDP Sockets
* TCP Sockets
* Unix Domain Sockets
* [InfluxDB v2](https://github.com/influxdata/influxdb)
* MongoDB
* Kafka
* RabbitMQ
* PostgreSQL
* GCP Pub/Sub
* [QuestDB](https://questdb.io/)


## Installation

**Note:** custom_cryptofeed requires Python 3.8+

custom_cryptofeed can be installed from PyPi. (It's recommended that you install in a virtual environment of your choosing).

    pip install custom_cryptofeed

custom_cryptofeed has optional dependencies, depending on the backends used. You can install them individually, or all at once. To install custom_cryptofeed along with all its optional dependencies in one bundle:

    pip install custom_cryptofeed[all]

If you wish to clone the repository and install from source, run this command from the root of the cloned repository.

    python setup.py install

Alternatively, you can install in 'edit' mode (also called development mode):

    python setup.py develop

See more discussion of package installation in [INSTALL.md](https://github.com/bmoscon/custom_cryptofeed/blob/master/INSTALL.md).



## Rest API

custom_cryptofeed supports some REST interfaces for retrieving real-time and historical data, as well as order placement and account management. These are integrated into the exchange classes directly. You can view the supported methods by calling the `info()` method on any exchange. The methods for interacting with the exchange RET endpoints exist in two flavors, the synchronous methods (suffixed with `_sync`) as well as the asynchronous which can be utilized with asyncio. For more information see the [documentation](docs/rest.md).


## Future Work

There are a lot of planned features, new exchanges, etc planned! If you'd like to discuss ongoing development, please join the [slack](https://join.slack.com/t/custom_cryptofeed-dev/shared_invite/enQtNjY4ODIwODA1MzQ3LTIzMzY3Y2YxMGVhNmQ4YzFhYTc3ODU1MjQ5MDdmY2QyZjdhMGU5ZDFhZDlmMmYzOTUzOTdkYTZiOGUwNGIzYTk) or open a thread in the [discussions](https://github.com/bmoscon/custom_cryptofeed/discussions) in GitHub.

## Contributing

Issues and PRs are welcomed!

custom_cryptofeed wouldn't be possible without the help of many [contributors](AUTHORS.md)! I owe them and all other contributors my thanks!

## Donations / Support

Support and donations are appreciated but not required. You can donate via [GitHub Sponsors](https://github.com/sponsors/bmoscon), or via the addresses below:

* Bitcoin: bc1qm0kxz8hqacaglku5fjhfe9a5hjnuyfwk02lsyr
* Ethereum: 0x690709FEe13eEce9E7852089BB2D53Ae5D073154


----

# custom_cryptofeed installation
 
The custom_cryptofeed library is intended for use by Python developers.

Several ways to get/use custom_cryptofeed:

* Pip - `pip install custom_cryptofeed`
* Git - `git clone https://github.com/bmoscon/custom_cryptofeed`
* Zipped source code - Download [github.com/bmoscon/custom_cryptofeed/archive/master.zip](https://github.com/bmoscon/custom_cryptofeed/archive/master.zip)

## Installation with Pip

The safe way to install and upgrade the custom_cryptofeed library:

    pip install --user --upgrade custom_cryptofeed

custom_cryptofeed supports many backends as Redis, ZeroMQ, RabbitMQ, MongoDB, PostgreSQL, Google Cloud and many others.
custom_cryptofeed is usually used with a subset of the available backends, and installing the dependencies of all backends is not required. 
Thus, to minimize the number of dependencies, the backend dependencies are optional, but easy to install.

See the file [`setup.py`](https://github.com/bmoscon/custom_cryptofeed/blob/master/setup.py#L60)
for the exhaustive list of these *extra* dependencies.

* Install all optional dependencies  
  To install custom_cryptofeed along with all optional dependencies in one bundle:

        pip install --user --upgrade custom_cryptofeed[all]

* Arctic backend  
  To install custom_cryptofeed along with [Arctic](https://github.com/man-group/arctic/) in one bundle:

         pip install --user --upgrade custom_cryptofeed[arctic]

* Google Cloud Pub / Sub backend

         pip install --user --upgrade custom_cryptofeed[gcp_pubsub]

* Kafka backend

         pip install --user --upgrade custom_cryptofeed[kafka]

* MongoDB backend

         pip install --user --upgrade custom_cryptofeed[mongo]

* PostgreSQL backend

         pip install --user --upgrade custom_cryptofeed[postgres]

* RabbitMQ backend

         pip install --user --upgrade custom_cryptofeed[rabbit]

* Redis backend

          pip install --user --upgrade custom_cryptofeed[redis]

* ZeroMQ backend

         pip install --user --upgrade custom_cryptofeed[zmq]

If you have a problem with the installation/hacking of custom_cryptofeed, you are welcome to:
* open a new issue: https://github.com/bmoscon/custom_cryptofeed/issues/
* join us on Slack: [custom_cryptofeed-dev.slack.com](https://join.slack.com/t/custom_cryptofeed-dev/shared_invite/enQtNjY4ODIwODA1MzQ3LTIzMzY3Y2YxMGVhNmQ4YzFhYTc3ODU1MjQ5MDdmY2QyZjdhMGU5ZDFhZDlmMmYzOTUzOTdkYTZiOGUwNGIzYTk)
* or on GitHub Discussion: https://github.com/bmoscon/custom_cryptofeed/discussions

Your Pull Requests are also welcome, even for minor changes.


----

## Changelog

### 2.3.1 (2022-10-31)
 * Bugfix: timestamp not reset correctly on reconnect
 * Bugfix: Arctic backend failing to write Trades when trade type was not present in data
 * Bugfix: Timestamp sometimes not present in Coinbase ticker updates
 * Bugfix: Phemex, symbols parsing
 * Bugfix: OKx - handle empty liquidations correctly

### 2.3.0 (2022-09-04)
 * Bugfix: added list and str support to websocket_endpoint creation (allows more than 200 symbols on Binance)
 * Feature: Add support for OKx streaming candles
 * Bugfix: Binance Futures, double slash in open interest url
 * Update: Set 'next_funding_rate' to None in Bybit if not present
 * Feature: Added authentication to private channels of Bittrex. ORDER_INFO and BALANCES implemented.
 * Bugfix: Bitget, bug in subscribe method
 * Update: Poloniex API update

### 2.2.3 (2022-05-29)
 * Feature: Authenticated channel support for Bitget
 * New Exchange: FTX TR
 * New Exchange: AscendEX Futures
 * Update: AscendEX, add sandbox endpoint. Add channel filter.
 * Update: Binance, add sandbox endpoint.
 * Update: Binance Delivery, add sandbox endpoint.
 * Update: Bitmex, add sandbox endpoint.
 * Update: KrakenFutures, add sandbox endpoint.
 * Bugfix: Bybit, the quantity for order_info stream was incorrect.
 * Bugfix: Bitmex, timestamp was not returned in book.
 * Bugfix: KrakenFutures, timestamp was not returned in book.
 * Bugfix: Phemex, websocket subscription error.
 * Bugfix: OKX, liquidations subscription was never called.
 * Update: OKX, use publicly available channel for book updates.
 * Bugfix: Fix race condition when resetting feeds with multiple connections
 * Update: Send Phemex subscriptions one symbol at a time
 * Bugfix: BitDotCom, the subscription message for perpetuals was incorrect
 * Bugfix: Allow empty subscriptions (channel with no symbols) for FTX
 * Update: Add SOL and USDC to Deribit symbol mapping

### 2.2.2 (2022-04-17)
 * Bugfix: OKX filled amount being reported incorrectly in OrderInfo
 * Bugfix: Tweak QuestDB coulmn types and layout
 * Bugfix: Fix Bybit Private Channel connections / subscriptions
 * Bugfix: Return client order id in OrderInfo object returned by Coinbase
 * Feature: Add Order type
 * Feature: Add support for closed candles only in Bybit
 * Update: Kraken Futures new instrument type: Perpetual Linear Multi-collateral Futures
 * New Exchange: Bitget
 * New Exchange: Independent Reserve
 * Feature: Add perpetuals to Bitget
 * Update: Add indicator in symbol info if instrument is a qunto
 * Feature: Configuration option to allow invalid symbols
 * Bugfix: use supplied timestamp from snapshot in Binance
 * Feature: Optional multiprocessing support for backends
 * Update: Remove unsupported backends
 * Feature: Support checksum validation on Bitget orderbooks

### 2.2.1 (2022-02-27)
 * Feature: Support for order info stream on BitMEX
 * Bugfix: Datetime/Timestamp conversion fixes
 * Feature: Add support for Huobi Linear Swaps
 * Update: Change Coinbase REST calls to use Ticker and Trade data types
 * Bugfix: Instrument and channel filtering sometimes matched incorrectly when creating connection specific subscriptions
 * Bugfix: retry kwargs were not correctly passed through to the async HTTP connection handler in Coinbase REST methods
 * Update: Revamp Coinbase authenticated REST endpoints; change to use the Cython data types
 * Feature: Add from_dict static method in Cython types to support creation of object from dict (for serialization/deserialization)
 * Feature: New QuestDB backend
 * Update: Exchange name change OKEx -> OKX
 * Bugfix: OKX candle REST code was setting values incorrectly
 * Update: OKX now uses v5 for all connections (REST and WS). Update endpoints to new exchange name: okex.com -> okx.com
 
### 2.2.0 (2021-02-16)
 * Feature: New exchange: Bit.com
 * Feature: Rework how exchanges that have multiple websocket endpoints are managed and configured.
 * Bugfix: Use UTC for datetime conversions in REST api
 * Bugfix: Funding rate of 0 was being converted to None when to_dict was called
 * Feature: Add OKEx REST API and implement candle function
 * Feature: Added trading endpoints to Bitfinex REST mixin
 * Bugfix: Change to Okex to allow futures and options subscriptions
 * Update: Deribit ticker, trades, and orderbook channels now require authentication
 * Bugfix: Fix candle backend for InfluxDB
 * Bugfix: OKEx REST candle fix
 * Feature: Added ability to use your own Postgres table layouts
 * Bugfix: Binance connections that do not require websocket were failing on connect
 * Feature: Write native datetimes to Mongo
 * Feature: Mongo backend now supports bulk writes + queuing of messages

### 2.1.2 (2021-12-23)
 * Feature: Tweak Postgres backend to not store duplicated data for orderbooks.
 * Feature: Provide sample book schema for Postgres.
 * Feature: Add subaccount info to OrderInfo and Fills data types.
 * Bugfix: Fix issue in orderbook cross check.
 * Bugfix: Simplify dYdX orderbook logic.
 * Bugfix: Raise error if client tries to subscribe to KuCoin book data without an API key.
 * Feature: Add ByBit sandbox endpoints.
 * Bugfix: Fix calculation in OrderInfo on Binance.
 * Feature: Support list of bootstrap servers for Kafka backend.
 * Feature: Add OrderInfo and Fills zmq callbacks 

### 2.1.1 (2021-11-29)
 * Bugfix: Position data type missing side field.
 * Bugfix: Position data type had unused field 'id'.
 * Bugfix: Fix Bybit OrderInfo msg/data dict.
 * Feature: Add support for sandbox/testnet on BinanceFutures.
 * Feature: New exchange - Crypto.com.
 * Bugfix: Fix MongoDB backend.
 * Update: reduce code duplication for candle interval normalization.
 * Update: Simplify code around address specification and selection when using sandbox/testnet.
 * Bugfix: Phemex rounding errors, incorrect volume.
 * Feature: Add sandbox/testnet endpoint for Phemex.
 * Feature: New exchange - Delta.
 * Update: Tweak tests to remove deprecation warnings.
 * Bugfix: Fix token usage in Binance.
 * Update: Change Binance trades to use trade timestamp instead of event timestamp.

### 2.1.0 (2021-11-14)
 * Bugfix: Update binance user data streams to use cdef types.
 * Feature: Add none_to kwarg to to_dict method of data type objects. Allows replacmen of Nones with specified value.
 * Bugfix: Some redis backends were trying to write Nones to storage and failing.
 * Update: Renamed as_type kwarg on to_dict to numeric_type.
 * Bugfix: Some dYdX symbols were incorrectly classified as spot.
 * Update: Drop support for Python 3.7.
 * Bugfix: Orderbooks need to be truncated to the correct depth when max depth is smaller than the maximum on Kraken.
 * Update: Coinbase having similar issues other exchanges with websocket compliance. Updated to fix connection
 * Update: Backends will fill in missing timestamps with receipt_timestamp
 * Update: Okex auth channel Orders added

### 2.0.3 (2021-10-26)
 * Bugfix: Use timestamp_e6 for data derived from Bybit's instrument_info data feed.
 * Bugfix: Update postgres examples and schema. Fix postgres backend for all dtypes.
 * Bugfix: Kucoin has a limit of 100 symbols per subscription message and 300 per connection. These limits are now respected.
 * Bugfix: Error messages were not handled correctly on Kucoin, causing a crash.
 * Bugfix: FTX websocket endpoint update.
 * Bugfix: Fix the address used for authenticated Binance streams.
 * Bugfix: Handle cases where Bitmex book data is empty.

### 2.0.2 (2021-10-12)
 * Feature: random backoff when 429s are hit
 * Bugfix: Add rate limiting delay to snapshot querying on Binance
 * Update: Write deltas then snapshot when book interval is hit on Book Backends
 * Feature: Bybit liquidation support
 * Feature: Add support for Binance websocket orders stream
 * Bugfix: typo in influxDB backend
 * Bugfix: typo in optional type checking in cython module
 * Feature: compile cython code (and toggle optional assertions) correctly on windows
 * Feature: Allow logging disable via config option
 * Feature: Remove add_feed_running() method, add_feed can be used to add exchange feeds to running feedhandler.
 * Bugfix: Allow empty feedhandler to be started
 * Bugfix: Funding missing type conversion for to_dict method.
 * Bugfix: RedisStream candles boolean not being converted properly
 * Bugfix: FTX order info not handling price of None correctly on reduce only updates
 * Bugfix: Fills using incorrect order id
 * Feature: Periodically refresh order books in Binance to reduce the likelihood of order levels becoming stale
 * Update: Bitcoin.com exchange migrated to FMFW.io and API was updated
 * Revert: Temporarily revert the concurrent http changes in Binance as well as the snapshot refresh code while bugs are resolved
 * Bugfix: Fix Throttle callback, added an example to illustrate usage
 * Bugfix: BinanceFutures and BinanceDelivery not handling rates and funding times of 0/null for futures contracts
 * Bugfix: Open Interest in Bitmex not being converted to decimal
 * Update: Renamed field quantity in Liquidation data type

### 2.0.1 (2021-09-22)
 * Bugfix: BinanceDelivery and BinanceFutures WS compression
 * Bugfix: Upbit REST candles do not work when start/end are not specified
 * Bugfix: New version of websockets enforces RFC rules and non-compliant exchanges will fail to connect.
 * Feature: Add support for candles on Bitfinex REST
 * Bugfix: Book callback with cross_check option enabled causes an error
 * Bugfix: Kraken Candle timestamps strings instead of floats
 * Bugfix: Coinbase book \_change handler passing wrong book type
 * Bugfix: dYdX orderbooks contained prices levels of size 0
 * Bugfix: FTX trade id for liquidations not correctly being converted to str
 * Bugfix: L3 OrderBooks not being correctly converted when as_type was used with to_dict
 * Feature: kwarg snapshots_only when true allow storage of full book updates only (no deltas)
 * Bugfix: initial snapshot of Binance books did not have delta set to None
 * Bugfix: RedisBook callback accessed key delta when it did not exist, causing crash
 * Feature: Candle support for Bybit
 * Bugfix: Fix L3 Book Deltas when use as_type kwarg in to_dict
 * Bugfix: Use V3 endpoint for book snapshots in Binance and BinanceUS
 * Bugfix: Coinbase level 3 book potential memory leak
 * Feature: Perpetual support for Bitfinex
 * Feature: Type checking in Cython code (disabled by default, enable in setup.py)
 * Bugfix: Fix type issues in OKEx and Binance Futures - some numeric data being returned as string
 * Bugfix: Fix symbol normalization in FTX and Huoni Swap
 * Feature: Redis backend to choose sleep interval for writer
 * Feature: snapshot_interval added to book backends

### 2.0.0 (2021-09-11)
 * Feature: Binance REST support
 * Feature: Add next funding rate data to FTX funding data
 * Bugfix: Kraken info dict returning empty
 * Breaking Change: Rename REST endpoints. Sync endpoints end with `_sync`, non-sync endpoints are now async. Clean up and remove old/unused test cases
 * Feature: Remove pandas dependency
 * Breaking Change: Rewrite all rest endpoints to support sync and async versions of the endpoint.
 * Feature: Add dYdX REST endpoints
 * Feature: Add Binance authentication for User Data Streams
 * Feature: Add support for Binance trading REST API
 * Bugfix: Fix typo by renaming rest_options to order_options
 * Bugfix: Use correct max depth for Binance (and its child classes).
 * Bugfix: Fix test data generation, fix Binance test cases, clean up and fix issues in various code samples in example/
 * Feature: BinanceUS rest mixin
 * Update: add feed/exchange cleanup to integration tests
 * Bugfix: Last message received not being correctly set on websocket connection, causing multiple restarts when an exchange encounters a timeout
 * Bugfix: Binance Futures not correctly formatting the side on liquidations
 * Bugfix: Interval from candle_sync was not being passed correctly to async candle interface in REST mixins.
 * Update: Cleanup Coinbase candle REST interface, use standard string interval
 * Feature: Add balances to Bybit
 * Bugfix: Kraken valid depths incorrect
 * Feature: Add support for gracefully stopping Redis backends and writing queued message
 * Bugfix: OKEx incorrect creating multiple connections
 * Breaking Change: Data types for majority of callbacks have changed to Objects (previously was a dict)
 * Update: Remove redundant example code
 * Breaking Change: OrderInfo now an object
 * Bugfix: NBBO updated to use new orderbook
 * Breaking Change: Balance callback changed to return object
 * Breaking Change: L1_Book callback returns object
 * Update: Subscribe to 200 levels per side for Bybit
 * Feature: Candles support added to Binance REST
 * Breaking Change: Candle REST methods return Candle object
 * Feature: data objects now hashable and comparable (equal only)
 * Breaking Changes: USER_FILLS renamed FILLS, FILLS not use data objects for callbacks
 * Feature: Add support for candles in FTX REST
 * Feature: Add support for candles in Bitstamp REST
 * Feature: Add support for candles in Upbit REST

### 1.9.3 (2021-08-05)
  * Feature: Add support for private channel USER_DATA, public channel LAST_PRICE on Phemex
  * Feature: Add support for private channels FILLS, ORDER_INFO, BALANCES on Deribit
  * Feature: Add support for public channel L1_BOOK on Deribit
  * Feature: Add support for private channels FILLS and ORDER_INFO on Bybit
  * Bugfix: Fix demo.py
  * Feature: Allow user to specify a delay when starting an exchange connection (useful for avoiding 429s when creating a large number of feeds)
  * Update: Support Okex v5
  * Breaking Change: Update symbol standardization. Now uses standard names across all exchanges for futures, swaps, and options.
  * Feature: Allow user to specify depth_interval for Binance L2_BOOK.
  * Bugfix: Use order id in FTX fill channel callback
  * Feature: Add ability to use the Symbols class to identify all exchanges that support a given instrument
  * Feature: Allow user to specify 'http_proxy' in feeds.
  * Feature: Add support for 'concurrent_http' requests in Binance feeds.
  * Bugfix: funding and open interest data not being collected
  * Breaking Change: Rework how REST endpoints are integrated into exchange classes. Rest module has been removed. REST methods are part of exchanges classes.
  * Feature: Add support for funding data in Bybit
  * Update: Correct and update sections of the documentation.
  * Feature: Add support for open_interest_interval in Binance Futures.
  * Bugfix: Fix subaccounts impl in FTX

### 1.9.2 (2021-07-14)
  * Bugfix: add config kwarg to add_nbbo method
  * Update: changed KuCoin authentication to match new signing method
  * Bugfix: #518 - fix aggregator example code
  * Update: Support Bittrex V3
  * Feature: Add support for candles on Bittrex
  * Feature: Add support to authenticate private channels (e.g. FILLS) on FTX
  * Feature: Support private rest api commands for FTX
  * Update: Improve impl for FTX rest api
  * Bugfix: #528 - Fix standardisation of Deribit's symbols when passed to callbacks
  * Feature: Add support for private "orders" channel on FTX
  * Feature: Add support for subaccounts in feeds and REST API for FTX
  * Bugfix: Fix FTX rest api return value
  * Exchange: New exchange - dYdX
  * Bugfix: Issue #531 - Gemini symbol generation included closed symbols
  * Feature: Allow user to override the score used in Redis ZSETs
  * Update: Get information about size increment from FTX symbol data
  * Bugfix: Fix trades write for Arctic backend
  * Feature: new exchange: Bequant. Supports ticker, L2 book, trades, candles, plus authenticated channels: order info, account transactions and account balances
  * Update: BitMax renamed AscendEX
  * Bugfix: Feed level timeout and timeout interval not being set properly
  * Exchange: Phemex exchange support
  * Features: added support for candles, order info, account transactions and account balances to HitBTC & Bitcoin.com, plus authentication where required to access these channels
  * Update: previous HitBTC & Bitcoin.com websocket endpoints deprecated. Now using separate Market, Trading and Account endpoints
  * Bugfix: max_depth on Binance and Kraken was not properly used when querying the snapshot
  * Bugfix: Handle 429s in HTTP connections (by waiting and retrying).

### 1.9.1 (2021-06-10)
  * Feature: add Bithumb exchange - l2 book and trades
  * Bugfix: Fix inverted Poloniex symbols
  * Feature: simplify and cleanup parts of Poloniex
  * Feature: add `symbols` class method to all exchanges to get list of supported trading pairs
  * Feature: Clean up internal class attributes in Feed class
  * Feature: Add graceful stop and shutdown methods for Feeds
  * Feature: Add ledger endpoint to Kraken Rest module, add ability to optionally filter by symbol, or all symbols, for historical trades
  * Docs: Update documentation regarding adding a new exchange to custom_cryptofeed
  * Bugfix: Reset delay after connection is successful
  * Feature: yapic.json parses strings to datetimes automatically, no longer need to rely on Pandas for datetime parsing
  * Bugfix: #491 - dictionary resized during iteration in ByBit
  * Bugfix: #494 - added status argument to liquidations callback
  * Bugfix: #399 - book delta issue with Kucoin and Gateio
  * Feature: Binance Delivery candle support
  * Feature: Binance US candle support
  * Feature: Kraken Candle support
  * Update: Remove deprecated channel mapping from Kraken, use channel name from message instead
  * Bugfix: change Kraken Futures to use the standard symbol to be consistent with the rest of the library
  * Update: use Kucoin v3 endpoint for orderbook snapshot (v2 deprecated).
  * Update: Poloniex ticker message format update

### 1.9.0 (2021-04-25)
  * Bugfix: Fix Binance subscriptions when subscribing to more than one candle
  * Feature: Remove support for Influx versions prior to 2.0
  * Feature: Add stop method to HTTP Backends to gracefully drain queue and write pending data on shutdown
  * Feature: Revamp InfluxDB code. Drop support for storing floating point as str, store book data as json blob
  * Bugfix: Remove unused get_instrument calls in Deribit and Kraken Futures
  * Feature: Revamp symbol generation and exchange info for Deribit and Kraken Futures
  * Bugfix: Fix issue using AsyncFile callback to store raw data
  * Testing: Add exchange tests for Deribit and Binance
  * Bugfix: Fix symbol issue in Bitmex when initializing the orderbook
  * Bugfix: Fix various issues with FTX, OKCOIN/OKX and Huobi symbol generation
  * Testing: Overhaul exchange tests, all exchanges are now tested with real data. Fixed various bugs as a result of this testing. Revamped AsyncFileCallback.
             Added new tool to generate test data for testing.
  * Bugfix: Improve connection cleanup in AsyncConnection object
  * Feature: Add support for user defined exception handling in FeedHandler
  * Bugfix: Fix redis backends that can't handle None
  * Bugfix: Connection exceptions being ignored in Feedhandler
  * Bugfix: Binance address generation correction
  * Bugfix: OKX symbol generation incorrect + validate symbols used for channels that dont support all types
  * Breaking Change: Large rewrite of Feedhandler, Connection, and Feed. Many timeout related options moved from feedhandler to Feed. Symbol specific code
                     moved to exchange class. Rewrite of raw data collection.
  * Feature: Candle support for Huobi
  * Feature: Allow user to specify Postgres port in Postgres backends
  * Bugfix: Report base volume, not quote volume in Huobi candles
  * Feature: Support for the KuCoin exchange

### 1.8.2 (2020-04-02)
  * Update to use alpha release of aioredis 2.0. Allows building of wheels again

### 1.8.1 (2020-04-01)
  * Bugfix: Add manifest file for source dist

### 1.8.0 (2020-04-01)
  * Bugfix: Init uvloop earlier so backends that use loop will not fail
  * Docs: Remove FAQ, added performance doc section
  * Bugfix: #404 - Use AsyncConnection object for Binance OI
  * Feature: Rework how raw data is stored (when enabled). REST data can now be captured
  * Feature: New feedhandler method, `add_feed_running` allows user to add feed to running instance of a feedhandler
  * Feature: create_db defaults to False on InfluxDB backends
  * Feature: Normalize Bitmex Symbols
  * Update: Remove extraneous methods in feed objects used to query symbol information
  * Feature: Use realtime ticker for Binance
  * Bugfix: Bitmex symbols not being normalized correctly
  * Bugfix: Fix GCP PubSub backend
  * Bugfix: Fix historical data REST api for Bitmex
  * Feature: Use separate tasks (fed by async queue) for backend writing. Redis now uses this method
  * Bugfix: Allow user specified max depths on Kraken
  * Feature: Add backend queue support to ZMQ backend
  * Feature: Add backend queue support to Socket backends
  * Feature: Add VictoriaMetrics support via backend
  * Feature: Add backend queue support to influx and elastic
  * Feature: Candle support
  * Bugfix: Ignore untradeable symbols in Binance symbol generation
  * Feature: Add backend support for queues in Postgres. Rework postgres backend and supply example SQL file to create tables for demo
  * Bugfix: Fix ByBit symbol generation
  * Feature: Authenticated channel support for OKX/OKCOIN
  * Update: Poloniex changed signaure of ticker data
  * Feature: Candles for Binance Futures
  * Feature: Premium Index Candle support for Binance Futures
  * Feature: Update Gateio to use new v4 websocket api. Adds support for candles
  * Bugfix: Fix open interest on OKEx
  * Bugfix: OKEx was duplicating subscriptions
  * Breaking Change: Core callbacks (trade, candle, books, ticker, open interest, funding, liquidations, index) now use custom objects

### 1.7.0 (2021-02-15)
  * Feature: Use UVLoop if installed (not available on windows)
  * Bugfix: Allow exchanges to customize their retry delays on error
  * Feature: New demo code showing user loop management
  * Feature: Handle more signals for graceful shutdown
  * Bugfix: BinanceFutures message format change
  * Feature: Missing sequence number on Coinbase will not reset all data streams, just the affected pair
  * Feature: Use timestamp from exchange for L2 book data from Coinbase
  * Bugfix: Blockchain exchange had incorrect timestamps, and incorrect log lines
  * Bugfix: Wrong datatype in BackendFuturesIndexCallback
  * Bugfix: Fix bad postgres callback for open_interest and futures_index
  * Feature: Signal handler installation now optional, can be done separately. This will allow the feedhandler to be run from child threads/loops
  * Bugfix: Fix binance delivery book ticker (message format change)
  * Breaking change: Feed object `config` renamed `subscription`
  * Feature: Configuration passed from feedhandler to exchanges
  * Breaking change: Most use of `pair` and `pairs` changed to `symbol` and `symbols` to be more consistent with actual usage. pairs.py renamed to symbols.py
  * Feature: Allow configuring the API KEY ID from Config or from environment variable
  * Bugfix: Collisions in normalized CoinGecko symbols (this adds about 700 new symbols)
  * Feature: Add candles function to coinbase
  * Feature: Explain when custom_cryptofeed crashes during pairs retrieval
  * Bugfix: BINANCE_DELIVERY Ticker use msg_type='bookTicker' as for the other BINANCE markets
  * Feature: Support Bitmex authentication using personal API key and secret
  * Feature: Print the origin of the configuration (filename, dict) for better developer experience
  * Bugfix: Add guard against non-supported asyncio add_signal_handler() on windows platforms
  * Feature: Simplify source code by standardization iterations over channels and symbols
  * Bugfix: Remove remaining character "*" in book_test.py
  * Bugfix: Fix return type of the function book_flatten()
  * Feature: Shutdown multiple backends asynchronously, and close the event loop properly
  * Bugfix: Repair the Bitfinex FUNDING
  * Feature: Speedup the handling of Bitfinex messages by reducing intermediate mappings
  * Feature: Support OKEx options
  * Bugfix: Cancel the pending tasks to gracefully/properly close the ASyncIO loop
  * Feature: Support for authenticated websocket data channels

### 1.6.2 (2020-12-25)
  * Feature: Support for Coingecko aggregated data per coin, to be used with a new data channel 'profile'
  * Feature: Support for Whale Alert on-chain transaction data per coin, to be used with a new data channel 'transactions'
  * Bugfix: Reset delay and retry for rest feed
  * Feature: Add GCP Pub/Sub backend
  * Bugfix: Fix aggregated callbacks (Renko and OHLCV) when used with exchanges that support order types
  * Bugfix: Fix broken example/demo code
  * Feature: New data channel - `futures_index` - demonstrated in ByBit
  * Feature: Add stop callback when exiting loop, add stop method placeholder for base callbacks
  * Bugfix: Fix NBBO callback
  * Feature: Orderbook sequence number validation for HitBTC
  * Feature: Kraken orderbook checksum support in Kraken
  * Feature: KrakenFutures sequence number check added
  * Feature: Add optional caching to postgres backend
  * Feature: New Exchange - Binance Delivery
  * Feature: Liquidation for OKX
  * Bugfix: Adjust ping interval on websocket connection, some exchanges require pings more frequently
  * Feature: Checksum validation for orderbooks on OKX and OKCoin
  * Feature: Use rotating log handler
  * Bugfix: Later versions of aiokafka break kafka backend
  * Bugfix: Huobi sends empty book updates for delisted pairs
  * Bugfix: Harden channel map usage in Kraken
  * Feature: Config file support
  * Bugfix: Subscribing to all BitMEX symbols gives 400 error - message too long
  * Bugfix: Cleanup of code - fixed a few examples and resolved all outstanding flake8 issues
  * Bugfix: Fix Bitfinex pair normalization
  * Feature: Refactor connection handling. New connection design allows feeds to open multiple connections
  * Feature: Update BitMax to use the new BitMax Pro API - includes sequence number verification on books
  * Feature: Bybit - support for USDT perpetual data channels
  * Feature: Can now configure more than 25 Bitfinex pair/channel combinations
  * Feature: Support more than 200 pair/stream combinations on Binance from a single Feed
  * Feature: Support for the bitFlyer exchange
  * Feature: Update Kraken to work with very large numbers of trading pairs

### 1.6.1 (2020-11-12)
  * Feature: New kwarg for exchange feed - `snapshot_interval` - used to control number of snapshot updates sent to client
  * Feature: Support for rabbitmq message routing
  * Feature: Support for raw file playback. Will be useful for testing features and building out new test suites for custom_cryptofeed.
  * Feature: Arctic library quota can be configured, new default is unlimited
  * Feature: New exchange: Probit
  * Bugfix: Correctly store receipt timestamp in mongo backend
  * Bugfix: FTX - set a funding rate requests limit constant (10 requests per second, 60 seconds pause between loops)
  * Bugfix: Open Interest data on FTX erroneously had timestamps set to None
  * Update: Binance Jersey shutdown - feed removed
  * Bugfix: Fixed open interest channel for Binance Delivery

### 1.6.0 (2020-09-28)
  * Feature: Validate FTX book checksums (optionally enabled)
  * Bugfix: Subscribing only to open interest on Binance futures gave connection errors
  * Feature: Authentication for Influxdb 1.x
  * Feature: Override logging defaults with environment variables (filename and log level)
  * Bugfix: For Coinbase L3 books need to ignore/drop some change updates (per docs)
  * Bugfix: Obey rate limits when using Coinbase REST API to get L3 book snapshots
  * Bugfix: Ignore auction updates from Gemini
  * Feature: Add order type (limit/market) for Kraken Trades
  * Feature: Exchange specific information available via info classmethod - contains pairs, data channels and tick size
  * Feature: Funding data supported on HuobiSwap
  * Bugfix: Fix broken mongo callbacks in backends

### 1.5.1 (2020-08-26)
  * Bugfix: #136 - Kraken Rate limiting
  * Feature: Funding data on Binance Futures
  * Bugfix: Support new Huobi tradeId field, old id field deprecated
  * Bugfix: Unclear errors when unsupported data feeds used
  * Bugfix: Handle order status messages more gracefully in Coinbase
  * Bugfix: Fix Kraken pair mappings
  * Feature: New Exchange - Gate.io
  * Feature: Remove \_SWAP, \_FUTURE channel (and callback) types - determine correct type at subscribe time based on symbol
  * Docs: Add documentation about callbacks
  * Feature: Deribit provides sequence number for book updates - check them to ensure no messages lost
  * Bugfix: Fix timestamp on Binance Futures Open Interest
  * Bugfix: Update/standardize liquidation callbacks
  * Feature: Update Upbit subscription methods based on updated docs
  * Bugfix: Ticker not working correctly on Binance Futures
  * Feature: Liquidations callbacks for backends

### 1.5.0 (2020-07-31)
  * Feature: New Exchange - FTX US
  * Feature: Add funding data to rest library
  * Bugfix: DSX updated their API, websocket no longer supported. Removing DSX
  * Feature: Websocket client now uses unbounded message queue
  * Feature: Support for HuobiDM next quarter contracts
  * Bugfix: Fix datetime fields in elasticsearch
  * Feature: BinanceFutures: support ticker, open interest and Liquidation, FTX: support open interest and liquidations, Deribit: liquidations support
  * Bugfix: Fix receipt timestamps in Postgres backend
  * Bugfix: Huobi Swap Init

### 1.4.1 (2020-05-22)
  * Feature: Support for disabling timeouts on feeds
  * Bugfix: #224 Ignore newly added trading pairs in Poloniex while running
  * Feature: New exchange, DSX
  * Bugfix: Bybit updated their API, websocket subscription to L2 book data needed to be updated
  * Bugfix: Deribit subscription condensed into a single message to avoid issues with rate limit
  * Bugfix: Funding interval for bitmex not converted to integer
  * Bugfix: HuobiSwap missing from feedhandler
  * Feature: Optional flag on Feed to enable check for crossed books
  * Feature: Blockchain Exchange

### 1.3.1 (2020-03-17)
  * Feature: Add missing update detection to orderbooks in Binance
  * Feature: REST support for FTX
  * Feature: Added new field, receipt timestamp, to all callbacks. This contains the time the message was received by custom_cryptofeed.
  * Feature: Upbit Exchange Support

### 1.3.0 (2020-02-11)
  * Bugfix: Enabling multiple symbols on Bitmex with deltas and max depth configured could cause crashes.
  * Bugfix: Default open interest callback missing
  * Change: Mongo backend stores book data in BSON
  * Feature: Open Interest callbacks added to all backends
  * Change: Instrument removed in favor of open interest
  * Bugfix: Huobi feedhandlers not properly setting forced indicator for book updates, breaking deltas
  * Bugfix: Some Kraken futures funding fields not always populated
  * Feature: Open interest updates for Kraken futures
  * Feature: Open interest updates for Deribit
  * Bugfix: FTX ticker can have Nones for bid/ask
  * Feature: InfluxDB 2.0 support
  * Bugfix: Deribit funding only available on perpetuals
  * Feature: Enable deltas (with out max depth) on exchanges that do not support them

### 1.2.0 (2020-01-18)
  * Feature: New exchange: Binance Futures
  * Feature: New Exchange: Binance Jersey
  * Feature: Funding data on Kraken Futures
  * Feature: User defined pair separator (default still -)
  * Feature: Postgres backend
  * Feature: Deribit Funding
  * Bugfix: Deribit subscriptions using config subscribed to symbols incorrectly
  * Bugfix: Some RabbitMQ messages were missing symbol and exchange data
  * Feature: Open interest data for OKX swaps

### 1.1.0 (2019-11-14)
  * Feature: User enabled logging of exchange messages on error
  * Refactor: Overhaul of backends - new base classes and simplified code
  * Bugfix: Handle i messages from poloniex more correctly
  * Bugfix: Report bittrex errors correctly
  * Feature: New exchange: Bitcoin.com
  * Feature: New exchange: BinanceUS
  * Feature: New exchange: Bitmax
  * Feature: Ability to store raw messages from exchanges

### 1.0.1 (2019-09-30)
  * Feature: Backfill Bitmex historical trade data from S3 Bucket
  * Feature: RabbitMQ backend
  * Feature: Custom Depth and deltas for all L2 book updates
  * Feature: Support new 100ms book diff channel on Binance
  * Feature: Bittrex exchange support
  * Feature: Ticker support in Redis and Kafka Backends
  * Feature: Ticker callbacks require/contain timestamp
  * Feature: Renko Aggregation
  * Bugfix: Max Depth without deltas should only send updates when book changes
  * Bugfix: Update count and previous book now associated with pair

### 1.0.0 (2019-08-18)
  * Bugfix #113: Fix remaining exchanges who are not reporting timestamps correctly
  * Feature: Generated timestamps now based on message receipt by feedhandler
  * Feature: Multi-callback support
  * Feature: Rework ZMQ using pub/sub with topics
  * Feature: FTX Exchange
  * Feature: Gemini subscriptions now work like all other exchanges
  * Feature: Use unique id for each feed (as opposed to feed id/name)
  * Bugfix: fix Poloniex historical trade timestamps
  * Bugfix: Bitmex L2 channel incorrectly classified
  * Feature: Kraken Futures
  * Feature: Redis backend supports UDS
  * Feature: Binance full book (L2) with deltas
  * Feature: Allow user to start event loop themselves (potentially scheduling other tasks before/after).

### 0.25.0 (2019-07-06)
  * Feature: Rest Endpoints for Historical Deribit data
  * Feature: Specify numeric datatype for InfluxDB
  * Bugfix: Greatly improve performance of book writes for InfluxDB
  * Feature: Bybit exchange support
  * Bugfix: Deribit now returning floats in decimal.Decimal
  * Feature: Elastic Search backend

### 0.24.0 (2019-06-19)
  * Bugfix: Book Delta Conversion issue in backends
  * Bugfix: Tweak BitMEX rest API to handle more errors more gracefully
  * Feature: Deribit Exchange support
  * Feature: Instrument channel
  * Bugfix: support Kraken websocket API changes
  * Bugfix: correct USDT symbol mappings for Bitfinex
  * Bugfix: Fixed mongo book backend
  * Feature: Book delta support for mongo, sockets, ZMQ

### 0.23.0 (2019-06-03)
  * Feature: Book delta support for InfluxDB
  * Feature: Swaps on OkEX

### 0.22.2 (2019-05-23)
  * Bugfix: Fix tagging issue in InfluxDB
  * Bugfix: Fix book updates in InfluxDB
  * Feature: Book delta support in Redis backends
  * Feature: Book delta support in Kafka backend

### 0.22.1 (2019-05-19)
  * Feature: Cleanup callback code
  * Feature: Poloniex subscription now behaves like other exchanges
  * Feature: Kafka Backend

### 0.22.0 (2019-05-04)
  * Bugfix: Timestamp normalization for backends were losing subsecond fidelity
  * Feature: All exchanges report timestamps in floating point unix time
  * Bugfix: Implement change in OkEx's trading pair endpoint for pair generation

### 0.21.1 (2019-04-28)
  * Feature: Config support for Coinbene, Binance, EXX, BitMEX, Bitfinex, Bitstamp, HitBTC
  * Feature: Complete clean up of public REST endpoints
  * Feature: Improved book delta example
  * Feature: Bitstamp Websocket V2 - L3 books now supported
  * Bugfix: Incorrect book building in Kraken

### 0.21.0 (2019-04-07)
  * Bugfix: Coinbase L3 Book would get in cycle of reconnecting due to missing sequence numbers
  * Feature: Kraken L2 Book Deltas
  * Feature: Book deltas streamlined and retain ordering
  * Feature: OKCoin exchange support
  * Feature: OKEx exchange support
  * Feature: Coinbene exchange support
  * Feature: Support Huobi Global and Huobi USA

### 0.20.2 (2019-03-19)
  * Bugfix: Kraken REST API using wrong symbol for trades
  * Feature: Complete work on standardizing Bitfinex rest API
  * Bugfix: Allow index symbols on Bitmex

### 0.20.1 (2019-02-16)
  * Feature: Trades sides are now labeled as Buy / Sell instead of Bid / Ask.
  * Feature: Support for the Huobi exchange
  * Bugfix: Change how exchange pairs are mapped for REST module - only map exchanges that are used
  * Bugfix #67: Ensure all trades report the taker's side

### 0.20.0 (2019-02-04)
  * Feature #57: Write updates directly to MongoDB via new backend support
  * Feature #56: Experimental support for fine grained configuration per exchange
  * Feature #58: Support Kraken websocket API
  * Feature: Only generate trading pair conversions for configured exchanges
  * Feature: Historical trade data on REST API for Kraken

### 0.19.2 (2019-01-21)
  * Feature #55: OHLCV aggregation method in backends plus support for user defined aggregators
  * Feature: EXX exchange support

### 0.19.1 (2019-01-11)
  * Bugfix: Poloniex logging had bug that prevented reconnect on missing sequence number

### 0.19.0 (2019-01-10)
  * Feature #50: Support multiple streams per websocket connection on Binance
  * Bugfix #51: Fix pairs on streams in Binance

### 0.18.0 (2018-12-15)
  * Feature: InfluxDB support via backend
  * Feature: Aggregation backend wrappers
  * Bugfix: BookDelta callback no longer needs to be an instance of BookUpdateCallback
  * Bugfix: REST module was creating duplicate log handlers
  * Bugfix: Bitfinex REST now properly handles cases when there are more than 1000 updates for a single tick

### 0.17.4 (2018-11-17)
  * README change for long description rendering issue

### 0.17.3 (2018-11-17)
  * Feature #41: Rework trading pairs to generate them dynamically (as opposed to hard coded)
  * Feature: When book depth configured Redis, ZMQ and UDP backends only report book changes when changed occurred in
             depth window
  * Feature: TCP socket backend support
  * Feature: UDS backend support

### 0.17.2 (2018-11-03)
  * Bugfix #45: Bitstamp prices and sizes in L2 book are string, not decimal.Decimal
  * Feature: Binance support

### 0.17.1 (2018-10-19)
  * Bugfix #43: Coinbase L2 book used "0" rather than 0 for comparisons against decimal.Decimal
  * Feature: REST feed market data supported via normal subscription methods
  * Feature: Kraken support
  * Bugfix: Bitfinex book timestamps match expected Bitfinex timestamps (in ms)

### 0.17.0 (2018-10-13)
  * Feature: Timestamps for orderbooks and book deltas
  * Feature #40: NBBO now uses best bid/ask from L2 books
  * Feature #28: GDAX now renamed Coinbase and uses Coinbase endpoints
  * Feature: ZeroMQ backend. Write updates directly to ZMQ connection
  * Feature: UDP Socket backend. Write updates directly to UDP socket

### 0.16.0 (2018-10-4)
  * Feature: L2 books are now all price aggregated amounts, L3 books are price aggregated orders
  * Book deltas supported on all feeds
  * Bugfix: Fix NBBO feed

### 0.15.0 (2018-09-29)
  * Feature: GDAX/Coinbase rest support - trades, order status, etc
  * Feature: Arctic backend, supports writing to arctic directly on trade/funding updates
  * Bugfix: #36 Update poloniex to use new trading pairs and handle sequence numbers
  * Bugfix: Improve Bitfinex orderbooks and handle sequence numbers
  * Bugfix: GDAX and Bitmex orderbook and logging improvements

### 0.14.1 (2018-09-14)
  * Added some docstrings
  * Feature: Add exchanges by name to feedhandler. Easier to instantiate a feedhandler from config
  * Logging improvements
  * Bugfix: non-gathered futures were suppressing exceptions when multiple feeds are configured. Changed to tasks
  * Redis backend uses a connection pool

### 0.14.0 (2018-09-04)
  * Feature: support for writing order books directly to Redis
  * Feature: ability to specify book depth for Redis updates

### 0.13.3 (2018-08-31)
  * Feature: normalize Bitfinex funding symbols

### 0.13.2 (2018-08-31)
  * Bugfix: fix symbol in Bitfinex rest

### 0.13.1 (2018-08-31)
  * Feature: access rest endpoints via getitem / []
  * Bugfix: #31 - funding channel broke Gemini
  * Feature: Book deltas for GDAX
  * Bugfix: Fix intervals on Bitmex (rest)

### 0.13.0 (2018-08-22)
  * Feature: Funding data from Bitmex on ws
  * Feature: Funding historical data via rest
  * Bugfix: Python 3.7 compatibility
  * Feature: Rest trade APIs are now generators
  * Feature: funding data on Bitfinex - ws and rest

### 0.12.0 (2018-08-20)
  * Bugfix: Handle 429s in Bitmex (REST)
  * Feature: Redis backend for trades to write updates directly to Redis
  * Bugfix: issue #27 - Bitmex trades missing timestamps

### 0.11.1 (2018-08-18)
  * Bitfinex and Bitmex historical trade data via REST
  * Bugfix: interval incorrect for rest time ranges
  * Bugfix: lowercase attrs in Rest interface

### 0.11.0 (2018-08-05)
  * Feature: Support for delta updates for order books
  * REST API work started

### 0.10.2
  * Bugfix: Clear data structures on reconnect in bitmex
  * Feature: Support reconnecting on more connection errors
  * Feature: Timestamp support on trade feeds
  * Feature: Connection watcher will terminate and re-open idle connections

### 0.10.1 (2018-5-11)
  * Feature: Reconnect when a connection is lost
  * Bugfix #22: Check for additional connection failures
  * Feature #4: Trade ID support
  * Feature: Account for new Gemini message type

### 0.10.0 (2018-03-18)
  * Feature: Bitmex

### 0.9.2 (2018-03-13)
  * Bugfix #10: Change from float to decimal.Decimal in GDAX
  * Feature #5: use sorted dictionaries for order books
  * Feature #17: logging support
  * Bugfix: Gemini order books now work
  * Bugfix: All json floats parsed to Decimal
  * Bugfix: Fix Bitstamp pair parsing
  * Feature: Major clean up of channel, exchange, and trading pair names

### 0.9.1 (2018-01-27)
  * Bugfix #4: produce ticker from trades channel on GDAX
  * Feature: Bitstamp feed

### 0.8.0 (2018-01-07)
  * Feature: HitBTC feed
  * Feature: Poloniex Orderbook support

### 0.6.0 (2018-01-02)
  * Feature: Gemini Feed

### 0.5.0 (2018-01-02)
  * Initial release: GDAX, Poloniex, Bitfinex Support
  * Feature: NBBO support
            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "custom-cryptofeed",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "cryptocurrency,bitcoin,btc,feed handler,market feed,market data,crypto assets,Trades,Tickers,BBO,Funding,Open Interest,Liquidation,Order book,Bid,Ask,fmfw.io,Bitfinex,bitFlyer,AscendEX,Bitstamp,Bittrex,Blockchain.com,Bybit,Binance,Binance Delivery,Binance Futures,Binance US,BitMEX,Coinbase,Deribit,EXX,FTX,FTX US,Gate.io,Gemini,HitBTC,Huobi,Huobi DM,Huobi Swap,Kraken,Kraken Futures,OKCoin,OKX,Poloniex,ProBit,Upbit",
    "author": "Hooman Radmehr",
    "author_email": "dadmand.yas@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/69/2d/49d7e6a49e9b768946c630318af192df1ebc1dd0cfe4bb0629473af57cb8/custom_cryptofeed-0.0.1.tar.gz",
    "platform": null,
    "description": "# Cryptocurrency Exchange Feed Handler\n[![License](https://img.shields.io/badge/license-XFree86-blue.svg)](LICENSE)\n![Python](https://img.shields.io/badge/Python-3.8+-green.svg)\n[![Build Status](https://travis-ci.com/bmoscon/custom_cryptofeed.svg?branch=master)](https://travis-ci.com/bmoscon/custom_cryptofeed)\n[![PyPi](https://img.shields.io/badge/PyPi-custom_cryptofeed-brightgreen.svg)](https://pypi.python.org/pypi/custom_cryptofeed)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/efa4e0d6e10b41d0b51454d08f7b33b1)](https://www.codacy.com/app/bmoscon/custom_cryptofeed?utm_source=github.com&utm_medium=referral&utm_content=bmoscon/custom_cryptofeed&utm_campaign=Badge_Grade)\n\nHandles multiple cryptocurrency exchange data feeds and returns normalized and standardized results to client registered callbacks for events like trades, book updates, ticker updates, etc. Utilizes websockets when possible, but can also poll data via REST endpoints if a websocket is not provided.\n\n## Supported exchanges\n\n* [AscendEX](https://ascendex.com/)\n* [Bequant](https://bequant.io/)\n* [Bitfinex](https://bitfinex.com)\n* [bitFlyer](https://bitflyer.com/)\n* [Bithumb](https://en.bithumb.com/)\n* [Bitstamp](https://www.bitstamp.net/)\n* [Bittrex](https://global.bittrex.com/)\n* [Blockchain.com](https://www.blockchain.com/)\n* [Bybit](https://www.bybit.com/)\n* [Binance](https://www.binance.com/en)\n* [Binance Delivery](https://binance-docs.github.io/apidocs/delivery/en/)\n* [Binance Futures](https://www.binance.com/en/futures)\n* [Binance US](https://www.binance.us/en)\n* [Bit.com](https://www.bit.com)\n* [Bitget](https://www.bitget.com/)\n* [BitMEX](https://www.bitmex.com/)\n* [Coinbase](https://www.coinbase.com/)\n* [Crypto.com](https://www.crypto.com)\n* [Delta](https://www.delta.exchange/)\n* [Deribit](https://www.deribit.com/)\n* [dYdX](https://dydx.exchange/)\n* [FMFW.io](https://www.fmfw.io/)\n* [EXX](https://www.exx.com/)\n* [FTX](https://ftx.com/)\n* [FTX US](https://ftx.us/)\n* [Gate.io](https://www.gate.io/)\n* [Gemini](https://gemini.com/)\n* [HitBTC](https://hitbtc.com/)\n* [Huobi](https://www.hbg.com/)\n* [Huobi DM](https://www.huobi.com/en-us/markets/hb_dm/)\n* Huobi Swap (Coin-M and USDT-M)\n* [Independent Reserve](https://www.independentreserve.com/) \n* [Kraken](https://www.kraken.com/)\n* [Kraken Futures](https://futures.kraken.com/)\n* [KuCoin](https://www.kucoin.com/)\n* [OKCoin](http://okcoin.com/)\n* [OKX](https://www.okx.com/)\n* [Phemex](https://phemex.com/)\n* [Poloniex](https://www.poloniex.com/)\n* [ProBit](https://www.probit.com/)\n* [Upbit](https://sg.upbit.com/home)\n\n\n## Basic Usage\n\nCreate a FeedHandler object and add subscriptions. For the various data channels that an exchange supports, you can supply callbacks for data events, or use provided backends (described below) to handle the data for you. Start the feed handler and you're done!\n\n```python\nfrom custom_cryptofeed import FeedHandler\n# not all imports shown for clarity\n\nfh = FeedHandler()\n\n# ticker, trade, and book are user defined functions that\n# will be called when ticker, trade and book updates are received\nticker_cb = {TICKER: ticker}\ntrade_cb = {TRADES: trade}\ngemini_cb = {TRADES: trade, L2_BOOK: book}\n\n\nfh.add_feed(Coinbase(symbols=['BTC-USD'], channels=[TICKER], callbacks=ticker_cb))\nfh.add_feed(Bitfinex(symbols=['BTC-USD'], channels=[TICKER], callbacks=ticker_cb))\nfh.add_feed(Poloniex(symbols=['BTC-USDT'], channels=[TRADES], callbacks=trade_cb))\nfh.add_feed(Gemini(symbols=['BTC-USD', 'ETH-USD'], channels=[TRADES, L2_BOOK], callbacks=gemini_cb))\n\nfh.run()\n```\n\nPlease see the [examples](https://github.com/bmoscon/custom_cryptofeed/tree/master/examples) for more code samples and the [documentation](https://github.com/bmoscon/custom_cryptofeed/blob/master/docs/README.md) for more information about the library usage.\n\n\nFor an example of a containerized application using custom_cryptofeed to store data to a backend, please see [Cryptostore](https://github.com/bmoscon/cryptostore).\n\n\n## National Best Bid/Offer (NBBO)\n\ncustom_cryptofeed also provides a synthetic [NBBO](examples/demo_nbbo.py) (National Best Bid/Offer) feed that aggregates the best bids and asks from the user specified feeds.\n\n```python\nfrom custom_cryptofeed import FeedHandler\nfrom custom_cryptofeed.exchanges import Coinbase, Gemini, Kraken\n\n\ndef nbbo_update(symbol, bid, bid_size, ask, ask_size, bid_feed, ask_feed):\n    print(f'Pair: {symbol} Bid Price: {bid:.2f} Bid Size: {bid_size:.6f} Bid Feed: {bid_feed} Ask Price: {ask:.2f} Ask Size: {ask_size:.6f} Ask Feed: {ask_feed}')\n\n\ndef main():\n    f = FeedHandler()\n    f.add_nbbo([Coinbase, Kraken, Gemini], ['BTC-USD'], nbbo_update)\n    f.run()\n```\n\n## Supported Channels\n\ncustom_cryptofeed supports the following channels from exchanges:\n\n### Market Data Channels (Public)\n\n* L1_BOOK - Top of book\n* L2_BOOK - Price aggregated sizes. Some exchanges provide the entire depth, some provide a subset.\n* L3_BOOK - Price aggregated orders. Like the L2 book, some exchanges may only provide partial depth.\n* TRADES - Note this reports the taker's side, even for exchanges that report the maker side.\n* TICKER\n* FUNDING\n* OPEN_INTEREST - Open interest data.\n* LIQUIDATIONS\n* INDEX\n* CANDLES - Candlestick / K-Line data.\n\n### Authenticated Data Channels\n\n* ORDER_INFO - Order status updates\n* TRANSACTIONS - Real-time updates on account deposits and withdrawals\n* BALANCES - Updates on wallet funds\n* FILLS - User's executed trades\n\n\n## Backends\n\ncustom_cryptofeed supports `backend` callbacks that will write directly to storage or other interfaces.\n\nSupported Backends:\n* Redis (Streams and Sorted Sets)\n* [Arctic](https://github.com/manahl/arctic)\n* ZeroMQ\n* UDP Sockets\n* TCP Sockets\n* Unix Domain Sockets\n* [InfluxDB v2](https://github.com/influxdata/influxdb)\n* MongoDB\n* Kafka\n* RabbitMQ\n* PostgreSQL\n* GCP Pub/Sub\n* [QuestDB](https://questdb.io/)\n\n\n## Installation\n\n**Note:** custom_cryptofeed requires Python 3.8+\n\ncustom_cryptofeed can be installed from PyPi. (It's recommended that you install in a virtual environment of your choosing).\n\n    pip install custom_cryptofeed\n\ncustom_cryptofeed has optional dependencies, depending on the backends used. You can install them individually, or all at once. To install custom_cryptofeed along with all its optional dependencies in one bundle:\n\n    pip install custom_cryptofeed[all]\n\nIf you wish to clone the repository and install from source, run this command from the root of the cloned repository.\n\n    python setup.py install\n\nAlternatively, you can install in 'edit' mode (also called development mode):\n\n    python setup.py develop\n\nSee more discussion of package installation in [INSTALL.md](https://github.com/bmoscon/custom_cryptofeed/blob/master/INSTALL.md).\n\n\n\n## Rest API\n\ncustom_cryptofeed supports some REST interfaces for retrieving real-time and historical data, as well as order placement and account management. These are integrated into the exchange classes directly. You can view the supported methods by calling the `info()` method on any exchange. The methods for interacting with the exchange RET endpoints exist in two flavors, the synchronous methods (suffixed with `_sync`) as well as the asynchronous which can be utilized with asyncio. For more information see the [documentation](docs/rest.md).\n\n\n## Future Work\n\nThere are a lot of planned features, new exchanges, etc planned! If you'd like to discuss ongoing development, please join the [slack](https://join.slack.com/t/custom_cryptofeed-dev/shared_invite/enQtNjY4ODIwODA1MzQ3LTIzMzY3Y2YxMGVhNmQ4YzFhYTc3ODU1MjQ5MDdmY2QyZjdhMGU5ZDFhZDlmMmYzOTUzOTdkYTZiOGUwNGIzYTk) or open a thread in the [discussions](https://github.com/bmoscon/custom_cryptofeed/discussions) in GitHub.\n\n## Contributing\n\nIssues and PRs are welcomed!\n\ncustom_cryptofeed wouldn't be possible without the help of many [contributors](AUTHORS.md)! I owe them and all other contributors my thanks!\n\n## Donations / Support\n\nSupport and donations are appreciated but not required. You can donate via [GitHub Sponsors](https://github.com/sponsors/bmoscon), or via the addresses below:\n\n* Bitcoin: bc1qm0kxz8hqacaglku5fjhfe9a5hjnuyfwk02lsyr\n* Ethereum: 0x690709FEe13eEce9E7852089BB2D53Ae5D073154\n\n\n----\n\n# custom_cryptofeed installation\n \nThe custom_cryptofeed library is intended for use by Python developers.\n\nSeveral ways to get/use custom_cryptofeed:\n\n* Pip - `pip install custom_cryptofeed`\n* Git - `git clone https://github.com/bmoscon/custom_cryptofeed`\n* Zipped source code - Download [github.com/bmoscon/custom_cryptofeed/archive/master.zip](https://github.com/bmoscon/custom_cryptofeed/archive/master.zip)\n\n## Installation with Pip\n\nThe safe way to install and upgrade the custom_cryptofeed library:\n\n    pip install --user --upgrade custom_cryptofeed\n\ncustom_cryptofeed supports many backends as Redis, ZeroMQ, RabbitMQ, MongoDB, PostgreSQL, Google Cloud and many others.\ncustom_cryptofeed is usually used with a subset of the available backends, and installing the dependencies of all backends is not required. \nThus, to minimize the number of dependencies, the backend dependencies are optional, but easy to install.\n\nSee the file [`setup.py`](https://github.com/bmoscon/custom_cryptofeed/blob/master/setup.py#L60)\nfor the exhaustive list of these *extra* dependencies.\n\n* Install all optional dependencies  \n  To install custom_cryptofeed along with all optional dependencies in one bundle:\n\n        pip install --user --upgrade custom_cryptofeed[all]\n\n* Arctic backend  \n  To install custom_cryptofeed along with [Arctic](https://github.com/man-group/arctic/) in one bundle:\n\n         pip install --user --upgrade custom_cryptofeed[arctic]\n\n* Google Cloud Pub / Sub backend\n\n         pip install --user --upgrade custom_cryptofeed[gcp_pubsub]\n\n* Kafka backend\n\n         pip install --user --upgrade custom_cryptofeed[kafka]\n\n* MongoDB backend\n\n         pip install --user --upgrade custom_cryptofeed[mongo]\n\n* PostgreSQL backend\n\n         pip install --user --upgrade custom_cryptofeed[postgres]\n\n* RabbitMQ backend\n\n         pip install --user --upgrade custom_cryptofeed[rabbit]\n\n* Redis backend\n\n          pip install --user --upgrade custom_cryptofeed[redis]\n\n* ZeroMQ backend\n\n         pip install --user --upgrade custom_cryptofeed[zmq]\n\nIf you have a problem with the installation/hacking of custom_cryptofeed, you are welcome to:\n* open a new issue: https://github.com/bmoscon/custom_cryptofeed/issues/\n* join us on Slack: [custom_cryptofeed-dev.slack.com](https://join.slack.com/t/custom_cryptofeed-dev/shared_invite/enQtNjY4ODIwODA1MzQ3LTIzMzY3Y2YxMGVhNmQ4YzFhYTc3ODU1MjQ5MDdmY2QyZjdhMGU5ZDFhZDlmMmYzOTUzOTdkYTZiOGUwNGIzYTk)\n* or on GitHub Discussion: https://github.com/bmoscon/custom_cryptofeed/discussions\n\nYour Pull Requests are also welcome, even for minor changes.\n\n\n----\n\n## Changelog\n\n### 2.3.1 (2022-10-31)\n * Bugfix: timestamp not reset correctly on reconnect\n * Bugfix: Arctic backend failing to write Trades when trade type was not present in data\n * Bugfix: Timestamp sometimes not present in Coinbase ticker updates\n * Bugfix: Phemex, symbols parsing\n * Bugfix: OKx - handle empty liquidations correctly\n\n### 2.3.0 (2022-09-04)\n * Bugfix: added list and str support to websocket_endpoint creation (allows more than 200 symbols on Binance)\n * Feature: Add support for OKx streaming candles\n * Bugfix: Binance Futures, double slash in open interest url\n * Update: Set 'next_funding_rate' to None in Bybit if not present\n * Feature: Added authentication to private channels of Bittrex. ORDER_INFO and BALANCES implemented.\n * Bugfix: Bitget, bug in subscribe method\n * Update: Poloniex API update\n\n### 2.2.3 (2022-05-29)\n * Feature: Authenticated channel support for Bitget\n * New Exchange: FTX TR\n * New Exchange: AscendEX Futures\n * Update: AscendEX, add sandbox endpoint. Add channel filter.\n * Update: Binance, add sandbox endpoint.\n * Update: Binance Delivery, add sandbox endpoint.\n * Update: Bitmex, add sandbox endpoint.\n * Update: KrakenFutures, add sandbox endpoint.\n * Bugfix: Bybit, the quantity for order_info stream was incorrect.\n * Bugfix: Bitmex, timestamp was not returned in book.\n * Bugfix: KrakenFutures, timestamp was not returned in book.\n * Bugfix: Phemex, websocket subscription error.\n * Bugfix: OKX, liquidations subscription was never called.\n * Update: OKX, use publicly available channel for book updates.\n * Bugfix: Fix race condition when resetting feeds with multiple connections\n * Update: Send Phemex subscriptions one symbol at a time\n * Bugfix: BitDotCom, the subscription message for perpetuals was incorrect\n * Bugfix: Allow empty subscriptions (channel with no symbols) for FTX\n * Update: Add SOL and USDC to Deribit symbol mapping\n\n### 2.2.2 (2022-04-17)\n * Bugfix: OKX filled amount being reported incorrectly in OrderInfo\n * Bugfix: Tweak QuestDB coulmn types and layout\n * Bugfix: Fix Bybit Private Channel connections / subscriptions\n * Bugfix: Return client order id in OrderInfo object returned by Coinbase\n * Feature: Add Order type\n * Feature: Add support for closed candles only in Bybit\n * Update: Kraken Futures new instrument type: Perpetual Linear Multi-collateral Futures\n * New Exchange: Bitget\n * New Exchange: Independent Reserve\n * Feature: Add perpetuals to Bitget\n * Update: Add indicator in symbol info if instrument is a qunto\n * Feature: Configuration option to allow invalid symbols\n * Bugfix: use supplied timestamp from snapshot in Binance\n * Feature: Optional multiprocessing support for backends\n * Update: Remove unsupported backends\n * Feature: Support checksum validation on Bitget orderbooks\n\n### 2.2.1 (2022-02-27)\n * Feature: Support for order info stream on BitMEX\n * Bugfix: Datetime/Timestamp conversion fixes\n * Feature: Add support for Huobi Linear Swaps\n * Update: Change Coinbase REST calls to use Ticker and Trade data types\n * Bugfix: Instrument and channel filtering sometimes matched incorrectly when creating connection specific subscriptions\n * Bugfix: retry kwargs were not correctly passed through to the async HTTP connection handler in Coinbase REST methods\n * Update: Revamp Coinbase authenticated REST endpoints; change to use the Cython data types\n * Feature: Add from_dict static method in Cython types to support creation of object from dict (for serialization/deserialization)\n * Feature: New QuestDB backend\n * Update: Exchange name change OKEx -> OKX\n * Bugfix: OKX candle REST code was setting values incorrectly\n * Update: OKX now uses v5 for all connections (REST and WS). Update endpoints to new exchange name: okex.com -> okx.com\n \n### 2.2.0 (2021-02-16)\n * Feature: New exchange: Bit.com\n * Feature: Rework how exchanges that have multiple websocket endpoints are managed and configured.\n * Bugfix: Use UTC for datetime conversions in REST api\n * Bugfix: Funding rate of 0 was being converted to None when to_dict was called\n * Feature: Add OKEx REST API and implement candle function\n * Feature: Added trading endpoints to Bitfinex REST mixin\n * Bugfix: Change to Okex to allow futures and options subscriptions\n * Update: Deribit ticker, trades, and orderbook channels now require authentication\n * Bugfix: Fix candle backend for InfluxDB\n * Bugfix: OKEx REST candle fix\n * Feature: Added ability to use your own Postgres table layouts\n * Bugfix: Binance connections that do not require websocket were failing on connect\n * Feature: Write native datetimes to Mongo\n * Feature: Mongo backend now supports bulk writes + queuing of messages\n\n### 2.1.2 (2021-12-23)\n * Feature: Tweak Postgres backend to not store duplicated data for orderbooks.\n * Feature: Provide sample book schema for Postgres.\n * Feature: Add subaccount info to OrderInfo and Fills data types.\n * Bugfix: Fix issue in orderbook cross check.\n * Bugfix: Simplify dYdX orderbook logic.\n * Bugfix: Raise error if client tries to subscribe to KuCoin book data without an API key.\n * Feature: Add ByBit sandbox endpoints.\n * Bugfix: Fix calculation in OrderInfo on Binance.\n * Feature: Support list of bootstrap servers for Kafka backend.\n * Feature: Add OrderInfo and Fills zmq callbacks \n\n### 2.1.1 (2021-11-29)\n * Bugfix: Position data type missing side field.\n * Bugfix: Position data type had unused field 'id'.\n * Bugfix: Fix Bybit OrderInfo msg/data dict.\n * Feature: Add support for sandbox/testnet on BinanceFutures.\n * Feature: New exchange - Crypto.com.\n * Bugfix: Fix MongoDB backend.\n * Update: reduce code duplication for candle interval normalization.\n * Update: Simplify code around address specification and selection when using sandbox/testnet.\n * Bugfix: Phemex rounding errors, incorrect volume.\n * Feature: Add sandbox/testnet endpoint for Phemex.\n * Feature: New exchange - Delta.\n * Update: Tweak tests to remove deprecation warnings.\n * Bugfix: Fix token usage in Binance.\n * Update: Change Binance trades to use trade timestamp instead of event timestamp.\n\n### 2.1.0 (2021-11-14)\n * Bugfix: Update binance user data streams to use cdef types.\n * Feature: Add none_to kwarg to to_dict method of data type objects. Allows replacmen of Nones with specified value.\n * Bugfix: Some redis backends were trying to write Nones to storage and failing.\n * Update: Renamed as_type kwarg on to_dict to numeric_type.\n * Bugfix: Some dYdX symbols were incorrectly classified as spot.\n * Update: Drop support for Python 3.7.\n * Bugfix: Orderbooks need to be truncated to the correct depth when max depth is smaller than the maximum on Kraken.\n * Update: Coinbase having similar issues other exchanges with websocket compliance. Updated to fix connection\n * Update: Backends will fill in missing timestamps with receipt_timestamp\n * Update: Okex auth channel Orders added\n\n### 2.0.3 (2021-10-26)\n * Bugfix: Use timestamp_e6 for data derived from Bybit's instrument_info data feed.\n * Bugfix: Update postgres examples and schema. Fix postgres backend for all dtypes.\n * Bugfix: Kucoin has a limit of 100 symbols per subscription message and 300 per connection. These limits are now respected.\n * Bugfix: Error messages were not handled correctly on Kucoin, causing a crash.\n * Bugfix: FTX websocket endpoint update.\n * Bugfix: Fix the address used for authenticated Binance streams.\n * Bugfix: Handle cases where Bitmex book data is empty.\n\n### 2.0.2 (2021-10-12)\n * Feature: random backoff when 429s are hit\n * Bugfix: Add rate limiting delay to snapshot querying on Binance\n * Update: Write deltas then snapshot when book interval is hit on Book Backends\n * Feature: Bybit liquidation support\n * Feature: Add support for Binance websocket orders stream\n * Bugfix: typo in influxDB backend\n * Bugfix: typo in optional type checking in cython module\n * Feature: compile cython code (and toggle optional assertions) correctly on windows\n * Feature: Allow logging disable via config option\n * Feature: Remove add_feed_running() method, add_feed can be used to add exchange feeds to running feedhandler.\n * Bugfix: Allow empty feedhandler to be started\n * Bugfix: Funding missing type conversion for to_dict method.\n * Bugfix: RedisStream candles boolean not being converted properly\n * Bugfix: FTX order info not handling price of None correctly on reduce only updates\n * Bugfix: Fills using incorrect order id\n * Feature: Periodically refresh order books in Binance to reduce the likelihood of order levels becoming stale\n * Update: Bitcoin.com exchange migrated to FMFW.io and API was updated\n * Revert: Temporarily revert the concurrent http changes in Binance as well as the snapshot refresh code while bugs are resolved\n * Bugfix: Fix Throttle callback, added an example to illustrate usage\n * Bugfix: BinanceFutures and BinanceDelivery not handling rates and funding times of 0/null for futures contracts\n * Bugfix: Open Interest in Bitmex not being converted to decimal\n * Update: Renamed field quantity in Liquidation data type\n\n### 2.0.1 (2021-09-22)\n * Bugfix: BinanceDelivery and BinanceFutures WS compression\n * Bugfix: Upbit REST candles do not work when start/end are not specified\n * Bugfix: New version of websockets enforces RFC rules and non-compliant exchanges will fail to connect.\n * Feature: Add support for candles on Bitfinex REST\n * Bugfix: Book callback with cross_check option enabled causes an error\n * Bugfix: Kraken Candle timestamps strings instead of floats\n * Bugfix: Coinbase book \\_change handler passing wrong book type\n * Bugfix: dYdX orderbooks contained prices levels of size 0\n * Bugfix: FTX trade id for liquidations not correctly being converted to str\n * Bugfix: L3 OrderBooks not being correctly converted when as_type was used with to_dict\n * Feature: kwarg snapshots_only when true allow storage of full book updates only (no deltas)\n * Bugfix: initial snapshot of Binance books did not have delta set to None\n * Bugfix: RedisBook callback accessed key delta when it did not exist, causing crash\n * Feature: Candle support for Bybit\n * Bugfix: Fix L3 Book Deltas when use as_type kwarg in to_dict\n * Bugfix: Use V3 endpoint for book snapshots in Binance and BinanceUS\n * Bugfix: Coinbase level 3 book potential memory leak\n * Feature: Perpetual support for Bitfinex\n * Feature: Type checking in Cython code (disabled by default, enable in setup.py)\n * Bugfix: Fix type issues in OKEx and Binance Futures - some numeric data being returned as string\n * Bugfix: Fix symbol normalization in FTX and Huoni Swap\n * Feature: Redis backend to choose sleep interval for writer\n * Feature: snapshot_interval added to book backends\n\n### 2.0.0 (2021-09-11)\n * Feature: Binance REST support\n * Feature: Add next funding rate data to FTX funding data\n * Bugfix: Kraken info dict returning empty\n * Breaking Change: Rename REST endpoints. Sync endpoints end with `_sync`, non-sync endpoints are now async. Clean up and remove old/unused test cases\n * Feature: Remove pandas dependency\n * Breaking Change: Rewrite all rest endpoints to support sync and async versions of the endpoint.\n * Feature: Add dYdX REST endpoints\n * Feature: Add Binance authentication for User Data Streams\n * Feature: Add support for Binance trading REST API\n * Bugfix: Fix typo by renaming rest_options to order_options\n * Bugfix: Use correct max depth for Binance (and its child classes).\n * Bugfix: Fix test data generation, fix Binance test cases, clean up and fix issues in various code samples in example/\n * Feature: BinanceUS rest mixin\n * Update: add feed/exchange cleanup to integration tests\n * Bugfix: Last message received not being correctly set on websocket connection, causing multiple restarts when an exchange encounters a timeout\n * Bugfix: Binance Futures not correctly formatting the side on liquidations\n * Bugfix: Interval from candle_sync was not being passed correctly to async candle interface in REST mixins.\n * Update: Cleanup Coinbase candle REST interface, use standard string interval\n * Feature: Add balances to Bybit\n * Bugfix: Kraken valid depths incorrect\n * Feature: Add support for gracefully stopping Redis backends and writing queued message\n * Bugfix: OKEx incorrect creating multiple connections\n * Breaking Change: Data types for majority of callbacks have changed to Objects (previously was a dict)\n * Update: Remove redundant example code\n * Breaking Change: OrderInfo now an object\n * Bugfix: NBBO updated to use new orderbook\n * Breaking Change: Balance callback changed to return object\n * Breaking Change: L1_Book callback returns object\n * Update: Subscribe to 200 levels per side for Bybit\n * Feature: Candles support added to Binance REST\n * Breaking Change: Candle REST methods return Candle object\n * Feature: data objects now hashable and comparable (equal only)\n * Breaking Changes: USER_FILLS renamed FILLS, FILLS not use data objects for callbacks\n * Feature: Add support for candles in FTX REST\n * Feature: Add support for candles in Bitstamp REST\n * Feature: Add support for candles in Upbit REST\n\n### 1.9.3 (2021-08-05)\n  * Feature: Add support for private channel USER_DATA, public channel LAST_PRICE on Phemex\n  * Feature: Add support for private channels FILLS, ORDER_INFO, BALANCES on Deribit\n  * Feature: Add support for public channel L1_BOOK on Deribit\n  * Feature: Add support for private channels FILLS and ORDER_INFO on Bybit\n  * Bugfix: Fix demo.py\n  * Feature: Allow user to specify a delay when starting an exchange connection (useful for avoiding 429s when creating a large number of feeds)\n  * Update: Support Okex v5\n  * Breaking Change: Update symbol standardization. Now uses standard names across all exchanges for futures, swaps, and options.\n  * Feature: Allow user to specify depth_interval for Binance L2_BOOK.\n  * Bugfix: Use order id in FTX fill channel callback\n  * Feature: Add ability to use the Symbols class to identify all exchanges that support a given instrument\n  * Feature: Allow user to specify 'http_proxy' in feeds.\n  * Feature: Add support for 'concurrent_http' requests in Binance feeds.\n  * Bugfix: funding and open interest data not being collected\n  * Breaking Change: Rework how REST endpoints are integrated into exchange classes. Rest module has been removed. REST methods are part of exchanges classes.\n  * Feature: Add support for funding data in Bybit\n  * Update: Correct and update sections of the documentation.\n  * Feature: Add support for open_interest_interval in Binance Futures.\n  * Bugfix: Fix subaccounts impl in FTX\n\n### 1.9.2 (2021-07-14)\n  * Bugfix: add config kwarg to add_nbbo method\n  * Update: changed KuCoin authentication to match new signing method\n  * Bugfix: #518 - fix aggregator example code\n  * Update: Support Bittrex V3\n  * Feature: Add support for candles on Bittrex\n  * Feature: Add support to authenticate private channels (e.g. FILLS) on FTX\n  * Feature: Support private rest api commands for FTX\n  * Update: Improve impl for FTX rest api\n  * Bugfix: #528 - Fix standardisation of Deribit's symbols when passed to callbacks\n  * Feature: Add support for private \"orders\" channel on FTX\n  * Feature: Add support for subaccounts in feeds and REST API for FTX\n  * Bugfix: Fix FTX rest api return value\n  * Exchange: New exchange - dYdX\n  * Bugfix: Issue #531 - Gemini symbol generation included closed symbols\n  * Feature: Allow user to override the score used in Redis ZSETs\n  * Update: Get information about size increment from FTX symbol data\n  * Bugfix: Fix trades write for Arctic backend\n  * Feature: new exchange: Bequant. Supports ticker, L2 book, trades, candles, plus authenticated channels: order info, account transactions and account balances\n  * Update: BitMax renamed AscendEX\n  * Bugfix: Feed level timeout and timeout interval not being set properly\n  * Exchange: Phemex exchange support\n  * Features: added support for candles, order info, account transactions and account balances to HitBTC & Bitcoin.com, plus authentication where required to access these channels\n  * Update: previous HitBTC & Bitcoin.com websocket endpoints deprecated. Now using separate Market, Trading and Account endpoints\n  * Bugfix: max_depth on Binance and Kraken was not properly used when querying the snapshot\n  * Bugfix: Handle 429s in HTTP connections (by waiting and retrying).\n\n### 1.9.1 (2021-06-10)\n  * Feature: add Bithumb exchange - l2 book and trades\n  * Bugfix: Fix inverted Poloniex symbols\n  * Feature: simplify and cleanup parts of Poloniex\n  * Feature: add `symbols` class method to all exchanges to get list of supported trading pairs\n  * Feature: Clean up internal class attributes in Feed class\n  * Feature: Add graceful stop and shutdown methods for Feeds\n  * Feature: Add ledger endpoint to Kraken Rest module, add ability to optionally filter by symbol, or all symbols, for historical trades\n  * Docs: Update documentation regarding adding a new exchange to custom_cryptofeed\n  * Bugfix: Reset delay after connection is successful\n  * Feature: yapic.json parses strings to datetimes automatically, no longer need to rely on Pandas for datetime parsing\n  * Bugfix: #491 - dictionary resized during iteration in ByBit\n  * Bugfix: #494 - added status argument to liquidations callback\n  * Bugfix: #399 - book delta issue with Kucoin and Gateio\n  * Feature: Binance Delivery candle support\n  * Feature: Binance US candle support\n  * Feature: Kraken Candle support\n  * Update: Remove deprecated channel mapping from Kraken, use channel name from message instead\n  * Bugfix: change Kraken Futures to use the standard symbol to be consistent with the rest of the library\n  * Update: use Kucoin v3 endpoint for orderbook snapshot (v2 deprecated).\n  * Update: Poloniex ticker message format update\n\n### 1.9.0 (2021-04-25)\n  * Bugfix: Fix Binance subscriptions when subscribing to more than one candle\n  * Feature: Remove support for Influx versions prior to 2.0\n  * Feature: Add stop method to HTTP Backends to gracefully drain queue and write pending data on shutdown\n  * Feature: Revamp InfluxDB code. Drop support for storing floating point as str, store book data as json blob\n  * Bugfix: Remove unused get_instrument calls in Deribit and Kraken Futures\n  * Feature: Revamp symbol generation and exchange info for Deribit and Kraken Futures\n  * Bugfix: Fix issue using AsyncFile callback to store raw data\n  * Testing: Add exchange tests for Deribit and Binance\n  * Bugfix: Fix symbol issue in Bitmex when initializing the orderbook\n  * Bugfix: Fix various issues with FTX, OKCOIN/OKX and Huobi symbol generation\n  * Testing: Overhaul exchange tests, all exchanges are now tested with real data. Fixed various bugs as a result of this testing. Revamped AsyncFileCallback.\n             Added new tool to generate test data for testing.\n  * Bugfix: Improve connection cleanup in AsyncConnection object\n  * Feature: Add support for user defined exception handling in FeedHandler\n  * Bugfix: Fix redis backends that can't handle None\n  * Bugfix: Connection exceptions being ignored in Feedhandler\n  * Bugfix: Binance address generation correction\n  * Bugfix: OKX symbol generation incorrect + validate symbols used for channels that dont support all types\n  * Breaking Change: Large rewrite of Feedhandler, Connection, and Feed. Many timeout related options moved from feedhandler to Feed. Symbol specific code\n                     moved to exchange class. Rewrite of raw data collection.\n  * Feature: Candle support for Huobi\n  * Feature: Allow user to specify Postgres port in Postgres backends\n  * Bugfix: Report base volume, not quote volume in Huobi candles\n  * Feature: Support for the KuCoin exchange\n\n### 1.8.2 (2020-04-02)\n  * Update to use alpha release of aioredis 2.0. Allows building of wheels again\n\n### 1.8.1 (2020-04-01)\n  * Bugfix: Add manifest file for source dist\n\n### 1.8.0 (2020-04-01)\n  * Bugfix: Init uvloop earlier so backends that use loop will not fail\n  * Docs: Remove FAQ, added performance doc section\n  * Bugfix: #404 - Use AsyncConnection object for Binance OI\n  * Feature: Rework how raw data is stored (when enabled). REST data can now be captured\n  * Feature: New feedhandler method, `add_feed_running` allows user to add feed to running instance of a feedhandler\n  * Feature: create_db defaults to False on InfluxDB backends\n  * Feature: Normalize Bitmex Symbols\n  * Update: Remove extraneous methods in feed objects used to query symbol information\n  * Feature: Use realtime ticker for Binance\n  * Bugfix: Bitmex symbols not being normalized correctly\n  * Bugfix: Fix GCP PubSub backend\n  * Bugfix: Fix historical data REST api for Bitmex\n  * Feature: Use separate tasks (fed by async queue) for backend writing. Redis now uses this method\n  * Bugfix: Allow user specified max depths on Kraken\n  * Feature: Add backend queue support to ZMQ backend\n  * Feature: Add backend queue support to Socket backends\n  * Feature: Add VictoriaMetrics support via backend\n  * Feature: Add backend queue support to influx and elastic\n  * Feature: Candle support\n  * Bugfix: Ignore untradeable symbols in Binance symbol generation\n  * Feature: Add backend support for queues in Postgres. Rework postgres backend and supply example SQL file to create tables for demo\n  * Bugfix: Fix ByBit symbol generation\n  * Feature: Authenticated channel support for OKX/OKCOIN\n  * Update: Poloniex changed signaure of ticker data\n  * Feature: Candles for Binance Futures\n  * Feature: Premium Index Candle support for Binance Futures\n  * Feature: Update Gateio to use new v4 websocket api. Adds support for candles\n  * Bugfix: Fix open interest on OKEx\n  * Bugfix: OKEx was duplicating subscriptions\n  * Breaking Change: Core callbacks (trade, candle, books, ticker, open interest, funding, liquidations, index) now use custom objects\n\n### 1.7.0 (2021-02-15)\n  * Feature: Use UVLoop if installed (not available on windows)\n  * Bugfix: Allow exchanges to customize their retry delays on error\n  * Feature: New demo code showing user loop management\n  * Feature: Handle more signals for graceful shutdown\n  * Bugfix: BinanceFutures message format change\n  * Feature: Missing sequence number on Coinbase will not reset all data streams, just the affected pair\n  * Feature: Use timestamp from exchange for L2 book data from Coinbase\n  * Bugfix: Blockchain exchange had incorrect timestamps, and incorrect log lines\n  * Bugfix: Wrong datatype in BackendFuturesIndexCallback\n  * Bugfix: Fix bad postgres callback for open_interest and futures_index\n  * Feature: Signal handler installation now optional, can be done separately. This will allow the feedhandler to be run from child threads/loops\n  * Bugfix: Fix binance delivery book ticker (message format change)\n  * Breaking change: Feed object `config` renamed `subscription`\n  * Feature: Configuration passed from feedhandler to exchanges\n  * Breaking change: Most use of `pair` and `pairs` changed to `symbol` and `symbols` to be more consistent with actual usage. pairs.py renamed to symbols.py\n  * Feature: Allow configuring the API KEY ID from Config or from environment variable\n  * Bugfix: Collisions in normalized CoinGecko symbols (this adds about 700 new symbols)\n  * Feature: Add candles function to coinbase\n  * Feature: Explain when custom_cryptofeed crashes during pairs retrieval\n  * Bugfix: BINANCE_DELIVERY Ticker use msg_type='bookTicker' as for the other BINANCE markets\n  * Feature: Support Bitmex authentication using personal API key and secret\n  * Feature: Print the origin of the configuration (filename, dict) for better developer experience\n  * Bugfix: Add guard against non-supported asyncio add_signal_handler() on windows platforms\n  * Feature: Simplify source code by standardization iterations over channels and symbols\n  * Bugfix: Remove remaining character \"*\" in book_test.py\n  * Bugfix: Fix return type of the function book_flatten()\n  * Feature: Shutdown multiple backends asynchronously, and close the event loop properly\n  * Bugfix: Repair the Bitfinex FUNDING\n  * Feature: Speedup the handling of Bitfinex messages by reducing intermediate mappings\n  * Feature: Support OKEx options\n  * Bugfix: Cancel the pending tasks to gracefully/properly close the ASyncIO loop\n  * Feature: Support for authenticated websocket data channels\n\n### 1.6.2 (2020-12-25)\n  * Feature: Support for Coingecko aggregated data per coin, to be used with a new data channel 'profile'\n  * Feature: Support for Whale Alert on-chain transaction data per coin, to be used with a new data channel 'transactions'\n  * Bugfix: Reset delay and retry for rest feed\n  * Feature: Add GCP Pub/Sub backend\n  * Bugfix: Fix aggregated callbacks (Renko and OHLCV) when used with exchanges that support order types\n  * Bugfix: Fix broken example/demo code\n  * Feature: New data channel - `futures_index` - demonstrated in ByBit\n  * Feature: Add stop callback when exiting loop, add stop method placeholder for base callbacks\n  * Bugfix: Fix NBBO callback\n  * Feature: Orderbook sequence number validation for HitBTC\n  * Feature: Kraken orderbook checksum support in Kraken\n  * Feature: KrakenFutures sequence number check added\n  * Feature: Add optional caching to postgres backend\n  * Feature: New Exchange - Binance Delivery\n  * Feature: Liquidation for OKX\n  * Bugfix: Adjust ping interval on websocket connection, some exchanges require pings more frequently\n  * Feature: Checksum validation for orderbooks on OKX and OKCoin\n  * Feature: Use rotating log handler\n  * Bugfix: Later versions of aiokafka break kafka backend\n  * Bugfix: Huobi sends empty book updates for delisted pairs\n  * Bugfix: Harden channel map usage in Kraken\n  * Feature: Config file support\n  * Bugfix: Subscribing to all BitMEX symbols gives 400 error - message too long\n  * Bugfix: Cleanup of code - fixed a few examples and resolved all outstanding flake8 issues\n  * Bugfix: Fix Bitfinex pair normalization\n  * Feature: Refactor connection handling. New connection design allows feeds to open multiple connections\n  * Feature: Update BitMax to use the new BitMax Pro API - includes sequence number verification on books\n  * Feature: Bybit - support for USDT perpetual data channels\n  * Feature: Can now configure more than 25 Bitfinex pair/channel combinations\n  * Feature: Support more than 200 pair/stream combinations on Binance from a single Feed\n  * Feature: Support for the bitFlyer exchange\n  * Feature: Update Kraken to work with very large numbers of trading pairs\n\n### 1.6.1 (2020-11-12)\n  * Feature: New kwarg for exchange feed - `snapshot_interval` - used to control number of snapshot updates sent to client\n  * Feature: Support for rabbitmq message routing\n  * Feature: Support for raw file playback. Will be useful for testing features and building out new test suites for custom_cryptofeed.\n  * Feature: Arctic library quota can be configured, new default is unlimited\n  * Feature: New exchange: Probit\n  * Bugfix: Correctly store receipt timestamp in mongo backend\n  * Bugfix: FTX - set a funding rate requests limit constant (10 requests per second, 60 seconds pause between loops)\n  * Bugfix: Open Interest data on FTX erroneously had timestamps set to None\n  * Update: Binance Jersey shutdown - feed removed\n  * Bugfix: Fixed open interest channel for Binance Delivery\n\n### 1.6.0 (2020-09-28)\n  * Feature: Validate FTX book checksums (optionally enabled)\n  * Bugfix: Subscribing only to open interest on Binance futures gave connection errors\n  * Feature: Authentication for Influxdb 1.x\n  * Feature: Override logging defaults with environment variables (filename and log level)\n  * Bugfix: For Coinbase L3 books need to ignore/drop some change updates (per docs)\n  * Bugfix: Obey rate limits when using Coinbase REST API to get L3 book snapshots\n  * Bugfix: Ignore auction updates from Gemini\n  * Feature: Add order type (limit/market) for Kraken Trades\n  * Feature: Exchange specific information available via info classmethod - contains pairs, data channels and tick size\n  * Feature: Funding data supported on HuobiSwap\n  * Bugfix: Fix broken mongo callbacks in backends\n\n### 1.5.1 (2020-08-26)\n  * Bugfix: #136 - Kraken Rate limiting\n  * Feature: Funding data on Binance Futures\n  * Bugfix: Support new Huobi tradeId field, old id field deprecated\n  * Bugfix: Unclear errors when unsupported data feeds used\n  * Bugfix: Handle order status messages more gracefully in Coinbase\n  * Bugfix: Fix Kraken pair mappings\n  * Feature: New Exchange - Gate.io\n  * Feature: Remove \\_SWAP, \\_FUTURE channel (and callback) types - determine correct type at subscribe time based on symbol\n  * Docs: Add documentation about callbacks\n  * Feature: Deribit provides sequence number for book updates - check them to ensure no messages lost\n  * Bugfix: Fix timestamp on Binance Futures Open Interest\n  * Bugfix: Update/standardize liquidation callbacks\n  * Feature: Update Upbit subscription methods based on updated docs\n  * Bugfix: Ticker not working correctly on Binance Futures\n  * Feature: Liquidations callbacks for backends\n\n### 1.5.0 (2020-07-31)\n  * Feature: New Exchange - FTX US\n  * Feature: Add funding data to rest library\n  * Bugfix: DSX updated their API, websocket no longer supported. Removing DSX\n  * Feature: Websocket client now uses unbounded message queue\n  * Feature: Support for HuobiDM next quarter contracts\n  * Bugfix: Fix datetime fields in elasticsearch\n  * Feature: BinanceFutures: support ticker, open interest and Liquidation, FTX: support open interest and liquidations, Deribit: liquidations support\n  * Bugfix: Fix receipt timestamps in Postgres backend\n  * Bugfix: Huobi Swap Init\n\n### 1.4.1 (2020-05-22)\n  * Feature: Support for disabling timeouts on feeds\n  * Bugfix: #224 Ignore newly added trading pairs in Poloniex while running\n  * Feature: New exchange, DSX\n  * Bugfix: Bybit updated their API, websocket subscription to L2 book data needed to be updated\n  * Bugfix: Deribit subscription condensed into a single message to avoid issues with rate limit\n  * Bugfix: Funding interval for bitmex not converted to integer\n  * Bugfix: HuobiSwap missing from feedhandler\n  * Feature: Optional flag on Feed to enable check for crossed books\n  * Feature: Blockchain Exchange\n\n### 1.3.1 (2020-03-17)\n  * Feature: Add missing update detection to orderbooks in Binance\n  * Feature: REST support for FTX\n  * Feature: Added new field, receipt timestamp, to all callbacks. This contains the time the message was received by custom_cryptofeed.\n  * Feature: Upbit Exchange Support\n\n### 1.3.0 (2020-02-11)\n  * Bugfix: Enabling multiple symbols on Bitmex with deltas and max depth configured could cause crashes.\n  * Bugfix: Default open interest callback missing\n  * Change: Mongo backend stores book data in BSON\n  * Feature: Open Interest callbacks added to all backends\n  * Change: Instrument removed in favor of open interest\n  * Bugfix: Huobi feedhandlers not properly setting forced indicator for book updates, breaking deltas\n  * Bugfix: Some Kraken futures funding fields not always populated\n  * Feature: Open interest updates for Kraken futures\n  * Feature: Open interest updates for Deribit\n  * Bugfix: FTX ticker can have Nones for bid/ask\n  * Feature: InfluxDB 2.0 support\n  * Bugfix: Deribit funding only available on perpetuals\n  * Feature: Enable deltas (with out max depth) on exchanges that do not support them\n\n### 1.2.0 (2020-01-18)\n  * Feature: New exchange: Binance Futures\n  * Feature: New Exchange: Binance Jersey\n  * Feature: Funding data on Kraken Futures\n  * Feature: User defined pair separator (default still -)\n  * Feature: Postgres backend\n  * Feature: Deribit Funding\n  * Bugfix: Deribit subscriptions using config subscribed to symbols incorrectly\n  * Bugfix: Some RabbitMQ messages were missing symbol and exchange data\n  * Feature: Open interest data for OKX swaps\n\n### 1.1.0 (2019-11-14)\n  * Feature: User enabled logging of exchange messages on error\n  * Refactor: Overhaul of backends - new base classes and simplified code\n  * Bugfix: Handle i messages from poloniex more correctly\n  * Bugfix: Report bittrex errors correctly\n  * Feature: New exchange: Bitcoin.com\n  * Feature: New exchange: BinanceUS\n  * Feature: New exchange: Bitmax\n  * Feature: Ability to store raw messages from exchanges\n\n### 1.0.1 (2019-09-30)\n  * Feature: Backfill Bitmex historical trade data from S3 Bucket\n  * Feature: RabbitMQ backend\n  * Feature: Custom Depth and deltas for all L2 book updates\n  * Feature: Support new 100ms book diff channel on Binance\n  * Feature: Bittrex exchange support\n  * Feature: Ticker support in Redis and Kafka Backends\n  * Feature: Ticker callbacks require/contain timestamp\n  * Feature: Renko Aggregation\n  * Bugfix: Max Depth without deltas should only send updates when book changes\n  * Bugfix: Update count and previous book now associated with pair\n\n### 1.0.0 (2019-08-18)\n  * Bugfix #113: Fix remaining exchanges who are not reporting timestamps correctly\n  * Feature: Generated timestamps now based on message receipt by feedhandler\n  * Feature: Multi-callback support\n  * Feature: Rework ZMQ using pub/sub with topics\n  * Feature: FTX Exchange\n  * Feature: Gemini subscriptions now work like all other exchanges\n  * Feature: Use unique id for each feed (as opposed to feed id/name)\n  * Bugfix: fix Poloniex historical trade timestamps\n  * Bugfix: Bitmex L2 channel incorrectly classified\n  * Feature: Kraken Futures\n  * Feature: Redis backend supports UDS\n  * Feature: Binance full book (L2) with deltas\n  * Feature: Allow user to start event loop themselves (potentially scheduling other tasks before/after).\n\n### 0.25.0 (2019-07-06)\n  * Feature: Rest Endpoints for Historical Deribit data\n  * Feature: Specify numeric datatype for InfluxDB\n  * Bugfix: Greatly improve performance of book writes for InfluxDB\n  * Feature: Bybit exchange support\n  * Bugfix: Deribit now returning floats in decimal.Decimal\n  * Feature: Elastic Search backend\n\n### 0.24.0 (2019-06-19)\n  * Bugfix: Book Delta Conversion issue in backends\n  * Bugfix: Tweak BitMEX rest API to handle more errors more gracefully\n  * Feature: Deribit Exchange support\n  * Feature: Instrument channel\n  * Bugfix: support Kraken websocket API changes\n  * Bugfix: correct USDT symbol mappings for Bitfinex\n  * Bugfix: Fixed mongo book backend\n  * Feature: Book delta support for mongo, sockets, ZMQ\n\n### 0.23.0 (2019-06-03)\n  * Feature: Book delta support for InfluxDB\n  * Feature: Swaps on OkEX\n\n### 0.22.2 (2019-05-23)\n  * Bugfix: Fix tagging issue in InfluxDB\n  * Bugfix: Fix book updates in InfluxDB\n  * Feature: Book delta support in Redis backends\n  * Feature: Book delta support in Kafka backend\n\n### 0.22.1 (2019-05-19)\n  * Feature: Cleanup callback code\n  * Feature: Poloniex subscription now behaves like other exchanges\n  * Feature: Kafka Backend\n\n### 0.22.0 (2019-05-04)\n  * Bugfix: Timestamp normalization for backends were losing subsecond fidelity\n  * Feature: All exchanges report timestamps in floating point unix time\n  * Bugfix: Implement change in OkEx's trading pair endpoint for pair generation\n\n### 0.21.1 (2019-04-28)\n  * Feature: Config support for Coinbene, Binance, EXX, BitMEX, Bitfinex, Bitstamp, HitBTC\n  * Feature: Complete clean up of public REST endpoints\n  * Feature: Improved book delta example\n  * Feature: Bitstamp Websocket V2 - L3 books now supported\n  * Bugfix: Incorrect book building in Kraken\n\n### 0.21.0 (2019-04-07)\n  * Bugfix: Coinbase L3 Book would get in cycle of reconnecting due to missing sequence numbers\n  * Feature: Kraken L2 Book Deltas\n  * Feature: Book deltas streamlined and retain ordering\n  * Feature: OKCoin exchange support\n  * Feature: OKEx exchange support\n  * Feature: Coinbene exchange support\n  * Feature: Support Huobi Global and Huobi USA\n\n### 0.20.2 (2019-03-19)\n  * Bugfix: Kraken REST API using wrong symbol for trades\n  * Feature: Complete work on standardizing Bitfinex rest API\n  * Bugfix: Allow index symbols on Bitmex\n\n### 0.20.1 (2019-02-16)\n  * Feature: Trades sides are now labeled as Buy / Sell instead of Bid / Ask.\n  * Feature: Support for the Huobi exchange\n  * Bugfix: Change how exchange pairs are mapped for REST module - only map exchanges that are used\n  * Bugfix #67: Ensure all trades report the taker's side\n\n### 0.20.0 (2019-02-04)\n  * Feature #57: Write updates directly to MongoDB via new backend support\n  * Feature #56: Experimental support for fine grained configuration per exchange\n  * Feature #58: Support Kraken websocket API\n  * Feature: Only generate trading pair conversions for configured exchanges\n  * Feature: Historical trade data on REST API for Kraken\n\n### 0.19.2 (2019-01-21)\n  * Feature #55: OHLCV aggregation method in backends plus support for user defined aggregators\n  * Feature: EXX exchange support\n\n### 0.19.1 (2019-01-11)\n  * Bugfix: Poloniex logging had bug that prevented reconnect on missing sequence number\n\n### 0.19.0 (2019-01-10)\n  * Feature #50: Support multiple streams per websocket connection on Binance\n  * Bugfix #51: Fix pairs on streams in Binance\n\n### 0.18.0 (2018-12-15)\n  * Feature: InfluxDB support via backend\n  * Feature: Aggregation backend wrappers\n  * Bugfix: BookDelta callback no longer needs to be an instance of BookUpdateCallback\n  * Bugfix: REST module was creating duplicate log handlers\n  * Bugfix: Bitfinex REST now properly handles cases when there are more than 1000 updates for a single tick\n\n### 0.17.4 (2018-11-17)\n  * README change for long description rendering issue\n\n### 0.17.3 (2018-11-17)\n  * Feature #41: Rework trading pairs to generate them dynamically (as opposed to hard coded)\n  * Feature: When book depth configured Redis, ZMQ and UDP backends only report book changes when changed occurred in\n             depth window\n  * Feature: TCP socket backend support\n  * Feature: UDS backend support\n\n### 0.17.2 (2018-11-03)\n  * Bugfix #45: Bitstamp prices and sizes in L2 book are string, not decimal.Decimal\n  * Feature: Binance support\n\n### 0.17.1 (2018-10-19)\n  * Bugfix #43: Coinbase L2 book used \"0\" rather than 0 for comparisons against decimal.Decimal\n  * Feature: REST feed market data supported via normal subscription methods\n  * Feature: Kraken support\n  * Bugfix: Bitfinex book timestamps match expected Bitfinex timestamps (in ms)\n\n### 0.17.0 (2018-10-13)\n  * Feature: Timestamps for orderbooks and book deltas\n  * Feature #40: NBBO now uses best bid/ask from L2 books\n  * Feature #28: GDAX now renamed Coinbase and uses Coinbase endpoints\n  * Feature: ZeroMQ backend. Write updates directly to ZMQ connection\n  * Feature: UDP Socket backend. Write updates directly to UDP socket\n\n### 0.16.0 (2018-10-4)\n  * Feature: L2 books are now all price aggregated amounts, L3 books are price aggregated orders\n  * Book deltas supported on all feeds\n  * Bugfix: Fix NBBO feed\n\n### 0.15.0 (2018-09-29)\n  * Feature: GDAX/Coinbase rest support - trades, order status, etc\n  * Feature: Arctic backend, supports writing to arctic directly on trade/funding updates\n  * Bugfix: #36 Update poloniex to use new trading pairs and handle sequence numbers\n  * Bugfix: Improve Bitfinex orderbooks and handle sequence numbers\n  * Bugfix: GDAX and Bitmex orderbook and logging improvements\n\n### 0.14.1 (2018-09-14)\n  * Added some docstrings\n  * Feature: Add exchanges by name to feedhandler. Easier to instantiate a feedhandler from config\n  * Logging improvements\n  * Bugfix: non-gathered futures were suppressing exceptions when multiple feeds are configured. Changed to tasks\n  * Redis backend uses a connection pool\n\n### 0.14.0 (2018-09-04)\n  * Feature: support for writing order books directly to Redis\n  * Feature: ability to specify book depth for Redis updates\n\n### 0.13.3 (2018-08-31)\n  * Feature: normalize Bitfinex funding symbols\n\n### 0.13.2 (2018-08-31)\n  * Bugfix: fix symbol in Bitfinex rest\n\n### 0.13.1 (2018-08-31)\n  * Feature: access rest endpoints via getitem / []\n  * Bugfix: #31 - funding channel broke Gemini\n  * Feature: Book deltas for GDAX\n  * Bugfix: Fix intervals on Bitmex (rest)\n\n### 0.13.0 (2018-08-22)\n  * Feature: Funding data from Bitmex on ws\n  * Feature: Funding historical data via rest\n  * Bugfix: Python 3.7 compatibility\n  * Feature: Rest trade APIs are now generators\n  * Feature: funding data on Bitfinex - ws and rest\n\n### 0.12.0 (2018-08-20)\n  * Bugfix: Handle 429s in Bitmex (REST)\n  * Feature: Redis backend for trades to write updates directly to Redis\n  * Bugfix: issue #27 - Bitmex trades missing timestamps\n\n### 0.11.1 (2018-08-18)\n  * Bitfinex and Bitmex historical trade data via REST\n  * Bugfix: interval incorrect for rest time ranges\n  * Bugfix: lowercase attrs in Rest interface\n\n### 0.11.0 (2018-08-05)\n  * Feature: Support for delta updates for order books\n  * REST API work started\n\n### 0.10.2\n  * Bugfix: Clear data structures on reconnect in bitmex\n  * Feature: Support reconnecting on more connection errors\n  * Feature: Timestamp support on trade feeds\n  * Feature: Connection watcher will terminate and re-open idle connections\n\n### 0.10.1 (2018-5-11)\n  * Feature: Reconnect when a connection is lost\n  * Bugfix #22: Check for additional connection failures\n  * Feature #4: Trade ID support\n  * Feature: Account for new Gemini message type\n\n### 0.10.0 (2018-03-18)\n  * Feature: Bitmex\n\n### 0.9.2 (2018-03-13)\n  * Bugfix #10: Change from float to decimal.Decimal in GDAX\n  * Feature #5: use sorted dictionaries for order books\n  * Feature #17: logging support\n  * Bugfix: Gemini order books now work\n  * Bugfix: All json floats parsed to Decimal\n  * Bugfix: Fix Bitstamp pair parsing\n  * Feature: Major clean up of channel, exchange, and trading pair names\n\n### 0.9.1 (2018-01-27)\n  * Bugfix #4: produce ticker from trades channel on GDAX\n  * Feature: Bitstamp feed\n\n### 0.8.0 (2018-01-07)\n  * Feature: HitBTC feed\n  * Feature: Poloniex Orderbook support\n\n### 0.6.0 (2018-01-02)\n  * Feature: Gemini Feed\n\n### 0.5.0 (2018-01-02)\n  * Initial release: GDAX, Poloniex, Bitfinex Support\n  * Feature: NBBO support",
    "bugtrack_url": null,
    "license": "XFree86",
    "summary": "Cryptocurrency Exchange Websocket Data Feed Handler",
    "version": "0.0.1",
    "split_keywords": [
        "cryptocurrency",
        "bitcoin",
        "btc",
        "feed handler",
        "market feed",
        "market data",
        "crypto assets",
        "trades",
        "tickers",
        "bbo",
        "funding",
        "open interest",
        "liquidation",
        "order book",
        "bid",
        "ask",
        "fmfw.io",
        "bitfinex",
        "bitflyer",
        "ascendex",
        "bitstamp",
        "bittrex",
        "blockchain.com",
        "bybit",
        "binance",
        "binance delivery",
        "binance futures",
        "binance us",
        "bitmex",
        "coinbase",
        "deribit",
        "exx",
        "ftx",
        "ftx us",
        "gate.io",
        "gemini",
        "hitbtc",
        "huobi",
        "huobi dm",
        "huobi swap",
        "kraken",
        "kraken futures",
        "okcoin",
        "okx",
        "poloniex",
        "probit",
        "upbit"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "692d49d7e6a49e9b768946c630318af192df1ebc1dd0cfe4bb0629473af57cb8",
                "md5": "98b96fdaceab0f700e703696d01e2817",
                "sha256": "171a28edf03506026cbcdd4d2be4c85e4b878e18218220976047e14a7ef594f7"
            },
            "downloads": -1,
            "filename": "custom_cryptofeed-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "98b96fdaceab0f700e703696d01e2817",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 394773,
            "upload_time": "2023-01-10T11:44:17",
            "upload_time_iso_8601": "2023-01-10T11:44:17.175512Z",
            "url": "https://files.pythonhosted.org/packages/69/2d/49d7e6a49e9b768946c630318af192df1ebc1dd0cfe4bb0629473af57cb8/custom_cryptofeed-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-01-10 11:44:17",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "lcname": "custom-cryptofeed"
}
        
Elapsed time: 0.15464s