Ccxtex 0.2 released: Elixir/Erlang interop with Ccxt library

in utopian-io •  4 months ago


I've released Ccxtex 0.2, an F/LOSS library for Elixir/Erlang interoperability with python version of ccxt library. Ccxt provides an unified API for querying for historical/ recent data and trading operations for multiple cryptocurrency exchanges including GDAX, Bitfinex, Poloniex, Binance and others.

Ccxtex provides access to open/high/low/close/volume data, latest tickers and markets for more than 100 exchanges.

Ccxtex repo and docs

Changelog (v0.1 to v0.2)

  • added exchanges supervisor to start an Erlport process for every exchanges that enables concurrency while fetching data from exchange APIs
  • added seamless routing of calls to the corresponding exchange erlport process by default
  • improved usability of function calls that now do not require a pid argument
  • added specs to the all public functions
  • updated docs to match latest features
  • minor fixes and improvements

Release commits

Installation

Elixir

def deps do
  [
    {:ccxtex, github: "cyberpunk-ventures/ccxtex"}
  ]
end

Python

You need Python 3 and ccxt python package installed for this module to work.

To install ccxt use pip3 install ccxt

Python interoperability

To provide querying of APIs in parallel and ease of per-exchange configuration, Ccxtex application includes a supervisor that starts and monitors an Erlport process and Python process for every exchange. Be mindful about the required system resources.

Status and roadmap

Ccxtex is usable, but is under active development, API is unstable and will change. Some exchanges do not support all methods/require CORS/have other esoteric requirements. Please consult ccxt documentation for more.

Public APIs in progress

  • [x] fetch_ticker
  • [x] fetch_ohlcv
  • [x] fetch_exchanges
  • [x] fetch_markets
  • [ ] fetch_trades
  • [ ] fetch_order_book
  • [ ] fetch_l2_order_book

Developer experience improvements

  • [ ] unified public API call option structs
  • [ ] investigate alternative parallelism/concurrency implementation
  • [ ] capture exceptions generated by ccxt python library and convert to elixir success tuples
  • [ ] improve general usability of library

Private APIs implementation and authentication are under consideration

Examples

Default process id (@pid) is Ccxtex.Port. You can always start and use another process with Ccxtex.Port.start_link/2

Fetch exchanges

Usage:
exchanges = Ccxtex.fetch_exchanges()

[
...
%{
has: %{
  cancel_order: true,
  cancel_orders: false,
  cors: false,
  create_deposit_address: true,
  create_limit_order: true,
  create_market_order: false,
  create_order: true,
  deposit: false,
  edit_order: true,
  fetch_balance: true,
  fetch_closed_orders: "emulated",
  fetch_currencies: true,
  fetch_deposit_address: true,
  fetch_funding_fees: false,
  fetch_l2_order_book: true,
  fetch_markets: true,
  fetch_my_trades: true,
  fetch_ohlcv: true,
  fetch_open_orders: true,
  fetch_order: "emulated",
  fetch_order_book: true,
  fetch_order_books: false,
  fetch_orders: "emulated",
  fetch_ticker: true,
  fetch_tickers: true,
  fetch_trades: true,
  fetch_trading_fees: true,
  private_api: true,
  public_api: true,
  withdraw: true
},
id: "poloniex",
timeout: 10000
}
]

Fetch ticker

Usage:

exchange = "bitstamp"
symbol = "ETH/USD"
ticker = Ccxtex.fetch_ticker(exchange, symbol)

Return value example:

%{
ask: 577.35,
ask_volume: nil,
average: nil,
base_volume: 73309.52075575,
bid: 576.8,
bid_volume: nil,
change: nil,
close: 577.35,
datetime: "2018-05-24T14:06:09.000Z",
high: 619.95,
info: %{
  ask: "577.35",
  bid: "576.80",
  high: "619.95",
  last: "577.35",
  low: "549.28",
  open: "578.40",
  timestamp: "1527170769",
  volume: "73309.52075575",
  vwap: "582.86"
},
last: 577.35,
low: 549.28,
open: 578.4,
percentage: nil,
previous_close: nil,
quote_volume: 42729187.26769644,
symbol: "ETH/USD",
timestamp: 1527170769000,
vwap: 582.86
}

Fetch OHLCV

Usage:

exchange = "bitstamp"
symbol = "ETH/USD"
ticker = Ccxtex.fetch_ticker(exchange, symbol)

Return value example:

%{
base: "ETH",
base_volume: 4234.62695691,
close: 731.16,
exchange: "bitfinex2",
high: 737.07,
low: 726,
open: 736.77,
quote: "USDT",
timestamp: ~N[2018-01-01 00:00:00.000]
}

(*`□)<炎炎炎炎

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Thank you for your contribution.

Your contribution has been evaluated according to Utopian policies and guidelines, as well as a predefined set of questions pertaining to the category.

To view those questions and the relevant answers related to your post, click here.


Need help? Write a ticket on https://support.utopian.io/.
Chat with us on Discord.
[utopian-moderator]

Hey @ontofractal
Thanks for contributing on Utopian.
We’re already looking forward to your next contribution!

Want to chat? Join us on Discord https://discord.gg/h52nFrV.

Vote for Utopian Witness!