Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Pull request Compare This branch is 1 commit ahead, 2 commits behind sakhnyuk:master.
Latest commit 8061a5f Jun 5, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
js fixed clg Jun 3, 2019
README.md Init commit May 21, 2019
contributing.md

README.md

Websocket Crypto Api

API for getting public and private data from exchanges

A JavaScript library for connecting to realtime public APIs on all cryptocurrency exchanges.

Usage

Install websocket-crypto-api

npm install websocket-crypto-api

Create a new client for an exchange. And use class methods as below.

import webca from 'websocket-crypto-api'

const exchangeName = 'binance'
const webca = new webca[exchangeName]()

Public methods

subscribe to Klines, Trades and Orderbook just as

webca.onKline(pair, data => {
  console.log(data)
});
webca.onDepthUpdate(pair, data => {
  console.log(data)
});
webca.onTrade(pair, data => {
  console.log(data)
});

and unsubscribe

webca.closeKline();
webca.closeOB();
webca.closeTrade();

Then we have some getters.

webca.getPairs()
webca.getKline(pair, resolution, from, to)
webca.getExchangeConfig()

Private methods

All private methods requires api keys and some args.. All other args are required.

webca.getBalance({ apiKey, apiSecret })
webca.getClosedOrders({ apiKey, apiSecret }, { pair })
webca.getOpenOrders({ apiKey, apiSecret })
webca.cancelOrder({ apiKey, apiSecret }, { pair, orderId })
// stopPx and trailValue not required for not stopLoss-takeProfit type of order
// and price isn't required for market orders
webca.createOrder({ apiKey, apiSecret }, { type, pair, side, volume, price, stopPx, trailValue }) 
// by status 'open' 'closed' or certain orderId you can filter orders you want to get
webca.getAllOrders({ apiKey, apiSecret }, { pair, status, orderId })
webca.getPositions({ apiKey, apiSecret }, { pair })
webca.setLeverage({ apiKey, apiSecret }, { pair, leverage })

Response shapes

All methods but getExchangeConfig() returns a promise.

Order has the below shape, createOrder, cancelOrder, getClosedOrders, getOpenOrders, getAllOrders. And they all returns array of orders.

  const order = {
    amount: 12,
    cost: 68124,
    executed: 12,
    fee: {
      symbol: 0,
      value: 0,
    },
    filled: 100,
    id: '3cf2db6d-b753-84c3-b875-1caf7e30c600',
    lastTradeTimestamp: 1557112199157,
    price: 5677,
    remaining: 0,
    side: 'sell',
    status: 'close',
    stopPx: null,
    symbol: 'XBT/USD',
    timestamp: 1557112199157,
    trailValue: null,
    type: 'MarginalMarket',
  };

Position has following shape. getPositions and setLeverage currently returns array of positions.

  const position = {
    amount: -12,
    crossMargin: true,
    isOpen: true,
    leverage: 100,
    liquidationPrice: 100000000,
    margin: 0.00002315,
    markPrice: 7265.52,
    price: 5677,
    realisePNL: 0.00001191,
    roe: -21.862,
    symbol: 'XBT/USD',
    total: 0.00165168,
    unrealisePNL: -0.00046212,
  }

Balances:

//exchange field for exchange balance and trading for margin.
  const balances = {
    exchange: {
      BTG: { coin: 'BTG', free: 0.00000174, used: 0, total: 0.00000174 },
      LTC: { coin: 'LTC', free: 0.00147187, used: 0, total: 0.00147187 },
      USD: { coin: 'USD', free: 168.6457295, used: 0, total: 168.6457295 },
      ZEC: { coin: 'ZEC', free: 0.10597299, used: 0, total: 0.10597299 },
    },

    trading: {
      USD: { coin: 'USD', free: 12, used: 0, total: 12 },
    },
  };

Pair:

  const pair = {
    base: 'BNB',
    high: 0.00357,
    low: 0.00316,
    maxLeverage: 0,
    price: 0.00317,
    priceChangePercent: -9.169,
    quote: 'ADA',
    symbol: 'ADA/BNB',
    tickSize: 0,
    volume: 60736.14907,
  };

Kline:

[
      {
        close: 7915.74,
        high: 7934.68,
        low: 7910,
        open: 7932.99,
        time: 1558025880000,
        volume: 37.879134,
      },
]

exchangeConfig:

      margin: {
        isActive: true,
        componentList: ['position', 'open', 'history', 'balance'],
        orderTypes: [
          'MarginalLimit',
          'MarginalMarket',
          'MarginalStopMarket',
          'MarginalStopLimit',
          'MarginalTakeLimit',
          'MarginalTakeMarket',
          'MarginalTrailingStop'
        ]
      },
      exchange: {
        isActive: false
      },
      intervals: {
      '1': '1m',
      '5': '5m',
      '60': '1h',
      '1D': '1d'
      }

data from onTrade:

      const trade = {
        amount: 0.001505,
        exchange: 'binance',
        id: 123470260,
        price: 7279.61,
        side: 'sell',
        symbol: 'BTCUSDT',
        timestamp: 1558085158203,
      };

data from onDepthUpdate:

      const update = {
        asks: [[7285.37, 0.001594], [7285.38, 0.051328], [7285.39, 0], [7285.4, 0.132504]],
        bids: [[7285.38, 0.051328], [7285.39, 0]],
      };

Supported exchanges

Exchange Public data (charting) Exchange trading Margin trading
Binance not supported
BitMEX
Bitfinex
CryptoBridge not supported
HitBTC
OKex
Poloniex
Crex24 not supported

Plans

  • Addding new exchanges, trade and margin support for existing exchnages
  • Adding new order types
  • Testing return shapes of all methods

Contributing

Thanks for your interest in contributing! You can find pull request process and our code of conduct here: https://github.com/oneexbit/websocket-crypto-api/blob/master/contributing.md

You can’t perform that action at this time.