/ecbt

Primary LanguageRustBSD 2-Clause "Simplified" LicenseBSD-2-Clause

ecbt(Exchange Connect Base Tool)

CI status CI status License Crates.io Minimum rustc version Join at Slack

High performance cryptocurrency trading API with support for user defined networking.

  • Based on Rust, memory safe by default.
  • Support for websockets and user defined networking.
  • Easy to add support for additional exchanges.

License

BSD 2-Clause License

Usage

Add dependencies in Cargo.toml:

[dependencies]
ecbt = "0.1"
ecbt-exchange = "0.1"
ecbt-binance = "0.1"
tokio = { version = "1", features = ["full"] }

HTTP

use std::borrow::Borrow;

use ecbt::{
    prelude::{
        market_pair::{Currency, MarketPair},
        GetPriceTickerRequest,
    },
    Ecbt,
};
use ecbt_binance::{Binance, BinanceParameters};
use ecbt_exchange::ExchangeMarketData;

#[tokio::main]
async fn main() {
    let ecbt = Ecbt::http::<Binance>(BinanceParameters::sandbox())
        .await
        .unwrap();
    let request = GetPriceTickerRequest {
        market_pair: MarketPair(Currency::ETH, Currency::USDT),
    };
    let s = ecbt.get_price_ticker(request.borrow()).await.unwrap();
    println!("{:?}", s);
}

WebSocket

use ecbt::{
    prelude::{
        market_pair::{Currency, MarketPair},
        websocket::{EcbtWebSocketMessage, Subscription, WebSocketResponse},
        ExchangeStream,
    },
    Ecbt,
};
use ecbt_binance::{BinanceParameters, BinanceWebsocket};

#[tokio::main]
async fn main() {
    let ecbt = Ecbt::ws::<BinanceWebsocket>(BinanceParameters::sandbox())
        .await
        .unwrap();
    let market = MarketPair(Currency::ETH, Currency::BTC);

    ecbt.subscribe(Subscription::OrderBookUpdates(market), move |m| {
        let r = m.as_ref();

        if let Ok(WebSocketResponse::Generic(EcbtWebSocketMessage::OrderBook(order_book))) = r {
            println!("{:?}", order_book)
        } else if let Err(err) = r {
            println!("{:#?}", err);
        }
    })
    .await
    .expect("Failed to subscribe to orderbook on Binance");

    std::thread::sleep(std::time::Duration::from_millis(5000));
}

Contributions

Because there are many exchanges, if ecbt has not been implemented, you may need to implement it yourself.

Contact Us

Contact or join us @oss-jtyd.

WIP

  • Project Skeleton
  • Binance support
  • Nash support
  • Huobi support
  • Coinbase support
  • Apifiny support
  • Okex support
  • FTX support