Skip to content

Latest commit

 

History

History
executable file
·
244 lines (203 loc) · 5.76 KB

README.md

File metadata and controls

executable file
·
244 lines (203 loc) · 5.76 KB

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