@jmparsons/ccxt
Version:
A JavaScript / Python / PHP cryptocurrency trading library with support for 100+ exchanges
156 lines (145 loc) • 5.5 kB
JavaScript
'use strict';
// ---------------------------------------------------------------------------
const liqui = require ('./liqui.js');
// ---------------------------------------------------------------------------
module.exports = class dsx extends liqui {
describe () {
return this.deepExtend (super.describe (), {
'id': 'dsx',
'name': 'DSX',
'countries': 'UK',
'rateLimit': 1500,
'has': {
'CORS': false,
'fetchOrder': true,
'fetchOrders': true,
'fetchOpenOrders': true,
'fetchClosedOrders': true,
'fetchTickers': true,
'fetchMyTrades': true,
},
'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/27990275-1413158a-645a-11e7-931c-94717f7510e3.jpg',
'api': {
'public': 'https://dsx.uk/mapi', // market data
'private': 'https://dsx.uk/tapi', // trading
'dwapi': 'https://dsx.uk/dwapi', // deposit/withdraw
},
'www': 'https://dsx.uk',
'doc': [
'https://api.dsx.uk',
'https://dsx.uk/api_docs/public',
'https://dsx.uk/api_docs/private',
'',
],
},
'api': {
// market data (public)
'public': {
'get': [
'barsFromMoment/{id}/{period}/{start}', // empty reply :\
'depth/{pair}',
'info',
'lastBars/{id}/{period}/{amount}', // period is (m, h or d)
'periodBars/{id}/{period}/{start}/{end}',
'ticker/{pair}',
'trades/{pair}',
],
},
// trading (private)
'private': {
'post': [
'getInfo',
'TransHistory',
'TradeHistory',
'OrderHistory',
'ActiveOrders',
'Trade',
'CancelOrder',
],
},
// deposit / withdraw (private)
'dwapi': {
'post': [
'getCryptoDepositAddress',
'cryptoWithdraw',
'fiatWithdraw',
'getTransactionStatus',
'getTransactions',
],
},
},
});
}
getBaseQuoteFromMarketId (id) {
let uppercase = id.toUpperCase ();
let base = uppercase.slice (0, 3);
let quote = uppercase.slice (3, 6);
base = this.commonCurrencyCode (base);
quote = this.commonCurrencyCode (quote);
return [ base, quote ];
}
async fetchBalance (params = {}) {
await this.loadMarkets ();
let response = await this.privatePostGetInfo ();
let balances = response['return'];
let result = { 'info': balances };
let funds = balances['funds'];
let currencies = Object.keys (funds);
for (let c = 0; c < currencies.length; c++) {
let currency = currencies[c];
let uppercase = currency.toUpperCase ();
uppercase = this.commonCurrencyCode (uppercase);
let account = {
'free': funds[currency],
'used': 0.0,
'total': balances['total'][currency],
};
account['used'] = account['total'] - account['free'];
result[uppercase] = account;
}
return this.parseBalance (result);
}
parseTicker (ticker, market = undefined) {
let timestamp = ticker['updated'] * 1000;
let symbol = undefined;
if (market)
symbol = market['symbol'];
let average = this.safeFloat (ticker, 'avg');
if (typeof average !== 'undefined')
if (average > 0)
average = 1 / average;
let last = this.safeFloat (ticker, 'last');
return {
'symbol': symbol,
'timestamp': timestamp,
'datetime': this.iso8601 (timestamp),
'high': this.safeFloat (ticker, 'high'),
'low': this.safeFloat (ticker, 'low'),
'bid': this.safeFloat (ticker, 'buy'),
'bidVolume': undefined,
'ask': this.safeFloat (ticker, 'sell'),
'askVolume': undefined,
'vwap': undefined,
'open': undefined,
'close': last,
'last': last,
'previousClose': undefined,
'change': undefined,
'percentage': undefined,
'average': average,
'baseVolume': this.safeFloat (ticker, 'vol'),
'quoteVolume': this.safeFloat (ticker, 'vol_cur'),
'info': ticker,
};
}
getOrderIdKey () {
return 'orderId';
}
signBodyWithSecret (body) {
return this.decode (this.hmac (this.encode (body), this.encode (this.secret), 'sha512', 'base64'));
}
getVersionString () {
return ''; // they don't prepend version number to public URLs as other BTC-e clones do
}
};