Complete overhaul of all markets

This commit is contained in:
joeuhren
2020-11-27 20:34:15 -07:00
parent ed22c671fc
commit 85fef18cdb
24 changed files with 988 additions and 1492 deletions
+4 -4
View File
@@ -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}, {
-9
View File
@@ -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;
+66 -46
View File
@@ -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 = {
});
});
}
};
};
+98 -36
View File
@@ -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});
});
});
});
});
}
};
};
+101 -43
View File
@@ -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});
});
});
});
});
}
};
};
+100 -68
View File
@@ -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});
});
});
});
});
+100 -60
View File
@@ -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() + '&quoteCurrency=' + exchange.toUpperCase() + '&timestamp=' + (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});
});
});
});
});
}
};
};
+73 -28
View File
@@ -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&currencyPair=' + 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&currencyPair=' + 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&currencyPair=' + 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});
});
+123 -127
View File
@@ -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 });
});
});
});
}
});
});
}
};
+67 -16
View File
@@ -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});
});
});
});
}
};
};
-10
View File
@@ -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",
+4
View File
@@ -226,4 +226,8 @@ tr {
.decimal {
font-size: 0.7em;
}
.marketSpacer {
padding-bottom:10px;
}
+3 -1
View File
@@ -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,
+1 -1
View File
@@ -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",
+248
View File
@@ -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: '<table class="jqplot-highlighter"> \
<tr><td>time:</td><td>%s</td></tr> \
<tr><td>open:</td><td>%s</td></tr> \
<tr><td>hi:</td><td>%s</td></tr> \
<tr><td>low:</td><td>%s</td></tr> \
<tr><td>close:</td><td>%s</td></tr></table>'
}
});
}
$(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
-164
View File
@@ -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:'<table class="jqplot-highlighter"> \
<tr><td>time:</td><td>%s</td></tr> \
<tr><td>open:</td><td>%s</td></tr> \
<tr><td>hi:</td><td>%s</td></tr> \
<tr><td>low:</td><td>%s</td></tr> \
<tr><td>close:</td><td>%s</td></tr></table>'
}
});
$(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
-114
View File
@@ -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
-114
View File
@@ -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
-106
View File
@@ -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
-113
View File
@@ -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
-40
View File
@@ -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
-180
View File
@@ -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:'<table class="jqplot-highlighter"> \
<tr><td>time:</td><td>%s</td></tr> \
<tr><td>open:</td><td>%s</td></tr> \
<tr><td>hi:</td><td>%s</td></tr> \
<tr><td>low:</td><td>%s</td></tr> \
<tr><td>close:</td><td>%s</td></tr></table>'
}
});
$(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
-106
View File
@@ -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
-106
View File
@@ -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