Skip to content
This repository has been archived by the owner on Feb 10, 2022. It is now read-only.
/ crypto-exporter Public archive

A prometheus exporter capable of connecting to multiple exchanges and getting account balances and exchange rates

License

Notifications You must be signed in to change notification settings

ix-ai/crypto-exporter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crypto-exporter

Pipeline Status Docker Stars Docker Pulls Docker Image Version (latest) Docker Image Size (latest) Gitlab Project

Prometheus exporter, written in python, for different crypto exchanges

Archive Notice

Please note that this software is no longer maintained and will no longer receive any updates.

Documentation

Warning: This documentation applies for version v1.x.x.

Note: Please open any issues or pull/merge requests in GitLab.

Check out the docs/ folder.

Contributing

Please read how to contribute and the code of conduct.

Features

The crypto-exporter generates three sets of metrics. You can also get only the account_balance for off-exchange accounts (see: Off-Exchange Balances)

exchange_rate

The exchange rates for the symbols traded. Use this to get the tickers.

Example:

# HELP exchange_rate Current exchange rates
# TYPE exchange_rate gauge
exchange_rate{currency="BTC",exchange="bitfinex",reference_currency="USD"} 9386.9
exchange_rate{currency="LTC",exchange="bitfinex",reference_currency="USD"} 70.256
exchange_rate{currency="LTC",exchange="bitfinex",reference_currency="BTC"} 0.007498
exchange_rate{currency="ETH",exchange="bitfinex",reference_currency="USD"} 182.59
exchange_rate{currency="ETH",exchange="bitfinex",reference_currency="BTC"} 0.019445
exchange_rate{currency="ETC",exchange="bitfinex",reference_currency="BTC"} 0.0012486
exchange_rate{currency="ETC",exchange="bitfinex",reference_currency="USD"} 11.712
exchange_rate{currency="RRT",exchange="bitfinex",reference_currency="USD"} 0.0234

Account balance

Warning: To see the account balance, authentication is mandatory.

Example:

# HELP account_balance Account Balance
# TYPE account_balance gauge
account_balance{account="total",currency="XRP",exchange="kraken"} 279.39357642
account_balance{account="total",currency="XLM",exchange="kraken"} 14.0003552
account_balance{account="total",currency="ETH",exchange="kraken"} 9.29332537

Transaction totals

Warning To see the totals, authentication is mandatory.

Example:

# HELP transactions_total The transaction history for an account
# TYPE transactions_total gauge
transactions_total{currency="XLM",exchange="coinbase",reference_currency="EUR",type="trade"} -60.0
transactions_total{currency="XRP",exchange="coinbase",reference_currency="EUR",type="trade"} -50.0
transactions_total{currency="LTC",exchange="coinbase",reference_currency="EUR",type="trade"} -108.18
transactions_total{currency="ETH",exchange="coinbase",reference_currency="EUR",type="trade"} 149.5100000000007
transactions_total{currency="BTC",exchange="coinbase",reference_currency="EUR",type="trade"} -1639.779999999999

See also ENABLE_TRANSACTIONS

Usage

docker run --rm -it -p 9999:9999 \
  -e EXCHANGE="coinbasepro" \
  -e NONCE="seconds" \
  -e API_KEY="your_api_key" \
  -e API_SECRET="your_api_secret" \
  -e API_PASS="your_api_password" \
  -e REFERENCE_CURRENCIES="USD,EUR" \
  -e SYMBOLS="LTC/BTC,ETH/BTC" \
  -e GELF_HOST="graylog" \
  -e GELF_PORT="2201" \
  -e LOGLEVEL=DEBUG \
  -e PORT=9999 \
  --name coinbasepro-exporter \
  registry.gitlab.com/ix.ai/crypto-exporter:latest

Supported variables

Variable Default Mandatory Description
EXCHANGE - YES See below Tested exchanges
API_KEY - NO Set this to your Exchange API key
API_SECRET - NO Set this to your Exchange API secret
API_PASS - NO Only needed for certain exchanges (like coinbasepro)
API_UID - NO Only needed for certain exchanges (like cex)
NONCE milliseconds NO Some exchanges (looking at you, coinbasepro) don't support nonce in milliseconds, but want seconds
ENABLE_TICKERS true NO Set this to anything else in order to disable retrieving the ticker rates
ENABLE_TRANSACTIONS false NO Set this to true in order to enable retrieving the transaction totals. See also below ENABLE_TRANSACTIONS
DISABLE_FETCH_TICKERS false NO Set this to true in order to use the slower method for fetching the tickers instead. See also Multiple Tickers For All Or Many Symbols
SYMBOLS - NO See below for explanation (SYMBOLS and REFERENCE_CURRENCIES)
REFERENCE_CURRENCIES - NO See below for explanation (SYMBOLS and REFERENCE_CURRENCIES)
DEFAULT_EXCHANGE_TYPE - NO Some exchanges support multiple types (for example: binance supports future). You can set this here
TIMEOUT 10 NO Timeout in seconds for each request sent to an exchange API
LOGLEVEL INFO NO Logging Level. Additionally, you can specify TRACE for a really verbose logging
GELF_HOST - NO If set, the exporter will also log to this GELF capable host on UDP
GELF_PORT 12201 NO Ignored, if GELF_HOST is unset. The UDP port for GELF logging
PORT 9188 NO The port for prometheus metrics

Note: Look at Off-Exchange Balances for additional supported environment variables.

SYMBOLS and REFERENCE_CURRENCIES

Since not all exchanges support getting the ticker with one request (coinbase, coinbasepro, bitstamp), crypto-exporter has to request for every traded pair the exchange rate. This takes a lot of time, especially if there are a lot of pairs traded (>50 minutes for one run with coinbase).

If you're only interested in a subset of those trade pairs, you can:

  • set REFERENCE_CURRENCIES to a comma separated list of currencies, for which to retrieve all exchange rates (for example: EUR,USD)
  • set SYMBOLS to a comma separated list of pairs (for example: BTC/EUR,BTC/USD,ETH/EUR,ETH/USD) and all the other pairs will be ignored

The two variables are cumulative. If you set both, for example REFERENCE_CURRENCIES=EUR and SYMBOLS=BTC/USDT, you will get the results for all trading pairs for EUR and BTC/USDT.

ENABLE_TRANSACTIONS

Note This metric is gathered for all the individual accounts that are found. If the exchange created a lot of currency accounts for you, it will take a while to query all

This metric can be interpreted as follows (from the example above):

transactions_total{currency="XRP",exchange="coinbase",reference_currency="EUR",type="trade"} -50.0
transactions_total{currency="ETH",exchange="coinbase",reference_currency="EUR",type="trade"} 149.5100000000007
transactions_total{currency="EUR",exchange="kraken",reference_currency="XLM",type="trade"} -596.117
transactions_total{currency="XLM",exchange="kraken",reference_currency="EUR",type="trade"} 69.14959999999999
  • When looking at the sum of all XRP/EUR transactions, -50 EUR profit was made. So, more Euros were lost by buying XRP than were made by selling
  • When looking at the sum of all ETH/EUR transactions, 149.51 EUR profit were made. So, more Euros were gained by selling ETH than were made by buying

This option is disabled by default, since there aren't many exchanges that support it and it increases the time, by querying the exchange. So far, it has been tested successfully with coinbase and kraken.

Tested exchanges

  • coinbase
  • coinbasepro
  • kraken
  • binance
  • liquid
  • poloniex
  • bitfinex
  • cex

Limited tests (without API credentials) have been done with:

  • bitstamp
  • hitbtc

All other exchanges supported by ccxt should work as well, however they are untested.

Tags and Arch

Starting with version v0.5.1, the images are multi-arch, with builds for amd64, arm64, armv7 and armv6.

  • vN.N.N - for example v0.5.0
  • latest - always pointing to the latest version
  • dev-master - the last build on the master branch

Resources: