diff --git a/lib/database.js b/lib/database.js index 2693519..853eb0b 100644 --- a/lib/database.js +++ b/lib/database.js @@ -166,12 +166,12 @@ function save_tx(txid, blockheight, cb) { } function get_market_data(market, cb) { - if(fs.existsSync('./lib/markets/' + market + '.js')){ + if (fs.existsSync('./lib/markets/' + market + '.js')) { exMarket = require('./markets/' + market); - exMarket.get_data(settings.markets.coin, settings.markets.exchange, function(err, obj){ + exMarket.get_data(settings.markets, function(err, obj) { return cb(err, obj); }); - }else{ + } else { return cb(null); } } @@ -683,7 +683,7 @@ module.exports = { buys: obj.buys, sells: obj.sells, history: obj.trades, - summary: obj.stats, + summary: obj.stats }, function() { if ( market == settings.markets.default ) { Stats.updateOne({coin:settings.coin}, { diff --git a/lib/locale.js b/lib/locale.js index db8f4d0..58ebad8 100644 --- a/lib/locale.js +++ b/lib/locale.js @@ -143,15 +143,6 @@ exports.heavy_changein = "Reward change in approximately", exports.heavy_key = "Key", exports.heavy_lastxvotes = "Last 20 votes", -exports.fides = "Fides-ex", -exports.poloniex = "Poloniex", -exports.bittrex = "Bittrex", -exports.altmarkets = "AltMarkets", -exports.bleutrade = "Bleutrade", -exports.yobit = "Yobit", -exports.stex = "Stex", -exports.crex = "Crex24", - exports.reloadLocale = function reloadLocale(locale) { // Discover where the locale file lives var localeFilename = locale; diff --git a/lib/markets/altmarkets.js b/lib/markets/altmarkets.js index 73b3cff..2969627 100644 --- a/lib/markets/altmarkets.js +++ b/lib/markets/altmarkets.js @@ -4,23 +4,26 @@ var base_url = 'https://altmarkets.io/api/v2/'; function get_summary(coin, exchange, cb) { var req_url = base_url + 'tickers/' + coin.toLowerCase() + exchange.toLowerCase(); - var summary = {}; - request({uri: req_url, json: true}, function (error, response, body) { + + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (error) { return cb(error, null); } else { if (body.error) { return cb(body.error, null); } else { - summary['bid'] = parseFloat(body['ticker']['buy']).toFixed(8); - summary['ask'] = parseFloat(body['ticker']['sell']).toFixed(8); - summary['volume'] = parseFloat(body['ticker']['vol']).toFixed(8); - summary['volume_btc'] = parseFloat(body['ticker']['quote_volume']).toFixed(8); - summary['high'] = parseFloat(body['ticker']['high']).toFixed(8); - summary['low'] = parseFloat(body['ticker']['low']).toFixed(8); - summary['last'] = parseFloat(body['ticker']['last']).toFixed(8); + var summary = {}; + + summary['bid'] = body['ticker']['buy']; + summary['ask'] = body['ticker']['sell']; + summary['volume'] = body['ticker']['vol']; + summary['volume_btc'] = body['ticker']['quote_volume']; + summary['high'] = body['ticker']['high']; + summary['low'] = body['ticker']['low']; + summary['last'] = body['ticker']['last']; summary['change'] = 0; - request({ uri: base_url + 'currency/trades?currency=' + coin.toLowerCase(), json: true }, function (error, response, body) { + + request({ uri: base_url + 'currency/trades?currency=' + coin.toLowerCase(), json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (error) { return cb(null, summary); } else { @@ -30,7 +33,7 @@ function get_summary(coin, exchange, cb) { summary['change'] = 0; for (var i = 0; i < body.length; i++) { if (exchange.toLowerCase() in body[i]) { - summary['change'] = parseFloat(body[i][exchange.toLowerCase()]['change']); + summary['change'] = body[i][exchange.toLowerCase()]['change']; break; } } @@ -44,72 +47,88 @@ function get_summary(coin, exchange, cb) { } function get_trades(coin, exchange, cb) { - var req_url = base_url + "trades?market=" + coin.toLowerCase() + "" + exchange.toLowerCase() + "&limit=50&order_by=desc"; - request({uri: req_url, json: true}, function (error, response, body) { + var req_url = base_url + 'trades?market=' + coin.toLowerCase() + '' + exchange.toLowerCase() + '&limit=50&order_by=desc'; + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (body.error) { return cb(body.error, null); } else { - return cb (null, body); + var trades = []; + + if (body.length > 0) { + for (var i = 0; i < body.length; i++) { + var trade = { + ordertype: (body[i]['side'].toLowerCase() == 'up' ? 'BUY' : 'SELL'), + price: body[i]['price'], + quantity: body[i]['volume'], + total: body[i]['funds'], + timestamp: new Date(body[i]['timestamp'] * 1000).toUTCString() + } + + trades.push(trade); + } + } + + return cb(null, trades); } }); } function get_orders(coin, exchange, cb) { var req_url = base_url + 'depth?market=' + coin.toLowerCase() + exchange.toLowerCase(); - request({uri: req_url, json: true}, function (error, response, body) { + + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (body.error) { return cb(body.error, [], []) } else { var orders = body; var buys = []; var sells = []; - if (orders['bids'].length > 0){ + + if (orders['bids'].length > 0) { for (var i = 0; i < orders['bids'].length; i++) { var order = { - amount: parseFloat(orders.bids[i][1]).toFixed(8), - price: parseFloat(orders.bids[i][0]).toFixed(8), - // total: parseFloat(orders.bids[i].Total).toFixed(8) - // Necessary because API will return 0.00 for small volume transactions - total: (parseFloat(orders.bids[i][1]).toFixed(8) * parseFloat(orders.bids[i][0])).toFixed(8) + price: orders.bids[i][0], + quantity: orders.bids[i][1] } + buys.push(order); } - } else {} + } + if (orders['asks'].length > 0) { - for (var x = 0; x < orders['asks'].length; x++) { + for (var i = 0; i < orders['asks'].length; i++) { var order = { - amount: parseFloat(orders.asks[x][1]).toFixed(8), - price: parseFloat(orders.asks[x][0]).toFixed(8), - // total: parseFloat(orders.asks[x].Total).toFixed(8) - // Necessary because API will return 0.00 for small volume transactions - total: (parseFloat(orders.asks[x][1]).toFixed(8) * parseFloat(orders.asks[x][0])).toFixed(8) + price: orders.asks[i][0], + quantity: orders.asks[i][1] } + sells.push(order); } - } else {} - var sells = sells.reverse(); - return cb(null, buys, sells); + } + + return cb(null, buys, sells.reverse()); } }); } -function get_chartdata(coin, exchange, cb) { +function get_chartdata(coin, exchange, cb) { var end = Date.now(); end = end / 1000; start = end - 86400; - var req_url = base_url + 'k/?market=' + coin.toLowerCase() + "" + exchange.toLowerCase() + '&time_from=' + start + '&time_to=' + end + '&period=1'; - request({uri: req_url, json: true}, function (error, response, chartdata) { + + var req_url = base_url + 'k/?market=' + coin.toLowerCase() + '' + exchange.toLowerCase() + '&time_from=' + start + '&time_to=' + end + '&period=15'; + + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, chartdata) { if (error) { return cb(error, []); } else { if (chartdata.error == null) { var processed = []; - for (var i = 0; i < chartdata.length; i++) { - processed.push([chartdata[i][0] * 1000, parseFloat(chartdata[i][1]), parseFloat(chartdata[i][2]), parseFloat(chartdata[i][3]), parseFloat(chartdata[i][4])]); - if (i == chartdata.length - 1) { - return cb(null, processed); - } - } + + for (var i = 0; i < chartdata.length; i++) + processed.push([chartdata[i][0] * 1000, chartdata[i][1], chartdata[i][2], chartdata[i][3], chartdata[i][4]]); + + return cb(null, processed); } else { return cb(chartdata.error, []); } @@ -118,15 +137,16 @@ function get_chartdata(coin, exchange, cb) { } module.exports = { - get_data: function(coin, exchange, cb) { + market_name: 'AltMarkets', + get_data: function(settings, cb) { var error = null; - get_chartdata(coin, exchange, function (err, chartdata){ + get_chartdata(settings.coin, settings.exchange, function (err, chartdata){ if (err) { chartdata = []; error = err; } - get_orders(coin, exchange, function(err, buys, sells) { + get_orders(settings.coin, settings.exchange, function(err, buys, sells) { if (err) { error = err; } - get_trades(coin, exchange, function(err, trades) { + get_trades(settings.coin, settings.exchange, function(err, trades) { if (err) { error = err; } - get_summary(coin, exchange, function(err, stats) { + get_summary(settings.coin, settings.exchange, function(err, stats) { if (err) { error = err; } return cb(error, {buys: buys, sells: sells, chartdata: chartdata, trades: trades, stats: stats}); }); @@ -134,4 +154,4 @@ module.exports = { }); }); } -}; +}; \ No newline at end of file diff --git a/lib/markets/bittrex.js b/lib/markets/bittrex.js index 02cc04c..330fc44 100644 --- a/lib/markets/bittrex.js +++ b/lib/markets/bittrex.js @@ -1,84 +1,146 @@ var request = require('postman-request'); -var base_url = 'https://bittrex.com/api/v1.1/public'; +var base_url = 'https://api.bittrex.com/v3'; function get_summary(coin, exchange, cb) { - var req_url = base_url + '/getmarketsummary?market=' + exchange + '-' + coin; - request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { + var req_url = base_url + '/markets/' + coin + '-' + exchange + '/summary'; + + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, summary) { if (error) { return cb(error, null); } else { - if (body.message) { - return cb(body.message, null) + if (summary.code) { + return cb(summary.code, null) } else { - body.result[0]['last'] = body.result[0]['Last']; - return cb (null, body.result[0]); + req_url = base_url + '/markets/' + coin + '-' + exchange + '/ticker'; + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, ticker) { + if (error) { + return cb(error, null); + } else { + if (ticker.code) { + return cb(ticker.code, null) + } else { + var retVal = { + 'high': summary.high, + 'low': summary.low, + 'volume': summary.volume, + 'bid': ticker.bidRate, + 'ask': ticker.askRate, + 'last': ticker.lastTradeRate, + 'change': summary.percentChange + }; + return cb (null, retVal); + } + } + }); } } }); } function get_trades(coin, exchange, cb) { - var req_url = base_url + '/getmarkethistory?market=' + exchange + '-' + coin + '&count=50'; + var req_url = base_url + '/markets/' + coin + '-' + exchange + '/trades'; request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { - if (body.success == true) { - return cb (null, body.result); + if (error) { + return cb(error, null); } else { - return cb(body.message, null); + var trades = []; + + if (body.length > 0) { + for (var i = 0; i < body.length; i++) { + var trade = { + ordertype: body[i]['takerSide'], + price: body[i]['rate'], + quantity: body[i]['quantity'], + timestamp: body[i]['executedAt'] + } + + trades.push(trade); + } + } + + return cb(null, trades); } }); } function get_orders(coin, exchange, cb) { - var req_url = base_url + '/getorderbook?market=' + exchange + '-' + coin + '&type=both' + '&depth=50'; + var req_url = base_url + '/markets/' + coin + '-' + exchange + '/orderbook?depth=25'; + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { - if (body.success == true) { - var orders = body.result; + if (error) { + return cb(error, [], []); + } else { var buys = []; var sells = []; - if (orders['buy'].length > 0){ - for (var i = 0; i < orders['buy'].length; i++) { + + if (body['bid'].length > 0){ + for (var i = 0; i < body['bid'].length; i++) { var order = { - amount: parseFloat(orders.buy[i].Quantity).toFixed(8), - price: parseFloat(orders.buy[i].Rate).toFixed(8), - // total: parseFloat(orders.buy[i].Total).toFixed(8) - // Necessary because API will return 0.00 for small volume transactions - total: (parseFloat(orders.buy[i].Quantity).toFixed(8) * parseFloat(orders.buy[i].Rate)).toFixed(8) + price: body.bid[i].rate, + quantity: body.bid[i].quantity } + buys.push(order); } } - if (orders['sell'].length > 0) { - for (var x = 0; x < orders['sell'].length; x++) { + + if (body['ask'].length > 0) { + for (var i = 0; i < body['ask'].length; i++) { var order = { - amount: parseFloat(orders.sell[x].Quantity).toFixed(8), - price: parseFloat(orders.sell[x].Rate).toFixed(8), - // total: parseFloat(orders.sell[x].Total).toFixed(8) - // Necessary because API will return 0.00 for small volume transactions - total: (parseFloat(orders.sell[x].Quantity).toFixed(8) * parseFloat(orders.sell[x].Rate)).toFixed(8) + price: body.ask[i].rate, + quantity: body.ask[i].quantity } + sells.push(order); } } + return cb(null, buys, sells); + } + }); +} + +function get_chartdata(coin, exchange, cb) { + var end = Date.now(); + + end = end / 1000; + start = end - 86400; + + var req_url = base_url + '/markets/' + coin + '-' + exchange + '/candles/MINUTE_5/recent'; + + request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, chartdata) { + if (error) { + return cb(error, []); } else { - return cb(body.message, [], []); + var processed = []; + + for (var i = 0; i < chartdata.length; i++) { + // only display every 3rd data point (every 15 mins) and only more recent than the last 24 hours + if (new Date(chartdata[i].startsAt).getTime()/1000 > start && (i % 3) == 0) + processed.push([new Date(chartdata[i].startsAt).getTime(), parseFloat(chartdata[i].open), parseFloat(chartdata[i].high), parseFloat(chartdata[i].low), parseFloat(chartdata[i].close)]); + } + return cb(null, processed); } }); } module.exports = { - get_data: function(coin, exchange, cb) { + market_name: 'Bittrex', + get_data: function(settings, cb) { var error = null; - get_orders(coin, exchange, function(err, buys, sells) { - if (err) { error = err; } - get_trades(coin, exchange, function(err, trades) { + get_chartdata(settings.coin, settings.exchange, function (err, chartdata) { + if (err) { chartdata = []; error = err; } + get_orders(settings.coin, settings.exchange, function(err, buys, sells) { if (err) { error = err; } - get_summary(coin, exchange, function(err, stats) { + get_trades(settings.coin, settings.exchange, function(err, trades) { if (err) { error = err; } - return cb(error, {buys: buys, sells: sells, chartdata: [], trades: trades, stats: stats}); + get_summary(settings.coin, settings.exchange, function(err, stats) { + if (err) { error = err; } + return cb(error, {buys: buys, sells: sells, chartdata: chartdata, trades: trades, stats: stats}); + }); }); }); }); } -}; +}; \ No newline at end of file diff --git a/lib/markets/bleutrade.js b/lib/markets/bleutrade.js index 74b41cb..5fc1b95 100644 --- a/lib/markets/bleutrade.js +++ b/lib/markets/bleutrade.js @@ -1,6 +1,6 @@ var request = require('postman-request'); -var base_url = 'https://bleutrade.com/api/v2/public'; +var base_url = 'https://bleutrade.com/api/v3/public'; function get_summary(coin, exchange, cb) { var req_url = base_url + '/getmarketsummary?market=' + coin + '_' + exchange; @@ -11,8 +11,17 @@ function get_summary(coin, exchange, cb) { if (body.message) { return cb(body.message, null) } else { - body.result[0]['last'] = body.result[0].Last; - return cb (null, body.result[0]); + var retVal = { + 'high': body.result.High, + 'low': body.result.Low, + 'volume': body.result.Volume, + 'bid': body.result.Bid, + 'ask': body.result.Ask, + 'last': body.result.Last, + 'prev': body.result.PrevDay + }; + + return cb (null, retVal); } } }); @@ -21,8 +30,24 @@ function get_summary(coin, exchange, cb) { function get_trades(coin, exchange, cb) { var req_url = base_url + '/getmarkethistory?market=' + coin + '_' + exchange + '&count=50'; request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { - if (body.success == "true") { - return cb (null, body.result); + if (body.success) { + var trades = []; + + if (body.result.length > 0) { + for (var i = 0; i < body.result.length; i++) { + var trade = { + ordertype: body.result[i]['OrderType'], + price: body.result[i]['Price'], + quantity: body.result[i]['Quantity'], + total: body.result[i]['Total'], + timestamp: body.result[i]['TimeStamp'] + } + + trades.push(trade); + } + } + + return cb(null, trades); } else { return cb(body.message, null); } @@ -30,55 +55,88 @@ function get_trades(coin, exchange, cb) { } function get_orders(coin, exchange, cb) { - var req_url = base_url + '/getorderbook?market=' + coin + '_' + exchange + '&type=all' + '&depth=50'; + var req_url = base_url + '/getorderbook?market=' + coin + '_' + exchange + '&type=all' + '&depth=50'; request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { - if (body.success == "true") { + if (body.success) { var orders = body.result; var buys = []; var sells = []; - if (orders['buy'].length > 0){ - for (var i = 0; i < orders['buy'].length; i++) { - var order = { - amount: parseFloat(orders.buy[i].Quantity).toFixed(8), - price: parseFloat(orders.buy[i].Rate).toFixed(8), - // total: parseFloat(orders.buy[i].Total).toFixed(8) - // Necessary because API will return 0.00 for small volume transactions - total: (parseFloat(orders.buy[i].Quantity).toFixed(8) * parseFloat(orders.buy[i].Rate)).toFixed(8) - } - buys.push(order); - } - } else {} - if (orders['sell'].length > 0) { - for (var x = 0; x < orders['sell'].length; x++) { - var order = { - amount: parseFloat(orders.sell[x].Quantity).toFixed(8), - price: parseFloat(orders.sell[x].Rate).toFixed(8), - // total: parseFloat(orders.sell[x].Total).toFixed(8) - // Necessary because API will return 0.00 for small volume transactions - total: (parseFloat(orders.sell[x].Quantity).toFixed(8) * parseFloat(orders.sell[x].Rate)).toFixed(8) - } - sells.push(order); - } - } else { - } - return cb(null, buys, sells); - } else { - return cb(body.message, [], []) + + if (orders['buy'].length > 0) { + for (var i = 0; i < orders['buy'].length; i++) { + var order = { + price: orders.buy[i].Rate, + quantity: orders.buy[i].Quantity + } + + buys.push(order); } - }); + } + + if (orders['sell'].length > 0) { + for (var i = 0; i < orders['sell'].length; i++) { + var order = { + price: orders.sell[i].Rate, + quantity: orders.sell[i].Quantity + } + + sells.push(order); + } + } + + return cb(null, buys, sells); + } else { + return cb(body.message, [], []) + } + }); } + +function get_chartdata(coin, exchange, cb) { + var end = Date.now(); + + end = end / 1000; + start = end - 86400; + + var req_url = base_url + '/getcandles/?market=' + coin + '_' + exchange + '&period=1h'; + + request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, chartdata) { + if (error) { + return cb(error, []); + } else { + if (chartdata.success) { + var processed = []; + + for (var i = 0; i < chartdata.result.length; i++) { + // only take values more recent than the last 24 hours + if (new Date(chartdata.result[i].TimeStamp).getTime()/1000 > start) { + processed.push([new Date(chartdata.result[i].TimeStamp).getTime(), parseFloat(chartdata.result[i].Open), parseFloat(chartdata.result[i].High), parseFloat(chartdata.result[i].Low), parseFloat(chartdata.result[i].Close)]); + } + } + + return cb(null, processed); + } + else + return cb(chartdata.message, []); + } + }); +} + module.exports = { - get_data: function(coin, exchange, cb) { + market_name: 'Bleutrade', + get_data: function(settings, cb) { var error = null; - get_orders(coin, exchange, function(err, buys, sells) { - if (err) { error = err; } - get_trades(coin, exchange, function(err, trades) { + get_chartdata(settings.coin, settings.exchange, function (err, chartdata){ + if (err) { chartdata = []; error = err; } + get_orders(settings.coin, settings.exchange, function(err, buys, sells) { if (err) { error = err; } - get_summary(coin, exchange, function(err, stats) { + get_trades(settings.coin, settings.exchange, function(err, trades) { if (err) { error = err; } - return cb(error, {buys: buys, sells: sells, chartdata: [], trades: trades, stats: stats}); + get_summary(settings.coin, settings.exchange, function(err, stats) { + if (err) { error = err; } + return cb(error, {buys: buys, sells: sells, chartdata: chartdata, trades: trades, stats: stats}); + }); }); }); }); } -}; +}; \ No newline at end of file diff --git a/lib/markets/crex.js b/lib/markets/crex.js index a819d1b..513abb5 100644 --- a/lib/markets/crex.js +++ b/lib/markets/crex.js @@ -1,21 +1,25 @@ var request = require('postman-request'); + var base_url = 'https://api.crex24.com/v2/public'; function get_summary(coin, exchange, cb) { - var summary = {}; var url=base_url + '/tickers?instrument=' + coin.toUpperCase() + '-' + exchange.toUpperCase(); - request({uri: url, json: true}, function (error, response, body) { + + request({uri: url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (error) { return cb(error, null); } else if (body.error !== true) { - summary['ask'] = parseFloat(body[0]['ask']).toFixed(8); - summary['bid'] = parseFloat(body[0]['bid']).toFixed(8); - summary['volume'] = parseFloat(body[0]['baseVolume']).toFixed(8); - summary['volume_btc'] = parseFloat(body[0]['volumeInBtc']).toFixed(8); - summary['high'] = parseFloat(body[0]['high']).toFixed(8); - summary['low'] = parseFloat(body[0]['low']).toFixed(8); - summary['last'] = parseFloat(body[0]['last']).toFixed(8); - summary['change'] = parseFloat(body[0]['percentChange']); + var summary = {}; + + summary['ask'] = body[0]['ask']; + summary['bid'] = body[0]['bid']; + summary['volume'] = body[0]['baseVolume']; + summary['volume_btc'] = body[0]['volumeInBtc']; + summary['high'] = body[0]['high']; + summary['low'] = body[0]['low']; + summary['last'] = body[0]['last']; + summary['change'] = body[0]['percentChange']; + return cb(null, summary); } else { return cb(error, null); @@ -25,76 +29,104 @@ function get_summary(coin, exchange, cb) { function get_trades(coin, exchange, cb) { var req_url = base_url + '/recentTrades?instrument=' + coin.toUpperCase() + '-' + exchange.toUpperCase(); - request({ uri: req_url, json: true }, function (error, response, body) { - if(error) - return cb(error, null); - else if (body.error !== true) { - var tTrades = body; - var trades = []; - for (var i = 0; i < tTrades.length; i++) { - var Trade = { - orderpair: tTrades[i].Label, - ordertype: tTrades[i].side, - amount: parseFloat(tTrades[i].volume).toFixed(8), - price: parseFloat(tTrades[i].price).toFixed(8), - total: (parseFloat(tTrades[i].volume).toFixed(8) * parseFloat(tTrades[i].price)).toFixed(8), - timestamp: parseInt((new Date(tTrades[i].timestamp).getTime() / 1000).toFixed(0)) - } - trades.push(Trade); - } - return cb(null, trades); - } else { - return cb(body.Message, null); + + request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { + if (error) + return cb(error, null); + else if (body.error !== true) { + var trades = []; + + for (var i = 0; i < body.length; i++) { + var trade = { + ordertype: body[i].side, + quantity: body[i].volume, + price: body[i].price, + timestamp: body[i].timestamp + } + + trades.push(trade); } + + return cb(null, trades); + } else + return cb(body.Message, null); }); } function get_orders(coin, exchange, cb) { var req_url = base_url + '/orderBook?instrument=' + coin.toUpperCase() + '-' + exchange.toUpperCase(); - request({ uri: req_url, json: true }, function (error, response, body) { - if(error) - return cb(error, null); - else if (body.error !== true) { - var buyorders = body['buyLevels']; - var sellorders = body['sellLevels']; - var buys = []; - var sells = []; - if (buyorders.length > 0){ - for (var i = 0; i < buyorders.length; i++) { - var order = { - amount: parseFloat(buyorders[i].volume).toFixed(8), - price: parseFloat(buyorders[i].price).toFixed(8), - total: (parseFloat(buyorders[i].volume).toFixed(8) * parseFloat(buyorders[i].price)).toFixed(8) - } - buys.push(order); - } - } else {} - if (sellorders.length > 0) { - for (var x = 0; x < sellorders.length; x++) { - var order = { - amount: parseFloat(sellorders[x].volume).toFixed(8), - price: parseFloat(sellorders[x].price).toFixed(8), - total: (parseFloat(sellorders[x].volume).toFixed(8) * parseFloat(sellorders[x].price)).toFixed(8) - } - sells.push(order); - } - } - return cb(null, buys, sells); - } else - return cb(body.Message, [], []) - }); + + request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { + if (error) + return cb(error, null); + else if (body.error !== true) { + var buys = []; + var sells = []; + + if (body['buyLevels'].length > 0) { + for (var i = 0; i < body['buyLevels'].length; i++) { + var order = { + price: body['buyLevels'][i].price, + quantity: body['buyLevels'][i].volume + } + + buys.push(order); + } + } + + if (body['sellLevels'].length > 0) { + for (var i = 0; i < body['sellLevels'].length; i++) { + var order = { + price: body['sellLevels'][i].price, + quantity: body['sellLevels'][i].volume + } + + sells.push(order); + } + } + + return cb(null, buys, sells); + } else + return cb(body.Message, [], []) + }); +} + +function get_chartdata(coin, exchange, cb) { + var end = Date.now(); + + end = end / 1000; + start = end - 86400; + + var req_url = base_url + '/ohlcv?instrument=' + coin.toUpperCase() + '-' + exchange.toUpperCase() + '&granularity=15m&limit=100'; + + request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, chartdata) { + if (error) { + return cb(error, []); + } else { + var processed = []; + + for (var i = 0; i < chartdata.length; i++) + processed.push([new Date(chartdata[i].timestamp).getTime(), parseFloat(chartdata[i].open), parseFloat(chartdata[i].high), parseFloat(chartdata[i].low), parseFloat(chartdata[i].close)]); + + return cb(null, processed); + } + }); } module.exports = { - get_data: function(coin, exchange, cb) { + market_name: 'Crex24', + get_data: function(settings, cb) { var error = null; - get_orders(coin, exchange, function(err, buys, sells) { - if (err) { error = err; } - get_trades(coin, exchange, function(err, trades) { + get_chartdata(settings.coin, settings.exchange, function (err, chartdata) { + if (err) { chartdata = []; error = err; } + get_orders(settings.coin, settings.exchange, function(err, buys, sells) { if (err) { error = err; } - get_summary(coin, exchange, function(err, stats) { + get_trades(settings.coin, settings.exchange, function(err, trades) { if (err) { error = err; } - return cb(error, {buys: buys, sells: sells, chartdata: [], trades: trades, stats: stats}); + get_summary(settings.coin, settings.exchange, function(err, stats) { + if (err) { error = err; } + return cb(error, {buys: buys, sells: sells, chartdata: chartdata, trades: trades, stats: stats}); + }); }); }); }); diff --git a/lib/markets/fides.js b/lib/markets/fides.js index 2045520..b53009d 100644 --- a/lib/markets/fides.js +++ b/lib/markets/fides.js @@ -1,98 +1,138 @@ var request = require('postman-request'); -var crypto = require('crypto'); -//var settings = require('./settings-market-example.json'); + var base_url = 'https://node1.fides-ex.com'; -// -// Get Market From Fides-ex -// function get_summary(coin, exchange, cb) { - var summary = {}; - var url=base_url + '/market/get-market-summary/' + exchange.toUpperCase() + "_" + coin.toUpperCase(); + var url = base_url + '/market/get-market-summary/' + exchange.toUpperCase() + '_' + coin.toUpperCase(); - request({uri: url, json: true}, function (error, response, body) { + request({uri: url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (error) { return cb(error, null); - } else if (body.error !== true) { - summary['ask'] = parseFloat(body['data']['LowestAsk']).toFixed(8); - summary['bid'] = parseFloat(body['data']['HeighestBid']).toFixed(8); - summary['volume'] = parseFloat(body['data']['QuoteVolume']).toFixed(8); - summary['volume_btc'] = parseFloat(body['data']['BaseVolume']).toFixed(8); - summary['high'] = parseFloat(body['data']['High_24hr']).toFixed(8); - summary['low'] = parseFloat(body['data']['Low_24hr']).toFixed(8); - summary['last'] = parseFloat(body['data']['Last']).toFixed(8); - summary['change'] = parseFloat(body['data']['PercentChange']); + } else if (body.errorMessage !== true) { + var summary = {}; + + summary['ask'] = body['data']['LowestAsk']; + summary['bid'] = body['data']['HeighestBid']; + summary['volume'] = body['data']['QuoteVolume']; + summary['volume_btc'] = body['data']['BaseVolume']; + summary['high'] = body['data']['High_24hr']; + summary['low'] = body['data']['Low_24hr']; + summary['last'] = body['data']['Last']; + summary['change'] = body['data']['PercentChange']; + return cb(null, summary); } else { return cb(error, null); } - }); -} -// Get Trades -function get_trades(coin, exchange, cb) { - var req_url=base_url + '/market/get-trade-history/' + exchange.toUpperCase() + "_" + coin.toUpperCase(); - request({uri: req_url, json: true}, function (error, response, body) { - if (body.error) { - return cb(body.error, []); - } else { - return cb(null, body['data']); - } }); } +function get_trades(coin, exchange, cb) { + var req_url = base_url + '/market/get-trade-history/' + exchange.toUpperCase() + '_' + coin.toUpperCase(); + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { + if (body.errorMessage) + return cb(body.errorMessage, []); + else { + var trades = []; + + for (var i = 0; i < body['data'].length; i++) { + var trade = { + ordertype: body['data'][i].Type, + quantity: body['data'][i].Volume, + price: body['data'][i].Rate, + total: body['data'][i].Total, + timestamp: body['data'][i].Date + } + + trades.push(trade); + } + + return cb(null, trades); + } + }); +} function get_orders_side(coin, exchange, side, cb){ - var req_url = base_url + "/market/get-open-orders/" + exchange.toUpperCase() + "_" + coin.toUpperCase() +"/" + side.toUpperCase() + "/10"; - console.log("sending request to - " + req_url) - request({uri: req_url, json:true}, function (error, response, body){ - if(error) + var req_url = base_url + '/market/get-open-orders/' + exchange.toUpperCase() + '_' + coin.toUpperCase() + '/' + side.toUpperCase() + '/10'; + + request({uri: req_url, json:true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { + if (error) return cb(error, null); - else if(body.error !== true){ + else if (body.errorMessage) + return cb(body.errorMessage, []); + else if (body.errorMessage !== true) { var orders = []; - if(body['data'].Orders.length > 0){ - for( var i = 0; i < body['data'].Orders.length; i++) { + + if (body['data'].Orders.length > 0) { + for (var i = 0; i < body['data'].Orders.length; i++) { var order = { - MarketType: body['data'].Orders[i].MarketType, - CurrencyType: body['data'].Orders[i].CurrencyType, - Type: body['data'].Type, - Pair: body['data'].Pair, - Rate: body['data'].Orders[i].Rate, - Volume: body['data'].Orders[i].Volume, - Total: body['data'].Orders[i].Rate * body['data'].Orders[i].Volume + price: body['data'].Orders[i].Rate, + quantity: body['data'].Orders[i].Volume } + orders.push(order); } - return cb(null,orders); - } + + return cb(null, orders); + } else + return cb(null, []); } }); } -//Get Orders function get_orders(coin, exchange, cb) { - - var buyorders = get_orders_side(coin, exchange, "buy", function(err, buys){ - var sellorders = get_orders_side(coin, exchange, "sell", function(err, sells){ + var buyorders = get_orders_side(coin, exchange, 'buy', function(err, buys) { + var sellorders = get_orders_side(coin, exchange, 'sell', function(err, sells) { return cb(null, buys, sells); - }) - }) + }); + }); +} + +function get_chartdata(coin, exchange, cb) { + var end = Date.now(); + + end = end / 1000; + start = end - 86400; + + var req_url = base_url + '/market/get-chart-data?baseCurrency=' + coin.toUpperCase() + '"eCurrency=' + exchange.toUpperCase() + '×tamp=' + (end * 1000).toString() + '&interval=15&limit=200'; + + request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, chartdata) { + if (error) + return cb(error, []); + else if (chartdata.errorMessage) + return cb(chartdata.errorMessage, []); + else { + var processed = []; + + for (var i = 0; i < chartdata.data.length; i++) { + // only take values more recent than the last 24 hours + if (new Date(chartdata.data[i].time).getTime()/1000 > start) { + processed.push([chartdata.data[i].time, parseFloat(chartdata.data[i].open), parseFloat(chartdata.data[i].high), parseFloat(chartdata.data[i].low), parseFloat(chartdata.data[i].close)]); + } + } + + return cb(null, processed); + } + }); } module.exports = { - get_data: function(coin, exchange, cb) { + market_name: 'Fides-Ex', + get_data: function(settings, cb) { var error = null; - get_orders(coin, exchange, function(err, buys, sells) { - if (err) { error = err; } - get_trades(coin, exchange, function(err, trades) { - if (err) { error = err; } - get_summary(coin, exchange, function(err, stats) { + get_chartdata(settings.coin, settings.exchange, function (err, chartdata) { + if (err) { chartdata = []; error = err; } + get_orders(settings.coin, settings.exchange, function(err, buys, sells) { + if (err) { error = err; } + get_trades(settings.coin, settings.exchange, function(err, trades) { if (err) { error = err; } - //Note that chartdata is available for an API, but I can't get it to return anything - //return cb(error, {buys: buys, sells: sells, chartdata: [], trades: trades, stats: stats}); - return cb(error, {buys: buys, sells: sells, chartdata: [], trades: trades, stats: stats}); + get_summary(settings.coin, settings.exchange, function(err, stats) { + if (err) { error = err; } + return cb(error, {buys: buys, sells: sells, chartdata: chartdata, trades: trades, stats: stats}); + }); }); }); }); } -}; +}; \ No newline at end of file diff --git a/lib/markets/poloniex.js b/lib/markets/poloniex.js index 6045481..3e4a80e 100644 --- a/lib/markets/poloniex.js +++ b/lib/markets/poloniex.js @@ -5,33 +5,87 @@ var base_url = 'https://poloniex.com/public?command='; function get_summary(coin, exchange, cb) { var req_url = base_url + 'returnTicker'; var ticker = exchange + '_' + coin; + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (body.error) { return cb(body.error, null); } else { - return cb(null, body[ticker]); + var retVal = { + 'high': body[ticker].high24hr, + 'low': body[ticker].low24hr, + 'volume': body[ticker].baseVolume, + 'bid': body[ticker].highestBid, + 'ask': body[ticker].lowestAsk, + 'last': body[ticker].last, + 'change': body[ticker].percentChange + }; + + return cb(null, retVal); } }); } function get_trades(coin, exchange, cb) { var req_url = base_url + 'returnTradeHistory¤cyPair=' + exchange + '_' + coin; + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (body.error) { return cb(body.error, []); } else { - return cb(null, body); + var trades = []; + + if (body.length > 0) { + for (var i = 0; i < body.length; i++) { + var trade = { + ordertype: body[i]['type'], + price: body[i]['rate'], + quantity: body[i]['amount'], + total: body[i]['total'], + timestamp: body[i]['date'] + } + + trades.push(trade); + } + } + + return cb(null, trades); } }); } function get_orders(coin, exchange, cb) { var req_url = base_url + 'returnOrderBook¤cyPair=' + exchange + '_' + coin + '&depth=50'; + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (body.error) { return cb(body.error, []); } else { - return cb(null, body); + var buys = []; + var sells = []; + + if (body['bids'].length > 0) { + for (var i = 0; i < body['bids'].length; i++) { + var order = { + price: body.bids[i][0], + quantity: body.bids[i][1] + } + + buys.push(order); + } + } + + if (body['asks'].length > 0) { + for (var i = 0; i < body['asks'].length; i++) { + var order = { + price: body.asks[i][0], + quantity: body.asks[i][1] + } + + sells.push(order); + } + } + + return cb(null, buys, sells); } }); } @@ -39,47 +93,38 @@ function get_orders(coin, exchange, cb) { function get_chartdata(coin, exchange, cb) { var end = Date.now(); end = end / 1000; - start = end - 86400; + start = end - 86400; + var req_url = base_url + 'returnChartData¤cyPair=' + exchange + '_' + coin + '&start=' + start + '&end=' + end + '&period=1800'; + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, chartdata) { if (error) { return cb(error, []); } else { if (chartdata.error == null) { var processed = []; - for (var i = 0; i < chartdata.length; i++) { + + for (var i = 0; i < chartdata.length; i++) processed.push([chartdata[i].date * 1000, parseFloat(chartdata[i].open), parseFloat(chartdata[i].high), parseFloat(chartdata[i].low), parseFloat(chartdata[i].close)]); - if (i == chartdata.length - 1) { - return cb(null, processed); - } - } - } else { + + return cb(null, processed); + } else return cb(chartdata.error, []); - } } }); } module.exports = { - get_data: function(coin, exchange, cb) { + market_name: 'Poloniex', + get_data: function(settings, cb) { var error = null; - get_chartdata(coin, exchange, function (err, chartdata){ - if (err) { - chartdata = []; - error = err; - } - get_orders(coin, exchange, function (err, orders){ - var buys = []; - var sells = []; - if (orders.bids) { - buys = orders.bids; - sells = orders.asks; - } else { - error = err; - } - get_trades(coin, exchange, function (err, trades){ + get_chartdata(settings.coin.toUpperCase(), settings.exchange.toUpperCase(), function (err, chartdata) { + if (err) { chartdata = []; error = err; } + get_orders(settings.coin.toUpperCase(), settings.exchange.toUpperCase(), function (err, buys, sells) { + if (err) { error = err; } + get_trades(settings.coin.toUpperCase(), settings.exchange.toUpperCase(), function (err, trades) { if (err) { error = err; } - get_summary(coin, exchange, function (err, stats){ + get_summary(settings.coin.toUpperCase(), settings.exchange.toUpperCase(), function (err, stats) { if (err) { error = err; } return cb(error, {buys: buys, sells: sells, chartdata: chartdata, trades: trades, stats: stats}); }); diff --git a/lib/markets/stex.js b/lib/markets/stex.js index be915ae..6d7f985 100644 --- a/lib/markets/stex.js +++ b/lib/markets/stex.js @@ -1,105 +1,102 @@ var request = require('postman-request'); + var base_url = 'https://api3.stex.com/public'; function get_summary(coin, exchange, stex_id, cb) { - var summary = {}; + var summary = {}; - request({ uri: base_url + '/ticker/' + stex_id, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) { - if (error) - return cb(error, null); - else if (body.success === true) { - summary['bid'] = parseFloat(body.data['bid']).toFixed(8); - summary['ask'] = parseFloat(body.data['ask']).toFixed(8); - summary['volume'] = body.data['volume']; - summary['high'] = parseFloat(body.data['high']).toFixed(8); - summary['low'] = parseFloat(body.data['low']).toFixed(8); - summary['last'] = parseFloat(body.data['last']).toFixed(8); - return cb(null, summary); - } else - return cb(error, null); - }).on('error', function(err) { - return cb(error, null); - }); + request({ uri: base_url + '/ticker/' + stex_id, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) { + if (error) + return cb(error, null); + else if (body.success === true) { + summary['bid'] = body.data['bid']; + summary['ask'] = body.data['ask']; + summary['volume'] = body.data['volume']; + summary['high'] = body.data['high']; + summary['low'] = body.data['low']; + summary['last'] = body.data['last']; + summary['change'] = body.data['change']; + + return cb(null, summary); + } else + return cb(error, null); + }).on('error', function(err) { + return cb(error, null); + }); } function get_trades(coin, exchange, stex_id, cb) { - var req_url = base_url + '/trades/' + stex_id + '?sort=DESC&limit=100'; + var req_url = base_url + '/trades/' + stex_id + '?sort=DESC&limit=100'; - request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) { - if (body.success == true) { - var tTrades = body.data; - var trades = []; - for (var i = 0; i < tTrades.length; i++) { - var Trade = { - orderpair: coin, - ordertype: tTrades[i].type, - amount: parseFloat(tTrades[i].amount).toFixed(8), - price: parseFloat(tTrades[i].price).toFixed(8), - // total: parseFloat(tTrades[i].Total).toFixed(8) - // Necessary because API will return 0.00 for small volume transactions - total: (parseFloat(tTrades[i].amount).toFixed(8) * parseFloat(tTrades[i].price)).toFixed(8), - timestamp: tTrades[i].timestamp - } - trades.push(Trade); - } - return cb(null, trades); - } - else - return cb(body.message, null); - }).on('error', function(err) { - return cb(error, null); - }); + request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) { + if (body.success == true) { + var trades = []; + + for (var i = 0; i < body.data.length; i++) { + var trade = { + ordertype: body.data[i].type, + price: body.data[i].price, + quantity: body.data[i].amount, + timestamp: new Date(body.data[i].timestamp * 1000).toUTCString() + } + + trades.push(trade); + } + + return cb(null, trades); + } else + return cb(body.message, null); + }).on('error', function(err) { + return cb(error, null); + }); } function get_orders(coin, exchange, stex_id, cb) { - var req_url = base_url + '/orderbook/' + stex_id + '?limit_bids=100&limit_asks=100'; + var req_url = base_url + '/orderbook/' + stex_id + '?limit_bids=100&limit_asks=100'; - request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) { - if (body.success == true) { - var orders = body.data; - var buys = []; - var sells = []; - if (orders['bid'].length > 0){ - for (var i = 0; i < orders['bid'].length; i++) { - var order = { - amount: parseFloat(orders.bid[i].amount).toFixed(8), - price: parseFloat(orders.bid[i].price).toFixed(8), - // total: parseFloat(orders.bid[i].Total).toFixed(8) - // Necessary because API will return 0.00 for small volume transactions - total: (parseFloat(orders.bid[i].amount).toFixed(8) * parseFloat(orders.bid[i].price)).toFixed(8) - } - buys.push(order); - } - } - if (orders['ask'].length > 0) { - for (var x = 0; x < orders['ask'].length; x++) { - var order = { - amount: parseFloat(orders.ask[x].amount).toFixed(8), - price: parseFloat(orders.ask[x].price).toFixed(8), - // total: parseFloat(orders.ask[x].Total).toFixed(8) - // Necessary because API will return 0.00 for small volume transactions - total: (parseFloat(orders.ask[x].amount).toFixed(8) * parseFloat(orders.ask[x].price)).toFixed(8) - } - sells.push(order); - } - } - return cb(null, buys, sells); + request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) { + if (body.success == true) { + var orders = body.data; + var buys = []; + var sells = []; + + if (orders['bid'].length > 0){ + for (var i = 0; i < orders['bid'].length; i++) { + var order = { + price: orders.bid[i].price, + quantity: orders.bid[i].amount + } + + buys.push(order); } - else - return cb(body.message, [], []) - }).on('error', function(err) { - return cb(error, null, null); - }); + } + + if (orders['ask'].length > 0) { + for (var i = 0; i < orders['ask'].length; i++) { + var order = { + price: orders.ask[i].price, + quantity: orders.ask[i].amount + } + + sells.push(order); + } + } + + return cb(null, buys, sells); + } else + return cb(body.message, [], []); + }).on('error', function(err) { + return cb(error, null, null); + }); } function get_chartdata(coin, exchange, stex_id, cb) { - // do not collect chart data for now - return cb(null, []); -/* - var req_url = base_url + '/chart/' + stex_id + '/30?timeStart=' + start + '&timeEnd=' + end + '&limit=100'; var end = Date.now(); + end = end / 1000; - start = end - 86400; + start = end - 86400; + + var req_url = base_url + '/chart/' + stex_id + '/30?timeStart=' + start + '&timeEnd=' + end + '&limit=1800&candlesType=1D'; request({ uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, chartdata) { if (error) { @@ -107,59 +104,58 @@ function get_chartdata(coin, exchange, stex_id, cb) { } else { if (chartdata.success == true) { var processed = []; - for (var i = 0; i < chartdata.data.length; i++) { - processed.push([chartdata.data[i].time, parseFloat(chartdata.data[i].open), parseFloat(chartdata.data[i].high), parseFloat(chartdata.data[i].low), parseFloat(chartdata.data[i].close)]); - if (i == chartdata.data.length - 1) - return cb(null, processed); - } - } - else + + for (var i = 0; i < chartdata.data.length; i++) + processed.push([chartdata.data[i].time, parseFloat(chartdata.data[i].open), parseFloat(chartdata.data[i].high), parseFloat(chartdata.data[i].low), parseFloat(chartdata.data[i].close)]); + + return cb(null, processed); + } else return cb(chartdata.message, []); } }); -*/ } function get_pair_id(coin, exchange, cb) { - // Lookup the currency pair id needed to use the stex api - request({ uri: base_url + '/currency_pairs/list/' + exchange, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) { - if (error) - return cb(error, null); - else if (body.success === true) { - var stex_id = 0; - // Find the currency pair - for (i = 0; i < body.data.length; i++) { - if (body.data[i].currency_code.toUpperCase() == coin.toUpperCase()) { - stex_id = body.data[i].id; - break; - } - } - - return cb(null, stex_id); - } else - return cb(error, null); - }).on('error', function(err) { + // Lookup the currency pair id needed to use the stex api + request({ uri: base_url + '/currency_pairs/list/' + exchange, json: true, headers: {'User-Agent': 'eiquidus'} }, function (error, response, body) { + if (error) return cb(error, null); - }); + else if (body.success === true) { + var stex_id = 0; + // Find the currency pair + for (i = 0; i < body.data.length; i++) { + if (body.data[i].currency_code.toUpperCase() == coin.toUpperCase()) { + stex_id = body.data[i].id; + break; + } + } + + return cb(null, stex_id); + } else + return cb(error, null); + }).on('error', function(err) { + return cb(error, null); + }); } module.exports = { - get_data: function(coin, exchange, cb) { - var error = null; - get_pair_id(coin, exchange, function (err, stex_id) { - get_chartdata(coin, exchange, stex_id, function (err, chartdata) { - if (err) { chartdata = []; error = err; } - get_orders(coin, exchange, stex_id, function (err, buys, sells) { - if (err) { error = err; } - get_trades(coin, exchange, stex_id, function (err, trades) { - if (err) { error = err; } - get_summary(coin, exchange, stex_id, function (err, stats) { - if (err) { error = err; } - return cb(error, { buys: buys, sells: sells, chartdata: chartdata, trades: trades, stats: stats }); - }); - }); - }); - }); + market_name: 'Stex', + get_data: function(settings, cb) { + var error = null; + get_pair_id(settings.coin.toUpperCase(), settings.exchange.toUpperCase(), function (err, stex_id) { + get_chartdata(settings.coin.toUpperCase(), settings.exchange.toUpperCase(), stex_id, function (err, chartdata) { + if (err) { chartdata = []; error = err; } + get_orders(settings.coin.toUpperCase(), settings.exchange.toUpperCase(), stex_id, function (err, buys, sells) { + if (err) { error = err; } + get_trades(settings.coin.toUpperCase(), settings.exchange.toUpperCase(), stex_id, function (err, trades) { + if (err) { error = err; } + get_summary(settings.coin.toUpperCase(), settings.exchange.toUpperCase(), stex_id, function (err, stats) { + if (err) { error = err; } + return cb(error, { buys: buys, sells: sells, chartdata: chartdata, trades: trades, stats: stats }); + }); + }); }); - } + }); + }); + } }; \ No newline at end of file diff --git a/lib/markets/yobit.js b/lib/markets/yobit.js index 923fa69..d54549b 100644 --- a/lib/markets/yobit.js +++ b/lib/markets/yobit.js @@ -8,10 +8,19 @@ function get_summary(coin, exchange, cb) { if (error) { return cb(error, null); } else { - if (body.message) { - return cb(body.message, null) - } else { - return cb (null, body[coin + '_' + exchange]); + if (body.message) + return cb(body.message, null); + else { + var summary = {}; + + summary['bid'] = body[coin + '_' + exchange]['buy']; + summary['ask'] = body[coin + '_' + exchange]['sell']; + summary['volume'] = body[coin + '_' + exchange]['vol']; + summary['high'] = body[coin + '_' + exchange]['high']; + summary['low'] = body[coin + '_' + exchange]['low']; + summary['last'] = body[coin + '_' + exchange]['last']; + + return cb(null, summary); } } }); @@ -19,14 +28,28 @@ function get_summary(coin, exchange, cb) { function get_trades(coin, exchange, cb) { var req_url = base_url + '/trades/' + coin + '_' + exchange; + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { if (error) { return cb(error, null); } else { - if (body.message) { - return cb(body.message, null) - } else { - return cb (null, body[coin + '_' + exchange]); + if (body.message) + return cb(body.message, null); + else { + var trades = []; + + for (var i = 0; i < body[coin + '_' + exchange].length; i++) { + var trade = { + ordertype: (body[coin + '_' + exchange][i]['type'].toLowerCase() == 'bid' ? 'BUY' : 'SELL'), + price: body[coin + '_' + exchange][i].price, + quantity: body[coin + '_' + exchange][i].amount, + timestamp: new Date(body[coin + '_' + exchange][i].timestamp * 1000).toUTCString() + } + + trades.push(trade); + } + + return cb(null, trades); } } }); @@ -34,27 +57,55 @@ function get_trades(coin, exchange, cb) { function get_orders(coin, exchange, cb) { var req_url = base_url + '/depth/' + coin + '_' + exchange; + request({uri: req_url, json: true, headers: {'User-Agent': 'eiquidus'}}, function (error, response, body) { - if (body.success == 0) { + if (body.success == 0) return cb(body.error, null, null); - } else { - return cb(null, body[coin + '_' + exchange]['bids'], body[coin + '_' + exchange]['asks']); + else { + var orders = body[coin + '_' + exchange]; + var buys = []; + var sells = []; + + if (orders['bids'].length > 0){ + for (var i = 0; i < orders['bids'].length; i++) { + var order = { + price: orders.bids[i][0], + quantity: orders.bids[i][1] + } + + buys.push(order); + } + } + + if (orders['asks'].length > 0) { + for (var i = 0; i < orders['asks'].length; i++) { + var order = { + price: orders.asks[i][0], + quantity: orders.asks[i][1] + } + + sells.push(order); + } + } + + return cb(null, buys, sells); } }); } module.exports = { - get_data: function(coin, exchange, cb) { + market_name: 'Yobit', + get_data: function(settings, cb) { var error = null; - get_orders(coin, exchange, function(err, buys, sells) { + get_orders(settings.coin.toLowerCase(), settings.exchange.toLowerCase(), function(err, buys, sells) { if (err) { error = err; } - get_trades(coin, exchange, function(err, trades) { + get_trades(settings.coin.toLowerCase(), settings.exchange.toLowerCase(), function(err, trades) { if (err) { error = err; } - get_summary(coin, exchange, function(err, stats) { + get_summary(settings.coin.toLowerCase(), settings.exchange.toLowerCase(), function(err, stats) { if (err) { error = err; } return cb(error, {buys: buys, sells: sells, chartdata: [], trades: trades, stats: stats}); }); }); }); } -}; +}; \ No newline at end of file diff --git a/locale/en.json b/locale/en.json index 6093a6e..bc08598 100644 --- a/locale/en.json +++ b/locale/en.json @@ -132,16 +132,6 @@ "mkt_type": "Type", "mkt_time_stamp": "Time Stamp", - // Markets - "fides": "Fides-ex", - "poloniex": "Poloniex", - "bittrex": "Bittrex", - "altmarkets": "AltMarkets", - "bleutrade": "Bleutrade", - "yobit": "Yobit", - "stex": "Stex", - "crex": "Crex24", - // Heavy rewards view "heavy_title": "Reward/voting information", "heavy_vote": "Vote", diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 5c427ea..33756f6 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -226,4 +226,8 @@ tr { .decimal { font-size: 0.7em; +} + +.marketSpacer { + padding-bottom:10px; } \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index 1e35788..cf1af09 100644 --- a/routes/index.js +++ b/routes/index.js @@ -143,9 +143,11 @@ router.get('/markets/:market', function(req, res) { var market = req.params['market']; if (settings.markets.enabled.indexOf(market) != -1) { db.get_market(market, function(data) { - res.render('./markets/' + market, { + var exMarket = require('../lib/markets/' + market); + res.render('./market', { active: 'markets', marketdata: { + market_name: exMarket.market_name, coin: settings.markets.coin, exchange: settings.markets.exchange, data: data, diff --git a/settings.json.template b/settings.json.template index 010765f..5acafa6 100644 --- a/settings.json.template +++ b/settings.json.template @@ -118,7 +118,7 @@ }, // market settings - //supported markets: bittrex, poloniex, yobit, bleutrade, stex + //included markets: altmarkets, bittrex, bleutrade, crex, fides, poloniex, stex, yobit //default market is loaded by default and determines last price in header "markets": { "coin": "EXOR", diff --git a/views/market.pug b/views/market.pug new file mode 100644 index 0000000..64a1607 --- /dev/null +++ b/views/market.pug @@ -0,0 +1,248 @@ +extends layout + +block content + script. + $(document).ready(function() { + $('.order-table').dataTable({ + info: false, + paging: false, + searching: false, + ordering: false, + scrollY: '250px', + autowidth: true, + responsive: true + }); + $('.market-toggle').tooltip({ + animation: true, + delay: { hide: 500 } + }); + }); + .col-xs-12.col-md-12 + .d-none.nav.navbar.navbar-default(role='navigation' id='market_menu') + .container-fluid + .collapse.navbar-collapse(id='navbar-collapse') + ul.nav.navbar-nav + each mkt in settings.markets.enabled + if market == mkt + li.active + a.navbar-link.loading(href='/markets/' + mkt) #{settings.locale[mkt]} + else + li + a.navbar-link.loading(href='/markets/' + mkt) #{settings.locale[mkt]} + block market_view + - function formatDate(date) { + - var hours = date.getHours(); + - var minutes = date.getMinutes(); + - var seconds = date.getSeconds(); + - var ampm = hours >= 12 ? 'PM' : 'AM'; + - hours = hours % 12; + - hours = hours ? hours : 12; + - hours = hours < 10 ? '0' + hours : hours; + - minutes = minutes < 10 ? '0' + minutes : minutes; + - seconds = seconds < 10 ? '0' + seconds : seconds; + - return (date.getMonth()+1) + '/' + date.getDate() + '/' + date.getFullYear() + ' ' + hours + ':' + minutes + ':' + seconds + ' ' + ampm; + - } + script. + $(document).ready(function() { + var jqplot = null; + var chartData = !{(marketdata.data.chartdata == 'null' || marketdata.data.chartdata == '' || marketdata.data.chartdata == '[]' ? 'null' : marketdata.data.chartdata)}; + + if (chartData != null && chartData.length > 0 ) { + jqplot = $.jqplot('chart', [chartData], { + seriesDefaults: { + yaxis: 'y2axis' + }, + axes: { + xaxis: { + renderer: $.jqplot.DateAxisRenderer, + tickOptions: { formatString: '%R' }, + tickInterval: '2 hours' + }, + y2axis: { + tickOptions: { formatString: '%.8f' }, + } + }, + series: [ + { + renderer: $.jqplot.OHLCRenderer, + rendererOptions: { + candleStick: true, + upBodyColor: '#2aa3a3', + downBodyColor: '#e2595b', + fillUpBody: true, + fillDownBody: true + } + } + ], + highlighter: { + show: true, + showMarker: false, + tooltipAxes: 'xy', + yvalues: 4, + formatString: ' \ + \ + \ + \ + \ +
time:%s
open:%s
hi:%s
low:%s
close:%s
' + } + }); + } + $(window).resize(function () { + if (jqplot != null) + jqplot.replot( { resetAxes: false } ); + }); + }); + .row + .col-md-12.marketSpacer + .card.card-default + .card-header + strong #{marketdata.market_name} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} + if marketdata.data.chartdata == 'null' || marketdata.data.chartdata == '' || marketdata.data.chartdata == '[]' + span.fas.fa-chart-line.float-right.view-chart-disabled.iquidus.market-toggle(style='cursor: pointer;', data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_no_chart) + table.table.table-bordered.summary-table + thead + tr + if marketdata.data.summary.high != null + th #{settings.locale.mkt_high} + if marketdata.data.summary.low != null + th #{settings.locale.mkt_low} + if marketdata.data.summary.volume != null + th #{settings.locale.mkt_volume} + if marketdata.data.summary.volume_btc != null + th.d-none.d-xl-table-cell #{settings.locale.mkt_volume} (#{marketdata.exchange}) + if marketdata.data.summary.bid != null + th.d-none.d-md-table-cell #{settings.locale.mkt_top_bid} + if marketdata.data.summary.ask != null + th.d-none.d-md-table-cell #{settings.locale.mkt_top_ask} + if marketdata.data.summary.last != null + th.d-none.d-xl-table-cell #{settings.locale.mkt_last} + if marketdata.data.summary.prev != null + th.d-none.d-xl-table-cell #{settings.locale.mkt_yesterday} + if marketdata.data.summary.change != null || (marketdata.data.summary.last != null && marketdata.data.summary.prev != null) + th.d-none.d-xl-table-cell #{settings.locale.mkt_change} + tbody + tr + if marketdata.data.summary.high != null + td #{parseFloat(marketdata.data.summary.high).toFixed(8)} + if marketdata.data.summary.low != null + td #{parseFloat(marketdata.data.summary.low).toFixed(8)} + if marketdata.data.summary.volume != null + td #{parseFloat(marketdata.data.summary.volume).toFixed(8)} + if marketdata.data.summary.volume_btc != null + td.d-none.d-xl-table-cell #{parseFloat(marketdata.data.summary.volume_btc).toFixed(8)} + if marketdata.data.summary.bid != null + td.d-none.d-md-table-cell #{parseFloat(marketdata.data.summary.bid).toFixed(8)} + if marketdata.data.summary.ask != null + td.d-none.d-md-table-cell #{parseFloat(marketdata.data.summary.ask).toFixed(8)} + if marketdata.data.summary.last != null + td.d-none.d-xl-table-cell #{parseFloat(marketdata.data.summary.last).toFixed(8)} + if marketdata.data.summary.prev != null + td.d-none.d-xl-table-cell #{parseFloat(marketdata.data.summary.prev).toFixed(8)} + if marketdata.data.summary.change != null || (marketdata.data.summary.last != null && marketdata.data.summary.prev != null) + if marketdata.data.summary.change != null + if marketdata.data.summary.change == '' || marketdata.data.summary.change == '-' + td.d-none.d-xl-table-cell.font-weight-bold 0.00 % + else + - var price_change = parseFloat(marketdata.data.summary.change).toFixed(2); + else + - var price_change = (100 - ((parseFloat(marketdata.data.summary.prev) / parseFloat(marketdata.data.summary.last)) * 100)).toFixed(2); + if price_change >= 0 + td.d-none.d-xl-table-cell.text-success.font-weight-bold +#{price_change} % + else + td.d-none.d-xl-table-cell.text-danger.font-weight-bold #{price_change} % + if marketdata.data.chartdata != 'null' && marketdata.data.chartdata != '' && marketdata.data.chartdata != '[]' + .row + .col-md-12.marketSpacer + .card.card-default + .card-header + strong #{marketdata.market_name} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} + .card-body + div#chart(style='width: 100%; height: 300px;') + .row + .col-md-6.col-xs-12.marketSpacer + .card.card-default + .card-header + h5.card-title #{settings.locale.mkt_buy_orders} + table.table.table-striped.table-bordered.order-table + thead + tr + th #{settings.locale.mkt_price} (#{marketdata.exchange}) + th #{settings.locale.mkt_amount} (#{marketdata.coin}) + th.d-none.d-sm-table-cell #{settings.locale.mkt_total} (#{marketdata.exchange}) + tbody + each buy in marketdata.data.buys + tr + td.text-success.font-weight-bold + =parseFloat(buy.price).toFixed(8) + td + =parseFloat(buy.quantity).toFixed(8) + td.d-none.d-sm-table-cell + if buy.total != null + =parseFloat(buy.total).toFixed(8) + else + =parseFloat(parseFloat(buy.price).toFixed(8) * parseFloat(buy.quantity).toFixed(8)).toFixed(8) + .col-md-6.col-xs-12.marketSpacer + .card.card-default + .card-header + h5.card-title #{settings.locale.mkt_sell_orders} + table.table.table-striped.table-bordered.order-table + thead + tr + th #{settings.locale.mkt_price} (#{marketdata.exchange}) + th #{settings.locale.mkt_amount} (#{marketdata.coin}) + th.d-none.d-sm-table-cell #{settings.locale.mkt_total} (#{marketdata.exchange}) + tbody + each sell in marketdata.data.sells + tr + td.text-danger.font-weight-bold + =parseFloat(sell.price).toFixed(8) + td + =parseFloat(sell.quantity).toFixed(8) + td.d-none.d-sm-table-cell + if sell.total != null + =parseFloat(sell.total).toFixed(8) + else + =parseFloat(parseFloat(sell.price).toFixed(8) * parseFloat(sell.quantity).toFixed(8)).toFixed(8) + .row + .col-md-12.marketSpacer + .card.card-default + .card-header + h5.card-title #{settings.locale.mkt_trade_history} + table.table.table-hover.history-table.table-bordered(cellspacing='0') + thead + tr + th #{settings.locale.mkt_price} (#{marketdata.exchange}) + th #{settings.locale.mkt_amount} (#{marketdata.coin}) + th #{settings.locale.mkt_total} (#{marketdata.exchange}) + th.d-none.d-lg-table-cell #{settings.locale.mkt_time_stamp} + tbody + each order in marketdata.data.history + if order.ordertype != null + if order.ordertype.toUpperCase() == 'BUY' + tr + td.text-success.font-weight-bold + =parseFloat(order.price).toFixed(8) + td + =parseFloat(order.quantity).toFixed(8) + td + if order.total != null + =parseFloat(order.total).toFixed(8) + else + =parseFloat(parseFloat(order.price).toFixed(8) * parseFloat(order.quantity).toFixed(8)).toFixed(8) + td.d-none.d-lg-table-cell + =formatDate(new Date(order.timestamp)) + else + tr + td.text-danger.font-weight-bold + =parseFloat(order.price).toFixed(8) + td + =parseFloat(order.quantity).toFixed(8) + td + if order.total != null + =parseFloat(order.total).toFixed(8) + else + =parseFloat(parseFloat(order.price).toFixed(8) * parseFloat(order.quantity).toFixed(8)).toFixed(8) + td.d-none.d-lg-table-cell + =formatDate(new Date(order.timestamp)) + .footer-padding \ No newline at end of file diff --git a/views/markets/altmarkets.pug b/views/markets/altmarkets.pug deleted file mode 100644 index 12afe0b..0000000 --- a/views/markets/altmarkets.pug +++ /dev/null @@ -1,164 +0,0 @@ -extends menu - -block market_view - script. - $(document).ready(function(){ - $('#summary-panel').hide(); - var ohlc = #{marketdata.data.chartdata}; - var plot2 = $.jqplot('chart',[ohlc],{ - seriesDefaults:{yaxis:'y2axis'}, - axes: { - xaxis: { - renderer:$.jqplot.DateAxisRenderer, - tickOptions:{formatString:'%R'}, - tickInterval: "2 hours", - - }, - y2axis: { - tickOptions:{formatString:'%.8f'}, - } - }, - // To make a candle stick chart, set the "candleStick" option to true. - series: [ - { - renderer:$.jqplot.OHLCRenderer, - rendererOptions:{ candleStick:true } - } - ], - highlighter: { - show: true, - showMarker:false, - tooltipAxes: 'xy', - yvalues: 4, - formatString:' \ - \ - \ - \ - \ -
time:%s
open:%s
hi:%s
low:%s
close:%s
' - } - }); - $(window).resize(function () { - plot2.replot( { resetAxes: false } ); - }); - }); - .row - .col-md-12 - #chart-panel.panel.panel-default - .panel-heading - strong #{settings.locale.altmarkets} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fa.fa-th-list.pull-right.view-summary.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_view_chart) - .panel-body - div#chart(style="width:100%;height:300px;") - #summary-panel.panel.panel-default - .panel-heading - h5 #{settings.locale.altmarkets} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fa.fa-line-chart.float-right.view-chart.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_view_summary) - table.table.table-bordered.summary-table - thead - tr - th #{settings.locale.mkt_high} - th #{settings.locale.mkt_low} - th #{settings.locale.mkt_volume} (#{marketdata.coin}) - th #{settings.locale.mkt_volume} (#{marketdata.exchange}) - th.hidden-xs #{settings.locale.mkt_top_bid} - th.hidden-xs #{settings.locale.mkt_top_ask} - th.hidden-xs #{settings.locale.mkt_last} - th #{settings.locale.mkt_change} - tbody - tr - td #{marketdata.data.summary.high} - td #{marketdata.data.summary.low} - td #{marketdata.data.summary.volume} - td #{marketdata.data.summary.volume_btc} - td.hidden-xs #{marketdata.data.summary.bid} - td.hidden-xs #{marketdata.data.summary.ask} - td.hidden-xs #{marketdata.data.summary.last} - - var altmarkets_change = (marketdata.data.summary.change); - if altmarkets_change >= 0 - td.success +#{altmarkets_change} % - else - td.danger #{altmarkets_change} % - .row - .col-md-6.col-xs-12 - .panel.panel-default - .panel-heading - h5.panel-title #{settings.locale.mkt_buy_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.hidden-xs #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each buy in marketdata.data.buys - tr - td - =buy.price - td - =buy.amount - td.hidden-xs - =buy.total - - .col-md-6.col-xs-12 - .panel.panel-default - .panel-heading - h5.panel-title #{settings.locale.mkt_sell_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.hidden-xs #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each sell in marketdata.data.sells - tr - td - =sell.price - td - =sell.amount - td.hidden-xs - =sell.total - .row - .col-md-12 - .panel.panel-default - .panel-heading - h5.panel-title #{settings.locale.mkt_trade_history} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th.hidden-xs #{settings.locale.mkt_type} - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_total} (#{marketdata.exchange}) - th.hidden-xs #{settings.locale.mkt_time_stamp} - tbody - each order in marketdata.data.history - if order.side == 'up' - tr.success - td.hidden-xs - =order.side - td - =parseFloat(order.volume).toFixed(8) - td - =parseFloat(order.price).toFixed(8) - td - =parseFloat(order.funds).toFixed(8) - td.hidden-xs - =(new Date(order.timestamp * 1000).toUTCString()) - else - tr.danger - td.hidden-xs - =order.side - td - =parseFloat(order.volume).toFixed(8) - td - =parseFloat(order.price).toFixed(8) - td - =parseFloat(order.funds).toFixed(8) - td.hidden-xs - =(new Date(order.timestamp * 1000).toUTCString()) - - .footer-padding \ No newline at end of file diff --git a/views/markets/bittrex.pug b/views/markets/bittrex.pug deleted file mode 100644 index 06191d3..0000000 --- a/views/markets/bittrex.pug +++ /dev/null @@ -1,114 +0,0 @@ -extends menu - -block market_view - .row - .col-md-12 - .card.card-default - .card-header - strong #{settings.locale.bittrex} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fa.fa-line-chart.float-right.view-chart-disabled.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_no_chart) - table.table.table-bordered.summary-table - thead - tr - th #{settings.locale.mkt_high} - th #{settings.locale.mkt_low} - th #{settings.locale.mkt_volume} - th.d-none.d-sm-block #{settings.locale.mkt_top_bid} - th.d-none.d-sm-block #{settings.locale.mkt_top_ask} - th.d-none.d-sm-block #{settings.locale.mkt_yesterday} - th.d-none.d-sm-block #{settings.locale.mkt_last} - th #{settings.locale.mkt_change} - tbody - tr - td #{parseFloat(marketdata.data.summary.High).toFixed(8)} - td #{parseFloat(marketdata.data.summary.Low).toFixed(8)} - td #{parseFloat(marketdata.data.summary.Volume).toFixed(8)} - td.d-none.d-sm-block #{parseFloat(marketdata.data.summary.Bid).toFixed(8)} - td.d-none.d-sm-block #{parseFloat(marketdata.data.summary.Ask).toFixed(8)} - td.d-none.d-sm-block #{parseFloat(marketdata.data.summary.PrevDay).toFixed(8)} - td.d-none.d-sm-block #{parseFloat(marketdata.data.summary.Last).toFixed(8)} - - var bittrex_change = (100 - ((parseFloat(marketdata.data.summary.PrevDay)/parseFloat(marketdata.data.summary.Last))*100)).toFixed(2); - if bittrex_change >= 0 - td.success +#{bittrex_change} % - else - td.danger #{bittrex_change} % - .row - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_buy_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each buy in marketdata.data.buys - tr - td - =buy.price - td - =buy.amount - td.d-none.d-sm-block - =buy.total - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_sell_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each sell in marketdata.data.sells - tr - td - =parseFloat(sell.price).toFixed(8) - td - =parseFloat(sell.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(sell.total).toFixed(8) - .row - .col-md-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_trade_history} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th.d-none.d-sm-block #{settings.locale.mkt_type} - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_total} (#{marketdata.exchange}) - th.d-none.d-sm-block #{settings.locale.mkt_time_stamp} - tbody - each order in marketdata.data.history - if order.OrderType == 'BUY' - tr.success - td.d-none.d-sm-block - =order.OrderType - td - =order.Quantity.toFixed(8) - td - =order.Price.toFixed(8) - td - =order.Total.toFixed(8) - td.d-none.d-sm-block - =order.TimeStamp - else - tr.danger - td.d-none.d-sm-block - =order.OrderType - td - =order.Quantity.toFixed(8) - td - =order.Price.toFixed(8) - td - =order.Total.toFixed(8) - td.d-none.d-sm-block - =order.TimeStamp - .footer-padding \ No newline at end of file diff --git a/views/markets/bleutrade.pug b/views/markets/bleutrade.pug deleted file mode 100644 index 495159d..0000000 --- a/views/markets/bleutrade.pug +++ /dev/null @@ -1,114 +0,0 @@ -extends menu - -block market_view - .row - .col-md-12 - .card.card-default - .card-header - strong #{settings.locale.bleutrade} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fa.fa-line-chart.float-right.view-chart-disabled.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_no_chart) - table.table.table-bordered.summary-table - thead - tr - th #{settings.locale.mkt_high} - th #{settings.locale.mkt_low} - th #{settings.locale.mkt_volume} - th.d-none.d-sm-block #{settings.locale.mkt_top_bid} - th.d-none.d-sm-block #{settings.locale.mkt_top_ask} - th.d-none.d-sm-block #{settings.locale.mkt_yesterday} - th.d-none.d-sm-block #{settings.locale.mkt_last} - th #{settings.locale.mkt_change} - tbody - tr - td #{parseFloat(marketdata.data.summary.High).toFixed(8)} - td #{parseFloat(marketdata.data.summary.Low).toFixed(8)} - td #{parseFloat(marketdata.data.summary.Volume).toFixed(8)} - td.d-none.d-sm-block #{parseFloat(marketdata.data.summary.Bid).toFixed(8)} - td.d-none.d-sm-block #{parseFloat(marketdata.data.summary.Ask).toFixed(8)} - td.d-none.d-sm-block #{parseFloat(marketdata.data.summary.PrevDay).toFixed(8)} - td.d-none.d-sm-block #{parseFloat(marketdata.data.summary.Last).toFixed(8)} - - var bleutrade_change = (100 - ((parseFloat(marketdata.data.summary.PrevDay)/parseFloat(marketdata.data.summary.Last))*100)).toFixed(2); - if bleutrade_change >= 0 - td.success +#{bleutrade_change} % - else - td.danger #{bleutrade_change} % - .row - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_buy_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each buy in marketdata.data.buys - tr - td - =parseFloat(buy.price).toFixed(8) - td - =parseFloat(buy.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(buy.total).toFixed(8) - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_sell_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each sell in marketdata.data.sells - tr - td - =parseFloat(sell.price).toFixed(8) - td - =parseFloat(sell.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(sell.total).toFixed(8) - .row - .col-md-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_trade_history} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th.d-none.d-sm-block #{settings.locale.mkt_type} - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_total} (#{marketdata.exchange}) - th #{settings.locale.mkt_time_stamp} - tbody - each order in marketdata.data.history - if order.OrderType == "BUY" - tr.success - td.d-none.d-sm-block - =order.OrderType - td - =order.Quantity.toFixed(8) - td - =order.Price.toFixed(8) - td - =order.Total.toFixed(8) - td.d-none.d-sm-block - =order.TimeStamp - else - tr.danger - td.d-none.d-sm-block - =order.OrderType - td - =order.Quantity.toFixed(8) - td - =order.Price.toFixed(8) - td - =order.Total.toFixed(8) - td.d-none.d-sm-block - =order.TimeStamp - .footer-padding \ No newline at end of file diff --git a/views/markets/crex.pug b/views/markets/crex.pug deleted file mode 100644 index 480236d..0000000 --- a/views/markets/crex.pug +++ /dev/null @@ -1,106 +0,0 @@ -extends menu - -block market_view - .row - .col-md-12 - .card.card-default - .card-header - strong #{settings.locale.crex} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fas.fa-chart-line.float-right.view-chart-disabled.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_no_chart) - table.table.table-bordered.summary-table - thead - tr - th #{settings.locale.mkt_high} - th #{settings.locale.mkt_low} - th #{settings.locale.mkt_volume} - th.d-none.d-sm-block #{settings.locale.mkt_top_bid} - th.d-none.d-sm-block #{settings.locale.mkt_top_ask} - th.d-none.d-sm-block #{settings.locale.mkt_last} - tbody - tr - td #{marketdata.data.summary.high} - td #{marketdata.data.summary.low} - td #{marketdata.data.summary.volume} - td.d-none.d-sm-block #{marketdata.data.summary.bid} - td.d-none.d-sm-block #{marketdata.data.summary.ask} - td.d-none.d-sm-block #{marketdata.data.summary.last} - .row - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_buy_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each buy in marketdata.data.buys - tr - td - =parseFloat(buy.price).toFixed(8) - td - =parseFloat(buy.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(buy.total).toFixed(8) - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_sell_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each sell in marketdata.data.sells - tr - td - =parseFloat(sell.price).toFixed(8) - td - =parseFloat(sell.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(sell.total).toFixed(8) - .row - .col-md-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_trade_history} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th.d-none.d-sm-block #{settings.locale.mkt_type} - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_total} (#{marketdata.exchange}) - th #{settings.locale.mkt_time_stamp} - tbody - each order in marketdata.data.history - if order.ordertype.toUpperCase() == 'BUY' - tr.success - td.d-none.d-sm-block - =order.ordertype - td - =order.amount - td - =order.price - td - =order.total - td.d-none.d-sm-block - =(new Date(order.timestamp * 1000).toUTCString()) - else - tr.danger - td.d-none.d-sm-block - =order.ordertype - td - =order.amount - td - =order.price - td - =order.total - td.d-none.d-sm-block - =(new Date(order.timestamp * 1000).toUTCString()) - .footer-padding \ No newline at end of file diff --git a/views/markets/fides.pug b/views/markets/fides.pug deleted file mode 100644 index 3aed92e..0000000 --- a/views/markets/fides.pug +++ /dev/null @@ -1,113 +0,0 @@ -extends menu - -block market_view - .row - .col-md-12 - .panel.panel-default - .panel-heading - strong #{settings.locale.fides} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fa.fa-line-chart.float-right.view-chart-disabled.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_no_chart) - table.table.table-bordered.summary-table - thead - tr - th #{settings.locale.mkt_high} - th #{settings.locale.mkt_low} - th #{settings.locale.mkt_volume} - th.hidden-xs #{settings.locale.mkt_top_bid} - th.hidden-xs #{settings.locale.mkt_top_ask} - th.hidden-xs #{settings.locale.mkt_last} - th #{settings.locale.mkt_change} - tbody - tr - td #{marketdata.data.summary.high} - td #{marketdata.data.summary.low} - td #{marketdata.data.summary.volume} - td.hidden-xs #{marketdata.data.summary.bid} - td.hidden-xs #{marketdata.data.summary.ask} - td.hidden-xs #{marketdata.data.summary.last} - - var fides_change = parseFloat(marketdata.data.summary.change).toFixed(4).replace(/(?:\.0+|(\.\d+?)0+)$/, "$1"); - if fides_change >= 0 - td.success +#{fides_change} % - else - td.danger #{fides_change} % - .row - .col-md-6.col-xs-12 - .panel.panel-default - .panel-heading - h3.panel-title #{settings.locale.mkt_buy_orders} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th.hidden-xs #{settings.locale.mkt_total} (#{marketdata.coin}) - th #{settings.locale.mkt_amount} (#{marketdata.exchange}) - tbody - each buy in marketdata.data.buys - tr - td - =parseFloat(buy.Rate).toFixed(8) - td - =parseFloat(buy.Volume).toFixed(8) - td.hidden-xs - =parseFloat(buy.Total).toFixed(8) - - .col-md-6.col-xs-12 - .panel.panel-default - .panel-heading - h3.panel-title #{settings.locale.mkt_sell_orders} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange }) - th.hidden-xs #{settings.locale.mkt_total} (#{marketdata.coin }) - th #{settings.locale.mkt_amount} (#{marketdata.exchange}) - tbody - each sell in marketdata.data.sells - tr - td - =parseFloat(sell.Rate).toFixed(8) - td - =parseFloat(sell.Volume).toFixed(8) - td.hidden-xs - =parseFloat(sell.Total).toFixed(8) - .row - .col-md-12 - .panel.panel-default - .panel-heading - h3.panel-title #{settings.locale.mkt_trade_history} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th.hidden-xs #{settings.locale.mkt_type} - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_total} (#{marketdata.exchange}) - th.hidden-xs #{settings.locale.mkt_time_stamp} - tbody - each result in marketdata.data.history - if result.Type == 'SELL' - tr.danger - td.hidden-xs - =result.Type - td - =result.Volume.toFixed(8) - td - =result.Rate.toFixed(8) - td - =result.Total.toFixed(8) - td.hidden-xs - =result.Date - else - tr.success - td.hidden-xs - =result.Type - td - =result.Volume.toFixed(8) - td - =result.Rate.toFixed(8) - td - =result.Total.toFixed(8) - td.hidden-xs - =result.Date - .footer-padding diff --git a/views/markets/menu.pug b/views/markets/menu.pug deleted file mode 100644 index 6e042fa..0000000 --- a/views/markets/menu.pug +++ /dev/null @@ -1,40 +0,0 @@ -extends ../layout - -block content - script. - $(document).ready(function(){ - $('.order-table').dataTable( { - info: false, - paging: false, - searching: false, - ordering: false, - scrollY: '250px', - autowidth: true, - responsive: true - }); - $('.market-toggle').tooltip({ - animation: true, - delay: { hide: 500 }, - }); - $('.view-summary').on('click', function(){ - $('#chart-panel').hide(); - $('#summary-panel').show(); - }); - $('.view-chart').on('click', function(){ - $('#summary-panel').hide(); - $('#chart-panel').show(); - }); - }); - .col-xs-12.col-md-12 - .d-none.nav.navbar.navbar-default(role='navigation' id='market_menu') - .container-fluid - .collapse.navbar-collapse(id='navbar-collapse') - ul.nav.navbar-nav - each mkt in settings.markets.enabled - if market == mkt - li.active - a.navbar-link.loading(href='/markets/' + mkt) #{settings.locale[mkt]} - else - li - a.navbar-link.loading(href='/markets/' + mkt) #{settings.locale[mkt]} - block market_view \ No newline at end of file diff --git a/views/markets/poloniex.pug b/views/markets/poloniex.pug deleted file mode 100644 index 83d5f6d..0000000 --- a/views/markets/poloniex.pug +++ /dev/null @@ -1,180 +0,0 @@ -extends menu - -block market_view - script. - $(document).ready(function(){ - $('#summary-card').hide(); - var ohlc = !{marketdata.data.chartdata} - var plot2 = $.jqplot('chart',[ohlc],{ - seriesDefaults:{yaxis:'y2axis'}, - axes: { - xaxis: { - renderer:$.jqplot.DateAxisRenderer, - tickOptions:{formatString:'%R'}, - tickInterval: "2 hours", - - }, - y2axis: { - tickOptions:{formatString:'%.8f'}, - } - }, - // To make a candle stick chart, set the "candleStick" option to true. - series: [ - { - renderer:$.jqplot.OHLCRenderer, - rendererOptions:{ candleStick:true } - } - ], - highlighter: { - show: true, - showMarker:false, - tooltipAxes: 'xy', - yvalues: 4, - formatString:' \ - \ - \ - \ - \ -
time:%s
open:%s
hi:%s
low:%s
close:%s
' - } - }); - $(window).resize(function () { - plot2.replot( { resetAxes: false } ); - }); - }); - .row - .d-none.col-md-12 - #chart-card.card.card-default - .card-header - strong #{settings.locale.poloniex} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fa.fa-th-list.float-right.view-summary.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_view_summary) - .card-body - div#chart(style="width:100%;height:300px;") - #summary-card.card.card-default - .card-header - strong #{settings.locale.poloniex} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fas.fa-chart-line.float-right.view-chart.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_view_chart) - table.table.table-bordered.summary-table - thead - tr - th #{settings.locale.mkt_high} - th #{settings.locale.mkt_low} - th #{settings.locale.mkt_volume} - th.d-none.d-sm-block #{settings.locale.mkt_top_bid} - th.d-none.d-sm-block #{settings.locale.mkt_top_ask} - th.d-none.d-sm-block #{settings.locale.mkt_yesterday} - th.d-none.d-sm-block #{settings.locale.mkt_last} - th #{settings.locale.mkt_change} - tbody - tr - td #{marketdata.data.summary['high24hr']} - td #{marketdata.data.summary['low24hr']} - td #{marketdata.data.summary['baseVolume']} - td.d-none.d-sm-block #{marketdata.data.summary.highestBid} - td.d-none.d-sm-block #{marketdata.data.summary.lowestAsk} - td.d-none.d-sm-block #{marketdata.data.summary.last} - if marketdata.data.summary.percentChange.substring(0, 1) == '-' - td.danger #{marketdata.data.summary.percentChange} % - else - td.success #{marketdata.data.summary.percentChange} % - .d-md-none.d-lg-none.col-xs-12 - .card.card-default - .card-header - strong Poloniex - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fa.fa-line-chart.float-right.view-chart-disabled.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_no_chart) - table.table.table-bordered.summary-table - thead - tr - th #{settings.locale.mkt_high} - th #{settings.locale.mkt_low} - th #{settings.locale.mkt_volume} - th #{settings.locale.mkt_change} - tbody - tr - td #{marketdata.data.summary['high24hr']} - td #{marketdata.data.summary['low24hr']} - td #{marketdata.data.summary['baseVolume']} - if marketdata.data.summary.percentChange.substring(0, 1) == '-' - td.danger #{marketdata.data.summary.percentChange} % - else - td.success #{marketdata.data.summary.percentChange} % - .row - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_buy_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each buy in marketdata.data.buys - tr - td - =parseFloat(buy.price).toFixed(8) - td - =parseFloat(buy.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(buy.total).toFixed(8) - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_sell_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each sell in marketdata.data.sells - tr - td - =parseFloat(sell.price).toFixed(8) - td - =parseFloat(sell.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(sell.total).toFixed(8) - .row - .col-md-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_trade_history} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th.d-none.d-sm-block #{settings.locale.mkt_type} - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_total} (#{marketdata.exchange}) - th #{settings.locale.mkt_time_stamp} - tbody - each trade in marketdata.data.history - if trade.type == 'buy' - tr.success - td.d-none.d-sm-blockBUY - td - =trade.amount - td - =trade.rate - td.d-none.d-sm-block - =trade.total - td.d-none.d-sm-block - =trade.date - else - tr.danger - td.d-none.d-sm-blockSELL - td - =trade.amount - td - =trade.rate - td.d-none.d-sm-block - =trade.total - td.d-none.d-sm-block - =trade.date - .footer-padding \ No newline at end of file diff --git a/views/markets/stex.pug b/views/markets/stex.pug deleted file mode 100644 index 8bf9c58..0000000 --- a/views/markets/stex.pug +++ /dev/null @@ -1,106 +0,0 @@ -extends menu - -block market_view - .row - .col-md-12 - .card.card-default - .card-header - strong #{settings.locale.stex} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fas.fa-chart-line.float-right.view-chart-disabled.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_no_chart) - table.table.table-bordered.summary-table - thead - tr - th #{settings.locale.mkt_high} - th #{settings.locale.mkt_low} - th #{settings.locale.mkt_volume} - th.d-none.d-sm-block #{settings.locale.mkt_top_bid} - th.d-none.d-sm-block #{settings.locale.mkt_top_ask} - th.d-none.d-sm-block #{settings.locale.mkt_last} - tbody - tr - td #{marketdata.data.summary.high} - td #{marketdata.data.summary.low} - td #{marketdata.data.summary.volume} - td.d-none.d-sm-block #{marketdata.data.summary.bid} - td.d-none.d-sm-block #{marketdata.data.summary.ask} - td.d-none.d-sm-block #{marketdata.data.summary.last} - .row - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_buy_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each buy in marketdata.data.buys - tr - td - =parseFloat(buy.price).toFixed(8) - td - =parseFloat(buy.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(buy.total).toFixed(8) - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_sell_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each sell in marketdata.data.sells - tr - td - =parseFloat(sell.price).toFixed(8) - td - =parseFloat(sell.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(sell.total).toFixed(8) - .row - .col-md-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_trade_history} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th.d-none.d-sm-block #{settings.locale.mkt_type} - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_total} (#{marketdata.exchange}) - th #{settings.locale.mkt_time_stamp} - tbody - each order in marketdata.data.history - if order.ordertype.toUpperCase() == 'BUY' - tr.success - td.d-none.d-sm-block - =order.ordertype - td - =order.amount - td - =order.price - td - =order.total - td.d-none.d-sm-block - =(new Date(order.timestamp * 1000).toUTCString()) - else - tr.danger - td.d-none.d-sm-block - =order.ordertype - td - =order.amount - td - =order.price - td - =order.total - td.d-none.d-sm-block - =(new Date(order.timestamp * 1000).toUTCString()) - .footer-padding \ No newline at end of file diff --git a/views/markets/yobit.pug b/views/markets/yobit.pug deleted file mode 100644 index 68f2093..0000000 --- a/views/markets/yobit.pug +++ /dev/null @@ -1,106 +0,0 @@ -extends menu - -block market_view - .row - .col-md-12 - .card.card-default - .card-header - strong #{settings.locale.yobit} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} - a(href='#') - span.fas.fa-chart-line.float-right.view-chart-disabled.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_no_chart) - table.table.table-bordered.summary-table - thead - tr - th #{settings.locale.mkt_high} - th #{settings.locale.mkt_low} - th.d-none.d-sm-block #{settings.locale.mkt_top_bid} - th.d-none.d-sm-block #{settings.locale.mkt_top_ask} - th.d-none.d-sm-block #{settings.locale.mkt_last} - tbody - tr - td #{marketdata.data.summary.high} - td #{marketdata.data.summary.low} - td.d-none.d-sm-block #{marketdata.data.summary.buy} - td.d-none.d-sm-block #{marketdata.data.summary.sell} - td.d-none.d-sm-block #{marketdata.data.summary.last} - .row - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_buy_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each buy in marketdata.data.buys - tr - td - =parseFloat(buy.price).toFixed(8) - td - =parseFloat(buy.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(buy.total).toFixed(8) - .col-md-6.col-xs-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_sell_orders} - table.table.table-striped.table-bordered.order-table - thead - tr - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th.d-none.d-sm-block #{settings.locale.mkt_total} (#{marketdata.exchange}) - tbody - each sell in marketdata.data.sells - tr - td - =parseFloat(sell.price).toFixed(8) - td - =parseFloat(sell.amount).toFixed(8) - td.d-none.d-sm-block - =parseFloat(sell.total).toFixed(8) - .row - .col-md-12 - .card.card-default - .card-header - h3.card-title #{settings.locale.mkt_trade_history} - table.table.table-hover.history-table.table-bordered(cellspacing="0") - thead - tr - th.d-none.d-sm-block #{settings.locale.mkt_type} - th #{settings.locale.mkt_amount} (#{marketdata.coin}) - th #{settings.locale.mkt_price} (#{marketdata.exchange}) - th #{settings.locale.mkt_total} (#{marketdata.exchange}) - th #{settings.locale.mkt_time_stamp} - tbody - each order in marketdata.data.history - if order.type == 'bid' - tr.success - td.d-none.d-sm-block - =order.type - td - =order.amount.toFixed(8) - td - =order.price.toFixed(8) - td - - var total = order.amount * order.price; - =total.toFixed(8) - td.d-none.d-sm-block - =format_unixtime(order.timestamp) - else - tr.danger - td.d-none.d-sm-block - =order.type - td - =order.amount.toFixed(8) - td - =order.price.toFixed(8) - td - - var total = order.amount * order.price; - =total.toFixed(8) - td.d-none.d-sm-block - =format_unixtime(order.timestamp) - .footer-padding \ No newline at end of file