From 5527fc94e38a6355936ef333c7637cbbd6cbec04 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Fri, 9 Mar 2018 10:56:50 +0000 Subject: [PATCH 01/74] Exchanges: update-products 788 --- extensions/exchanges/bittrex/products.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index a3226ca8d6..9515e761b7 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -2182,5 +2182,21 @@ "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TUSD" + }, + { + "asset": "LRC", + "currency": "BTC", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "BTC/LRC" + }, + { + "asset": "LRC", + "currency": "ETH", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "ETH/LRC" } ] \ No newline at end of file From 7dc71d036c88035d4f5880171b6464cfe1d07a81 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Sat, 10 Mar 2018 10:58:38 +0000 Subject: [PATCH 02/74] Exchanges: update-products 791 --- extensions/exchanges/bittrex/products.json | 40 ---------------------- 1 file changed, 40 deletions(-) diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index 9515e761b7..e14a637408 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -655,14 +655,6 @@ "increment": "0.00000001", "label": "BTC/EXP" }, - { - "asset": "INFX", - "currency": "BTC", - "min_size": "10.55743243", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/INFX" - }, { "asset": "OMNI", "currency": "BTC", @@ -679,14 +671,6 @@ "increment": "0.00000001", "label": "BTC/AMP" }, - { - "asset": "AGRS", - "currency": "BTC", - "min_size": "1.44508671", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/AGRS" - }, { "asset": "XLM", "currency": "BTC", @@ -735,14 +719,6 @@ "increment": "0.00000001", "label": "BTC/FCT" }, - { - "asset": "MAID", - "currency": "BTC", - "min_size": "6.36780438", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/MAID" - }, { "asset": "EGC", "currency": "BTC", @@ -1375,14 +1351,6 @@ "increment": "0.00000001", "label": "BTC/ZEN" }, - { - "asset": "1ST", - "currency": "BTC", - "min_size": "6.99105145", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/1ST" - }, { "asset": "QRL", "currency": "BTC", @@ -1391,14 +1359,6 @@ "increment": "0.00000001", "label": "BTC/QRL" }, - { - "asset": "1ST", - "currency": "ETH", - "min_size": "11.84300907", - "max_size": "1000000", - "increment": "0.00000001", - "label": "ETH/1ST" - }, { "asset": "QRL", "currency": "ETH", From 618209dc5ceaedf7664d63df3a59504bb45d9eff Mon Sep 17 00:00:00 2001 From: eggman Date: Mon, 12 Mar 2018 19:15:46 +0900 Subject: [PATCH 03/74] Fix : Initialize fail in paper mode. (#1488) I noticed current version can't use paper mode. I investigated that engine.update() is stall in initialize process. It fixed when omit setting of clock in paper mode. --- lib/engine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/engine.js b/lib/engine.js index 0d63f05f51..c0d5d32bf0 100644 --- a/lib/engine.js +++ b/lib/engine.js @@ -773,7 +773,7 @@ module.exports = function (s, conf) { } function withOnPeriod (trade, period_id, cb) { - if (!clock && so.mode !== 'live') clock = lolex.install({ shouldAdvanceTime: false, now: trade.time }) + if (!clock && so.mode !== 'live' && so.mode !== 'paper') clock = lolex.install({ shouldAdvanceTime: false, now: trade.time }) updatePeriod(trade) if (!s.in_preroll) { From eca54734f5838ae4b7e99505e3802152063ddad7 Mon Sep 17 00:00:00 2001 From: theDiverDK Date: Mon, 12 Mar 2018 11:17:54 +0100 Subject: [PATCH 04/74] Fixed spelling error (#1485) --- scripts/genetic_backtester/darwin.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/genetic_backtester/darwin.js b/scripts/genetic_backtester/darwin.js index b41c066e34..0586a346d5 100755 --- a/scripts/genetic_backtester/darwin.js +++ b/scripts/genetic_backtester/darwin.js @@ -10,7 +10,7 @@ * --population_data= filename used for continueing backtesting from previous run * --generateLaunch=| will generate .sh and .bat file using the best generation discovered * --ignoreLaunchFitness=| if used with --generateLaunch it will always write a new launch file regardless if latest fitness is greater - * --floatScanWindow Time widow used for analyzing data be adjusted every generation + * --floatScanWindow Time window used for analyzing data be adjusted every generation * --population= populate per strategy * --maxCores= maximum processes to execute at a time default is # of cpu cores in system * --selector= @@ -88,8 +88,8 @@ let writeSimDataFile = (iteration, data) => { function allStrategyNames () { let pathName = path.resolve(__dirname, '..','..', 'extensions', 'strategies') return fs.readdirSync(pathName).filter(function (file) { - return fs.statSync(pathName+'/'+file).isDirectory(); - }); + return fs.statSync(pathName+'/'+file).isDirectory() + }) } function isUsefulKey (key) { @@ -407,7 +407,7 @@ for (var i = 0; i < selectedStrategies.length; i++) { let evolve = true let population = [] for (var i2 = population.length; i2 < populationSize; ++i2) { - population.push(Phenotypes.create(strategyPhenotypes)) + population.push(Phenotypes.create(strategyPhenotypes)) evolve = false } From 93ab51dac3099990f7b298f99326e09e76ebf7be Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Mon, 12 Mar 2018 11:18:54 +0100 Subject: [PATCH 05/74] fix canceled orders in gdax are detected as a successful order in websocket connection and bot does mark it as bought (#1482) --- extensions/exchanges/gdax/exchange.js | 47 +++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/extensions/exchanges/gdax/exchange.js b/extensions/exchanges/gdax/exchange.js index 07ee460706..2a5ff18aba 100644 --- a/extensions/exchanges/gdax/exchange.js +++ b/extensions/exchanges/gdax/exchange.js @@ -165,11 +165,54 @@ module.exports = function gdax (conf) { } function handleOrderDone(update, product_id) { - var cached_order = websocket_cache[product_id].orders['~'+update.order_id] + let cached_order = websocket_cache[product_id].orders['~'+update.order_id] if(cached_order){ + /* + order canceled by user or on platform: which must be retried see "reason": + { type: 'done', + side: 'sell', + order_id: 'xxxx', + reason: 'canceled', + product_id: 'LTC-EUR', + price: '142.33000000', + remaining_size: '1.24390150', + sequence: 1337, + user_id: '5a2aeXXX', + profile_id: 'xxx', + time: '2018-03-09T16:28:49.293000Z' + } + + complete order response; no further action: + { type: 'done', + side: 'sell', + order_id: 'xxxx', + reason: 'filled', + product_id: 'LTC-EUR', + price: '142.81000000', + remaining_size: '0.00000000', + sequence: 1337, + user_id: '5a2aeXXX', + profile_id: 'xxx', + time: '2018-03-09T16:56:39.352000Z' + } + */ + + // get order "reason": + // - "canceled" by user or platform + // - "filled" order successfully placed and filled + let reason = update.reason + cached_order.status = 'done' + + // "canceled" is not a success order instead it must be retried + // force zenbot a order retry; see "engine.js" for possible retry conditions + if (reason && reason == 'canceled') { + cached_order.status = 'rejected' + cached_order.reject_reason = 'post only' + } + cached_order.done_at = update.time - cached_order.done_reason = update.reason, + cached_order.done_reason = reason cached_order.settled = true } } From 10360cbf78e1a042920e68ca11c811b36b4bf7d1 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Mon, 12 Mar 2018 10:59:34 +0000 Subject: [PATCH 06/74] Exchanges: update-products 799 --- extensions/exchanges/binance/products.json | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index 9a6a840607..5d5e6d5f65 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2788,5 +2788,35 @@ "increment": "0.00001", "asset_increment": "0.01", "label": "ONT/BNB" + }, + { + "id": "STORMBTC", + "asset": "STORM", + "currency": "BTC", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "STORM/BTC" + }, + { + "id": "STORMETH", + "asset": "STORM", + "currency": "ETH", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "STORM/ETH" + }, + { + "id": "STORMBNB", + "asset": "STORM", + "currency": "BNB", + "min_size": "0.01000000", + "max_size": "10000.00000000", + "increment": "0.00001", + "asset_increment": "0.01", + "label": "STORM/BNB" } ] \ No newline at end of file From 91cc45df5927457fdc7448eb30fa1372d0456523 Mon Sep 17 00:00:00 2001 From: defkev Date: Mon, 12 Mar 2018 17:38:54 +0100 Subject: [PATCH 07/74] Always use lowest/highest price for buy/sell loss protection (#1471) * Always use lowest/highest price for buy/sell loss protection On consecutive buys/sells the bot would always use the last price for loss protection, which could lead to a potential (sic) loss if the last price is below/above (depending on the order type) any previous price of the same order type. To overcome this we will lookup all previous orders (of the same type) and adjust last price to the highest/lowest within the previous orders. Will this isn't a true FIFO (as we don't account for any amount bought/sold) it goes in the same direction by always "aiming" for a profit. This completely removes held_pct, which i presume was supposed to accomplish the same but seems to be causing a bug preventing the bot from doing consequtive buys. Also some linter fixes will i am already at it. * linter Looks my master has different likings. * Refactor sell/loss protection update * Use lodash instead of legacy * Completely replaces the semi static last_buy|sell_price for loss protection * Include previous trades, if enabled/available * Always use the lowest/highest (aka. worst) price from within previous orders of the opposite signal, even on repeating signals * Typo in var duh --- commands/trade.js | 2 +- lib/engine.js | 43 ++++++++++++++++++++++------------------- templates/dashboard.ejs | 2 +- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/commands/trade.js b/commands/trade.js index f1a2166a3e..f4fc9ec212 100644 --- a/commands/trade.js +++ b/commands/trade.js @@ -409,7 +409,7 @@ module.exports = function (program, conf) { my_trades.find({selector: so.selector.normalized, time : {$gte : trades[0].time}}).limit(0).toArray(function (err, my_prev_trades) { if (err) throw err if (my_prev_trades.length) { - s.my_prev_trades = my_prev_trades.slice(0).sort(function(a,b){return a.time + a.execution_time > b.time + b.execution_time ? -1 : 1}) // simple copy, most recent executed first + s.my_prev_trades = my_prev_trades.slice(0).sort(function(a,b){return a.time + a.execution_time < b.time + b.execution_time ? -1 : 1}) // simple copy, less recent executed first } }) } diff --git a/lib/engine.js b/lib/engine.js index c0d5d32bf0..9313d81d77 100644 --- a/lib/engine.js +++ b/lib/engine.js @@ -209,7 +209,7 @@ module.exports = function (s, conf) { if (s.my_trades.length) { last_trade = s.my_trades[s.my_trades.length - 1] } else { - last_trade = s.my_prev_trades[0] + last_trade = s.my_prev_trades[s.my_prev_trades.length - 1] } s.last_trade_worth = last_trade.type === 'buy' ? (s.period.close - last_trade.price) / last_trade.price : (last_trade.price - s.period.close) / last_trade.price if (!s.acted_on_stop) { @@ -341,7 +341,7 @@ module.exports = function (s, conf) { // 8. if not filled after timer, repeat process // 9. if filled, record order stats function executeSignal (signal, _cb, size, is_reorder, is_taker) { - let price, expected_fee, buy_pct, sell_pct + let price, expected_fee, buy_pct, sell_pct, trades delete s[(signal === 'buy' ? 'sell' : 'buy') + '_order'] s.last_signal = signal if (!is_reorder && s[signal + '_order']) { @@ -392,6 +392,11 @@ module.exports = function (s, conf) { msg('price changed, resizing order, ' + reorder_pct + '% remain') size = null } + if (s.my_prev_trades.length) { + trades = _.concat(s.my_prev_trades, s.my_trades) + } else { + trades = _.cloneDeep(s.my_trades) + } if (signal === 'buy') { price = nextBuyForQuote(s, quote) @@ -406,10 +411,6 @@ module.exports = function (s, conf) { let buy_max_as_pct = n(adjusted_buy_max_amt).divide(s.balance.currency).multiply(100).value() buy_pct = buy_max_as_pct } - } else { // account for held assets as % - let held_pct = n(s.asset_capital).divide(s.balance.currency).multiply(100).value() - let to_buy_pct = n(buy_pct).subtract(held_pct).value() - buy_pct = to_buy_pct } if (so.use_fee_asset) { fee = 0 @@ -432,13 +433,8 @@ module.exports = function (s, conf) { size = s.product.max_size } msg('preparing buy order over ' + fa(size) + ' of ' + fc(tradeable_balance) + ' (' + buy_pct + '%) tradeable balance with a expected fee of ' + fc(expected_fee) + ' (' + fee + '%)') - if (!s.last_sell_price && s.my_prev_trades.length) { - var prev_sells = s.my_prev_trades.filter(trade => trade.type === 'sell') - if (prev_sells.length) { - s.last_sell_price = prev_sells[0].price - } - } - let buy_loss = s.last_sell_price ? (s.last_sell_price - Number(price)) / s.last_sell_price * -100 : null + let latest_low_sell = _.chain(trades).dropRightWhile(['type','buy']).takeRightWhile(['type','sell']).sortBy(['price']).head().value() // return lowest price + let buy_loss = latest_low_sell ? (latest_low_sell.price - Number(price)) / latest_low_sell.price * -100 : null if (so.max_buy_loss_pct != null && buy_loss > so.max_buy_loss_pct) { let err = new Error('\nloss protection') err.desc = 'refusing to buy at ' + fc(price) + ', buy loss of ' + pct(buy_loss / 100) @@ -485,13 +481,8 @@ module.exports = function (s, conf) { if (s.product.max_size && Number(size) > Number(s.product.max_size)) { size = s.product.max_size } - if (!s.last_buy_price && s.my_prev_trades.length) { - var prev_buys = s.my_prev_trades.filter(trade => trade.type === 'buy') - if (prev_buys.length) { - s.last_buy_price = prev_buys[0].price - } - } - let sell_loss = s.last_buy_price ? (Number(price) - s.last_buy_price) / s.last_buy_price * -100 : null + let latest_high_buy = _.chain(trades).dropRightWhile(['type','sell']).takeRightWhile(['type','buy']).sortBy(['price']).reverse().head().value() // return highest price + let sell_loss = latest_high_buy ? (Number(price) - latest_high_buy.price) / latest_high_buy.price * -100 : null if (so.max_sell_loss_pct != null && sell_loss > so.max_sell_loss_pct) { let err = new Error('\nloss protection') err.desc = 'refusing to sell at ' + fc(price) + ', sell loss of ' + pct(sell_loss / 100) @@ -588,6 +579,12 @@ module.exports = function (s, conf) { } } s.action = 'bought' + if (!s.last_sell_price && s.my_prev_trades.length) { + let prev_sells = s.my_prev_trades.filter(trade => trade.type === 'sell') + if (prev_sells.length) { + s.last_sell_price = prev_sells[prev_sells.length - 1].price + } + } let my_trade = { order_id: trade.order_id, time: trade.time, @@ -631,6 +628,12 @@ module.exports = function (s, conf) { } } s.action = 'sold' + if (!s.last_buy_price && s.my_prev_trades.length) { + let prev_buys = s.my_prev_trades.filter(trade => trade.type === 'buy') + if (prev_buys.length) { + s.last_buy_price = prev_buys[prev_buys.length - 1].price + } + } let my_trade = { order_id: trade.order_id, time: trade.time, diff --git a/templates/dashboard.ejs b/templates/dashboard.ejs index 48e30aa302..1f45a82990 100644 --- a/templates/dashboard.ejs +++ b/templates/dashboard.ejs @@ -423,7 +423,7 @@ <% }); %> <% } %> <% if (my_prev_trades) { %> - <% my_prev_trades.sort(function(a,b){return a.time > b.time ? -1 : 1;}).forEach(function(trade){ %> + <% my_prev_trades.reverse().forEach(function(trade){ %> <%= trade.type.toUpperCase() %> <%= new Intl.NumberFormat("en-US", {useGrouping: false, minimumFractionDigits: 8, maximumFractionDigits: 8}).format(trade.size) %> <%= asset.toUpperCase() %> From 5403c97c0431d2ef898f79754642eea730f6f9c5 Mon Sep 17 00:00:00 2001 From: Juan Solo <34537029+juanzolo@users.noreply.github.com> Date: Tue, 13 Mar 2018 02:41:17 -0500 Subject: [PATCH 08/74] Hello DeviaVir - Neural Strat enhancement. (#1490) * Hello DeviaVir, this version might function better. Just a few changes: Comparing old prediction vs. new prediction. Using stock decay, stock depth (2, for a up/down decision possibly increase to create a large trend pattern recognition) per Stanford's website. This version should function better, as, without a depth of atleast 2 and min_predict table atleast 2-3 periods, you won't create a trend. * Updated to be what I sim'd profitable. Updated to be what I sim'd profitable. * Added one more neural layer. Final revision for now. If you like it let me know :) * I'm not sure how to set the phenotype on depth as a decimal! Could use some chiming in. * Update strategy.js --- extensions/strategies/neural/strategy.js | 60 ++++++++++++------------ 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/extensions/strategies/neural/strategy.js b/extensions/strategies/neural/strategy.js index b0f1f3b5b5..1549f5e8ae 100644 --- a/extensions/strategies/neural/strategy.js +++ b/extensions/strategies/neural/strategy.js @@ -14,18 +14,20 @@ module.exports = { name: 'neural', description: 'Use neural learning to predict future price. Buy = mean(last 3 real prices) < mean(current & last prediction)', getOptions: function () { - this.option('period', 'period length - make sure to lower your poll trades time to lower than this value. Same as --period_length', String, '1m') - this.option('period_length', 'period length - make sure to lower your poll trades time to lower than this value. Same as --period', String, '1m') + this.option('period', 'Period length - longer gets a better average', String, '30m') + this.option('period_length', 'Period length set same as --period', String, '30m') this.option('activation_1_type', 'Neuron Activation Type: sigmoid, tanh, relu', String, 'sigmoid') - this.option('neurons_1', 'Neurons in layer 1 Shoot for atleast 100', Number, 1) - this.option('depth', 'Rows of data to predict ahead for matches/learning', Number, 1) - this.option('selector', 'Selector', String, 'Gdax.BTC-USD') - this.option('min_periods', 'Periods to calculate learn from', Number, 1000) - this.option('min_predict', 'Periods to predict next number from', Number, 1) - this.option('momentum', 'momentum of prediction', Number, 0.9) - this.option('decay', 'decay of prediction, use teeny tiny increments', Number, 0.1) - this.option('threads', 'Number of processing threads you\'d like to run (best for sim)', Number, 1) - this.option('learns', 'Number of times to \'learn\' the neural network with past data', Number, 2) + this.option('neurons_1', 'Neurons in layer 1', Number, 5) + this.option('activation_2_type', 'Neuron Activation Type: sigmoid, tanh, relu', String, 'sigmoid') + this.option('neurons_2', 'Neurons in layer 2', Number, 5) + this.option('depth', 'Generally the same as min_predict for accuracy', Number, 50) + this.option('min_periods', 'Periods to train neural network with from', Number, 2000) + this.option('min_predict', 'Periods to predict next number from less than min_periods', Number, 50) + this.option('momentum', 'momentum of prediction between 0 and 1 - 0 is stock', Number, 0.0) + this.option('decay', 'decay of prediction, use teeny tiny increments beteween 0 and 1 - stock', Number, 0.001) + this.option('threads', 'Number of processing threads you\'d like to run (best for sim - Possibly broken', Number, 1) + this.option('learns', 'Number of times to \'learn\' the neural network with past data', Number, 10) + this.option('learningrate', 'The learning rate of the neural network between 0 and 1 - 0.01 is stock', Number, 0.01) }, calculate: function () { }, @@ -38,12 +40,13 @@ module.exports = { layer_defs : [ {type:'input', out_sx:1, out_sy:1, out_depth:s.options.depth}, {type:'fc', num_neurons: s.options.neurons_1, activation: s.options.activation_1_type}, + {type:'fc', num_neurons: s.options.neurons_2, activation: s.options.activation_2_type}, {type:'regression', num_neurons:1} ], neuralDepth: s.options.depth } s.neural.net.makeLayers(s.neural.layer_defs) - s.neural.trainer = new convnetjs.SGDTrainer(s.neural.net, {learning_rate:0.01, momentum:s.options.momentum, batch_size:1, l2_decay:s.options.decay}) + s.neural.trainer = new convnetjs.SGDTrainer(s.neural.net, {learning_rate:s.options.learningrate, momentum:s.options.momentum, batch_size:1, l2_decay:s.options.decay}) } if (cluster.isMaster) { ema(s, 'neural', s.options.neural) @@ -55,7 +58,8 @@ module.exports = { // do the network thing var tlp = [] var tll = [] - if (s.lookback[s.options.min_periods]) { + // this thing is crazy run with trendline placed here. But there needs to be a coin lock so you dont buy late! + if (!s.in_preroll) { var min_predict = s.options.min_predict > s.options.min_periods ? s.options.min_periods : s.options.min_predict for (let i = 0; i < s.options.min_periods; i++) { tll.push(s.lookback[i].close) } for (let i = 0; i < min_predict; i++) { tlp.push(s.lookback[i].close) } @@ -80,15 +84,11 @@ module.exports = { learn() var item = tlp.reverse() s.prediction = predict(item) - s.mean = s.lookback[0].close - s.meanp = math.mean(s.prediction, oldmean) - oldmean = s.prediction } // NORMAL onPeriod STUFF here - global.meanp = s.meanp - global.mean = s.mean + global.predi = s.prediction //something strange is going on here - global.sig0 = global.meanp < global.mean + global.sig0 = global.predi > oldmean if ( global.sig0 === false ) @@ -102,14 +102,13 @@ module.exports = { { s.signal = 'buy' } + oldmean = global.predi cb() } }, onReport: function () { var cols = [] - cols.push(z(8, n(global.mean).format('0.000000000'), ' ')[global.meanp > global.mean ? 'green' : 'red']) - cols.push(' ') - cols.push(z(8, n(global.meanp).format('0.000000000'), ' ')[global.meanp > global.mean ? 'green' : 'red']) + cols.push(z(8, n(global.predi).format('0000.000000000'), ' ')) return cols }, @@ -126,13 +125,16 @@ module.exports = { profit_stop_pct: Phenotypes.Range(1,20), // -- strategy - neurons_1: Phenotypes.Range(1, 200), + neurons_1: Phenotypes.Range(1, 20), + neurons_2: Phenotypes.Range(1, 20), activation_1_type: Phenotypes.ListOption(['sigmoid', 'tanh', 'relu']), - depth: Phenotypes.Range(1, 100), - min_predict: Phenotypes.Range(1, 100), - momentum: Phenotypes.Range(0, 100), - decay: Phenotypes.Range(1, 10), - learns: Phenotypes.Range(1, 200) + activation_2_type: Phenotypes.ListOption(['sigmoid', 'tanh', 'relu']), + depth: Phenotypes.Range(1, 200), + min_predict: Phenotypes.Range(1, 200), + // momentum and decay and learning rate are decimals? + momentum: Phenotypes.RangeFloat(0, 1), + decay: Phenotypes.RangeFloat(0, 1), + learns: Phenotypes.Range(1, 500), + learningrate: Phenotypes.RangeFloat(0, 1) } } - From 3fe4dc84ca8178bdf149d39de19dca2f7e4a1b42 Mon Sep 17 00:00:00 2001 From: Shawn8901 Date: Tue, 13 Mar 2018 08:50:20 +0100 Subject: [PATCH 09/74] Moved Value-Window of intFactor to valid range (#1492) Fixes #1487 + some formatting --- lib/phenotype.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/phenotype.js b/lib/phenotype.js index 905470b9ed..1bee1e921d 100644 --- a/lib/phenotype.js +++ b/lib/phenotype.js @@ -8,7 +8,7 @@ let PROPERTY_MUTATION_CHANCE = 0.30 let PROPERTY_CROSSOVER_CHANCE = 0.50 module.exports = { - create: function(strategy) { + create: function (strategy) { var r = {} for (var k in strategy) { var v = strategy[k] @@ -22,7 +22,7 @@ module.exports = { } else if (v.type === 'intfactor') { // possible 0 value by providing min 0 if (v.min == 0 && Math.random() <= 0.5) r[k] = 0 - else r[k] = Math.round((Math.random() * (v.max - v.min + 1)/v.factor)*v.factor) + else r[k] = Math.round(((Math.random() * (v.max - v.min) + 1) / v.factor) * v.factor) } else if (v.type === 'float') { r[k] = (Math.random() * (v.max - v.min)) + v.min } else if (v.type === 'period_length') { @@ -45,7 +45,7 @@ module.exports = { return r }, - range: function(v, step, stepSize) { + range: function (v, step, stepSize) { var scale = step / (stepSize - 1) if (v.type === 'int') { @@ -55,7 +55,7 @@ module.exports = { if (step == 0) return 0 - scale = (step-1) / (stepSize-2) + scale = (step - 1) / (stepSize - 2) return Math.floor((scale * (v.max - v.min)) + v.min) } else if (v.type === 'intfactor') { @@ -76,7 +76,7 @@ module.exports = { } }, - mutation: function(oldPhenotype, strategy) { + mutation: function (oldPhenotype, strategy) { var r = module.exports.create(strategy) for (var k in oldPhenotype) { if (k === 'sim') continue @@ -87,7 +87,7 @@ module.exports = { return r }, - crossover: function(phenotypeA, phenotypeB, strategy) { + crossover: function (phenotypeA, phenotypeB, strategy) { var p1 = {} var p2 = {} @@ -101,12 +101,12 @@ module.exports = { return [p1, p2] }, - fitness: function(phenotype) { + fitness: function (phenotype) { if (typeof phenotype.sim === 'undefined') return 0 - var vsBuyHoldRate = ( (phenotype.sim.vsBuyHold + 100) / 50) + var vsBuyHoldRate = ((phenotype.sim.vsBuyHold + 100) / 50) var wlRatio = phenotype.sim.wins / phenotype.sim.losses - if(isNaN(wlRatio)) { // zero trades will result in 0/0 which is NaN + if (isNaN(wlRatio)) { // zero trades will result in 0/0 which is NaN wlRatio = 1 } var wlRatioRate = 1.0 / (1.0 + Math.pow(Math.E, -wlRatio)) @@ -114,12 +114,12 @@ module.exports = { return rate }, - competition: function(phenotypeA, phenotypeB) { + competition: function (phenotypeA, phenotypeB) { // TODO: Refer to geneticalgorithm documentation on how to improve this with diverstiy return module.exports.fitness(phenotypeA) >= module.exports.fitness(phenotypeB) }, - Range: function(min, max) { + Range: function (min, max) { var r = { type: 'int', min: min, @@ -128,7 +128,7 @@ module.exports = { return r }, - Range0: function(min, max) { + Range0: function (min, max) { var r = { type: 'int0', min: min, @@ -137,7 +137,7 @@ module.exports = { return r }, - RangeFactor: function(min, max, factor) { + RangeFactor: function (min, max, factor) { var r = { type: 'intfactor', min: min, @@ -147,7 +147,7 @@ module.exports = { return r }, - RangeFloat: function(min, max) { + RangeFloat: function (min, max) { var r = { type: 'float', min: min, @@ -156,7 +156,7 @@ module.exports = { return r }, - RangePeriod: function(min, max, period_length) { + RangePeriod: function (min, max, period_length) { var r = { type: 'period_length', min: min, @@ -166,7 +166,7 @@ module.exports = { return r }, - RangeMaType: function() { + RangeMaType: function () { var r = { type: 'listOption', options: ['SMA', 'EMA', 'WMA', 'DEMA', 'TEMA', 'TRIMA', 'KAMA', 'MAMA', 'T3'] @@ -174,8 +174,8 @@ module.exports = { return r }, - ListOption: function(options) { - var r ={ + ListOption: function (options) { + var r = { type: 'listOption', options: options } From b57083a8806d14d0681588327ad071e181066a7f Mon Sep 17 00:00:00 2001 From: Travis CI Date: Tue, 13 Mar 2018 10:58:55 +0000 Subject: [PATCH 10/74] Exchanges: update-products 813 --- extensions/exchanges/binance/products.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index 5d5e6d5f65..e951430c30 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -545,7 +545,7 @@ "currency": "BTC", "min_size": "0.01000000", "max_size": "100000.00000000", - "increment": "0.000001", + "increment": "0.0000001", "asset_increment": "0.01", "label": "MTL/BTC" }, From e8a6f1061f76b66277017e1dbe8044a4ee490af1 Mon Sep 17 00:00:00 2001 From: theDiverDK Date: Tue, 13 Mar 2018 17:37:23 +0100 Subject: [PATCH 11/74] made speed and ta_macd_ext strategies genetic_backtestable, and remove un needed () from phenotypes (#1496) --- extensions/strategies/speed/strategy.js | 2 +- extensions/strategies/ta_macd_ext/strategy.js | 2 +- lib/phenotype.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/strategies/speed/strategy.js b/extensions/strategies/speed/strategy.js index cea53ab013..62630ebdc6 100644 --- a/extensions/strategies/speed/strategy.js +++ b/extensions/strategies/speed/strategy.js @@ -54,7 +54,7 @@ module.exports = { return cols }, - speed: { + phenotypes: { // -- common period_length: Phenotypes.RangePeriod(1, 120, 'm'), min_periods: Phenotypes.Range(1, 100), diff --git a/extensions/strategies/ta_macd_ext/strategy.js b/extensions/strategies/ta_macd_ext/strategy.js index 53cdd570c5..a6680cb4ce 100644 --- a/extensions/strategies/ta_macd_ext/strategy.js +++ b/extensions/strategies/ta_macd_ext/strategy.js @@ -120,7 +120,7 @@ module.exports = { return cols }, - ta_macd_ext: { + phenotypes: { period_length: Phenotypes.RangePeriod(1, 120, 'm'), min_periods: Phenotypes.Range(1, 104), markdown_buy_pct: Phenotypes.RangeFloat(-1, 5), diff --git a/lib/phenotype.js b/lib/phenotype.js index 1bee1e921d..30e304b91d 100644 --- a/lib/phenotype.js +++ b/lib/phenotype.js @@ -110,7 +110,7 @@ module.exports = { wlRatio = 1 } var wlRatioRate = 1.0 / (1.0 + Math.pow(Math.E, -wlRatio)) - var rate = vsBuyHoldRate * (wlRatioRate) + var rate = vsBuyHoldRate * wlRatioRate return rate }, From 8828114c9ee428fdf6868a46fcaf2316ff56fb37 Mon Sep 17 00:00:00 2001 From: theDiverDK Date: Wed, 14 Mar 2018 17:18:49 +0100 Subject: [PATCH 12/74] Made genetic_backtester more robust (#1502) * added coded to catch undefined errors, and reformated code to match node.js coding style more * Removed a few debug lines --- lib/backtester.js | 86 +++++++++--------- scripts/genetic_backtester/darwin.js | 128 +++++++++++++-------------- 2 files changed, 103 insertions(+), 111 deletions(-) diff --git a/lib/backtester.js b/lib/backtester.js index 782e9b6058..d5b04dd9ad 100644 --- a/lib/backtester.js +++ b/lib/backtester.js @@ -17,9 +17,9 @@ const spawn = require('child_process').spawn let simArgs, simTotalCount, parallelLimit, writeFile -let processOutput = function (output,taskStrategyName, pheno) { +let processOutput = function (output, taskStrategyName, pheno) { let selector = pheno.selector || pheno.exchangeMarketPair - let tFileName = path.resolve(__dirname, '..', 'simulations','sim_'+taskStrategyName.replace('_','')+'_'+ selector.toLowerCase().replace('_','')+'_'+pheno.backtester_generation+'.json') + let tFileName = path.resolve(__dirname, '..', 'simulations', 'sim_' + taskStrategyName.replace('_', '') + '_' + selector.toLowerCase().replace('_', '') + '_' + pheno.backtester_generation + '.json') let simulationResults let outputArray @@ -39,16 +39,15 @@ let processOutput = function (output,taskStrategyName, pheno) { // but if no file is found it will fall back to the older metheod of scraping the output of the sim process // stdio scraping to be removed after full verification of functionality. // todo: see above comment - if (fs.existsSync(tFileName)) - { + if (fs.existsSync(tFileName)) { let jsonBuffer - jsonBuffer = fs.readFileSync(tFileName,{encoding:'utf8'}) + jsonBuffer = fs.readFileSync(tFileName, { encoding: 'utf8' }) simulationResults = JSON.parse(jsonBuffer) fs.unlinkSync(tFileName) } // If somehow the sim file failed to write, this will most often recover it by parsing the last output - if (typeof(simulationResults) !== 'object' ) { + if (typeof (simulationResults) !== 'object') { // Find everything between the first { and last } outputArray = output.split('{') outputArray.shift() @@ -61,21 +60,22 @@ let processOutput = function (output,taskStrategyName, pheno) { simulationResults = JSON.parse(`{${output}}`) } - if (typeof(simulationResults) === 'object') { + if (typeof (simulationResults) === 'object' && typeof simulationResults.simresults !== typeof undefined) { params = simulationResults endBalance = simulationResults.simresults.currency buyHold = simulationResults.simresults.buy_hold vsBuyHold = simulationResults.simresults.vs_buy_hold //wlMatch = (simulationResults.simresults.total_sells - simulationResults.simresults.total_losses) +'/'+ simulationResults.simresults.total_losses - wins = simulationResults.simresults.total_sells - simulationResults.simresults.total_losses - losses = simulationResults.simresults.total_losses - errorRate = simulationResults.simresults.total_losses / simulationResults.simresults.total_sells + wins = simulationResults.simresults.total_sells - simulationResults.simresults.total_losses + losses = simulationResults.simresults.total_losses + errorRate = simulationResults.simresults.total_losses / simulationResults.simresults.total_sells days = parseInt(simulationResults.days) start = parseInt(simulationResults.start) end = parseInt(simulationResults.end || null) } else { console.log(`Couldn't find simulationResults for ${pheno.backtester_generation}`) + console.log('params ', params) // this should return a general bad result but not throw an error // our job here is to use the result. not diagnose an error at this point so a failing sim should just be ignored. // idea here is to make the fitness of this calculation as bad as possible so darwin won't use the combonation of parameters again. @@ -96,8 +96,8 @@ let processOutput = function (output,taskStrategyName, pheno) { order_type: 'maker', wlRatio: 'Infinity', roi: -1000, - selector: params.selector, - strategy: params.strategy, + selector: selector, + strategy: taskStrategyName, frequency: 0 } } @@ -109,13 +109,11 @@ let processOutput = function (output,taskStrategyName, pheno) { } let roi - if (params.currency_capital == 0.0) - { - roi = roundp(endBalance, 3 ) + if (params.currency_capital == 0.0) { + roi = roundp(endBalance, 3) } - else - { - roi = roundp(((endBalance - params.currency_capital) / params.currency_capital) * 100, 3 ) + else { + roi = roundp(((endBalance - params.currency_capital) / params.currency_capital) * 100, 3) } //todo: figure out what this is trying to do. @@ -189,7 +187,7 @@ let runUpdate = function (days, selector) { }) } -let ensureDirectoryExistence = function(filePath) { +let ensureDirectoryExistence = function (filePath) { var dirname = path.dirname(filePath) if (fs.existsSync(dirname)) { return true @@ -216,7 +214,7 @@ let monitor = { } }, - actualRange: function(so) { + actualRange: function (so) { // Adapted from sim.js logic to similarly figure out how much time is being processed if (so.start) { so.start = moment(so.start, 'YYYYMMDDHHmm') @@ -239,7 +237,7 @@ let monitor = { } if (so.start && so.end) { - var actualStart = moment( tb(so.start.valueOf()).resize(so.period_length).subtract(so.min_periods + 2).toMilliseconds() ) + var actualStart = moment(tb(so.start.valueOf()).resize(so.period_length).subtract(so.min_periods + 2).toMilliseconds()) return { start: actualStart, end: so.end @@ -249,7 +247,7 @@ let monitor = { return { start: so.start, end: so.end } }, - reportStatus: function() { + reportStatus: function () { var genCompleted = 0 // var genTotal = 0 @@ -273,7 +271,7 @@ let monitor = { var bestP = null var bestBalance = null - this.phenotypes.forEach(function(p) { + this.phenotypes.forEach(function (p) { if ('sim' in p) { if (Object.keys(p.sim).length === 0) { simsActive++ @@ -304,9 +302,9 @@ let monitor = { }) - var homeStretchMode = simsActive < (parallelLimit-1) && simsRemaining == 0 + var homeStretchMode = simsActive < (parallelLimit - 1) && simsRemaining == 0 - inProgress.forEach(function(p) { + inProgress.forEach(function (p) { var c = p.command var currentTime @@ -324,7 +322,7 @@ let monitor = { var progress = currentTime.diff(c.queryStart) // console.log(`totalTime: ${totalTime} vs progress: ${progress}`); - var percentage = Math.min(progress/totalTime, 1) + var percentage = Math.min(progress / totalTime, 1) genCompleted += percentage var now = moment() @@ -338,9 +336,9 @@ let monitor = { } if (homeStretchMode) - inProgressStr.push(`${(c.iteration + ':').gray} ${(percentage*100).toFixed(1)}% ETA: ${monitor.distanceOfTimeInWords(eta, now)}`) + inProgressStr.push(`${(c.iteration + ':').gray} ${(percentage * 100).toFixed(1)}% ETA: ${monitor.distanceOfTimeInWords(eta, now)}`) else - inProgressStr.push(`${(c.iteration + ':').gray} ${(percentage*100).toFixed(1)}%`) + inProgressStr.push(`${(c.iteration + ':').gray} ${(percentage * 100).toFixed(1)}%`) } }) @@ -357,7 +355,7 @@ let monitor = { } - var percentage = ((simsDone + genCompleted)/simsAll * 100).toFixed(1) + var percentage = ((simsDone + genCompleted) / simsAll * 100).toFixed(1) // z(8, n(s.period.trend_ema_rate).format('0.0000'), ' ')[color] process.stdout.write(`Done: ${simsDone.toString().green}, Active: ${simsActive.toString().yellow}, Remaining: ${simsRemaining.toString().gray}, `) if (simsErrored > 0) @@ -388,11 +386,11 @@ let monitor = { } }, - reset: function() { + reset: function () { this.phenotypes.length = 0 }, - start: function() { + start: function () { process.stdout.write('\n\n') this.generationStarted = moment() @@ -401,7 +399,7 @@ let monitor = { }, 1000) }, - stop: function(label) { + stop: function (label) { this.generationEnded = moment() clearInterval(this.reportInterval) var timeStr = this.distanceOfTimeInWords(this.generationEnded, this.generationStarted) @@ -411,14 +409,14 @@ let monitor = { module.exports = { - init: function(options) { + init: function (options) { simArgs = options.simArgs simTotalCount = options.simTotalCount parallelLimit = options.parallelLimit writeFile = options.writeFile }, - deLint: function() { + deLint: function () { //Clean up any generation files left over in the simulation directory //they will be overwritten, but best not to confuse the issue. //if it fails. doesn't matter they will be overwritten anyways. not need to halt the system. @@ -427,9 +425,9 @@ module.exports = { let tFileName = 'sim_' let files = fs.readdirSync(tDirName) - for(let i = 0; i < files.length; i++) { + for (let i = 0; i < files.length; i++) { if (files[i].lastIndexOf(tFileName) == 0) { - let filePath = path.resolve(__dirname, '..', 'simulations',files[i] ) + let filePath = path.resolve(__dirname, '..', 'simulations', files[i]) fs.unlinkSync(filePath) } @@ -439,12 +437,12 @@ module.exports = { } }, - writeFileAndFolder: function(filePath, data) { + writeFileAndFolder: function (filePath, data) { ensureDirectoryExistence(filePath) fs.writeFileSync(filePath, data) }, - ensureBackfill: function() { + ensureBackfill: function () { let days = argv.days if (!days) { if (argv.start) { @@ -459,7 +457,7 @@ module.exports = { runUpdate(days, argv.selector) }, - buildCommand: function(taskStrategyName, phenotype, filename) { + buildCommand: function (taskStrategyName, phenotype, filename) { var cmdArgs = Object.assign({}, phenotype) cmdArgs.strategy = taskStrategyName Object.assign(cmdArgs, simArgs) @@ -483,8 +481,8 @@ module.exports = { let zenbot_cmd = process.platform === 'win32' ? 'zenbot.bat' : './zenbot.sh' let command = `${zenbot_cmd} sim ${selector}` - for (const [ key, value ] of Object.entries(cmdArgs)) { - if(_.isBoolean(value)){ + for (const [key, value] of Object.entries(cmdArgs)) { + if (_.isBoolean(value)) { command += ` --${value ? '' : 'no-'}${key}` } else { command += ` --${key}=${value}` @@ -519,7 +517,7 @@ module.exports = { let result = null let stdout = endData.toString() try { - result = processOutput(stdout,taskStrategyName,phenotype) + result = processOutput(stdout, taskStrategyName, phenotype) command.endTime = moment() command.result = result @@ -548,7 +546,7 @@ module.exports = { } else { var str = StripAnsi(data.toString()), lines = str.split(/(\r?\n)/g) - for (var i=0; i monitor.stop(label), resetMonitor: () => monitor.reset(), reportStatus: () => monitor.reportStatus(), - trackPhenotype: function(phenotype) { + trackPhenotype: function (phenotype) { monitor.phenotypes.push(phenotype) } diff --git a/scripts/genetic_backtester/darwin.js b/scripts/genetic_backtester/darwin.js index 0586a346d5..af94115583 100755 --- a/scripts/genetic_backtester/darwin.js +++ b/scripts/genetic_backtester/darwin.js @@ -71,7 +71,7 @@ let readSimDataFile = (iteration) => { let jsonFileName = `simulations/${population_data}/gen_${generationCount}/sim_${iteration}.json` if (fs.existsSync(jsonFileName)) { - let simData = JSON.parse( fs.readFileSync(jsonFileName, { encoding:'utf8' }) ) + let simData = JSON.parse(fs.readFileSync(jsonFileName, { encoding: 'utf8' })) return simData } else { @@ -85,41 +85,42 @@ let writeSimDataFile = (iteration, data) => { } -function allStrategyNames () { - let pathName = path.resolve(__dirname, '..','..', 'extensions', 'strategies') +function allStrategyNames() { + let pathName = path.resolve(__dirname, '..', '..', 'extensions', 'strategies') return fs.readdirSync(pathName).filter(function (file) { - return fs.statSync(pathName+'/'+file).isDirectory() + return fs.statSync(pathName + '/' + file).isDirectory() }) } -function isUsefulKey (key) { - if(key == 'filename' || key == 'show_options' || key == 'sim') return false +function isUsefulKey(key) { + if (key == 'filename' || key == 'show_options' || key == 'sim') return false return true } -function generateCommandParams (input) { +function generateCommandParams(input) { + if (typeof input !== typeof undefined && typeof input.params !== typeof undefined) { + input = input.params.replace('module.exports =', '') + } - input = input.params.replace('module.exports =','') input = JSON.parse(input) var result = '' var keys = Object.keys(input) - for(let i = 0;i < keys.length;i++){ + for (let i = 0; i < keys.length; i++) { var key = keys[i] - if(isUsefulKey(key)){ + if (isUsefulKey(key)) { // selector should be at start before keys - if(key == 'selector'){ + if (key == 'selector') { result = input[key] + result } - else result += ' --'+key+'='+input[key] + else result += ' --' + key + '=' + input[key] } - } return result } -function saveGenerationData (csvFileName, jsonFileName, dataCSV, dataJSON) { +function saveGenerationData(csvFileName, jsonFileName, dataCSV, dataJSON) { try { fs.writeFileSync(csvFileName, dataCSV) console.log('> Finished writing generation csv to ' + csvFileName) @@ -144,11 +145,11 @@ while (fs.existsSync(`simulations/${population_data}/gen_${generationCount}`)) { generationCount-- if (generationCount > 0 && !fs.existsSync(`simulations/${population_data}/gen_${generationCount}/results.csv`)) { generationCount-- } -function saveLaunchFiles(saveLauchFile, configuration ){ +function saveLaunchFiles(saveLauchFile, configuration) { if (!saveLauchFile) return //let lConfiguration = configuration.replace(' sim ', ' trade ') - let lFilenameNix = new String().concat('./gen.',configuration.selector.toLowerCase(),'.sh') - let lFinenamewin32 = new String().concat('./gen.',configuration.selector.toLowerCase(),'.bat') + let lFilenameNix = new String().concat('./gen.', configuration.selector.toLowerCase(), '.sh') + let lFinenamewin32 = new String().concat('./gen.', configuration.selector.toLowerCase(), '.bat') delete configuration.generateLaunch delete configuration.backtester_generation @@ -156,40 +157,35 @@ function saveLaunchFiles(saveLauchFile, configuration ){ let lastFitnessLevel = -9999.0 // get prior fitness level nix - if (fs.existsSync(lFilenameNix) ) - { - let lFileCont = fs.readFileSync(lFilenameNix,{encoding:'utf8',flag:'r'}) + if (fs.existsSync(lFilenameNix)) { + let lFileCont = fs.readFileSync(lFilenameNix, { encoding: 'utf8', flag: 'r' }) let lines = lFileCont.split('\n') if (lines.length > 2) - if (lines[1].includes('fitness=')) - { + if (lines[1].includes('fitness=')) { let th = lines[1].split('=') lastFitnessLevel = th[1] } } // get prior firness level win32 - if (fs.existsSync(lFinenamewin32) ) - { - let lFileCont = fs.readFileSync(lFinenamewin32,{encoding:'utf8',flag:'r'}) + if (fs.existsSync(lFinenamewin32)) { + let lFileCont = fs.readFileSync(lFinenamewin32, { encoding: 'utf8', flag: 'r' }) let lines = lFileCont.split('\n') if (lines.length > 1) - if (lines[1].includes('fitness=')) - { + if (lines[1].includes('fitness=')) { let th = lines[1].split('=') lastFitnessLevel = th[1] } } //write Nix Version - let lNixContents = '#!/bin/bash\n'.concat('#fitness=',configuration.fitness,'\n', + let lNixContents = '#!/bin/bash\n'.concat('#fitness=', configuration.fitness, '\n', 'env node zenbot.js trade ', - bestOverallCommand,' $@\n') - let lWin32Contents = '@echo off\n'.concat('rem fitness=',configuration.fitness,'\n', + bestOverallCommand, ' $@\n') + let lWin32Contents = '@echo off\n'.concat('rem fitness=', configuration.fitness, '\n', 'node zenbot.js trade ', - bestOverallCommand,' %*\n') + bestOverallCommand, ' %*\n') - if ( ((Number(configuration.fitness) > Number(lastFitnessLevel)) || (ignoreLaunchFitness)) && Number(configuration.fitness) > 0.0 ) - { + if (((Number(configuration.fitness) > Number(lastFitnessLevel)) || (ignoreLaunchFitness)) && Number(configuration.fitness) > 0.0) { fs.writeFileSync(lFilenameNix, lNixContents) fs.writeFileSync(lFinenamewin32, lWin32Contents) // using the string instead of octet as eslint compaines about an invalid number if the number starts with 0 @@ -198,9 +194,9 @@ function saveLaunchFiles(saveLauchFile, configuration ){ } } let cycleCount = -1 -function simulateGeneration (generateLaunchFile) { +function simulateGeneration(generateLaunchFile) { -// Find the first incomplete generation of this session, where incomplete means no "results" files + // Find the first incomplete generation of this session, where incomplete means no "results" files while (fs.existsSync(`simulations/${population_data}/gen_${generationCount}`)) { generationCount++ } generationCount-- if (generationCount > 0 && !fs.existsSync(`simulations/${population_data}/gen_${generationCount}/results.csv`)) { generationCount-- } @@ -259,7 +255,7 @@ function simulateGeneration (generateLaunchFile) { parallel(tasks, PARALLEL_LIMIT, (err, results) => { Backtester.stopMonitor(`Generation ${generationCount}`) - results = results.filter(function(r) { + results = results.filter(function (r) { return !!r }) @@ -276,61 +272,60 @@ function simulateGeneration (generateLaunchFile) { let csvFileName = `simulations/${population_data}/gen_${generationCount}/results.csv` let poolData = {} - selectedStrategies.forEach(function(v) { + selectedStrategies.forEach(function (v) { poolData[v] = pools[v]['pool'].population() }) let jsonFileName = `simulations/${population_data}/gen_${generationCount}/results.json` let dataJSON = JSON.stringify(poolData, null, 2) if (!noStatSave) - saveGenerationData(csvFileName, jsonFileName, dataCSV, dataJSON ) + saveGenerationData(csvFileName, jsonFileName, dataCSV, dataJSON) //Display best of the generation console.log('\n\nGeneration\'s Best Results') let bestOverallResult = [] let prefix = './zenbot.sh sim ' - selectedStrategies.forEach((v)=> { + selectedStrategies.forEach((v) => { let best = pools[v]['pool'].best() let bestCommand - if(best.sim){ + + if (best.sim) { console.log(`(${best.sim.strategy}) Sim Fitness ${best.sim.fitness}, VS Buy and Hold: ${z(5, (n(best.sim.vsBuyHold).format('0.0') + '%'), ' ').yellow} BuyAndHold Balance: ${z(5, (n(best.sim.buyHold).format('0.000000')), ' ').yellow} End Balance: ${z(5, (n(best.sim.endBalance).format('0.000000')), ' ').yellow}, Wins/Losses ${best.sim.wins}/${best.sim.losses}, ROI ${z(5, (n(best.sim.roi).format('0.000000')), ' ').yellow}.`) bestCommand = generateCommandParams(best.sim) bestOverallResult.push(best.sim) } else { - console.log(`(${results[0].strategy}) Result Fitness ${results[0].fitness}, VS Buy and Hold: ${z(5, (n(results[0].vsBuyHold).format('0.0') + '%'), ' ').yellow} BuyAndHold Balance: ${z(5, (n(results[0].buyHold).format('0.000000')), ' ').yellow} End Balance: ${z(5, (n(results[0].endBalance).format('0.000000')), ' ').yellow}, Wins/Losses ${results[0].wins}/${results[0].losses}, ROI ${z(5, (n(results.roi).format('0.000000') ), ' ').yellow}.`) + console.log(`(${results[0].strategy}) Result Fitness ${results[0].fitness}, VS Buy and Hold: ${z(5, (n(results[0].vsBuyHold).format('0.0') + '%'), ' ').yellow} BuyAndHold Balance: ${z(5, (n(results[0].buyHold).format('0.000000')), ' ').yellow} End Balance: ${z(5, (n(results[0].endBalance).format('0.000000')), ' ').yellow}, Wins/Losses ${results[0].wins}/${results[0].losses}, ROI ${z(5, (n(results.roi).format('0.000000')), ' ').yellow}.`) bestCommand = generateCommandParams(results[0]) bestOverallResult.push(results[0]) } // prepare command snippet from top result for this strat - - bestCommand = prefix + bestCommand - bestCommand = bestCommand + ' --asset_capital=' + argv.asset_capital + ' --currency_capital=' + argv.currency_capital - console.log(bestCommand + '\n') + if (bestCommand != '') { + bestCommand = prefix + bestCommand + bestCommand = bestCommand + ' --asset_capital=' + argv.asset_capital + ' --currency_capital=' + argv.currency_capital + } }) - bestOverallResult.sort((a, b) => (a.fitness < b.fitness) ? 1 : ((b.fitness < a.fitness) ? -1 : 0)) - // if (selectedStrategies.length > 1){ - // } - + bestOverallResult.sort((a, b) => + (typeof a.fitness === typeof undefined) ? 1 : + (typeof b.fitness === typeof undefined) ? 0 : + (a.fitness < b.fitness) ? 1 : + (b.fitness < a.fitness) ? -1 : 0) let bestOverallCommand = generateCommandParams(bestOverallResult[0]) bestOverallCommand = prefix + bestOverallCommand bestOverallCommand = bestOverallCommand + ' --asset_capital=' + argv.asset_capital + ' --currency_capital=' + argv.currency_capital - saveLaunchFiles(generateLaunchFile, bestOverallResult[0]) - - if (selectedStrategies.length > 1) { console.log(`(${bestOverallResult[0].strategy}) Best Overall Fitness ${bestOverallResult[0].fitness}, VS Buy and Hold: ${z(5, (n(bestOverallResult[0].vsBuyHold).format('0.00') + '%'), ' ').yellow} BuyAndHold Balance: ${z(5, (n(bestOverallResult[0].buyHold).format('0.000000')), ' ').yellow} End Balance: ${z(5, (n(bestOverallResult[0].endBalance).format('0.000000')), ' ').yellow}, Wins/Losses ${bestOverallResult[0].wins}/${bestOverallResult[0].losses}, ROI ${z(5, (n(bestOverallResult[0].roi).format('0.000000')), ' ').yellow}.`) console.log(bestOverallCommand + '\n') } - selectedStrategies.forEach((v)=> { + selectedStrategies.forEach((v) => { pools[v]['pool'] = pools[v]['pool'].evolve() }) @@ -352,8 +347,7 @@ if (!simArgs.selector) if (!simArgs.filename) simArgs.filename = 'none' -if (simArgs.help || !(simArgs.use_strategies)) -{ +if (simArgs.help || !(simArgs.use_strategies)) { console.log('--use_strategies=,, Min one strategy, can include more than one') console.log('--population_data= filename used for continueing backtesting from previous run') console.log('--generateLaunch=| will genertate .sh and .bat file using the best generation discovered') @@ -412,10 +406,10 @@ for (var i = 0; i < selectedStrategies.length; i++) { } strategyPool['config'] = { - mutationFunction: function(phenotype) { + mutationFunction: function (phenotype) { return Phenotypes.mutation(phenotype, strategyPhenotypes) }, - crossoverFunction: function(phenotypeA, phenotypeB) { + crossoverFunction: function (phenotypeA, phenotypeB) { return Phenotypes.crossover(phenotypeA, phenotypeB, strategyPhenotypes) }, fitnessFunction: Phenotypes.fitness, @@ -443,7 +437,7 @@ for (var i = 0; i < selectedStrategies.length; i++) { } // BEGIN - exitHandler -var exitHandler = function(options, exitErr) { +var exitHandler = function (options, exitErr) { if (generationCount && options.cleanup) { console.log('Resume this backtest later with:') @@ -451,7 +445,7 @@ var exitHandler = function(options, exitErr) { var hasPopData = false var popDataArg = `--population_data=${population_data}` - darwin_args.forEach(function(arg) { + darwin_args.forEach(function (arg) { if (arg === popDataArg) { hasPopData = true } @@ -467,17 +461,17 @@ var exitHandler = function(options, exitErr) { if (exitErr) console.log(exitErr.stack || exitErr) if (options.exit) process.exit() } -process.on('exit', exitHandler.bind(null,{cleanup:true})) +process.on('exit', exitHandler.bind(null, { cleanup: true })) //catches ctrl+c event -process.on('SIGINT', exitHandler.bind(null, {exit:true})) +process.on('SIGINT', exitHandler.bind(null, { exit: true })) // catches "kill pid" (for example: nodemon restart) -process.on('SIGUSR1', exitHandler.bind(null, {exit:true})) -process.on('SIGUSR2', exitHandler.bind(null, {exit:true})) +process.on('SIGUSR1', exitHandler.bind(null, { exit: true })) +process.on('SIGUSR2', exitHandler.bind(null, { exit: true })) //catches uncaught exceptions -process.on('uncaughtException', exitHandler.bind(null, {exit:true})) +process.on('uncaughtException', exitHandler.bind(null, { exit: true })) // END - exitHandler @@ -487,6 +481,6 @@ Backtester.init({ parallelLimit: PARALLEL_LIMIT, writeFile: writeSimDataFile }) -setInterval( ()=>{ - if (generationProcessing == false) simulateGeneration(generateLaunchFile) -},1000) +setInterval(() => { + if (generationProcessing == false) simulateGeneration(generateLaunchFile) +}, 1000) From 262e45e43e6857180649761da535da906ac683fb Mon Sep 17 00:00:00 2001 From: theDiverDK Date: Thu, 15 Mar 2018 08:32:10 +0100 Subject: [PATCH 13/74] Added -runGenerations parameter (#1504) * Added -runGenerations parameter * Fixed bug due to remove a needed line * updated genetic_backtester.md * Updated version number * Text fix * remove debug statement * fixed spellingerror --- docs/scripts/genetic_backtester.md | 4 +- lib/backtester.js | 1 - scripts/genetic_backtester/darwin.js | 102 ++++++++++++++++----------- 3 files changed, 62 insertions(+), 45 deletions(-) diff --git a/docs/scripts/genetic_backtester.md b/docs/scripts/genetic_backtester.md index 5de2dc8963..8e1dea62f0 100644 --- a/docs/scripts/genetic_backtester.md +++ b/docs/scripts/genetic_backtester.md @@ -1,6 +1,6 @@ # Genetic Backtester - Darwin -The Genetic Backtester will execute a range of simulations with a range of parameters, limited by the population size, per strategy. Once all sims in the population are complete, the top results are taken as the starting point for the next generation. This continues indefinitely, until interrupted by the user. +The Genetic Backtester will execute a range of simulations with a range of parameters, limited by the population size, per strategy. Once all sims in the population are complete, the top results are taken as the starting point for the next generation. This continues indefinitely, until interrupted by the user, or --runGenerations is reached. ## Installation @@ -38,7 +38,7 @@ The following parameters are available when executing darwin.js: --use_strategies="all | strategy1,strategy2" # With this parameter, you can choose to test all, some (comma separated), or just one of the available strategies defined within darwin. --population="150" # Optional - Number of simulation per generation --population_data="./simulations/backtest_[simtimestamp]" # Optional - Resume backtesting on a previously terminated backtesting session. - +--runGenerations # Optional - Makes it possible to stop after a number of generations ``` ## Results diff --git a/lib/backtester.js b/lib/backtester.js index d5b04dd9ad..928f305de9 100644 --- a/lib/backtester.js +++ b/lib/backtester.js @@ -75,7 +75,6 @@ let processOutput = function (output, taskStrategyName, pheno) { } else { console.log(`Couldn't find simulationResults for ${pheno.backtester_generation}`) - console.log('params ', params) // this should return a general bad result but not throw an error // our job here is to use the result. not diagnose an error at this point so a failing sim should just be ignored. // idea here is to make the fitness of this calculation as bad as possible so darwin won't use the combonation of parameters again. diff --git a/scripts/genetic_backtester/darwin.js b/scripts/genetic_backtester/darwin.js index af94115583..ecd4ae73b0 100755 --- a/scripts/genetic_backtester/darwin.js +++ b/scripts/genetic_backtester/darwin.js @@ -19,6 +19,7 @@ * --days= amount of days to use when backfilling * --noStatSave=| true:no statistics are saved to the simulation folder * --silent=| true:can improve performance + * --runGenerations= if used run this number of generations, will be shown 1 less due to generations starts at 0 * * * any parameters for sim and or strategy can be passed in and will override the genetic test generated parameter @@ -41,16 +42,10 @@ let z = require('zero-fill') let n = require('numbro') let _ = require('lodash') -let VERSION = 'Zenbot 4 Genetic Backtester v0.2.2' +let VERSION = 'Zenbot 4 Genetic Backtester v0.2.3' let PARALLEL_LIMIT = (process.env.PARALLEL_LIMIT && +process.env.PARALLEL_LIMIT) || require('os').cpus().length - - - - - - let iterationCount = 0 let selectedStrategies @@ -58,15 +53,13 @@ let pools = {} let simArgs let populationSize = 0 let generationCount = 1 +let runGenerations = undefined let generationProcessing = false let population_data = '' let noStatSave = false let floatScanWindow = false let ignoreLaunchFitness = false - - - let readSimDataFile = (iteration) => { let jsonFileName = `simulations/${population_data}/gen_${generationCount}/sim_${iteration}.json` @@ -84,7 +77,6 @@ let writeSimDataFile = (iteration, data) => { Backtester.writeFileAndFolder(jsonFileName, data) } - function allStrategyNames() { let pathName = path.resolve(__dirname, '..', '..', 'extensions', 'strategies') return fs.readdirSync(pathName).filter(function (file) { @@ -98,7 +90,7 @@ function isUsefulKey(key) { } function generateCommandParams(input) { - if (typeof input !== typeof undefined && typeof input.params !== typeof undefined) { + if (!isUndefined(input) && !isUndefined(input.params)) { input = input.params.replace('module.exports =', '') } @@ -138,12 +130,15 @@ function saveGenerationData(csvFileName, jsonFileName, dataCSV, dataJSON) { } } - - // Find the first incomplete generation of this session, where incomplete means no "results" files -while (fs.existsSync(`simulations/${population_data}/gen_${generationCount}`)) { generationCount++ } +while (fs.existsSync(`simulations/${population_data}/gen_${generationCount}`)) { + generationCount++ +} generationCount-- -if (generationCount > 0 && !fs.existsSync(`simulations/${population_data}/gen_${generationCount}/results.csv`)) { generationCount-- } + +if (generationCount > 0 && !fs.existsSync(`simulations/${population_data}/gen_${generationCount}/results.csv`)) { + generationCount-- +} function saveLaunchFiles(saveLauchFile, configuration) { if (!saveLauchFile) return @@ -166,6 +161,7 @@ function saveLaunchFiles(saveLauchFile, configuration) { lastFitnessLevel = th[1] } } + // get prior firness level win32 if (fs.existsSync(lFinenamewin32)) { let lFileCont = fs.readFileSync(lFinenamewin32, { encoding: 'utf8', flag: 'r' }) @@ -181,6 +177,7 @@ function saveLaunchFiles(saveLauchFile, configuration) { let lNixContents = '#!/bin/bash\n'.concat('#fitness=', configuration.fitness, '\n', 'env node zenbot.js trade ', bestOverallCommand, ' $@\n') + let lWin32Contents = '@echo off\n'.concat('rem fitness=', configuration.fitness, '\n', 'node zenbot.js trade ', bestOverallCommand, ' %*\n') @@ -193,25 +190,39 @@ function saveLaunchFiles(saveLauchFile, configuration) { fs.chmodSync(lFinenamewin32, '777') } } + let cycleCount = -1 + +function isUndefined(variable) { + return typeof variable === typeof undefined +} + function simulateGeneration(generateLaunchFile) { + generationProcessing = true // Find the first incomplete generation of this session, where incomplete means no "results" files - while (fs.existsSync(`simulations/${population_data}/gen_${generationCount}`)) { generationCount++ } + while (fs.existsSync(`simulations/${population_data}/gen_${generationCount}`)) { + generationCount++ + } + generationCount-- - if (generationCount > 0 && !fs.existsSync(`simulations/${population_data}/gen_${generationCount}/results.csv`)) { generationCount-- } + + if (generationCount > 0 && !fs.existsSync(`simulations/${population_data}/gen_${generationCount}/results.csv`)) { + generationCount-- + } if (noStatSave) { cycleCount++ generationCount = cycleCount } - iterationCount = 0 - generationProcessing = true - console.log(`\n\n=== Simulating generation ${++generationCount} ===\n`) + let ofGenerations = (!isUndefined(runGenerations)) ? `of ${runGenerations}` : '' + + console.log(`\n\n=== Simulating generation ${++generationCount} ${ofGenerations} ===\n`) Backtester.resetMonitor() Backtester.ensureBackfill() + iterationCount = 0 let tasks = selectedStrategies.map(v => pools[v]['pool'].population().map(phenotype => { return cb => { @@ -221,6 +232,7 @@ function simulateGeneration(generateLaunchFile) { var command let simData = readSimDataFile(iterationCount) + if (simData) { if (simData.result) { // Found a complete and cached sim, don't run anything, just forward the results of it @@ -281,7 +293,6 @@ function simulateGeneration(generateLaunchFile) { if (!noStatSave) saveGenerationData(csvFileName, jsonFileName, dataCSV, dataJSON) - //Display best of the generation console.log('\n\nGeneration\'s Best Results') let bestOverallResult = [] @@ -304,12 +315,13 @@ function simulateGeneration(generateLaunchFile) { if (bestCommand != '') { bestCommand = prefix + bestCommand bestCommand = bestCommand + ' --asset_capital=' + argv.asset_capital + ' --currency_capital=' + argv.currency_capital + console.log(bestCommand + '\n') } }) bestOverallResult.sort((a, b) => - (typeof a.fitness === typeof undefined) ? 1 : - (typeof b.fitness === typeof undefined) ? 0 : + (isUndefined(a.fitness)) ? 1 : + (isUndefined(b.fitness)) ? 0 : (a.fitness < b.fitness) ? 1 : (b.fitness < a.fitness) ? -1 : 0) @@ -321,47 +333,47 @@ function simulateGeneration(generateLaunchFile) { if (selectedStrategies.length > 1) { console.log(`(${bestOverallResult[0].strategy}) Best Overall Fitness ${bestOverallResult[0].fitness}, VS Buy and Hold: ${z(5, (n(bestOverallResult[0].vsBuyHold).format('0.00') + '%'), ' ').yellow} BuyAndHold Balance: ${z(5, (n(bestOverallResult[0].buyHold).format('0.000000')), ' ').yellow} End Balance: ${z(5, (n(bestOverallResult[0].endBalance).format('0.000000')), ' ').yellow}, Wins/Losses ${bestOverallResult[0].wins}/${bestOverallResult[0].losses}, ROI ${z(5, (n(bestOverallResult[0].roi).format('0.000000')), ' ').yellow}.`) - - console.log(bestOverallCommand + '\n') } selectedStrategies.forEach((v) => { pools[v]['pool'] = pools[v]['pool'].evolve() }) - generationProcessing = false - + if (!isUndefined(runGenerations) && runGenerations <= generationCount) { + process.exit() + } + generationProcessing = false }) } - - console.log(`\n--==${VERSION}==--`) console.log(new Date().toUTCString() + '\n') - simArgs = Object.assign({}, argv) -if (!simArgs.selector) +if (!simArgs.selector) { simArgs.selector = 'bitfinex.ETH-USD' -if (!simArgs.filename) +} + +if (!simArgs.filename) { simArgs.filename = 'none' +} if (simArgs.help || !(simArgs.use_strategies)) { console.log('--use_strategies=,, Min one strategy, can include more than one') console.log('--population_data= filename used for continueing backtesting from previous run') - console.log('--generateLaunch=| will genertate .sh and .bat file using the best generation discovered') + console.log('--generateLaunch=| will generate .sh and .bat file using the best generation discovered') console.log('--population= populate per strategy') console.log('--maxCores= maximum processes to execute at a time default is # of cpu cores in system') console.log('--selector= ') console.log('--asset_capital= amount coin to start sim with ') - console.log('--currency_capital= amount of capital/base currency to start sim with'), + console.log('--currency_capital= amount of capital/base currency to start sim with') console.log('--days= amount of days to use when backfilling') console.log('--noStatSave=|') + console.log('--runGenerations= if used run this number of generations, will be shown 1 less due to generations starts at 0') process.exit(0) } - delete simArgs.use_strategies delete simArgs.population_data delete simArgs.population @@ -373,17 +385,22 @@ if (simArgs.maxCores) { else PARALLEL_LIMIT = simArgs.maxCores } +if (!isUndefined(simArgs.runGenerations)) { + if (simArgs.runGenerations) { + runGenerations = simArgs.runGenerations - 1 + } +} + let generateLaunchFile = (simArgs.generateLaunch) ? true : false noStatSave = (simArgs.noStatSave) ? true : false + let strategyName = (argv.use_strategies) ? argv.use_strategies : 'all' populationSize = (argv.population) ? argv.population : 100 floatScanWindow = (argv.floatScanWindow) ? argv.floatScanWindow : false ignoreLaunchFitness = (argv.ignoreLaunchFitness) ? argv.ignoreLaunchFitness : false - population_data = argv.population_data || `backtest.${simArgs.selector.toLowerCase()}.${moment().format('YYYYMMDDHHmmss')}` - console.log(`Backtesting strategy ${strategyName} ...\n`) console.log(`Creating population of ${populationSize} ...\n`) @@ -391,15 +408,16 @@ selectedStrategies = (strategyName === 'all') ? allStrategyNames() : strategyNam Backtester.deLint() - for (var i = 0; i < selectedStrategies.length; i++) { let v = selectedStrategies[i] let strategyPool = pools[v] = {} let strategyData = require(path.resolve(__dirname, `../../extensions/strategies/${v}/strategy`)) let strategyPhenotypes = strategyData.phenotypes + if (strategyPhenotypes) { let evolve = true let population = [] + for (var i2 = population.length; i2 < populationSize; ++i2) { population.push(Phenotypes.create(strategyPhenotypes)) evolve = false @@ -419,6 +437,7 @@ for (var i = 0; i < selectedStrategies.length; i++) { } strategyPool['pool'] = GeneticAlgorithmCtor(strategyPool.config) + if (evolve) { strategyPool['pool'].evolve() } @@ -438,8 +457,7 @@ for (var i = 0; i < selectedStrategies.length; i++) { // BEGIN - exitHandler var exitHandler = function (options, exitErr) { - - if (generationCount && options.cleanup) { + if (generationCount && options.cleanup && (isUndefined(runGenerations) || runGenerations !== generationCount)) { console.log('Resume this backtest later with:') var darwin_args = process.argv.slice(2, process.argv.length) @@ -461,6 +479,7 @@ var exitHandler = function (options, exitErr) { if (exitErr) console.log(exitErr.stack || exitErr) if (options.exit) process.exit() } + process.on('exit', exitHandler.bind(null, { cleanup: true })) //catches ctrl+c event @@ -474,7 +493,6 @@ process.on('SIGUSR2', exitHandler.bind(null, { exit: true })) process.on('uncaughtException', exitHandler.bind(null, { exit: true })) // END - exitHandler - Backtester.init({ simArgs: simArgs, simTotalCount: populationSize * selectedStrategies.length, From 32e5f68779d295b0eede0cef15159c9d06e4f65f Mon Sep 17 00:00:00 2001 From: Travis CI Date: Thu, 15 Mar 2018 11:00:36 +0000 Subject: [PATCH 14/74] Exchanges: update-products 836 --- extensions/exchanges/binance/products.json | 4 +- extensions/exchanges/bitfinex/products.json | 146 ++++++++++---------- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index e951430c30..b26ddd8d7f 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -295,7 +295,7 @@ "currency": "BTC", "min_size": "0.01000000", "max_size": "100000.00000000", - "increment": "0.000001", + "increment": "0.0000001", "asset_increment": "0.01", "label": "STRAT/BTC" }, @@ -505,7 +505,7 @@ "currency": "BTC", "min_size": "0.01000000", "max_size": "100000.00000000", - "increment": "0.000001", + "increment": "0.0000001", "asset_increment": "0.01", "label": "SALT/BTC" }, diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index f55617d984..b3ace9f321 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -146,7 +146,7 @@ { "asset": "IOT", "currency": "USD", - "min_size": "6.0", + "min_size": "8.0", "max_size": "100000.0", "increment": "0.00001", "label": "IOT/USD" @@ -154,7 +154,7 @@ { "asset": "IOT", "currency": "BTC", - "min_size": "6.0", + "min_size": "8.0", "max_size": "100000.0", "increment": "0.00000001", "label": "IOT/BTC" @@ -162,7 +162,7 @@ { "asset": "IOT", "currency": "ETH", - "min_size": "6.0", + "min_size": "8.0", "max_size": "100000.0", "increment": "0.00000001", "label": "IOT/ETH" @@ -290,7 +290,7 @@ { "asset": "ETP", "currency": "USD", - "min_size": "8.0", + "min_size": "10.0", "max_size": "10000.0", "increment": "0.00001", "label": "ETP/USD" @@ -298,7 +298,7 @@ { "asset": "ETP", "currency": "BTC", - "min_size": "8.0", + "min_size": "10.0", "max_size": "10000.0", "increment": "0.00000001", "label": "ETP/BTC" @@ -306,7 +306,7 @@ { "asset": "ETP", "currency": "ETH", - "min_size": "8.0", + "min_size": "10.0", "max_size": "10000.0", "increment": "0.00000001", "label": "ETP/ETH" @@ -314,7 +314,7 @@ { "asset": "QTM", "currency": "USD", - "min_size": "0.4", + "min_size": "0.6", "max_size": "2000.0", "increment": "0.0001", "label": "QTM/USD" @@ -322,7 +322,7 @@ { "asset": "QTM", "currency": "BTC", - "min_size": "0.4", + "min_size": "0.6", "max_size": "2000.0", "increment": "0.0000001", "label": "QTM/BTC" @@ -330,7 +330,7 @@ { "asset": "QTM", "currency": "ETH", - "min_size": "0.4", + "min_size": "0.6", "max_size": "2000.0", "increment": "0.0000001", "label": "QTM/ETH" @@ -338,7 +338,7 @@ { "asset": "AVT", "currency": "USD", - "min_size": "6.0", + "min_size": "8.0", "max_size": "50000.0", "increment": "0.00001", "label": "AVT/USD" @@ -346,7 +346,7 @@ { "asset": "AVT", "currency": "BTC", - "min_size": "6.0", + "min_size": "8.0", "max_size": "50000.0", "increment": "0.00000001", "label": "AVT/BTC" @@ -354,7 +354,7 @@ { "asset": "AVT", "currency": "ETH", - "min_size": "6.0", + "min_size": "8.0", "max_size": "50000.0", "increment": "0.00000001", "label": "AVT/ETH" @@ -362,7 +362,7 @@ { "asset": "EDO", "currency": "USD", - "min_size": "6.0", + "min_size": "8.0", "max_size": "50000.0", "increment": "0.00001", "label": "EDO/USD" @@ -370,7 +370,7 @@ { "asset": "EDO", "currency": "BTC", - "min_size": "6.0", + "min_size": "8.0", "max_size": "50000.0", "increment": "0.00000001", "label": "EDO/BTC" @@ -378,7 +378,7 @@ { "asset": "EDO", "currency": "ETH", - "min_size": "6.0", + "min_size": "8.0", "max_size": "50000.0", "increment": "0.00000001", "label": "EDO/ETH" @@ -402,31 +402,31 @@ { "asset": "DAT", "currency": "USD", - "min_size": "122.0", + "min_size": "140.0", "max_size": "250000.0", - "increment": "0.000001", + "increment": "0.0000001", "label": "DAT/USD" }, { "asset": "DAT", "currency": "BTC", - "min_size": "122.0", + "min_size": "140.0", "max_size": "250000.0", - "increment": "0.000000001", + "increment": "0.0000000001", "label": "DAT/BTC" }, { "asset": "DAT", "currency": "ETH", - "min_size": "122.0", + "min_size": "140.0", "max_size": "250000.0", - "increment": "0.000000001", + "increment": "0.0000000001", "label": "DAT/ETH" }, { "asset": "QSH", "currency": "USD", - "min_size": "14.0", + "min_size": "18.0", "max_size": "50000.0", "increment": "0.00001", "label": "QSH/USD" @@ -434,7 +434,7 @@ { "asset": "QSH", "currency": "BTC", - "min_size": "14.0", + "min_size": "18.0", "max_size": "50000.0", "increment": "0.00000001", "label": "QSH/BTC" @@ -442,7 +442,7 @@ { "asset": "QSH", "currency": "ETH", - "min_size": "14.0", + "min_size": "18.0", "max_size": "50000.0", "increment": "0.00000001", "label": "QSH/ETH" @@ -450,31 +450,31 @@ { "asset": "YYW", "currency": "USD", - "min_size": "106.0", + "min_size": "138.0", "max_size": "50000.0", - "increment": "0.000001", + "increment": "0.0000001", "label": "YYW/USD" }, { "asset": "YYW", "currency": "BTC", - "min_size": "106.0", + "min_size": "138.0", "max_size": "50000.0", - "increment": "0.000000001", + "increment": "0.0000000001", "label": "YYW/BTC" }, { "asset": "YYW", "currency": "ETH", - "min_size": "106.0", + "min_size": "138.0", "max_size": "50000.0", - "increment": "0.000000001", + "increment": "0.0000000001", "label": "YYW/ETH" }, { "asset": "GNT", "currency": "USD", - "min_size": "32.0", + "min_size": "40.0", "max_size": "200000.0", "increment": "0.000001", "label": "GNT/USD" @@ -482,7 +482,7 @@ { "asset": "GNT", "currency": "BTC", - "min_size": "32.0", + "min_size": "40.0", "max_size": "200000.0", "increment": "0.000000001", "label": "GNT/BTC" @@ -490,7 +490,7 @@ { "asset": "GNT", "currency": "ETH", - "min_size": "32.0", + "min_size": "40.0", "max_size": "200000.0", "increment": "0.000000001", "label": "GNT/ETH" @@ -498,7 +498,7 @@ { "asset": "SNT", "currency": "USD", - "min_size": "64.0", + "min_size": "84.0", "max_size": "200000.0", "increment": "0.000001", "label": "SNT/USD" @@ -506,7 +506,7 @@ { "asset": "SNT", "currency": "BTC", - "min_size": "64.0", + "min_size": "84.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/BTC" @@ -514,7 +514,7 @@ { "asset": "SNT", "currency": "ETH", - "min_size": "64.0", + "min_size": "84.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/ETH" @@ -522,7 +522,7 @@ { "asset": "IOT", "currency": "EUR", - "min_size": "6.0", + "min_size": "8.0", "max_size": "100000.0", "increment": "0.00000001", "label": "IOT/EUR" @@ -530,7 +530,7 @@ { "asset": "BAT", "currency": "USD", - "min_size": "32.0", + "min_size": "44.0", "max_size": "200000.0", "increment": "0.000001", "label": "BAT/USD" @@ -538,7 +538,7 @@ { "asset": "BAT", "currency": "BTC", - "min_size": "32.0", + "min_size": "44.0", "max_size": "200000.0", "increment": "0.000000001", "label": "BAT/BTC" @@ -546,7 +546,7 @@ { "asset": "BAT", "currency": "ETH", - "min_size": "32.0", + "min_size": "44.0", "max_size": "200000.0", "increment": "0.000000001", "label": "BAT/ETH" @@ -554,7 +554,7 @@ { "asset": "MNA", "currency": "USD", - "min_size": "114.0", + "min_size": "120.0", "max_size": "200000.0", "increment": "0.000001", "label": "MNA/USD" @@ -562,7 +562,7 @@ { "asset": "MNA", "currency": "BTC", - "min_size": "114.0", + "min_size": "120.0", "max_size": "200000.0", "increment": "0.000000001", "label": "MNA/BTC" @@ -570,7 +570,7 @@ { "asset": "MNA", "currency": "ETH", - "min_size": "114.0", + "min_size": "120.0", "max_size": "200000.0", "increment": "0.000000001", "label": "MNA/ETH" @@ -578,7 +578,7 @@ { "asset": "FUN", "currency": "USD", - "min_size": "208.0", + "min_size": "264.0", "max_size": "200000.0", "increment": "0.0000001", "label": "FUN/USD" @@ -586,7 +586,7 @@ { "asset": "FUN", "currency": "BTC", - "min_size": "208.0", + "min_size": "264.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/BTC" @@ -594,7 +594,7 @@ { "asset": "FUN", "currency": "ETH", - "min_size": "208.0", + "min_size": "264.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/ETH" @@ -602,7 +602,7 @@ { "asset": "ZRX", "currency": "USD", - "min_size": "14.0", + "min_size": "20.0", "max_size": "200000.0", "increment": "0.00001", "label": "ZRX/USD" @@ -610,7 +610,7 @@ { "asset": "ZRX", "currency": "BTC", - "min_size": "14.0", + "min_size": "20.0", "max_size": "200000.0", "increment": "0.00000001", "label": "ZRX/BTC" @@ -618,7 +618,7 @@ { "asset": "ZRX", "currency": "ETH", - "min_size": "14.0", + "min_size": "20.0", "max_size": "200000.0", "increment": "0.00000001", "label": "ZRX/ETH" @@ -626,7 +626,7 @@ { "asset": "TNB", "currency": "USD", - "min_size": "284.0", + "min_size": "378.0", "max_size": "200000.0", "increment": "0.0000001", "label": "TNB/USD" @@ -634,7 +634,7 @@ { "asset": "TNB", "currency": "BTC", - "min_size": "284.0", + "min_size": "380.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "TNB/BTC" @@ -642,7 +642,7 @@ { "asset": "TNB", "currency": "ETH", - "min_size": "284.0", + "min_size": "380.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "TNB/ETH" @@ -674,7 +674,7 @@ { "asset": "TRX", "currency": "USD", - "min_size": "300.0", + "min_size": "322.0", "max_size": "1000000.0", "increment": "0.0000001", "label": "TRX/USD" @@ -682,7 +682,7 @@ { "asset": "TRX", "currency": "BTC", - "min_size": "300.0", + "min_size": "322.0", "max_size": "1000000.0", "increment": "0.0000000001", "label": "TRX/BTC" @@ -690,7 +690,7 @@ { "asset": "TRX", "currency": "ETH", - "min_size": "300.0", + "min_size": "322.0", "max_size": "1000000.0", "increment": "0.0000000001", "label": "TRX/ETH" @@ -698,7 +698,7 @@ { "asset": "RCN", "currency": "USD", - "min_size": "80.0", + "min_size": "110.0", "max_size": "200000.0", "increment": "0.000001", "label": "RCN/USD" @@ -706,7 +706,7 @@ { "asset": "RCN", "currency": "BTC", - "min_size": "80.0", + "min_size": "110.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/BTC" @@ -714,7 +714,7 @@ { "asset": "RCN", "currency": "ETH", - "min_size": "80.0", + "min_size": "110.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/ETH" @@ -746,7 +746,7 @@ { "asset": "AID", "currency": "USD", - "min_size": "40.0", + "min_size": "50.0", "max_size": "200000.0", "increment": "0.000001", "label": "AID/USD" @@ -754,7 +754,7 @@ { "asset": "AID", "currency": "BTC", - "min_size": "40.0", + "min_size": "50.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/BTC" @@ -762,7 +762,7 @@ { "asset": "AID", "currency": "ETH", - "min_size": "40.0", + "min_size": "50.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/ETH" @@ -770,31 +770,31 @@ { "asset": "SNG", "currency": "USD", - "min_size": "124.0", + "min_size": "158.0", "max_size": "200000.0", - "increment": "0.000001", + "increment": "0.0000001", "label": "SNG/USD" }, { "asset": "SNG", "currency": "BTC", - "min_size": "124.0", + "min_size": "158.0", "max_size": "200000.0", - "increment": "0.000000001", + "increment": "0.0000000001", "label": "SNG/BTC" }, { "asset": "SNG", "currency": "ETH", - "min_size": "124.0", + "min_size": "158.0", "max_size": "200000.0", - "increment": "0.000000001", + "increment": "0.0000000001", "label": "SNG/ETH" }, { "asset": "REP", "currency": "USD", - "min_size": "0.2", + "min_size": "0.4", "max_size": "1000.0", "increment": "0.0001", "label": "REP/USD" @@ -802,7 +802,7 @@ { "asset": "REP", "currency": "BTC", - "min_size": "0.2", + "min_size": "0.4", "max_size": "1000.0", "increment": "0.0000001", "label": "REP/BTC" @@ -810,7 +810,7 @@ { "asset": "REP", "currency": "ETH", - "min_size": "0.2", + "min_size": "0.4", "max_size": "1000.0", "increment": "0.0000001", "label": "REP/ETH" @@ -818,7 +818,7 @@ { "asset": "ELF", "currency": "USD", - "min_size": "12.0", + "min_size": "16.0", "max_size": "25000.0", "increment": "0.00001", "label": "ELF/USD" @@ -826,7 +826,7 @@ { "asset": "ELF", "currency": "BTC", - "min_size": "12.0", + "min_size": "16.0", "max_size": "25000.0", "increment": "0.00000001", "label": "ELF/BTC" @@ -834,7 +834,7 @@ { "asset": "ELF", "currency": "ETH", - "min_size": "12.0", + "min_size": "16.0", "max_size": "25000.0", "increment": "0.00000001", "label": "ELF/ETH" From a91ce149964aef9ce045b32d06541387d45e7b8d Mon Sep 17 00:00:00 2001 From: Travis CI Date: Fri, 16 Mar 2018 11:01:59 +0000 Subject: [PATCH 15/74] Exchanges: update-products 841 --- extensions/exchanges/bittrex/products.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index e14a637408..1a50cb85d0 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -696,12 +696,12 @@ "label": "BTC/CLUB" }, { - "asset": "VOX", + "asset": "RVR", "currency": "BTC", "min_size": "19.53125000", "max_size": "1000000", "increment": "0.00000001", - "label": "BTC/VOX" + "label": "BTC/RVR" }, { "asset": "EMC", From 93b65ed9a9e29e4a38d835964c5b0329aae98cd8 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Sat, 17 Mar 2018 11:01:21 +0000 Subject: [PATCH 16/74] Exchanges: update-products 850 --- extensions/exchanges/bitfinex/products.json | 42 ++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index b3ace9f321..84d4f313a2 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -58,7 +58,7 @@ { "asset": "RRT", "currency": "USD", - "min_size": "190.0", + "min_size": "192.0", "max_size": "100000.0", "increment": "0.0000001", "label": "RRT/USD" @@ -66,7 +66,7 @@ { "asset": "RRT", "currency": "BTC", - "min_size": "190.0", + "min_size": "192.0", "max_size": "100000.0", "increment": "0.0000000001", "label": "RRT/BTC" @@ -146,7 +146,7 @@ { "asset": "IOT", "currency": "USD", - "min_size": "8.0", + "min_size": "10.0", "max_size": "100000.0", "increment": "0.00001", "label": "IOT/USD" @@ -154,7 +154,7 @@ { "asset": "IOT", "currency": "BTC", - "min_size": "8.0", + "min_size": "10.0", "max_size": "100000.0", "increment": "0.00000001", "label": "IOT/BTC" @@ -162,7 +162,7 @@ { "asset": "IOT", "currency": "ETH", - "min_size": "8.0", + "min_size": "10.0", "max_size": "100000.0", "increment": "0.00000001", "label": "IOT/ETH" @@ -290,7 +290,7 @@ { "asset": "ETP", "currency": "USD", - "min_size": "10.0", + "min_size": "12.0", "max_size": "10000.0", "increment": "0.00001", "label": "ETP/USD" @@ -298,7 +298,7 @@ { "asset": "ETP", "currency": "BTC", - "min_size": "10.0", + "min_size": "12.0", "max_size": "10000.0", "increment": "0.00000001", "label": "ETP/BTC" @@ -306,7 +306,7 @@ { "asset": "ETP", "currency": "ETH", - "min_size": "10.0", + "min_size": "12.0", "max_size": "10000.0", "increment": "0.00000001", "label": "ETP/ETH" @@ -498,7 +498,7 @@ { "asset": "SNT", "currency": "USD", - "min_size": "84.0", + "min_size": "96.0", "max_size": "200000.0", "increment": "0.000001", "label": "SNT/USD" @@ -506,7 +506,7 @@ { "asset": "SNT", "currency": "BTC", - "min_size": "84.0", + "min_size": "96.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/BTC" @@ -514,7 +514,7 @@ { "asset": "SNT", "currency": "ETH", - "min_size": "84.0", + "min_size": "96.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/ETH" @@ -522,7 +522,7 @@ { "asset": "IOT", "currency": "EUR", - "min_size": "8.0", + "min_size": "10.0", "max_size": "100000.0", "increment": "0.00000001", "label": "IOT/EUR" @@ -530,7 +530,7 @@ { "asset": "BAT", "currency": "USD", - "min_size": "44.0", + "min_size": "50.0", "max_size": "200000.0", "increment": "0.000001", "label": "BAT/USD" @@ -538,7 +538,7 @@ { "asset": "BAT", "currency": "BTC", - "min_size": "44.0", + "min_size": "50.0", "max_size": "200000.0", "increment": "0.000000001", "label": "BAT/BTC" @@ -546,7 +546,7 @@ { "asset": "BAT", "currency": "ETH", - "min_size": "44.0", + "min_size": "50.0", "max_size": "200000.0", "increment": "0.000000001", "label": "BAT/ETH" @@ -674,7 +674,7 @@ { "asset": "TRX", "currency": "USD", - "min_size": "322.0", + "min_size": "332.0", "max_size": "1000000.0", "increment": "0.0000001", "label": "TRX/USD" @@ -682,7 +682,7 @@ { "asset": "TRX", "currency": "BTC", - "min_size": "322.0", + "min_size": "332.0", "max_size": "1000000.0", "increment": "0.0000000001", "label": "TRX/BTC" @@ -690,7 +690,7 @@ { "asset": "TRX", "currency": "ETH", - "min_size": "322.0", + "min_size": "332.0", "max_size": "1000000.0", "increment": "0.0000000001", "label": "TRX/ETH" @@ -746,7 +746,7 @@ { "asset": "AID", "currency": "USD", - "min_size": "50.0", + "min_size": "52.0", "max_size": "200000.0", "increment": "0.000001", "label": "AID/USD" @@ -754,7 +754,7 @@ { "asset": "AID", "currency": "BTC", - "min_size": "50.0", + "min_size": "52.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/BTC" @@ -762,7 +762,7 @@ { "asset": "AID", "currency": "ETH", - "min_size": "50.0", + "min_size": "52.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/ETH" From 8246dfc4d874e7ca0956614fceeef34c0d471c2c Mon Sep 17 00:00:00 2001 From: Travis CI Date: Sun, 18 Mar 2018 11:02:56 +0000 Subject: [PATCH 17/74] Exchanges: update-products 854 --- extensions/exchanges/bitfinex/products.json | 116 ++++++++++---------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index 84d4f313a2..f07e555867 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -58,7 +58,7 @@ { "asset": "RRT", "currency": "USD", - "min_size": "192.0", + "min_size": "210.0", "max_size": "100000.0", "increment": "0.0000001", "label": "RRT/USD" @@ -66,7 +66,7 @@ { "asset": "RRT", "currency": "BTC", - "min_size": "192.0", + "min_size": "210.0", "max_size": "100000.0", "increment": "0.0000000001", "label": "RRT/BTC" @@ -130,7 +130,7 @@ { "asset": "XRP", "currency": "USD", - "min_size": "14.0", + "min_size": "16.0", "max_size": "200000.0", "increment": "0.00001", "label": "XRP/USD" @@ -138,7 +138,7 @@ { "asset": "XRP", "currency": "BTC", - "min_size": "14.0", + "min_size": "16.0", "max_size": "200000.0", "increment": "0.00000001", "label": "XRP/BTC" @@ -218,25 +218,25 @@ { "asset": "OMG", "currency": "USD", - "min_size": "1.0", + "min_size": "2.0", "max_size": "100000.0", - "increment": "0.0001", + "increment": "0.00001", "label": "OMG/USD" }, { "asset": "OMG", "currency": "BTC", - "min_size": "1.0", + "min_size": "2.0", "max_size": "100000.0", - "increment": "0.0000001", + "increment": "0.00000001", "label": "OMG/BTC" }, { "asset": "OMG", "currency": "ETH", - "min_size": "1.0", + "min_size": "2.0", "max_size": "100000.0", - "increment": "0.0000001", + "increment": "0.00000001", "label": "OMG/ETH" }, { @@ -290,7 +290,7 @@ { "asset": "ETP", "currency": "USD", - "min_size": "12.0", + "min_size": "14.0", "max_size": "10000.0", "increment": "0.00001", "label": "ETP/USD" @@ -298,7 +298,7 @@ { "asset": "ETP", "currency": "BTC", - "min_size": "12.0", + "min_size": "14.0", "max_size": "10000.0", "increment": "0.00000001", "label": "ETP/BTC" @@ -306,7 +306,7 @@ { "asset": "ETP", "currency": "ETH", - "min_size": "12.0", + "min_size": "14.0", "max_size": "10000.0", "increment": "0.00000001", "label": "ETP/ETH" @@ -314,7 +314,7 @@ { "asset": "QTM", "currency": "USD", - "min_size": "0.6", + "min_size": "0.8", "max_size": "2000.0", "increment": "0.0001", "label": "QTM/USD" @@ -322,7 +322,7 @@ { "asset": "QTM", "currency": "BTC", - "min_size": "0.6", + "min_size": "0.8", "max_size": "2000.0", "increment": "0.0000001", "label": "QTM/BTC" @@ -330,7 +330,7 @@ { "asset": "QTM", "currency": "ETH", - "min_size": "0.6", + "min_size": "0.8", "max_size": "2000.0", "increment": "0.0000001", "label": "QTM/ETH" @@ -402,7 +402,7 @@ { "asset": "DAT", "currency": "USD", - "min_size": "140.0", + "min_size": "144.0", "max_size": "250000.0", "increment": "0.0000001", "label": "DAT/USD" @@ -410,7 +410,7 @@ { "asset": "DAT", "currency": "BTC", - "min_size": "140.0", + "min_size": "144.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/BTC" @@ -418,7 +418,7 @@ { "asset": "DAT", "currency": "ETH", - "min_size": "140.0", + "min_size": "144.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/ETH" @@ -426,7 +426,7 @@ { "asset": "QSH", "currency": "USD", - "min_size": "18.0", + "min_size": "20.0", "max_size": "50000.0", "increment": "0.00001", "label": "QSH/USD" @@ -434,7 +434,7 @@ { "asset": "QSH", "currency": "BTC", - "min_size": "18.0", + "min_size": "20.0", "max_size": "50000.0", "increment": "0.00000001", "label": "QSH/BTC" @@ -442,7 +442,7 @@ { "asset": "QSH", "currency": "ETH", - "min_size": "18.0", + "min_size": "20.0", "max_size": "50000.0", "increment": "0.00000001", "label": "QSH/ETH" @@ -450,7 +450,7 @@ { "asset": "YYW", "currency": "USD", - "min_size": "138.0", + "min_size": "148.0", "max_size": "50000.0", "increment": "0.0000001", "label": "YYW/USD" @@ -458,7 +458,7 @@ { "asset": "YYW", "currency": "BTC", - "min_size": "138.0", + "min_size": "148.0", "max_size": "50000.0", "increment": "0.0000000001", "label": "YYW/BTC" @@ -466,7 +466,7 @@ { "asset": "YYW", "currency": "ETH", - "min_size": "138.0", + "min_size": "148.0", "max_size": "50000.0", "increment": "0.0000000001", "label": "YYW/ETH" @@ -474,7 +474,7 @@ { "asset": "GNT", "currency": "USD", - "min_size": "40.0", + "min_size": "46.0", "max_size": "200000.0", "increment": "0.000001", "label": "GNT/USD" @@ -482,7 +482,7 @@ { "asset": "GNT", "currency": "BTC", - "min_size": "40.0", + "min_size": "46.0", "max_size": "200000.0", "increment": "0.000000001", "label": "GNT/BTC" @@ -490,7 +490,7 @@ { "asset": "GNT", "currency": "ETH", - "min_size": "40.0", + "min_size": "46.0", "max_size": "200000.0", "increment": "0.000000001", "label": "GNT/ETH" @@ -498,7 +498,7 @@ { "asset": "SNT", "currency": "USD", - "min_size": "96.0", + "min_size": "112.0", "max_size": "200000.0", "increment": "0.000001", "label": "SNT/USD" @@ -506,7 +506,7 @@ { "asset": "SNT", "currency": "BTC", - "min_size": "96.0", + "min_size": "112.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/BTC" @@ -514,7 +514,7 @@ { "asset": "SNT", "currency": "ETH", - "min_size": "96.0", + "min_size": "112.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/ETH" @@ -530,7 +530,7 @@ { "asset": "BAT", "currency": "USD", - "min_size": "50.0", + "min_size": "52.0", "max_size": "200000.0", "increment": "0.000001", "label": "BAT/USD" @@ -538,7 +538,7 @@ { "asset": "BAT", "currency": "BTC", - "min_size": "50.0", + "min_size": "52.0", "max_size": "200000.0", "increment": "0.000000001", "label": "BAT/BTC" @@ -546,7 +546,7 @@ { "asset": "BAT", "currency": "ETH", - "min_size": "50.0", + "min_size": "52.0", "max_size": "200000.0", "increment": "0.000000001", "label": "BAT/ETH" @@ -578,7 +578,7 @@ { "asset": "FUN", "currency": "USD", - "min_size": "264.0", + "min_size": "282.0", "max_size": "200000.0", "increment": "0.0000001", "label": "FUN/USD" @@ -586,7 +586,7 @@ { "asset": "FUN", "currency": "BTC", - "min_size": "264.0", + "min_size": "282.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/BTC" @@ -594,7 +594,7 @@ { "asset": "FUN", "currency": "ETH", - "min_size": "264.0", + "min_size": "282.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/ETH" @@ -602,7 +602,7 @@ { "asset": "ZRX", "currency": "USD", - "min_size": "20.0", + "min_size": "22.0", "max_size": "200000.0", "increment": "0.00001", "label": "ZRX/USD" @@ -610,7 +610,7 @@ { "asset": "ZRX", "currency": "BTC", - "min_size": "20.0", + "min_size": "22.0", "max_size": "200000.0", "increment": "0.00000001", "label": "ZRX/BTC" @@ -618,7 +618,7 @@ { "asset": "ZRX", "currency": "ETH", - "min_size": "20.0", + "min_size": "22.0", "max_size": "200000.0", "increment": "0.00000001", "label": "ZRX/ETH" @@ -626,7 +626,7 @@ { "asset": "TNB", "currency": "USD", - "min_size": "378.0", + "min_size": "398.0", "max_size": "200000.0", "increment": "0.0000001", "label": "TNB/USD" @@ -634,7 +634,7 @@ { "asset": "TNB", "currency": "BTC", - "min_size": "380.0", + "min_size": "398.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "TNB/BTC" @@ -642,7 +642,7 @@ { "asset": "TNB", "currency": "ETH", - "min_size": "380.0", + "min_size": "398.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "TNB/ETH" @@ -674,7 +674,7 @@ { "asset": "TRX", "currency": "USD", - "min_size": "332.0", + "min_size": "354.0", "max_size": "1000000.0", "increment": "0.0000001", "label": "TRX/USD" @@ -682,7 +682,7 @@ { "asset": "TRX", "currency": "BTC", - "min_size": "332.0", + "min_size": "354.0", "max_size": "1000000.0", "increment": "0.0000000001", "label": "TRX/BTC" @@ -690,7 +690,7 @@ { "asset": "TRX", "currency": "ETH", - "min_size": "332.0", + "min_size": "354.0", "max_size": "1000000.0", "increment": "0.0000000001", "label": "TRX/ETH" @@ -698,7 +698,7 @@ { "asset": "RCN", "currency": "USD", - "min_size": "110.0", + "min_size": "112.0", "max_size": "200000.0", "increment": "0.000001", "label": "RCN/USD" @@ -706,7 +706,7 @@ { "asset": "RCN", "currency": "BTC", - "min_size": "110.0", + "min_size": "112.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/BTC" @@ -714,7 +714,7 @@ { "asset": "RCN", "currency": "ETH", - "min_size": "110.0", + "min_size": "112.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/ETH" @@ -746,7 +746,7 @@ { "asset": "AID", "currency": "USD", - "min_size": "52.0", + "min_size": "54.0", "max_size": "200000.0", "increment": "0.000001", "label": "AID/USD" @@ -754,7 +754,7 @@ { "asset": "AID", "currency": "BTC", - "min_size": "52.0", + "min_size": "54.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/BTC" @@ -762,7 +762,7 @@ { "asset": "AID", "currency": "ETH", - "min_size": "52.0", + "min_size": "54.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/ETH" @@ -770,7 +770,7 @@ { "asset": "SNG", "currency": "USD", - "min_size": "158.0", + "min_size": "170.0", "max_size": "200000.0", "increment": "0.0000001", "label": "SNG/USD" @@ -778,7 +778,7 @@ { "asset": "SNG", "currency": "BTC", - "min_size": "158.0", + "min_size": "170.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "SNG/BTC" @@ -786,7 +786,7 @@ { "asset": "SNG", "currency": "ETH", - "min_size": "158.0", + "min_size": "170.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "SNG/ETH" @@ -818,7 +818,7 @@ { "asset": "ELF", "currency": "USD", - "min_size": "16.0", + "min_size": "18.0", "max_size": "25000.0", "increment": "0.00001", "label": "ELF/USD" @@ -826,7 +826,7 @@ { "asset": "ELF", "currency": "BTC", - "min_size": "16.0", + "min_size": "18.0", "max_size": "25000.0", "increment": "0.00000001", "label": "ELF/BTC" @@ -834,7 +834,7 @@ { "asset": "ELF", "currency": "ETH", - "min_size": "16.0", + "min_size": "18.0", "max_size": "25000.0", "increment": "0.00000001", "label": "ELF/ETH" From 41c7a9f9577040aa78d5dc94c6ff1a5b7f754151 Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Mon, 19 Mar 2018 04:51:47 -0400 Subject: [PATCH 18/74] syncBalance can return quote, no need to get it again (#1511) --- lib/engine.js | 238 +++++++++++++++++++++++++------------------------- 1 file changed, 118 insertions(+), 120 deletions(-) diff --git a/lib/engine.js b/lib/engine.js index 9313d81d77..eca640eb05 100644 --- a/lib/engine.js +++ b/lib/engine.js @@ -246,7 +246,7 @@ module.exports = function (s, conf) { s.exchange.getBalance({currency: s.currency, asset: s.asset}, function (err, balance) { if (err) return cb(err) s.balance = balance - s.exchange.getQuote({product_id: s.product_id}, function (err, quote) { + getQuote(function (err, quote) { if (err) return cb(err) if (!s.start_capital) { @@ -257,7 +257,7 @@ module.exports = function (s, conf) { } s.asset_capital = n(s.balance.asset).multiply(quote.ask).value() - cb() + cb(null, { balance, quote }) }) }) } @@ -373,149 +373,147 @@ module.exports = function (s, conf) { _cb(null, order) } } - syncBalance(function (err) { + syncBalance(function (err, { quote }) { if (err) { msg('error getting balance') } - getQuote(function (err, quote) { - let reorder_pct, fee, trade_balance, tradeable_balance, expected_fee - if (err) { - err.desc = 'could not execute ' + signal + ': error fetching quote' - return cb(err) + let reorder_pct, fee, trade_balance, tradeable_balance, expected_fee + if (err) { + err.desc = 'could not execute ' + signal + ': error fetching quote' + return cb(err) + } + if (is_reorder && s[signal + '_order']) { + if (signal === 'buy') { + reorder_pct = n(size).multiply(s.buy_order.price).add(s.buy_order.fee).divide(s.balance.currency).multiply(100) + } else { + reorder_pct = n(size).divide(s.balance.asset).multiply(100) + } + msg('price changed, resizing order, ' + reorder_pct + '% remain') + size = null + } + if (s.my_prev_trades.length) { + trades = _.concat(s.my_prev_trades, s.my_trades) + } else { + trades = _.cloneDeep(s.my_trades) + } + if (signal === 'buy') { + price = nextBuyForQuote(s, quote) + + if (is_reorder) { + buy_pct = reorder_pct + } else { + buy_pct = so.buy_pct } - if (is_reorder && s[signal + '_order']) { - if (signal === 'buy') { - reorder_pct = n(size).multiply(s.buy_order.price).add(s.buy_order.fee).divide(s.balance.currency).multiply(100) - } else { - reorder_pct = n(size).divide(s.balance.asset).multiply(100) + if (so.buy_max_amt) { // account for held assets as buy_max + let adjusted_buy_max_amt = n(so.buy_max_amt).subtract(s.asset_capital).value() + if(adjusted_buy_max_amt < s.balance.currency){ + let buy_max_as_pct = n(adjusted_buy_max_amt).divide(s.balance.currency).multiply(100).value() + buy_pct = buy_max_as_pct } - msg('price changed, resizing order, ' + reorder_pct + '% remain') - size = null } - if (s.my_prev_trades.length) { - trades = _.concat(s.my_prev_trades, s.my_trades) + if (so.use_fee_asset) { + fee = 0 + } else if (so.order_type === 'maker' && (buy_pct + s.exchange.takerFee < 100 || !s.exchange.makerBuy100Workaround)) { + fee = s.exchange.makerFee } else { - trades = _.cloneDeep(s.my_trades) + fee = s.exchange.takerFee + } + trade_balance = n(s.balance.currency).divide(100).multiply(buy_pct) + tradeable_balance = n(s.balance.currency).divide(100 + fee).multiply(buy_pct) + expected_fee = n(trade_balance).subtract(tradeable_balance).format('0.00000000', Math.ceil) // round up as the exchange will too + if (buy_pct + fee < 100) { + size = n(tradeable_balance).divide(price).format(s.product.asset_increment ? s.product.asset_increment : '0.00000000') + } else { + size = n(trade_balance).subtract(expected_fee).divide(price).format(s.product.asset_increment ? s.product.asset_increment : '0.00000000') } - if (signal === 'buy') { - price = nextBuyForQuote(s, quote) - if (is_reorder) { - buy_pct = reorder_pct - } else { - buy_pct = so.buy_pct - } - if (so.buy_max_amt) { // account for held assets as buy_max - let adjusted_buy_max_amt = n(so.buy_max_amt).subtract(s.asset_capital).value() - if(adjusted_buy_max_amt < s.balance.currency){ - let buy_max_as_pct = n(adjusted_buy_max_amt).divide(s.balance.currency).multiply(100).value() - buy_pct = buy_max_as_pct - } + if ((s.product.min_size && Number(size) >= Number(s.product.min_size)) || ('min_total' in s.product && s.product.min_total && n(size).multiply(price).value() >= Number(s.product.min_total))) { + if (s.product.max_size && Number(size) > Number(s.product.max_size)) { + size = s.product.max_size } - if (so.use_fee_asset) { - fee = 0 - } else if (so.order_type === 'maker' && (buy_pct + s.exchange.takerFee < 100 || !s.exchange.makerBuy100Workaround)) { - fee = s.exchange.makerFee - } else { - fee = s.exchange.takerFee - } - trade_balance = n(s.balance.currency).divide(100).multiply(buy_pct) - tradeable_balance = n(s.balance.currency).divide(100 + fee).multiply(buy_pct) - expected_fee = n(trade_balance).subtract(tradeable_balance).format('0.00000000', Math.ceil) // round up as the exchange will too - if (buy_pct + fee < 100) { - size = n(tradeable_balance).divide(price).format(s.product.asset_increment ? s.product.asset_increment : '0.00000000') - } else { - size = n(trade_balance).subtract(expected_fee).divide(price).format(s.product.asset_increment ? s.product.asset_increment : '0.00000000') + msg('preparing buy order over ' + fa(size) + ' of ' + fc(tradeable_balance) + ' (' + buy_pct + '%) tradeable balance with a expected fee of ' + fc(expected_fee) + ' (' + fee + '%)') + let latest_low_sell = _.chain(trades).dropRightWhile(['type','buy']).takeRightWhile(['type','sell']).sortBy(['price']).head().value() // return lowest price + let buy_loss = latest_low_sell ? (latest_low_sell.price - Number(price)) / latest_low_sell.price * -100 : null + if (so.max_buy_loss_pct != null && buy_loss > so.max_buy_loss_pct) { + let err = new Error('\nloss protection') + err.desc = 'refusing to buy at ' + fc(price) + ', buy loss of ' + pct(buy_loss / 100) + return cb(err) } - - if ((s.product.min_size && Number(size) >= Number(s.product.min_size)) || ('min_total' in s.product && s.product.min_total && n(size).multiply(price).value() >= Number(s.product.min_total))) { - if (s.product.max_size && Number(size) > Number(s.product.max_size)) { - size = s.product.max_size + else { + if (s.buy_order && so.max_slippage_pct != null) { + let slippage = n(price).subtract(s.buy_order.orig_price).divide(s.buy_order.orig_price).multiply(100).value() + if (so.max_slippage_pct != null && slippage > so.max_slippage_pct) { + let err = new Error('\nslippage protection') + err.desc = 'refusing to buy at ' + fc(price) + ', slippage of ' + pct(slippage / 100) + return cb(err) + } } - msg('preparing buy order over ' + fa(size) + ' of ' + fc(tradeable_balance) + ' (' + buy_pct + '%) tradeable balance with a expected fee of ' + fc(expected_fee) + ' (' + fee + '%)') - let latest_low_sell = _.chain(trades).dropRightWhile(['type','buy']).takeRightWhile(['type','sell']).sortBy(['price']).head().value() // return lowest price - let buy_loss = latest_low_sell ? (latest_low_sell.price - Number(price)) / latest_low_sell.price * -100 : null - if (so.max_buy_loss_pct != null && buy_loss > so.max_buy_loss_pct) { - let err = new Error('\nloss protection') - err.desc = 'refusing to buy at ' + fc(price) + ', buy loss of ' + pct(buy_loss / 100) - return cb(err) + if (n(s.balance.currency).subtract(s.balance.currency_hold || 0).value() < n(price).multiply(size).value() && s.balance.currency_hold > 0) { + msg('buy delayed: ' + pct(n(s.balance.currency_hold || 0).divide(s.balance.currency).value()) + ' of funds (' + fc(s.balance.currency_hold) + ') on hold') + return setTimeout(function () { + if (s.last_signal === signal) { + executeSignal(signal, cb, size, true) + } + }, conf.wait_for_settlement) } else { - if (s.buy_order && so.max_slippage_pct != null) { - let slippage = n(price).subtract(s.buy_order.orig_price).divide(s.buy_order.orig_price).multiply(100).value() - if (so.max_slippage_pct != null && slippage > so.max_slippage_pct) { - let err = new Error('\nslippage protection') - err.desc = 'refusing to buy at ' + fc(price) + ', slippage of ' + pct(slippage / 100) - return cb(err) - } - } - if (n(s.balance.currency).subtract(s.balance.currency_hold || 0).value() < n(price).multiply(size).value() && s.balance.currency_hold > 0) { - msg('buy delayed: ' + pct(n(s.balance.currency_hold || 0).divide(s.balance.currency).value()) + ' of funds (' + fc(s.balance.currency_hold) + ') on hold') - return setTimeout(function () { - if (s.last_signal === signal) { - executeSignal(signal, cb, size, true) - } - }, conf.wait_for_settlement) - } - else { - pushMessage('Buying ' + s.exchange.name.toUpperCase(), 'placing buy order at ' + fc(price) + ', ' + fc(quote.bid - Number(price)) + ' under best bid\n') - doOrder() - } + pushMessage('Buying ' + s.exchange.name.toUpperCase(), 'placing buy order at ' + fc(price) + ', ' + fc(quote.bid - Number(price)) + ' under best bid\n') + doOrder() } } - else { - cb(null, null) - } } - else if (signal === 'sell') { - price = nextSellForQuote(s, quote) + else { + cb(null, null) + } + } + else if (signal === 'sell') { + price = nextSellForQuote(s, quote) - if (is_reorder) { - sell_pct = reorder_pct - } else { - sell_pct = so.sell_pct - } - size = n(s.balance.asset).multiply(sell_pct / 100).format(s.product.asset_increment ? s.product.asset_increment : '0.00000000') + if (is_reorder) { + sell_pct = reorder_pct + } else { + sell_pct = so.sell_pct + } + size = n(s.balance.asset).multiply(sell_pct / 100).format(s.product.asset_increment ? s.product.asset_increment : '0.00000000') - if ((s.product.min_size && Number(size) >= Number(s.product.min_size)) || (s.product.min_total && n(size).multiply(price).value() >= Number(s.product.min_total))) { - if (s.product.max_size && Number(size) > Number(s.product.max_size)) { - size = s.product.max_size + if ((s.product.min_size && Number(size) >= Number(s.product.min_size)) || (s.product.min_total && n(size).multiply(price).value() >= Number(s.product.min_total))) { + if (s.product.max_size && Number(size) > Number(s.product.max_size)) { + size = s.product.max_size + } + let latest_high_buy = _.chain(trades).dropRightWhile(['type','sell']).takeRightWhile(['type','buy']).sortBy(['price']).reverse().head().value() // return highest price + let sell_loss = latest_high_buy ? (Number(price) - latest_high_buy.price) / latest_high_buy.price * -100 : null + if (so.max_sell_loss_pct != null && sell_loss > so.max_sell_loss_pct) { + let err = new Error('\nloss protection') + err.desc = 'refusing to sell at ' + fc(price) + ', sell loss of ' + pct(sell_loss / 100) + return cb(err) + } + else { + if (s.sell_order && so.max_slippage_pct != null) { + let slippage = n(s.sell_order.orig_price).subtract(price).divide(price).multiply(100).value() + if (slippage > so.max_slippage_pct) { + let err = new Error('\nslippage protection') + err.desc = 'refusing to sell at ' + fc(price) + ', slippage of ' + pct(slippage / 100) + return cb(err) + } } - let latest_high_buy = _.chain(trades).dropRightWhile(['type','sell']).takeRightWhile(['type','buy']).sortBy(['price']).reverse().head().value() // return highest price - let sell_loss = latest_high_buy ? (Number(price) - latest_high_buy.price) / latest_high_buy.price * -100 : null - if (so.max_sell_loss_pct != null && sell_loss > so.max_sell_loss_pct) { - let err = new Error('\nloss protection') - err.desc = 'refusing to sell at ' + fc(price) + ', sell loss of ' + pct(sell_loss / 100) - return cb(err) + if (n(s.balance.asset).subtract(s.balance.asset_hold || 0).value() < n(size).value()) { + msg('sell delayed: ' + pct(n(s.balance.asset_hold || 0).divide(s.balance.asset).value()) + ' of funds (' + fa(s.balance.asset_hold) + ') on hold') + return setTimeout(function () { + if (s.last_signal === signal) { + executeSignal(signal, cb, size, true) + } + }, conf.wait_for_settlement) } else { - if (s.sell_order && so.max_slippage_pct != null) { - let slippage = n(s.sell_order.orig_price).subtract(price).divide(price).multiply(100).value() - if (slippage > so.max_slippage_pct) { - let err = new Error('\nslippage protection') - err.desc = 'refusing to sell at ' + fc(price) + ', slippage of ' + pct(slippage / 100) - return cb(err) - } - } - if (n(s.balance.asset).subtract(s.balance.asset_hold || 0).value() < n(size).value()) { - msg('sell delayed: ' + pct(n(s.balance.asset_hold || 0).divide(s.balance.asset).value()) + ' of funds (' + fa(s.balance.asset_hold) + ') on hold') - return setTimeout(function () { - if (s.last_signal === signal) { - executeSignal(signal, cb, size, true) - } - }, conf.wait_for_settlement) - } - else { - pushMessage('Selling ' + s.exchange.name.toUpperCase(), 'placing sell order at ' + fc(price) + ', ' + fc(Number(price) - quote.bid) + ' over best ask\n') - doOrder() - } + pushMessage('Selling ' + s.exchange.name.toUpperCase(), 'placing sell order at ' + fc(price) + ', ' + fc(Number(price) - quote.bid) + ' over best ask\n') + doOrder() } } - else { - cb(null, null) - } } - }) + else { + cb(null, null) + } + } }) function doOrder () { placeOrder(signal, { From a2db1e811ce6f29ea7699be9fe66903535eade61 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Mon, 19 Mar 2018 09:52:15 +0100 Subject: [PATCH 19/74] fix dashboard - trade_results file not found (#1512) --- commands/trade.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/commands/trade.js b/commands/trade.js index f4fc9ec212..4d85972568 100644 --- a/commands/trade.js +++ b/commands/trade.js @@ -341,7 +341,8 @@ module.exports = function (program, conf) { //ymd var today = dt.slice(2, 4) + dt.slice(5, 7) + dt.slice(8, 10) - out_target = so.filename || 'simulations/trade_result_' + so.selector.normalized +'_' + today + '_UTC.html' + let out_target_prefix = so.paper ? 'simulations/paper_result_' : 'stats/trade_result_' + out_target = so.filename || out_target_prefix + so.selector.normalized +'_' + today + '_UTC.html' fs.writeFileSync(out_target, out) //console.log('\nwrote'.grey, out_target) From 39d4bbd3a97a15e0ba6721838500c71501e36036 Mon Sep 17 00:00:00 2001 From: Ivo Pereira Date: Mon, 19 Mar 2018 09:00:18 +0000 Subject: [PATCH 20/74] Feature/strategy keltner channel (#1516) * add docker mount for forex_analytics models (#1369) * Implementation of Keltner Channels Strategy --- extensions/strategies/kc/strategy.js | 81 ++++++++++++++++++++++++++++ lib/bollinger.js | 2 +- lib/kc.js | 18 +++++++ package-lock.json | 5 ++ package.json | 1 + 5 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 extensions/strategies/kc/strategy.js create mode 100644 lib/kc.js diff --git a/extensions/strategies/kc/strategy.js b/extensions/strategies/kc/strategy.js new file mode 100644 index 0000000000..5cb15ebd15 --- /dev/null +++ b/extensions/strategies/kc/strategy.js @@ -0,0 +1,81 @@ +var z = require('zero-fill') + , n = require('numbro') + , kc = require('../../../lib/kc') + , Phenotypes = require('../../../lib/phenotype') + +module.exports = { + name: 'kc', + description: 'Buy when (Signal ≤ Lower Keltner Channel) and sell when (Signal ≥ Upper Keltner Channel).', + + getOptions: function () { + this.option('period', 'period length, same as --period_length', String, '1h') + this.option('period_length', 'period length, same as --period', String, '1h') + this.option('kc_size', 'period size', Number, 20) + this.option('kc_multiplier', 'multiplier for the average true range', Number, 1) + this.option('kc_upper_channel_pct', 'pct the current price should be near the keltner upper channel before we sell', Number, 0) + this.option('kc_lower_channel_pct', 'pct the current price should be near the keltner lower channel before we buy', Number, 0) + }, + + calculate: function (s) { + // calculate Keltner Channels + kc(s, 'kc', s.options.kc_size) + }, + + onPeriod: function (s, cb) { + if (s.period.kc) { + if (s.period.kc.upper && s.period.kc.lower) { + let upperChannel = s.period.kc.upper[s.period.kc.upper.length-1] + let lowerChannel = s.period.kc.lower[s.period.kc.lower.length-1] + if (s.period.close > (upperChannel / 100) * (100 - s.options.kc_upper_channel_pct)) { + s.signal = 'sell' + } else if (s.period.close < (lowerChannel / 100) * (100 + s.options.kc_lower_channel_pct)) { + s.signal = 'buy' + } else { + s.signal = null // hold + } + } + } + cb() + }, + + onReport: function (s) { + var cols = [] + if (s.period.kc) { + if (s.period.kc.upper && s.period.kc.lower) { + let upperChannel = s.period.kc.upper[s.period.kc.upper.length-1] + let lowerChannel = s.period.kc.lower[s.period.kc.lower.length-1] + var color = 'grey' + if (s.period.close > (upperChannel / 100) * (100 - s.options.kc_upper_channel_pct)) { + color = 'green' + } else if (s.period.close < (lowerChannel / 100) * (100 + s.options.kc_lower_channel_pct)) { + color = 'red' + } + cols.push(z(8, n(s.period.close).format('+00.0000'), ' ')[color]) + cols.push(z(8, n(lowerChannel).format('0.000000').substring(0,7), ' ').cyan) + cols.push(z(8, n(upperChannel).format('0.000000').substring(0,7), ' ').cyan) + } + } + else { + cols.push(' ') + } + return cols + }, + + phenotypes: { + // -- common + period_length: Phenotypes.RangePeriod(1, 120, 'm'), + markdown_buy_pct: Phenotypes.RangeFloat(-1, 5), + markup_sell_pct: Phenotypes.RangeFloat(-1, 5), + order_type: Phenotypes.ListOption(['maker', 'taker']), + sell_stop_pct: Phenotypes.Range0(1, 50), + buy_stop_pct: Phenotypes.Range0(1, 50), + profit_stop_enable_pct: Phenotypes.Range0(1, 20), + profit_stop_pct: Phenotypes.Range(1,20), + + // -- strategy + kc_size: Phenotypes.Range(1, 40), + kc_upper_channel_pct: Phenotypes.RangeFloat(-1, 30), + kc_lower_channel_pct: Phenotypes.RangeFloat(-1, 30) + } +} + diff --git a/lib/bollinger.js b/lib/bollinger.js index d6373bea1d..7c823f94c8 100644 --- a/lib/bollinger.js +++ b/lib/bollinger.js @@ -1,4 +1,4 @@ -// Linear Regression Curve +// Bollinger Bands var bollingerbands = require('bollinger-bands') module.exports = function bollinger (s, key, length, source_key) { if (!source_key) source_key = 'close' diff --git a/lib/kc.js b/lib/kc.js new file mode 100644 index 0000000000..6111b7ea81 --- /dev/null +++ b/lib/kc.js @@ -0,0 +1,18 @@ +// Keltner Channels +var keltnerchannel = require('keltnerchannel').kc +module.exports = function kc (s, key, length, source_key) { + if (!source_key) source_key = 'close' + if (s.lookback.length > length) { + let data = [] + for (var i=length-1; i>=0; i--) { + data.push({ + high: s.lookback[i].high, + low: s.lookback[i].low, + close: s.lookback[i].close + }) + } + let result = keltnerchannel(data, s.options.kc_size, s.options.kc_multiplier) + s.period[key] = result + } +} + diff --git a/package-lock.json b/package-lock.json index 394b5de877..e44d15208b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6976,6 +6976,11 @@ "verror": "1.10.0" } }, + "keltnerchannel": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/keltnerchannel/-/keltnerchannel-1.4.2.tgz", + "integrity": "sha512-0UiEdLg5tHHQpcLu2lueKnYpolsg9/IisbTzRwrrnOUCS/2YUPDgWmw71foGMs8Smgo/ctc7kwULG0e38MKvCQ==" + }, "keyv": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", diff --git a/package.json b/package.json index 3b233dd04d..26595c6835 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "ip": "~1.1.5", "jasmine": "^2.8.0", "jquery": "^3.2.1", + "keltnerchannel": "^1.4.2", "kraken-api": "^1.0.0", "lint-staged": "^7.0.0", "lodash": "^4.17.4", From 371a635529f39f902b20335f40b03ea7cc6c0589 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Mon, 19 Mar 2018 11:03:54 +0000 Subject: [PATCH 21/74] Exchanges: update-products 861 --- extensions/exchanges/binance/products.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index b26ddd8d7f..df938a170d 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2818,5 +2818,25 @@ "increment": "0.00001", "asset_increment": "0.01", "label": "STORM/BNB" + }, + { + "id": "QTUMBNB", + "asset": "QTUM", + "currency": "BNB", + "min_size": "0.01000000", + "max_size": "10000.00000000", + "increment": "0.00001", + "asset_increment": "0.01", + "label": "QTUM/BNB" + }, + { + "id": "QTUMUSDT", + "asset": "QTUM", + "currency": "USDT", + "min_size": "0.00100000", + "max_size": "10000000.00000000", + "increment": "0.001", + "asset_increment": "0.001", + "label": "QTUM/USDT" } ] \ No newline at end of file From c752ad7505b30941c702a6c86a3b08278bcc1187 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Tue, 20 Mar 2018 11:04:51 +0000 Subject: [PATCH 22/74] Exchanges: update-products 863 --- extensions/exchanges/bittrex/products.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index 1a50cb85d0..4c77fb2624 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -2158,5 +2158,13 @@ "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LRC" + }, + { + "asset": "TUSD", + "currency": "ETH", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "ETH/TUSD" } ] \ No newline at end of file From fe672aeda877f6e88f6b545723ec6f5d382cfddc Mon Sep 17 00:00:00 2001 From: defkev Date: Wed, 21 Mar 2018 09:06:31 +0100 Subject: [PATCH 23/74] Fix: sim/exchange dynamic fees exception (#1491) * Fix: sim/exchange dynamic fees exception setFees (if supported by the exchange) instead of erroring out * Remove redundant check * Set fees in paper and sim * Revert setFees to paper only --- extensions/exchanges/sim/exchange.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/extensions/exchanges/sim/exchange.js b/extensions/exchanges/sim/exchange.js index c0bdb9b883..8ea84ba026 100644 --- a/extensions/exchanges/sim/exchange.js +++ b/extensions/exchanges/sim/exchange.js @@ -161,6 +161,12 @@ module.exports = function sim (conf, s) { }, latency) }, + setFees: function(opts) { + if (so.mode === 'paper') { + return real_exchange.setFees(opts) + } + }, + getCursor: real_exchange.getCursor, getTime: function() { From d75267eb0f3096476a4b3e689e030ef9fedcc7cd Mon Sep 17 00:00:00 2001 From: Chris McGee Date: Wed, 21 Mar 2018 04:14:36 -0400 Subject: [PATCH 24/74] WIP moving formatting to own file (#1508) --- commands/balance.js | 5 +-- lib/engine.js | 82 ++++++++++++----------------------------- lib/format.js | 34 +++++++++++++++++ package.json | 2 +- test/lib/engine.test.js | 62 +++++++++++++++---------------- test/lib/format.test.js | 26 +++++++++++++ 6 files changed, 117 insertions(+), 94 deletions(-) create mode 100644 lib/format.js create mode 100644 test/lib/format.test.js diff --git a/commands/balance.js b/commands/balance.js index 91b85a4a54..8ec509b261 100644 --- a/commands/balance.js +++ b/commands/balance.js @@ -3,8 +3,8 @@ var minimist = require('minimist') // eslint-disable-next-line no-unused-vars , colors = require('colors') , moment = require('moment') - , engineFactory = require('../lib/engine') , objectifySelector = require('../lib/objectify-selector') + , { formatCurrency } = require('../lib/format') module.exports = function (program, conf) { program @@ -32,14 +32,13 @@ module.exports = function (program, conf) { so.selector = s.selector so.debug = cmd.debug so.mode = 'live' - var engine = engineFactory(s, conf) function balance () { s.exchange.getBalance(s, function (err, balance) { if (err) throw err s.exchange.getQuote(s, function (err, quote) { if (err) throw err - var bal = moment().format('YYYY-MM-DD HH:mm:ss').grey + ' ' + engine.formatCurrency(quote.ask, true, true, false) + ' ' + (s.product_id).grey + '\n' + var bal = moment().format('YYYY-MM-DD HH:mm:ss').grey + ' ' + formatCurrency(quote.ask, s.currency, true, true, false) + ' ' + (s.product_id).grey + '\n' bal += moment().format('YYYY-MM-DD HH:mm:ss').grey + ' Asset: '.grey + balance.asset.white + ' Available: '.grey + n(balance.asset).subtract(balance.asset_hold).value().toString().yellow + '\n' bal += moment().format('YYYY-MM-DD HH:mm:ss').grey + ' Asset Value: '.grey + n(balance.asset).multiply(quote.ask).value().toString().white + '\n' bal += moment().format('YYYY-MM-DD HH:mm:ss').grey + ' Currency: '.grey + balance.currency.white + ' Available: '.grey + n(balance.currency).subtract(balance.currency_hold).value().toString().yellow + '\n' diff --git a/lib/engine.js b/lib/engine.js index eca640eb05..f969e4770f 100644 --- a/lib/engine.js +++ b/lib/engine.js @@ -12,6 +12,7 @@ let tb = require('timebucket') , rsi = require('./rsi') , async = require('async') , lolex = require('lolex') + , { formatAsset, formatPercent, formatCurrency } = require('./format') let clock let nice_errors = new RegExp(/(slippage protection|loss protection)/) @@ -122,43 +123,10 @@ module.exports = function (s, conf) { } } - function fa (amt) { - return n(amt).format('0.00000000') + ' ' + s.asset - } - - function isFiat () { + function isFiat() { return !s.currency.match(/^BTC|ETH|XMR|USDT$/) } - let max_fc_width = 0 - function fc (amt, omit_currency, color_trick, do_pad) { - let str - let fstr - amt > 999 ? fstr = '0.00' : - amt > 99 ? fstr = '0.000' : - amt > 9 ? fstr = '0.0000' : - amt > 0.9 ? fstr = '0.00000' : - amt > 0.09 ? fstr = '0.000000' : - amt > 0.009 ? fstr = '0.0000000' : - fstr = '0.00000000' - str = n(amt).format(fstr) - if (do_pad) { - max_fc_width = Math.max(max_fc_width, str.length) - str = ' '.repeat(max_fc_width - str.length) + str - } - if (color_trick) { - str = str - .replace(/^(.*\.)(.*?)(0*)$/, function (_, m1, m2, m3) { - return m1.cyan + m2.yellow + m3.grey - }) - } - return str + (omit_currency ? '' : ' ' + s.currency) - } - - function pct (ratio) { - return (ratio >= 0 ? '+' : '') + n(ratio).format('0.00%') - } - function initBuffer (trade) { let d = tb(trade.time).resize(so.period_length) let de = tb(trade.time).resize(so.period_length).add(1) @@ -181,6 +149,7 @@ module.exports = function (s, conf) { else return n(quote.bid).subtract(n(quote.bid).multiply(s.options.markdown_buy_pct / 100)).format(s.product.increment, Math.floor) } + function nextSellForQuote(s, quote) { if (s.next_sell_price) return n(s.next_sell_price).format(s.product.increment, Math.ceil) @@ -216,7 +185,7 @@ module.exports = function (s, conf) { if (last_trade.type === 'buy') { if (do_sell_stop && s.sell_stop && s.period.close < s.sell_stop) { stop_signal = 'sell' - console.log(('\nsell stop triggered at ' + pct(s.last_trade_worth) + ' trade worth\n').red) + console.log(('\nsell stop triggered at ' + formatPercent(s.last_trade_worth) + ' trade worth\n').red) } else if (so.profit_stop_enable_pct && s.last_trade_worth >= (so.profit_stop_enable_pct / 100)) { s.profit_stop_high = Math.max(s.profit_stop_high || s.period.close, s.period.close) @@ -224,14 +193,13 @@ module.exports = function (s, conf) { } if (s.profit_stop && s.period.close < s.profit_stop && s.last_trade_worth > 0) { stop_signal = 'sell' - console.log(('\nprofit stop triggered at ' + pct(s.last_trade_worth) + ' trade worth\n').green) + console.log(('\nprofit stop triggered at ' + formatPercent(s.last_trade_worth) + ' trade worth\n').green) } - } else { if (s.buy_stop && s.period.close > s.buy_stop) { stop_signal = 'buy' - console.log(('\nbuy stop triggered at ' + pct(s.last_trade_worth) + ' trade worth\n').red) + console.log(('\nbuy stop triggered at ' + formatPercent(s.last_trade_worth) + ' trade worth\n').red) } } } @@ -308,7 +276,7 @@ module.exports = function (s, conf) { err.order = api_order return cb(err) } - msg(type + ' order placed at ' + fc(order.price)) + msg(type + ' order placed at ' + formatCurrency(order.price, s.currency)) order.order_id = api_order.id if (!order.time) { order.orig_time = new Date(api_order.created_at).getTime() @@ -316,7 +284,7 @@ module.exports = function (s, conf) { order.time = new Date(api_order.created_at).getTime() order.local_time = now() order.status = api_order.status - //console.log('\ncreated ' + order.status + ' ' + type + ' order: ' + fa(order.size) + ' at ' + fc(order.price) + ' (total ' + fc(n(order.price).multiply(order.size)) + ')\n') + //console.log('\ncreated ' + order.status + ' ' + type + ' order: ' + formatAsset(order.size) + ' at ' + formatCurrency(order.price) + ' (total ' + formatCurrency(n(order.price).multiply(order.size)) + ')\n') setTimeout(function() { checkOrder(order, type, cb) }, so.order_poll_time) }) @@ -431,12 +399,12 @@ module.exports = function (s, conf) { if (s.product.max_size && Number(size) > Number(s.product.max_size)) { size = s.product.max_size } - msg('preparing buy order over ' + fa(size) + ' of ' + fc(tradeable_balance) + ' (' + buy_pct + '%) tradeable balance with a expected fee of ' + fc(expected_fee) + ' (' + fee + '%)') + msg('preparing buy order over ' + formatAsset(size, s.asset) + ' of ' + formatCurrency(tradeable_balance, s.currency) + ' (' + buy_pct + '%) tradeable balance with a expected fee of ' + formatCurrency(expected_fee, s.currency) + ' (' + fee + '%)') let latest_low_sell = _.chain(trades).dropRightWhile(['type','buy']).takeRightWhile(['type','sell']).sortBy(['price']).head().value() // return lowest price let buy_loss = latest_low_sell ? (latest_low_sell.price - Number(price)) / latest_low_sell.price * -100 : null if (so.max_buy_loss_pct != null && buy_loss > so.max_buy_loss_pct) { let err = new Error('\nloss protection') - err.desc = 'refusing to buy at ' + fc(price) + ', buy loss of ' + pct(buy_loss / 100) + err.desc = 'refusing to buy at ' + formatCurrency(price, s.currency) + ', buy loss of ' + formatPercent(buy_loss / 100) return cb(err) } else { @@ -444,12 +412,12 @@ module.exports = function (s, conf) { let slippage = n(price).subtract(s.buy_order.orig_price).divide(s.buy_order.orig_price).multiply(100).value() if (so.max_slippage_pct != null && slippage > so.max_slippage_pct) { let err = new Error('\nslippage protection') - err.desc = 'refusing to buy at ' + fc(price) + ', slippage of ' + pct(slippage / 100) + err.desc = 'refusing to buy at ' + formatCurrency(price, s.currency) + ', slippage of ' + formatPercent(slippage / 100) return cb(err) } } if (n(s.balance.currency).subtract(s.balance.currency_hold || 0).value() < n(price).multiply(size).value() && s.balance.currency_hold > 0) { - msg('buy delayed: ' + pct(n(s.balance.currency_hold || 0).divide(s.balance.currency).value()) + ' of funds (' + fc(s.balance.currency_hold) + ') on hold') + msg('buy delayed: ' + formatPercent(n(s.balance.currency_hold || 0).divide(s.balance.currency).value()) + ' of funds (' + formatCurrency(s.balance.currency_hold, s.currency) + ') on hold') return setTimeout(function () { if (s.last_signal === signal) { executeSignal(signal, cb, size, true) @@ -457,7 +425,7 @@ module.exports = function (s, conf) { }, conf.wait_for_settlement) } else { - pushMessage('Buying ' + s.exchange.name.toUpperCase(), 'placing buy order at ' + fc(price) + ', ' + fc(quote.bid - Number(price)) + ' under best bid\n') + pushMessage('Buying ' + s.exchange.name.toUpperCase(), 'placing buy order at ' + formatCurrency(price, s.currency) + ', ' + formatCurrency(quote.bid - Number(price), s.currency) + ' under best bid\n') doOrder() } } @@ -484,7 +452,7 @@ module.exports = function (s, conf) { let sell_loss = latest_high_buy ? (Number(price) - latest_high_buy.price) / latest_high_buy.price * -100 : null if (so.max_sell_loss_pct != null && sell_loss > so.max_sell_loss_pct) { let err = new Error('\nloss protection') - err.desc = 'refusing to sell at ' + fc(price) + ', sell loss of ' + pct(sell_loss / 100) + err.desc = 'refusing to sell at ' + formatCurrency(price, s.currency) + ', sell loss of ' + formatPercent(sell_loss / 100) return cb(err) } else { @@ -492,12 +460,12 @@ module.exports = function (s, conf) { let slippage = n(s.sell_order.orig_price).subtract(price).divide(price).multiply(100).value() if (slippage > so.max_slippage_pct) { let err = new Error('\nslippage protection') - err.desc = 'refusing to sell at ' + fc(price) + ', slippage of ' + pct(slippage / 100) + err.desc = 'refusing to sell at ' + formatCurrency(price, s.currency) + ', slippage of ' + formatPercent(slippage / 100) return cb(err) } } if (n(s.balance.asset).subtract(s.balance.asset_hold || 0).value() < n(size).value()) { - msg('sell delayed: ' + pct(n(s.balance.asset_hold || 0).divide(s.balance.asset).value()) + ' of funds (' + fa(s.balance.asset_hold) + ') on hold') + msg('sell delayed: ' + formatPercent(n(s.balance.asset_hold || 0).divide(s.balance.asset).value()) + ' of funds (' + formatAsset(s.balance.asset_hold, s.asset) + ') on hold') return setTimeout(function () { if (s.last_signal === signal) { executeSignal(signal, cb, size, true) @@ -505,7 +473,7 @@ module.exports = function (s, conf) { }, conf.wait_for_settlement) } else { - pushMessage('Selling ' + s.exchange.name.toUpperCase(), 'placing sell order at ' + fc(price) + ', ' + fc(Number(price) - quote.bid) + ' over best ask\n') + pushMessage('Selling ' + s.exchange.name.toUpperCase(), 'placing sell order at ' + formatCurrency(price, s.currency) + ', ' + formatCurrency(Number(price) - quote.bid, s.currency) + ' over best ask\n') doOrder() } } @@ -598,7 +566,7 @@ module.exports = function (s, conf) { } s.my_trades.push(my_trade) if (so.stats) { - let order_complete = '\nbuy order completed at ' + moment(trade.time).format('YYYY-MM-DD HH:mm:ss') + ':\n\n' + fa(my_trade.size) + ' at ' + fc(my_trade.price) + '\ntotal ' + fc(my_trade.size * my_trade.price) + '\n' + n(my_trade.slippage).format('0.0000%') + ' slippage (orig. price ' + fc(s.buy_order.orig_price) + ')\nexecution: ' + moment.duration(my_trade.execution_time).humanize() + '\n' + let order_complete = '\nbuy order completed at ' + moment(trade.time).format('YYYY-MM-DD HH:mm:ss') + ':\n\n' + formatAsset(my_trade.size, s.asset) + ' at ' + formatCurrency(my_trade.price, s.currency) + '\ntotal ' + formatCurrency(my_trade.size * my_trade.price, s.currency) + '\n' + n(my_trade.slippage).format('0.0000%') + ' slippage (orig. price ' + formatCurrency(s.buy_order.orig_price, s.currency) + ')\nexecution: ' + moment.duration(my_trade.execution_time).humanize() + '\n' console.log((order_complete).cyan) pushMessage('Buy ' + s.exchange.name.toUpperCase(), order_complete) } @@ -646,7 +614,7 @@ module.exports = function (s, conf) { } s.my_trades.push(my_trade) if (so.stats) { - let order_complete = '\nsell order completed at ' + moment(trade.time).format('YYYY-MM-DD HH:mm:ss') + ':\n\n' + fa(my_trade.size) + ' at ' + fc(my_trade.price) + '\ntotal ' + fc(my_trade.size * my_trade.price) + '\n' + n(my_trade.slippage).format('0.0000%') + ' slippage (orig. price ' + fc(s.sell_order.orig_price) + ')\nexecution: ' + moment.duration(my_trade.execution_time).humanize() + '\n' + let order_complete = '\nsell order completed at ' + moment(trade.time).format('YYYY-MM-DD HH:mm:ss') + ':\n\n' + formatAsset(my_trade.size, s.asset) + ' at ' + formatCurrency(my_trade.price, s.currency) + '\ntotal ' + formatCurrency(my_trade.size * my_trade.price, s.currency) + '\n' + n(my_trade.slippage).format('0.0000%') + ' slippage (orig. price ' + formatCurrency(s.sell_order.orig_price, s.currency) + ')\nexecution: ' + moment.duration(my_trade.execution_time).humanize() + '\n' console.log((order_complete).cyan) pushMessage('Sell ' + s.exchange.name.toUpperCase(), order_complete) } @@ -690,10 +658,10 @@ module.exports = function (s, conf) { readline.clearLine(process.stdout) readline.cursorTo(process.stdout, 0) process.stdout.write(moment(is_progress ? s.period.latest_trade_time : tb(s.period.time).resize(so.period_length).add(1).toMilliseconds()).format('YYYY-MM-DD HH:mm:ss')[is_progress && !blink_off ? 'bgBlue' : 'grey']) - process.stdout.write(' ' + fc(s.period.close, true, true, true) + ' ' + s.product_id.grey) + process.stdout.write(' ' + formatCurrency(s.period.close, s.currency, true, true, true) + ' ' + s.product_id.grey) if (s.lookback[0]) { let diff = (s.period.close - s.lookback[0].close) / s.lookback[0].close - process.stdout.write(z(8, pct(diff), ' ')[diff >= 0 ? 'green' : 'red']) + process.stdout.write(z(8, formatPercent(diff), ' ')[diff >= 0 ? 'green' : 'red']) } else { process.stdout.write(z(9, '', ' ')) @@ -747,7 +715,7 @@ module.exports = function (s, conf) { process.stdout.write(z(9, s.signal || '', ' ')[s.signal ? s.signal === 'buy' ? 'green' : 'red' : 'grey']) } else if (s.last_trade_worth && !s.buy_order && !s.sell_order) { - process.stdout.write(z(8, pct(s.last_trade_worth), ' ')[s.last_trade_worth > 0 ? 'green' : 'red']) + process.stdout.write(z(8, formatPercent(s.last_trade_worth), ' ')[s.last_trade_worth > 0 ? 'green' : 'red']) } else { process.stdout.write(z(9, '', ' ')) @@ -763,10 +731,10 @@ module.exports = function (s, conf) { process.stdout.write(z(currency_col_width, currency_col, ' ').yellow) let consolidated = n(s.balance.currency).add(n(s.period.close).multiply(s.balance.asset)).value() let profit = (consolidated - orig_capital) / orig_capital - process.stdout.write(z(8, pct(profit), ' ')[profit >= 0 ? 'green' : 'red']) + process.stdout.write(z(8, formatPercent(profit), ' ')[profit >= 0 ? 'green' : 'red']) let buy_hold = s.period.close * (orig_capital / orig_price) let over_buy_hold_pct = (consolidated - buy_hold) / buy_hold - process.stdout.write(z(8, pct(over_buy_hold_pct), ' ')[over_buy_hold_pct >= 0 ? 'green' : 'red']) + process.stdout.write(z(8, formatPercent(over_buy_hold_pct), ' ')[over_buy_hold_pct >= 0 ? 'green' : 'red']) } if (!is_progress) { process.stdout.write('\n') @@ -1021,8 +989,6 @@ module.exports = function (s, conf) { executeSignal: executeSignal, writeReport: writeReport, syncBalance: syncBalance, - formatCurrency: fc, - formatAsset: fa } } diff --git a/lib/format.js b/lib/format.js new file mode 100644 index 0000000000..f07613ae99 --- /dev/null +++ b/lib/format.js @@ -0,0 +1,34 @@ +let n = require('numbro') + +let max_fc_width = 0 +module.exports = { + formatAsset: function formatAsset (amt, asset) { + return n(amt).format('0.00000000') + ' ' + asset + }, + formatPercent: function formatPercent (ratio) { + return (ratio >= 0 ? '+' : '') + n(ratio).format('0.00%') + }, + formatCurrency: function formatCurrency (amt, currency, omit_currency, color_trick, do_pad) { + let str + let fstr + amt > 999 ? fstr = '0.00' : + amt > 99 ? fstr = '0.000' : + amt > 9 ? fstr = '0.0000' : + amt > 0.9 ? fstr = '0.00000' : + amt > 0.09 ? fstr = '0.000000' : + amt > 0.009 ? fstr = '0.0000000' : + fstr = '0.00000000' + str = n(amt).format(fstr) + if (do_pad) { + max_fc_width = Math.max(max_fc_width, str.length) + str = ' '.repeat(max_fc_width - str.length) + str + } + if (color_trick) { + str = str + .replace(/^(.*\.)(.*?)(0*)$/, function (_, m1, m2, m3) { + return m1.cyan + m2.yellow + m3.grey + }) + } + return str + (omit_currency ? '' : ' ' + currency) + } +} \ No newline at end of file diff --git a/package.json b/package.json index 26595c6835..d3bba64d4c 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "lint": "eslint **/*.js", "lint-fix": "eslint **/*.js --fix", "precommit": "lint-staged", - "test": "jasmine test/_specs/**/**.test.js", + "test": "jasmine test/**/**.test.js", "test-one": "jasmine $PATH_TO_TEST", "postinstall": "node post_install.js" }, diff --git a/test/lib/engine.test.js b/test/lib/engine.test.js index 5e8ececd06..c695152b26 100644 --- a/test/lib/engine.test.js +++ b/test/lib/engine.test.js @@ -1,3 +1,5 @@ +var EventEmitter = require('events') + describe('Engine', function() { describe('executeSignal', function() { describe('when maker in live mode', function(){ @@ -10,12 +12,12 @@ describe('Engine', function() { var buy_max_amt = 0.25 var order_type = 'maker' var held_asset = 0 - var buy_spy = jasmine.createSpy() + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '2.77500000' + var expected = '2.77500277' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) @@ -27,12 +29,12 @@ describe('Engine', function() { var buy_max_amt = 0.25 var order_type = 'maker' var held_asset = 0.75 - var buy_spy = jasmine.createSpy() + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '1.85925000' + var expected = '1.85925185' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) @@ -44,7 +46,7 @@ describe('Engine', function() { var buy_max_amt = 0.25 var order_type = 'maker' var held_asset = 2.0 - var buy_spy = jasmine.createSpy() + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) @@ -60,16 +62,18 @@ describe('Engine', function() { var buy_pct = 50 var buy_max_amt = undefined var order_type = 'maker' - var held_asset = 0 - var buy_spy = jasmine.createSpy() + var held_asset = 0 + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '5.55000000' + var expected = '5.55000555' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) + // no longer taking held assets into account with no buy_max + /* it('and held assets should use adjusted buy_pct', function(){ // arrange var signal_type = 'buy' @@ -77,8 +81,8 @@ describe('Engine', function() { var buy_pct = 50 var buy_max_amt = undefined var order_type = 'maker' - var held_asset = 0.5 - var buy_spy = jasmine.createSpy() + var held_asset = 0.5 + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) @@ -94,14 +98,15 @@ describe('Engine', function() { var buy_pct = 50 var buy_max_amt = undefined var order_type = 'maker' - var held_asset = 5.25 - var buy_spy = jasmine.createSpy() + var held_asset = 10.25 + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert expect(buy_spy).not.toHaveBeenCalled() }) + */ }) }) @@ -115,12 +120,12 @@ describe('Engine', function() { var buy_max_amt = 0.25 var order_type = 'taker' var held_asset = 0 - var buy_spy = jasmine.createSpy() + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '2.77222222' + var expected = '2.77223331' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) @@ -133,12 +138,12 @@ describe('Engine', function() { var buy_max_amt = 0.25 var order_type = 'taker' var held_asset = 0.75 - var buy_spy = jasmine.createSpy() + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '1.85738888' + var expected = '1.85739631' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) @@ -151,7 +156,7 @@ describe('Engine', function() { var buy_max_amt = 0.25 var order_type = 'taker' var held_asset = 2.0 - var buy_spy = jasmine.createSpy() + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) @@ -168,15 +173,16 @@ describe('Engine', function() { var buy_max_amt = undefined var order_type = 'taker' var held_asset = 0 - var buy_spy = jasmine.createSpy() + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '5.54444444' + var expected = '5.54446662' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) + /* it('and held assets should use adjusted buy_pct', function(){ // arrange var signal_type = 'buy' @@ -185,7 +191,7 @@ describe('Engine', function() { var buy_max_amt = undefined var order_type = 'taker' var held_asset = 0.5 - var buy_spy = jasmine.createSpy() + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) @@ -202,13 +208,14 @@ describe('Engine', function() { var buy_max_amt = undefined var order_type = 'taker' var held_asset = 5.25 - var buy_spy = jasmine.createSpy() + var buy_spy = jasmine.createSpy('buy') var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert expect(buy_spy).not.toHaveBeenCalled() }) + */ }) }) }) @@ -224,13 +231,7 @@ function createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_as var fake_project = 'test_product' var fake_bid = 0.10 var fake_ask = 0.11 - var fake_balance = { currency: currency_amount, asset:held_asset} - - var fakes = { - get: function() { }, - set: function() { }, - clear: function() { } - } + var fake_balance = { currency: currency_amount, asset: held_asset } var fake_product = { 'asset': fake_asset, @@ -243,6 +244,7 @@ function createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_as var fake_return = { 'conf': { + eventBus: new EventEmitter(), output: { api: {} } @@ -265,10 +267,6 @@ function createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_as mock(exchange_path, fake_return['exchanges.test_exchange']) mock('./notify', fake_return['lib.notify']) - spyOn(fakes,'get').and.callFake(function(param){ - return fake_return[param] - }) - var input = { options: { selector: { diff --git a/test/lib/format.test.js b/test/lib/format.test.js new file mode 100644 index 0000000000..d2c4350c2c --- /dev/null +++ b/test/lib/format.test.js @@ -0,0 +1,26 @@ +let { formatAsset, formatCurrency, formatPercent } = require('../../lib/format') + +describe('Format', () => { + describe('formatAsset', () => { + it('formats assets as expected', () => { + expect(formatAsset(5, 'USD')).toBe('5.00000000 USD') + }) + }) + describe('formatCurrency', () => { + it('formats currency as expected', () => { + expect(formatCurrency(1000, 'USD')).toBe('1000.00 USD') + expect(formatCurrency(100, 'THING')).toBe('100.000 THING') + expect(formatCurrency(1, 'GBP')).toBe('1.00000 GBP') + expect(formatCurrency(0.008, 'XRP')).toBe('0.00800000 XRP') + expect(formatCurrency(10, 'USD', true)).toBe('10.0000') + expect(formatCurrency(10, 'USD', false, false, true)).toBe('10.0000 USD') + }) + }) + describe('formatPercent', () => { + it('formats percentages as expected', () => { + expect(formatPercent(0.1)).toBe('+10.00%') + expect(formatPercent(-0.03)).toBe('-3.00%') + expect(formatPercent(0.0005)).toBe('+0.05%') + }) + }) +}) \ No newline at end of file From fed88d1868994d503a8cce9d339e6c557ab37808 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 21 Mar 2018 11:05:07 +0000 Subject: [PATCH 25/74] Exchanges: update-products 869 --- extensions/exchanges/binance/products.json | 30 ++++++++++++++++++++++ extensions/exchanges/bittrex/products.json | 16 ++++++++++++ 2 files changed, 46 insertions(+) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index df938a170d..2da5073cae 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2838,5 +2838,35 @@ "increment": "0.001", "asset_increment": "0.001", "label": "QTUM/USDT" + }, + { + "id": "XEMBTC", + "asset": "XEM", + "currency": "BTC", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "XEM/BTC" + }, + { + "id": "XEMETH", + "asset": "XEM", + "currency": "ETH", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "XEM/ETH" + }, + { + "id": "XEMBNB", + "asset": "XEM", + "currency": "BNB", + "min_size": "0.01000000", + "max_size": "10000.00000000", + "increment": "0.00001", + "asset_increment": "0.01", + "label": "XEM/BNB" } ] \ No newline at end of file diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index 4c77fb2624..40e6b5a51a 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -2166,5 +2166,21 @@ "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TUSD" + }, + { + "asset": "UP", + "currency": "BTC", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "BTC/UP" + }, + { + "asset": "UP", + "currency": "ETH", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "ETH/UP" } ] \ No newline at end of file From a547c639ccd68d0f157f1cd2adbdaa55afc6c9f1 Mon Sep 17 00:00:00 2001 From: brucetus <31704711+brucetus@users.noreply.github.com> Date: Thu, 22 Mar 2018 02:22:59 -0700 Subject: [PATCH 26/74] Create highest.js (#1520) Highest finds the highest price (AKA highest high) in the past # of periods given by key. --- lib/highest.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 lib/highest.js diff --git a/lib/highest.js b/lib/highest.js new file mode 100644 index 0000000000..30e483d8da --- /dev/null +++ b/lib/highest.js @@ -0,0 +1,7 @@ +module.exports = function highest(s, key, length) { + if (s.lookback.length < length) { + s.period[key] = 0 + } else { + s.period[key] = s.period[key] = Math.max(s.period.high, ...s.lookback.slice(0, length - 1).map(period => period.high)) + } +} From 14d61f569017b3403ee64571e17bc57bc5335c79 Mon Sep 17 00:00:00 2001 From: brucetus <31704711+brucetus@users.noreply.github.com> Date: Thu, 22 Mar 2018 02:23:53 -0700 Subject: [PATCH 27/74] Create lowest.js (#1518) Lowest find the lowest price (AKA lowest low) in the last # of periods given by key. --- lib/lowest.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 lib/lowest.js diff --git a/lib/lowest.js b/lib/lowest.js new file mode 100644 index 0000000000..267e38d75e --- /dev/null +++ b/lib/lowest.js @@ -0,0 +1,7 @@ +module.exports = function lowest(s, key, length) { + if (s.lookback.length < length) { + s.period[key] = 0 + } else { + s.period[key] = s.period[key] = Math.min(s.period.low, ...s.lookback.slice(0, length - 1).map(period => period.low)) + } +} From 30febfdd931a24e3ac98e6459195014e9b205e80 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Thu, 22 Mar 2018 11:06:41 +0000 Subject: [PATCH 28/74] Exchanges: update-products 876 --- extensions/exchanges/bitfinex/products.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index f07e555867..29fd58b338 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -402,7 +402,7 @@ { "asset": "DAT", "currency": "USD", - "min_size": "144.0", + "min_size": "146.0", "max_size": "250000.0", "increment": "0.0000001", "label": "DAT/USD" @@ -410,7 +410,7 @@ { "asset": "DAT", "currency": "BTC", - "min_size": "144.0", + "min_size": "146.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/BTC" @@ -418,7 +418,7 @@ { "asset": "DAT", "currency": "ETH", - "min_size": "144.0", + "min_size": "146.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/ETH" @@ -650,7 +650,7 @@ { "asset": "SPK", "currency": "USD", - "min_size": "68.0", + "min_size": "76.0", "max_size": "200000.0", "increment": "0.000001", "label": "SPK/USD" @@ -658,7 +658,7 @@ { "asset": "SPK", "currency": "BTC", - "min_size": "68.0", + "min_size": "76.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SPK/BTC" @@ -666,7 +666,7 @@ { "asset": "SPK", "currency": "ETH", - "min_size": "68.0", + "min_size": "76.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SPK/ETH" From 3045faad9ac240df642f1b670224b8de9a74e8f4 Mon Sep 17 00:00:00 2001 From: brucetus <31704711+brucetus@users.noreply.github.com> Date: Thu, 22 Mar 2018 10:21:15 -0700 Subject: [PATCH 29/74] Create ichimoku (#1519) * Create ichimoku Basic ichimoku cloud trading strategy. It buys when the price is above the cloud and sells when the price is inside or below the cloud. * Rename ichimoku to ichimoku.js --- extensions/strategies/ichimoku.js | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 extensions/strategies/ichimoku.js diff --git a/extensions/strategies/ichimoku.js b/extensions/strategies/ichimoku.js new file mode 100644 index 0000000000..d1af3e61ab --- /dev/null +++ b/extensions/strategies/ichimoku.js @@ -0,0 +1,59 @@ +var z = require('zero-fill'), +n = require('numbro'), +highest = require('../../../lib/highest'), +lowest = require('../../../lib/lowest') + +module.exports = { + name: 'ichimoku', + description: 'Ichimoku Cloud', + + getOptions: function () { + this.option('period_length', 'period length', String, '4h') + this.option('min_periods', 'min periods', Number, 56) + this.option('tenkan', 'Tenkan (conversion) line', Number, 9) + this.option('kijun','Kijun (base) line', Number, 26) + this.option('senkou_b','Senkou (leading) span B', Number, 52) + this.option('chikou','Chikou (lagging) span)', Number, 26) + }, + + calculate: function (s) { + }, + + onPeriod: function (s, cb) { + if (s.lookback[s.options.min_periods]) { + highest(s, 'tenkan_high', s.options.tenkan) + lowest(s, 'tenkan_low', s.options.tenkan) + highest(s, 'kijun_high', s.options.kijun) + lowest(s, 'kijun_low', s.options.kijun) + highest(s, 'senkou_high', s.options.senkou_b) + lowest(s, 'senkou_low', s.options.senkou_b) + + s.period.tenkan = ((s.period.tenkan_high + s.period.tenkan_low) / 2) + s.period.kijun = ((s.period.kijun_high + s.period.kijun_low) / 2) + s.period.senkou_a = ((s.period.tenkan + s.period.kijun) / 2) + s.period.senkou_b = ((s.period.senkou_high + s.period.senkou_low) / 2) + s.period.chikou = s.lookback[s.options.chikou - 1].close + + if (s.period.close > Math.max(s.period.senkou_a, s.period.senkou_b)) { + if (s.trend !== 'up') { + s.acted_on_trend = false + } + s.trend = 'up' + s.signal = !s.acted_on_trend ? 'buy' : null + } + if (s.period.close < Math.max(s.period.senkou_a, s.period.senkou_b)) { + if (s.trend !== 'down') { + s.acted_on_trend = false + } + s.trend = 'down' + s.signal = !s.acted_on_trend ? 'sell' : null + } + } + cb() + }, + + onReport: function (s) { + var cols = [] + return cols + } +} From 291cf7ce65ea9864cdb557a3438f8754628a472d Mon Sep 17 00:00:00 2001 From: brucetus <31704711+brucetus@users.noreply.github.com> Date: Thu, 22 Mar 2018 13:12:22 -0700 Subject: [PATCH 30/74] Delete ichimoku.js (#1522) --- extensions/strategies/ichimoku.js | 59 ------------------------------- 1 file changed, 59 deletions(-) delete mode 100644 extensions/strategies/ichimoku.js diff --git a/extensions/strategies/ichimoku.js b/extensions/strategies/ichimoku.js deleted file mode 100644 index d1af3e61ab..0000000000 --- a/extensions/strategies/ichimoku.js +++ /dev/null @@ -1,59 +0,0 @@ -var z = require('zero-fill'), -n = require('numbro'), -highest = require('../../../lib/highest'), -lowest = require('../../../lib/lowest') - -module.exports = { - name: 'ichimoku', - description: 'Ichimoku Cloud', - - getOptions: function () { - this.option('period_length', 'period length', String, '4h') - this.option('min_periods', 'min periods', Number, 56) - this.option('tenkan', 'Tenkan (conversion) line', Number, 9) - this.option('kijun','Kijun (base) line', Number, 26) - this.option('senkou_b','Senkou (leading) span B', Number, 52) - this.option('chikou','Chikou (lagging) span)', Number, 26) - }, - - calculate: function (s) { - }, - - onPeriod: function (s, cb) { - if (s.lookback[s.options.min_periods]) { - highest(s, 'tenkan_high', s.options.tenkan) - lowest(s, 'tenkan_low', s.options.tenkan) - highest(s, 'kijun_high', s.options.kijun) - lowest(s, 'kijun_low', s.options.kijun) - highest(s, 'senkou_high', s.options.senkou_b) - lowest(s, 'senkou_low', s.options.senkou_b) - - s.period.tenkan = ((s.period.tenkan_high + s.period.tenkan_low) / 2) - s.period.kijun = ((s.period.kijun_high + s.period.kijun_low) / 2) - s.period.senkou_a = ((s.period.tenkan + s.period.kijun) / 2) - s.period.senkou_b = ((s.period.senkou_high + s.period.senkou_low) / 2) - s.period.chikou = s.lookback[s.options.chikou - 1].close - - if (s.period.close > Math.max(s.period.senkou_a, s.period.senkou_b)) { - if (s.trend !== 'up') { - s.acted_on_trend = false - } - s.trend = 'up' - s.signal = !s.acted_on_trend ? 'buy' : null - } - if (s.period.close < Math.max(s.period.senkou_a, s.period.senkou_b)) { - if (s.trend !== 'down') { - s.acted_on_trend = false - } - s.trend = 'down' - s.signal = !s.acted_on_trend ? 'sell' : null - } - } - cb() - }, - - onReport: function (s) { - var cols = [] - return cols - } -} From 581525d9efe0f51065d327678a1cc71b936e3a61 Mon Sep 17 00:00:00 2001 From: brucetus <31704711+brucetus@users.noreply.github.com> Date: Thu, 22 Mar 2018 13:15:21 -0700 Subject: [PATCH 31/74] Create ichimoku folder (#1521) * Create ichimoku folder Oops * Update min_periods Made clear what min_periods requires --- extensions/strategies/ichimoku/strategy.js | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 extensions/strategies/ichimoku/strategy.js diff --git a/extensions/strategies/ichimoku/strategy.js b/extensions/strategies/ichimoku/strategy.js new file mode 100644 index 0000000000..3ea7f0a8c9 --- /dev/null +++ b/extensions/strategies/ichimoku/strategy.js @@ -0,0 +1,59 @@ +var z = require('zero-fill'), +n = require('numbro'), +highest = require('../../../lib/highest'), +lowest = require('../../../lib/lowest') + +module.exports = { + name: 'ichimoku', + description: 'Ichimoku Cloud', + + getOptions: function () { + this.option('period_length', 'period length', String, '4h') + this.option('min_periods', 'min periods (should be >= senkou_b option)', Number, 52) + this.option('tenkan', 'Tenkan (conversion) line', Number, 9) + this.option('kijun','Kijun (base) line', Number, 26) + this.option('senkou_b','Senkou (leading) span B', Number, 52) + this.option('chikou','Chikou (lagging) span)', Number, 26) + }, + + calculate: function (s) { + }, + + onPeriod: function (s, cb) { + if (s.lookback[s.options.min_periods]) { + highest(s, 'tenkan_high', s.options.tenkan) + lowest(s, 'tenkan_low', s.options.tenkan) + highest(s, 'kijun_high', s.options.kijun) + lowest(s, 'kijun_low', s.options.kijun) + highest(s, 'senkou_high', s.options.senkou_b) + lowest(s, 'senkou_low', s.options.senkou_b) + + s.period.tenkan = ((s.period.tenkan_high + s.period.tenkan_low) / 2) + s.period.kijun = ((s.period.kijun_high + s.period.kijun_low) / 2) + s.period.senkou_a = ((s.period.tenkan + s.period.kijun) / 2) + s.period.senkou_b = ((s.period.senkou_high + s.period.senkou_low) / 2) + s.period.chikou = s.lookback[s.options.chikou - 1].close + + if (s.period.close > Math.max(s.period.senkou_a, s.period.senkou_b)) { + if (s.trend !== 'up') { + s.acted_on_trend = false + } + s.trend = 'up' + s.signal = !s.acted_on_trend ? 'buy' : null + } + if (s.period.close < Math.max(s.period.senkou_a, s.period.senkou_b)) { + if (s.trend !== 'down') { + s.acted_on_trend = false + } + s.trend = 'down' + s.signal = !s.acted_on_trend ? 'sell' : null + } + } + cb() + }, + + onReport: function (s) { + var cols = [] + return cols + } +} From c32b328cb0af35dc193ac941c431cad44534360f Mon Sep 17 00:00:00 2001 From: Travis CI Date: Fri, 23 Mar 2018 11:06:33 +0000 Subject: [PATCH 32/74] Exchanges: update-products 888 --- extensions/exchanges/binance/products.json | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index 2da5073cae..5d6173cfd2 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2868,5 +2868,35 @@ "increment": "0.00001", "asset_increment": "0.01", "label": "XEM/BNB" + }, + { + "id": "WANBTC", + "asset": "WAN", + "currency": "BTC", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "WAN/BTC" + }, + { + "id": "WANETH", + "asset": "WAN", + "currency": "ETH", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "WAN/ETH" + }, + { + "id": "WANBNB", + "asset": "WAN", + "currency": "BNB", + "min_size": "0.01000000", + "max_size": "10000.00000000", + "increment": "0.00001", + "asset_increment": "0.01", + "label": "WAN/BNB" } ] \ No newline at end of file From 79e2440329064ed36411b6d7b3e2bfe423496ce8 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Sat, 24 Mar 2018 11:07:41 +0000 Subject: [PATCH 33/74] Exchanges: update-products 891 --- extensions/exchanges/bitfinex/products.json | 6 +++--- extensions/exchanges/bittrex/products.json | 24 --------------------- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index 29fd58b338..e7013ceb13 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -402,7 +402,7 @@ { "asset": "DAT", "currency": "USD", - "min_size": "146.0", + "min_size": "148.0", "max_size": "250000.0", "increment": "0.0000001", "label": "DAT/USD" @@ -410,7 +410,7 @@ { "asset": "DAT", "currency": "BTC", - "min_size": "146.0", + "min_size": "148.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/BTC" @@ -418,7 +418,7 @@ { "asset": "DAT", "currency": "ETH", - "min_size": "146.0", + "min_size": "148.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/ETH" diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index 40e6b5a51a..f92f508f48 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -599,14 +599,6 @@ "increment": "0.00000001", "label": "BTC/PKB" }, - { - "asset": "CPC", - "currency": "BTC", - "min_size": "5.07202272", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/CPC" - }, { "asset": "AEON", "currency": "BTC", @@ -623,14 +615,6 @@ "increment": "0.00000001", "label": "BTC/ETH" }, - { - "asset": "GCR", - "currency": "BTC", - "min_size": "20.69536424", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/GCR" - }, { "asset": "TX", "currency": "BTC", @@ -815,14 +799,6 @@ "increment": "0.00000001", "label": "BTC/LSK" }, - { - "asset": "PDC", - "currency": "BTC", - "min_size": "28.80184332", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/PDC" - }, { "asset": "BRK", "currency": "BTC", From f7fe24eaf65a014c0003dfb5a29c19ee39d4a892 Mon Sep 17 00:00:00 2001 From: defkev Date: Mon, 26 Mar 2018 10:09:12 +0200 Subject: [PATCH 34/74] Add option to set number of prev trades to load (#1526) --- README.md | 1 + commands/trade.js | 15 +++++++++++++-- conf-sample.js | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fbdb2f56d6..1e9a9a67ba 100644 --- a/README.md +++ b/README.md @@ -284,6 +284,7 @@ zenbot trade --help --exact_buy_orders instead of only adjusting maker buy when the price goes up, adjust it if price has changed at all --exact_sell_orders instead of only adjusting maker sell when the price goes down, adjust it if price has changed at all --use_prev_trades load and use previous trades for stop-order triggers and loss protection + --min_prev_trades minimum number of previous trades to load if use_prev_trades is enabled, set to 0 to disable and use trade time instead --disable_stats disable printing order stats --reset_profit start new profit calculation from 0 --use_fee_asset Using separated asset to pay for fees. Such as binance's BNB or Huobi's HT diff --git a/commands/trade.js b/commands/trade.js index 4d85972568..c3baa43444 100644 --- a/commands/trade.js +++ b/commands/trade.js @@ -50,6 +50,7 @@ module.exports = function (program, conf) { .option('--exact_buy_orders', 'instead of only adjusting maker buy when the price goes up, adjust it if price has changed at all') .option('--exact_sell_orders', 'instead of only adjusting maker sell when the price goes down, adjust it if price has changed at all') .option('--use_prev_trades', 'load and use previous trades for stop-order triggers and loss protection') + .option('--min_prev_trades', 'minimum number of previous trades to load if use_prev_trades is enabled, set to 0 to disable and use trade time instead') .option('--disable_stats', 'disable printing order stats') .option('--reset_profit', 'start new profit calculation from 0') .option('--use_fee_asset', 'Using separated asset to pay for fees. Such as binance\'s BNB or Huobi\'s HT', Boolean, false) @@ -77,6 +78,7 @@ module.exports = function (program, conf) { so.currency_increment = cmd.currency_increment so.keep_lookback_periods = cmd.keep_lookback_periods so.use_prev_trades = (cmd.use_prev_trades||conf.use_prev_trades) + so.min_prev_trades = parseInt(cmd.min_prev_trades||conf.min_prev_trades) so.debug = cmd.debug so.stats = !cmd.disable_stats so.mode = so.paper ? 'paper' : 'live' @@ -407,10 +409,19 @@ module.exports = function (program, conf) { trades.find(opts.query).limit(opts.limit).sort(opts.sort).toArray(function (err, trades) { if (err) throw err if (trades.length && so.use_prev_trades) { - my_trades.find({selector: so.selector.normalized, time : {$gte : trades[0].time}}).limit(0).toArray(function (err, my_prev_trades) { + let prevOpts = { + query: { + selector: so.selector.normalized + }, + limit: so.min_prev_trades + } + if (!so.min_prev_trades) { + prevOpts.query.time = {$gte : trades[0].time} + } + my_trades.find(prevOpts.query).sort({$natural:-1}).limit(prevOpts.limit).toArray(function (err, my_prev_trades) { if (err) throw err if (my_prev_trades.length) { - s.my_prev_trades = my_prev_trades.slice(0).sort(function(a,b){return a.time + a.execution_time < b.time + b.execution_time ? -1 : 1}) // simple copy, less recent executed first + s.my_prev_trades = my_prev_trades.reverse().slice(0) // simple copy, less recent executed first } }) } diff --git a/conf-sample.js b/conf-sample.js index 79065ef1e4..3708ae458c 100644 --- a/conf-sample.js +++ b/conf-sample.js @@ -170,6 +170,8 @@ c.avg_slippage_pct = 0.045 c.cancel_after = 'day' // load and use previous trades for stop-order triggers and loss protection (live/paper mode only) c.use_prev_trades = false +// minimum number of previous trades to load if use_prev_trades is enabled, set to 0 to disable and use trade time instead +c.min_prev_trades = 0 // Notifiers: c.notifiers = {} From 7b8dfb4e9494f3c1c841f68d13b4790d7d3d0972 Mon Sep 17 00:00:00 2001 From: brucetus <31704711+brucetus@users.noreply.github.com> Date: Mon, 26 Mar 2018 01:10:07 -0700 Subject: [PATCH 35/74] Add info comment and phenotypes to ichimoku (#1525) * Add info comment and phenotypes to ichimoku Added a little disclaimer/ info as to what this strategy does by default. Also @LoneWolf345 added the phenotypes for use in the genetic_backtester script. * Update strategy.js --- extensions/strategies/ichimoku/strategy.js | 26 +++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/extensions/strategies/ichimoku/strategy.js b/extensions/strategies/ichimoku/strategy.js index 3ea7f0a8c9..6706c39214 100644 --- a/extensions/strategies/ichimoku/strategy.js +++ b/extensions/strategies/ichimoku/strategy.js @@ -1,7 +1,8 @@ var z = require('zero-fill'), n = require('numbro'), highest = require('../../../lib/highest'), -lowest = require('../../../lib/lowest') +lowest = require('../../../lib/lowest'), +Phenotypes = require('../../../lib/phenotype') module.exports = { name: 'ichimoku', @@ -34,6 +35,10 @@ module.exports = { s.period.senkou_b = ((s.period.senkou_high + s.period.senkou_low) / 2) s.period.chikou = s.lookback[s.options.chikou - 1].close + // The below lines cause the bot to buy when the price is above the kumo cloud and sell when the price is inside + // or below the kumo cloud. There are many different ways to trade the Ichimoku Cloud and all of them can be + // implemented using the indicators above. + if (s.period.close > Math.max(s.period.senkou_a, s.period.senkou_b)) { if (s.trend !== 'up') { s.acted_on_trend = false @@ -55,5 +60,24 @@ module.exports = { onReport: function (s) { var cols = [] return cols + }, + + phenotypes: { + //General Options + period_length: Phenotypes.RangePeriod(5, 120, 'm'), + min_periods: Phenotypes.Range(150, 150), //(should be >= senkou_b option) + markdown_buy_pct: Phenotypes.RangeFloat(-1, 5), + markup_sell_pct: Phenotypes.RangeFloat(-1, 5), + order_type: Phenotypes.ListOption(['maker', 'taker']), + sell_stop_pct: Phenotypes.Range0(1, 50), + buy_stop_pct: Phenotypes.Range0(1, 50), + profit_stop_enable_pct: Phenotypes.Range0(1, 20), + profit_stop_pct: Phenotypes.Range(1,20), + + //Strategy Specific + tenkan: Phenotypes.RangeFactor(5, 30, 1), + kijun: Phenotypes.RangeFactor(25, 75, 1), + senkou_b: Phenotypes.RangeFactor(50, 150, 1), + chikou: Phenotypes.RangeFactor(20, 40, 1) } } From 785d3bed6ef4d2cd98c8a9969c386ad5ad35dc98 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Mon, 26 Mar 2018 11:08:36 +0000 Subject: [PATCH 36/74] Exchanges: update-products 901 --- extensions/exchanges/binance/products.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index 5d6173cfd2..86a5ae3e42 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2898,5 +2898,25 @@ "increment": "0.00001", "asset_increment": "0.01", "label": "WAN/BNB" + }, + { + "id": "QLCBTC", + "asset": "QLC", + "currency": "BTC", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "QLC/BTC" + }, + { + "id": "QLCETH", + "asset": "QLC", + "currency": "ETH", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "QLC/ETH" } ] \ No newline at end of file From e8c079d4d608f4954355bb93187d09584ad4d0db Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Tue, 27 Mar 2018 11:48:33 +0200 Subject: [PATCH 37/74] notifiers - slack - fix exception when running in docker (#1527) /app/node_modules/@slack/client/dist/IncomingWebhook.js:26 payload.text = message; ^ TypeError: Cannot set property 'text' of undefined at IncomingWebhook.send (/app/node_modules/@slack/client/dist/IncomingWebhook.js:26:26) at Object.pushMessage (/app/extensions/notifiers/slack.js:11:20) at active_notifiers.forEach (/app/lib/notify.js:19:18) at Array.forEach () at Object.pushMessage (/app/lib/notify.js:15:24) at pushMessage (/app/lib/engine.js:121:16) at /app/lib/engine.js:256:11 at /app/extensions/exchanges/gdax/exchange.js:311:11 at Request._callback (/app/node_modules/gdax/lib/clients/public.js:81:11) at Request.self.callback (/app/node_modules/request/request.js:186:22) --- extensions/notifiers/slack.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extensions/notifiers/slack.js b/extensions/notifiers/slack.js index e9c308e4de..94b624198a 100644 --- a/extensions/notifiers/slack.js +++ b/extensions/notifiers/slack.js @@ -3,8 +3,7 @@ var IncomingWebhook = require('@slack/client').IncomingWebhook module.exports = function slack (config) { var slack = { pushMessage: function(title, message) { - var slackWebhook = new IncomingWebhook(config.webhook_url || '') - + var slackWebhook = new IncomingWebhook(config.webhook_url || '', {}) slackWebhook.send(title + ': ' + message, function (err) { if (err) { console.error('\nerror: slack webhook') From 4fc3738bef868e398da2ac239b195322bdfa8292 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Tue, 27 Mar 2018 11:08:31 +0000 Subject: [PATCH 38/74] Exchanges: update-products 905 --- extensions/exchanges/bittrex/products.json | 540 ++++++++++----------- 1 file changed, 270 insertions(+), 270 deletions(-) diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index f92f508f48..da2338ad91 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -2,7 +2,7 @@ { "asset": "LTC", "currency": "BTC", - "min_size": "0.01231527", + "min_size": "0.01385042", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LTC" @@ -10,7 +10,7 @@ { "asset": "DOGE", "currency": "BTC", - "min_size": "431.03448276", + "min_size": "625.00000000", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DOGE" @@ -18,7 +18,7 @@ { "asset": "VTC", "currency": "BTC", - "min_size": "0.66034496", + "min_size": "0.98123872", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VTC" @@ -26,7 +26,7 @@ { "asset": "PPC", "currency": "BTC", - "min_size": "0.85881141", + "min_size": "1.09904603", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PPC" @@ -34,7 +34,7 @@ { "asset": "FTC", "currency": "BTC", - "min_size": "12.56281407", + "min_size": "8.77808989", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FTC" @@ -42,7 +42,7 @@ { "asset": "RDD", "currency": "BTC", - "min_size": "287.35632184", + "min_size": "431.03448276", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RDD" @@ -50,7 +50,7 @@ { "asset": "NXT", "currency": "BTC", - "min_size": "12.79426817", + "min_size": "15.19756839", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NXT" @@ -58,7 +58,7 @@ { "asset": "DASH", "currency": "BTC", - "min_size": "0.00432676", + "min_size": "0.00530167", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DASH" @@ -66,7 +66,7 @@ { "asset": "POT", "currency": "BTC", - "min_size": "16.54533422", + "min_size": "19.08396947", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/POT" @@ -74,7 +74,7 @@ { "asset": "BLK", "currency": "BTC", - "min_size": "7.81250000", + "min_size": "8.51208716", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BLK" @@ -82,7 +82,7 @@ { "asset": "EMC2", "currency": "BTC", - "min_size": "8.53825137", + "min_size": "10.78981442", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EMC2" @@ -90,7 +90,7 @@ { "asset": "XMY", "currency": "BTC", - "min_size": "233.64485981", + "min_size": "320.51282051", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XMY" @@ -98,7 +98,7 @@ { "asset": "AUR", "currency": "BTC", - "min_size": "1.46455770", + "min_size": "1.75426286", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/AUR" @@ -106,7 +106,7 @@ { "asset": "EFL", "currency": "BTC", - "min_size": "11.91043354", + "min_size": "13.93534002", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EFL" @@ -114,7 +114,7 @@ { "asset": "GLD", "currency": "BTC", - "min_size": "15.82278481", + "min_size": "22.50225023", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GLD" @@ -122,7 +122,7 @@ { "asset": "SLR", "currency": "BTC", - "min_size": "5.97086219", + "min_size": "6.04594921", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SLR" @@ -130,7 +130,7 @@ { "asset": "PTC", "currency": "BTC", - "min_size": "48.54368932", + "min_size": "58.13953488", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PTC" @@ -138,7 +138,7 @@ { "asset": "GRS", "currency": "BTC", - "min_size": "4.34782609", + "min_size": "5.22684508", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GRS" @@ -146,7 +146,7 @@ { "asset": "NLG", "currency": "BTC", - "min_size": "17.53155680", + "min_size": "21.07925801", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NLG" @@ -154,7 +154,7 @@ { "asset": "RBY", "currency": "BTC", - "min_size": "3.69112653", + "min_size": "4.82532330", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RBY" @@ -162,7 +162,7 @@ { "asset": "XWC", "currency": "BTC", - "min_size": "19.62323391", + "min_size": "24.29543246", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XWC" @@ -170,7 +170,7 @@ { "asset": "MONA", "currency": "BTC", - "min_size": "0.48814777", + "min_size": "0.58215350", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MONA" @@ -178,7 +178,7 @@ { "asset": "THC", "currency": "BTC", - "min_size": "21.73913043", + "min_size": "37.48125937", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/THC" @@ -186,7 +186,7 @@ { "asset": "ENRG", "currency": "BTC", - "min_size": "18.95375284", + "min_size": "22.14348981", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ENRG" @@ -194,7 +194,7 @@ { "asset": "ERC", "currency": "BTC", - "min_size": "3.84142594", + "min_size": "5.60538117", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ERC" @@ -202,7 +202,7 @@ { "asset": "VRC", "currency": "BTC", - "min_size": "3.03508559", + "min_size": "3.89408100", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VRC" @@ -210,7 +210,7 @@ { "asset": "CURE", "currency": "BTC", - "min_size": "5.53832521", + "min_size": "7.38552437", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CURE" @@ -218,7 +218,7 @@ { "asset": "XMR", "currency": "BTC", - "min_size": "0.00892857", + "min_size": "0.01040421", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XMR" @@ -226,7 +226,7 @@ { "asset": "CLOAK", "currency": "BTC", - "min_size": "0.26460627", + "min_size": "0.34337358", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CLOAK" @@ -234,7 +234,7 @@ { "asset": "START", "currency": "BTC", - "min_size": "29.48113208", + "min_size": "116.82242991", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/START" @@ -242,7 +242,7 @@ { "asset": "KORE", "currency": "BTC", - "min_size": "0.91404336", + "min_size": "0.82004855", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/KORE" @@ -250,7 +250,7 @@ { "asset": "XDN", "currency": "BTC", - "min_size": "140.44943820", + "min_size": "247.52475248", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XDN" @@ -258,7 +258,7 @@ { "asset": "TRUST", "currency": "BTC", - "min_size": "20.24291498", + "min_size": "28.80184332", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TRUST" @@ -266,7 +266,7 @@ { "asset": "NAV", "currency": "BTC", - "min_size": "1.47780339", + "min_size": "1.78443969", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NAV" @@ -274,7 +274,7 @@ { "asset": "XST", "currency": "BTC", - "min_size": "8.01538955", + "min_size": "8.30013280", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XST" @@ -282,7 +282,7 @@ { "asset": "VIA", "currency": "BTC", - "min_size": "0.98939370", + "min_size": "1.34989201", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VIA" @@ -290,7 +290,7 @@ { "asset": "PINK", "currency": "BTC", - "min_size": "88.65248227", + "min_size": "112.10762332", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PINK" @@ -298,7 +298,7 @@ { "asset": "IOC", "currency": "BTC", - "min_size": "1.40559991", + "min_size": "1.67830290", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/IOC" @@ -306,7 +306,7 @@ { "asset": "CANN", "currency": "BTC", - "min_size": "38.46153846", + "min_size": "48.54368932", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CANN" @@ -314,7 +314,7 @@ { "asset": "SYS", "currency": "BTC", - "min_size": "4.09634606", + "min_size": "5.91296121", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SYS" @@ -322,7 +322,7 @@ { "asset": "NEOS", "currency": "BTC", - "min_size": "0.62717945", + "min_size": "0.83679207", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NEOS" @@ -330,7 +330,7 @@ { "asset": "DGB", "currency": "BTC", - "min_size": "73.09941520", + "min_size": "90.90909091", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DGB" @@ -338,7 +338,7 @@ { "asset": "BURST", "currency": "BTC", - "min_size": "71.22507123", + "min_size": "116.27906977", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BURST" @@ -346,7 +346,7 @@ { "asset": "EXCL", "currency": "BTC", - "min_size": "2.08350696", + "min_size": "2.00000000", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EXCL" @@ -354,7 +354,7 @@ { "asset": "SWIFT", "currency": "BTC", - "min_size": "2.44857982", + "min_size": "3.29641350", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SWIFT" @@ -362,7 +362,7 @@ { "asset": "DOPE", "currency": "BTC", - "min_size": "38.88024883", + "min_size": "30.45066991", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DOPE" @@ -370,7 +370,7 @@ { "asset": "BLOCK", "currency": "BTC", - "min_size": "0.08474576", + "min_size": "0.11172635", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BLOCK" @@ -378,7 +378,7 @@ { "asset": "ABY", "currency": "BTC", - "min_size": "217.39130435", + "min_size": "316.45569620", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ABY" @@ -386,7 +386,7 @@ { "asset": "BYC", "currency": "BTC", - "min_size": "2.77716063", + "min_size": "4.53802868", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BYC" @@ -394,7 +394,7 @@ { "asset": "XMG", "currency": "BTC", - "min_size": "5.50903482", + "min_size": "7.01459035", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XMG" @@ -402,7 +402,7 @@ { "asset": "BLITZ", "currency": "BTC", - "min_size": "1.92366882", + "min_size": "3.33333333", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BLITZ" @@ -410,7 +410,7 @@ { "asset": "BAY", "currency": "BTC", - "min_size": "36.65689150", + "min_size": "41.94630872", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BAY" @@ -418,7 +418,7 @@ { "asset": "FAIR", "currency": "BTC", - "min_size": "5.54938957", + "min_size": "10.03613007", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FAIR" @@ -426,7 +426,7 @@ { "asset": "SPR", "currency": "BTC", - "min_size": "5.74316563", + "min_size": "7.94155019", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SPR" @@ -434,7 +434,7 @@ { "asset": "VTR", "currency": "BTC", - "min_size": "4.22868742", + "min_size": "6.28140704", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VTR" @@ -442,7 +442,7 @@ { "asset": "XRP", "currency": "BTC", - "min_size": "2.87092329", + "min_size": "3.41950486", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XRP" @@ -450,7 +450,7 @@ { "asset": "GAME", "currency": "BTC", - "min_size": "1.17200319", + "min_size": "1.60968386", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GAME" @@ -458,7 +458,7 @@ { "asset": "COVAL", "currency": "BTC", - "min_size": "182.48175182", + "min_size": "297.61904762", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/COVAL" @@ -466,7 +466,7 @@ { "asset": "NXS", "currency": "BTC", - "min_size": "1.50384986", + "min_size": "1.25075045", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NXS" @@ -474,7 +474,7 @@ { "asset": "XCP", "currency": "BTC", - "min_size": "0.11308277", + "min_size": "0.15723270", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XCP" @@ -482,7 +482,7 @@ { "asset": "BITB", "currency": "BTC", - "min_size": "144.50867052", + "min_size": "227.27272727", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BITB" @@ -490,7 +490,7 @@ { "asset": "GEO", "currency": "BTC", - "min_size": "1.00932617", + "min_size": "1.10107906", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GEO" @@ -498,7 +498,7 @@ { "asset": "FLDC", "currency": "BTC", - "min_size": "102.45901639", + "min_size": "138.12154696", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FLDC" @@ -506,7 +506,7 @@ { "asset": "GRC", "currency": "BTC", - "min_size": "39.43217666", + "min_size": "52.08333333", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GRC" @@ -514,7 +514,7 @@ { "asset": "FLO", "currency": "BTC", - "min_size": "26.23294858", + "min_size": "25.00000000", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FLO" @@ -522,7 +522,7 @@ { "asset": "NBT", "currency": "BTC", - "min_size": "2.66752027", + "min_size": "3.82731170", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NBT" @@ -530,7 +530,7 @@ { "asset": "MUE", "currency": "BTC", - "min_size": "18.01152738", + "min_size": "17.22949690", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MUE" @@ -538,7 +538,7 @@ { "asset": "XEM", "currency": "BTC", - "min_size": "6.63305917", + "min_size": "7.64993880", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XEM" @@ -546,7 +546,7 @@ { "asset": "CLAM", "currency": "BTC", - "min_size": "0.46850696", + "min_size": "0.54310045", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CLAM" @@ -554,7 +554,7 @@ { "asset": "DMD", "currency": "BTC", - "min_size": "0.20501214", + "min_size": "0.32544879", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DMD" @@ -562,7 +562,7 @@ { "asset": "GAM", "currency": "BTC", - "min_size": "0.18409426", + "min_size": "0.28403281", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GAM" @@ -570,7 +570,7 @@ { "asset": "SPHR", "currency": "BTC", - "min_size": "0.89378285", + "min_size": "0.81873260", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SPHR" @@ -578,7 +578,7 @@ { "asset": "OK", "currency": "BTC", - "min_size": "10.85540599", + "min_size": "15.72327044", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/OK" @@ -586,7 +586,7 @@ { "asset": "SNRG", "currency": "BTC", - "min_size": "1.38488810", + "min_size": "1.54349571", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SNRG" @@ -594,7 +594,7 @@ { "asset": "PKB", "currency": "BTC", - "min_size": "3.71747212", + "min_size": "14.64557704", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PKB" @@ -602,7 +602,7 @@ { "asset": "AEON", "currency": "BTC", - "min_size": "0.77160494", + "min_size": "1.05223284", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/AEON" @@ -610,7 +610,7 @@ { "asset": "ETH", "currency": "BTC", - "min_size": "0.00303030", + "min_size": "0.00419393", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ETH" @@ -618,7 +618,7 @@ { "asset": "TX", "currency": "BTC", - "min_size": "2.50050010", + "min_size": "1.22681323", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TX" @@ -626,7 +626,7 @@ { "asset": "BCY", "currency": "BTC", - "min_size": "5.70385581", + "min_size": "7.13673994", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BCY" @@ -634,7 +634,7 @@ { "asset": "EXP", "currency": "BTC", - "min_size": "0.94837070", + "min_size": "1.20569086", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EXP" @@ -642,7 +642,7 @@ { "asset": "OMNI", "currency": "BTC", - "min_size": "0.06833476", + "min_size": "0.07703899", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/OMNI" @@ -650,7 +650,7 @@ { "asset": "AMP", "currency": "BTC", - "min_size": "8.24266403", + "min_size": "4.95834986", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/AMP" @@ -658,7 +658,7 @@ { "asset": "XLM", "currency": "BTC", - "min_size": "7.49175907", + "min_size": "9.06453952", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XLM" @@ -666,7 +666,7 @@ { "asset": "BTC", "currency": "USDT", - "min_size": "0.00028043", + "min_size": "0.00037244", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/BTC" @@ -674,7 +674,7 @@ { "asset": "CLUB", "currency": "BTC", - "min_size": "2.68615021", + "min_size": "4.61084471", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CLUB" @@ -682,7 +682,7 @@ { "asset": "RVR", "currency": "BTC", - "min_size": "19.53125000", + "min_size": "23.14814815", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RVR" @@ -690,7 +690,7 @@ { "asset": "EMC", "currency": "BTC", - "min_size": "0.71426531", + "min_size": "0.66855645", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EMC" @@ -698,7 +698,7 @@ { "asset": "FCT", "currency": "BTC", - "min_size": "0.07663493", + "min_size": "0.08458462", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FCT" @@ -706,7 +706,7 @@ { "asset": "EGC", "currency": "BTC", - "min_size": "7.98722045", + "min_size": "10.86956522", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EGC" @@ -714,7 +714,7 @@ { "asset": "SLS", "currency": "BTC", - "min_size": "0.07415911", + "min_size": "0.03812080", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SLS" @@ -722,7 +722,7 @@ { "asset": "RADS", "currency": "BTC", - "min_size": "0.45679621", + "min_size": "0.51999917", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RADS" @@ -730,7 +730,7 @@ { "asset": "DCR", "currency": "BTC", - "min_size": "0.03396873", + "min_size": "0.04244381", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DCR" @@ -738,7 +738,7 @@ { "asset": "BSD", "currency": "BTC", - "min_size": "2.78396437", + "min_size": "3.52063090", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BSD" @@ -746,7 +746,7 @@ { "asset": "XVG", "currency": "BTC", - "min_size": "44.09171076", + "min_size": "55.92841163", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XVG" @@ -754,7 +754,7 @@ { "asset": "PIVX", "currency": "BTC", - "min_size": "0.46956293", + "min_size": "0.54824561", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PIVX" @@ -762,7 +762,7 @@ { "asset": "XVC", "currency": "BTC", - "min_size": "4.97710532", + "min_size": "6.01974476", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XVC" @@ -770,7 +770,7 @@ { "asset": "MEME", "currency": "BTC", - "min_size": "6.91562932", + "min_size": "9.68992248", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MEME" @@ -778,7 +778,7 @@ { "asset": "STEEM", "currency": "BTC", - "min_size": "0.77688005", + "min_size": "1.12922896", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/STEEM" @@ -786,7 +786,7 @@ { "asset": "2GIVE", "currency": "BTC", - "min_size": "225.22522523", + "min_size": "320.51282051", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/2GIVE" @@ -794,7 +794,7 @@ { "asset": "LSK", "currency": "BTC", - "min_size": "0.13437248", + "min_size": "0.18909311", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LSK" @@ -802,7 +802,7 @@ { "asset": "BRK", "currency": "BTC", - "min_size": "9.05797101", + "min_size": "11.69317119", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BRK" @@ -810,7 +810,7 @@ { "asset": "WAVES", "currency": "BTC", - "min_size": "0.40917870", + "min_size": "0.46475312", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/WAVES" @@ -818,7 +818,7 @@ { "asset": "LBC", "currency": "BTC", - "min_size": "6.90417012", + "min_size": "9.51293760", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LBC" @@ -826,7 +826,7 @@ { "asset": "SBD", "currency": "BTC", - "min_size": "0.71428571", + "min_size": "1.14800018", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SBD" @@ -834,7 +834,7 @@ { "asset": "BRX", "currency": "BTC", - "min_size": "2.49975002", + "min_size": "2.64662291", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BRX" @@ -842,7 +842,7 @@ { "asset": "ETC", "currency": "BTC", - "min_size": "0.07509492", + "min_size": "0.12413108", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ETC" @@ -850,7 +850,7 @@ { "asset": "ETC", "currency": "ETH", - "min_size": "0.12463333", + "min_size": "0.14783063", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ETC" @@ -858,7 +858,7 @@ { "asset": "STRAT", "currency": "BTC", - "min_size": "0.34446174", + "min_size": "0.41981528", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/STRAT" @@ -866,7 +866,7 @@ { "asset": "UNB", "currency": "BTC", - "min_size": "3.96699460", + "min_size": "3.01968837", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UNB" @@ -874,7 +874,7 @@ { "asset": "SYNX", "currency": "BTC", - "min_size": "3.49162011", + "min_size": "5.53219739", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SYNX" @@ -882,7 +882,7 @@ { "asset": "EBST", "currency": "BTC", - "min_size": "8.61771803", + "min_size": "16.58925017", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EBST" @@ -890,7 +890,7 @@ { "asset": "VRM", "currency": "BTC", - "min_size": "0.55730177", + "min_size": "0.84314188", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VRM" @@ -898,7 +898,7 @@ { "asset": "SEQ", "currency": "BTC", - "min_size": "12.43781095", + "min_size": "12.25490196", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SEQ" @@ -906,7 +906,7 @@ { "asset": "REP", "currency": "BTC", - "min_size": "0.05504959", + "min_size": "0.06249875", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/REP" @@ -914,7 +914,7 @@ { "asset": "SHIFT", "currency": "BTC", - "min_size": "0.90009001", + "min_size": "1.06378452", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SHIFT" @@ -922,7 +922,7 @@ { "asset": "ARDR", "currency": "BTC", - "min_size": "6.43997939", + "min_size": "8.00256082", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ARDR" @@ -930,7 +930,7 @@ { "asset": "XZC", "currency": "BTC", - "min_size": "0.04818822", + "min_size": "0.05765084", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XZC" @@ -938,7 +938,7 @@ { "asset": "NEO", "currency": "BTC", - "min_size": "0.01879525", + "min_size": "0.03481322", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NEO" @@ -946,7 +946,7 @@ { "asset": "ZEC", "currency": "BTC", - "min_size": "0.00657822", + "min_size": "0.00899908", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZEC" @@ -954,7 +954,7 @@ { "asset": "ZCL", "currency": "BTC", - "min_size": "0.02953337", + "min_size": "0.49115914", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZCL" @@ -962,7 +962,7 @@ { "asset": "IOP", "currency": "BTC", - "min_size": "0.78125000", + "min_size": "1.12866817", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/IOP" @@ -970,7 +970,7 @@ { "asset": "GOLOS", "currency": "BTC", - "min_size": "18.82530120", + "min_size": "31.72588832", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GOLOS" @@ -978,7 +978,7 @@ { "asset": "UBQ", "currency": "BTC", - "min_size": "1.07462173", + "min_size": "1.21713729", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UBQ" @@ -986,7 +986,7 @@ { "asset": "KMD", "currency": "BTC", - "min_size": "0.69967255", + "min_size": "0.71223042", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/KMD" @@ -994,7 +994,7 @@ { "asset": "GBG", "currency": "BTC", - "min_size": "25.00000000", + "min_size": "38.75968992", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GBG" @@ -1002,7 +1002,7 @@ { "asset": "SIB", "currency": "BTC", - "min_size": "1.27122953", + "min_size": "1.77405620", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SIB" @@ -1010,7 +1010,7 @@ { "asset": "ION", "currency": "BTC", - "min_size": "1.05981602", + "min_size": "0.85353363", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ION" @@ -1018,7 +1018,7 @@ { "asset": "LMC", "currency": "BTC", - "min_size": "37.87878788", + "min_size": "40.84967320", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LMC" @@ -1026,7 +1026,7 @@ { "asset": "QWARK", "currency": "BTC", - "min_size": "19.09854851", + "min_size": "22.32142857", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/QWARK" @@ -1034,7 +1034,7 @@ { "asset": "CRW", "currency": "BTC", - "min_size": "0.97560976", + "min_size": "1.47058824", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CRW" @@ -1042,7 +1042,7 @@ { "asset": "SWT", "currency": "BTC", - "min_size": "1.30187991", + "min_size": "1.58841095", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SWT" @@ -1050,7 +1050,7 @@ { "asset": "MLN", "currency": "BTC", - "min_size": "0.02424329", + "min_size": "0.03119809", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MLN" @@ -1058,7 +1058,7 @@ { "asset": "ARK", "currency": "BTC", - "min_size": "0.70631445", + "min_size": "0.77471336", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ARK" @@ -1066,7 +1066,7 @@ { "asset": "DYN", "currency": "BTC", - "min_size": "1.12521379", + "min_size": "1.23322810", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DYN" @@ -1074,7 +1074,7 @@ { "asset": "TKS", "currency": "BTC", - "min_size": "0.69049329", + "min_size": "0.95416205", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TKS" @@ -1082,7 +1082,7 @@ { "asset": "MUSIC", "currency": "BTC", - "min_size": "123.15270936", + "min_size": "147.92899408", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MUSIC" @@ -1090,7 +1090,7 @@ { "asset": "DTB", "currency": "BTC", - "min_size": "3.93700787", + "min_size": "4.02965828", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DTB" @@ -1098,7 +1098,7 @@ { "asset": "INCNT", "currency": "BTC", - "min_size": "8.39771582", + "min_size": "8.10898476", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/INCNT" @@ -1106,7 +1106,7 @@ { "asset": "GBYTE", "currency": "BTC", - "min_size": "0.00630181", + "min_size": "0.01076866", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GBYTE" @@ -1114,7 +1114,7 @@ { "asset": "GNT", "currency": "BTC", - "min_size": "7.26744186", + "min_size": "8.72905028", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GNT" @@ -1122,7 +1122,7 @@ { "asset": "NXC", "currency": "BTC", - "min_size": "12.50625313", + "min_size": "15.39408867", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NXC" @@ -1130,7 +1130,7 @@ { "asset": "EDG", "currency": "BTC", - "min_size": "2.86401650", + "min_size": "2.79329609", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EDG" @@ -1138,7 +1138,7 @@ { "asset": "LGD", "currency": "BTC", - "min_size": "3.56989861", + "min_size": "4.99001996", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LGD" @@ -1146,7 +1146,7 @@ { "asset": "TRST", "currency": "BTC", - "min_size": "8.39771582", + "min_size": "10.49979000", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TRST" @@ -1154,7 +1154,7 @@ { "asset": "GNT", "currency": "ETH", - "min_size": "12.00422549", + "min_size": "10.39522651", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/GNT" @@ -1162,7 +1162,7 @@ { "asset": "REP", "currency": "ETH", - "min_size": "0.09093679", + "min_size": "0.07552870", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/REP" @@ -1170,7 +1170,7 @@ { "asset": "ETH", "currency": "USDT", - "min_size": "0.00339083", + "min_size": "0.00621762", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ETH" @@ -1178,7 +1178,7 @@ { "asset": "WINGS", "currency": "ETH", - "min_size": "6.05921061", + "min_size": "5.44484373", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/WINGS" @@ -1186,7 +1186,7 @@ { "asset": "WINGS", "currency": "BTC", - "min_size": "3.68459838", + "min_size": "4.59981601", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/WINGS" @@ -1194,7 +1194,7 @@ { "asset": "RLC", "currency": "BTC", - "min_size": "1.69204738", + "min_size": "1.97784810", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RLC" @@ -1202,7 +1202,7 @@ { "asset": "GNO", "currency": "BTC", - "min_size": "0.02009060", + "min_size": "0.02716836", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GNO" @@ -1210,7 +1210,7 @@ { "asset": "GUP", "currency": "BTC", - "min_size": "8.23451910", + "min_size": "10.58873359", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GUP" @@ -1218,7 +1218,7 @@ { "asset": "LUN", "currency": "BTC", - "min_size": "0.11449822", + "min_size": "0.20053422", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LUN" @@ -1226,7 +1226,7 @@ { "asset": "GUP", "currency": "ETH", - "min_size": "13.64628821", + "min_size": "12.65310254", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/GUP" @@ -1234,7 +1234,7 @@ { "asset": "RLC", "currency": "ETH", - "min_size": "2.68159780", + "min_size": "2.38095238", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/RLC" @@ -1242,7 +1242,7 @@ { "asset": "LUN", "currency": "ETH", - "min_size": "0.18946075", + "min_size": "0.23964724", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LUN" @@ -1250,7 +1250,7 @@ { "asset": "GNO", "currency": "ETH", - "min_size": "0.03357341", + "min_size": "0.03220410", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/GNO" @@ -1258,7 +1258,7 @@ { "asset": "HMQ", "currency": "BTC", - "min_size": "11.89909567", + "min_size": "12.63902932", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/HMQ" @@ -1266,7 +1266,7 @@ { "asset": "HMQ", "currency": "ETH", - "min_size": "19.36633357", + "min_size": "14.96020585", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/HMQ" @@ -1274,7 +1274,7 @@ { "asset": "ANT", "currency": "BTC", - "min_size": "0.69541029", + "min_size": "0.57736721", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ANT" @@ -1282,7 +1282,7 @@ { "asset": "TRST", "currency": "ETH", - "min_size": "13.19679054", + "min_size": "12.50000000", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TRST" @@ -1290,7 +1290,7 @@ { "asset": "ANT", "currency": "ETH", - "min_size": "1.11407455", + "min_size": "0.71361695", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ANT" @@ -1298,7 +1298,7 @@ { "asset": "SC", "currency": "BTC", - "min_size": "121.35922330", + "min_size": "147.05882353", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SC" @@ -1306,7 +1306,7 @@ { "asset": "BAT", "currency": "ETH", - "min_size": "11.78272652", + "min_size": "12.58399819", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BAT" @@ -1314,7 +1314,7 @@ { "asset": "BAT", "currency": "BTC", - "min_size": "7.16948666", + "min_size": "10.53074979", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BAT" @@ -1322,7 +1322,7 @@ { "asset": "ZEN", "currency": "BTC", - "min_size": "0.06473229", + "min_size": "0.11655012", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZEN" @@ -1330,7 +1330,7 @@ { "asset": "QRL", "currency": "BTC", - "min_size": "2.25978487", + "min_size": "2.45098039", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/QRL" @@ -1338,7 +1338,7 @@ { "asset": "QRL", "currency": "ETH", - "min_size": "3.70444459", + "min_size": "2.96947381", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/QRL" @@ -1346,7 +1346,7 @@ { "asset": "CRB", "currency": "BTC", - "min_size": "7.21500722", + "min_size": "12.50625313", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CRB" @@ -1354,7 +1354,7 @@ { "asset": "CRB", "currency": "ETH", - "min_size": "12.19809710", + "min_size": "14.85222041", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/CRB" @@ -1362,7 +1362,7 @@ { "asset": "LGD", "currency": "ETH", - "min_size": "5.59785043", + "min_size": "6.04668037", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LGD" @@ -1370,7 +1370,7 @@ { "asset": "PTOY", "currency": "BTC", - "min_size": "13.91207568", + "min_size": "15.22533496", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PTOY" @@ -1378,7 +1378,7 @@ { "asset": "PTOY", "currency": "ETH", - "min_size": "22.92105987", + "min_size": "17.90189760", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/PTOY" @@ -1386,7 +1386,7 @@ { "asset": "CFI", "currency": "BTC", - "min_size": "30.41362530", + "min_size": "30.86419753", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CFI" @@ -1394,7 +1394,7 @@ { "asset": "CFI", "currency": "ETH", - "min_size": "49.91514425", + "min_size": "36.68916936", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/CFI" @@ -1402,7 +1402,7 @@ { "asset": "BNT", "currency": "BTC", - "min_size": "0.53416521", + "min_size": "0.73744137", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BNT" @@ -1410,7 +1410,7 @@ { "asset": "BNT", "currency": "ETH", - "min_size": "0.86964386", + "min_size": "0.89326230", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BNT" @@ -1418,7 +1418,7 @@ { "asset": "NMR", "currency": "BTC", - "min_size": "0.12262837", + "min_size": "0.15971379", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NMR" @@ -1426,7 +1426,7 @@ { "asset": "NMR", "currency": "ETH", - "min_size": "0.20325212", + "min_size": "0.19381603", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/NMR" @@ -1434,7 +1434,7 @@ { "asset": "LTC", "currency": "ETH", - "min_size": "0.02019397", + "min_size": "0.01655629", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LTC" @@ -1442,7 +1442,7 @@ { "asset": "XRP", "currency": "ETH", - "min_size": "4.73440015", + "min_size": "4.08553476", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XRP" @@ -1450,7 +1450,7 @@ { "asset": "SNT", "currency": "BTC", - "min_size": "15.86294416", + "min_size": "22.38137869", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SNT" @@ -1458,7 +1458,7 @@ { "asset": "SNT", "currency": "ETH", - "min_size": "26.05795289", + "min_size": "26.69656682", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SNT" @@ -1466,7 +1466,7 @@ { "asset": "DCT", "currency": "BTC", - "min_size": "3.54157813", + "min_size": "4.89236791", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DCT" @@ -1474,7 +1474,7 @@ { "asset": "XEL", "currency": "BTC", - "min_size": "9.47328534", + "min_size": "6.70061646", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XEL" @@ -1482,7 +1482,7 @@ { "asset": "MCO", "currency": "BTC", - "min_size": "0.32765400", + "min_size": "0.34435262", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MCO" @@ -1490,7 +1490,7 @@ { "asset": "MCO", "currency": "ETH", - "min_size": "0.53830816", + "min_size": "0.42477202", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/MCO" @@ -1498,7 +1498,7 @@ { "asset": "ADT", "currency": "BTC", - "min_size": "40.45307443", + "min_size": "60.67961165", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ADT" @@ -1506,7 +1506,7 @@ { "asset": "ADT", "currency": "ETH", - "min_size": "65.22306288", + "min_size": "72.91818580", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ADT" @@ -1514,7 +1514,7 @@ { "asset": "PAY", "currency": "BTC", - "min_size": "1.64300736", + "min_size": "1.69503017", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PAY" @@ -1522,7 +1522,7 @@ { "asset": "PAY", "currency": "ETH", - "min_size": "2.71342440", + "min_size": "2.00816117", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/PAY" @@ -1530,7 +1530,7 @@ { "asset": "STORJ", "currency": "BTC", - "min_size": "2.87356322", + "min_size": "2.67522739", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/STORJ" @@ -1538,7 +1538,7 @@ { "asset": "STORJ", "currency": "ETH", - "min_size": "4.78317852", + "min_size": "3.21458651", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/STORJ" @@ -1546,7 +1546,7 @@ { "asset": "ADX", "currency": "BTC", - "min_size": "1.88778978", + "min_size": "2.82422052", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ADX" @@ -1554,7 +1554,7 @@ { "asset": "ADX", "currency": "ETH", - "min_size": "3.05866520", + "min_size": "3.43515122", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ADX" @@ -1562,7 +1562,7 @@ { "asset": "DASH", "currency": "ETH", - "min_size": "0.00710697", + "min_size": "0.00635323", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DASH" @@ -1570,7 +1570,7 @@ { "asset": "SC", "currency": "ETH", - "min_size": "198.01980198", + "min_size": "177.24211273", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SC" @@ -1578,7 +1578,7 @@ { "asset": "ZEC", "currency": "ETH", - "min_size": "0.01084034", + "min_size": "0.01080931", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ZEC" @@ -1586,7 +1586,7 @@ { "asset": "ZEC", "currency": "USDT", - "min_size": "0.00738734", + "min_size": "0.01350965", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ZEC" @@ -1594,7 +1594,7 @@ { "asset": "LTC", "currency": "USDT", - "min_size": "0.01380753", + "min_size": "0.02054795", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/LTC" @@ -1602,7 +1602,7 @@ { "asset": "ETC", "currency": "USDT", - "min_size": "0.08426966", + "min_size": "0.18403836", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ETC" @@ -1610,7 +1610,7 @@ { "asset": "XRP", "currency": "USDT", - "min_size": "3.21543408", + "min_size": "5.09313995", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/XRP" @@ -1618,7 +1618,7 @@ { "asset": "OMG", "currency": "BTC", - "min_size": "0.13256973", + "min_size": "0.20505586", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/OMG" @@ -1626,7 +1626,7 @@ { "asset": "OMG", "currency": "ETH", - "min_size": "0.21654358", + "min_size": "0.24700689", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/OMG" @@ -1634,7 +1634,7 @@ { "asset": "CVC", "currency": "BTC", - "min_size": "7.14898484", + "min_size": "8.30564784", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CVC" @@ -1642,7 +1642,7 @@ { "asset": "CVC", "currency": "ETH", - "min_size": "11.89400067", + "min_size": "9.88982732", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/CVC" @@ -1650,7 +1650,7 @@ { "asset": "PART", "currency": "BTC", - "min_size": "0.11205938", + "min_size": "0.16818481", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PART" @@ -1658,7 +1658,7 @@ { "asset": "QTUM", "currency": "BTC", - "min_size": "0.09762574", + "min_size": "0.12620717", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/QTUM" @@ -1666,7 +1666,7 @@ { "asset": "QTUM", "currency": "ETH", - "min_size": "0.16129032", + "min_size": "0.15096618", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/QTUM" @@ -1674,7 +1674,7 @@ { "asset": "XMR", "currency": "ETH", - "min_size": "0.01459581", + "min_size": "0.01249533", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XMR" @@ -1682,7 +1682,7 @@ { "asset": "XEM", "currency": "ETH", - "min_size": "10.98901099", + "min_size": "9.22645409", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XEM" @@ -1690,7 +1690,7 @@ { "asset": "XLM", "currency": "ETH", - "min_size": "12.34659357", + "min_size": "10.85187195", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XLM" @@ -1698,7 +1698,7 @@ { "asset": "NEO", "currency": "ETH", - "min_size": "0.03095683", + "min_size": "0.04180564", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/NEO" @@ -1706,7 +1706,7 @@ { "asset": "XMR", "currency": "USDT", - "min_size": "0.00996741", + "min_size": "0.01566850", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/XMR" @@ -1714,7 +1714,7 @@ { "asset": "DASH", "currency": "USDT", - "min_size": "0.00483631", + "min_size": "0.00787045", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/DASH" @@ -1722,7 +1722,7 @@ { "asset": "BCC", "currency": "ETH", - "min_size": "0.00353898", + "min_size": "0.00263992", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BCC" @@ -1730,7 +1730,7 @@ { "asset": "BCC", "currency": "USDT", - "min_size": "0.00240228", + "min_size": "0.00330405", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/BCC" @@ -1738,7 +1738,7 @@ { "asset": "BCC", "currency": "BTC", - "min_size": "0.00214427", + "min_size": "0.00221239", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BCC" @@ -1746,7 +1746,7 @@ { "asset": "DNT", "currency": "BTC", - "min_size": "33.78378378", + "min_size": "27.17391304", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DNT" @@ -1754,7 +1754,7 @@ { "asset": "DNT", "currency": "ETH", - "min_size": "54.42473060", + "min_size": "31.85119123", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DNT" @@ -1762,7 +1762,7 @@ { "asset": "NEO", "currency": "USDT", - "min_size": "0.02091847", + "min_size": "0.05215577", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/NEO" @@ -1770,7 +1770,7 @@ { "asset": "WAVES", "currency": "ETH", - "min_size": "0.67456356", + "min_size": "0.55593544", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/WAVES" @@ -1778,7 +1778,7 @@ { "asset": "STRAT", "currency": "ETH", - "min_size": "0.56753689", + "min_size": "0.50659280", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/STRAT" @@ -1786,7 +1786,7 @@ { "asset": "DGB", "currency": "ETH", - "min_size": "119.13271384", + "min_size": "108.67202782", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DGB" @@ -1794,7 +1794,7 @@ { "asset": "FCT", "currency": "ETH", - "min_size": "0.12723961", + "min_size": "0.10169081", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/FCT" @@ -1802,7 +1802,7 @@ { "asset": "OMG", "currency": "USDT", - "min_size": "0.14882005", + "min_size": "0.30981249", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/OMG" @@ -1810,7 +1810,7 @@ { "asset": "ADA", "currency": "BTC", - "min_size": "8.11951932", + "min_size": "12.34567901", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ADA" @@ -1818,7 +1818,7 @@ { "asset": "MANA", "currency": "BTC", - "min_size": "23.51834431", + "min_size": "23.96931927", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MANA" @@ -1826,7 +1826,7 @@ { "asset": "MANA", "currency": "ETH", - "min_size": "38.82288998", + "min_size": "27.82415136", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/MANA" @@ -1834,7 +1834,7 @@ { "asset": "SALT", "currency": "BTC", - "min_size": "0.64539447", + "min_size": "0.76651847", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SALT" @@ -1842,7 +1842,7 @@ { "asset": "SALT", "currency": "ETH", - "min_size": "1.04142584", + "min_size": "0.91426398", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SALT" @@ -1850,7 +1850,7 @@ { "asset": "TIX", "currency": "BTC", - "min_size": "4.43813243", + "min_size": "6.89655172", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TIX" @@ -1858,7 +1858,7 @@ { "asset": "TIX", "currency": "ETH", - "min_size": "7.11561450", + "min_size": "8.01359105", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TIX" @@ -1866,7 +1866,7 @@ { "asset": "RCN", "currency": "BTC", - "min_size": "18.27485380", + "min_size": "19.62323391", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RCN" @@ -1874,7 +1874,7 @@ { "asset": "RCN", "currency": "ETH", - "min_size": "29.95626385", + "min_size": "23.61386606", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/RCN" @@ -1882,7 +1882,7 @@ { "asset": "VIB", "currency": "BTC", - "min_size": "11.34301270", + "min_size": "13.24152542", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VIB" @@ -1890,7 +1890,7 @@ { "asset": "VIB", "currency": "ETH", - "min_size": "18.83097318", + "min_size": "15.47604309", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/VIB" @@ -1898,7 +1898,7 @@ { "asset": "MER", "currency": "BTC", - "min_size": "7.39426205", + "min_size": "11.62250116", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MER" @@ -1906,7 +1906,7 @@ { "asset": "POWR", "currency": "BTC", - "min_size": "4.43262411", + "min_size": "6.06060606", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/POWR" @@ -1914,7 +1914,7 @@ { "asset": "POWR", "currency": "ETH", - "min_size": "7.28427616", + "min_size": "7.25047491", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/POWR" @@ -1922,7 +1922,7 @@ { "asset": "BTG", "currency": "BTC", - "min_size": "0.02258966", + "min_size": "0.03675881", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BTG" @@ -1930,7 +1930,7 @@ { "asset": "BTG", "currency": "ETH", - "min_size": "0.03677587", + "min_size": "0.04435506", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BTG" @@ -1938,7 +1938,7 @@ { "asset": "BTG", "currency": "USDT", - "min_size": "0.02523129", + "min_size": "0.05471568", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/BTG" @@ -1946,7 +1946,7 @@ { "asset": "ADA", "currency": "ETH", - "min_size": "13.40482574", + "min_size": "14.85045591", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ADA" @@ -1954,7 +1954,7 @@ { "asset": "ENG", "currency": "BTC", - "min_size": "1.00000000", + "min_size": "1.21359223", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ENG" @@ -1962,7 +1962,7 @@ { "asset": "ENG", "currency": "ETH", - "min_size": "1.67334331", + "min_size": "1.41025026", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ENG" @@ -1970,7 +1970,7 @@ { "asset": "ADA", "currency": "USDT", - "min_size": "9.09090909", + "min_size": "18.18189862", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ADA" @@ -1978,7 +1978,7 @@ { "asset": "XVG", "currency": "USDT", - "min_size": "49.86046549", + "min_size": "84.12787437", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/XVG" @@ -1986,7 +1986,7 @@ { "asset": "NXT", "currency": "USDT", - "min_size": "14.28599933", + "min_size": "22.72726928", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/NXT" @@ -1994,7 +1994,7 @@ { "asset": "UKG", "currency": "BTC", - "min_size": "7.64993880", + "min_size": "12.05981669", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UKG" @@ -2002,7 +2002,7 @@ { "asset": "UKG", "currency": "ETH", - "min_size": "12.52850234", + "min_size": "13.85809313", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/UKG" @@ -2010,7 +2010,7 @@ { "asset": "IGNIS", "currency": "BTC", - "min_size": "13.42642320", + "min_size": "22.78942571", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/IGNIS" @@ -2018,7 +2018,7 @@ { "asset": "SRN", "currency": "BTC", - "min_size": "4.13359788", + "min_size": "6.25312656", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SRN" @@ -2026,7 +2026,7 @@ { "asset": "SRN", "currency": "ETH", - "min_size": "6.84931507", + "min_size": "7.64245537", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SRN" @@ -2034,7 +2034,7 @@ { "asset": "WAX", "currency": "BTC", - "min_size": "8.30564784", + "min_size": "14.35956347", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/WAX" @@ -2042,7 +2042,7 @@ { "asset": "WAX", "currency": "ETH", - "min_size": "13.91130154", + "min_size": "17.03635558", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/WAX" @@ -2050,7 +2050,7 @@ { "asset": "ZRX", "currency": "BTC", - "min_size": "2.68413142", + "min_size": "3.77130789", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZRX" @@ -2058,7 +2058,7 @@ { "asset": "ZRX", "currency": "ETH", - "min_size": "4.46245292", + "min_size": "4.37993290", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ZRX" @@ -2066,7 +2066,7 @@ { "asset": "VEE", "currency": "BTC", - "min_size": "36.65689150", + "min_size": "54.82456140", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VEE" @@ -2074,7 +2074,7 @@ { "asset": "VEE", "currency": "ETH", - "min_size": "58.10575247", + "min_size": "66.91648822", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/VEE" @@ -2082,7 +2082,7 @@ { "asset": "BCPT", "currency": "BTC", - "min_size": "1.75045512", + "min_size": "4.39753738", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BCPT" @@ -2090,7 +2090,7 @@ { "asset": "BCPT", "currency": "ETH", - "min_size": "2.91378687", + "min_size": "5.26315789", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BCPT" @@ -2098,7 +2098,7 @@ { "asset": "TRX", "currency": "BTC", - "min_size": "0.00000001", + "min_size": "49.50495050", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TRX" @@ -2106,7 +2106,7 @@ { "asset": "TRX", "currency": "ETH", - "min_size": "0.00000001", + "min_size": "59.10165485", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TRX" @@ -2114,7 +2114,7 @@ { "asset": "TUSD", "currency": "BTC", - "min_size": "0.00000001", + "min_size": "2.01938611", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TUSD" @@ -2122,7 +2122,7 @@ { "asset": "LRC", "currency": "BTC", - "min_size": "0.00000001", + "min_size": "4.93291239", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LRC" @@ -2130,7 +2130,7 @@ { "asset": "LRC", "currency": "ETH", - "min_size": "0.00000001", + "min_size": "5.99182715", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LRC" @@ -2138,7 +2138,7 @@ { "asset": "TUSD", "currency": "ETH", - "min_size": "0.00000001", + "min_size": "2.46502135", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TUSD" @@ -2146,7 +2146,7 @@ { "asset": "UP", "currency": "BTC", - "min_size": "0.00000001", + "min_size": "10.09693053", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UP" @@ -2154,7 +2154,7 @@ { "asset": "UP", "currency": "ETH", - "min_size": "0.00000001", + "min_size": "11.96802145", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/UP" From 378c98158a46ae1f7871dfd40b35aa8f60e2d0ac Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 28 Mar 2018 11:09:32 +0000 Subject: [PATCH 39/74] Exchanges: update-products 908 --- extensions/exchanges/binance/products.json | 30 ++++++++++++++++++++++ extensions/exchanges/bittrex/products.json | 16 ++++++++++++ 2 files changed, 46 insertions(+) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index 86a5ae3e42..ff149f925c 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2918,5 +2918,35 @@ "increment": "0.00000001", "asset_increment": "1.", "label": "QLC/ETH" + }, + { + "id": "SYSBTC", + "asset": "SYS", + "currency": "BTC", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "SYS/BTC" + }, + { + "id": "SYSETH", + "asset": "SYS", + "currency": "ETH", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "SYS/ETH" + }, + { + "id": "SYSBNB", + "asset": "SYS", + "currency": "BNB", + "min_size": "0.01000000", + "max_size": "10000.00000000", + "increment": "0.00001", + "asset_increment": "0.01", + "label": "SYS/BNB" } ] \ No newline at end of file diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index da2338ad91..68f3838d81 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -2158,5 +2158,21 @@ "max_size": "1000000", "increment": "0.00000001", "label": "ETH/UP" + }, + { + "asset": "DMT", + "currency": "BTC", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "BTC/DMT" + }, + { + "asset": "DMT", + "currency": "ETH", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "ETH/DMT" } ] \ No newline at end of file From 7cbe04fe38f0f6fe62269bfa62c91d15e2836a1d Mon Sep 17 00:00:00 2001 From: Travis CI Date: Thu, 29 Mar 2018 11:09:48 +0000 Subject: [PATCH 40/74] Exchanges: update-products 910 --- extensions/exchanges/binance/products.json | 20 ++++++++++++ extensions/exchanges/bitfinex/products.json | 34 ++++++++++----------- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index ff149f925c..7f4d934bff 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2899,6 +2899,26 @@ "asset_increment": "0.01", "label": "WAN/BNB" }, + { + "id": "WPRBTC", + "asset": "WPR", + "currency": "BTC", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "WPR/BTC" + }, + { + "id": "WPRETH", + "asset": "WPR", + "currency": "ETH", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "WPR/ETH" + }, { "id": "QLCBTC", "asset": "QLC", diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index e7013ceb13..c9197962a4 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -130,7 +130,7 @@ { "asset": "XRP", "currency": "USD", - "min_size": "16.0", + "min_size": "18.0", "max_size": "200000.0", "increment": "0.00001", "label": "XRP/USD" @@ -138,7 +138,7 @@ { "asset": "XRP", "currency": "BTC", - "min_size": "16.0", + "min_size": "18.0", "max_size": "200000.0", "increment": "0.00000001", "label": "XRP/BTC" @@ -338,7 +338,7 @@ { "asset": "AVT", "currency": "USD", - "min_size": "8.0", + "min_size": "10.0", "max_size": "50000.0", "increment": "0.00001", "label": "AVT/USD" @@ -346,7 +346,7 @@ { "asset": "AVT", "currency": "BTC", - "min_size": "8.0", + "min_size": "10.0", "max_size": "50000.0", "increment": "0.00000001", "label": "AVT/BTC" @@ -354,7 +354,7 @@ { "asset": "AVT", "currency": "ETH", - "min_size": "8.0", + "min_size": "10.0", "max_size": "50000.0", "increment": "0.00000001", "label": "AVT/ETH" @@ -402,7 +402,7 @@ { "asset": "DAT", "currency": "USD", - "min_size": "148.0", + "min_size": "160.0", "max_size": "250000.0", "increment": "0.0000001", "label": "DAT/USD" @@ -410,7 +410,7 @@ { "asset": "DAT", "currency": "BTC", - "min_size": "148.0", + "min_size": "160.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/BTC" @@ -418,7 +418,7 @@ { "asset": "DAT", "currency": "ETH", - "min_size": "148.0", + "min_size": "160.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/ETH" @@ -554,7 +554,7 @@ { "asset": "MNA", "currency": "USD", - "min_size": "120.0", + "min_size": "124.0", "max_size": "200000.0", "increment": "0.000001", "label": "MNA/USD" @@ -562,7 +562,7 @@ { "asset": "MNA", "currency": "BTC", - "min_size": "120.0", + "min_size": "124.0", "max_size": "200000.0", "increment": "0.000000001", "label": "MNA/BTC" @@ -570,7 +570,7 @@ { "asset": "MNA", "currency": "ETH", - "min_size": "120.0", + "min_size": "124.0", "max_size": "200000.0", "increment": "0.000000001", "label": "MNA/ETH" @@ -650,7 +650,7 @@ { "asset": "SPK", "currency": "USD", - "min_size": "76.0", + "min_size": "78.0", "max_size": "200000.0", "increment": "0.000001", "label": "SPK/USD" @@ -658,7 +658,7 @@ { "asset": "SPK", "currency": "BTC", - "min_size": "76.0", + "min_size": "78.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SPK/BTC" @@ -666,7 +666,7 @@ { "asset": "SPK", "currency": "ETH", - "min_size": "76.0", + "min_size": "78.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SPK/ETH" @@ -746,7 +746,7 @@ { "asset": "AID", "currency": "USD", - "min_size": "54.0", + "min_size": "60.0", "max_size": "200000.0", "increment": "0.000001", "label": "AID/USD" @@ -754,7 +754,7 @@ { "asset": "AID", "currency": "BTC", - "min_size": "54.0", + "min_size": "60.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/BTC" @@ -762,7 +762,7 @@ { "asset": "AID", "currency": "ETH", - "min_size": "54.0", + "min_size": "60.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/ETH" From a79472c9223f241812262ee5366b72b80ba76851 Mon Sep 17 00:00:00 2001 From: defkev Date: Thu, 29 Mar 2018 21:40:01 +0200 Subject: [PATCH 41/74] Fix: --min_prev_trades gets parsed as bool instead of number (#1531) --- commands/trade.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commands/trade.js b/commands/trade.js index c3baa43444..2a2c272aef 100644 --- a/commands/trade.js +++ b/commands/trade.js @@ -50,7 +50,7 @@ module.exports = function (program, conf) { .option('--exact_buy_orders', 'instead of only adjusting maker buy when the price goes up, adjust it if price has changed at all') .option('--exact_sell_orders', 'instead of only adjusting maker sell when the price goes down, adjust it if price has changed at all') .option('--use_prev_trades', 'load and use previous trades for stop-order triggers and loss protection') - .option('--min_prev_trades', 'minimum number of previous trades to load if use_prev_trades is enabled, set to 0 to disable and use trade time instead') + .option('--min_prev_trades ', 'minimum number of previous trades to load if use_prev_trades is enabled, set to 0 to disable and use trade time instead', Number, conf.min_prev_trades) .option('--disable_stats', 'disable printing order stats') .option('--reset_profit', 'start new profit calculation from 0') .option('--use_fee_asset', 'Using separated asset to pay for fees. Such as binance\'s BNB or Huobi\'s HT', Boolean, false) @@ -78,7 +78,7 @@ module.exports = function (program, conf) { so.currency_increment = cmd.currency_increment so.keep_lookback_periods = cmd.keep_lookback_periods so.use_prev_trades = (cmd.use_prev_trades||conf.use_prev_trades) - so.min_prev_trades = parseInt(cmd.min_prev_trades||conf.min_prev_trades) + so.min_prev_trades = cmd.min_prev_trades so.debug = cmd.debug so.stats = !cmd.disable_stats so.mode = so.paper ? 'paper' : 'live' From bdec85ef4ed5b7f2d7fbea2f0c59f33dfb19dfb9 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Fri, 30 Mar 2018 11:09:19 +0000 Subject: [PATCH 42/74] Exchanges: update-products 914 --- extensions/exchanges/bitfinex/products.json | 194 +++++++++++++++----- extensions/exchanges/bittrex/products.json | 8 + 2 files changed, 157 insertions(+), 45 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index c9197962a4..1785a7ff48 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -74,7 +74,7 @@ { "asset": "ZEC", "currency": "USD", - "min_size": "0.04", + "min_size": "0.06", "max_size": "20000.0", "increment": "0.001", "label": "ZEC/USD" @@ -82,7 +82,7 @@ { "asset": "ZEC", "currency": "BTC", - "min_size": "0.04", + "min_size": "0.06", "max_size": "20000.0", "increment": "0.000001", "label": "ZEC/BTC" @@ -106,7 +106,7 @@ { "asset": "DSH", "currency": "USD", - "min_size": "0.02", + "min_size": "0.04", "max_size": "5000.0", "increment": "0.001", "label": "DSH/USD" @@ -114,7 +114,7 @@ { "asset": "DSH", "currency": "BTC", - "min_size": "0.02", + "min_size": "0.04", "max_size": "5000.0", "increment": "0.000001", "label": "DSH/BTC" @@ -127,10 +127,18 @@ "increment": "0.000001", "label": "BTC/EUR" }, + { + "asset": "BTC", + "currency": "JPY", + "min_size": "0.002", + "max_size": "2000.0", + "increment": "0.000001", + "label": "BTC/JPY" + }, { "asset": "XRP", "currency": "USD", - "min_size": "18.0", + "min_size": "20.0", "max_size": "200000.0", "increment": "0.00001", "label": "XRP/USD" @@ -138,7 +146,7 @@ { "asset": "XRP", "currency": "BTC", - "min_size": "18.0", + "min_size": "20.0", "max_size": "200000.0", "increment": "0.00000001", "label": "XRP/BTC" @@ -194,7 +202,7 @@ { "asset": "SAN", "currency": "USD", - "min_size": "8.0", + "min_size": "10.0", "max_size": "200000.0", "increment": "0.00001", "label": "SAN/USD" @@ -202,7 +210,7 @@ { "asset": "SAN", "currency": "BTC", - "min_size": "8.0", + "min_size": "10.0", "max_size": "200000.0", "increment": "0.00000001", "label": "SAN/BTC" @@ -210,7 +218,7 @@ { "asset": "SAN", "currency": "ETH", - "min_size": "8.0", + "min_size": "10.0", "max_size": "200000.0", "increment": "0.00000001", "label": "SAN/ETH" @@ -402,7 +410,7 @@ { "asset": "DAT", "currency": "USD", - "min_size": "160.0", + "min_size": "182.0", "max_size": "250000.0", "increment": "0.0000001", "label": "DAT/USD" @@ -410,7 +418,7 @@ { "asset": "DAT", "currency": "BTC", - "min_size": "160.0", + "min_size": "182.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/BTC" @@ -418,7 +426,7 @@ { "asset": "DAT", "currency": "ETH", - "min_size": "160.0", + "min_size": "182.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/ETH" @@ -498,7 +506,7 @@ { "asset": "SNT", "currency": "USD", - "min_size": "112.0", + "min_size": "118.0", "max_size": "200000.0", "increment": "0.000001", "label": "SNT/USD" @@ -506,7 +514,7 @@ { "asset": "SNT", "currency": "BTC", - "min_size": "112.0", + "min_size": "118.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/BTC" @@ -514,7 +522,7 @@ { "asset": "SNT", "currency": "ETH", - "min_size": "112.0", + "min_size": "118.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/ETH" @@ -530,7 +538,7 @@ { "asset": "BAT", "currency": "USD", - "min_size": "52.0", + "min_size": "54.0", "max_size": "200000.0", "increment": "0.000001", "label": "BAT/USD" @@ -538,7 +546,7 @@ { "asset": "BAT", "currency": "BTC", - "min_size": "52.0", + "min_size": "54.0", "max_size": "200000.0", "increment": "0.000000001", "label": "BAT/BTC" @@ -546,7 +554,7 @@ { "asset": "BAT", "currency": "ETH", - "min_size": "52.0", + "min_size": "54.0", "max_size": "200000.0", "increment": "0.000000001", "label": "BAT/ETH" @@ -554,31 +562,31 @@ { "asset": "MNA", "currency": "USD", - "min_size": "124.0", + "min_size": "144.0", "max_size": "200000.0", - "increment": "0.000001", + "increment": "0.0000001", "label": "MNA/USD" }, { "asset": "MNA", "currency": "BTC", - "min_size": "124.0", + "min_size": "144.0", "max_size": "200000.0", - "increment": "0.000000001", + "increment": "0.0000000001", "label": "MNA/BTC" }, { "asset": "MNA", "currency": "ETH", - "min_size": "124.0", + "min_size": "144.0", "max_size": "200000.0", - "increment": "0.000000001", + "increment": "0.0000000001", "label": "MNA/ETH" }, { "asset": "FUN", "currency": "USD", - "min_size": "282.0", + "min_size": "308.0", "max_size": "200000.0", "increment": "0.0000001", "label": "FUN/USD" @@ -586,7 +594,7 @@ { "asset": "FUN", "currency": "BTC", - "min_size": "282.0", + "min_size": "308.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/BTC" @@ -594,7 +602,7 @@ { "asset": "FUN", "currency": "ETH", - "min_size": "282.0", + "min_size": "308.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/ETH" @@ -650,7 +658,7 @@ { "asset": "SPK", "currency": "USD", - "min_size": "78.0", + "min_size": "88.0", "max_size": "200000.0", "increment": "0.000001", "label": "SPK/USD" @@ -658,7 +666,7 @@ { "asset": "SPK", "currency": "BTC", - "min_size": "78.0", + "min_size": "88.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SPK/BTC" @@ -666,7 +674,7 @@ { "asset": "SPK", "currency": "ETH", - "min_size": "78.0", + "min_size": "88.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SPK/ETH" @@ -698,7 +706,7 @@ { "asset": "RCN", "currency": "USD", - "min_size": "112.0", + "min_size": "120.0", "max_size": "200000.0", "increment": "0.000001", "label": "RCN/USD" @@ -706,7 +714,7 @@ { "asset": "RCN", "currency": "BTC", - "min_size": "112.0", + "min_size": "120.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/BTC" @@ -714,7 +722,7 @@ { "asset": "RCN", "currency": "ETH", - "min_size": "112.0", + "min_size": "120.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/ETH" @@ -722,7 +730,7 @@ { "asset": "RLC", "currency": "USD", - "min_size": "10.0", + "min_size": "12.0", "max_size": "25000.0", "increment": "0.00001", "label": "RLC/USD" @@ -730,7 +738,7 @@ { "asset": "RLC", "currency": "BTC", - "min_size": "10.0", + "min_size": "12.0", "max_size": "25000.0", "increment": "0.00000001", "label": "RLC/BTC" @@ -738,7 +746,7 @@ { "asset": "RLC", "currency": "ETH", - "min_size": "10.0", + "min_size": "12.0", "max_size": "25000.0", "increment": "0.00000001", "label": "RLC/ETH" @@ -746,7 +754,7 @@ { "asset": "AID", "currency": "USD", - "min_size": "60.0", + "min_size": "68.0", "max_size": "200000.0", "increment": "0.000001", "label": "AID/USD" @@ -754,7 +762,7 @@ { "asset": "AID", "currency": "BTC", - "min_size": "60.0", + "min_size": "68.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/BTC" @@ -762,7 +770,7 @@ { "asset": "AID", "currency": "ETH", - "min_size": "60.0", + "min_size": "68.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/ETH" @@ -770,7 +778,7 @@ { "asset": "SNG", "currency": "USD", - "min_size": "170.0", + "min_size": "188.0", "max_size": "200000.0", "increment": "0.0000001", "label": "SNG/USD" @@ -778,7 +786,7 @@ { "asset": "SNG", "currency": "BTC", - "min_size": "170.0", + "min_size": "188.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "SNG/BTC" @@ -786,7 +794,7 @@ { "asset": "SNG", "currency": "ETH", - "min_size": "170.0", + "min_size": "188.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "SNG/ETH" @@ -818,7 +826,7 @@ { "asset": "ELF", "currency": "USD", - "min_size": "18.0", + "min_size": "20.0", "max_size": "25000.0", "increment": "0.00001", "label": "ELF/USD" @@ -826,7 +834,7 @@ { "asset": "ELF", "currency": "BTC", - "min_size": "18.0", + "min_size": "20.0", "max_size": "25000.0", "increment": "0.00000001", "label": "ELF/BTC" @@ -834,9 +842,105 @@ { "asset": "ELF", "currency": "ETH", - "min_size": "18.0", + "min_size": "20.0", "max_size": "25000.0", "increment": "0.00000001", "label": "ELF/ETH" + }, + { + "asset": "BTC", + "currency": "GBP", + "min_size": "0.002", + "max_size": "2000.0", + "increment": "0.000001", + "label": "BTC/GBP" + }, + { + "asset": "ETH", + "currency": "EUR", + "min_size": "0.02", + "max_size": "2000.0", + "increment": "0.000001", + "label": "ETH/EUR" + }, + { + "asset": "ETH", + "currency": "JPY", + "min_size": "0.02", + "max_size": "2000.0", + "increment": "0.000001", + "label": "ETH/JPY" + }, + { + "asset": "ETH", + "currency": "GBP", + "min_size": "0.02", + "max_size": "2000.0", + "increment": "0.000001", + "label": "ETH/GBP" + }, + { + "asset": "NEO", + "currency": "EUR", + "min_size": "0.2", + "max_size": "2000.0", + "increment": "0.0000001", + "label": "NEO/EUR" + }, + { + "asset": "NEO", + "currency": "JPY", + "min_size": "0.2", + "max_size": "2000.0", + "increment": "0.0000001", + "label": "NEO/JPY" + }, + { + "asset": "NEO", + "currency": "GBP", + "min_size": "0.2", + "max_size": "2000.0", + "increment": "0.0000001", + "label": "NEO/GBP" + }, + { + "asset": "EOS", + "currency": "EUR", + "min_size": "2.0", + "max_size": "2000.0", + "increment": "0.00000001", + "label": "EOS/EUR" + }, + { + "asset": "EOS", + "currency": "JPY", + "min_size": "2.0", + "max_size": "2000.0", + "increment": "0.00000001", + "label": "EOS/JPY" + }, + { + "asset": "EOS", + "currency": "GBP", + "min_size": "2.0", + "max_size": "2000.0", + "increment": "0.00000001", + "label": "EOS/GBP" + }, + { + "asset": "IOT", + "currency": "JPY", + "min_size": "10.0", + "max_size": "2000.0", + "increment": "0.00000001", + "label": "IOT/JPY" + }, + { + "asset": "IOT", + "currency": "GBP", + "min_size": "10.0", + "max_size": "2000.0", + "increment": "0.00000001", + "label": "IOT/GBP" } ] \ No newline at end of file diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index 68f3838d81..9855603823 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -2174,5 +2174,13 @@ "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DMT" + }, + { + "asset": "TUSD", + "currency": "USDT", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "USDT/TUSD" } ] \ No newline at end of file From 595a0b1e04be3f25edad319f1abc62b66f6dcc82 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Sat, 31 Mar 2018 11:11:54 +0000 Subject: [PATCH 43/74] Exchanges: update-products 916 --- extensions/exchanges/bitfinex/products.json | 48 ++++++++++----------- extensions/exchanges/bittrex/products.json | 24 ----------- 2 files changed, 24 insertions(+), 48 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index 1785a7ff48..39e0e1bf9e 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -410,7 +410,7 @@ { "asset": "DAT", "currency": "USD", - "min_size": "182.0", + "min_size": "190.0", "max_size": "250000.0", "increment": "0.0000001", "label": "DAT/USD" @@ -418,7 +418,7 @@ { "asset": "DAT", "currency": "BTC", - "min_size": "182.0", + "min_size": "190.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/BTC" @@ -426,7 +426,7 @@ { "asset": "DAT", "currency": "ETH", - "min_size": "182.0", + "min_size": "190.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/ETH" @@ -482,7 +482,7 @@ { "asset": "GNT", "currency": "USD", - "min_size": "46.0", + "min_size": "52.0", "max_size": "200000.0", "increment": "0.000001", "label": "GNT/USD" @@ -490,7 +490,7 @@ { "asset": "GNT", "currency": "BTC", - "min_size": "46.0", + "min_size": "52.0", "max_size": "200000.0", "increment": "0.000000001", "label": "GNT/BTC" @@ -498,7 +498,7 @@ { "asset": "GNT", "currency": "ETH", - "min_size": "46.0", + "min_size": "52.0", "max_size": "200000.0", "increment": "0.000000001", "label": "GNT/ETH" @@ -562,7 +562,7 @@ { "asset": "MNA", "currency": "USD", - "min_size": "144.0", + "min_size": "148.0", "max_size": "200000.0", "increment": "0.0000001", "label": "MNA/USD" @@ -570,7 +570,7 @@ { "asset": "MNA", "currency": "BTC", - "min_size": "144.0", + "min_size": "148.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "MNA/BTC" @@ -578,7 +578,7 @@ { "asset": "MNA", "currency": "ETH", - "min_size": "144.0", + "min_size": "148.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "MNA/ETH" @@ -586,7 +586,7 @@ { "asset": "FUN", "currency": "USD", - "min_size": "308.0", + "min_size": "334.0", "max_size": "200000.0", "increment": "0.0000001", "label": "FUN/USD" @@ -594,7 +594,7 @@ { "asset": "FUN", "currency": "BTC", - "min_size": "308.0", + "min_size": "334.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/BTC" @@ -602,7 +602,7 @@ { "asset": "FUN", "currency": "ETH", - "min_size": "308.0", + "min_size": "334.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/ETH" @@ -658,7 +658,7 @@ { "asset": "SPK", "currency": "USD", - "min_size": "88.0", + "min_size": "92.0", "max_size": "200000.0", "increment": "0.000001", "label": "SPK/USD" @@ -666,7 +666,7 @@ { "asset": "SPK", "currency": "BTC", - "min_size": "88.0", + "min_size": "92.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SPK/BTC" @@ -674,7 +674,7 @@ { "asset": "SPK", "currency": "ETH", - "min_size": "88.0", + "min_size": "92.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SPK/ETH" @@ -706,7 +706,7 @@ { "asset": "RCN", "currency": "USD", - "min_size": "120.0", + "min_size": "124.0", "max_size": "200000.0", "increment": "0.000001", "label": "RCN/USD" @@ -714,7 +714,7 @@ { "asset": "RCN", "currency": "BTC", - "min_size": "120.0", + "min_size": "124.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/BTC" @@ -722,7 +722,7 @@ { "asset": "RCN", "currency": "ETH", - "min_size": "120.0", + "min_size": "124.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/ETH" @@ -754,7 +754,7 @@ { "asset": "AID", "currency": "USD", - "min_size": "68.0", + "min_size": "74.0", "max_size": "200000.0", "increment": "0.000001", "label": "AID/USD" @@ -762,7 +762,7 @@ { "asset": "AID", "currency": "BTC", - "min_size": "68.0", + "min_size": "74.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/BTC" @@ -770,7 +770,7 @@ { "asset": "AID", "currency": "ETH", - "min_size": "68.0", + "min_size": "74.0", "max_size": "200000.0", "increment": "0.000000001", "label": "AID/ETH" @@ -778,7 +778,7 @@ { "asset": "SNG", "currency": "USD", - "min_size": "188.0", + "min_size": "192.0", "max_size": "200000.0", "increment": "0.0000001", "label": "SNG/USD" @@ -786,7 +786,7 @@ { "asset": "SNG", "currency": "BTC", - "min_size": "188.0", + "min_size": "190.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "SNG/BTC" @@ -794,7 +794,7 @@ { "asset": "SNG", "currency": "ETH", - "min_size": "188.0", + "min_size": "190.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "SNG/ETH" diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index 9855603823..96b5611ee2 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -231,14 +231,6 @@ "increment": "0.00000001", "label": "BTC/CLOAK" }, - { - "asset": "START", - "currency": "BTC", - "min_size": "116.82242991", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/START" - }, { "asset": "KORE", "currency": "BTC", @@ -415,14 +407,6 @@ "increment": "0.00000001", "label": "BTC/BAY" }, - { - "asset": "FAIR", - "currency": "BTC", - "min_size": "10.03613007", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/FAIR" - }, { "asset": "SPR", "currency": "BTC", @@ -671,14 +655,6 @@ "increment": "0.00000001", "label": "USDT/BTC" }, - { - "asset": "CLUB", - "currency": "BTC", - "min_size": "4.61084471", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/CLUB" - }, { "asset": "RVR", "currency": "BTC", From 0e155d803d9f3baa6ed029001831cfc3d73ac73a Mon Sep 17 00:00:00 2001 From: Travis CI Date: Sun, 1 Apr 2018 11:11:12 +0000 Subject: [PATCH 44/74] Exchanges: update-products 918 --- extensions/exchanges/bitfinex/products.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index 39e0e1bf9e..169c7d3507 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -410,7 +410,7 @@ { "asset": "DAT", "currency": "USD", - "min_size": "190.0", + "min_size": "194.0", "max_size": "250000.0", "increment": "0.0000001", "label": "DAT/USD" @@ -418,7 +418,7 @@ { "asset": "DAT", "currency": "BTC", - "min_size": "190.0", + "min_size": "194.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/BTC" @@ -426,7 +426,7 @@ { "asset": "DAT", "currency": "ETH", - "min_size": "190.0", + "min_size": "194.0", "max_size": "250000.0", "increment": "0.0000000001", "label": "DAT/ETH" From 868d275f95e770dbd4eff9581fbad906828669ae Mon Sep 17 00:00:00 2001 From: Travis CI Date: Mon, 2 Apr 2018 11:12:18 +0000 Subject: [PATCH 45/74] Exchanges: update-products 920 --- extensions/exchanges/binance/products.json | 10 ++++++ extensions/exchanges/bitfinex/products.json | 38 ++++++++++----------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index 7f4d934bff..a10a0b12da 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2968,5 +2968,15 @@ "increment": "0.00001", "asset_increment": "0.01", "label": "SYS/BNB" + }, + { + "id": "QLCBNB", + "asset": "QLC", + "currency": "BNB", + "min_size": "0.01000000", + "max_size": "10000.00000000", + "increment": "0.00001", + "asset_increment": "0.01", + "label": "QLC/BNB" } ] \ No newline at end of file diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index 169c7d3507..24a4883420 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -42,7 +42,7 @@ { "asset": "ETC", "currency": "BTC", - "min_size": "0.6", + "min_size": "0.8", "max_size": "100000.0", "increment": "0.0000001", "label": "ETC/BTC" @@ -50,7 +50,7 @@ { "asset": "ETC", "currency": "USD", - "min_size": "0.6", + "min_size": "0.8", "max_size": "100000.0", "increment": "0.0001", "label": "ETC/USD" @@ -138,7 +138,7 @@ { "asset": "XRP", "currency": "USD", - "min_size": "20.0", + "min_size": "22.0", "max_size": "200000.0", "increment": "0.00001", "label": "XRP/USD" @@ -146,7 +146,7 @@ { "asset": "XRP", "currency": "BTC", - "min_size": "20.0", + "min_size": "22.0", "max_size": "200000.0", "increment": "0.00000001", "label": "XRP/BTC" @@ -298,7 +298,7 @@ { "asset": "ETP", "currency": "USD", - "min_size": "14.0", + "min_size": "16.0", "max_size": "10000.0", "increment": "0.00001", "label": "ETP/USD" @@ -306,7 +306,7 @@ { "asset": "ETP", "currency": "BTC", - "min_size": "14.0", + "min_size": "16.0", "max_size": "10000.0", "increment": "0.00000001", "label": "ETP/BTC" @@ -314,7 +314,7 @@ { "asset": "ETP", "currency": "ETH", - "min_size": "14.0", + "min_size": "16.0", "max_size": "10000.0", "increment": "0.00000001", "label": "ETP/ETH" @@ -506,7 +506,7 @@ { "asset": "SNT", "currency": "USD", - "min_size": "118.0", + "min_size": "120.0", "max_size": "200000.0", "increment": "0.000001", "label": "SNT/USD" @@ -514,7 +514,7 @@ { "asset": "SNT", "currency": "BTC", - "min_size": "118.0", + "min_size": "120.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/BTC" @@ -522,7 +522,7 @@ { "asset": "SNT", "currency": "ETH", - "min_size": "118.0", + "min_size": "120.0", "max_size": "200000.0", "increment": "0.000000001", "label": "SNT/ETH" @@ -562,7 +562,7 @@ { "asset": "MNA", "currency": "USD", - "min_size": "148.0", + "min_size": "150.0", "max_size": "200000.0", "increment": "0.0000001", "label": "MNA/USD" @@ -570,7 +570,7 @@ { "asset": "MNA", "currency": "BTC", - "min_size": "148.0", + "min_size": "150.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "MNA/BTC" @@ -578,7 +578,7 @@ { "asset": "MNA", "currency": "ETH", - "min_size": "148.0", + "min_size": "150.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "MNA/ETH" @@ -586,7 +586,7 @@ { "asset": "FUN", "currency": "USD", - "min_size": "334.0", + "min_size": "338.0", "max_size": "200000.0", "increment": "0.0000001", "label": "FUN/USD" @@ -594,7 +594,7 @@ { "asset": "FUN", "currency": "BTC", - "min_size": "334.0", + "min_size": "338.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/BTC" @@ -602,7 +602,7 @@ { "asset": "FUN", "currency": "ETH", - "min_size": "334.0", + "min_size": "338.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "FUN/ETH" @@ -706,7 +706,7 @@ { "asset": "RCN", "currency": "USD", - "min_size": "124.0", + "min_size": "130.0", "max_size": "200000.0", "increment": "0.000001", "label": "RCN/USD" @@ -714,7 +714,7 @@ { "asset": "RCN", "currency": "BTC", - "min_size": "124.0", + "min_size": "130.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/BTC" @@ -722,7 +722,7 @@ { "asset": "RCN", "currency": "ETH", - "min_size": "124.0", + "min_size": "130.0", "max_size": "200000.0", "increment": "0.000000001", "label": "RCN/ETH" From aa397fca287fda6038f691dac51a66f429a1fc4a Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Wed, 4 Apr 2018 10:17:01 +0200 Subject: [PATCH 46/74] fix(package): update pushbullet to version 2.2.0 (#1534) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d3bba64d4c..cbfa73b594 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "popper.js": "^1.12.9", "postcss-loader": "^2.0.9", "progress": "^2.0.0", - "pushbullet": "2.1.0", + "pushbullet": "2.2.0", "pusher-js": "^4.1.0", "quadrigacx": "0.0.7", "random-port": "^0.1.0", From 14111d12ba48405e99303c56ebc0818b9f8835bf Mon Sep 17 00:00:00 2001 From: Pawel Ratajczak Date: Wed, 4 Apr 2018 09:22:27 +0100 Subject: [PATCH 47/74] Don't require unused mathjs (#1533) * add docker mount for forex_analytics models (#1369) * Don't require unused mathjs --- extensions/strategies/neural/strategy.js | 1 - 1 file changed, 1 deletion(-) diff --git a/extensions/strategies/neural/strategy.js b/extensions/strategies/neural/strategy.js index 1549f5e8ae..8acd8ea50c 100644 --- a/extensions/strategies/neural/strategy.js +++ b/extensions/strategies/neural/strategy.js @@ -1,7 +1,6 @@ let convnetjs = require('convnetjs') , z = require('zero-fill') , n = require('numbro') - , math = require('mathjs') , ema = require('../../../lib/ema') , Phenotypes = require('../../../lib/phenotype') const cluster = require('cluster') From e115f5cc8db926b8060c480382e3a3c9f02b23ce Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 4 Apr 2018 11:13:18 +0000 Subject: [PATCH 48/74] Exchanges: update-products 930 --- extensions/exchanges/binance/products.json | 20 ++++++++++++++++++++ package-lock.json | 15 ++++++++------- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index a10a0b12da..6e1103f2c9 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2978,5 +2978,25 @@ "increment": "0.00001", "asset_increment": "0.01", "label": "QLC/BNB" + }, + { + "id": "GRSBTC", + "asset": "GRS", + "currency": "BTC", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "GRS/BTC" + }, + { + "id": "GRSETH", + "asset": "GRS", + "currency": "ETH", + "min_size": "1.00000000", + "max_size": "100000.00000000", + "increment": "0.00000001", + "asset_increment": "1.", + "label": "GRS/ETH" } ] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e44d15208b..c26cd93d01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10531,21 +10531,22 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "pushbullet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pushbullet/-/pushbullet-2.1.0.tgz", - "integrity": "sha512-kRuNGNIVVgZCNCL+27C7PDT/AYOluykgIr2azwDHY4Ne7EM1za/bM2tPOecNQPRCDr0Ix/1+F75HyijSV3aEQA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pushbullet/-/pushbullet-2.2.0.tgz", + "integrity": "sha512-ZzFHj9w8Wv5+472QM5F8wASBQBwsrG6vmxxW7f2mMMygYoAdPDhgq1755kfc9n0SPFNZ/2cHMfhja8t+jUOSGQ==", "requires": { - "clone": "2.1.1", + "clone": "2.1.2", "mime": "1.6.0", "node-forge": "0.7.4", "request": "2.83.0", + "request-promise-native": "1.0.5", "websocket": "1.0.25" }, "dependencies": { "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" }, "mime": { "version": "1.6.0", From 469e44cf48ba1faeb0aae46736237adb0b047e63 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Fri, 6 Apr 2018 11:13:15 +0000 Subject: [PATCH 49/74] Exchanges: update-products 935 --- extensions/exchanges/poloniex/products.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/exchanges/poloniex/products.json b/extensions/exchanges/poloniex/products.json index 47c6e15610..fc11f9502c 100644 --- a/extensions/exchanges/poloniex/products.json +++ b/extensions/exchanges/poloniex/products.json @@ -69,7 +69,7 @@ "min_total": "0.0001", "max_size": null, "increment": "0.00000001", - "label": "Bela/Bitcoin" + "label": "Bela Legacy/Bitcoin" }, { "asset": "BLK", From 3fc247963a18afcb1a06e404c435267bf084d792 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Sat, 7 Apr 2018 11:15:48 +0000 Subject: [PATCH 50/74] Exchanges: update-products 940 --- extensions/exchanges/bitfinex/products.json | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index 24a4883420..43e2ba3a9c 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -859,7 +859,7 @@ "asset": "ETH", "currency": "EUR", "min_size": "0.02", - "max_size": "2000.0", + "max_size": "5000.0", "increment": "0.000001", "label": "ETH/EUR" }, @@ -867,7 +867,7 @@ "asset": "ETH", "currency": "JPY", "min_size": "0.02", - "max_size": "2000.0", + "max_size": "5000.0", "increment": "0.000001", "label": "ETH/JPY" }, @@ -875,7 +875,7 @@ "asset": "ETH", "currency": "GBP", "min_size": "0.02", - "max_size": "2000.0", + "max_size": "5000.0", "increment": "0.000001", "label": "ETH/GBP" }, @@ -883,7 +883,7 @@ "asset": "NEO", "currency": "EUR", "min_size": "0.2", - "max_size": "2000.0", + "max_size": "10000.0", "increment": "0.0000001", "label": "NEO/EUR" }, @@ -891,7 +891,7 @@ "asset": "NEO", "currency": "JPY", "min_size": "0.2", - "max_size": "2000.0", + "max_size": "10000.0", "increment": "0.0000001", "label": "NEO/JPY" }, @@ -899,7 +899,7 @@ "asset": "NEO", "currency": "GBP", "min_size": "0.2", - "max_size": "2000.0", + "max_size": "10000.0", "increment": "0.0000001", "label": "NEO/GBP" }, @@ -907,7 +907,7 @@ "asset": "EOS", "currency": "EUR", "min_size": "2.0", - "max_size": "2000.0", + "max_size": "50000.0", "increment": "0.00000001", "label": "EOS/EUR" }, @@ -915,7 +915,7 @@ "asset": "EOS", "currency": "JPY", "min_size": "2.0", - "max_size": "2000.0", + "max_size": "50000.0", "increment": "0.00000001", "label": "EOS/JPY" }, @@ -923,7 +923,7 @@ "asset": "EOS", "currency": "GBP", "min_size": "2.0", - "max_size": "2000.0", + "max_size": "50000.0", "increment": "0.00000001", "label": "EOS/GBP" }, @@ -931,7 +931,7 @@ "asset": "IOT", "currency": "JPY", "min_size": "10.0", - "max_size": "2000.0", + "max_size": "100000.0", "increment": "0.00000001", "label": "IOT/JPY" }, @@ -939,7 +939,7 @@ "asset": "IOT", "currency": "GBP", "min_size": "10.0", - "max_size": "2000.0", + "max_size": "100000.0", "increment": "0.00000001", "label": "IOT/GBP" } From 3e881cc012f9941f95314be94e7b7d239eee529d Mon Sep 17 00:00:00 2001 From: Travis CI Date: Sun, 8 Apr 2018 11:15:54 +0000 Subject: [PATCH 51/74] Exchanges: update-products 942 --- extensions/exchanges/binance/products.json | 20 -- extensions/exchanges/bitfinex/products.json | 294 +++++++++++++++++++- 2 files changed, 291 insertions(+), 23 deletions(-) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index 6e1103f2c9..0c21a781d6 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -479,26 +479,6 @@ "asset_increment": "1.", "label": "XVG/ETH" }, - { - "id": "CTRBTC", - "asset": "CTR", - "currency": "BTC", - "min_size": "1.00000000", - "max_size": "100000.00000000", - "increment": "0.00000001", - "asset_increment": "1.", - "label": "CTR/BTC" - }, - { - "id": "CTRETH", - "asset": "CTR", - "currency": "ETH", - "min_size": "1.00000000", - "max_size": "100000.00000000", - "increment": "0.0000001", - "asset_increment": "1.", - "label": "CTR/ETH" - }, { "id": "SALTBTC", "asset": "SALT", diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index 43e2ba3a9c..21eec5198e 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -346,7 +346,7 @@ { "asset": "AVT", "currency": "USD", - "min_size": "10.0", + "min_size": "12.0", "max_size": "50000.0", "increment": "0.00001", "label": "AVT/USD" @@ -354,7 +354,7 @@ { "asset": "AVT", "currency": "BTC", - "min_size": "10.0", + "min_size": "12.0", "max_size": "50000.0", "increment": "0.00000001", "label": "AVT/BTC" @@ -362,7 +362,7 @@ { "asset": "AVT", "currency": "ETH", - "min_size": "10.0", + "min_size": "12.0", "max_size": "50000.0", "increment": "0.00000001", "label": "AVT/ETH" @@ -942,5 +942,293 @@ "max_size": "100000.0", "increment": "0.00000001", "label": "IOT/GBP" + }, + { + "asset": "IOS", + "currency": "USD", + "min_size": "294.0", + "max_size": "200000.0", + "increment": "0.0000001", + "label": "IOS/USD" + }, + { + "asset": "IOS", + "currency": "BTC", + "min_size": "294.0", + "max_size": "200000.0", + "increment": "0.0000000001", + "label": "IOS/BTC" + }, + { + "asset": "IOS", + "currency": "ETH", + "min_size": "294.0", + "max_size": "200000.0", + "increment": "0.0000000001", + "label": "IOS/ETH" + }, + { + "asset": "AIO", + "currency": "USD", + "min_size": "4.0", + "max_size": "20000.0", + "increment": "0.00001", + "label": "AIO/USD" + }, + { + "asset": "AIO", + "currency": "BTC", + "min_size": "4.0", + "max_size": "20000.0", + "increment": "0.00000001", + "label": "AIO/BTC" + }, + { + "asset": "AIO", + "currency": "ETH", + "min_size": "4.0", + "max_size": "20000.0", + "increment": "0.00000001", + "label": "AIO/ETH" + }, + { + "asset": "REQ", + "currency": "USD", + "min_size": "64.0", + "max_size": "100000.0", + "increment": "0.000001", + "label": "REQ/USD" + }, + { + "asset": "REQ", + "currency": "BTC", + "min_size": "64.0", + "max_size": "100000.0", + "increment": "0.000000001", + "label": "REQ/BTC" + }, + { + "asset": "REQ", + "currency": "ETH", + "min_size": "64.0", + "max_size": "100000.0", + "increment": "0.000000001", + "label": "REQ/ETH" + }, + { + "asset": "RDN", + "currency": "USD", + "min_size": "8.0", + "max_size": "20000.0", + "increment": "0.00001", + "label": "RDN/USD" + }, + { + "asset": "RDN", + "currency": "BTC", + "min_size": "8.0", + "max_size": "20000.0", + "increment": "0.00000001", + "label": "RDN/BTC" + }, + { + "asset": "RDN", + "currency": "ETH", + "min_size": "8.0", + "max_size": "20000.0", + "increment": "0.00000001", + "label": "RDN/ETH" + }, + { + "asset": "LRC", + "currency": "USD", + "min_size": "26.0", + "max_size": "50000.0", + "increment": "0.00001", + "label": "LRC/USD" + }, + { + "asset": "LRC", + "currency": "BTC", + "min_size": "26.0", + "max_size": "50000.0", + "increment": "0.00000001", + "label": "LRC/BTC" + }, + { + "asset": "LRC", + "currency": "ETH", + "min_size": "26.0", + "max_size": "50000.0", + "increment": "0.00000001", + "label": "LRC/ETH" + }, + { + "asset": "WAX", + "currency": "USD", + "min_size": "58.0", + "max_size": "50000.0", + "increment": "0.000001", + "label": "WAX/USD" + }, + { + "asset": "WAX", + "currency": "BTC", + "min_size": "58.0", + "max_size": "50000.0", + "increment": "0.000000001", + "label": "WAX/BTC" + }, + { + "asset": "WAX", + "currency": "ETH", + "min_size": "58.0", + "max_size": "50000.0", + "increment": "0.000000001", + "label": "WAX/ETH" + }, + { + "asset": "DAI", + "currency": "USD", + "min_size": "10.0", + "max_size": "20000.0", + "increment": "0.00001", + "label": "DAI/USD" + }, + { + "asset": "DAI", + "currency": "BTC", + "min_size": "10.0", + "max_size": "20000.0", + "increment": "0.00000001", + "label": "DAI/BTC" + }, + { + "asset": "DAI", + "currency": "ETH", + "min_size": "10.0", + "max_size": "20000.0", + "increment": "0.00000001", + "label": "DAI/ETH" + }, + { + "asset": "CFI", + "currency": "USD", + "min_size": "132.0", + "max_size": "40000.0", + "increment": "0.0000001", + "label": "CFI/USD" + }, + { + "asset": "CFI", + "currency": "BTC", + "min_size": "132.0", + "max_size": "40000.0", + "increment": "0.0000000001", + "label": "CFI/BTC" + }, + { + "asset": "CFI", + "currency": "ETH", + "min_size": "132.0", + "max_size": "40000.0", + "increment": "0.0000000001", + "label": "CFI/ETH" + }, + { + "asset": "AGI", + "currency": "USD", + "min_size": "74.0", + "max_size": "200000.0", + "increment": "0.000001", + "label": "AGI/USD" + }, + { + "asset": "AGI", + "currency": "BTC", + "min_size": "74.0", + "max_size": "200000.0", + "increment": "0.000000001", + "label": "AGI/BTC" + }, + { + "asset": "AGI", + "currency": "ETH", + "min_size": "74.0", + "max_size": "200000.0", + "increment": "0.000000001", + "label": "AGI/ETH" + }, + { + "asset": "BFT", + "currency": "USD", + "min_size": "104.0", + "max_size": "200000.0", + "increment": "0.000001", + "label": "BFT/USD" + }, + { + "asset": "BFT", + "currency": "BTC", + "min_size": "104.0", + "max_size": "200000.0", + "increment": "0.000000001", + "label": "BFT/BTC" + }, + { + "asset": "BFT", + "currency": "ETH", + "min_size": "104.0", + "max_size": "200000.0", + "increment": "0.000000001", + "label": "BFT/ETH" + }, + { + "asset": "MTN", + "currency": "USD", + "min_size": "116.0", + "max_size": "200000.0", + "increment": "0.000001", + "label": "MTN/USD" + }, + { + "asset": "MTN", + "currency": "BTC", + "min_size": "116.0", + "max_size": "200000.0", + "increment": "0.000000001", + "label": "MTN/BTC" + }, + { + "asset": "MTN", + "currency": "ETH", + "min_size": "116.0", + "max_size": "200000.0", + "increment": "0.000000001", + "label": "MTN/ETH" + }, + { + "asset": "ODE", + "currency": "USD", + "min_size": "174.0", + "max_size": "200000.0", + "increment": "0.0000001", + "label": "ODE/USD" + }, + { + "asset": "ODE", + "currency": "BTC", + "min_size": "174.0", + "max_size": "200000.0", + "increment": "0.0000000001", + "label": "ODE/BTC" + }, + { + "asset": "ODE", + "currency": "ETH", + "min_size": "174.0", + "max_size": "200000.0", + "increment": "0.0000000001", + "label": "ODE/ETH" } ] \ No newline at end of file From 5fe160e09ede0fab1580e49ebb47368976a89632 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Mon, 9 Apr 2018 11:14:55 +0000 Subject: [PATCH 52/74] Exchanges: update-products 944 --- extensions/exchanges/bittrex/products.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index 96b5611ee2..23a0d4ea55 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -575,14 +575,6 @@ "increment": "0.00000001", "label": "BTC/SNRG" }, - { - "asset": "PKB", - "currency": "BTC", - "min_size": "14.64557704", - "max_size": "1000000", - "increment": "0.00000001", - "label": "BTC/PKB" - }, { "asset": "AEON", "currency": "BTC", From 171118a5d4518de831a72c662bb5a908ba2e7852 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Tue, 10 Apr 2018 11:16:15 +0000 Subject: [PATCH 53/74] Exchanges: update-products 946 --- extensions/exchanges/bittrex/products.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index 23a0d4ea55..dd57bb98eb 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -2150,5 +2150,21 @@ "max_size": "1000000", "increment": "0.00000001", "label": "USDT/TUSD" + }, + { + "asset": "POLY", + "currency": "BTC", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "BTC/POLY" + }, + { + "asset": "POLY", + "currency": "ETH", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "ETH/POLY" } ] \ No newline at end of file From 9e3d77b254988af7c9019817fb0523fc04ec8e41 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 11 Apr 2018 11:16:23 +0000 Subject: [PATCH 54/74] Exchanges: update-products 948 --- extensions/exchanges/binance/products.json | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index 0c21a781d6..a4e17e0e3f 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -563,10 +563,10 @@ "id": "EOSBTC", "asset": "EOS", "currency": "BTC", - "min_size": "1.00000000", + "min_size": "0.01000000", "max_size": "100000.00000000", - "increment": "0.00000001", - "asset_increment": "1.", + "increment": "0.0000001", + "asset_increment": "0.01", "label": "EOS/BTC" }, { @@ -2743,20 +2743,20 @@ "id": "ONTBTC", "asset": "ONT", "currency": "BTC", - "min_size": "1.00000000", + "min_size": "0.01000000", "max_size": "100000.00000000", - "increment": "0.00000001", - "asset_increment": "1.", + "increment": "0.0000001", + "asset_increment": "0.01", "label": "ONT/BTC" }, { "id": "ONTETH", "asset": "ONT", "currency": "ETH", - "min_size": "1.00000000", + "min_size": "0.01000000", "max_size": "100000.00000000", - "increment": "0.00000001", - "asset_increment": "1.", + "increment": "0.000001", + "asset_increment": "0.01", "label": "ONT/ETH" }, { @@ -2853,20 +2853,20 @@ "id": "WANBTC", "asset": "WAN", "currency": "BTC", - "min_size": "1.00000000", + "min_size": "0.01000000", "max_size": "100000.00000000", - "increment": "0.00000001", - "asset_increment": "1.", + "increment": "0.0000001", + "asset_increment": "0.01", "label": "WAN/BTC" }, { "id": "WANETH", "asset": "WAN", "currency": "ETH", - "min_size": "1.00000000", + "min_size": "0.01000000", "max_size": "100000.00000000", - "increment": "0.00000001", - "asset_increment": "1.", + "increment": "0.000001", + "asset_increment": "0.01", "label": "WAN/ETH" }, { From 0e1c563b44c7e67c02e7ca087d6629e0a22617fd Mon Sep 17 00:00:00 2001 From: Travis CI Date: Thu, 12 Apr 2018 11:16:26 +0000 Subject: [PATCH 55/74] Exchanges: update-products 950 --- extensions/exchanges/bitfinex/products.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index 21eec5198e..76c2c6aa06 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -946,7 +946,7 @@ { "asset": "IOS", "currency": "USD", - "min_size": "294.0", + "min_size": "324.0", "max_size": "200000.0", "increment": "0.0000001", "label": "IOS/USD" @@ -954,7 +954,7 @@ { "asset": "IOS", "currency": "BTC", - "min_size": "294.0", + "min_size": "324.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "IOS/BTC" @@ -962,7 +962,7 @@ { "asset": "IOS", "currency": "ETH", - "min_size": "294.0", + "min_size": "324.0", "max_size": "200000.0", "increment": "0.0000000001", "label": "IOS/ETH" @@ -1114,7 +1114,7 @@ { "asset": "CFI", "currency": "USD", - "min_size": "132.0", + "min_size": "142.0", "max_size": "40000.0", "increment": "0.0000001", "label": "CFI/USD" @@ -1122,7 +1122,7 @@ { "asset": "CFI", "currency": "BTC", - "min_size": "132.0", + "min_size": "142.0", "max_size": "40000.0", "increment": "0.0000000001", "label": "CFI/BTC" @@ -1130,7 +1130,7 @@ { "asset": "CFI", "currency": "ETH", - "min_size": "132.0", + "min_size": "142.0", "max_size": "40000.0", "increment": "0.0000000001", "label": "CFI/ETH" From 834bf55b63a91968ec8d79c331e2ae1fd0217d5e Mon Sep 17 00:00:00 2001 From: Travis CI Date: Tue, 17 Apr 2018 11:18:42 +0000 Subject: [PATCH 56/74] Exchanges: update-products 963 --- extensions/exchanges/binance/products.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index a4e17e0e3f..743d24c43e 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2978,5 +2978,25 @@ "increment": "0.00000001", "asset_increment": "1.", "label": "GRS/ETH" + }, + { + "id": "ADAUSDT", + "asset": "ADA", + "currency": "USDT", + "min_size": "0.01000000", + "max_size": "100000.00000000", + "increment": "0.00001", + "asset_increment": "0.01", + "label": "ADA/USDT" + }, + { + "id": "ADABNB", + "asset": "ADA", + "currency": "BNB", + "min_size": "0.01000000", + "max_size": "10000.00000000", + "increment": "0.00001", + "asset_increment": "0.01", + "label": "ADA/BNB" } ] \ No newline at end of file From 052ca93600a59aa41625423b9ccb39dfa27ea487 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 18 Apr 2018 11:19:20 +0000 Subject: [PATCH 57/74] Exchanges: update-products 969 --- extensions/exchanges/binance/products.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/extensions/exchanges/binance/products.json b/extensions/exchanges/binance/products.json index 743d24c43e..ff378f626c 100644 --- a/extensions/exchanges/binance/products.json +++ b/extensions/exchanges/binance/products.json @@ -2998,5 +2998,25 @@ "increment": "0.00001", "asset_increment": "0.01", "label": "ADA/BNB" + }, + { + "id": "CLOAKBTC", + "asset": "CLOAK", + "currency": "BTC", + "min_size": "0.01000000", + "max_size": "100000.00000000", + "increment": "0.0000001", + "asset_increment": "0.01", + "label": "CLOAK/BTC" + }, + { + "id": "CLOAKETH", + "asset": "CLOAK", + "currency": "ETH", + "min_size": "0.01000000", + "max_size": "100000.00000000", + "increment": "0.000001", + "asset_increment": "0.01", + "label": "CLOAK/ETH" } ] \ No newline at end of file From 8d18eb8e10e6ddba7851ad24af4f6529bef2b862 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Thu, 19 Apr 2018 11:19:11 +0000 Subject: [PATCH 58/74] Exchanges: update-products 973 --- extensions/exchanges/bittrex/products.json | 540 ++++++++++----------- 1 file changed, 270 insertions(+), 270 deletions(-) diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index dd57bb98eb..dadbe02fe7 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -2,7 +2,7 @@ { "asset": "LTC", "currency": "BTC", - "min_size": "0.01385042", + "min_size": "0.01474927", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LTC" @@ -10,7 +10,7 @@ { "asset": "DOGE", "currency": "BTC", - "min_size": "625.00000000", + "min_size": "409.83606557", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DOGE" @@ -18,7 +18,7 @@ { "asset": "VTC", "currency": "BTC", - "min_size": "0.98123872", + "min_size": "0.83458521", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VTC" @@ -26,7 +26,7 @@ { "asset": "PPC", "currency": "BTC", - "min_size": "1.09904603", + "min_size": "1.02978127", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PPC" @@ -34,7 +34,7 @@ { "asset": "FTC", "currency": "BTC", - "min_size": "8.77808989", + "min_size": "8.78734622", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FTC" @@ -42,7 +42,7 @@ { "asset": "RDD", "currency": "BTC", - "min_size": "431.03448276", + "min_size": "297.61904762", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RDD" @@ -50,7 +50,7 @@ { "asset": "NXT", "currency": "BTC", - "min_size": "15.19756839", + "min_size": "10.67919692", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NXT" @@ -58,7 +58,7 @@ { "asset": "DASH", "currency": "BTC", - "min_size": "0.00530167", + "min_size": "0.00513051", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DASH" @@ -66,7 +66,7 @@ { "asset": "POT", "currency": "BTC", - "min_size": "19.08396947", + "min_size": "14.37607821", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/POT" @@ -74,7 +74,7 @@ { "asset": "BLK", "currency": "BTC", - "min_size": "8.51208716", + "min_size": "7.17360115", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BLK" @@ -82,7 +82,7 @@ { "asset": "EMC2", "currency": "BTC", - "min_size": "10.78981442", + "min_size": "6.44163875", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EMC2" @@ -90,7 +90,7 @@ { "asset": "XMY", "currency": "BTC", - "min_size": "320.51282051", + "min_size": "238.09523810", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XMY" @@ -98,7 +98,7 @@ { "asset": "AUR", "currency": "BTC", - "min_size": "1.75426286", + "min_size": "1.86553242", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/AUR" @@ -106,7 +106,7 @@ { "asset": "EFL", "currency": "BTC", - "min_size": "13.93534002", + "min_size": "11.16071429", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EFL" @@ -114,7 +114,7 @@ { "asset": "GLD", "currency": "BTC", - "min_size": "22.50225023", + "min_size": "13.63884343", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GLD" @@ -122,7 +122,7 @@ { "asset": "SLR", "currency": "BTC", - "min_size": "6.04594921", + "min_size": "5.43596434", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SLR" @@ -130,7 +130,7 @@ { "asset": "PTC", "currency": "BTC", - "min_size": "58.13953488", + "min_size": "49.60317460", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PTC" @@ -138,7 +138,7 @@ { "asset": "GRS", "currency": "BTC", - "min_size": "5.22684508", + "min_size": "1.46825630", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GRS" @@ -146,7 +146,7 @@ { "asset": "NLG", "currency": "BTC", - "min_size": "21.07925801", + "min_size": "20.57613169", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NLG" @@ -154,7 +154,7 @@ { "asset": "RBY", "currency": "BTC", - "min_size": "4.82532330", + "min_size": "3.56531660", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RBY" @@ -162,7 +162,7 @@ { "asset": "XWC", "currency": "BTC", - "min_size": "24.29543246", + "min_size": "25.05010020", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XWC" @@ -170,7 +170,7 @@ { "asset": "MONA", "currency": "BTC", - "min_size": "0.58215350", + "min_size": "0.54667512", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MONA" @@ -178,7 +178,7 @@ { "asset": "THC", "currency": "BTC", - "min_size": "37.48125937", + "min_size": "20.39151713", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/THC" @@ -186,7 +186,7 @@ { "asset": "ENRG", "currency": "BTC", - "min_size": "22.14348981", + "min_size": "14.61988304", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ENRG" @@ -194,7 +194,7 @@ { "asset": "ERC", "currency": "BTC", - "min_size": "5.60538117", + "min_size": "4.18900804", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ERC" @@ -202,7 +202,7 @@ { "asset": "VRC", "currency": "BTC", - "min_size": "3.89408100", + "min_size": "3.46933111", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VRC" @@ -210,7 +210,7 @@ { "asset": "CURE", "currency": "BTC", - "min_size": "7.38552437", + "min_size": "5.86992252", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CURE" @@ -218,7 +218,7 @@ { "asset": "XMR", "currency": "BTC", - "min_size": "0.01040421", + "min_size": "0.00893127", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XMR" @@ -226,7 +226,7 @@ { "asset": "CLOAK", "currency": "BTC", - "min_size": "0.34337358", + "min_size": "0.13116612", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CLOAK" @@ -234,7 +234,7 @@ { "asset": "KORE", "currency": "BTC", - "min_size": "0.82004855", + "min_size": "0.68986451", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/KORE" @@ -242,7 +242,7 @@ { "asset": "XDN", "currency": "BTC", - "min_size": "247.52475248", + "min_size": "163.39869281", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XDN" @@ -250,7 +250,7 @@ { "asset": "TRUST", "currency": "BTC", - "min_size": "28.80184332", + "min_size": "21.36752137", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TRUST" @@ -258,7 +258,7 @@ { "asset": "NAV", "currency": "BTC", - "min_size": "1.78443969", + "min_size": "1.60885514", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NAV" @@ -266,7 +266,7 @@ { "asset": "XST", "currency": "BTC", - "min_size": "8.30013280", + "min_size": "7.30780474", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XST" @@ -274,7 +274,7 @@ { "asset": "VIA", "currency": "BTC", - "min_size": "1.34989201", + "min_size": "0.96899225", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VIA" @@ -282,7 +282,7 @@ { "asset": "PINK", "currency": "BTC", - "min_size": "112.10762332", + "min_size": "92.59259259", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PINK" @@ -290,7 +290,7 @@ { "asset": "IOC", "currency": "BTC", - "min_size": "1.67830290", + "min_size": "1.50720444", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/IOC" @@ -298,7 +298,7 @@ { "asset": "CANN", "currency": "BTC", - "min_size": "48.54368932", + "min_size": "34.86750349", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CANN" @@ -306,7 +306,7 @@ { "asset": "SYS", "currency": "BTC", - "min_size": "5.91296121", + "min_size": "5.21702838", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SYS" @@ -314,7 +314,7 @@ { "asset": "NEOS", "currency": "BTC", - "min_size": "0.83679207", + "min_size": "0.67936629", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NEOS" @@ -322,7 +322,7 @@ { "asset": "DGB", "currency": "BTC", - "min_size": "90.90909091", + "min_size": "65.10416667", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DGB" @@ -330,7 +330,7 @@ { "asset": "BURST", "currency": "BTC", - "min_size": "116.27906977", + "min_size": "93.98496241", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BURST" @@ -338,7 +338,7 @@ { "asset": "EXCL", "currency": "BTC", - "min_size": "2.00000000", + "min_size": "1.70683416", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EXCL" @@ -346,7 +346,7 @@ { "asset": "SWIFT", "currency": "BTC", - "min_size": "3.29641350", + "min_size": "2.22241977", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SWIFT" @@ -354,7 +354,7 @@ { "asset": "DOPE", "currency": "BTC", - "min_size": "30.45066991", + "min_size": "33.02509908", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DOPE" @@ -362,7 +362,7 @@ { "asset": "BLOCK", "currency": "BTC", - "min_size": "0.11172635", + "min_size": "0.11803588", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BLOCK" @@ -370,7 +370,7 @@ { "asset": "ABY", "currency": "BTC", - "min_size": "316.45569620", + "min_size": "227.27272727", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ABY" @@ -378,7 +378,7 @@ { "asset": "BYC", "currency": "BTC", - "min_size": "4.53802868", + "min_size": "4.00705241", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BYC" @@ -386,7 +386,7 @@ { "asset": "XMG", "currency": "BTC", - "min_size": "7.01459035", + "min_size": "6.04010631", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XMG" @@ -394,7 +394,7 @@ { "asset": "BLITZ", "currency": "BTC", - "min_size": "3.33333333", + "min_size": "2.46208391", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BLITZ" @@ -402,7 +402,7 @@ { "asset": "BAY", "currency": "BTC", - "min_size": "41.94630872", + "min_size": "31.48614610", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BAY" @@ -410,7 +410,7 @@ { "asset": "SPR", "currency": "BTC", - "min_size": "7.94155019", + "min_size": "5.80181016", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SPR" @@ -418,7 +418,7 @@ { "asset": "VTR", "currency": "BTC", - "min_size": "6.28140704", + "min_size": "5.90597685", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VTR" @@ -426,7 +426,7 @@ { "asset": "XRP", "currency": "BTC", - "min_size": "3.41950486", + "min_size": "2.94117647", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XRP" @@ -434,7 +434,7 @@ { "asset": "GAME", "currency": "BTC", - "min_size": "1.60968386", + "min_size": "1.17370892", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GAME" @@ -442,7 +442,7 @@ { "asset": "COVAL", "currency": "BTC", - "min_size": "297.61904762", + "min_size": "229.35779817", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/COVAL" @@ -450,7 +450,7 @@ { "asset": "NXS", "currency": "BTC", - "min_size": "1.25075045", + "min_size": "0.92284976", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NXS" @@ -458,7 +458,7 @@ { "asset": "XCP", "currency": "BTC", - "min_size": "0.15723270", + "min_size": "0.12500000", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XCP" @@ -466,7 +466,7 @@ { "asset": "BITB", "currency": "BTC", - "min_size": "227.27272727", + "min_size": "204.91803279", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BITB" @@ -474,7 +474,7 @@ { "asset": "GEO", "currency": "BTC", - "min_size": "1.10107906", + "min_size": "0.88929994", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GEO" @@ -482,7 +482,7 @@ { "asset": "FLDC", "currency": "BTC", - "min_size": "138.12154696", + "min_size": "100.40160643", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FLDC" @@ -490,7 +490,7 @@ { "asset": "GRC", "currency": "BTC", - "min_size": "52.08333333", + "min_size": "42.51700680", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GRC" @@ -498,7 +498,7 @@ { "asset": "FLO", "currency": "BTC", - "min_size": "25.00000000", + "min_size": "20.99076406", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FLO" @@ -506,7 +506,7 @@ { "asset": "NBT", "currency": "BTC", - "min_size": "3.82731170", + "min_size": "3.48820985", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NBT" @@ -514,7 +514,7 @@ { "asset": "MUE", "currency": "BTC", - "min_size": "17.22949690", + "min_size": "16.52346332", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MUE" @@ -522,7 +522,7 @@ { "asset": "XEM", "currency": "BTC", - "min_size": "7.64993880", + "min_size": "5.62050360", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XEM" @@ -530,7 +530,7 @@ { "asset": "CLAM", "currency": "BTC", - "min_size": "0.54310045", + "min_size": "0.47384382", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CLAM" @@ -538,7 +538,7 @@ { "asset": "DMD", "currency": "BTC", - "min_size": "0.32544879", + "min_size": "0.27489746", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DMD" @@ -546,7 +546,7 @@ { "asset": "GAM", "currency": "BTC", - "min_size": "0.28403281", + "min_size": "0.23428421", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GAM" @@ -554,7 +554,7 @@ { "asset": "SPHR", "currency": "BTC", - "min_size": "0.81873260", + "min_size": "0.77981222", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SPHR" @@ -562,7 +562,7 @@ { "asset": "OK", "currency": "BTC", - "min_size": "15.72327044", + "min_size": "11.16071429", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/OK" @@ -570,7 +570,7 @@ { "asset": "SNRG", "currency": "BTC", - "min_size": "1.54349571", + "min_size": "3.73078645", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SNRG" @@ -578,7 +578,7 @@ { "asset": "AEON", "currency": "BTC", - "min_size": "1.05223284", + "min_size": "1.00952996", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/AEON" @@ -586,7 +586,7 @@ { "asset": "ETH", "currency": "BTC", - "min_size": "0.00419393", + "min_size": "0.00391917", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ETH" @@ -594,7 +594,7 @@ { "asset": "TX", "currency": "BTC", - "min_size": "1.22681323", + "min_size": "1.19053288", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TX" @@ -602,7 +602,7 @@ { "asset": "BCY", "currency": "BTC", - "min_size": "7.13673994", + "min_size": "5.46089996", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BCY" @@ -610,7 +610,7 @@ { "asset": "EXP", "currency": "BTC", - "min_size": "1.20569086", + "min_size": "0.95270759", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EXP" @@ -618,7 +618,7 @@ { "asset": "OMNI", "currency": "BTC", - "min_size": "0.07703899", + "min_size": "0.05952381", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/OMNI" @@ -626,7 +626,7 @@ { "asset": "AMP", "currency": "BTC", - "min_size": "4.95834986", + "min_size": "7.09823964", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/AMP" @@ -634,7 +634,7 @@ { "asset": "XLM", "currency": "BTC", - "min_size": "9.06453952", + "min_size": "6.32751202", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XLM" @@ -642,7 +642,7 @@ { "asset": "BTC", "currency": "USDT", - "min_size": "0.00037244", + "min_size": "0.00036996", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/BTC" @@ -650,7 +650,7 @@ { "asset": "RVR", "currency": "BTC", - "min_size": "23.14814815", + "min_size": "21.15059222", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RVR" @@ -658,7 +658,7 @@ { "asset": "EMC", "currency": "BTC", - "min_size": "0.66855645", + "min_size": "0.44531528", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EMC" @@ -666,7 +666,7 @@ { "asset": "FCT", "currency": "BTC", - "min_size": "0.08458462", + "min_size": "0.07165808", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FCT" @@ -674,7 +674,7 @@ { "asset": "EGC", "currency": "BTC", - "min_size": "10.86956522", + "min_size": "8.62068966", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EGC" @@ -682,7 +682,7 @@ { "asset": "SLS", "currency": "BTC", - "min_size": "0.03812080", + "min_size": "0.03477051", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SLS" @@ -690,7 +690,7 @@ { "asset": "RADS", "currency": "BTC", - "min_size": "0.51999917", + "min_size": "0.33744112", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RADS" @@ -698,7 +698,7 @@ { "asset": "DCR", "currency": "BTC", - "min_size": "0.04244381", + "min_size": "0.03246757", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DCR" @@ -706,7 +706,7 @@ { "asset": "BSD", "currency": "BTC", - "min_size": "3.52063090", + "min_size": "3.11681835", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BSD" @@ -714,7 +714,7 @@ { "asset": "XVG", "currency": "BTC", - "min_size": "55.92841163", + "min_size": "28.76869965", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XVG" @@ -722,7 +722,7 @@ { "asset": "PIVX", "currency": "BTC", - "min_size": "0.54824561", + "min_size": "0.42180567", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PIVX" @@ -738,7 +738,7 @@ { "asset": "MEME", "currency": "BTC", - "min_size": "9.68992248", + "min_size": "7.38770686", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MEME" @@ -746,7 +746,7 @@ { "asset": "STEEM", "currency": "BTC", - "min_size": "1.12922896", + "min_size": "0.71709262", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/STEEM" @@ -754,7 +754,7 @@ { "asset": "2GIVE", "currency": "BTC", - "min_size": "320.51282051", + "min_size": "203.25203252", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/2GIVE" @@ -762,7 +762,7 @@ { "asset": "LSK", "currency": "BTC", - "min_size": "0.18909311", + "min_size": "0.18563208", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LSK" @@ -770,7 +770,7 @@ { "asset": "BRK", "currency": "BTC", - "min_size": "11.69317119", + "min_size": "9.13408842", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BRK" @@ -778,7 +778,7 @@ { "asset": "WAVES", "currency": "BTC", - "min_size": "0.46475312", + "min_size": "0.42030228", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/WAVES" @@ -786,7 +786,7 @@ { "asset": "LBC", "currency": "BTC", - "min_size": "9.51293760", + "min_size": "7.10631040", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LBC" @@ -794,7 +794,7 @@ { "asset": "SBD", "currency": "BTC", - "min_size": "1.14800018", + "min_size": "0.72029503", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SBD" @@ -802,7 +802,7 @@ { "asset": "BRX", "currency": "BTC", - "min_size": "2.64662291", + "min_size": "1.71010329", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BRX" @@ -810,7 +810,7 @@ { "asset": "ETC", "currency": "BTC", - "min_size": "0.12413108", + "min_size": "0.11848229", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ETC" @@ -818,7 +818,7 @@ { "asset": "ETC", "currency": "ETH", - "min_size": "0.14783063", + "min_size": "0.14971279", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ETC" @@ -826,7 +826,7 @@ { "asset": "STRAT", "currency": "BTC", - "min_size": "0.41981528", + "min_size": "0.37526832", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/STRAT" @@ -834,7 +834,7 @@ { "asset": "UNB", "currency": "BTC", - "min_size": "3.01968837", + "min_size": "2.63074818", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UNB" @@ -842,7 +842,7 @@ { "asset": "SYNX", "currency": "BTC", - "min_size": "5.53219739", + "min_size": "4.40528634", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SYNX" @@ -850,7 +850,7 @@ { "asset": "EBST", "currency": "BTC", - "min_size": "16.58925017", + "min_size": "7.04820975", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EBST" @@ -858,7 +858,7 @@ { "asset": "VRM", "currency": "BTC", - "min_size": "0.84314188", + "min_size": "0.72407102", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VRM" @@ -866,7 +866,7 @@ { "asset": "SEQ", "currency": "BTC", - "min_size": "12.25490196", + "min_size": "10.98901099", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SEQ" @@ -874,7 +874,7 @@ { "asset": "REP", "currency": "BTC", - "min_size": "0.06249875", + "min_size": "0.06562920", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/REP" @@ -882,7 +882,7 @@ { "asset": "SHIFT", "currency": "BTC", - "min_size": "1.06378452", + "min_size": "0.79342410", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SHIFT" @@ -890,7 +890,7 @@ { "asset": "ARDR", "currency": "BTC", - "min_size": "8.00256082", + "min_size": "5.69605833", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ARDR" @@ -898,7 +898,7 @@ { "asset": "XZC", "currency": "BTC", - "min_size": "0.05765084", + "min_size": "0.05773699", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XZC" @@ -906,7 +906,7 @@ { "asset": "NEO", "currency": "BTC", - "min_size": "0.03481322", + "min_size": "0.02880151", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NEO" @@ -914,7 +914,7 @@ { "asset": "ZEC", "currency": "BTC", - "min_size": "0.00899908", + "min_size": "0.00853168", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZEC" @@ -922,7 +922,7 @@ { "asset": "ZCL", "currency": "BTC", - "min_size": "0.49115914", + "min_size": "0.36290264", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZCL" @@ -930,7 +930,7 @@ { "asset": "IOP", "currency": "BTC", - "min_size": "1.12866817", + "min_size": "0.96446896", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/IOP" @@ -938,7 +938,7 @@ { "asset": "GOLOS", "currency": "BTC", - "min_size": "31.72588832", + "min_size": "23.69668246", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GOLOS" @@ -946,7 +946,7 @@ { "asset": "UBQ", "currency": "BTC", - "min_size": "1.21713729", + "min_size": "0.82034454", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UBQ" @@ -954,7 +954,7 @@ { "asset": "KMD", "currency": "BTC", - "min_size": "0.71223042", + "min_size": "0.56251828", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/KMD" @@ -962,7 +962,7 @@ { "asset": "GBG", "currency": "BTC", - "min_size": "38.75968992", + "min_size": "30.12048193", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GBG" @@ -970,7 +970,7 @@ { "asset": "SIB", "currency": "BTC", - "min_size": "1.77405620", + "min_size": "1.80766450", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SIB" @@ -978,7 +978,7 @@ { "asset": "ION", "currency": "BTC", - "min_size": "0.85353363", + "min_size": "0.75838010", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ION" @@ -986,7 +986,7 @@ { "asset": "LMC", "currency": "BTC", - "min_size": "40.84967320", + "min_size": "34.67406380", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LMC" @@ -994,7 +994,7 @@ { "asset": "QWARK", "currency": "BTC", - "min_size": "22.32142857", + "min_size": "17.48251748", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/QWARK" @@ -1002,7 +1002,7 @@ { "asset": "CRW", "currency": "BTC", - "min_size": "1.47058824", + "min_size": "1.37370185", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CRW" @@ -1010,7 +1010,7 @@ { "asset": "SWT", "currency": "BTC", - "min_size": "1.58841095", + "min_size": "1.26582278", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SWT" @@ -1018,7 +1018,7 @@ { "asset": "MLN", "currency": "BTC", - "min_size": "0.03119809", + "min_size": "0.03264308", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MLN" @@ -1026,7 +1026,7 @@ { "asset": "ARK", "currency": "BTC", - "min_size": "0.77471336", + "min_size": "0.74183976", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ARK" @@ -1034,7 +1034,7 @@ { "asset": "DYN", "currency": "BTC", - "min_size": "1.23322810", + "min_size": "1.07716834", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DYN" @@ -1042,7 +1042,7 @@ { "asset": "TKS", "currency": "BTC", - "min_size": "0.95416205", + "min_size": "0.87458457", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TKS" @@ -1050,7 +1050,7 @@ { "asset": "MUSIC", "currency": "BTC", - "min_size": "147.92899408", + "min_size": "136.61202186", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MUSIC" @@ -1058,7 +1058,7 @@ { "asset": "DTB", "currency": "BTC", - "min_size": "4.02965828", + "min_size": "3.00120048", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DTB" @@ -1066,7 +1066,7 @@ { "asset": "INCNT", "currency": "BTC", - "min_size": "8.10898476", + "min_size": "5.72213321", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/INCNT" @@ -1074,7 +1074,7 @@ { "asset": "GBYTE", "currency": "BTC", - "min_size": "0.01076866", + "min_size": "0.00770283", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GBYTE" @@ -1082,7 +1082,7 @@ { "asset": "GNT", "currency": "BTC", - "min_size": "8.72905028", + "min_size": "4.70366886", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GNT" @@ -1090,7 +1090,7 @@ { "asset": "NXC", "currency": "BTC", - "min_size": "15.39408867", + "min_size": "11.89343482", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NXC" @@ -1098,7 +1098,7 @@ { "asset": "EDG", "currency": "BTC", - "min_size": "2.79329609", + "min_size": "3.21419388", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EDG" @@ -1106,7 +1106,7 @@ { "asset": "LGD", "currency": "BTC", - "min_size": "4.99001996", + "min_size": "3.86817268", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LGD" @@ -1114,7 +1114,7 @@ { "asset": "TRST", "currency": "BTC", - "min_size": "10.49979000", + "min_size": "8.77192982", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TRST" @@ -1122,7 +1122,7 @@ { "asset": "GNT", "currency": "ETH", - "min_size": "10.39522651", + "min_size": "6.03638734", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/GNT" @@ -1130,7 +1130,7 @@ { "asset": "REP", "currency": "ETH", - "min_size": "0.07552870", + "min_size": "0.08375209", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/REP" @@ -1138,7 +1138,7 @@ { "asset": "ETH", "currency": "USDT", - "min_size": "0.00621762", + "min_size": "0.00580282", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ETH" @@ -1146,7 +1146,7 @@ { "asset": "WINGS", "currency": "ETH", - "min_size": "5.44484373", + "min_size": "5.05310817", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/WINGS" @@ -1154,7 +1154,7 @@ { "asset": "WINGS", "currency": "BTC", - "min_size": "4.59981601", + "min_size": "3.97899093", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/WINGS" @@ -1162,7 +1162,7 @@ { "asset": "RLC", "currency": "BTC", - "min_size": "1.97784810", + "min_size": "1.66544534", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RLC" @@ -1170,7 +1170,7 @@ { "asset": "GNO", "currency": "BTC", - "min_size": "0.02716836", + "min_size": "0.02036051", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GNO" @@ -1178,7 +1178,7 @@ { "asset": "GUP", "currency": "BTC", - "min_size": "10.58873359", + "min_size": "5.07511165", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GUP" @@ -1186,7 +1186,7 @@ { "asset": "LUN", "currency": "BTC", - "min_size": "0.20053422", + "min_size": "0.18656856", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LUN" @@ -1194,7 +1194,7 @@ { "asset": "GUP", "currency": "ETH", - "min_size": "12.65310254", + "min_size": "6.42153526", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/GUP" @@ -1202,7 +1202,7 @@ { "asset": "RLC", "currency": "ETH", - "min_size": "2.38095238", + "min_size": "2.10084034", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/RLC" @@ -1210,7 +1210,7 @@ { "asset": "LUN", "currency": "ETH", - "min_size": "0.23964724", + "min_size": "0.23933385", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LUN" @@ -1218,7 +1218,7 @@ { "asset": "GNO", "currency": "ETH", - "min_size": "0.03220410", + "min_size": "0.02607304", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/GNO" @@ -1226,7 +1226,7 @@ { "asset": "HMQ", "currency": "BTC", - "min_size": "12.63902932", + "min_size": "12.20107369", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/HMQ" @@ -1234,7 +1234,7 @@ { "asset": "HMQ", "currency": "ETH", - "min_size": "14.96020585", + "min_size": "15.95303427", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/HMQ" @@ -1242,7 +1242,7 @@ { "asset": "ANT", "currency": "BTC", - "min_size": "0.57736721", + "min_size": "0.60656056", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ANT" @@ -1250,7 +1250,7 @@ { "asset": "TRST", "currency": "ETH", - "min_size": "12.50000000", + "min_size": "11.41474328", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TRST" @@ -1258,7 +1258,7 @@ { "asset": "ANT", "currency": "ETH", - "min_size": "0.71361695", + "min_size": "0.77278319", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ANT" @@ -1266,7 +1266,7 @@ { "asset": "SC", "currency": "BTC", - "min_size": "147.05882353", + "min_size": "110.13215859", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SC" @@ -1274,7 +1274,7 @@ { "asset": "BAT", "currency": "ETH", - "min_size": "12.58399819", + "min_size": "8.82472334", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BAT" @@ -1282,7 +1282,7 @@ { "asset": "BAT", "currency": "BTC", - "min_size": "10.53074979", + "min_size": "6.87190764", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BAT" @@ -1290,7 +1290,7 @@ { "asset": "ZEN", "currency": "BTC", - "min_size": "0.11655012", + "min_size": "0.06080639", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZEN" @@ -1298,7 +1298,7 @@ { "asset": "QRL", "currency": "BTC", - "min_size": "2.45098039", + "min_size": "1.89393939", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/QRL" @@ -1306,7 +1306,7 @@ { "asset": "QRL", "currency": "ETH", - "min_size": "2.96947381", + "min_size": "2.45138896", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/QRL" @@ -1314,7 +1314,7 @@ { "asset": "CRB", "currency": "BTC", - "min_size": "12.50625313", + "min_size": "8.10110175", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CRB" @@ -1322,7 +1322,7 @@ { "asset": "CRB", "currency": "ETH", - "min_size": "14.85222041", + "min_size": "10.42426770", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/CRB" @@ -1330,7 +1330,7 @@ { "asset": "LGD", "currency": "ETH", - "min_size": "6.04668037", + "min_size": "5.15134656", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LGD" @@ -1338,7 +1338,7 @@ { "asset": "PTOY", "currency": "BTC", - "min_size": "15.22533496", + "min_size": "11.48369316", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PTOY" @@ -1346,7 +1346,7 @@ { "asset": "PTOY", "currency": "ETH", - "min_size": "17.90189760", + "min_size": "14.89513823", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/PTOY" @@ -1354,7 +1354,7 @@ { "asset": "CFI", "currency": "BTC", - "min_size": "30.86419753", + "min_size": "22.28163993", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CFI" @@ -1362,7 +1362,7 @@ { "asset": "CFI", "currency": "ETH", - "min_size": "36.68916936", + "min_size": "28.69111149", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/CFI" @@ -1370,7 +1370,7 @@ { "asset": "BNT", "currency": "BTC", - "min_size": "0.73744137", + "min_size": "0.63742988", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BNT" @@ -1378,7 +1378,7 @@ { "asset": "BNT", "currency": "ETH", - "min_size": "0.89326230", + "min_size": "0.81288521", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BNT" @@ -1386,7 +1386,7 @@ { "asset": "NMR", "currency": "BTC", - "min_size": "0.15971379", + "min_size": "0.13829728", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NMR" @@ -1394,7 +1394,7 @@ { "asset": "NMR", "currency": "ETH", - "min_size": "0.19381603", + "min_size": "0.18050542", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/NMR" @@ -1402,7 +1402,7 @@ { "asset": "LTC", "currency": "ETH", - "min_size": "0.01655629", + "min_size": "0.01884833", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LTC" @@ -1410,7 +1410,7 @@ { "asset": "XRP", "currency": "ETH", - "min_size": "4.08553476", + "min_size": "3.76262360", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XRP" @@ -1418,7 +1418,7 @@ { "asset": "SNT", "currency": "BTC", - "min_size": "22.38137869", + "min_size": "16.08751609", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SNT" @@ -1426,7 +1426,7 @@ { "asset": "SNT", "currency": "ETH", - "min_size": "26.69656682", + "min_size": "20.55667475", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SNT" @@ -1434,7 +1434,7 @@ { "asset": "DCT", "currency": "BTC", - "min_size": "4.89236791", + "min_size": "3.09827736", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DCT" @@ -1442,7 +1442,7 @@ { "asset": "XEL", "currency": "BTC", - "min_size": "6.70061646", + "min_size": "5.88373735", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XEL" @@ -1450,7 +1450,7 @@ { "asset": "MCO", "currency": "BTC", - "min_size": "0.34435262", + "min_size": "0.23149863", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MCO" @@ -1458,7 +1458,7 @@ { "asset": "MCO", "currency": "ETH", - "min_size": "0.42477202", + "min_size": "0.29888182", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/MCO" @@ -1466,7 +1466,7 @@ { "asset": "ADT", "currency": "BTC", - "min_size": "60.67961165", + "min_size": "41.66666667", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ADT" @@ -1474,7 +1474,7 @@ { "asset": "ADT", "currency": "ETH", - "min_size": "72.91818580", + "min_size": "52.63157895", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ADT" @@ -1482,7 +1482,7 @@ { "asset": "PAY", "currency": "BTC", - "min_size": "1.69503017", + "min_size": "1.63988193", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PAY" @@ -1490,7 +1490,7 @@ { "asset": "PAY", "currency": "ETH", - "min_size": "2.00816117", + "min_size": "2.08741249", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/PAY" @@ -1498,7 +1498,7 @@ { "asset": "STORJ", "currency": "BTC", - "min_size": "2.67522739", + "min_size": "1.98554523", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/STORJ" @@ -1506,7 +1506,7 @@ { "asset": "STORJ", "currency": "ETH", - "min_size": "3.21458651", + "min_size": "2.53056928", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/STORJ" @@ -1514,7 +1514,7 @@ { "asset": "ADX", "currency": "BTC", - "min_size": "2.82422052", + "min_size": "2.46256895", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ADX" @@ -1522,7 +1522,7 @@ { "asset": "ADX", "currency": "ETH", - "min_size": "3.43515122", + "min_size": "3.06868955", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ADX" @@ -1530,7 +1530,7 @@ { "asset": "DASH", "currency": "ETH", - "min_size": "0.00635323", + "min_size": "0.00657284", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DASH" @@ -1538,7 +1538,7 @@ { "asset": "SC", "currency": "ETH", - "min_size": "177.24211273", + "min_size": "140.01680202", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SC" @@ -1546,7 +1546,7 @@ { "asset": "ZEC", "currency": "ETH", - "min_size": "0.01080931", + "min_size": "0.01089652", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ZEC" @@ -1554,7 +1554,7 @@ { "asset": "ZEC", "currency": "USDT", - "min_size": "0.01350965", + "min_size": "0.01260515", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ZEC" @@ -1562,7 +1562,7 @@ { "asset": "LTC", "currency": "USDT", - "min_size": "0.02054795", + "min_size": "0.02198012", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/LTC" @@ -1570,7 +1570,7 @@ { "asset": "ETC", "currency": "USDT", - "min_size": "0.18403836", + "min_size": "0.17543860", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ETC" @@ -1578,7 +1578,7 @@ { "asset": "XRP", "currency": "USDT", - "min_size": "5.09313995", + "min_size": "4.36046518", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/XRP" @@ -1586,7 +1586,7 @@ { "asset": "OMG", "currency": "BTC", - "min_size": "0.20505586", + "min_size": "0.13502638", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/OMG" @@ -1594,7 +1594,7 @@ { "asset": "OMG", "currency": "ETH", - "min_size": "0.24700689", + "min_size": "0.17241379", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/OMG" @@ -1602,7 +1602,7 @@ { "asset": "CVC", "currency": "BTC", - "min_size": "8.30564784", + "min_size": "5.65738855", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CVC" @@ -1610,7 +1610,7 @@ { "asset": "CVC", "currency": "ETH", - "min_size": "9.88982732", + "min_size": "7.31325601", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/CVC" @@ -1618,7 +1618,7 @@ { "asset": "PART", "currency": "BTC", - "min_size": "0.16818481", + "min_size": "0.12958269", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PART" @@ -1626,7 +1626,7 @@ { "asset": "QTUM", "currency": "BTC", - "min_size": "0.12620717", + "min_size": "0.11785282", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/QTUM" @@ -1634,7 +1634,7 @@ { "asset": "QTUM", "currency": "ETH", - "min_size": "0.15096618", + "min_size": "0.14983653", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/QTUM" @@ -1642,7 +1642,7 @@ { "asset": "XMR", "currency": "ETH", - "min_size": "0.01249533", + "min_size": "0.01142815", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XMR" @@ -1650,7 +1650,7 @@ { "asset": "XEM", "currency": "ETH", - "min_size": "9.22645409", + "min_size": "7.21511133", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XEM" @@ -1658,7 +1658,7 @@ { "asset": "XLM", "currency": "ETH", - "min_size": "10.85187195", + "min_size": "8.05684913", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XLM" @@ -1666,7 +1666,7 @@ { "asset": "NEO", "currency": "ETH", - "min_size": "0.04180564", + "min_size": "0.03689944", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/NEO" @@ -1674,7 +1674,7 @@ { "asset": "XMR", "currency": "USDT", - "min_size": "0.01566850", + "min_size": "0.01325967", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/XMR" @@ -1682,7 +1682,7 @@ { "asset": "DASH", "currency": "USDT", - "min_size": "0.00787045", + "min_size": "0.00761867", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/DASH" @@ -1690,7 +1690,7 @@ { "asset": "BCC", "currency": "ETH", - "min_size": "0.00263992", + "min_size": "0.00308477", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BCC" @@ -1698,7 +1698,7 @@ { "asset": "BCC", "currency": "USDT", - "min_size": "0.00330405", + "min_size": "0.00357695", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/BCC" @@ -1706,7 +1706,7 @@ { "asset": "BCC", "currency": "BTC", - "min_size": "0.00221239", + "min_size": "0.00241955", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BCC" @@ -1714,7 +1714,7 @@ { "asset": "DNT", "currency": "BTC", - "min_size": "27.17391304", + "min_size": "26.76659529", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DNT" @@ -1722,7 +1722,7 @@ { "asset": "DNT", "currency": "ETH", - "min_size": "31.85119123", + "min_size": "34.03907686", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DNT" @@ -1730,7 +1730,7 @@ { "asset": "NEO", "currency": "USDT", - "min_size": "0.05215577", + "min_size": "0.04285714", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/NEO" @@ -1738,7 +1738,7 @@ { "asset": "WAVES", "currency": "ETH", - "min_size": "0.55593544", + "min_size": "0.53648011", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/WAVES" @@ -1746,7 +1746,7 @@ { "asset": "STRAT", "currency": "ETH", - "min_size": "0.50659280", + "min_size": "0.47174306", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/STRAT" @@ -1754,7 +1754,7 @@ { "asset": "DGB", "currency": "ETH", - "min_size": "108.67202782", + "min_size": "83.02889406", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DGB" @@ -1762,7 +1762,7 @@ { "asset": "FCT", "currency": "ETH", - "min_size": "0.10169081", + "min_size": "0.09187191", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/FCT" @@ -1770,7 +1770,7 @@ { "asset": "OMG", "currency": "USDT", - "min_size": "0.30981249", + "min_size": "0.19893530", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/OMG" @@ -1778,7 +1778,7 @@ { "asset": "ADA", "currency": "BTC", - "min_size": "12.34567901", + "min_size": "8.06711843", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ADA" @@ -1786,7 +1786,7 @@ { "asset": "MANA", "currency": "BTC", - "min_size": "23.96931927", + "min_size": "20.08032129", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MANA" @@ -1794,7 +1794,7 @@ { "asset": "MANA", "currency": "ETH", - "min_size": "27.82415136", + "min_size": "25.49979600", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/MANA" @@ -1802,7 +1802,7 @@ { "asset": "SALT", "currency": "BTC", - "min_size": "0.76651847", + "min_size": "0.68775791", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SALT" @@ -1810,7 +1810,7 @@ { "asset": "SALT", "currency": "ETH", - "min_size": "0.91426398", + "min_size": "0.87824071", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SALT" @@ -1818,7 +1818,7 @@ { "asset": "TIX", "currency": "BTC", - "min_size": "6.89655172", + "min_size": "3.81679389", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TIX" @@ -1826,7 +1826,7 @@ { "asset": "TIX", "currency": "ETH", - "min_size": "8.01359105", + "min_size": "4.89505013", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TIX" @@ -1834,7 +1834,7 @@ { "asset": "RCN", "currency": "BTC", - "min_size": "19.62323391", + "min_size": "16.05651895", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RCN" @@ -1842,7 +1842,7 @@ { "asset": "RCN", "currency": "ETH", - "min_size": "23.61386606", + "min_size": "20.67910170", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/RCN" @@ -1850,7 +1850,7 @@ { "asset": "VIB", "currency": "BTC", - "min_size": "13.24152542", + "min_size": "11.51012891", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VIB" @@ -1858,7 +1858,7 @@ { "asset": "VIB", "currency": "ETH", - "min_size": "15.47604309", + "min_size": "14.70718005", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/VIB" @@ -1866,7 +1866,7 @@ { "asset": "MER", "currency": "BTC", - "min_size": "11.62250116", + "min_size": "7.40082889", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MER" @@ -1874,7 +1874,7 @@ { "asset": "POWR", "currency": "BTC", - "min_size": "6.06060606", + "min_size": "4.40140845", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/POWR" @@ -1882,7 +1882,7 @@ { "asset": "POWR", "currency": "ETH", - "min_size": "7.25047491", + "min_size": "5.59077745", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/POWR" @@ -1890,7 +1890,7 @@ { "asset": "BTG", "currency": "BTC", - "min_size": "0.03675881", + "min_size": "0.03776697", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BTG" @@ -1898,7 +1898,7 @@ { "asset": "BTG", "currency": "ETH", - "min_size": "0.04435506", + "min_size": "0.04812320", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BTG" @@ -1906,7 +1906,7 @@ { "asset": "BTG", "currency": "USDT", - "min_size": "0.05471568", + "min_size": "0.05607477", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/BTG" @@ -1914,7 +1914,7 @@ { "asset": "ADA", "currency": "ETH", - "min_size": "14.85045591", + "min_size": "10.27875997", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ADA" @@ -1922,7 +1922,7 @@ { "asset": "ENG", "currency": "BTC", - "min_size": "1.21359223", + "min_size": "1.04945009", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ENG" @@ -1930,7 +1930,7 @@ { "asset": "ENG", "currency": "ETH", - "min_size": "1.41025026", + "min_size": "1.34171278", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ENG" @@ -1938,7 +1938,7 @@ { "asset": "ADA", "currency": "USDT", - "min_size": "18.18189862", + "min_size": "11.91895113", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ADA" @@ -1946,7 +1946,7 @@ { "asset": "XVG", "currency": "USDT", - "min_size": "84.12787437", + "min_size": "42.49291785", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/XVG" @@ -1954,7 +1954,7 @@ { "asset": "NXT", "currency": "USDT", - "min_size": "22.72726928", + "min_size": "15.69857891", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/NXT" @@ -1962,7 +1962,7 @@ { "asset": "UKG", "currency": "BTC", - "min_size": "12.05981669", + "min_size": "9.37031484", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UKG" @@ -1970,7 +1970,7 @@ { "asset": "UKG", "currency": "ETH", - "min_size": "13.85809313", + "min_size": "11.90504536", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/UKG" @@ -1978,7 +1978,7 @@ { "asset": "IGNIS", "currency": "BTC", - "min_size": "22.78942571", + "min_size": "19.24557352", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/IGNIS" @@ -1986,7 +1986,7 @@ { "asset": "SRN", "currency": "BTC", - "min_size": "6.25312656", + "min_size": "5.86441473", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SRN" @@ -1994,7 +1994,7 @@ { "asset": "SRN", "currency": "ETH", - "min_size": "7.64245537", + "min_size": "7.37767810", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SRN" @@ -2002,7 +2002,7 @@ { "asset": "WAX", "currency": "BTC", - "min_size": "14.35956347", + "min_size": "6.34517766", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/WAX" @@ -2010,7 +2010,7 @@ { "asset": "WAX", "currency": "ETH", - "min_size": "17.03635558", + "min_size": "8.15886951", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/WAX" @@ -2018,7 +2018,7 @@ { "asset": "ZRX", "currency": "BTC", - "min_size": "3.77130789", + "min_size": "2.24941515", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZRX" @@ -2026,7 +2026,7 @@ { "asset": "ZRX", "currency": "ETH", - "min_size": "4.37993290", + "min_size": "2.83952160", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ZRX" @@ -2034,7 +2034,7 @@ { "asset": "VEE", "currency": "BTC", - "min_size": "54.82456140", + "min_size": "45.62043796", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VEE" @@ -2042,7 +2042,7 @@ { "asset": "VEE", "currency": "ETH", - "min_size": "66.91648822", + "min_size": "58.38393274", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/VEE" @@ -2050,7 +2050,7 @@ { "asset": "BCPT", "currency": "BTC", - "min_size": "4.39753738", + "min_size": "4.05844156", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BCPT" @@ -2058,7 +2058,7 @@ { "asset": "BCPT", "currency": "ETH", - "min_size": "5.26315789", + "min_size": "5.13747894", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BCPT" @@ -2066,7 +2066,7 @@ { "asset": "TRX", "currency": "BTC", - "min_size": "49.50495050", + "min_size": "44.09171076", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TRX" @@ -2074,7 +2074,7 @@ { "asset": "TRX", "currency": "ETH", - "min_size": "59.10165485", + "min_size": "55.55555556", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TRX" @@ -2082,7 +2082,7 @@ { "asset": "TUSD", "currency": "BTC", - "min_size": "2.01938611", + "min_size": "2.01061605", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TUSD" @@ -2090,7 +2090,7 @@ { "asset": "LRC", "currency": "BTC", - "min_size": "4.93291239", + "min_size": "3.12265801", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LRC" @@ -2098,7 +2098,7 @@ { "asset": "LRC", "currency": "ETH", - "min_size": "5.99182715", + "min_size": "3.94147695", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LRC" @@ -2106,7 +2106,7 @@ { "asset": "TUSD", "currency": "ETH", - "min_size": "2.46502135", + "min_size": "2.56407627", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TUSD" @@ -2114,7 +2114,7 @@ { "asset": "UP", "currency": "BTC", - "min_size": "10.09693053", + "min_size": "8.40618695", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UP" @@ -2122,7 +2122,7 @@ { "asset": "UP", "currency": "ETH", - "min_size": "11.96802145", + "min_size": "10.41731775", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/UP" @@ -2130,7 +2130,7 @@ { "asset": "DMT", "currency": "BTC", - "min_size": "0.00000001", + "min_size": "3.48480624", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DMT" @@ -2138,7 +2138,7 @@ { "asset": "DMT", "currency": "ETH", - "min_size": "0.00000001", + "min_size": "4.38596491", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DMT" @@ -2146,7 +2146,7 @@ { "asset": "TUSD", "currency": "USDT", - "min_size": "0.00000001", + "min_size": "2.98507463", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/TUSD" @@ -2154,7 +2154,7 @@ { "asset": "POLY", "currency": "BTC", - "min_size": "0.00000001", + "min_size": "4.81417293", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/POLY" @@ -2162,7 +2162,7 @@ { "asset": "POLY", "currency": "ETH", - "min_size": "0.00000001", + "min_size": "6.04572990", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/POLY" From 4ffe3e073531631ba78be69cad77bbef83d57de5 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Fri, 20 Apr 2018 11:20:16 +0000 Subject: [PATCH 59/74] Exchanges: update-products 975 --- extensions/exchanges/bittrex/products.json | 556 +++++++++++---------- 1 file changed, 286 insertions(+), 270 deletions(-) diff --git a/extensions/exchanges/bittrex/products.json b/extensions/exchanges/bittrex/products.json index dadbe02fe7..4f9e3c4791 100644 --- a/extensions/exchanges/bittrex/products.json +++ b/extensions/exchanges/bittrex/products.json @@ -2,7 +2,7 @@ { "asset": "LTC", "currency": "BTC", - "min_size": "0.01474927", + "min_size": "0.01441756", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LTC" @@ -10,7 +10,7 @@ { "asset": "DOGE", "currency": "BTC", - "min_size": "409.83606557", + "min_size": "362.31884058", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DOGE" @@ -18,7 +18,7 @@ { "asset": "VTC", "currency": "BTC", - "min_size": "0.83458521", + "min_size": "0.80796329", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VTC" @@ -26,7 +26,7 @@ { "asset": "PPC", "currency": "BTC", - "min_size": "1.02978127", + "min_size": "0.94693383", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PPC" @@ -34,7 +34,7 @@ { "asset": "FTC", "currency": "BTC", - "min_size": "8.78734622", + "min_size": "8.51208716", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FTC" @@ -42,7 +42,7 @@ { "asset": "RDD", "currency": "BTC", - "min_size": "297.61904762", + "min_size": "252.52525253", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RDD" @@ -50,7 +50,7 @@ { "asset": "NXT", "currency": "BTC", - "min_size": "10.67919692", + "min_size": "9.80392157", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NXT" @@ -58,7 +58,7 @@ { "asset": "DASH", "currency": "BTC", - "min_size": "0.00513051", + "min_size": "0.00487329", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DASH" @@ -66,7 +66,7 @@ { "asset": "POT", "currency": "BTC", - "min_size": "14.37607821", + "min_size": "14.35956347", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/POT" @@ -74,7 +74,7 @@ { "asset": "BLK", "currency": "BTC", - "min_size": "7.17360115", + "min_size": "6.80087051", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BLK" @@ -82,7 +82,7 @@ { "asset": "EMC2", "currency": "BTC", - "min_size": "6.44163875", + "min_size": "6.49857031", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EMC2" @@ -90,7 +90,7 @@ { "asset": "XMY", "currency": "BTC", - "min_size": "238.09523810", + "min_size": "215.51724138", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XMY" @@ -98,7 +98,7 @@ { "asset": "AUR", "currency": "BTC", - "min_size": "1.86553242", + "min_size": "1.83688464", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/AUR" @@ -106,7 +106,7 @@ { "asset": "EFL", "currency": "BTC", - "min_size": "11.16071429", + "min_size": "11.01321586", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EFL" @@ -114,7 +114,7 @@ { "asset": "GLD", "currency": "BTC", - "min_size": "13.63884343", + "min_size": "10.23751024", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GLD" @@ -122,7 +122,7 @@ { "asset": "SLR", "currency": "BTC", - "min_size": "5.43596434", + "min_size": "5.29548824", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SLR" @@ -130,7 +130,7 @@ { "asset": "PTC", "currency": "BTC", - "min_size": "49.60317460", + "min_size": "44.64285714", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PTC" @@ -138,7 +138,7 @@ { "asset": "GRS", "currency": "BTC", - "min_size": "1.46825630", + "min_size": "1.43636886", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GRS" @@ -146,7 +146,7 @@ { "asset": "NLG", "currency": "BTC", - "min_size": "20.57613169", + "min_size": "19.59247649", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NLG" @@ -154,7 +154,7 @@ { "asset": "RBY", "currency": "BTC", - "min_size": "3.56531660", + "min_size": "3.29380764", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RBY" @@ -162,7 +162,7 @@ { "asset": "XWC", "currency": "BTC", - "min_size": "25.05010020", + "min_size": "24.34274586", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XWC" @@ -170,7 +170,7 @@ { "asset": "MONA", "currency": "BTC", - "min_size": "0.54667512", + "min_size": "0.51653960", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MONA" @@ -178,7 +178,7 @@ { "asset": "THC", "currency": "BTC", - "min_size": "20.39151713", + "min_size": "20.37489813", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/THC" @@ -186,7 +186,7 @@ { "asset": "ENRG", "currency": "BTC", - "min_size": "14.61988304", + "min_size": "16.65556296", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ENRG" @@ -194,7 +194,7 @@ { "asset": "ERC", "currency": "BTC", - "min_size": "4.18900804", + "min_size": "3.79939210", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ERC" @@ -202,7 +202,7 @@ { "asset": "VRC", "currency": "BTC", - "min_size": "3.46933111", + "min_size": "3.17299150", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VRC" @@ -210,7 +210,7 @@ { "asset": "CURE", "currency": "BTC", - "min_size": "5.86992252", + "min_size": "5.64206725", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CURE" @@ -218,7 +218,7 @@ { "asset": "XMR", "currency": "BTC", - "min_size": "0.00893127", + "min_size": "0.00873147", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XMR" @@ -226,7 +226,7 @@ { "asset": "CLOAK", "currency": "BTC", - "min_size": "0.13116612", + "min_size": "0.14287592", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CLOAK" @@ -234,7 +234,7 @@ { "asset": "KORE", "currency": "BTC", - "min_size": "0.68986451", + "min_size": "0.63164810", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/KORE" @@ -242,7 +242,7 @@ { "asset": "XDN", "currency": "BTC", - "min_size": "163.39869281", + "min_size": "147.05882353", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XDN" @@ -250,7 +250,7 @@ { "asset": "TRUST", "currency": "BTC", - "min_size": "21.36752137", + "min_size": "20.81598668", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TRUST" @@ -258,7 +258,7 @@ { "asset": "NAV", "currency": "BTC", - "min_size": "1.60885514", + "min_size": "1.51735858", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NAV" @@ -266,7 +266,7 @@ { "asset": "XST", "currency": "BTC", - "min_size": "7.30780474", + "min_size": "6.92328995", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XST" @@ -274,7 +274,7 @@ { "asset": "VIA", "currency": "BTC", - "min_size": "0.96899225", + "min_size": "0.95954556", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VIA" @@ -282,7 +282,7 @@ { "asset": "PINK", "currency": "BTC", - "min_size": "92.59259259", + "min_size": "88.02816901", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PINK" @@ -290,7 +290,7 @@ { "asset": "IOC", "currency": "BTC", - "min_size": "1.50720444", + "min_size": "1.47110745", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/IOC" @@ -298,7 +298,7 @@ { "asset": "CANN", "currency": "BTC", - "min_size": "34.86750349", + "min_size": "32.72251309", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CANN" @@ -306,7 +306,7 @@ { "asset": "SYS", "currency": "BTC", - "min_size": "5.21702838", + "min_size": "4.59558824", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SYS" @@ -314,7 +314,7 @@ { "asset": "NEOS", "currency": "BTC", - "min_size": "0.67936629", + "min_size": "0.62956434", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NEOS" @@ -322,7 +322,7 @@ { "asset": "DGB", "currency": "BTC", - "min_size": "65.10416667", + "min_size": "59.38242280", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DGB" @@ -330,7 +330,7 @@ { "asset": "BURST", "currency": "BTC", - "min_size": "93.98496241", + "min_size": "90.90909091", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BURST" @@ -338,7 +338,7 @@ { "asset": "EXCL", "currency": "BTC", - "min_size": "1.70683416", + "min_size": "1.67728950", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EXCL" @@ -346,7 +346,7 @@ { "asset": "SWIFT", "currency": "BTC", - "min_size": "2.22241977", + "min_size": "2.17391304", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SWIFT" @@ -354,7 +354,7 @@ { "asset": "DOPE", "currency": "BTC", - "min_size": "33.02509908", + "min_size": "31.36762861", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DOPE" @@ -362,7 +362,7 @@ { "asset": "BLOCK", "currency": "BTC", - "min_size": "0.11803588", + "min_size": "0.11230857", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BLOCK" @@ -370,7 +370,7 @@ { "asset": "ABY", "currency": "BTC", - "min_size": "227.27272727", + "min_size": "213.67521368", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ABY" @@ -378,7 +378,7 @@ { "asset": "BYC", "currency": "BTC", - "min_size": "4.00705241", + "min_size": "3.28127051", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BYC" @@ -386,7 +386,7 @@ { "asset": "XMG", "currency": "BTC", - "min_size": "6.04010631", + "min_size": "5.49450549", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XMG" @@ -394,7 +394,7 @@ { "asset": "BLITZ", "currency": "BTC", - "min_size": "2.46208391", + "min_size": "2.24982001", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BLITZ" @@ -402,7 +402,7 @@ { "asset": "BAY", "currency": "BTC", - "min_size": "31.48614610", + "min_size": "30.04807692", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BAY" @@ -410,7 +410,7 @@ { "asset": "SPR", "currency": "BTC", - "min_size": "5.80181016", + "min_size": "5.09683996", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SPR" @@ -418,7 +418,7 @@ { "asset": "VTR", "currency": "BTC", - "min_size": "5.90597685", + "min_size": "5.65355043", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VTR" @@ -426,7 +426,7 @@ { "asset": "XRP", "currency": "BTC", - "min_size": "2.94117647", + "min_size": "2.82741461", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XRP" @@ -434,7 +434,7 @@ { "asset": "GAME", "currency": "BTC", - "min_size": "1.17370892", + "min_size": "1.17918966", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GAME" @@ -442,7 +442,7 @@ { "asset": "COVAL", "currency": "BTC", - "min_size": "229.35779817", + "min_size": "223.21428571", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/COVAL" @@ -450,7 +450,7 @@ { "asset": "NXS", "currency": "BTC", - "min_size": "0.92284976", + "min_size": "0.94428706", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NXS" @@ -458,7 +458,7 @@ { "asset": "XCP", "currency": "BTC", - "min_size": "0.12500000", + "min_size": "0.11573217", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XCP" @@ -466,7 +466,7 @@ { "asset": "BITB", "currency": "BTC", - "min_size": "204.91803279", + "min_size": "189.39393939", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BITB" @@ -474,7 +474,7 @@ { "asset": "GEO", "currency": "BTC", - "min_size": "0.88929994", + "min_size": "0.85144064", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GEO" @@ -482,7 +482,7 @@ { "asset": "FLDC", "currency": "BTC", - "min_size": "100.40160643", + "min_size": "95.78544061", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FLDC" @@ -490,7 +490,7 @@ { "asset": "GRC", "currency": "BTC", - "min_size": "42.51700680", + "min_size": "41.73622705", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GRC" @@ -498,7 +498,7 @@ { "asset": "FLO", "currency": "BTC", - "min_size": "20.99076406", + "min_size": "21.92982456", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FLO" @@ -506,7 +506,7 @@ { "asset": "NBT", "currency": "BTC", - "min_size": "3.48820985", + "min_size": "3.49699259", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NBT" @@ -514,7 +514,7 @@ { "asset": "MUE", "currency": "BTC", - "min_size": "16.52346332", + "min_size": "15.31862745", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MUE" @@ -522,7 +522,7 @@ { "asset": "XEM", "currency": "BTC", - "min_size": "5.62050360", + "min_size": "5.42299349", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XEM" @@ -530,7 +530,7 @@ { "asset": "CLAM", "currency": "BTC", - "min_size": "0.47384382", + "min_size": "0.47981882", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CLAM" @@ -538,7 +538,7 @@ { "asset": "DMD", "currency": "BTC", - "min_size": "0.27489746", + "min_size": "0.26681466", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DMD" @@ -546,7 +546,7 @@ { "asset": "GAM", "currency": "BTC", - "min_size": "0.23428421", + "min_size": "0.20258991", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GAM" @@ -554,7 +554,7 @@ { "asset": "SPHR", "currency": "BTC", - "min_size": "0.77981222", + "min_size": "0.76426890", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SPHR" @@ -562,7 +562,7 @@ { "asset": "OK", "currency": "BTC", - "min_size": "11.16071429", + "min_size": "10.15434606", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/OK" @@ -570,7 +570,7 @@ { "asset": "SNRG", "currency": "BTC", - "min_size": "3.73078645", + "min_size": "3.73134328", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SNRG" @@ -578,7 +578,7 @@ { "asset": "AEON", "currency": "BTC", - "min_size": "1.00952996", + "min_size": "1.01754243", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/AEON" @@ -586,7 +586,7 @@ { "asset": "ETH", "currency": "BTC", - "min_size": "0.00391917", + "min_size": "0.00372024", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ETH" @@ -594,7 +594,7 @@ { "asset": "TX", "currency": "BTC", - "min_size": "1.19053288", + "min_size": "1.18253630", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TX" @@ -602,7 +602,7 @@ { "asset": "BCY", "currency": "BTC", - "min_size": "5.46089996", + "min_size": "5.29324582", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BCY" @@ -610,7 +610,7 @@ { "asset": "EXP", "currency": "BTC", - "min_size": "0.95270759", + "min_size": "0.91274188", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EXP" @@ -618,7 +618,7 @@ { "asset": "OMNI", "currency": "BTC", - "min_size": "0.05952381", + "min_size": "0.05326981", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/OMNI" @@ -626,7 +626,7 @@ { "asset": "AMP", "currency": "BTC", - "min_size": "7.09823964", + "min_size": "6.65070497", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/AMP" @@ -634,7 +634,7 @@ { "asset": "XLM", "currency": "BTC", - "min_size": "6.32751202", + "min_size": "5.76701269", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XLM" @@ -642,7 +642,7 @@ { "asset": "BTC", "currency": "USDT", - "min_size": "0.00036996", + "min_size": "0.00036243", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/BTC" @@ -650,7 +650,7 @@ { "asset": "RVR", "currency": "BTC", - "min_size": "21.15059222", + "min_size": "20.08032129", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RVR" @@ -658,7 +658,7 @@ { "asset": "EMC", "currency": "BTC", - "min_size": "0.44531528", + "min_size": "0.56948905", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EMC" @@ -666,7 +666,7 @@ { "asset": "FCT", "currency": "BTC", - "min_size": "0.07165808", + "min_size": "0.06924651", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/FCT" @@ -674,7 +674,7 @@ { "asset": "EGC", "currency": "BTC", - "min_size": "8.62068966", + "min_size": "8.44880027", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EGC" @@ -682,7 +682,7 @@ { "asset": "SLS", "currency": "BTC", - "min_size": "0.03477051", + "min_size": "0.03412937", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SLS" @@ -690,7 +690,7 @@ { "asset": "RADS", "currency": "BTC", - "min_size": "0.33744112", + "min_size": "0.32510176", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RADS" @@ -698,7 +698,7 @@ { "asset": "DCR", "currency": "BTC", - "min_size": "0.03246757", + "min_size": "0.03302999", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DCR" @@ -706,7 +706,7 @@ { "asset": "BSD", "currency": "BTC", - "min_size": "3.11681835", + "min_size": "3.02846760", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BSD" @@ -714,7 +714,7 @@ { "asset": "XVG", "currency": "BTC", - "min_size": "28.76869965", + "min_size": "29.79737783", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XVG" @@ -722,7 +722,7 @@ { "asset": "PIVX", "currency": "BTC", - "min_size": "0.42180567", + "min_size": "0.40194218", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PIVX" @@ -738,7 +738,7 @@ { "asset": "MEME", "currency": "BTC", - "min_size": "7.38770686", + "min_size": "7.36160188", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MEME" @@ -746,7 +746,7 @@ { "asset": "STEEM", "currency": "BTC", - "min_size": "0.71709262", + "min_size": "0.67309246", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/STEEM" @@ -754,7 +754,7 @@ { "asset": "2GIVE", "currency": "BTC", - "min_size": "203.25203252", + "min_size": "200.00000000", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/2GIVE" @@ -762,7 +762,7 @@ { "asset": "LSK", "currency": "BTC", - "min_size": "0.18563208", + "min_size": "0.17857143", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LSK" @@ -770,7 +770,7 @@ { "asset": "BRK", "currency": "BTC", - "min_size": "9.13408842", + "min_size": "7.63591936", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BRK" @@ -778,7 +778,7 @@ { "asset": "WAVES", "currency": "BTC", - "min_size": "0.42030228", + "min_size": "0.40392290", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/WAVES" @@ -786,7 +786,7 @@ { "asset": "LBC", "currency": "BTC", - "min_size": "7.10631040", + "min_size": "6.70600858", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LBC" @@ -794,7 +794,7 @@ { "asset": "SBD", "currency": "BTC", - "min_size": "0.72029503", + "min_size": "0.68613459", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SBD" @@ -802,7 +802,7 @@ { "asset": "BRX", "currency": "BTC", - "min_size": "1.71010329", + "min_size": "1.78253119", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BRX" @@ -810,7 +810,7 @@ { "asset": "ETC", "currency": "BTC", - "min_size": "0.11848229", + "min_size": "0.11363636", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ETC" @@ -818,7 +818,7 @@ { "asset": "ETC", "currency": "ETH", - "min_size": "0.14971279", + "min_size": "0.15258547", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ETC" @@ -826,7 +826,7 @@ { "asset": "STRAT", "currency": "BTC", - "min_size": "0.37526832", + "min_size": "0.36295006", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/STRAT" @@ -834,7 +834,7 @@ { "asset": "UNB", "currency": "BTC", - "min_size": "2.63074818", + "min_size": "2.52627324", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UNB" @@ -842,7 +842,7 @@ { "asset": "SYNX", "currency": "BTC", - "min_size": "4.40528634", + "min_size": "4.09836066", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SYNX" @@ -850,7 +850,7 @@ { "asset": "EBST", "currency": "BTC", - "min_size": "7.04820975", + "min_size": "5.86579071", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EBST" @@ -858,7 +858,7 @@ { "asset": "VRM", "currency": "BTC", - "min_size": "0.72407102", + "min_size": "0.66146316", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VRM" @@ -866,7 +866,7 @@ { "asset": "SEQ", "currency": "BTC", - "min_size": "10.98901099", + "min_size": "10.17087063", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SEQ" @@ -874,7 +874,7 @@ { "asset": "REP", "currency": "BTC", - "min_size": "0.06562920", + "min_size": "0.05361666", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/REP" @@ -882,7 +882,7 @@ { "asset": "SHIFT", "currency": "BTC", - "min_size": "0.79342410", + "min_size": "0.79279508", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SHIFT" @@ -890,7 +890,7 @@ { "asset": "ARDR", "currency": "BTC", - "min_size": "5.69605833", + "min_size": "5.49450549", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ARDR" @@ -898,7 +898,7 @@ { "asset": "XZC", "currency": "BTC", - "min_size": "0.05773699", + "min_size": "0.05265375", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XZC" @@ -906,7 +906,7 @@ { "asset": "NEO", "currency": "BTC", - "min_size": "0.02880151", + "min_size": "0.02821670", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NEO" @@ -914,7 +914,7 @@ { "asset": "ZEC", "currency": "BTC", - "min_size": "0.00853168", + "min_size": "0.00804295", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZEC" @@ -922,7 +922,7 @@ { "asset": "ZCL", "currency": "BTC", - "min_size": "0.36290264", + "min_size": "0.33332889", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZCL" @@ -930,7 +930,7 @@ { "asset": "IOP", "currency": "BTC", - "min_size": "0.96446896", + "min_size": "0.76984665", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/IOP" @@ -938,7 +938,7 @@ { "asset": "GOLOS", "currency": "BTC", - "min_size": "23.69668246", + "min_size": "22.52252252", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GOLOS" @@ -946,7 +946,7 @@ { "asset": "UBQ", "currency": "BTC", - "min_size": "0.82034454", + "min_size": "0.82723934", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UBQ" @@ -954,7 +954,7 @@ { "asset": "KMD", "currency": "BTC", - "min_size": "0.56251828", + "min_size": "0.53651523", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/KMD" @@ -962,7 +962,7 @@ { "asset": "GBG", "currency": "BTC", - "min_size": "30.12048193", + "min_size": "28.90173410", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GBG" @@ -970,7 +970,7 @@ { "asset": "SIB", "currency": "BTC", - "min_size": "1.80766450", + "min_size": "1.73526758", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SIB" @@ -978,7 +978,7 @@ { "asset": "ION", "currency": "BTC", - "min_size": "0.75838010", + "min_size": "0.73065233", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ION" @@ -986,7 +986,7 @@ { "asset": "LMC", "currency": "BTC", - "min_size": "34.67406380", + "min_size": "30.78817734", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LMC" @@ -994,7 +994,7 @@ { "asset": "QWARK", "currency": "BTC", - "min_size": "17.48251748", + "min_size": "17.05320600", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/QWARK" @@ -1002,7 +1002,7 @@ { "asset": "CRW", "currency": "BTC", - "min_size": "1.37370185", + "min_size": "1.31419860", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CRW" @@ -1010,7 +1010,7 @@ { "asset": "SWT", "currency": "BTC", - "min_size": "1.26582278", + "min_size": "1.18063754", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SWT" @@ -1018,7 +1018,7 @@ { "asset": "MLN", "currency": "BTC", - "min_size": "0.03264308", + "min_size": "0.03144654", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MLN" @@ -1026,7 +1026,7 @@ { "asset": "ARK", "currency": "BTC", - "min_size": "0.74183976", + "min_size": "0.67033114", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ARK" @@ -1034,7 +1034,7 @@ { "asset": "DYN", "currency": "BTC", - "min_size": "1.07716834", + "min_size": "1.02274587", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DYN" @@ -1042,7 +1042,7 @@ { "asset": "TKS", "currency": "BTC", - "min_size": "0.87458457", + "min_size": "0.82962766", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TKS" @@ -1050,7 +1050,7 @@ { "asset": "MUSIC", "currency": "BTC", - "min_size": "136.61202186", + "min_size": "116.27906977", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MUSIC" @@ -1058,7 +1058,7 @@ { "asset": "DTB", "currency": "BTC", - "min_size": "3.00120048", + "min_size": "3.03545410", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DTB" @@ -1066,7 +1066,7 @@ { "asset": "INCNT", "currency": "BTC", - "min_size": "5.72213321", + "min_size": "5.66251416", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/INCNT" @@ -1074,7 +1074,7 @@ { "asset": "GBYTE", "currency": "BTC", - "min_size": "0.00770283", + "min_size": "0.00729391", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GBYTE" @@ -1082,7 +1082,7 @@ { "asset": "GNT", "currency": "BTC", - "min_size": "4.70366886", + "min_size": "4.63821892", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GNT" @@ -1090,7 +1090,7 @@ { "asset": "NXC", "currency": "BTC", - "min_size": "11.89343482", + "min_size": "11.08647450", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NXC" @@ -1098,7 +1098,7 @@ { "asset": "EDG", "currency": "BTC", - "min_size": "3.21419388", + "min_size": "3.01386377", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/EDG" @@ -1106,7 +1106,7 @@ { "asset": "LGD", "currency": "BTC", - "min_size": "3.86817268", + "min_size": "2.90090508", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LGD" @@ -1114,7 +1114,7 @@ { "asset": "TRST", "currency": "BTC", - "min_size": "8.77192982", + "min_size": "7.39207569", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TRST" @@ -1122,7 +1122,7 @@ { "asset": "GNT", "currency": "ETH", - "min_size": "6.03638734", + "min_size": "6.16545618", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/GNT" @@ -1130,7 +1130,7 @@ { "asset": "REP", "currency": "ETH", - "min_size": "0.08375209", + "min_size": "0.07047472", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/REP" @@ -1138,7 +1138,7 @@ { "asset": "ETH", "currency": "USDT", - "min_size": "0.00580282", + "min_size": "0.00540540", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ETH" @@ -1146,7 +1146,7 @@ { "asset": "WINGS", "currency": "ETH", - "min_size": "5.05310817", + "min_size": "5.19545294", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/WINGS" @@ -1154,7 +1154,7 @@ { "asset": "WINGS", "currency": "BTC", - "min_size": "3.97899093", + "min_size": "3.71471025", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/WINGS" @@ -1162,7 +1162,7 @@ { "asset": "RLC", "currency": "BTC", - "min_size": "1.66544534", + "min_size": "1.26646403", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RLC" @@ -1170,7 +1170,7 @@ { "asset": "GNO", "currency": "BTC", - "min_size": "0.02036051", + "min_size": "0.01881116", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GNO" @@ -1178,7 +1178,7 @@ { "asset": "GUP", "currency": "BTC", - "min_size": "5.07511165", + "min_size": "4.86949747", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/GUP" @@ -1186,7 +1186,7 @@ { "asset": "LUN", "currency": "BTC", - "min_size": "0.18656856", + "min_size": "0.16228708", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LUN" @@ -1194,7 +1194,7 @@ { "asset": "GUP", "currency": "ETH", - "min_size": "6.42153526", + "min_size": "6.54835964", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/GUP" @@ -1202,7 +1202,7 @@ { "asset": "RLC", "currency": "ETH", - "min_size": "2.10084034", + "min_size": "1.68800302", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/RLC" @@ -1210,7 +1210,7 @@ { "asset": "LUN", "currency": "ETH", - "min_size": "0.23933385", + "min_size": "0.21835367", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LUN" @@ -1218,7 +1218,7 @@ { "asset": "GNO", "currency": "ETH", - "min_size": "0.02607304", + "min_size": "0.02538070", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/GNO" @@ -1226,7 +1226,7 @@ { "asset": "HMQ", "currency": "BTC", - "min_size": "12.20107369", + "min_size": "11.90476190", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/HMQ" @@ -1234,7 +1234,7 @@ { "asset": "HMQ", "currency": "ETH", - "min_size": "15.95303427", + "min_size": "15.67791296", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/HMQ" @@ -1242,7 +1242,7 @@ { "asset": "ANT", "currency": "BTC", - "min_size": "0.60656056", + "min_size": "0.56611037", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ANT" @@ -1250,7 +1250,7 @@ { "asset": "TRST", "currency": "ETH", - "min_size": "11.41474328", + "min_size": "9.80392157", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TRST" @@ -1258,7 +1258,7 @@ { "asset": "ANT", "currency": "ETH", - "min_size": "0.77278319", + "min_size": "0.74946226", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ANT" @@ -1266,7 +1266,7 @@ { "asset": "SC", "currency": "BTC", - "min_size": "110.13215859", + "min_size": "105.93220339", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SC" @@ -1274,7 +1274,7 @@ { "asset": "BAT", "currency": "ETH", - "min_size": "8.82472334", + "min_size": "7.51936236", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BAT" @@ -1282,7 +1282,7 @@ { "asset": "BAT", "currency": "BTC", - "min_size": "6.87190764", + "min_size": "5.59159025", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BAT" @@ -1290,7 +1290,7 @@ { "asset": "ZEN", "currency": "BTC", - "min_size": "0.06080639", + "min_size": "0.05560523", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZEN" @@ -1298,7 +1298,7 @@ { "asset": "QRL", "currency": "BTC", - "min_size": "1.89393939", + "min_size": "1.70149051", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/QRL" @@ -1306,7 +1306,7 @@ { "asset": "QRL", "currency": "ETH", - "min_size": "2.45138896", + "min_size": "2.31761527", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/QRL" @@ -1314,7 +1314,7 @@ { "asset": "CRB", "currency": "BTC", - "min_size": "8.10110175", + "min_size": "7.90139064", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CRB" @@ -1322,7 +1322,7 @@ { "asset": "CRB", "currency": "ETH", - "min_size": "10.42426770", + "min_size": "10.54585337", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/CRB" @@ -1330,7 +1330,7 @@ { "asset": "LGD", "currency": "ETH", - "min_size": "5.15134656", + "min_size": "3.79075057", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LGD" @@ -1338,7 +1338,7 @@ { "asset": "PTOY", "currency": "BTC", - "min_size": "11.48369316", + "min_size": "10.03613007", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PTOY" @@ -1346,7 +1346,7 @@ { "asset": "PTOY", "currency": "ETH", - "min_size": "14.89513823", + "min_size": "13.63661157", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/PTOY" @@ -1354,7 +1354,7 @@ { "asset": "CFI", "currency": "BTC", - "min_size": "22.28163993", + "min_size": "21.68256722", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CFI" @@ -1362,7 +1362,7 @@ { "asset": "CFI", "currency": "ETH", - "min_size": "28.69111149", + "min_size": "28.90173410", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/CFI" @@ -1370,7 +1370,7 @@ { "asset": "BNT", "currency": "BTC", - "min_size": "0.63742988", + "min_size": "0.58624894", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BNT" @@ -1378,7 +1378,7 @@ { "asset": "BNT", "currency": "ETH", - "min_size": "0.81288521", + "min_size": "0.79185592", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BNT" @@ -1386,7 +1386,7 @@ { "asset": "NMR", "currency": "BTC", - "min_size": "0.13829728", + "min_size": "0.12077295", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/NMR" @@ -1394,7 +1394,7 @@ { "asset": "NMR", "currency": "ETH", - "min_size": "0.18050542", + "min_size": "0.16286645", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/NMR" @@ -1402,7 +1402,7 @@ { "asset": "LTC", "currency": "ETH", - "min_size": "0.01884833", + "min_size": "0.01944379", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LTC" @@ -1410,7 +1410,7 @@ { "asset": "XRP", "currency": "ETH", - "min_size": "3.76262360", + "min_size": "3.79722802", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XRP" @@ -1418,7 +1418,7 @@ { "asset": "SNT", "currency": "BTC", - "min_size": "16.08751609", + "min_size": "15.16990291", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SNT" @@ -1426,7 +1426,7 @@ { "asset": "SNT", "currency": "ETH", - "min_size": "20.55667475", + "min_size": "20.39900453", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SNT" @@ -1434,7 +1434,7 @@ { "asset": "DCT", "currency": "BTC", - "min_size": "3.09827736", + "min_size": "2.91069973", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DCT" @@ -1442,7 +1442,7 @@ { "asset": "XEL", "currency": "BTC", - "min_size": "5.88373735", + "min_size": "6.00384246", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/XEL" @@ -1450,7 +1450,7 @@ { "asset": "MCO", "currency": "BTC", - "min_size": "0.23149863", + "min_size": "0.14576750", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MCO" @@ -1458,7 +1458,7 @@ { "asset": "MCO", "currency": "ETH", - "min_size": "0.29888182", + "min_size": "0.19976356", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/MCO" @@ -1466,7 +1466,7 @@ { "asset": "ADT", "currency": "BTC", - "min_size": "41.66666667", + "min_size": "41.18616145", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ADT" @@ -1474,7 +1474,7 @@ { "asset": "ADT", "currency": "ETH", - "min_size": "52.63157895", + "min_size": "55.65449688", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ADT" @@ -1482,7 +1482,7 @@ { "asset": "PAY", "currency": "BTC", - "min_size": "1.63988193", + "min_size": "1.32978723", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PAY" @@ -1490,7 +1490,7 @@ { "asset": "PAY", "currency": "ETH", - "min_size": "2.08741249", + "min_size": "1.75358608", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/PAY" @@ -1498,7 +1498,7 @@ { "asset": "STORJ", "currency": "BTC", - "min_size": "1.98554523", + "min_size": "1.96016936", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/STORJ" @@ -1506,7 +1506,7 @@ { "asset": "STORJ", "currency": "ETH", - "min_size": "2.53056928", + "min_size": "2.62565050", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/STORJ" @@ -1514,7 +1514,7 @@ { "asset": "ADX", "currency": "BTC", - "min_size": "2.46256895", + "min_size": "2.36585597", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ADX" @@ -1522,7 +1522,7 @@ { "asset": "ADX", "currency": "ETH", - "min_size": "3.06868955", + "min_size": "3.14001319", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ADX" @@ -1530,7 +1530,7 @@ { "asset": "DASH", "currency": "ETH", - "min_size": "0.00657284", + "min_size": "0.00660536", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DASH" @@ -1538,7 +1538,7 @@ { "asset": "SC", "currency": "ETH", - "min_size": "140.01680202", + "min_size": "142.00511218", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SC" @@ -1546,7 +1546,7 @@ { "asset": "ZEC", "currency": "ETH", - "min_size": "0.01089652", + "min_size": "0.01075115", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ZEC" @@ -1554,7 +1554,7 @@ { "asset": "ZEC", "currency": "USDT", - "min_size": "0.01260515", + "min_size": "0.01176891", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ZEC" @@ -1562,7 +1562,7 @@ { "asset": "LTC", "currency": "USDT", - "min_size": "0.02198012", + "min_size": "0.02097519", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/LTC" @@ -1570,7 +1570,7 @@ { "asset": "ETC", "currency": "USDT", - "min_size": "0.17543860", + "min_size": "0.16528926", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ETC" @@ -1578,7 +1578,7 @@ { "asset": "XRP", "currency": "USDT", - "min_size": "4.36046518", + "min_size": "4.08997955", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/XRP" @@ -1586,7 +1586,7 @@ { "asset": "OMG", "currency": "BTC", - "min_size": "0.13502638", + "min_size": "0.13261192", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/OMG" @@ -1594,7 +1594,7 @@ { "asset": "OMG", "currency": "ETH", - "min_size": "0.17241379", + "min_size": "0.17856818", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/OMG" @@ -1602,7 +1602,7 @@ { "asset": "CVC", "currency": "BTC", - "min_size": "5.65738855", + "min_size": "5.55432126", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/CVC" @@ -1610,7 +1610,7 @@ { "asset": "CVC", "currency": "ETH", - "min_size": "7.31325601", + "min_size": "7.42302325", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/CVC" @@ -1618,7 +1618,7 @@ { "asset": "PART", "currency": "BTC", - "min_size": "0.12958269", + "min_size": "0.12818738", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/PART" @@ -1626,7 +1626,7 @@ { "asset": "QTUM", "currency": "BTC", - "min_size": "0.11785282", + "min_size": "0.11264712", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/QTUM" @@ -1634,7 +1634,7 @@ { "asset": "QTUM", "currency": "ETH", - "min_size": "0.14983653", + "min_size": "0.15105740", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/QTUM" @@ -1642,7 +1642,7 @@ { "asset": "XMR", "currency": "ETH", - "min_size": "0.01142815", + "min_size": "0.01177831", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XMR" @@ -1650,7 +1650,7 @@ { "asset": "XEM", "currency": "ETH", - "min_size": "7.21511133", + "min_size": "7.20835015", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XEM" @@ -1658,7 +1658,7 @@ { "asset": "XLM", "currency": "ETH", - "min_size": "8.05684913", + "min_size": "7.69668888", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/XLM" @@ -1666,7 +1666,7 @@ { "asset": "NEO", "currency": "ETH", - "min_size": "0.03689944", + "min_size": "0.03761537", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/NEO" @@ -1674,7 +1674,7 @@ { "asset": "XMR", "currency": "USDT", - "min_size": "0.01325967", + "min_size": "0.01266181", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/XMR" @@ -1682,7 +1682,7 @@ { "asset": "DASH", "currency": "USDT", - "min_size": "0.00761867", + "min_size": "0.00709329", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/DASH" @@ -1690,7 +1690,7 @@ { "asset": "BCC", "currency": "ETH", - "min_size": "0.00308477", + "min_size": "0.00282371", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BCC" @@ -1698,7 +1698,7 @@ { "asset": "BCC", "currency": "USDT", - "min_size": "0.00357695", + "min_size": "0.00306588", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/BCC" @@ -1706,7 +1706,7 @@ { "asset": "BCC", "currency": "BTC", - "min_size": "0.00241955", + "min_size": "0.00208856", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BCC" @@ -1714,7 +1714,7 @@ { "asset": "DNT", "currency": "BTC", - "min_size": "26.76659529", + "min_size": "24.92522433", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DNT" @@ -1722,7 +1722,7 @@ { "asset": "DNT", "currency": "ETH", - "min_size": "34.03907686", + "min_size": "33.29559832", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DNT" @@ -1730,7 +1730,7 @@ { "asset": "NEO", "currency": "USDT", - "min_size": "0.04285714", + "min_size": "0.04087193", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/NEO" @@ -1738,7 +1738,7 @@ { "asset": "WAVES", "currency": "ETH", - "min_size": "0.53648011", + "min_size": "0.54347826", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/WAVES" @@ -1746,7 +1746,7 @@ { "asset": "STRAT", "currency": "ETH", - "min_size": "0.47174306", + "min_size": "0.48543689", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/STRAT" @@ -1754,7 +1754,7 @@ { "asset": "DGB", "currency": "ETH", - "min_size": "83.02889406", + "min_size": "79.16402787", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DGB" @@ -1762,7 +1762,7 @@ { "asset": "FCT", "currency": "ETH", - "min_size": "0.09187191", + "min_size": "0.09307791", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/FCT" @@ -1770,7 +1770,7 @@ { "asset": "OMG", "currency": "USDT", - "min_size": "0.19893530", + "min_size": "0.19146217", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/OMG" @@ -1778,7 +1778,7 @@ { "asset": "ADA", "currency": "BTC", - "min_size": "8.06711843", + "min_size": "7.65696784", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ADA" @@ -1786,7 +1786,7 @@ { "asset": "MANA", "currency": "BTC", - "min_size": "20.08032129", + "min_size": "19.23076923", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MANA" @@ -1794,7 +1794,7 @@ { "asset": "MANA", "currency": "ETH", - "min_size": "25.49979600", + "min_size": "25.59115570", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/MANA" @@ -1802,7 +1802,7 @@ { "asset": "SALT", "currency": "BTC", - "min_size": "0.68775791", + "min_size": "0.60245319", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SALT" @@ -1810,7 +1810,7 @@ { "asset": "SALT", "currency": "ETH", - "min_size": "0.87824071", + "min_size": "0.81037277", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SALT" @@ -1818,7 +1818,7 @@ { "asset": "TIX", "currency": "BTC", - "min_size": "3.81679389", + "min_size": "3.59298649", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TIX" @@ -1826,7 +1826,7 @@ { "asset": "TIX", "currency": "ETH", - "min_size": "4.89505013", + "min_size": "4.84575948", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TIX" @@ -1834,7 +1834,7 @@ { "asset": "RCN", "currency": "BTC", - "min_size": "16.05651895", + "min_size": "15.21606817", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/RCN" @@ -1842,7 +1842,7 @@ { "asset": "RCN", "currency": "ETH", - "min_size": "20.67910170", + "min_size": "20.48256933", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/RCN" @@ -1850,7 +1850,7 @@ { "asset": "VIB", "currency": "BTC", - "min_size": "11.51012891", + "min_size": "11.06194690", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VIB" @@ -1858,7 +1858,7 @@ { "asset": "VIB", "currency": "ETH", - "min_size": "14.70718005", + "min_size": "14.67997651", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/VIB" @@ -1866,7 +1866,7 @@ { "asset": "MER", "currency": "BTC", - "min_size": "7.40082889", + "min_size": "7.17360115", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/MER" @@ -1874,7 +1874,7 @@ { "asset": "POWR", "currency": "BTC", - "min_size": "4.40140845", + "min_size": "4.36604960", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/POWR" @@ -1882,7 +1882,7 @@ { "asset": "POWR", "currency": "ETH", - "min_size": "5.59077745", + "min_size": "5.87116319", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/POWR" @@ -1890,7 +1890,7 @@ { "asset": "BTG", "currency": "BTC", - "min_size": "0.03776697", + "min_size": "0.03541312", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BTG" @@ -1898,7 +1898,7 @@ { "asset": "BTG", "currency": "ETH", - "min_size": "0.04812320", + "min_size": "0.04800724", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BTG" @@ -1906,7 +1906,7 @@ { "asset": "BTG", "currency": "USDT", - "min_size": "0.05607477", + "min_size": "0.05138589", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/BTG" @@ -1914,7 +1914,7 @@ { "asset": "ADA", "currency": "ETH", - "min_size": "10.27875997", + "min_size": "10.29760066", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ADA" @@ -1922,7 +1922,7 @@ { "asset": "ENG", "currency": "BTC", - "min_size": "1.04945009", + "min_size": "0.94346743", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ENG" @@ -1930,7 +1930,7 @@ { "asset": "ENG", "currency": "ETH", - "min_size": "1.34171278", + "min_size": "1.26797031", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ENG" @@ -1938,7 +1938,7 @@ { "asset": "ADA", "currency": "USDT", - "min_size": "11.91895113", + "min_size": "11.04672263", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/ADA" @@ -1946,7 +1946,7 @@ { "asset": "XVG", "currency": "USDT", - "min_size": "42.49291785", + "min_size": "42.85714286", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/XVG" @@ -1954,7 +1954,7 @@ { "asset": "NXT", "currency": "USDT", - "min_size": "15.69857891", + "min_size": "14.42306791", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/NXT" @@ -1962,7 +1962,7 @@ { "asset": "UKG", "currency": "BTC", - "min_size": "9.37031484", + "min_size": "7.94407372", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UKG" @@ -1970,7 +1970,7 @@ { "asset": "UKG", "currency": "ETH", - "min_size": "11.90504536", + "min_size": "10.57082452", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/UKG" @@ -1978,7 +1978,7 @@ { "asset": "IGNIS", "currency": "BTC", - "min_size": "19.24557352", + "min_size": "17.42160279", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/IGNIS" @@ -1986,7 +1986,7 @@ { "asset": "SRN", "currency": "BTC", - "min_size": "5.86441473", + "min_size": "5.43714659", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/SRN" @@ -1994,7 +1994,7 @@ { "asset": "SRN", "currency": "ETH", - "min_size": "7.37767810", + "min_size": "7.35672773", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/SRN" @@ -2002,7 +2002,7 @@ { "asset": "WAX", "currency": "BTC", - "min_size": "6.34517766", + "min_size": "5.34644996", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/WAX" @@ -2010,7 +2010,7 @@ { "asset": "WAX", "currency": "ETH", - "min_size": "8.15886951", + "min_size": "7.16876712", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/WAX" @@ -2018,7 +2018,7 @@ { "asset": "ZRX", "currency": "BTC", - "min_size": "2.24941515", + "min_size": "2.26449275", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/ZRX" @@ -2026,7 +2026,7 @@ { "asset": "ZRX", "currency": "ETH", - "min_size": "2.83952160", + "min_size": "3.01719196", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/ZRX" @@ -2034,7 +2034,7 @@ { "asset": "VEE", "currency": "BTC", - "min_size": "45.62043796", + "min_size": "42.37288136", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/VEE" @@ -2042,7 +2042,7 @@ { "asset": "VEE", "currency": "ETH", - "min_size": "58.38393274", + "min_size": "57.85697755", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/VEE" @@ -2050,7 +2050,7 @@ { "asset": "BCPT", "currency": "BTC", - "min_size": "4.05844156", + "min_size": "3.84615385", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/BCPT" @@ -2058,7 +2058,7 @@ { "asset": "BCPT", "currency": "ETH", - "min_size": "5.13747894", + "min_size": "5.17346633", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/BCPT" @@ -2066,7 +2066,7 @@ { "asset": "TRX", "currency": "BTC", - "min_size": "44.09171076", + "min_size": "41.39072848", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TRX" @@ -2074,7 +2074,7 @@ { "asset": "TRX", "currency": "ETH", - "min_size": "55.55555556", + "min_size": "55.43237251", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TRX" @@ -2082,7 +2082,7 @@ { "asset": "TUSD", "currency": "BTC", - "min_size": "2.01061605", + "min_size": "2.07022193", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/TUSD" @@ -2090,7 +2090,7 @@ { "asset": "LRC", "currency": "BTC", - "min_size": "3.12265801", + "min_size": "2.72628135", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/LRC" @@ -2098,7 +2098,7 @@ { "asset": "LRC", "currency": "ETH", - "min_size": "3.94147695", + "min_size": "3.68413684", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/LRC" @@ -2106,7 +2106,7 @@ { "asset": "TUSD", "currency": "ETH", - "min_size": "2.56407627", + "min_size": "2.73201650", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/TUSD" @@ -2114,7 +2114,7 @@ { "asset": "UP", "currency": "BTC", - "min_size": "8.40618695", + "min_size": "8.31669993", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/UP" @@ -2122,7 +2122,7 @@ { "asset": "UP", "currency": "ETH", - "min_size": "10.41731775", + "min_size": "11.49266768", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/UP" @@ -2130,7 +2130,7 @@ { "asset": "DMT", "currency": "BTC", - "min_size": "3.48480624", + "min_size": "3.42559605", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/DMT" @@ -2138,7 +2138,7 @@ { "asset": "DMT", "currency": "ETH", - "min_size": "4.38596491", + "min_size": "4.61199303", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/DMT" @@ -2146,7 +2146,7 @@ { "asset": "TUSD", "currency": "USDT", - "min_size": "2.98507463", + "min_size": "2.99580886", "max_size": "1000000", "increment": "0.00000001", "label": "USDT/TUSD" @@ -2154,7 +2154,7 @@ { "asset": "POLY", "currency": "BTC", - "min_size": "4.81417293", + "min_size": "4.81510015", "max_size": "1000000", "increment": "0.00000001", "label": "BTC/POLY" @@ -2162,9 +2162,25 @@ { "asset": "POLY", "currency": "ETH", - "min_size": "6.04572990", + "min_size": "6.41683778", "max_size": "1000000", "increment": "0.00000001", "label": "ETH/POLY" + }, + { + "asset": "PRO", + "currency": "BTC", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "BTC/PRO" + }, + { + "asset": "PRO", + "currency": "ETH", + "min_size": "0.00000001", + "max_size": "1000000", + "increment": "0.00000001", + "label": "ETH/PRO" } ] \ No newline at end of file From 7510684aaedb18b2e2df5fd36a27ce48bc90d1c2 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Sun, 22 Apr 2018 11:20:41 +0000 Subject: [PATCH 60/74] Exchanges: update-products 978 --- extensions/exchanges/bitfinex/products.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/exchanges/bitfinex/products.json b/extensions/exchanges/bitfinex/products.json index 76c2c6aa06..28b4e044d6 100644 --- a/extensions/exchanges/bitfinex/products.json +++ b/extensions/exchanges/bitfinex/products.json @@ -482,7 +482,7 @@ { "asset": "GNT", "currency": "USD", - "min_size": "52.0", + "min_size": "50.0", "max_size": "200000.0", "increment": "0.000001", "label": "GNT/USD" @@ -490,7 +490,7 @@ { "asset": "GNT", "currency": "BTC", - "min_size": "52.0", + "min_size": "50.0", "max_size": "200000.0", "increment": "0.000000001", "label": "GNT/BTC" @@ -498,7 +498,7 @@ { "asset": "GNT", "currency": "ETH", - "min_size": "52.0", + "min_size": "50.0", "max_size": "200000.0", "increment": "0.000000001", "label": "GNT/ETH" From acbd781790ca2f985946263588c7927fd66fabcc Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Sun, 22 Apr 2018 20:39:07 +0200 Subject: [PATCH 61/74] add support for bitfinex margin trading #1543 (#1556) --- conf-sample.js | 2 +- extensions/exchanges/bitfinex/exchange.js | 155 ++++++++++++++++------ 2 files changed, 116 insertions(+), 41 deletions(-) diff --git a/conf-sample.js b/conf-sample.js index 3708ae458c..3a5390a86a 100644 --- a/conf-sample.js +++ b/conf-sample.js @@ -58,7 +58,7 @@ c.bittrex.secret = 'YOUR-SECRET' c.bitfinex = {} c.bitfinex.key = 'YOUR-API-KEY' c.bitfinex.secret = 'YOUR-SECRET' -// May use 'exchange' or 'trading' wallet balances. However margin trading may not work...read the API documentation. +// May use 'exchange' or 'margin' wallet balances c.bitfinex.wallet = 'exchange' // to enable Bitstamp trading, enter your API credentials: diff --git a/extensions/exchanges/bitfinex/exchange.js b/extensions/exchanges/bitfinex/exchange.js index aa11050332..31c3bc94bb 100644 --- a/extensions/exchanges/bitfinex/exchange.js +++ b/extensions/exchanges/bitfinex/exchange.js @@ -134,7 +134,7 @@ module.exports = function bitfinex (conf) { if (so.debug) console.warn(('\nWarning: Order ' + cid + ' not found in cache for wsUpdateReqOrder (manual order?).').red) return } - + if (so.debug) console.log(ws_orders['~' + cid]) ws_orders['~' + cid].status = 'rejected' @@ -142,15 +142,20 @@ module.exports = function bitfinex (conf) { } } - function updateWallet (wallets) { + function updateWallet(wallets) { if (typeof(wallets[0]) !== 'object') wallets = [wallets] wallets.forEach(function (wallet) { if (wallet[0] === conf.bitfinex.wallet) { + ws_balance[wallet[1].toUpperCase()] = {} ws_balance[wallet[1].toUpperCase()].balance = wallet[2] ws_balance[wallet[1].toUpperCase()].available = wallet[4] ? wallet[4] : 0 - if (wallet[4] !== null) { ws_walletCalcDone[wallet[1]] = true } + ws_balance[wallet[1].toUpperCase()].wallet = wallet[0] + + if (wallet[4] !== null) { + ws_walletCalcDone[wallet[1]] = true + } } }) } @@ -192,6 +197,8 @@ module.exports = function bitfinex (conf) { } function wsError (e) { + console.warn(e) + ws_connecting = false ws_connected = false @@ -230,6 +237,7 @@ module.exports = function bitfinex (conf) { .on('on-req', wsUpdateReqOrder) .on('ou', wsUpdateOrder) .on('oc', wsUpdateOrderCancel) + .on('miu', marginSymbolWebsocket) setInterval(function() { wsConnect() @@ -260,6 +268,87 @@ module.exports = function bitfinex (conf) { return ret.join('&') } + function marginSymbolWebsocket(symbol) { + /* + [ 'sym', + 'tBTCUSD', + [ 103.11144665, // all ? + 103.11144665, // all ? + 23.11144665, // with active orders + 23.11144665, // with active position + null, + null, + null, + null + ] + */ + + if(symbol[0] !== 'sym') { + return + } + + // tBTCUSD + if(symbol[1].substring(0, 1) !== 't') { + return + } + + let pair = symbol[1].substring(1) + + // not nice but values are not splitted + // "tBTCUSD" extract => "USD" + // "tDASHUSD" extract => "USD" + let currency = symbol[1].substring(symbol[1].length - 3) + + // which array index to use to get available balance? :) + ws_balance[currency].available = symbol[2][1] + ws_balance[currency].balance = symbol[2][1] + + ws_walletCalcDone[pair] = true + } + + function updateBalance(opts) { + switch (conf.bitfinex.wallet) { + case 'margin': + try { + ws_walletCalcDone[opts.asset] = 'inProgress' + ws_walletCalcDone[opts.currency] = 'inProgress' + + ws_client.send([0, 'calc', null, [ + ['margin_base'], + ['margin_sym_' + opts.asset.toUpperCase() + opts.currency.toUpperCase()], + ['funding_sym_' + opts.currency.toUpperCase()], + ]]) + } catch (e) { + if (so.debug) { + console.warn(e) + console.warn(('\nWebSockets Warning: Cannot send \'calc\' for getBalance update (maybe connection not open?).').red + ' Waiting for reconnect.') + } + } + + break + + case 'exchange': + try { + ws_walletCalcDone[opts.asset] = 'inProgress' + ws_walletCalcDone[opts.currency] = 'inProgress' + + ws_client.send([0, 'calc', null, [ + ['wallet_exchange_' + opts.currency], + ['wallet_exchange_' + opts.wallet + '_' + opts.asset] + ]]) + } catch (e) { + if (so.debug) { + console.warn(e) + console.warn(('\nWebSockets Warning: Cannot send \'calc\' for getBalance update (maybe connection not open?).').red + ' Waiting for reconnect.') + } + } + + break + default: + console.log('not supported wallet:' + opts.wallet) + } + } + var exchange = { name: 'bitfinex', historyScan: 'backward', @@ -317,7 +406,9 @@ module.exports = function bitfinex (conf) { }, getBalance: function (opts, cb) { - if (!pair) { pair = joinProduct(opts.asset + '-' + opts.currency) } + if (!pair) { + pair = joinProduct(opts.asset + '-' + opts.currency) + } if (pair && !ws_walletCalcDone) { ws_walletCalcDone = {} @@ -325,7 +416,10 @@ module.exports = function bitfinex (conf) { ws_walletCalcDone[opts.currency] = false } - if (!ws_client) { wsClient() } + if (!ws_client) { + wsClient() + } + if (Object.keys(ws_balance).length === 0) { if (so.debug && ws_connected === true) { console.warn(('WebSockets Warning: Waiting for initial websockets snapshot.').red + ' Retrying in ' + (ws_retry / 1000 + ' seconds').yellow + '.') @@ -334,44 +428,21 @@ module.exports = function bitfinex (conf) { } if (ws_walletCalcDone[opts.asset] === false && ws_walletCalcDone[opts.currency] === false) { - var ws_update_wallet = [ - 0, - 'calc', - null, - [ - ['wallet_exchange_' + opts.currency], - ['wallet_exchange_' + opts.asset] - ] - ] - - try { - ws_walletCalcDone[opts.asset] = 'inProgress' - ws_walletCalcDone[opts.currency] = 'inProgress' - - ws_client.send(ws_update_wallet) - } - catch (e) { - if (so.debug) { - console.warn(e) - console.warn(('\nWebSockets Warning: Cannot send \'calc\' for getBalance update (maybe connection not open?).').red + ' Waiting for reconnect.') - } - } - + updateBalance(opts) return waitForCalc('getBalance', opts, cb) - } - else if ( + } else if ( (ws_walletCalcDone[opts.asset] === false && ws_walletCalcDone[opts.currency] === true) || (ws_walletCalcDone[opts.asset] === true && ws_walletCalcDone[opts.currency] === false) ) { return waitForCalc('getBalance', opts, cb) - } - else { - var balance = {} - balance.currency = ws_balance[opts.currency] && ws_balance[opts.currency].balance ? n(ws_balance[opts.currency].balance).format('0.00000000') : n(0).format('0.00000000') - balance.asset = ws_balance[opts.asset] && ws_balance[opts.asset].balance ? n(ws_balance[opts.asset].balance).format('0.00000000') : n(0).format('0.00000000') + } else { + let balance = {} + + balance.currency = ws_balance[opts.currency] && ws_balance[opts.currency].balance ? n(ws_balance[opts.currency].balance).format('0.00000000') : n(0).format('0.00000000') + balance.asset = ws_balance[opts.asset] && ws_balance[opts.asset].balance ? n(ws_balance[opts.asset].balance).format('0.00000000') : n(0).format('0.00000000') balance.currency_hold = ws_balance[opts.currency] && ws_balance[opts.currency].available ? n(ws_balance[opts.currency].balance).subtract(ws_balance[opts.currency].available).format('0.00000000') : n(0).format('0.00000000') - balance.asset_hold = ws_balance[opts.asset] && ws_balance[opts.asset].available ? n(ws_balance[opts.asset].balance).subtract(ws_balance[opts.asset].available).format('0.00000000') : n(0).format('0.00000000') + balance.asset_hold = ws_balance[opts.asset] && ws_balance[opts.asset].available ? n(ws_balance[opts.asset].balance).subtract(ws_balance[opts.asset].available).format('0.00000000') : n(0).format('0.00000000') ws_walletCalcDone[opts.asset] = false ws_walletCalcDone[opts.currency] = false @@ -420,15 +491,19 @@ module.exports = function bitfinex (conf) { var amount = action === 'buy' ? opts.size : opts.size * -1 var price = opts.price + // only exchange need a prefix; no needed for margin + let walletName = conf.bitfinex.wallet.toUpperCase() === 'EXCHANGE' ? 'EXCHANGE ' : '' + if (opts.order_type === 'maker' && typeof opts.type === 'undefined') { - opts.type = 'EXCHANGE LIMIT' - } - else if (opts.order_type === 'taker' && typeof opts.type === 'undefined') { - opts.type = 'EXCHANGE MARKET' + opts.type = walletName + 'LIMIT' + } else if (opts.order_type === 'taker' && typeof opts.type === 'undefined') { + opts.type = walletName + 'MARKET' } + if (typeof opts.post_only === 'undefined') { opts.post_only = true } + var type = opts.type var is_postonly = opts.post_only From 6626a73f344f1f601f9d2ef1139064352ac6f78a Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Mon, 23 Apr 2018 10:51:34 +0200 Subject: [PATCH 62/74] add asset balance support for bitfinex margin trading #1543 (#1558) --- extensions/exchanges/bitfinex/exchange.js | 85 +++++++++++++++++++++-- 1 file changed, 79 insertions(+), 6 deletions(-) diff --git a/extensions/exchanges/bitfinex/exchange.js b/extensions/exchanges/bitfinex/exchange.js index 31c3bc94bb..6bad4eb636 100644 --- a/extensions/exchanges/bitfinex/exchange.js +++ b/extensions/exchanges/bitfinex/exchange.js @@ -238,6 +238,11 @@ module.exports = function bitfinex (conf) { .on('ou', wsUpdateOrder) .on('oc', wsUpdateOrderCancel) .on('miu', marginSymbolWebsocket) + .on('ps', assetPositionMargin) + + // we need also more position updates here, but messages are completely undocumented + // https://bitfinex.readme.io/v1/reference#ws-auth-position-updates + // possible only "pu" for update setInterval(function() { wsConnect() @@ -245,6 +250,74 @@ module.exports = function bitfinex (conf) { } } + /** + * + * @param position ['tXRPUSD'] + * @returns {string} + */ + function assetPositionMarginAssetExtract(position) { + let pair = position[0] + + // tXRPUSD + if (pair.substring(0, 1) === 't') { + pair = pair.substring(1) + } + + return pair.substring(0, pair.length - 3) + } + + /** + * We have no wallet on margin orders; fake current asset capital via open position + * + * @param positions + * @see https://bitfinex.readme.io/v1/reference#ws-auth-position-snapshot + */ + function assetPositionMargin(positions) { + // skip non margin + if(conf.bitfinex.wallet !== 'margin') { + return + } + + // current positions in request + // we need it for clear + let assets = [] + + positions.filter(function (position) { + return position.length > 2 + }).forEach(function (position) { + let asset = assetPositionMarginAssetExtract(position) + if (!ws_balance[asset]) { + ws_balance[asset] = {} + } + + assets.push(asset) + + let action = position[1].toLowerCase() + + if(action === 'active') { + ws_balance[asset].balance = position[2] + ws_balance[asset].available = position[2] + ws_balance[asset].wallet = 'margin' + } else if(action === 'closed') { + ws_balance[asset].balance = 0 + ws_balance[asset].available = 0 + ws_balance[asset].wallet = 'margin' + } + }) + + // clear non open positions; which are not existing anymore + for(let key in ws_balance) { + if(assets.indexOf(key) < 0 && ws_balance[key]) { + ws_balance[key].balance = 0 + ws_balance[key].available = 0 + + if(so.debug) { + console.log('Clear asset: ' + JSON.stringify(ws_balance[key])) + } + } + } + } + function joinProduct (product_id) { return product_id.split('-')[0] + '' + product_id.split('-')[1] } @@ -272,10 +345,10 @@ module.exports = function bitfinex (conf) { /* [ 'sym', 'tBTCUSD', - [ 103.11144665, // all ? - 103.11144665, // all ? - 23.11144665, // with active orders - 23.11144665, // with active position + [ 101.11144665, // "all" - "active positions" + 179.11144665, // "all" + 78.11144665, // "all" - "active positions" - "active unfilled orders" + 78.11144665, // "all" - "active positions" - "active unfilled orders" ? null, null, null, @@ -300,8 +373,8 @@ module.exports = function bitfinex (conf) { let currency = symbol[1].substring(symbol[1].length - 3) // which array index to use to get available balance? :) - ws_balance[currency].available = symbol[2][1] - ws_balance[currency].balance = symbol[2][1] + ws_balance[currency].available = symbol[2][0] + ws_balance[currency].balance = symbol[2][0] ws_walletCalcDone[pair] = true } From 055c8f73315484b6a0891a6c1aab061f889a6597 Mon Sep 17 00:00:00 2001 From: LoneWolf345 Date: Mon, 23 Apr 2018 04:36:45 -0500 Subject: [PATCH 63/74] [Strategy] Ehlers trend (#1553) * [Strategy] Ichimoku Score * Add Ichimoku readme * Initial commit * remove accidental file * remove Readme * ehlers trend * added readme --- extensions/strategies/ehlers_mama/README.md | 300 ++++++++++++++++++ extensions/strategies/ehlers_mama/strategy.js | 171 ++++++++++ extensions/strategies/ehlers_trend/README.md | 264 +++++++++++++++ .../strategies/ehlers_trend/strategy.js | 86 +++++ lib/helpers.js | 58 ++++ 5 files changed, 879 insertions(+) create mode 100644 extensions/strategies/ehlers_mama/README.md create mode 100644 extensions/strategies/ehlers_mama/strategy.js create mode 100644 extensions/strategies/ehlers_trend/README.md create mode 100644 extensions/strategies/ehlers_trend/strategy.js create mode 100644 lib/helpers.js diff --git a/extensions/strategies/ehlers_mama/README.md b/extensions/strategies/ehlers_mama/README.md new file mode 100644 index 0000000000..f41ce4e08e --- /dev/null +++ b/extensions/strategies/ehlers_mama/README.md @@ -0,0 +1,300 @@ + ======= Ehlers MESA Adaptive Moving Average ======= + +Developed by John Ehlers, the MESA Adaptive Moving Average is a technical trend-following indicator which, +according to its creator, adapts to price movement “based on the rate change of phase as measured by the +Hilbert Transform Discriminator”. This method of adaptation features a fast and a slow moving average so +that the composite moving average swiftly responds to price changes and holds the average value until the +next bar’s close. Ehlers states that because the average’s fallback is slow, you can create trading systems +with almost whipsaw-free trades. + +Basically the indicator looks like two moving averages, but instead of curving around the price action, +the MESA Adaptive MA moves in a staircase manner as the price ratchets. It produces two outputs, MAMA and FAMA. +FAMA (Following Adaptive Moving Average) is a result of MAMA being applied to the first MAMA line. The FAMA +is synchronized in time with MAMA, but its vertical movement comes with a lag. Thus, the two don’t cross unless +a major change in market direction occurs, resulting in a moving average crossover system which is “virtually +free of whipsaw trades”, according to Ehlers. + +If you appreciate the work and the man hours that went into creating this strategy, please consider giving back. + +LoneWolf345 ETH = 0xa42f6d21f1e52f7fbaeaa0f58d1cc4b9a58f2dcc , BTC = 15L8QstCQG4ho6139hVaqLxkAzcjnqBbf6 +Travis ETH = 0xdA963A127BeCB08227583d11f912F400D5347060 , BTC = 3KKHdBJpEGxghxGazoE4X7ihyr2q6nHUvW + + + + + + + + + + + ===== Trading View Script ===== + + +//@version=2 +strategy("Ehlers MESA Adaptive Moving Average", shorttitle="Ehlers_MAMA", overlay=true, precision=3, initial_capital=1000) + +// === INPUTS + +src=input(hlc3, title="Source") +fl=input(.5, title="Fast Limit", step=0.5) +sl=input(.05, title="Slow Limit", step=0.05) +pa=input(true, title="Mark crossover points") +fr=input(true, title="Fill MAMA/FAMA Region") +ebc=input(false, title="Enable Bar colors") +// === /INPUTS + + + +// === FUNCTIONS + +pi = 3.1415926 +sp = (4*src + 3*src[1] + 2*src[2] + src[3]) / 10.0 +dt = (.0962*sp + .5769*nz(sp[2]) - .5769*nz(sp[4])- .0962*nz(sp[6]))*(.075*nz(p[1]) + .54) +q1 = (.0962*dt + .5769*nz(dt[2]) - .5769*nz(dt[4])- .0962*nz(dt[6]))*(.075*nz(p[1]) + .54) +i1 = nz(dt[3]) +jI = (.0962*i1 + .5769*nz(i1[2]) - .5769*nz(i1[4])- .0962*nz(i1[6]))*(.075*nz(p[1]) + .54) +jq = (.0962*q1 + .5769*nz(q1[2]) - .5769*nz(q1[4])- .0962*nz(q1[6]))*(.075*nz(p[1]) + .54) +i2_ = i1 - jq +q2_ = q1 + jI +i2 = .2*i2_ + .8*nz(i2[1]) +q2 = .2*q2_ + .8*nz(q2[1]) +re_ = i2*nz(i2[1]) + q2*nz(q2[1]) +im_ = i2*nz(q2[1]) - q2*nz(i2[1]) +re = .2*re_ + .8*nz(re[1]) +im = .2*im_ + .8*nz(im[1]) +p1 = iff(im!=0 and re!=0, 360/atan(im/re), nz(p[1])) +p2 = iff(p1 > 1.5*nz(p1[1]), 1.5*nz(p1[1]), iff(p1 < 0.67*nz(p1[1]), 0.67*nz(p1[1]), p1)) +p3 = iff(p2<6, 6, iff (p2 > 50, 50, p2)) +p = .2*p3 + .8*nz(p3[1]) +spp = .33*p + .67*nz(spp[1]) +phase = atan(q1 / i1) +dphase_ = nz(phase[1]) - phase +dphase = iff(dphase_< 1, 1, dphase_) +alpha_ = fl / dphase +alpha = iff(alpha_ < sl, sl, iff(alpha_ > fl, fl, alpha_)) +mama = alpha*src + (1 - alpha)*nz(mama[1]) +fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1]) + +plotarrow(pa?(cross(mama, fama)?mamafama?mama:fama):na, style=circles, color=gray, linewidth=0, title="DummyL") +mamal=plot(mama, title="MAMA", color=red, linewidth=0) +famal=plot(fama, title="FAMA", color=green, linewidth=0) +fill(duml, mamal, red, transp=50, title="NegativeFill") +fill(duml, famal, green, transp=50, title="PositiveFill") +bc=mama>fama?lime:red + +// === Upgraded Conditions Framework === + +//////////////////////////////////////////////////////////////////////////// + +long_entry = cross(mama, fama)?mama>fama?true:false:false + +short_entry = cross(mama, fama)?mama last_shortCondition and last_longCondition >= last_longClose +in_shortCondition = last_shortCondition > last_longCondition and last_shortCondition >= last_shortClose +// === /END + +// === Stop Loss (Long) === +isSLl = input(false, "Stop Loss (Long)") +sll = input(6, "Stop Loss %", type=float, step=0.2, minval=0, maxval=100) / 100 +long_call_sl = last_open_longCondition * (1 - sll) +long_sl = isSLl and low <= long_call_sl and longCondition == 0 +// === /END + +// === Stop Loss (Short) === +isSLs = false //input(false, "Stop Loss (Short)") +sls = 6 //input(6, "Stop Loss %", type=float, step=0.2, minval=0, maxval=100) / 100 +short_call_sl = last_open_shortCondition * (1 + sls) +short_sl = isSLs and high >= short_call_sl and shortCondition == 0 +// === /END + +// === Trailing Stop === +last_high = na +last_low = na +last_high := in_longCondition ? (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1]) : na +last_low := in_shortCondition ? (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1]) : na +isTSl = input(false, "Trailing Stop Long") +tsil = input(25, "Activate Trailing Stop % Long", type=float, step=1, minval=0, maxval=100) / 100 +tsl = input(8, "Trailing Stop % Long", type=float, step=1, minval=0, maxval=100) / 100 +long_call_ts = last_high * (1 - tsl) +long_call_tsi = last_open_longCondition * (1 + tsil) +long_ts = isTSl and not na(last_high) and low <= long_call_ts and longCondition == 0 and last_high >= long_call_tsi +isTSs = false //input(false, "Trailing Stop Short") +tsis = 25 //input(25, "Activate Trailing Stop % Short", type=float, step=1, minval=0, maxval=100) / 100 +tss = 8 //input(8, "Trailing Stop % Short", type=float, step=1, minval=0, maxval=100) / 100 +short_call_ts = last_low * (1 + tss) +short_call_tsi = last_open_shortCondition * (1 - tsis) +short_ts = isTSs and not na(last_low) and high >= short_call_ts and shortCondition == 0 and last_low <= short_call_tsi +// === /END + +// === Create Single Close For All Closing Conditions === +closelong = long_sl or long_ts or longX +closeshort = short_sl or short_ts or shortX + +// Get Last Close +last_long_close := closelong ? time : nz(last_long_close[1]) +last_short_close := closeshort ? time : nz(last_short_close[1]) + +// Check For Close Since Last Open +if closelong and last_long_close[1] > last_longCondition + closelong := false + +if closeshort and last_short_close[1] > last_shortCondition + closeshort := false +// === /END + +//////////////////////////////////////////////////////////////////////////// + +// === Alarm Settings === +//alertcondition(longCondition==1, title='LONG', message='LONG') +//alertcondition(closelong==1, title='EXIT LONG', message='EXIT LONG') +//alertcondition(shortCondition==1, title='SHORT', message='SHORT') +//alertcondition(closeshort==1, title='EXIT SHORT', message='EXIT SHORT') +// === /END + +//////////////////////////////////////////////////////////////////////////// + +// === Visuals & Debugs Here === +//Remove "//" To Check/Debug The Code Above +// Signal Shapes +//plotshape(longCondition[1]==1, title='LONG', style=shape.triangleup, size=size.large, color=#02CB80, location= location.belowbar) +//plotshape(shortCondition[1]==1, title='SHORT', style=shape.triangledown, size=size.large, color=#DC143C, location=location.abovebar) +//plotshape(shortCondition[1]==0 and closelong[1]==1, title='EXIT LONG', style=shape.xcross, color=#02CB80, location=location.belowbar, transp=0) +//plotshape(longCondition[1]==0 and closeshort[1]==1, title='EXIT SHORT', style=shape.xcross, color=#DC143C, location=location.abovebar, transp=0) +// SL Plot +//slColor = (isSLl or isSLs) and (in_longCondition or in_shortCondition) ? red : white +//plot(isSLl and in_longCondition ? long_call_sl : na, "Long SL", slColor, style=3, linewidth=2) +//plot(isSLs and in_shortCondition ? short_call_sl : na, "Short SL", slColor, style=3, linewidth=2) +// TP Plot +//tpColor = isTP and (in_longCondition or in_shortCondition) ? purple : white +//plot(isTP and in_longCondition ? long_call_tp : na, "Long TP", tpColor, style=3, linewidth=2) +//plot(isTP and in_shortCondition ? short_call_tp : na, "Short TP", tpColor, style=3, linewidth=2) +// TS Plot +//tsColor = (isTSl or isTSs) and (in_longCondition or in_shortCondition) ? orange : white +//tsiColor = (isTSl or isTSs) and (in_longCondition or in_shortCondition) ? white : orange +//plot(isTSl and in_longCondition ? long_call_tsi : na, "Long Trailing", tsiColor, style=3, linewidth=2) +//plot(isTSs and in_shortCondition ? short_call_tsi : na, "Short Trailing", tsiColor, style=3, linewidth=2) +//plot(isTSl and in_longCondition and last_high > long_call_tsi ? long_call_ts : na, "Long Trailing", tsColor, style=2, linewidth=2) +//plot(isTSs and in_shortCondition and last_low < short_call_tsi ? short_call_ts : na, "Short Trailing", tsColor, style=2, linewidth=2) +// === /END + +//////////////////////////////////////////////////////////////////////////// +// // +// REMOVE THE CODE BELOW FOR STUDY CONVERSION // +// // +//////////////////////////////////////////////////////////////////////////// + +// === Strategy Direction Switch === +dir = "Long" //input(title = "Strategy Direction", defval="Long") //, options=["Long", "Short", "Both"] +// === /END + +// === Backtesting Dates === +testPeriodSwitch = input(false, "Custom Backtesting Dates") +testStartYear = input(2017, "Backtest Start Year") +testStartMonth = input(1, "Backtest Start Month") +testStartDay = input(1, "Backtest Start Day") +testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) +testStopYear = input(9999, "Backtest Stop Year") +testStopMonth = input(1, "Backtest Stop Month") +testStopDay = input(1, "Backtest Stop Day") +testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) +testPeriod() => + time >= testPeriodStart and time <= testPeriodStop ? true : false +isPeriod = testPeriodSwitch == true ? testPeriod() : true +// === /END + +// === Strategy === +if isPeriod and dir=="Both" + if (longCondition) + strategy.entry("Long",strategy.long) + if (closelong) and not shortCondition + strategy.close("Long") + if (shortCondition) + strategy.entry("Short",strategy.short) + if (closeshort) and not longCondition + strategy.close("Short") + +if isPeriod and dir=="Long" + if (longCondition) + strategy.entry("Long",strategy.long) + if (closelong) + strategy.close("Long") + +if isPeriod and dir=="Short" + if (shortCondition) + strategy.entry("Short",strategy.short) + if (closeshort) + strategy.close("Short") +// === /END + +//////////////////////////////////////////////////////////////////////////// +// // +// ULTIMATE PINE INJECTOR V1.2 // +// // +//////////////////////===ANION=CODE=END====///////////////////////////////// \ No newline at end of file diff --git a/extensions/strategies/ehlers_mama/strategy.js b/extensions/strategies/ehlers_mama/strategy.js new file mode 100644 index 0000000000..a8d0fff77d --- /dev/null +++ b/extensions/strategies/ehlers_mama/strategy.js @@ -0,0 +1,171 @@ +/* + ======= Ehlers MESA Adaptive Moving Average ======= + +Developed by John Ehlers, the MESA Adaptive Moving Average is a technical trend-following indicator which, +according to its creator, adapts to price movement “based on the rate change of phase as measured by the +Hilbert Transform Discriminator”. This method of adaptation features a fast and a slow moving average so +that the composite moving average swiftly responds to price changes and holds the average value until the +next bar’s close. Ehlers states that because the average’s fallback is slow, you can create trading systems +with almost whipsaw-free trades. + +Basically the indicator looks like two moving averages, but instead of curving around the price action, +the MESA Adaptive MA moves in a staircase manner as the price ratchets. It produces two outputs, MAMA and FAMA. +FAMA (Following Adaptive Moving Average) is a result of MAMA being applied to the first MAMA line. The FAMA +is synchronized in time with MAMA, but its vertical movement comes with a lag. Thus, the two don’t cross unless +a major change in market direction occurs, resulting in a moving average crossover system which is “virtually +free of whipsaw trades”, according to Ehlers. + +If you appreciate the work and the man hours that went into creating this strategy, please consider giving back. + +LoneWolf345 ETH = 0xa42f6d21f1e52f7fbaeaa0f58d1cc4b9a58f2dcc , BTC = 15L8QstCQG4ho6139hVaqLxkAzcjnqBbf6 +Travis ETH = 0xdA963A127BeCB08227583d11f912F400D5347060 , BTC = 3KKHdBJpEGxghxGazoE4X7ihyr2q6nHUvW + +*/ + + +let z = require('zero-fill'), + n = require('numbro'), + Phenotypes = require('../../../lib/phenotype'), + crossover = require('../../../lib/helpers').crossover, + crossunder = require('../../../lib/helpers').crossunder, + nz = require('../../../lib/helpers').nz, + iff = require('../../../lib/helpers').iff, + tv = require('../../../lib/helpers') + +module.exports = { + name: 'Ehlers MAMA', + description: 'Ehlers MESA Adaptive Moving Average', + + getOptions: function() { + this.option('period', 'period length eg 10m', String, '60m') + this.option('min_periods', 'min. number of history periods', Number, 6) + + // this.option('mama_periods', '', Number, 5) + this.option('mama_fastlimit', '', Number, 0.5) + this.option('mama_slowlimit', '', Number, 0.09) + this.option('price_source', '', String, 'HAohlc4') + + }, + + calculate: function() {}, + + onPeriod: function(s, cb) { + + if (!s.mama) { + s.mama = { + src: [], + sp: [], + dt: [], + q1: [], + i1: [], + i2: [], + q2: [], + re: [], + im: [], + p: [], + p1: [], + p3: [], + spp: [], + phase: [], + mama: [], + fama: [] + } + } + + if (s.lookback.length > s.options.min_periods) { + if(!s.options.price_source || s.options.price_source === 'close'){ + s.mama.src.unshift(s.period.close) + } else if (s.options.price_source === 'hl2'){ + s.mama.src.unshift(tv.hl2(s.period)) + } else if (s.options.price_source === 'hlc3'){ + s.mama.src.unshift(tv.hlc3(s.period)) + } else if (s.options.price_source === 'ohlc4'){ + s.mama.src.unshift(tv.ohlc4(s.period)) + } else if (s.options.price_source === 'HAohlc4'){ + s.mama.src.unshift(tv.HAohlc4(s)) + } + + //s.mama.src.unshift((s.period.high + s.period.low) / 2) + s.mama.sp.unshift((4 * s.mama.src[0] + 3 * s.mama.src[1] + 2 * s.mama.src[2] + s.mama.src[3]) / 10.0) + s.mama.dt.unshift((.0962 * s.mama.sp[0] + .5769 * nz(s.mama.sp[2]) - .5769 * nz(s.mama.sp[4]) - .0962 * nz(s.mama.sp[6])) * (.075 * nz(s.mama.p[0]) + .54)) + s.mama.q1.unshift((.0962 * s.mama.dt[0] + .5769 * nz(s.mama.dt[2]) - .5769 * nz(s.mama.dt[4]) - .0962 * nz(s.mama.dt[6])) * (.075 * nz(s.mama.p[0]) + .54)) + s.mama.i1.unshift(nz(s.mama.dt[3])) + let jI = (.0962 * s.mama.i1[0] + .5769 * nz(s.mama.i1[2]) - .5769 * nz(s.mama.i1[4]) - .0962 * nz(s.mama.i1[6])) * (.075 * nz(s.mama.p[0]) + .54) + let jq = (.0962 * s.mama.q1[0] + .5769 * nz(s.mama.q1[2]) - .5769 * nz(s.mama.q1[4]) - .0962 * nz(s.mama.q1[6])) * (.075 * nz(s.mama.p[0]) + .54) + let i2_ = s.mama.i1[0] - jq + let q2_ = s.mama.q1[0] + jI + s.mama.i2.unshift(.2 * i2_ + .8 * nz(s.mama.i2[0])) + s.mama.q2.unshift(.2 * q2_ + .8 * nz(s.mama.q2[0])) + let re_ = s.mama.i2[0] * nz(s.mama.i2[1]) + s.mama.q2[0] * nz(s.mama.q2[1]) + let im_ = s.mama.i2[0] * nz(s.mama.q2[1]) - s.mama.q2[0] * nz(s.mama.i2[1]) + s.mama.re.unshift(.2 * re_ + .8 * nz(s.mama.re[0])) + s.mama.im.unshift(.2 * im_ + .8 * nz(s.mama.im[0])) + s.mama.p1.unshift(iff(s.mama.im[0] != 0 && s.mama.re[0] != 0, 360 / Math.atan(s.mama.im[0] / s.mama.re[0]), nz(s.mama.p[0]))) + let p2 = iff(s.mama.p1[0] > 1.5 * nz(s.mama.p1[1]), 1.5 * nz(s.mama.p1[1]), iff(s.mama.p1[0] < 0.67 * nz(s.mama.p1[1]), 0.67 * nz(s.mama.p1[1]), s.mama.p1[0])) + s.mama.p3.unshift(iff(p2 < 6, 6, iff(p2 > 50, 50, p2))) + s.mama.p.unshift(.2 * s.mama.p3[0] + .8 * nz(s.mama.p3[1])) + s.mama.spp.unshift(.33 * s.mama.p[0] + .67 * nz(s.mama.spp[0])) + s.mama.phase.unshift(Math.atan(s.mama.q1[0] / s.mama.i1[0])) + let dphase_ = nz(s.mama.phase[1]) - s.mama.phase[0] + let dphase = iff(dphase_ < 1, 1, dphase_) + let alpha_ = s.options.mama_fastlimit / dphase + let alpha = iff(alpha_ < s.options.mama_slowlimit, s.options.mama_slowlimit, iff(alpha_ > s.options.mama_fastlimit, s.options.mama_fastlimit, alpha_)) + s.mama.mama.unshift(alpha * s.mama.src[0] + (1 - alpha) * nz(s.mama.mama[0])) + s.mama.fama.unshift(.5 * alpha * s.mama.mama[0] + (1 - .5 * alpha) * nz(s.mama.fama[0])) + + s.period.mama = s.mama.mama[0] + s.period.fama = s.mama.fama[0] + + if (s.mama.src.length > 7) + Object.keys(s.mama).forEach(k => { + s.mama[k].pop() + }) + + + if (!s.in_preroll) { + + if (crossover(s, 'mama', 'fama')) + s.signal = 'buy' + else if (crossunder(s, 'mama', 'fama')) + s.signal = 'sell' + else + s.signal = null + } + } + cb() + }, + + + onReport: function(s) { + var cols = [] + let color = 'cyan' + if (s.period.fama < s.period.mama) { + color = 'green' + } else if (s.period.fama > s.period.mama) { + color = 'red' + } + cols.push(z(10, 'M[' + n(s.period.mama).format('###.0') + ']', '')[color]) + cols.push(z(10, ' F[' + n(s.period.fama).format('###.0') + ']', '')[color]) + + return cols + }, + + phenotypes: { + + //General Options + period_length: Phenotypes.RangePeriod(5, 240, 'm'), + min_periods: Phenotypes.Range(10, 10), + markdown_buy_pct: Phenotypes.RangeFloat(0, 0), + markup_sell_pct: Phenotypes.RangeFloat(0, 0), + order_type: Phenotypes.ListOption(['maker', 'taker']), + sell_stop_pct: Phenotypes.Range0(1, 50), + buy_stop_pct: Phenotypes.Range0(1, 50), + profit_stop_enable_pct: Phenotypes.Range(1, 20), + profit_stop_pct: Phenotypes.Range(1, 10), + + //Strategy Specific + mama_fastlimit: Phenotypes.RangeFactor(0.1, 0.9, 0.1), + mama_slow_limit: Phenotypes.RangeFactor(0.01, 0.09, 0.01), + price_source: Phenotypes.ListOption(['hl2', 'hlc3', 'ohlc4', 'HAohlc4']) + } +} diff --git a/extensions/strategies/ehlers_trend/README.md b/extensions/strategies/ehlers_trend/README.md new file mode 100644 index 0000000000..25237feeb1 --- /dev/null +++ b/extensions/strategies/ehlers_trend/README.md @@ -0,0 +1,264 @@ + ======= Ehlers Instantaneous Trend ======= + + + +If you appreciate the work and the man hours that went into creating this strategy, please consider giving back. + +LoneWolf345 ETH = 0xa42f6d21f1e52f7fbaeaa0f58d1cc4b9a58f2dcc , BTC = 15L8QstCQG4ho6139hVaqLxkAzcjnqBbf6 +Travis ETH = 0xdA963A127BeCB08227583d11f912F400D5347060 , BTC = 3KKHdBJpEGxghxGazoE4X7ihyr2q6nHUvW + + + + + + + + + + + ===== Trading View Script ===== + + +//@version=2 +strategy(title="Ehlers Instantaneous Trend", shorttitle="Ehlers IT", overlay=true, precision=3, initial_capital=1000) + +// === INPUTS + +src=input(hl2, title="Source") +a= input(0.07, title="Alpha", step=0.01) +fr=input(true, title="Fill Trend Region") +ebc=input(false, title="Enable barcolors") +hr=input(false, title="Hide Ribbon") +pa=input(true, title="Arrow Markers") +// === /INPUTS + + + +// === FUNCTIONS + +it=(a-((a*a)/4.0))*src+0.5*a*a*src[1]-(a-0.75*a*a)*src[2]+2*(1-a )*nz(it[1], ((src+2*src[1]+src[2])/4.0))-(1-a )*(1-a )*nz(it[2], ((src+2*src[1]+src[2])/4.0)) +lag=2.0*it-nz(it[2]) +dl=plot(fr and (not hr)?(it>lag?lag:it):na, color=gray, style=circles, linewidth=0, title="Dummy") +itl=plot(hr?na:it, color=fr?gray:red, linewidth=1, title="Trend") +ll=plot(hr?na:lag, color=fr?gray:blue, linewidth=1, title="Trigger") +plotarrow(pa?(cross(it, lag)?laglag?red:lime) +barcolor(bc) + + +// === Upgraded Conditions Framework === + +//////////////////////////////////////////////////////////////////////////// + +long_entry = cross(it, lag)?lag>it?true:false:false + +short_entry = cross(it, lag)?lag last_shortCondition and last_longCondition >= last_longClose +in_shortCondition = last_shortCondition > last_longCondition and last_shortCondition >= last_shortClose +// === /END + +// === Stop Loss (Long) === +isSLl = input(false, "Stop Loss (Long)") +sll = input(6, "Stop Loss %", type=float, step=0.2, minval=0, maxval=100) / 100 +long_call_sl = last_open_longCondition * (1 - sll) +long_sl = isSLl and low <= long_call_sl and longCondition == 0 +// === /END + +// === Stop Loss (Short) === +isSLs = false //input(false, "Stop Loss (Short)") +sls = 6 //input(6, "Stop Loss %", type=float, step=0.2, minval=0, maxval=100) / 100 +short_call_sl = last_open_shortCondition * (1 + sls) +short_sl = isSLs and high >= short_call_sl and shortCondition == 0 +// === /END + +// === Trailing Stop === +last_high = na +last_low = na +last_high := in_longCondition ? (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1]) : na +last_low := in_shortCondition ? (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1]) : na +isTSl = input(false, "Trailing Stop Long") +tsil = input(25, "Activate Trailing Stop % Long", type=float, step=1, minval=0, maxval=100) / 100 +tsl = input(8, "Trailing Stop % Long", type=float, step=1, minval=0, maxval=100) / 100 +long_call_ts = last_high * (1 - tsl) +long_call_tsi = last_open_longCondition * (1 + tsil) +long_ts = isTSl and not na(last_high) and low <= long_call_ts and longCondition == 0 and last_high >= long_call_tsi +isTSs = false //input(false, "Trailing Stop Short") +tsis = 25 //input(25, "Activate Trailing Stop % Short", type=float, step=1, minval=0, maxval=100) / 100 +tss = 8 //input(8, "Trailing Stop % Short", type=float, step=1, minval=0, maxval=100) / 100 +short_call_ts = last_low * (1 + tss) +short_call_tsi = last_open_shortCondition * (1 - tsis) +short_ts = isTSs and not na(last_low) and high >= short_call_ts and shortCondition == 0 and last_low <= short_call_tsi +// === /END + +// === Create Single Close For All Closing Conditions === +closelong = long_sl or long_ts or longX +closeshort = short_sl or short_ts or shortX + +// Get Last Close +last_long_close := closelong ? time : nz(last_long_close[1]) +last_short_close := closeshort ? time : nz(last_short_close[1]) + +// Check For Close Since Last Open +if closelong and last_long_close[1] > last_longCondition + closelong := false + +if closeshort and last_short_close[1] > last_shortCondition + closeshort := false +// === /END + +//////////////////////////////////////////////////////////////////////////// + +// === Alarm Settings === +//alertcondition(longCondition==1, title='LONG', message='LONG') +//alertcondition(closelong==1, title='EXIT LONG', message='EXIT LONG') +//alertcondition(shortCondition==1, title='SHORT', message='SHORT') +//alertcondition(closeshort==1, title='EXIT SHORT', message='EXIT SHORT') +// === /END + +//////////////////////////////////////////////////////////////////////////// + +// === Visuals & Debugs Here === +//Remove "//" To Check/Debug The Code Above +// Signal Shapes +//plotshape(longCondition[1]==1, title='LONG', style=shape.triangleup, size=size.large, color=#02CB80, location= location.belowbar) +//plotshape(shortCondition[1]==1, title='SHORT', style=shape.triangledown, size=size.large, color=#DC143C, location=location.abovebar) +//plotshape(shortCondition[1]==0 and closelong[1]==1, title='EXIT LONG', style=shape.xcross, color=#02CB80, location=location.belowbar, transp=0) +//plotshape(longCondition[1]==0 and closeshort[1]==1, title='EXIT SHORT', style=shape.xcross, color=#DC143C, location=location.abovebar, transp=0) +// SL Plot +//slColor = (isSLl or isSLs) and (in_longCondition or in_shortCondition) ? red : white +//plot(isSLl and in_longCondition ? long_call_sl : na, "Long SL", slColor, style=3, linewidth=2) +//plot(isSLs and in_shortCondition ? short_call_sl : na, "Short SL", slColor, style=3, linewidth=2) +// TP Plot +//tpColor = isTP and (in_longCondition or in_shortCondition) ? purple : white +//plot(isTP and in_longCondition ? long_call_tp : na, "Long TP", tpColor, style=3, linewidth=2) +//plot(isTP and in_shortCondition ? short_call_tp : na, "Short TP", tpColor, style=3, linewidth=2) +// TS Plot +//tsColor = (isTSl or isTSs) and (in_longCondition or in_shortCondition) ? orange : white +//tsiColor = (isTSl or isTSs) and (in_longCondition or in_shortCondition) ? white : orange +//plot(isTSl and in_longCondition ? long_call_tsi : na, "Long Trailing", tsiColor, style=3, linewidth=2) +//plot(isTSs and in_shortCondition ? short_call_tsi : na, "Short Trailing", tsiColor, style=3, linewidth=2) +//plot(isTSl and in_longCondition and last_high > long_call_tsi ? long_call_ts : na, "Long Trailing", tsColor, style=2, linewidth=2) +//plot(isTSs and in_shortCondition and last_low < short_call_tsi ? short_call_ts : na, "Short Trailing", tsColor, style=2, linewidth=2) +// === /END + +//////////////////////////////////////////////////////////////////////////// +// // +// REMOVE THE CODE BELOW FOR STUDY CONVERSION // +// // +//////////////////////////////////////////////////////////////////////////// + +// === Strategy Direction Switch === +dir = "Long" //input(title = "Strategy Direction", defval="Long") //, options=["Long", "Short", "Both"] +// === /END + +// === Backtesting Dates === +testPeriodSwitch = input(false, "Custom Backtesting Dates") +testStartYear = input(2017, "Backtest Start Year") +testStartMonth = input(1, "Backtest Start Month") +testStartDay = input(1, "Backtest Start Day") +testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) +testStopYear = input(9999, "Backtest Stop Year") +testStopMonth = input(1, "Backtest Stop Month") +testStopDay = input(1, "Backtest Stop Day") +testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) +testPeriod() => + time >= testPeriodStart and time <= testPeriodStop ? true : false +isPeriod = testPeriodSwitch == true ? testPeriod() : true +// === /END + +// === Strategy === +if isPeriod and dir=="Both" + if (longCondition) + strategy.entry("Long",strategy.long) + if (closelong) and not shortCondition + strategy.close("Long") + if (shortCondition) + strategy.entry("Short",strategy.short) + if (closeshort) and not longCondition + strategy.close("Short") + +if isPeriod and dir=="Long" + if (longCondition) + strategy.entry("Long",strategy.long) + if (closelong) + strategy.close("Long") + +if isPeriod and dir=="Short" + if (shortCondition) + strategy.entry("Short",strategy.short) + if (closeshort) + strategy.close("Short") +// === /END + +//////////////////////////////////////////////////////////////////////////// +// // +// ULTIMATE PINE INJECTOR V1.2 // +// // +//////////////////////===ANION=CODE=END====///////////////////////////////// \ No newline at end of file diff --git a/extensions/strategies/ehlers_trend/strategy.js b/extensions/strategies/ehlers_trend/strategy.js new file mode 100644 index 0000000000..8e44f91f8c --- /dev/null +++ b/extensions/strategies/ehlers_trend/strategy.js @@ -0,0 +1,86 @@ +let z = require('zero-fill') + , n = require('numbro') + , Phenotypes = require('../../../lib/phenotype') + , crossover = require('../../../lib/helpers').crossover + , crossunder = require('../../../lib/helpers').crossunder + , nz = require('../../../lib/helpers').nz + , tv = require('../../../lib/helpers') + +module.exports = { + name: 'Ehlers_Trend', + description: 'Ehlers Instantaneous Trend', + + getOptions: function () { + this.option('period', 'period length, same as --period_length', String, '30m') + this.option('period_length', 'period length, same as --period', String, '30m') + + this.option('alpha', '', Number, 0.07) + this.option('price_source', '', String, 'HAohlc4') + }, + + calculate: function () {}, + + onPeriod: function (s, cb) { + + if (s.lookback.length > s.options.min_periods) { + + if(!s.options.price_source || s.options.price_source === 'close'){ + s.period.src = s.period.close + } else if (s.options.price_source === 'hl2'){ + s.period.src = tv.hl2(s) + } else if (s.options.price_source === 'hlc3'){ + s.period.src = tv.hlc3(s) + } else if (s.options.price_source === 'ohlc4'){ + s.period.src = tv.ohlc4(s) + } else if (s.options.price_source === 'HAhlc3'){ + s.period.src = tv.HAhlc3(s) + } else if (s.options.price_source === 'HAohlc4'){ + s.period.src = tv.HAohlc4(s) + } + + let a = s.options.alpha + if (s.lookback.length < 7) { + s.period.trend = (s.period.src + 2 * nz(s.lookback[0].src) + nz(s.lookback[1].src)) / 4 + } else { + s.period.trend = (a-a*a/4.0)*s.period.src+0.5*a*a*nz(s.lookback[0].src)-(a-0.75*a*a)*nz(s.lookback[1].src)+2*(1-a)*nz(s.lookback[0].trend) - (1-a)*(1-a)*nz(s.lookback[1].trend) + s.period.trigger = 2.0*s.period.trend-nz(s.lookback[1].trend) + } + } + + + if(crossover(s, 'trend', 'trigger')) + s.signal = 'sell' + else if(crossunder(s, 'trend', 'trigger')) + s.signal = 'buy' + else + s.signal = null + + cb() + }, + + onReport: function (s) { + var cols = [] + let color = 'cyan' + if (s.period.trend > s.period.trigger) { color = 'red' } else if (s.period.trend < s.period.trigger) { color = 'green' } + cols.push(z(10, 'Trend[' + n(s.period.trend).format('###.0') + ']', '')[color]) + cols.push(z(10, ' trigger[' + n(s.period.trigger).format('###.0') + ']', '')[color]) + return cols + }, + + phenotypes: { + + // -- common + period_length: Phenotypes.RangePeriod(15, 120, 'm'), + markdown_buy_pct: Phenotypes.RangeFloat(-1, 3), + markup_sell_pct: Phenotypes.RangeFloat(-1, 3), + order_type: Phenotypes.ListOption(['maker', 'taker']), + profit_stop_enable_pct: Phenotypes.Range0(1, 20), + profit_stop_pct: Phenotypes.Range(1,20), + + //Strategy Specific + alpha: Phenotypes.RangeFactor(0.01, 0.2, 0.01) + + + } +} + diff --git a/lib/helpers.js b/lib/helpers.js new file mode 100644 index 0000000000..e4f49c4107 --- /dev/null +++ b/lib/helpers.js @@ -0,0 +1,58 @@ + +//Basic Usage +// let crossover = require('../../../lib/helpers').crossover, +//or +//const tv = require('../../../lib/helpers') +//... +//s.period.hl2 = tv.hl2(s.period) + +module.exports = { + crossover: function(s, key1, key2) { + return s.period[key1] > s.period[key2] && s.lookback[0][key1] <= s.lookback[0][key2] + }, + crossunder: function(s, key1, key2) { + return s.period[key1] < s.period[key2] && s.lookback[0][key1] >= s.lookback[0][key2] + }, + nz: function(src, val = 0) { + return isNaN(src) ? val : src + }, + iff: function(v, r, r2) { + return v ? r : r2 + }, + hl2: function(period) { + return (period.high + period.low) / 2 + }, + hlc3: function(period) { + return (period.high + period.low + period.close) / 3 + }, + ohlc4: function(period) { + return (period.open + period.high + period.low + period.close) / 4 + }, + HAohlc4: function(s) { + let HAclose = (s.period.open + s.period.high + s.period.low + s.period.close) / 4, + HAopen = (s.lookback[0].open + s.lookback[0].close) /2, + HAhigh = Math.max(s.period.high, HAopen, HAclose), + HAlow = Math.max(s.period.low, HAopen, HAclose) + return (HAclose + HAopen + HAhigh + HAlow) / 4 + }, + adjust_by_pct: function(pct, n) { + return n * (pct / 100 + 1) + }, + pivot: function(s, leftBars, rightBars) { + let totalBars = leftBars + rightBars + 1, + periods = [s.period, ...s.lookback.slice(0, totalBars - 1)].reverse(), + lPeriods = periods.slice(0, leftBars), + rPeriods = periods.slice(leftBars + 1), + oPeriods = lPeriods.concat(rPeriods), + countH = oPeriods.reduce((p, c) => { + return p + (typeof c.high !== 'undefined' && periods[leftBars].high > c.high ? 1 : 0) + }, 0), + countL = oPeriods.reduce((p, c) => { + return p + (typeof c.low !== 'undefined' && periods[leftBars].low < c.low ? 1 : 0) + }, 0) + return { + high: countH == oPeriods.length ? periods[leftBars].high : null, + low: countL == oPeriods.length ? periods[leftBars].low : null + } + } +} From 8ebae7eb7817a9c1f727e2ee241f57c810d1b58d Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 23 Apr 2018 02:37:55 -0700 Subject: [PATCH 64/74] Update script for #1517 (#1523) * Add files via upload * Update update.sh * Update update.sh --- update.sh | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 update.sh diff --git a/update.sh b/update.sh new file mode 100644 index 0000000000..bb9ede9350 --- /dev/null +++ b/update.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# the below will work assuming no other custom modifications have been made. +rm -rf node_modules/ +git checkout package.json package-lock.json +git pull +npm install && npm update && npm dedupe From 0d0bfd3dbb4c91772c3f78a164bcbe59187f1661 Mon Sep 17 00:00:00 2001 From: defkev Date: Mon, 23 Apr 2018 11:38:12 +0200 Subject: [PATCH 65/74] Completely rework --buy_max_amt (#1494) * Completely rework --buy_max_amt As much as i like the --buy_max_amt feature i was never a fan of how it was implemented, leave alone the naming being confusing at best as it simply doesn't just account for the amount the bot can buy but how much he is actually able to trade. * Renames --buy_max_amt to --deposit for sake of clarification * Using --buy_max_amt will still work but print a deprecated warning * Instead of using --deposit to size buy orders use it to limit the balance available to the bot * This allows us to use it together with --buy_pct * --deposit will still account for asset held to calculate the available currency balance * So if the asset held is covering --deposit the bot will have 0 currency (0% of currency balance) available, if not currency will be filled to the point it compensates for the difference (up to 100% of currency balance) * If deposit is exceeding asset + currency the bot will also use 100% of currency balance held * Deposit will be updated on each price change and new period to ensure the bot always only trades the amount as defined by --deposit * Profit calculation will no longer go havoc as long as currency balance doesn't fall below whats currently deposited into the bot * If enabled this will add two new columns to the output displaying the total currency balance (in green) as well as how much percentage (gray) of currency balance (0 - 100%) is currently used by the bot * Works in Live, Paper & Sim mode * Profit * Fix profit calculation for stats and API * Add deposit to Web GUI's capital row * Profit starts at 100% on reset * WebUI Print deposit only if enabled * Add deposit to sim/exchange * Less invasive profit fix * Use deposit for profit/stats in sim if enabled * Remove prev_trades dashboard sorting * Restore prev_trades dashboard sorting * Resolve upstream conflicts * Update engine.test to match changes As deposit no longer overrides buy_pct this is kinda expected... * Update engine.test to match changes #2 With deposit set order would be below minimum with asset on hold * Reset profit on deposit change --- README.md | 2 +- commands/sim.js | 2 +- commands/trade.js | 13 ++-- extensions/exchanges/sim/exchange.js | 1 + extensions/output/api.js | 1 + lib/engine.js | 74 ++++++++++++----------- templates/dashboard.ejs | 12 +++- test/lib/engine.test.js | 90 ++++++++++++++-------------- 8 files changed, 106 insertions(+), 89 deletions(-) diff --git a/README.md b/README.md index 1e9a9a67ba..4bcb535ee4 100644 --- a/README.md +++ b/README.md @@ -264,7 +264,7 @@ zenbot trade --help --asset_capital for paper trading, amount of start capital in asset --avg_slippage_pct avg. amount of slippage to apply to paper trades --buy_pct buy with this % of currency balance - --buy_max_amt buy with up to this amount of currency balance + --deposit absolute initial capital (in currency) at the bots disposal (previously --buy_max_amt) --sell_pct sell with this % of asset balance --markdown_buy_pct % to mark down buy price --markup_sell_pct % to mark up sell price diff --git a/commands/sim.js b/commands/sim.js index e6ef106152..9c38369eec 100644 --- a/commands/sim.js +++ b/commands/sim.js @@ -125,7 +125,7 @@ module.exports = function (program, conf) { time: s.period.time }) } - s.balance.currency = n(s.balance.currency).add(n(s.period.close).multiply(s.balance.asset)).format('0.00000000') + s.balance.currency = n(s.net_currency).add(n(s.period.close).multiply(s.balance.asset)).format('0.00000000') s.balance.asset = 0 s.lookback.unshift(s.period) diff --git a/commands/trade.js b/commands/trade.js index 2a2c272aef..4d5af3eada 100644 --- a/commands/trade.js +++ b/commands/trade.js @@ -30,7 +30,7 @@ module.exports = function (program, conf) { .option('--asset_capital ', 'for paper trading, amount of start capital in asset', Number, conf.asset_capital) .option('--avg_slippage_pct ', 'avg. amount of slippage to apply to paper trades', Number, conf.avg_slippage_pct) .option('--buy_pct ', 'buy with this % of currency balance', Number, conf.buy_pct) - .option('--buy_max_amt ', 'buy with up to this amount of currency balance', Number, conf.buy_max_amt) + .option('--deposit ', 'absolute initial capital (in currency) at the bots disposal (previously --buy_max_amt)', Number, conf.deposit) .option('--sell_pct ', 'sell with this % of asset balance', Number, conf.sell_pct) .option('--markdown_buy_pct ', '% to mark down buy price', Number, conf.markdown_buy_pct) .option('--markup_sell_pct ', '% to mark up sell price', Number, conf.markup_sell_pct) @@ -82,6 +82,10 @@ module.exports = function (program, conf) { so.debug = cmd.debug so.stats = !cmd.disable_stats so.mode = so.paper ? 'paper' : 'live' + if (so.buy_max_amt) { + console.log(('--buy_max_amt is deprecated, use --deposit instead!\n').red) + so.deposit = so.buy_max_amt + } so.selector = objectifySelector(selector || conf.selector) var engine = engineFactory(s, conf) @@ -149,7 +153,7 @@ module.exports = function (program, conf) { /* Implementing statistical Exit */ function printTrade (quit, dump, statsonly = false) { - var tmp_balance = n(s.balance.currency).add(n(s.period.close).multiply(s.balance.asset)).format('0.00000000') + var tmp_balance = n(s.net_currency).add(n(s.period.close).multiply(s.balance.asset)).format('0.00000000') if (quit) { if (s.my_trades.length) { s.my_trades.push({ @@ -276,7 +280,7 @@ module.exports = function (program, conf) { if(!shouldSaveStats) return var output_lines = [] - var tmp_balance = n(s.balance.currency).add(n(s.period.close).multiply(s.balance.asset)).format('0.00000000') + var tmp_balance = n(s.net_currency).add(n(s.period.close).multiply(s.balance.asset)).format('0.00000000') var profit = s.start_capital ? n(tmp_balance).subtract(s.start_capital).divide(s.start_capital) : n(0) output_lines.push('last balance: ' + n(tmp_balance).format('0.00000000').yellow + ' (' + profit.format('0.00%') + ')') @@ -453,7 +457,7 @@ module.exports = function (program, conf) { if (err) throw err var prev_session = prev_sessions[0] if (prev_session && !cmd.reset_profit) { - if (prev_session.orig_capital && prev_session.orig_price && ((so.mode === 'paper' && !raw_opts.currency_capital && !raw_opts.asset_capital) || (so.mode === 'live' && prev_session.balance.asset == s.balance.asset && prev_session.balance.currency == s.balance.currency))) { + if (prev_session.orig_capital && prev_session.orig_price && prev_session.deposit === so.deposit && ((so.mode === 'paper' && !raw_opts.currency_capital && !raw_opts.asset_capital) || (so.mode === 'live' && prev_session.balance.asset == s.balance.asset && prev_session.balance.currency == s.balance.currency))) { s.orig_capital = session.orig_capital = prev_session.orig_capital s.orig_price = session.orig_price = prev_session.orig_price if (so.mode === 'paper') { @@ -565,6 +569,7 @@ module.exports = function (program, conf) { session.start_capital = s.start_capital session.start_price = s.start_price session.num_trades = s.my_trades.length + if (so.deposit) session.deposit = so.deposit if (!session.orig_capital) session.orig_capital = s.start_capital if (!session.orig_price) session.orig_price = s.start_price if (s.period) { diff --git a/extensions/exchanges/sim/exchange.js b/extensions/exchanges/sim/exchange.js index 8ea84ba026..ed3c6e5914 100644 --- a/extensions/exchanges/sim/exchange.js +++ b/extensions/exchanges/sim/exchange.js @@ -52,6 +52,7 @@ module.exports = function sim (conf, s) { getBalance: function (opts, cb) { setTimeout(function() { + s.sim_asset = balance.asset return cb(null, balance) }, latency) }, diff --git a/extensions/output/api.js b/extensions/output/api.js index 6aab20ac30..65d9d2129b 100644 --- a/extensions/output/api.js +++ b/extensions/output/api.js @@ -33,6 +33,7 @@ module.exports = function api () { app.get('/', function (req, res) { app.locals.moment = moment + app.locals.deposit = tradeObject.options.deposit let datas = JSON.parse(JSON.stringify(objectWithoutKey(tradeObject, 'options'))) // deep copy to prevent alteration res.render('dashboard', datas) }) diff --git a/lib/engine.js b/lib/engine.js index f969e4770f..b3d45c400a 100644 --- a/lib/engine.js +++ b/lib/engine.js @@ -62,10 +62,10 @@ module.exports = function (s, conf) { s.exchange.setFees({asset: s.asset, currency: s.currency}) } if (so.mode === 'sim' || so.mode === 'paper') { - s.balance = {asset: so.asset_capital, currency: so.currency_capital} + s.balance = {asset: so.asset_capital, currency: so.currency_capital, deposit: 0} } else { - s.balance = {asset: 0, currency: 0} + s.balance = {asset: 0, currency: 0, deposit: 0} } function memDump () { @@ -85,6 +85,7 @@ module.exports = function (s, conf) { } let asset_col_width = 0 + let deposit_col_width = 0 let currency_col_width = 0 s.lookback = [] s.day_count = 1 @@ -211,20 +212,31 @@ module.exports = function (s, conf) { } function syncBalance (cb) { + let pre_asset = so.mode === 'sim' ? s.sim_asset : s.balance.asset s.exchange.getBalance({currency: s.currency, asset: s.asset}, function (err, balance) { if (err) return cb(err) + let diff_asset = n(pre_asset).subtract(balance.asset) s.balance = balance getQuote(function (err, quote) { if (err) return cb(err) + let post_currency = n(diff_asset).multiply(quote.ask) + s.asset_capital = n(s.balance.asset).multiply(quote.ask).value() + let deposit = so.deposit ? Math.max(0, n(so.deposit).subtract(s.asset_capital)) : s.balance.currency // zero on negative + s.balance.deposit = n(deposit < s.balance.currency ? deposit : s.balance.currency).value() if (!s.start_capital) { s.start_price = n(quote.ask).value() - s.start_capital = n(s.balance.currency).add(n(s.balance.asset).multiply(quote.ask)).value() + s.start_capital = n(s.balance.deposit).add(s.asset_capital).value() + s.real_capital = n(s.balance.currency).add(s.asset_capital).value() + s.net_currency = s.balance.deposit - pushMessage('Balance ' + s.exchange.name.toUpperCase(), 'sync balance ' + s.start_capital + ' ' + s.currency + '\n') + if (so.mode !== 'sim') { + pushMessage('Balance ' + s.exchange.name.toUpperCase(), 'sync balance ' + s.real_capital + ' ' + s.currency + '\n') + } + } else { + s.net_currency = n(s.net_currency).add(post_currency).value() } - s.asset_capital = n(s.balance.asset).multiply(quote.ask).value() cb(null, { balance, quote }) }) }) @@ -352,7 +364,7 @@ module.exports = function (s, conf) { } if (is_reorder && s[signal + '_order']) { if (signal === 'buy') { - reorder_pct = n(size).multiply(s.buy_order.price).add(s.buy_order.fee).divide(s.balance.currency).multiply(100) + reorder_pct = n(size).multiply(s.buy_order.price).add(s.buy_order.fee).divide(s.balance.deposit).multiply(100) } else { reorder_pct = n(size).divide(s.balance.asset).multiply(100) } @@ -372,13 +384,6 @@ module.exports = function (s, conf) { } else { buy_pct = so.buy_pct } - if (so.buy_max_amt) { // account for held assets as buy_max - let adjusted_buy_max_amt = n(so.buy_max_amt).subtract(s.asset_capital).value() - if(adjusted_buy_max_amt < s.balance.currency){ - let buy_max_as_pct = n(adjusted_buy_max_amt).divide(s.balance.currency).multiply(100).value() - buy_pct = buy_max_as_pct - } - } if (so.use_fee_asset) { fee = 0 } else if (so.order_type === 'maker' && (buy_pct + s.exchange.takerFee < 100 || !s.exchange.makerBuy100Workaround)) { @@ -386,8 +391,8 @@ module.exports = function (s, conf) { } else { fee = s.exchange.takerFee } - trade_balance = n(s.balance.currency).divide(100).multiply(buy_pct) - tradeable_balance = n(s.balance.currency).divide(100 + fee).multiply(buy_pct) + trade_balance = n(s.balance.deposit).divide(100).multiply(buy_pct) + tradeable_balance = n(s.balance.deposit).divide(100 + fee).multiply(buy_pct) expected_fee = n(trade_balance).subtract(tradeable_balance).format('0.00000000', Math.ceil) // round up as the exchange will too if (buy_pct + fee < 100) { size = n(tradeable_balance).divide(price).format(s.product.asset_increment ? s.product.asset_increment : '0.00000000') @@ -416,8 +421,8 @@ module.exports = function (s, conf) { return cb(err) } } - if (n(s.balance.currency).subtract(s.balance.currency_hold || 0).value() < n(price).multiply(size).value() && s.balance.currency_hold > 0) { - msg('buy delayed: ' + formatPercent(n(s.balance.currency_hold || 0).divide(s.balance.currency).value()) + ' of funds (' + formatCurrency(s.balance.currency_hold, s.currency) + ') on hold') + if (n(s.balance.deposit).subtract(s.balance.currency_hold || 0).value() < n(price).multiply(size).value() && s.balance.currency_hold > 0) { + msg('buy delayed: ' + formatPercent(n(s.balance.currency_hold || 0).divide(s.balance.deposit).value()) + ' of funds (' + formatCurrency(s.balance.currency_hold, s.currency) + ') on hold') return setTimeout(function () { if (s.last_signal === signal) { executeSignal(signal, cb, size, true) @@ -726,14 +731,21 @@ module.exports = function (s, conf) { let asset_col = n(s.balance.asset).format(s.asset === 'BTC' ? '0.00000' : '0.00000000') + ' ' + s.asset asset_col_width = Math.max(asset_col.length + 1, asset_col_width) process.stdout.write(z(asset_col_width, asset_col, ' ').white) - let currency_col = n(s.balance.currency).format(isFiat() ? '0.00' : '0.00000000') + ' ' + s.currency - currency_col_width = Math.max(currency_col.length + 1, currency_col_width) - process.stdout.write(z(currency_col_width, currency_col, ' ').yellow) - let consolidated = n(s.balance.currency).add(n(s.period.close).multiply(s.balance.asset)).value() - let profit = (consolidated - orig_capital) / orig_capital + let deposit_col = n(s.balance.deposit).format(isFiat() ? '0.00' : '0.00000000') + ' ' + s.currency + deposit_col_width = Math.max(deposit_col.length + 1, deposit_col_width) + process.stdout.write(z(deposit_col_width, deposit_col, ' ').yellow) + if (so.deposit) { + let currency_col = n(s.balance.currency).format(isFiat() ? '0.00' : '0.00000000') + ' ' + s.currency + currency_col_width = Math.max(currency_col.length + 1, currency_col_width) + process.stdout.write(z(currency_col_width, currency_col, ' ').green) + let circulating = s.balance.currency > 0 ? n(s.balance.deposit).divide(s.balance.currency) : n(0) + process.stdout.write(z(8, n(circulating).format('0.00%'), ' ').grey) + } + let consolidated = n(s.net_currency).add(n(s.balance.asset).multiply(s.period.close)) + let profit = n(consolidated).divide(orig_capital).subtract(1).value() process.stdout.write(z(8, formatPercent(profit), ' ')[profit >= 0 ? 'green' : 'red']) - let buy_hold = s.period.close * (orig_capital / orig_price) - let over_buy_hold_pct = (consolidated - buy_hold) / buy_hold + let buy_hold = n(orig_capital).divide(orig_price).multiply(s.period.close) + let over_buy_hold_pct = n(consolidated).divide(buy_hold).subtract(1).value() process.stdout.write(z(8, formatPercent(over_buy_hold_pct), ' ')[over_buy_hold_pct >= 0 ? 'green' : 'red']) } if (!is_progress) { @@ -749,16 +761,6 @@ module.exports = function (s, conf) { if (so.mode !== 'live') s.exchange.processTrade(trade) - if (so.mode !== 'live' && !s.start_capital) { - s.start_capital = 0 - s.start_price = trade.price - if (so.asset_capital) { - s.start_capital += so.asset_capital * s.start_price - } - if (so.currency_capital) { - s.start_capital += so.currency_capital - } - } if (!so.manual) { executeStop() @@ -805,7 +807,7 @@ module.exports = function (s, conf) { } syncBalance(function () { let on_hold - if (type === 'buy') on_hold = n(s.balance.currency).subtract(s.balance.currency_hold || 0).value() < n(order.price).multiply(order.remaining_size).value() + if (type === 'buy') on_hold = n(s.balance.deposit).subtract(s.balance.currency_hold || 0).value() < n(order.price).multiply(order.remaining_size).value() else on_hold = n(s.balance.asset).subtract(s.balance.asset_hold || 0).value() < n(order.remaining_size).value() if (on_hold && s.balance.currency_hold > 0) { @@ -965,7 +967,7 @@ module.exports = function (s, conf) { z(10, 'VOL', ' ').grey, z(8, 'RSI', ' ').grey, z(32, 'ACTIONS', ' ').grey, - z(25, 'BAL', ' ').grey, + z(so.deposit ? 38 : 25, 'BAL', ' ').grey, z(22, 'PROFIT', ' ').grey ].join('') + '\n') }, diff --git a/templates/dashboard.ejs b/templates/dashboard.ejs index 1f45a82990..e9566e1f75 100644 --- a/templates/dashboard.ejs +++ b/templates/dashboard.ejs @@ -97,13 +97,21 @@

Capital

-
+
  • Asset
  • <%= new Intl.NumberFormat("en-US", {useGrouping: false, minimumFractionDigits: 2, maximumFractionDigits: 8}).format(balance.asset) %> <%= asset.toUpperCase() %>
-
+ <% if (typeof deposit != "undefined") { %> +
+
    +
  • Deposit
  • +
  • <%= new Intl.NumberFormat("en-US", {useGrouping: false, minimumFractionDigits: 2, maximumFractionDigits: 8}).format(balance.deposit) %> <%= currency.toUpperCase() %>
  • +
+
+ <% } %> +
  • Currency
  • <%= new Intl.NumberFormat("en-US", {useGrouping: false, minimumFractionDigits: 2, maximumFractionDigits: 8}).format(balance.currency) %> <%= currency.toUpperCase() %>
  • diff --git a/test/lib/engine.test.js b/test/lib/engine.test.js index c695152b26..ace327ee77 100644 --- a/test/lib/engine.test.js +++ b/test/lib/engine.test.js @@ -3,68 +3,68 @@ var EventEmitter = require('events') describe('Engine', function() { describe('executeSignal', function() { describe('when maker in live mode', function(){ - describe('with buy_max set', function(){ - it('and no held assets should use raw buy_max_amt', function(){ + describe('with deposit set', function(){ + it('and no held assets should use raw deposit', function(){ // arrange var signal_type = 'buy' var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = 0.25 + var deposit = 0.25 var order_type = 'maker' var held_asset = 0 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '2.77500277' + var expected = '1.38750138' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) - it('and held assets should use adjusted buy_max_amt', function(){ + it('and held assets should use adjusted deposit', function(){ // arrange var signal_type = 'buy' - var currency_amount = 3.0 + var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = 0.25 + var deposit = 0.25 var order_type = 'maker' - var held_asset = 0.75 + var held_asset = 0.25 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '1.85925185' + var expected = '1.23487623' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) - it('and held assets so large adjusted buy_max_amt is below order minimum should not place order', function(){ + it('and held assets so large adjusted deposit is below order minimum should not place order', function(){ // arrange var signal_type = 'buy' var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = 0.25 + var deposit = 0.25 var order_type = 'maker' var held_asset = 2.0 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert expect(buy_spy).not.toHaveBeenCalled() }) }) - describe('with no buy_max set', function(){ + describe('with no deposit set', function(){ it('and no held assets should use raw buy_pct', function(){ // arrange var signal_type = 'buy' var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = undefined + var deposit = undefined var order_type = 'maker' var held_asset = 0 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert @@ -79,11 +79,11 @@ describe('Engine', function() { var signal_type = 'buy' var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = undefined + var deposit = undefined var order_type = 'maker' var held_asset = 0.5 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert @@ -96,11 +96,11 @@ describe('Engine', function() { var signal_type = 'buy' var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = undefined + var deposit = undefined var order_type = 'maker' var held_asset = 10.25 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert @@ -111,70 +111,70 @@ describe('Engine', function() { }) describe('when taker in live mode', function(){ - describe('with buy_max_amt set',function(){ - it('and no held assets should use raw buy_max_amt', function(){ + describe('with deposit set',function(){ + it('and no held assets should use raw deposit', function(){ // arrange var signal_type = 'buy' var currency_amount = 1 var buy_pct = 50 - var buy_max_amt = 0.25 + var deposit = 0.25 var order_type = 'taker' var held_asset = 0 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '2.77223331' + var expected = '1.38611665' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) - it('and held assets should use adjusted buy_max_amt', function(){ + it('and held assets should use adjusted deposit', function(){ // arrange var signal_type = 'buy' - var currency_amount = 3.0 + var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = 0.25 + var deposit = 0.25 var order_type = 'taker' - var held_asset = 0.75 + var held_asset = 0.25 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert - var expected = '1.85739631' + var expected = '1.23364382' var buyArgs = buy_spy.calls.mostRecent().args[0] expect(buyArgs.size).toBe(expected) }) - it('and held assets so large adjusted buy_max_amt is below order minimum should not place order', function(){ + it('and held assets so large adjusted deposit is below order minimum should not place order', function(){ // arrange var signal_type = 'buy' var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = 0.25 + var deposit = 0.25 var order_type = 'taker' var held_asset = 2.0 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert expect(buy_spy).not.toHaveBeenCalled() }) }) - describe('with no buy_max_amt set',function(){ - it('with no buy_max_amt set and no held assets should use raw buy_pct', function(){ + describe('with no deposit set',function(){ + it('with no deposit set and no held assets should use raw buy_pct', function(){ // arrange var signal_type = 'buy' var currency_amount = 1 var buy_pct = 50 - var buy_max_amt = undefined + var deposit = undefined var order_type = 'taker' var held_asset = 0 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert @@ -188,11 +188,11 @@ describe('Engine', function() { var signal_type = 'buy' var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = undefined + var deposit = undefined var order_type = 'taker' var held_asset = 0.5 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert @@ -205,11 +205,11 @@ describe('Engine', function() { var signal_type = 'buy' var currency_amount = 1.0 var buy_pct = 50 - var buy_max_amt = undefined + var deposit = undefined var order_type = 'taker' var held_asset = 5.25 var buy_spy = jasmine.createSpy('buy') - var sut = createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy) + var sut = createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy) // act sut.executeSignal(signal_type) // assert @@ -224,7 +224,7 @@ describe('Engine', function() { var mock = require('mock-require') var path = require('path') -function createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_asset, buy_spy){ +function createEngine(currency_amount, buy_pct, deposit, order_type, held_asset, buy_spy){ var fake_asset = 'test_asset' var fake_currency = 'BTC' var fake_exchange = 'test_exchange' @@ -280,7 +280,7 @@ function createEngine(currency_amount, buy_pct, buy_max_amt, order_type, held_as mode:'live', order_type: order_type, buy_pct:buy_pct, - buy_max_amt:buy_max_amt + deposit:deposit } } var engine = require('../../lib/engine') From ded533607fae778e3049bea0509bd0b4d0d027ef Mon Sep 17 00:00:00 2001 From: LoneWolf345 Date: Mon, 23 Apr 2018 04:39:26 -0500 Subject: [PATCH 66/74] [Strategy] Ichimoku Score (#1535) * [Strategy] Ichimoku Score * Add Ichimoku readme * Change name to lower case --- .../strategies/Ichimoku_Score/strategy.js | 423 ++++++++++++++++ .../strategies/ichimoku_score/README.md | 470 ++++++++++++++++++ .../strategies/ichimoku_score/strategy.js | 423 ++++++++++++++++ 3 files changed, 1316 insertions(+) create mode 100644 extensions/strategies/Ichimoku_Score/strategy.js create mode 100644 extensions/strategies/ichimoku_score/README.md create mode 100644 extensions/strategies/ichimoku_score/strategy.js diff --git a/extensions/strategies/Ichimoku_Score/strategy.js b/extensions/strategies/Ichimoku_Score/strategy.js new file mode 100644 index 0000000000..d295c7752e --- /dev/null +++ b/extensions/strategies/Ichimoku_Score/strategy.js @@ -0,0 +1,423 @@ + +// ======= Ichimoku Signals Score ======= + +/* + +The Ichimoku signals, indeed all Ichimoku elements, should never be taken in isolation, but considered in the context +of the overall chart. Ichimoku Kinko Hyo is a visual technical analysis system and the charts are designed to be +considered in their entirety, with regard given to the relationships between all of the elements, including the price. +As such, Ichimoku is not suitable for automated or "single event" decision making. + +Remember that Ichimoku Kinko Hyo is a technical trend trading charting system and trends can and do change, so your +readings of the charts should be probabilistic, rather than predictive. As with most technical analysis methods, +Ichimoku is likely to produce frequent conflicting signals in non-trending markets. + +The five kinds of signal are described below. Most can be classified as strong, neutral, or weak by their proximate +relationship to the Kumo (cloud), but each signal may be further strengthened, weakened, or nullified by the +relationships between other elements. All signals must be considered in respect to the overall chart. + +For a better understanding of how to read ichimoku please refer to http://www.ichimokutrader.com/signals.html +Code based on a TradingView.com script at https://www.tradingview.com/v/u0NN8zNu/ + +If you appreciate the work and the man hours that went into creating this strategy, please consider giving back. +LoneWolf345 ETH = 0xa42f6d21f1e52f7fbaeaa0f58d1cc4b9a58f2dcc , BTC = 15L8QstCQG4ho6139hVaqLxkAzcjnqBbf6 +Travis ETH = 0xdA963A127BeCB08227583d11f912F400D5347060 , BTC = 3KKHdBJpEGxghxGazoE4X7ihyr2q6nHUvW + +*/ + + +let z = require('zero-fill') + , n = require('numbro') + , Phenotypes = require('../../../lib/phenotype') + , crossover = require('../../../lib/helpers').crossover + , crossunder = require('../../../lib/helpers').crossunder + +module.exports = { + name: 'ichimoku_score', + description: 'Associate various ichimoku signals with a score.', + + getOptions: function () { + this.option('period', 'period length eg 10m', String, '60m') + this.option('min_periods', 'min. number of history periods', Number, 150) + + // == ichimoku inputs == + this.option('tenkenSenPeriods', 'Tenkan-sen (Conversion Line) Periods', Number, 9) //default 9 + this.option('kijunSenPeriods', 'Kijun-sen (Base Line) Periods', Number, 26) //default 26 + this.option('senkouSpanPeriods', 'Senkou (Leading) Span B Periods', Number, 52) //default 52 + this.option('displacement', 'Displacement', Number, 26) //default 26 + + // == score inputs == + this.option('tkCrossWeight', 'TK Cross Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('pkCrossWeight', 'PK Cross Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('kumoBreakoutWeight', 'Kumo Breakout Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('senkouCrossWeight', 'Senkou (Leading) Span Cross Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('chikouCrossWeight', 'Chikou (Lagging) Span Cross Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('chikouPlacementWeight', 'Chikou (Lagging) Span Relative to Cloud Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('pricePlacementWeight', 'Price Relative to Cloud Importance Weight', Number, 1) //range 0 - 2 Default = 1 + + this.option('weakPoints', 'Weak Point Value', Number, 0.5) //range 0 - 2 Default = 0.5 + this.option('neutralPoints', 'Neutral Point Value', Number, 1) //range 0 - 2 Default = 1 + this.option('strongPoints', 'Strong Point Value', Number, 2) //range 0 - 2 Default = 2 + + this.option('buyLevel', 'when to signal buy', Number, 50) //range -100 - 100 Default = 50 + this.option('sellLevel', 'when to signal sell', Number, 50) //range -100 - 100 Default = 50 + + }, + + calculate: function (s) { + + if (s.lookback.length > s.options.min_periods) { + + + + // == == generate ichimoku data == == + + + s.period.tenkenSen = donchian(s, s.options.tenkenSenPeriods) + s.period.kijunSen = donchian(s, s.options.kijunSenPeriods) + + s.period.senkouA = (s.period.tenkenSen + s.period.kijunSen) / 2 + s.period.senkouB = donchian(s, s.options.senkouSpanPeriods) + + // have to wait until displacement periods have passed + if (s.lookback.length > s.options.displacement) { + + s.lookback[s.options.displacement].chikouSen = s.period.close + + s.priceAboveKumo = valueAbove(s.period.close, s.period.senkouA, s.period.senkouB) + s.priceBelowKumo = valueBelow(s.period.close, s.period.senkouA, s.period.senkouB) + s.priceInsideKumo = !s.priceAboveKumo && !s.priceBelowKumo + + // == == calculate score == == + + + s.period.tkCrossScore = calcTkCross(s, s.lookback[0].tkCrossScore) + s.period.pkCrossScore = calcPkCross(s, s.lookback[0].pkCrossScore) + s.period.kumoBreakoutScore = calcKumoBreakout(s, s.lookback[0].kumoBreakoutScore) + s.period.senkouCrossScore = calcSenkouCross(s, s.lookback[0].senkouCrossScore) + s.period.chikouCrossScore = calcChikouCross(s, s.lookback[0].chikouCrossScore) + s.period.pricePlacementScore = calcPricePlacement(s, s.lookback[0].pricePlacementScore) + s.period.chikouPlacementScore = calcChikouPlacement(s, s.lookback[0].chikouPlacementScore) + + s.totalScore = (s.options.tkCrossWeight * s.period.tkCrossScore) + s.totalScore += (s.options.pkCrossWeight * s.period.pkCrossScore) + s.totalScore += (s.options.kumoBreakoutWeight * s.period.kumoBreakoutScore) + s.totalScore += (s.options.senkouCrossWeight * s.period.senkouCrossScore) + s.totalScore += (s.options.chikouCrossWeight * s.period.chikouCrossScore) + s.totalScore += (s.options.pricePlacementWeight * s.period.pricePlacementScore) + s.totalScore += (s.options.chikouPlacementWeight * s.period.chikouPlacementScore) + + let maxScore = s.options.strongPoints * (s.options.tkCrossWeight + s.options.pkCrossWeight + s.options.kumoBreakoutWeight + s.options.senkouCrossWeight + s.options.chikouCrossWeight + s.options.pricePlacementWeight + s.options.chikouPlacementWeight) + s.normalizedScore = 100 * s.totalScore / maxScore + + } + } + }, + + onPeriod: function (s, cb) { + + + // == Debugging == + + if (s.options.debug) {console.log('\n== Options ==')} + + if (s.options.debug) {console.log('tenkenSenPeriods: ' + s.options.tenkenSenPeriods)} + if (s.options.debug) {console.log('kijunSenPeriods: ' + s.options.kijunSenPeriods)} + if (s.options.debug) {console.log('senkouSpanPeriods: ' + s.options.senkouSpanPeriods)} + if (s.options.debug) {console.log('displacement: ' + s.options.displacement)} + + if (s.options.debug) {console.log('buyLevel: ' + s.options.buyLevel)} + if (s.options.debug) {console.log('sellLevel: ' + s.options.sellLevel)} + + + if (s.options.debug) {console.log('\n== Ichimoku Data ==')} + + if (s.options.debug) {console.log('Tenken-Sen (conversion Line):' + s.period.tenkenSen)} + if (s.options.debug) {console.log('Kijun-Sen (Base Line):' + s.period.kijunSen)} + if (s.options.debug) {console.log('senkouA (Leading):' + s.period.senkouA)} + if (s.options.debug) {console.log('senkouB (Leading):' + s.period.senkouB)} + + + if (s.options.debug) {console.log('\n== Calculate Score ==')} + + if (s.options.debug) {console.log('tkCrossScore:' + s.period.tkCrossScore)} + if (s.options.debug) {console.log('pkCrossScore:' + s.period.pkCrossScore)} + if (s.options.debug) {console.log('kumoBreakoutScore:' + s.period.kumoBreakoutScore)} + if (s.options.debug) {console.log('senkouCrossScore:' + s.period.senkouCrossScore)} + if (s.options.debug) {console.log('chikouCrossScore:' + s.period.chikouCrossScore)} + if (s.options.debug) {console.log('pricePlacementScore:' + s.period.pricePlacementScore)} + if (s.options.debug) {console.log('chikouPlacementScore:' + s.period.chikouPlacementScore)} + + + if (s.options.debug) {console.log('\n== Buy / Sell signals ==')} + + if (s.options.debug) {console.log('normalizedScore:' + s.normalizedScore)} + if (s.options.debug) {console.log('previousScore:' + s.previousScore)} + if (s.options.debug) {console.log('buy logic')} + if (s.options.debug) {console.log('if (s.normalizedScore > s.options.buyLevel && s.previousScore < s.options.buyLevel)')} + if (s.options.debug) {console.log('if (' + s.normalizedScore + ' > ' + s.options.buyLevel + ' && ' + s.previousScore + ' < ' + s.options.buyLevel + ')')} + if (s.options.debug) {console.log(s.normalizedScore > s.options.buyLevel && s.previousScore < s.options.buyLevel)} + + + + // == == Buy / Sell Signals == == + + + + if (!s.previousScore) {s.previousScore = 0} + + if (s.normalizedScore > s.options.buyLevel && s.previousScore < s.options.buyLevel) { + s.signal = 'buy' + s.previousScore = s.normalizedScore + } else if (s.normalizedScore < s.options.sellLevel && s.previousScore > s.options.sellLevel) { + s.signal = 'sell' + s.previousScore = s.normalizedScore + } else { + s.signal = null + s.previousScore = s.normalizedScore + } + + cb() + }, + + onReport: function (s) { + var cols = [] + let color = 'cyan' + + if (s.normalizedScore > 50) { color = 'green' } else if (s.normalizedScore < -50) { color = 'red' } + cols.push(z(10, 'S[' + n(s.normalizedScore).format('###.0') + ']', '')[color]) + + return cols + }, + + phenotypes: { + + //General Options + period_length: Phenotypes.RangePeriod(45, 240, 'm'), + min_periods: Phenotypes.Range(150, 150), //Needs to be greater than senkouSpanPeriods + markdown_buy_pct: Phenotypes.RangeFloat(0, 0), + markup_sell_pct: Phenotypes.RangeFloat(0, 0), + order_type: Phenotypes.ListOption(['maker', 'taker']), + sell_stop_pct: Phenotypes.Range0(1, 50), + buy_stop_pct: Phenotypes.Range0(1, 50), + profit_stop_enable_pct: Phenotypes.Range(1, 20), + profit_stop_pct: Phenotypes.Range(1,10), + + //Strategy Specific + buyLevel: Phenotypes.RangeFactor(5, 100, 5), + sellLevel: Phenotypes.RangeFactor(5, 100, 5), + + tenkenSenPeriods: Phenotypes.RangeFactor(5, 30, 1), + kijunSenPeriods: Phenotypes.RangeFactor(25, 75, 1), + senkouSpanPeriods: Phenotypes.RangeFactor(50, 150, 1), + displacement: Phenotypes.RangeFactor(20, 40, 1) + + } +} + + + + + + +// == == Helpers == == + + + +function resolve(src, fallback) { return isNaN(src) ? fallback : src} + + +function donchian(s, len) { + + let data = s.lookback.slice(0, len - 1), + lowData = [s.period.low, ...data.map(p => p.low)], + highData = [s.period.high, ...data.map(p => p.high)] + + return (Math.min(...lowData) + Math.max(...highData)) / 2 + +} + + +function getIntersect(s, key1, key2) { + + return (s.lookback[0][key1] * (s.period[key2] - s.lookback[0][key2]) - + s.lookback[0][key2] * (s.period[key1] - s.lookback[0][key1])) / + ((s.period[key2] - s.lookback[0][key2]) - (s.period[key1] - s.lookback[0][key1])) +} + +function belowKumo(s, key, key1, key2) { + + return valueBelowKumo(s, s.period[key], key1, key2) +} +function aboveKumo(s, key, key1, key2) { + + return valueAboveKumo(s, s.period[key], key1, key2) +} + +function valueBelowKumo(s, val, key1, key2) { + + if(s.lookback.length >= s.options.displacement) + return valueBelow(val, s.lookback[s.options.displacement][key1], s.lookback[s.options.displacement][key2]) + else + throw 'belowKumo, s.lookback.length < s.options.displacement' +} + +function valueAboveKumo(s, val, key1, key2) { + + if(s.lookback.length >= s.options.displacement) + return valueAbove(val, s.lookback[s.options.displacement][key1], s.lookback[s.options.displacement][key2]) + else + throw 'aboveKumo, s.lookback.length < s.options.displacement' +} + +function valueAbove(val, target1, target2) { + return val > Math.max(target1, target2) +} + +function valueBelow(val, target1, target2) { + return val < Math.min(target1, target2) +} + + + +// == == ichimoku cloud signals == == + + + + + +// == Tenkan Sen (turning line) / Kijun Sen (standard line) Cross == +function calcTkCross(s, previousVal) { + + let bullish = crossover(s, 'tenkenSen', 'kijunSen') + let bearish = crossunder(s, 'tenkenSen', 'kijunSen') + + let intersect = getIntersect(s, 'tenkenSen', 'kijunSen') + let above = valueAboveKumo(s, intersect, 'senkouA', 'senkouB') + let below = valueBelowKumo(s, intersect, 'senkouA', 'senkouB') + let inside = !above && !below + + let score = resolve(previousVal, 0) + if (bullish && below) {score = s.options.weakPoints} //A weak bullish signal occurs when the cross is below the Kumo. + if (bullish && inside) {score = s.options.neutralPoints} //A neutral bullish signal occurs when the cross is inside the Kumo. + if (bullish && above) {score = s.options.strongPoints} //A strong bullish signal occurs when the cross is above the Kumo. + if (bearish && below) {score = -s.options.strongPoints} //A strong bearish signal occurs when the cross is below the Kumo. + if (bearish && inside) {score = -s.options.neutralPoints} //A neutral bearish signal occurs when the cross is inside the Kumo. + if (bearish && above) {score = -s.options.weakPoints} //A weak bearish signal occurs when the cross is above the Kumo. + + return (score) + +} + +// == Price and Kijun Sen (standard line) Cross == +function calcPkCross(s, previousVal) { + + let bullish = crossover(s, 'close', 'kijunSen') + let bearish = crossunder(s, 'close', 'kijunSen') + + let intersect = getIntersect(s, 'close', 'kijunSen') + let above = valueAboveKumo(s, intersect, 'senkouA', 'senkouB') + let below = valueBelowKumo(s, intersect, 'senkouA', 'senkouB') + let inside = !above && !below + + let score = resolve(previousVal, 0) + if (bullish && below) {score = s.options.weakPoints} //A weak bullish signal occurs when the cross is below the Kumo. + if (bullish && inside) {score = s.options.neutralPoints} //A neutral bullish signal occurs when the cross is inside the Kumo. + if (bullish && above) {score = s.options.strongPoints} //A strong bullish signal occurs when the cross is above the Kumo. + if (bearish && below) {score = -s.options.strongPoints} //A strong bearish signal occurs when the cross is below the Kumo. + if (bearish && inside) {score = -s.options.neutralPoints} //A neutral bearish signal occurs when the cross is inside the Kumo. + if (bearish && above) {score = -s.options.weakPoints} //A weak bearish signal occurs when the cross is above the Kumo. + + return (score) + +} + +// == Kumo Breakouts == +function calcKumoBreakout(s, previousVal) { + + let bullish = (crossover(s, 'close', 'senkouA') && s.period.senkouA >= s.period.senkouB) || (crossover(s, 'close', 'senkouB') && s.senkouB >= s.senkouA) + let bearish = (crossunder(s, 'close', 'senkouB') && s.period.senkouA >= s.period.senkouB) || (crossover(s, 'close', 'senkouA') && s.senkouB >= s.senkouA) + + let score = resolve(previousVal, 0) + if (bullish) {score = s.options.strongPoints} //A bullish signal occurs when the price goes upwards through the top of the Kumo. + if (bearish) {score = -s.options.strongPoints} //A bearish signal occurs when the price goes downwards through the bottom of the Kumo. + + return (score) + +} + +// == Senkou Span Cross == +// The Senkou Span Cross signal occurs when the Senkou Span A (1st leading line) crosses the Senkou Span B (2nd leading line). +// NOTE: this cross occurs ahead of the price, since it's displaced to the right; this displacement must be removed +function calcSenkouCross(s, previousVal) { + + s.period.noDpsenkouA = (s.period.tenkenSen + s.period.kijunSen) / 2 //Senkou Span A (no displacement) + s.period.noDpsenkouB = donchian(s, s.options.senkouSpanPeriods) //senkou Span B (no displacement) + + let bullish = crossover(s, 'noDpsenkouA', 'noDpsenkouB') + let bearish = crossunder(s, 'noDpsenkouA', 'noDpsenkouB') + + let score = resolve(previousVal, 0) + if (bullish && s.priceBelowKumo) {score = s.options.weakPoints} //A weak bullish signal occurs if the current price is below the Kumo. + if (bullish && s.priceInsideKumo) {score = s.options.neutralPoints} //A neutral bullish signal occurs if the current price is inside the Kumo. + if (bullish && s.priceAboveKumo) {score = s.options.strongPoints} //A strong bullish signal occurs if the current price is above the Kumo. + if (bearish && s.priceBelowKumo) {score = -s.options.strongPoints} //A strong bearish signal occurs if the current price is below the Kumo. + if (bearish && s.priceInsideKumo) {score = -s.options.neutralPoints} //A neutral bearish signal occurs if the current price is inside the Kumo. + if (bearish && s.priceAboveKumo) {score = -s.options.weakPoints} //A weak bearish signal occurs if the current price is above the Kumo. + + return (score) + +} + +// == Chikou Span Cross == +// The Chikou Span Cross signal occurs when the Chikou Span (Lagging line) rises above or falls below the price. +function calcChikouCross(s, previousVal) { + + s.period.leadline = s.lookback[s.options.displacement].close//offset(s.period.close, s.options.displacement) + let bullish = crossover(s, 'close', 'leadline') + let bearish = crossunder(s, 'close', 'leadline') + + let score = resolve(previousVal, 0) + if (bullish && s.priceBelowKumo) {score = s.options.weakPoints} //A weak bullish signal occurs if the current price is below the Kumo. + if (bullish && s.priceInsideKumo) {score = s.options.neutralPoints} //A neutral bullish signal occurs if the current price is inside the Kumo. + if (bullish && s.priceAboveKumo) {score = s.options.strongPoints} //A strong bullish signal occurs if the current price is above the Kumo. + if (bearish && s.priceBelowKumo) {score = -s.options.strongPoints} //A weak bearish signal occurs if the current price is above the Kumo. + if (bearish && s.priceInsideKumo) {score = -s.options.neutralPoints} //A neutral bearish signal occurs if the current price is inside the Kumo. + if (bearish && s.priceAboveKumo) {score = -s.options.weakPoints} //A strong bearish signal occurs if the current price is below the Kumo. + + return (score) + +} + + +// == price relative to cloud == +function calcPricePlacement(s, previousVal) { + + let score = resolve(previousVal, 0) + if (s.priceAboveKumo) {score = s.options.strongPoints} + if (s.priceInsideKumo) {score = s.options.neutralPoints} + if (s.priceBelowKumo) {score = -s.options.strongPoints} + + return (score) + +} + + + +// == lag line releative to cloud == +function calcChikouPlacement(s, previousVal) { + + let score = resolve(previousVal, 0) + if(s.lookback.length >= s.options.displacement) { + // above + if(aboveKumo(s, 'close', 'senkouA', 'senkouB')) + score = s.options.strongPoints + // below + else if(belowKumo(s, 'close', 'senkouA', 'senkouB')) + score = -s.options.strongPoints + else + score = 0 + } + + return (score) +} \ No newline at end of file diff --git a/extensions/strategies/ichimoku_score/README.md b/extensions/strategies/ichimoku_score/README.md new file mode 100644 index 0000000000..2e92ebeed1 --- /dev/null +++ b/extensions/strategies/ichimoku_score/README.md @@ -0,0 +1,470 @@ + ======= Ichimoku Signals Score ======= + + +The Ichimoku signals, indeed all Ichimoku elements, should never be taken in isolation, but considered in the context +of the overall chart. Ichimoku Kinko Hyo is a visual technical analysis system and the charts are designed to be +considered in their entirety, with regard given to the relationships between all of the elements, including the price. +As such, Ichimoku is not suitable for automated or "single event" decision making. + +Remember that Ichimoku Kinko Hyo is a technical trend trading charting system and trends can and do change, so your +readings of the charts should be probabilistic, rather than predictive. As with most technical analysis methods, +Ichimoku is likely to produce frequent conflicting signals in non-trending markets. + +The five kinds of signal are described below. Most can be classified as strong, neutral, or weak by their proximate +relationship to the Kumo (cloud), but each signal may be further strengthened, weakened, or nullified by the +relationships between other elements. All signals must be considered in respect to the overall chart. + +For a better understanding of how to read ichimoku please refer to http://www.ichimokutrader.com/signals.html +Code based on a TradingView.com script at https://www.tradingview.com/v/u0NN8zNu/ + +If you appreciate the work and the man hours that went into creating this strategy, please consider giving back. +LoneWolf345 ETH = 0xa42f6d21f1e52f7fbaeaa0f58d1cc4b9a58f2dcc , BTC = 15L8QstCQG4ho6139hVaqLxkAzcjnqBbf6 +Travis ETH = 0xdA963A127BeCB08227583d11f912F400D5347060 , BTC = 3KKHdBJpEGxghxGazoE4X7ihyr2q6nHUvW + + + + + + + + + + + ======= Trading View Strategy Script ======= + + +//@version=2 +//study(title="Ichimoku Cloud Score LW", shorttitle="Ichimoku Score", precision=3, overlay=false) +strategy(title="Ichimoku Cloud Signal Score", shorttitle="Ichimoku Score", precision=3, overlay=false) + +// == ichimoku inputs == +tenkenSenPeriods = input(9, minval=1, title="Tenkan-sen (Conversion Line) Periods"), +kijunSenPeriods = input(26, minval=1, title="Kijun-sen (Base Line) Periods") +senkouSpanPeriods = input(52, minval=1, title="Senkou (Leading) Span B Periods"), +displacement = input(26, minval=1, title="Displacement") + + +// == score inputs == +tkCrossWeight = input(1.0, title="TK Cross Importance Weight", type=float, step=0.1) +pkCrossWeight = input(1.0, title="PK Cross Importance Weight", type=float, step=0.1) +kumoBreakoutWeight = input(1.0, title="Kumo Breakout Importance Weight", type=float, step=0.1) +senkouCrossWeight = input(1.0, title="Senkou (Leading) Span Cross Importance Weight", type=float, step=0.1) +chikouCrossWeight = input(1.0, title="Chikou (Lagging) Span Cross Importance Weight", type=float, step=0.1) +chikouPlacementWeight = input(1.0, title="Chikou (Lagging) Span Relative to Cloud Importance Weight", type=float, step=0.1) +pricePlacementWeight = input(1.0, title="Price Relative to Cloud Importance Weight", type=float, step=0.1) + +weakPoints = input(0.5, title="Weak Point Value", type=float, step=0.1) +neutralPoints = input(1.0, title="Neutral Point Value", type=float, step=0.1) +strongPoints = input(2.0, title="Strong Point Value", type=float, step=0.1) + + +// == helpers == +donchian(len) => avg(lowest(len), highest(len)) +resolve(src, default) => na(src) ? default : src +getIntersect(series1, series2) => (series1[1] * (series2 - series2[1]) - series2[1] * (series1 - series1[1])) / ((series2 - series2[1]) - (series1 - series1[1])) +belowKumo(val, senkou1, senkou2) => val < senkou1[1] and val < senkou2[1] and val < senkou1 and val < senkou2 +aboveKumo(val, senkou1, senkou2) => val > senkou1[1] and val > senkou2[1] and val > senkou1 and val > senkou2 +insideKumo(val, senkou1, senkou2) => (not belowKumo(val, senkou1, senkou2)) and (not aboveKumo(val, senkou1, senkou2)) + + +// == generate ichimoku data == +tenkanSen = donchian(tenkenSenPeriods) +kijunSen = donchian(kijunSenPeriods) +chikouSen = offset(close, -displacement) + +senkouA = offset(avg(tenkanSen, kijunSen), displacement) +senkouB = offset(donchian(senkouSpanPeriods), displacement) + +priceAboveKumo = aboveKumo(close, senkouA, senkouB) +priceBelowKumo = belowKumo(close, senkouA, senkouB) +priceInsideKumo = insideKumo(close, senkouA, senkouB) + + +// == ichimoku cloud signals == +// source: http://www.ichimokutrader.com/signals.html + +// == Tenkan Sen (turning line) / Kijun Sen (standard line) Cross == +calcTkCross(previousVal) => + bullish = crossover(tenkanSen, kijunSen) + bearish = crossunder(tenkanSen, kijunSen) + + intersect = getIntersect(tenkanSen, kijunSen) + above = aboveKumo(intersect, senkouA, senkouB) + below = belowKumo(intersect, senkouA, senkouB) + inside = insideKumo(intersect, senkouA, senkouB) + + score = resolve(previousVal, 0) + score := (bullish and below) ? weakPoints : score + score := (bullish and inside) ? neutralPoints : score + score := (bullish and above) ? strongPoints : score + score := (bearish and below) ? -strongPoints : score + score := (bearish and inside) ? -neutralPoints : score + score := (bearish and above) ? -weakPoints : score + score + +// == Price and Kijun Sen (standard line) Cross == +calcPkCross(previousVal) => + bullish = crossover(close, kijunSen) + bearish = crossunder(close, kijunSen) + + intersect = getIntersect(close, kijunSen) + above = aboveKumo(intersect, senkouA, senkouB) + below = belowKumo(intersect, senkouA, senkouB) + inside = insideKumo(intersect, senkouA, senkouB) + + score = resolve(previousVal, 0) + score := (bullish and below) ? weakPoints : score + score := (bullish and inside) ? neutralPoints : score + score := (bullish and above) ? strongPoints : score + score := (bearish and below) ? -strongPoints : score + score := (bearish and inside) ? -neutralPoints : score + score := (bearish and above) ? -weakPoints : score + score + +// == Kumo Breakouts == +calcKumoBreakout(previousVal) => + bullish = (crossover(close, senkouA) and senkouA >= senkouB) or (crossover(close, senkouB) and senkouB >= senkouA) + bearish = (crossunder(close, senkouB) and senkouA >= senkouB) or (crossunder(close, senkouA) and senkouB >= senkouA) + + score = resolve(previousVal, 0) + score := bullish ? strongPoints : score + score := bearish ? -strongPoints : score + score + +// == Senkou Span Cross == +// The Senkou Span Cross signal occurs when the Senkou Span A (1st leading line) crosses the Senkou Span B (2nd leading line). +// NOTE: this cross occurs ahead of the price, since it's displaced to the right; this displacement must be removed +calcSenkouCross(previousVal) => + noDpsenkouA = avg(tenkanSen, kijunSen) // Senkou Span A (no displacement) + noDpsenkouB = donchian(senkouSpanPeriods) // Senkou Span B (no displacement) + + bullish = crossover(noDpsenkouA, noDpsenkouB) + bearish = crossunder(noDpsenkouA, noDpsenkouB) + + score = resolve(previousVal, 0) + score := (bullish and priceBelowKumo) ? weakPoints : score + score := (bullish and priceInsideKumo) ? neutralPoints : score + score := (bullish and priceAboveKumo) ? strongPoints : score + score := (bearish and priceBelowKumo) ? -strongPoints : score + score := (bearish and priceInsideKumo) ? -neutralPoints : score + score := (bearish and priceAboveKumo) ? -weakPoints : score + score + +// == Chikou Span Cross == +// The Chikou Span Cross signal occurs when the Chikou Span (Lagging line) rises above or falls below the price. +calcChikouCross(previousVal) => + // think in terms of current price = chikouSen + leadLine = offset(close, displacement) + bullish = crossover(close, leadLine) + bearish = crossunder(close, leadLine) + + score = resolve(previousVal, 0) + score := (bullish and priceBelowKumo) ? weakPoints : score + score := (bullish and priceInsideKumo) ? neutralPoints : score + score := (bullish and priceAboveKumo) ? strongPoints : score + score := (bearish and priceBelowKumo) ? -strongPoints : score + score := (bearish and priceInsideKumo) ? -neutralPoints : score + score := (bearish and priceAboveKumo) ? -weakPoints : score + score + +// == price relative to cloud == +calcPricePlacement(previousVal) => + score = resolve(previousVal, 0) + score := priceAboveKumo ? strongPoints : score + score := priceInsideKumo ? 0 : score + score := priceBelowKumo ? -strongPoints : score + score + +// == lag line releative to cloud == +calcChikouPlacement(previousVal) => + // doing calculation based on left-shifted chikouSen caused errors. + // Instead we shift the kumo right again and do comparison based on current price + shiftedSenkouA = offset(senkouA, displacement) + shiftedSenkouB = offset(senkouB, displacement) + score = resolve(previousVal, 0) + score := aboveKumo(close, shiftedSenkouA, shiftedSenkouB) ? strongPoints : score + score := insideKumo(close, shiftedSenkouA, shiftedSenkouB) ? 0 : score + score := belowKumo(close, shiftedSenkouA, shiftedSenkouB) ? -strongPoints : score + score + + +// == plot score == +tkCrossScore = calcTkCross(tkCrossScore[1]) +pkCrossScore = calcPkCross(pkCrossScore[1]) +kumoBreakoutScore = calcKumoBreakout(kumoBreakoutScore[1]) +senkouCrossScore = calcSenkouCross(senkouCrossScore[1]) +chikouCrossScore = calcChikouCross(chikouCrossScore[1]) +pricePlacementScore = calcPricePlacement(pricePlacementScore[1]) +chikouPlacementScore = calcChikouPlacement(chikouPlacementScore[1]) + + +totalScore = (tkCrossWeight * tkCrossScore) +totalScore := totalScore + (pkCrossWeight * pkCrossScore) +totalScore := totalScore + (kumoBreakoutWeight * kumoBreakoutScore) +totalScore := totalScore + (senkouCrossWeight * senkouCrossScore) +totalScore := totalScore + (chikouCrossWeight * chikouCrossScore) +totalScore := totalScore + (pricePlacementWeight * pricePlacementScore) +totalScore := totalScore + (chikouPlacementWeight * chikouPlacementScore) + +maxScore = strongPoints * (tkCrossWeight + pkCrossWeight + kumoBreakoutWeight + senkouCrossWeight + chikouCrossWeight + pricePlacementWeight + chikouPlacementWeight) +normalizedScore = 100 * totalScore / maxScore + +base = hline(50, color=gray, linestyle=solid, linewidth=2, title="Base") +max = hline(100, color=gray, linestyle=solid, title="Max") +min = hline(-100, color=gray, linestyle=solid, title="Min") +fill(max, base, color=green, title="Bullish") +fill(min, base, color=red, title="Bearish") +plot(normalizedScore, color=orange, linewidth=3, title="Total Score") + + +// // == plot ichimoku == + +// // Tenkan Sen (turning line) (blue) +//plot(tenkanSen, color=blue, title="Tenkan Sen (Turning/Conversion Line)", linewidth=3) + +// // Kijun Sen (base/standard line) (red) +//plot(kijunSen, color=red, title="Kijun Sen (Standard/Base Line)", linewidth=3) + +// // Chikou Span (lagging line) (green) +//plot(close, offset = -displacement, color=green, title="Chikou Span (Lagging Span)", linewidth=3) + +// // Senkou Span A +//renderSenkouA = avg(tenkanSen, kijunSen) // used only for rendering below +//p1 = plot(renderSenkouA, offset = displacement, color=green, title="Senkou Span (Leading Span) A") + +// // Senkou Span B +//renderSenkouB = donchian(senkouSpanPeriods) // used only for rendering below +//p2 = plot(renderSenkouB, offset = displacement, color=red, title="Senkou Span (Leading Span) B") + +// // i.e. Kumo cloud colouring +//fill(p1, p2, color = renderSenkouA > renderSenkouB ? green : red) + + +// // == strategy moves == +//simulateBuys = input(true, title="Simulate Buys") +buyThreshold = input(80.0, title="Buy Threshold", type=float, step=0.1) +sellThreshold = input(50.0, title="Sell Threshold", type=float, step=0.1) + + +buyCondition = normalizedScore > buyThreshold +sellCondition = normalizedScore < sellThreshold +//strategy.entry("buy", true, 1, when = buyCondition) +//strategy.close("buy", when = sellCondition) + + + + +// === Upgraded Conditions Framework === + +//////////////////////////////////////////////////////////////////////////// + +long_entry = buyCondition == true + +short_entry = sellCondition == true + +long_exit = short_entry //Close Long Condition Here (Optional) + +short_exit = long_entry //Close Short Condition Here (Optional) + +/////////////////////////////////////////////////////////////////////////// + +// init these values here, they will get updated later as more decisions are made +last_long_close = na +last_short_close = na + +// === Long position detection === +// longs open +longo = 0 +longo := nz(longo[1]) +// longs closed +longc = 0 +longc := nz(longc[1]) +if long_entry + longo := longo + 1 + longc := 0 +if long_exit + longc := longc + 1 + longo := 0 +// === /END + +// === Short position detection === +shorto = 0 +shorto := nz(shorto[1]) +shortc = 0 +shortc := nz(shortc[1]) +if short_entry + shorto := shorto + 1 + shortc := 0 +if short_exit + shortc := shortc + 1 + shorto := 0 +// === /END + +// === Pyramiding Settings === +pyr = input(1, title="Pyramiding Setting") +//pyr = 1 +longCondition = long_entry and longo <= pyr +longX = long_exit and longc <= pyr +shortCondition = short_entry and shorto <=pyr +shortX = short_exit and shortc <=pyr +// === /END + +// === Get Last Position Price === +last_open_longCondition = na +last_open_shortCondition = na +// last open prices +last_open_longCondition := longCondition ? close : nz(last_open_longCondition[1]) +last_open_shortCondition := shortCondition ? close : nz(last_open_shortCondition[1]) +// === /END + +// === Check For Long/Short === +last_longCondition = na +last_shortCondition = na +// last open times +last_longCondition := longCondition ? time : nz(last_longCondition[1]) +last_shortCondition := shortCondition ? time : nz(last_shortCondition[1]) +last_longClose = longX ? time : nz(last_long_close[1]) +last_shortClose = shortX ? time : nz(last_short_close[1]) + +in_longCondition = last_longCondition > last_shortCondition and last_longCondition >= last_longClose +in_shortCondition = last_shortCondition > last_longCondition and last_shortCondition >= last_shortClose +// === /END + +// === Stop Loss (Long) === +isSLl = input(false, "Stop Loss (Long)") +sll = input(6, "Stop Loss %", type=float, step=0.2, minval=0, maxval=100) / 100 +long_call_sl = last_open_longCondition * (1 - sll) +long_sl = isSLl and low <= long_call_sl and longCondition == 0 +// === /END + +// === Stop Loss (Short) === +isSLs = input(false, "Stop Loss (Short)") +sls = input(6, "Stop Loss %", type=float, step=0.2, minval=0, maxval=100) / 100 +short_call_sl = last_open_shortCondition * (1 + sls) +short_sl = isSLs and high >= short_call_sl and shortCondition == 0 +// === /END + +// === Trailing Stop === +last_high = na +last_low = na +last_high := in_longCondition ? (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1]) : na +last_low := in_shortCondition ? (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1]) : na +isTSl = input(false, "Trailing Stop Long") +tsil = input(25, "Activate Trailing Stop % Long", type=float, step=1, minval=0, maxval=100) / 100 +tsl = input(8, "Trailing Stop % Long", type=float, step=1, minval=0, maxval=100) / 100 +long_call_ts = last_high * (1 - tsl) +long_call_tsi = last_open_longCondition * (1 + tsil) +long_ts = isTSl and not na(last_high) and low <= long_call_ts and longCondition == 0 and last_high >= long_call_tsi +isTSs = input(false, "Trailing Stop Short") +tsis = input(25, "Activate Trailing Stop % Short", type=float, step=1, minval=0, maxval=100) / 100 +tss = input(8, "Trailing Stop % Short", type=float, step=1, minval=0, maxval=100) / 100 +short_call_ts = last_low * (1 + tss) +short_call_tsi = last_open_shortCondition * (1 - tsis) +short_ts = isTSs and not na(last_low) and high >= short_call_ts and shortCondition == 0 and last_low <= short_call_tsi +// === /END + +// === Create Single Close For All Closing Conditions === +closelong = long_sl or long_ts or longX +closeshort = short_sl or short_ts or shortX + +// Get Last Close +last_long_close := closelong ? time : nz(last_long_close[1]) +last_short_close := closeshort ? time : nz(last_short_close[1]) + +// Check For Close Since Last Open +if closelong and last_long_close[1] > last_longCondition + closelong := false + +if closeshort and last_short_close[1] > last_shortCondition + closeshort := false +// === /END + +//////////////////////////////////////////////////////////////////////////// + +// === Alarm Settings === +//alertcondition(longCondition==1, title='LONG', message='LONG') +//alertcondition(closelong==1, title='EXIT LONG', message='EXIT LONG') +//alertcondition(shortCondition==1, title='SHORT', message='SHORT') +//alertcondition(closeshort==1, title='EXIT SHORT', message='EXIT SHORT') +// === /END + +//////////////////////////////////////////////////////////////////////////// + +// === Visuals & Debugs Here === +//Remove "//" To Check/Debug The Code Above +// Signal Shapes +//plotshape(longCondition[1]==1, title='LONG', style=shape.triangleup, size=size.large, color=#02CB80, location= location.belowbar) +//plotshape(shortCondition[1]==1, title='SHORT', style=shape.triangledown, size=size.large, color=#DC143C, location=location.abovebar) +//plotshape(shortCondition[1]==0 and closelong[1]==1, title='EXIT LONG', style=shape.xcross, color=#02CB80, location=location.belowbar, transp=0) +//plotshape(longCondition[1]==0 and closeshort[1]==1, title='EXIT SHORT', style=shape.xcross, color=#DC143C, location=location.abovebar, transp=0) +// SL Plot +//slColor = (isSLl or isSLs) and (in_longCondition or in_shortCondition) ? red : white +//plot(isSLl and in_longCondition ? long_call_sl : na, "Long SL", slColor, style=3, linewidth=2) +//plot(isSLs and in_shortCondition ? short_call_sl : na, "Short SL", slColor, style=3, linewidth=2) +// TP Plot +//tpColor = isTP and (in_longCondition or in_shortCondition) ? purple : white +//plot(isTP and in_longCondition ? long_call_tp : na, "Long TP", tpColor, style=3, linewidth=2) +//plot(isTP and in_shortCondition ? short_call_tp : na, "Short TP", tpColor, style=3, linewidth=2) +// TS Plot +//tsColor = (isTSl or isTSs) and (in_longCondition or in_shortCondition) ? orange : white +//tsiColor = (isTSl or isTSs) and (in_longCondition or in_shortCondition) ? white : orange +//plot(isTSl and in_longCondition ? long_call_tsi : na, "Long Trailing", tsiColor, style=3, linewidth=2) +//plot(isTSs and in_shortCondition ? short_call_tsi : na, "Short Trailing", tsiColor, style=3, linewidth=2) +//plot(isTSl and in_longCondition and last_high > long_call_tsi ? long_call_ts : na, "Long Trailing", tsColor, style=2, linewidth=2) +//plot(isTSs and in_shortCondition and last_low < short_call_tsi ? short_call_ts : na, "Short Trailing", tsColor, style=2, linewidth=2) +// === /END + +//////////////////////////////////////////////////////////////////////////// +// // +// REMOVE THE CODE BELOW FOR STUDY CONVERSION // +// // +//////////////////////////////////////////////////////////////////////////// + +// === Strategy Direction Switch === +dir = input(title = "Strategy Direction", defval="Long") //, options=["Long", "Short", "Both"] +// === /END + +// === Backtesting Dates === +testPeriodSwitch = input(false, "Custom Backtesting Dates") +testStartYear = input(2017, "Backtest Start Year") +testStartMonth = input(1, "Backtest Start Month") +testStartDay = input(1, "Backtest Start Day") +testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) +testStopYear = input(9999, "Backtest Stop Year") +testStopMonth = input(1, "Backtest Stop Month") +testStopDay = input(1, "Backtest Stop Day") +testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) +testPeriod() => + time >= testPeriodStart and time <= testPeriodStop ? true : false +isPeriod = testPeriodSwitch == true ? testPeriod() : true +// === /END + +// === Strategy === +if isPeriod and dir=="Both" + if (longCondition) + strategy.entry("Long",strategy.long) + if (closelong) and not shortCondition + strategy.close("Long") + if (shortCondition) + strategy.entry("Short",strategy.short) + if (closeshort) and not longCondition + strategy.close("Short") + +if isPeriod and dir=="Long" + if (longCondition) + strategy.entry("Long",strategy.long) + if (closelong) + strategy.close("Long") + +if isPeriod and dir=="Short" + if (shortCondition) + strategy.entry("Short",strategy.short) + if (closeshort) + strategy.close("Short") +// === /END + +//////////////////////////////////////////////////////////////////////////// +// // +// ULTIMATE PINE INJECTOR V1.2 // +// // +//////////////////////===ANION=CODE=END====///////////////////////////////// \ No newline at end of file diff --git a/extensions/strategies/ichimoku_score/strategy.js b/extensions/strategies/ichimoku_score/strategy.js new file mode 100644 index 0000000000..d295c7752e --- /dev/null +++ b/extensions/strategies/ichimoku_score/strategy.js @@ -0,0 +1,423 @@ + +// ======= Ichimoku Signals Score ======= + +/* + +The Ichimoku signals, indeed all Ichimoku elements, should never be taken in isolation, but considered in the context +of the overall chart. Ichimoku Kinko Hyo is a visual technical analysis system and the charts are designed to be +considered in their entirety, with regard given to the relationships between all of the elements, including the price. +As such, Ichimoku is not suitable for automated or "single event" decision making. + +Remember that Ichimoku Kinko Hyo is a technical trend trading charting system and trends can and do change, so your +readings of the charts should be probabilistic, rather than predictive. As with most technical analysis methods, +Ichimoku is likely to produce frequent conflicting signals in non-trending markets. + +The five kinds of signal are described below. Most can be classified as strong, neutral, or weak by their proximate +relationship to the Kumo (cloud), but each signal may be further strengthened, weakened, or nullified by the +relationships between other elements. All signals must be considered in respect to the overall chart. + +For a better understanding of how to read ichimoku please refer to http://www.ichimokutrader.com/signals.html +Code based on a TradingView.com script at https://www.tradingview.com/v/u0NN8zNu/ + +If you appreciate the work and the man hours that went into creating this strategy, please consider giving back. +LoneWolf345 ETH = 0xa42f6d21f1e52f7fbaeaa0f58d1cc4b9a58f2dcc , BTC = 15L8QstCQG4ho6139hVaqLxkAzcjnqBbf6 +Travis ETH = 0xdA963A127BeCB08227583d11f912F400D5347060 , BTC = 3KKHdBJpEGxghxGazoE4X7ihyr2q6nHUvW + +*/ + + +let z = require('zero-fill') + , n = require('numbro') + , Phenotypes = require('../../../lib/phenotype') + , crossover = require('../../../lib/helpers').crossover + , crossunder = require('../../../lib/helpers').crossunder + +module.exports = { + name: 'ichimoku_score', + description: 'Associate various ichimoku signals with a score.', + + getOptions: function () { + this.option('period', 'period length eg 10m', String, '60m') + this.option('min_periods', 'min. number of history periods', Number, 150) + + // == ichimoku inputs == + this.option('tenkenSenPeriods', 'Tenkan-sen (Conversion Line) Periods', Number, 9) //default 9 + this.option('kijunSenPeriods', 'Kijun-sen (Base Line) Periods', Number, 26) //default 26 + this.option('senkouSpanPeriods', 'Senkou (Leading) Span B Periods', Number, 52) //default 52 + this.option('displacement', 'Displacement', Number, 26) //default 26 + + // == score inputs == + this.option('tkCrossWeight', 'TK Cross Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('pkCrossWeight', 'PK Cross Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('kumoBreakoutWeight', 'Kumo Breakout Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('senkouCrossWeight', 'Senkou (Leading) Span Cross Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('chikouCrossWeight', 'Chikou (Lagging) Span Cross Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('chikouPlacementWeight', 'Chikou (Lagging) Span Relative to Cloud Importance Weight', Number, 1) //range 0 - 2 Default = 1 + this.option('pricePlacementWeight', 'Price Relative to Cloud Importance Weight', Number, 1) //range 0 - 2 Default = 1 + + this.option('weakPoints', 'Weak Point Value', Number, 0.5) //range 0 - 2 Default = 0.5 + this.option('neutralPoints', 'Neutral Point Value', Number, 1) //range 0 - 2 Default = 1 + this.option('strongPoints', 'Strong Point Value', Number, 2) //range 0 - 2 Default = 2 + + this.option('buyLevel', 'when to signal buy', Number, 50) //range -100 - 100 Default = 50 + this.option('sellLevel', 'when to signal sell', Number, 50) //range -100 - 100 Default = 50 + + }, + + calculate: function (s) { + + if (s.lookback.length > s.options.min_periods) { + + + + // == == generate ichimoku data == == + + + s.period.tenkenSen = donchian(s, s.options.tenkenSenPeriods) + s.period.kijunSen = donchian(s, s.options.kijunSenPeriods) + + s.period.senkouA = (s.period.tenkenSen + s.period.kijunSen) / 2 + s.period.senkouB = donchian(s, s.options.senkouSpanPeriods) + + // have to wait until displacement periods have passed + if (s.lookback.length > s.options.displacement) { + + s.lookback[s.options.displacement].chikouSen = s.period.close + + s.priceAboveKumo = valueAbove(s.period.close, s.period.senkouA, s.period.senkouB) + s.priceBelowKumo = valueBelow(s.period.close, s.period.senkouA, s.period.senkouB) + s.priceInsideKumo = !s.priceAboveKumo && !s.priceBelowKumo + + // == == calculate score == == + + + s.period.tkCrossScore = calcTkCross(s, s.lookback[0].tkCrossScore) + s.period.pkCrossScore = calcPkCross(s, s.lookback[0].pkCrossScore) + s.period.kumoBreakoutScore = calcKumoBreakout(s, s.lookback[0].kumoBreakoutScore) + s.period.senkouCrossScore = calcSenkouCross(s, s.lookback[0].senkouCrossScore) + s.period.chikouCrossScore = calcChikouCross(s, s.lookback[0].chikouCrossScore) + s.period.pricePlacementScore = calcPricePlacement(s, s.lookback[0].pricePlacementScore) + s.period.chikouPlacementScore = calcChikouPlacement(s, s.lookback[0].chikouPlacementScore) + + s.totalScore = (s.options.tkCrossWeight * s.period.tkCrossScore) + s.totalScore += (s.options.pkCrossWeight * s.period.pkCrossScore) + s.totalScore += (s.options.kumoBreakoutWeight * s.period.kumoBreakoutScore) + s.totalScore += (s.options.senkouCrossWeight * s.period.senkouCrossScore) + s.totalScore += (s.options.chikouCrossWeight * s.period.chikouCrossScore) + s.totalScore += (s.options.pricePlacementWeight * s.period.pricePlacementScore) + s.totalScore += (s.options.chikouPlacementWeight * s.period.chikouPlacementScore) + + let maxScore = s.options.strongPoints * (s.options.tkCrossWeight + s.options.pkCrossWeight + s.options.kumoBreakoutWeight + s.options.senkouCrossWeight + s.options.chikouCrossWeight + s.options.pricePlacementWeight + s.options.chikouPlacementWeight) + s.normalizedScore = 100 * s.totalScore / maxScore + + } + } + }, + + onPeriod: function (s, cb) { + + + // == Debugging == + + if (s.options.debug) {console.log('\n== Options ==')} + + if (s.options.debug) {console.log('tenkenSenPeriods: ' + s.options.tenkenSenPeriods)} + if (s.options.debug) {console.log('kijunSenPeriods: ' + s.options.kijunSenPeriods)} + if (s.options.debug) {console.log('senkouSpanPeriods: ' + s.options.senkouSpanPeriods)} + if (s.options.debug) {console.log('displacement: ' + s.options.displacement)} + + if (s.options.debug) {console.log('buyLevel: ' + s.options.buyLevel)} + if (s.options.debug) {console.log('sellLevel: ' + s.options.sellLevel)} + + + if (s.options.debug) {console.log('\n== Ichimoku Data ==')} + + if (s.options.debug) {console.log('Tenken-Sen (conversion Line):' + s.period.tenkenSen)} + if (s.options.debug) {console.log('Kijun-Sen (Base Line):' + s.period.kijunSen)} + if (s.options.debug) {console.log('senkouA (Leading):' + s.period.senkouA)} + if (s.options.debug) {console.log('senkouB (Leading):' + s.period.senkouB)} + + + if (s.options.debug) {console.log('\n== Calculate Score ==')} + + if (s.options.debug) {console.log('tkCrossScore:' + s.period.tkCrossScore)} + if (s.options.debug) {console.log('pkCrossScore:' + s.period.pkCrossScore)} + if (s.options.debug) {console.log('kumoBreakoutScore:' + s.period.kumoBreakoutScore)} + if (s.options.debug) {console.log('senkouCrossScore:' + s.period.senkouCrossScore)} + if (s.options.debug) {console.log('chikouCrossScore:' + s.period.chikouCrossScore)} + if (s.options.debug) {console.log('pricePlacementScore:' + s.period.pricePlacementScore)} + if (s.options.debug) {console.log('chikouPlacementScore:' + s.period.chikouPlacementScore)} + + + if (s.options.debug) {console.log('\n== Buy / Sell signals ==')} + + if (s.options.debug) {console.log('normalizedScore:' + s.normalizedScore)} + if (s.options.debug) {console.log('previousScore:' + s.previousScore)} + if (s.options.debug) {console.log('buy logic')} + if (s.options.debug) {console.log('if (s.normalizedScore > s.options.buyLevel && s.previousScore < s.options.buyLevel)')} + if (s.options.debug) {console.log('if (' + s.normalizedScore + ' > ' + s.options.buyLevel + ' && ' + s.previousScore + ' < ' + s.options.buyLevel + ')')} + if (s.options.debug) {console.log(s.normalizedScore > s.options.buyLevel && s.previousScore < s.options.buyLevel)} + + + + // == == Buy / Sell Signals == == + + + + if (!s.previousScore) {s.previousScore = 0} + + if (s.normalizedScore > s.options.buyLevel && s.previousScore < s.options.buyLevel) { + s.signal = 'buy' + s.previousScore = s.normalizedScore + } else if (s.normalizedScore < s.options.sellLevel && s.previousScore > s.options.sellLevel) { + s.signal = 'sell' + s.previousScore = s.normalizedScore + } else { + s.signal = null + s.previousScore = s.normalizedScore + } + + cb() + }, + + onReport: function (s) { + var cols = [] + let color = 'cyan' + + if (s.normalizedScore > 50) { color = 'green' } else if (s.normalizedScore < -50) { color = 'red' } + cols.push(z(10, 'S[' + n(s.normalizedScore).format('###.0') + ']', '')[color]) + + return cols + }, + + phenotypes: { + + //General Options + period_length: Phenotypes.RangePeriod(45, 240, 'm'), + min_periods: Phenotypes.Range(150, 150), //Needs to be greater than senkouSpanPeriods + markdown_buy_pct: Phenotypes.RangeFloat(0, 0), + markup_sell_pct: Phenotypes.RangeFloat(0, 0), + order_type: Phenotypes.ListOption(['maker', 'taker']), + sell_stop_pct: Phenotypes.Range0(1, 50), + buy_stop_pct: Phenotypes.Range0(1, 50), + profit_stop_enable_pct: Phenotypes.Range(1, 20), + profit_stop_pct: Phenotypes.Range(1,10), + + //Strategy Specific + buyLevel: Phenotypes.RangeFactor(5, 100, 5), + sellLevel: Phenotypes.RangeFactor(5, 100, 5), + + tenkenSenPeriods: Phenotypes.RangeFactor(5, 30, 1), + kijunSenPeriods: Phenotypes.RangeFactor(25, 75, 1), + senkouSpanPeriods: Phenotypes.RangeFactor(50, 150, 1), + displacement: Phenotypes.RangeFactor(20, 40, 1) + + } +} + + + + + + +// == == Helpers == == + + + +function resolve(src, fallback) { return isNaN(src) ? fallback : src} + + +function donchian(s, len) { + + let data = s.lookback.slice(0, len - 1), + lowData = [s.period.low, ...data.map(p => p.low)], + highData = [s.period.high, ...data.map(p => p.high)] + + return (Math.min(...lowData) + Math.max(...highData)) / 2 + +} + + +function getIntersect(s, key1, key2) { + + return (s.lookback[0][key1] * (s.period[key2] - s.lookback[0][key2]) - + s.lookback[0][key2] * (s.period[key1] - s.lookback[0][key1])) / + ((s.period[key2] - s.lookback[0][key2]) - (s.period[key1] - s.lookback[0][key1])) +} + +function belowKumo(s, key, key1, key2) { + + return valueBelowKumo(s, s.period[key], key1, key2) +} +function aboveKumo(s, key, key1, key2) { + + return valueAboveKumo(s, s.period[key], key1, key2) +} + +function valueBelowKumo(s, val, key1, key2) { + + if(s.lookback.length >= s.options.displacement) + return valueBelow(val, s.lookback[s.options.displacement][key1], s.lookback[s.options.displacement][key2]) + else + throw 'belowKumo, s.lookback.length < s.options.displacement' +} + +function valueAboveKumo(s, val, key1, key2) { + + if(s.lookback.length >= s.options.displacement) + return valueAbove(val, s.lookback[s.options.displacement][key1], s.lookback[s.options.displacement][key2]) + else + throw 'aboveKumo, s.lookback.length < s.options.displacement' +} + +function valueAbove(val, target1, target2) { + return val > Math.max(target1, target2) +} + +function valueBelow(val, target1, target2) { + return val < Math.min(target1, target2) +} + + + +// == == ichimoku cloud signals == == + + + + + +// == Tenkan Sen (turning line) / Kijun Sen (standard line) Cross == +function calcTkCross(s, previousVal) { + + let bullish = crossover(s, 'tenkenSen', 'kijunSen') + let bearish = crossunder(s, 'tenkenSen', 'kijunSen') + + let intersect = getIntersect(s, 'tenkenSen', 'kijunSen') + let above = valueAboveKumo(s, intersect, 'senkouA', 'senkouB') + let below = valueBelowKumo(s, intersect, 'senkouA', 'senkouB') + let inside = !above && !below + + let score = resolve(previousVal, 0) + if (bullish && below) {score = s.options.weakPoints} //A weak bullish signal occurs when the cross is below the Kumo. + if (bullish && inside) {score = s.options.neutralPoints} //A neutral bullish signal occurs when the cross is inside the Kumo. + if (bullish && above) {score = s.options.strongPoints} //A strong bullish signal occurs when the cross is above the Kumo. + if (bearish && below) {score = -s.options.strongPoints} //A strong bearish signal occurs when the cross is below the Kumo. + if (bearish && inside) {score = -s.options.neutralPoints} //A neutral bearish signal occurs when the cross is inside the Kumo. + if (bearish && above) {score = -s.options.weakPoints} //A weak bearish signal occurs when the cross is above the Kumo. + + return (score) + +} + +// == Price and Kijun Sen (standard line) Cross == +function calcPkCross(s, previousVal) { + + let bullish = crossover(s, 'close', 'kijunSen') + let bearish = crossunder(s, 'close', 'kijunSen') + + let intersect = getIntersect(s, 'close', 'kijunSen') + let above = valueAboveKumo(s, intersect, 'senkouA', 'senkouB') + let below = valueBelowKumo(s, intersect, 'senkouA', 'senkouB') + let inside = !above && !below + + let score = resolve(previousVal, 0) + if (bullish && below) {score = s.options.weakPoints} //A weak bullish signal occurs when the cross is below the Kumo. + if (bullish && inside) {score = s.options.neutralPoints} //A neutral bullish signal occurs when the cross is inside the Kumo. + if (bullish && above) {score = s.options.strongPoints} //A strong bullish signal occurs when the cross is above the Kumo. + if (bearish && below) {score = -s.options.strongPoints} //A strong bearish signal occurs when the cross is below the Kumo. + if (bearish && inside) {score = -s.options.neutralPoints} //A neutral bearish signal occurs when the cross is inside the Kumo. + if (bearish && above) {score = -s.options.weakPoints} //A weak bearish signal occurs when the cross is above the Kumo. + + return (score) + +} + +// == Kumo Breakouts == +function calcKumoBreakout(s, previousVal) { + + let bullish = (crossover(s, 'close', 'senkouA') && s.period.senkouA >= s.period.senkouB) || (crossover(s, 'close', 'senkouB') && s.senkouB >= s.senkouA) + let bearish = (crossunder(s, 'close', 'senkouB') && s.period.senkouA >= s.period.senkouB) || (crossover(s, 'close', 'senkouA') && s.senkouB >= s.senkouA) + + let score = resolve(previousVal, 0) + if (bullish) {score = s.options.strongPoints} //A bullish signal occurs when the price goes upwards through the top of the Kumo. + if (bearish) {score = -s.options.strongPoints} //A bearish signal occurs when the price goes downwards through the bottom of the Kumo. + + return (score) + +} + +// == Senkou Span Cross == +// The Senkou Span Cross signal occurs when the Senkou Span A (1st leading line) crosses the Senkou Span B (2nd leading line). +// NOTE: this cross occurs ahead of the price, since it's displaced to the right; this displacement must be removed +function calcSenkouCross(s, previousVal) { + + s.period.noDpsenkouA = (s.period.tenkenSen + s.period.kijunSen) / 2 //Senkou Span A (no displacement) + s.period.noDpsenkouB = donchian(s, s.options.senkouSpanPeriods) //senkou Span B (no displacement) + + let bullish = crossover(s, 'noDpsenkouA', 'noDpsenkouB') + let bearish = crossunder(s, 'noDpsenkouA', 'noDpsenkouB') + + let score = resolve(previousVal, 0) + if (bullish && s.priceBelowKumo) {score = s.options.weakPoints} //A weak bullish signal occurs if the current price is below the Kumo. + if (bullish && s.priceInsideKumo) {score = s.options.neutralPoints} //A neutral bullish signal occurs if the current price is inside the Kumo. + if (bullish && s.priceAboveKumo) {score = s.options.strongPoints} //A strong bullish signal occurs if the current price is above the Kumo. + if (bearish && s.priceBelowKumo) {score = -s.options.strongPoints} //A strong bearish signal occurs if the current price is below the Kumo. + if (bearish && s.priceInsideKumo) {score = -s.options.neutralPoints} //A neutral bearish signal occurs if the current price is inside the Kumo. + if (bearish && s.priceAboveKumo) {score = -s.options.weakPoints} //A weak bearish signal occurs if the current price is above the Kumo. + + return (score) + +} + +// == Chikou Span Cross == +// The Chikou Span Cross signal occurs when the Chikou Span (Lagging line) rises above or falls below the price. +function calcChikouCross(s, previousVal) { + + s.period.leadline = s.lookback[s.options.displacement].close//offset(s.period.close, s.options.displacement) + let bullish = crossover(s, 'close', 'leadline') + let bearish = crossunder(s, 'close', 'leadline') + + let score = resolve(previousVal, 0) + if (bullish && s.priceBelowKumo) {score = s.options.weakPoints} //A weak bullish signal occurs if the current price is below the Kumo. + if (bullish && s.priceInsideKumo) {score = s.options.neutralPoints} //A neutral bullish signal occurs if the current price is inside the Kumo. + if (bullish && s.priceAboveKumo) {score = s.options.strongPoints} //A strong bullish signal occurs if the current price is above the Kumo. + if (bearish && s.priceBelowKumo) {score = -s.options.strongPoints} //A weak bearish signal occurs if the current price is above the Kumo. + if (bearish && s.priceInsideKumo) {score = -s.options.neutralPoints} //A neutral bearish signal occurs if the current price is inside the Kumo. + if (bearish && s.priceAboveKumo) {score = -s.options.weakPoints} //A strong bearish signal occurs if the current price is below the Kumo. + + return (score) + +} + + +// == price relative to cloud == +function calcPricePlacement(s, previousVal) { + + let score = resolve(previousVal, 0) + if (s.priceAboveKumo) {score = s.options.strongPoints} + if (s.priceInsideKumo) {score = s.options.neutralPoints} + if (s.priceBelowKumo) {score = -s.options.strongPoints} + + return (score) + +} + + + +// == lag line releative to cloud == +function calcChikouPlacement(s, previousVal) { + + let score = resolve(previousVal, 0) + if(s.lookback.length >= s.options.displacement) { + // above + if(aboveKumo(s, 'close', 'senkouA', 'senkouB')) + score = s.options.strongPoints + // below + else if(belowKumo(s, 'close', 'senkouA', 'senkouB')) + score = -s.options.strongPoints + else + score = 0 + } + + return (score) +} \ No newline at end of file From 095d3364bab0a70142fe6ae96e343daa94028e98 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Mon, 23 Apr 2018 11:39:40 +0200 Subject: [PATCH 67/74] fix(package): update gdax to version 0.7.0 (#1536) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cbfa73b594..6436ac72d9 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "express": "^4.16.2", "file-loader": "^1.1.6", "forex.analytics": "mkmarek/forex.analytics#7bc278987700d4204e959af17de61495941d1a14", - "gdax": "^0.6.0", + "gdax": "^0.7.0", "gemini-api": "^2.0.4", "glob": "^7.1.1", "har-validator": "^5.0.3", From eae24151a3e9e257588d8fb6e4dd172d1d1cce8b Mon Sep 17 00:00:00 2001 From: travisstaloch Date: Mon, 23 Apr 2018 02:40:23 -0700 Subject: [PATCH 68/74] bump gdax-node version and change phenotypes.create intfactor (#1538) * add docker mount for forex_analytics models (#1369) * bump gdax-node version and change phenotypes.create intfactor --- lib/phenotype.js | 53 ++++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/lib/phenotype.js b/lib/phenotype.js index 30e304b91d..6fdcc395a1 100644 --- a/lib/phenotype.js +++ b/lib/phenotype.js @@ -8,7 +8,7 @@ let PROPERTY_MUTATION_CHANCE = 0.30 let PROPERTY_CROSSOVER_CHANCE = 0.50 module.exports = { - create: function (strategy) { + create: function(strategy) { var r = {} for (var k in strategy) { var v = strategy[k] @@ -20,9 +20,10 @@ module.exports = { r[k] = Math.floor((Math.random() * (v.max - v.min + 1)) + v.min) } } else if (v.type === 'intfactor') { - // possible 0 value by providing min 0 - if (v.min == 0 && Math.random() <= 0.5) r[k] = 0 - else r[k] = Math.round(((Math.random() * (v.max - v.min) + 1) / v.factor) * v.factor) + let factorString = v.factor.toString(), + decimalIdx = factorString.indexOf('.') + 1, + decimals = decimalIdx === 0 ? 0 : factorString.length - decimalIdx + r[k] = (Math.floor(Math.random() * (v.max - v.min + v.factor) / v.factor) * v.factor + v.min).toFixed(decimals) } else if (v.type === 'float') { r[k] = (Math.random() * (v.max - v.min)) + v.min } else if (v.type === 'period_length') { @@ -31,8 +32,7 @@ module.exports = { } else if (v.type === 'listOption') { let index = Math.floor(Math.random() * v.options.length) r[k] = v.options[index] - } - else if (v.type === 'maType') { + } else if (v.type === 'maType') { let items = ['SMA', 'EMA', 'WMA', 'DEMA', 'TEMA', 'TRIMA', 'KAMA', 'MAMA', 'T3'] let index = Math.floor(Math.random() * items.length) r[k] = items[index] @@ -45,38 +45,33 @@ module.exports = { return r }, - range: function (v, step, stepSize) { + range: function(v, step, stepSize) { var scale = step / (stepSize - 1) if (v.type === 'int') { return Math.floor((scale * (v.max - v.min)) + v.min) - } - else if (v.type === 'int0') { + } else if (v.type === 'int0') { if (step == 0) return 0 scale = (step - 1) / (stepSize - 2) return Math.floor((scale * (v.max - v.min)) + v.min) - } - else if (v.type === 'intfactor') { + } else if (v.type === 'intfactor') { let val = Math.floor((scale * (v.max - v.min)) + v.min) return Math.floor(val / v.factor) * v.factor - } - else if (v.type === 'float') { + } else if (v.type === 'float') { return (scale * (v.max - v.min)) + v.min - } - else if (v.type === 'period_length') { + } else if (v.type === 'period_length') { var s = Math.floor((scale * (v.max - v.min)) + v.min) return s + v.period_length - } - else if (v.type === 'listOption') { + } else if (v.type === 'listOption') { scale = step / stepSize let index = Math.floor(scale * v.options.length) return v.options[index] } }, - mutation: function (oldPhenotype, strategy) { + mutation: function(oldPhenotype, strategy) { var r = module.exports.create(strategy) for (var k in oldPhenotype) { if (k === 'sim') continue @@ -87,7 +82,7 @@ module.exports = { return r }, - crossover: function (phenotypeA, phenotypeB, strategy) { + crossover: function(phenotypeA, phenotypeB, strategy) { var p1 = {} var p2 = {} @@ -101,7 +96,7 @@ module.exports = { return [p1, p2] }, - fitness: function (phenotype) { + fitness: function(phenotype) { if (typeof phenotype.sim === 'undefined') return 0 var vsBuyHoldRate = ((phenotype.sim.vsBuyHold + 100) / 50) @@ -114,12 +109,12 @@ module.exports = { return rate }, - competition: function (phenotypeA, phenotypeB) { + competition: function(phenotypeA, phenotypeB) { // TODO: Refer to geneticalgorithm documentation on how to improve this with diverstiy return module.exports.fitness(phenotypeA) >= module.exports.fitness(phenotypeB) }, - Range: function (min, max) { + Range: function(min, max) { var r = { type: 'int', min: min, @@ -128,7 +123,7 @@ module.exports = { return r }, - Range0: function (min, max) { + Range0: function(min, max) { var r = { type: 'int0', min: min, @@ -137,7 +132,7 @@ module.exports = { return r }, - RangeFactor: function (min, max, factor) { + RangeFactor: function(min, max, factor) { var r = { type: 'intfactor', min: min, @@ -147,7 +142,7 @@ module.exports = { return r }, - RangeFloat: function (min, max) { + RangeFloat: function(min, max) { var r = { type: 'float', min: min, @@ -156,7 +151,7 @@ module.exports = { return r }, - RangePeriod: function (min, max, period_length) { + RangePeriod: function(min, max, period_length) { var r = { type: 'period_length', min: min, @@ -166,7 +161,7 @@ module.exports = { return r }, - RangeMaType: function () { + RangeMaType: function() { var r = { type: 'listOption', options: ['SMA', 'EMA', 'WMA', 'DEMA', 'TEMA', 'TRIMA', 'KAMA', 'MAMA', 'T3'] @@ -174,7 +169,7 @@ module.exports = { return r }, - ListOption: function (options) { + ListOption: function(options) { var r = { type: 'listOption', options: options @@ -182,4 +177,4 @@ module.exports = { return r } -} +} \ No newline at end of file diff --git a/package.json b/package.json index 6436ac72d9..ddde892b02 100644 --- a/package.json +++ b/package.json @@ -122,4 +122,4 @@ "engines": { "node": "^8.3.0 || ^9.0.0" } -} +} \ No newline at end of file From 23735a4ebea4e7c489ecf1b2e6fd37e2783ed451 Mon Sep 17 00:00:00 2001 From: Chase Date: Mon, 23 Apr 2018 11:43:45 +0200 Subject: [PATCH 69/74] fix(package): update sass-loader to version 7.0.1 (#1559) Closes #1548 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ddde892b02..d12823b597 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "random-port": "^0.1.0", "regression": "^2.0.0", "resolve-url-loader": "^2.2.1", - "sass-loader": "^6.0.6", + "sass-loader": "^7.0.1", "semver": "^5.4.1", "simple-xmpp": "^1.3.0", "stats-lite": "2.1.0", From 33ada4555621403b5d8e3db7afb6a4648d11a813 Mon Sep 17 00:00:00 2001 From: Pawel Ratajczak Date: Mon, 23 Apr 2018 10:44:16 +0100 Subject: [PATCH 70/74] Predict whole candles instead of close price only (#1549) * add docker mount for forex_analytics models (#1369) * Don't require unused mathjs * Predict whole candles instead of only close price in neural strategy --- extensions/strategies/neural/strategy.js | 45 +++++++++++++++++------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/extensions/strategies/neural/strategy.js b/extensions/strategies/neural/strategy.js index 8acd8ea50c..6b0e391f5c 100644 --- a/extensions/strategies/neural/strategy.js +++ b/extensions/strategies/neural/strategy.js @@ -37,10 +37,10 @@ module.exports = { s.neural = { net : new convnetjs.Net(), layer_defs : [ - {type:'input', out_sx:1, out_sy:1, out_depth:s.options.depth}, + {type:'input', out_sx:5, out_sy:1, out_depth:s.options.depth}, {type:'fc', num_neurons: s.options.neurons_1, activation: s.options.activation_1_type}, {type:'fc', num_neurons: s.options.neurons_2, activation: s.options.activation_2_type}, - {type:'regression', num_neurons:1} + {type:'regression', num_neurons:5} ], neuralDepth: s.options.depth } @@ -52,33 +52,54 @@ module.exports = { if (global.forks < s.options.threads) { cluster.fork(); global.forks++ } cluster.on('exit', (code) => { process.exit(code) }) } + if (cluster.isWorker) { ema(s, 'neural', s.options.neural) - // do the network thing var tlp = [] var tll = [] // this thing is crazy run with trendline placed here. But there needs to be a coin lock so you dont buy late! - if (!s.in_preroll) { + if (!s.in_preroll && s.lookback[s.options.min_periods]) { var min_predict = s.options.min_predict > s.options.min_periods ? s.options.min_periods : s.options.min_predict - for (let i = 0; i < s.options.min_periods; i++) { tll.push(s.lookback[i].close) } - for (let i = 0; i < min_predict; i++) { tlp.push(s.lookback[i].close) } + for (let i = 0; i < s.options.min_periods; i++) { + tll.push(s.lookback[i]) + } + for (let i = 0; i < min_predict; i++) { + tlp.push(s.lookback[i]) + } var my_data = tll.reverse() var learn = function () { //Learns for (var j = 0; j < s.options.learns; j++) { for (var i = 0; i < my_data.length - s.neural.neuralDepth; i++) { var data = my_data.slice(i, i + s.neural.neuralDepth) - var real_value = [my_data[i + s.neural.neuralDepth]] - var x = new convnetjs.Vol(data) - s.neural.trainer.train(x, real_value) - s.neural.net.forward(x) + var real_value = my_data[i + s.neural.neuralDepth] + var x = new convnetjs.Vol(5, 1, s.neural.neuralDepth, 0) + + for (var k = 0; k < s.neural.neuralDepth; k++) { + x.set(0,0,k,data[k].open) + x.set(1,0,k,data[k].close) + x.set(2,0,k,data[k].high) + x.set(3,0,k,data[k].low) + x.set(4,0,k,data[k].volume) + } + + s.neural.trainer.train(x, [real_value.open, real_value.close, real_value.high, real_value.low, real_value.volume]) } } } var predict = function(data) { - var x = new convnetjs.Vol(data) + var x = new convnetjs.Vol(5, 1, s.neural.neuralDepth, 0) + + for (var k = 0; k < s.neural.neuralDepth; k++) { + x.set(0,0,k,data[k].open) + x.set(1,0,k,data[k].close) + x.set(2,0,k,data[k].high) + x.set(3,0,k,data[k].low) + x.set(4,0,k,data[k].volume) + } + var predicted_value = s.neural.net.forward(x) - return predicted_value.w[0] + return predicted_value.w[1] // close value - x.set(1,0,k,data[k].close) } learn() var item = tlp.reverse() From 9dae83d39cd5be8873e58c01dc2b58de236481b0 Mon Sep 17 00:00:00 2001 From: "greenkeeper[bot]" Date: Mon, 23 Apr 2018 11:45:54 +0200 Subject: [PATCH 71/74] fix(package): update style-loader to version 0.21.0 (#1555) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d12823b597..f98c842c47 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "semver": "^5.4.1", "simple-xmpp": "^1.3.0", "stats-lite": "2.1.0", - "style-loader": "^0.20.1", + "style-loader": "^0.21.0", "superagent": "^3.8.2", "talib": "^1.0.4", "timebucket": "^0.4.0", From dd7ae309172af764766735a1a6ef3800b4c1bea6 Mon Sep 17 00:00:00 2001 From: LoneWolf345 Date: Mon, 23 Apr 2018 04:47:16 -0500 Subject: [PATCH 72/74] [Strategy] Ehlers mama (#1539) * [Strategy] Ichimoku Score * Add Ichimoku readme * Initial commit * remove accidental file * remove Readme * fixed Phenotypes, changed report, updated helpers * forgot to hit save --- extensions/strategies/ehlers_mama/strategy.js | 7 +- lib/helpers.js | 65 ++++++++++++++++--- 2 files changed, 61 insertions(+), 11 deletions(-) diff --git a/extensions/strategies/ehlers_mama/strategy.js b/extensions/strategies/ehlers_mama/strategy.js index a8d0fff77d..cf0e2c8ea6 100644 --- a/extensions/strategies/ehlers_mama/strategy.js +++ b/extensions/strategies/ehlers_mama/strategy.js @@ -114,6 +114,7 @@ module.exports = { s.mama.fama.unshift(.5 * alpha * s.mama.mama[0] + (1 - .5 * alpha) * nz(s.mama.fama[0])) s.period.mama = s.mama.mama[0] + if (s.options.debug) {console.log('s.mama.mama: ' + s.mama.mama[0])} s.period.fama = s.mama.fama[0] if (s.mama.src.length > 7) @@ -139,11 +140,16 @@ module.exports = { onReport: function(s) { var cols = [] let color = 'cyan' + let FamaMamaDelta = (s.period.mama - s.period.fama) / s.period.mama * 100 + if (s.period.fama < s.period.mama) { color = 'green' } else if (s.period.fama > s.period.mama) { color = 'red' } + + cols.push(z(10, '[' + n(FamaMamaDelta).format('#00.##') + '%]', '')[color]) + cols.push(z(10, 'M[' + n(s.period.mama).format('###.0') + ']', '')[color]) cols.push(z(10, ' F[' + n(s.period.fama).format('###.0') + ']', '')[color]) @@ -151,7 +157,6 @@ module.exports = { }, phenotypes: { - //General Options period_length: Phenotypes.RangePeriod(5, 240, 'm'), min_periods: Phenotypes.Range(10, 10), diff --git a/lib/helpers.js b/lib/helpers.js index e4f49c4107..f712a573be 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -1,10 +1,10 @@ //Basic Usage // let crossover = require('../../../lib/helpers').crossover, -//or -//const tv = require('../../../lib/helpers') -//... -//s.period.hl2 = tv.hl2(s.period) +// or +// const tv = require('../../../lib/helpers') +// ... +// s.period.hl2 = tv.hl2(s.period) module.exports = { crossover: function(s, key1, key2) { @@ -28,12 +28,57 @@ module.exports = { ohlc4: function(period) { return (period.open + period.high + period.low + period.close) / 4 }, - HAohlc4: function(s) { - let HAclose = (s.period.open + s.period.high + s.period.low + s.period.close) / 4, - HAopen = (s.lookback[0].open + s.lookback[0].close) /2, - HAhigh = Math.max(s.period.high, HAopen, HAclose), - HAlow = Math.max(s.period.low, HAopen, HAclose) - return (HAclose + HAopen + HAhigh + HAlow) / 4 + HAhlc3: function(period, lookback) { + /* + xClose = (Open+High+Low+Close)/4 + xOpen = [xOpen(Previous Bar) + xClose(Previous Bar)]/2 + xHigh = Max(High, xOpen, xClose) + xLow = Min(Low, xOpen, xClose) + */ + let haClose = (period.open + period.high + period.low + period.close) / 4, + haClosePrev = (lookback.open + lookback.high + lookback.low + lookback.close) / 4, + haOpen = (period.haOpen ? period.haOpen : period.open + haClosePrev) / 2, + haHigh = Math.max(period.high, haOpen, haClose), + haLow = Math.min(period.low, haOpen, haClose) + // save haOpen + period.haOpen = haOpen + return (haClose + haHigh + haLow) / 3 + }, + HAohlc4: function(period, lookback) { + /* + xClose = (Open+High+Low+Close)/4 + xOpen = [xOpen(Previous Bar) + xClose(Previous Bar)]/2 + xHigh = Max(High, xOpen, xClose) + xLow = Min(Low, xOpen, xClose) + */ + let haClose = (period.open + period.high + period.low + period.close) / 4, + haClosePrev = (lookback.open + lookback.high + lookback.low + lookback.close) / 4, + haOpen = (period.haOpen ? period.haOpen : period.open + haClosePrev) / 2, + haHigh = Math.max(period.high, haOpen, haClose), + haLow = Math.min(period.low, haOpen, haClose) + // save haOpen + period.haOpen = haOpen + return (haClose + haOpen + haHigh + haLow) / 4 + }, + // sample usage: let adjusted_lbks = s.lookback.map((period, i) => tv.src(period, s.options.src, s.lookback[i+1])) + src: function(src, period, lookback) { + if (!period) + throw 'helpers src(). period undefined' + + if (!src || src === 'close') { + return period.close + } else if (src === 'hl2') { + return module.exports.hl2(period) + } else if (src === 'hlc3') { + return module.exports.hlc3(period) + } else if (src === 'ohlc4') { + return module.exports.ohlc4(period) + } else if (src === 'HAhlc3') { + return module.exports.HAhlc3(period, lookback) + } else if (src === 'HAohlc4') { + return module.exports.HAohlc4(period, lookback) + } else + throw src + ' not supported' }, adjust_by_pct: function(pct, n) { return n * (pct / 100 + 1) From fcb1a9dd8b988e51945712c37dab4db601c6d72d Mon Sep 17 00:00:00 2001 From: travisstaloch Date: Mon, 23 Apr 2018 03:00:57 -0700 Subject: [PATCH 73/74] Pull request - ehlers fisher transform strategy (#1554) * add docker mount for forex_analytics models (#1369) * bump gdax-node version and change phenotypes.create intfactor * Ehlers fisher transform strategy by Travis * move cleanup below buy/sell logic * remove unnecessary RangeFactor call * Update helpers.js --- extensions/strategies/ehlers_ft/strategy.js | 164 + lib/helpers.js | 16 +- package-lock.json | 3147 ++++++------------- package.json | 56 +- update.bat | 5 + 5 files changed, 1137 insertions(+), 2251 deletions(-) create mode 100644 extensions/strategies/ehlers_ft/strategy.js create mode 100644 update.bat diff --git a/extensions/strategies/ehlers_ft/strategy.js b/extensions/strategies/ehlers_ft/strategy.js new file mode 100644 index 0000000000..b154c7d385 --- /dev/null +++ b/extensions/strategies/ehlers_ft/strategy.js @@ -0,0 +1,164 @@ +/* + +Author: Travis + +Adapted from: https://www.tradingview.com/script/Q0eQz7ll-Fisher-Transform-Indicator-by-Ehlers-Strategy/ + +Description: Market prices do not have a Gaussian probability density function +as many traders think. Their probability curve is not bell-shaped. +But trader can create a nearly Gaussian PDF for prices by normalizing +them or creating a normalized indicator such as the relative strength +index and applying the Fisher transform . Such a transformed output +creates the peak swings as relatively rare events. +Fisher transform formula is: y = 0.5 * ln ((1+x)/(1-x)) +The sharp turning points of these peak swings clearly and unambiguously +identify price reversals in a timely manner. + +Author Notes: +pos = 1 indicates the fisher transform value for the period was ABOVE the previous period +pos = -1 indicates the fisher transform value for the period was BELOW the previous period +pos_length = 1 does default behavior from the original tradingview strategy. +If pos_length > 1, make sure pos_length number of previous periods have opposite pos values. + +Sample sim command: +zenbot sim gdax.LTC-USD --strategy ehlers_ft --period_length 15m --days 3 --order_type maker --fish_pct_change 0 --length 10 --pos_length 1 --src HAohlc4 --min_periods 20 + +If you have found this strategy useful and would like to show your appreciation, please consider donating +ETH, BTC, or LTC to the developer, Travis. +ETH: 0xdA963A127BeCB08227583d11f912F400D5347060 +BTC: 3KKHdBJpEGxghxGazoE4X7ihyr2q6nHUvW +LTC: MSePEwGJF8W4wvGCbJBqMtatwdBGYhT8FM + +Please direct feedback concerning this strategy to the zenbot strategies discord channel @Travis: +https://discordapp.com/channels/316120967200112642/383023593942155274 + +*/ + +const z = require('zero-fill'), + n = require('numbro'), + Phenotypes = require('../../../lib/phenotype'), + tv = require('../../../lib/helpers') + +module.exports = { + name: 'ehlers_fisher_transform', + description: '', + + getOptions: function() { + this.option('period_length', 'period length, same as --period', String, '30m') + this.option('fish_pct_change', 'percent change of fisher transform for reversal', Number, 0) + this.option('length', 'number of past periods to use including current', Number, 10) + this.option('src', 'use period.close if not defined. can be hl2, hlc3, ohlc4, HAhlc3, HAohlc4', String, 'hl2') + this.option('pos_length', 'check this number of previous periods have opposing pos value', Number, 1) + }, + + calculate: function() {}, + + onPeriod: function(s, cb) { + // console.log('') + if (!s.eft) { + s.eft = { + n1: [], + fish: [], + pos: [], + } + s.eft_max_elements = Math.max(s.options.pos_length, 3) + } + + s.period.src = tv.src(s.options.src, s.period, s.lookback[0]) + + let lbks = s.lookback.slice(0, s.options.length - 1).map(p => p.src), + maxH = Math.max(s.period.src, ...lbks), + minL = Math.min(s.period.src, ...lbks) + + s.eft.n1.unshift(0.33 * 2 * ((s.period.src - minL) / (maxH - minL) - 0.5) + 0.67 * tv.nz(s.eft.n1[0])) + + let n2 = tv.iff(s.eft.n1[0] > 0.99, 0.999, tv.iff(s.eft.n1[0] < -0.99, -0.999, s.eft.n1[0])) + + s.eft.fish.unshift(0.5 * Math.log((1 + n2) / (1 - n2)) + 0.5 * tv.nz(s.eft.fish[0])) + + s.eft.pos.unshift( + tv.iff(s.eft.fish[0] > tv.nz(s.eft.fish[1] * (1 + s.options.fish_pct_change / 100)), 1, + tv.iff(s.eft.fish[0] < tv.nz(s.eft.fish[1] * (1 - s.options.fish_pct_change / 100)), -1, tv.nz(s.eft.pos[0], 0)))) + + if (!s.in_preroll) { + if (s.options.pos_length === 1) { + if (s.eft.pos[0] === 1) { + s.signal = 'buy' + } else if (s.eft.pos[0] === -1) { + s.signal = 'sell' + } else { + s.signal = null + } + } else { + + let pos = s.eft.pos.slice(1, s.options.pos_length + 1), + posUp = s.eft.pos[0] === -1 && pos.every(pos => pos === 1), + posDn = s.eft.pos[0] === 1 && pos.every(pos => pos === -1) + + if (posUp) { + s.signal = 'buy' + } else if (posDn) { + s.signal = 'sell' + } else + s.signal = null + } + } + + // cleanup + if (s.eft.pos.length > s.eft_max_elements) + Object.keys(s.eft).forEach(k => { + s.eft[k].pop() + }) + + cb() + }, + + onReport: function(s) { + var cols = [] + cols.push(z(10, 'F[' + n(s.eft.fish[0]).format('#.000') + ']', '')) + cols.push(z(10, ' P[' + n(s.eft.pos[0]).format('##') + ']', '')) + return cols + }, + + phenotypes: { + + //General Options + period_length: Phenotypes.RangePeriod(5, 300, 'm'), + min_periods: Phenotypes.Range(10, 40), + markdown_buy_pct: Phenotypes.RangeFloat(0, 10), + markup_sell_pct: Phenotypes.RangeFloat(0, 10), + order_type: Phenotypes.ListOption(['maker', 'taker']), + sell_stop_pct: Phenotypes.Range0(1, 50), + buy_stop_pct: Phenotypes.Range0(1, 50), + profit_stop_enable_pct: Phenotypes.Range(1, 20), + profit_stop_pct: Phenotypes.Range(1, 10), + + //Strategy Specific + length: Phenotypes.Range(1, 30), + fish_pct_change: Phenotypes.Range(-25, 75), + pos_length: Phenotypes.Range(1, 6), + src: Phenotypes.ListOption(['close', 'hl2', 'hlc3', 'ohlc4', 'HAhlc3', 'HAohlc4']) + } +} + +/* + +// Original pinescript +// From https://www.tradingview.com/script/Q0eQz7ll-Fisher-Transform-Indicator-by-Ehlers-Strategy/ + +study(title="Fisher Transform Indicator by Ehlers Strategy", shorttitle="Fisher Transform Indicator by Ehlers") +Length = input(10, minval=1) +xHL2 = hl2 +xMaxH = highest(xHL2, Length) +xMinL = lowest(xHL2,Length) +nValue1 = 0.33 * 2 * ((xHL2 - xMinL) / (xMaxH - xMinL) - 0.5) + 0.67 * nz(nValue1[1]) +nValue2 = iff(nValue1 > .99, .999, + iff(nValue1 < -.99, -.999, nValue1)) +nFish = 0.5 * log((1 + nValue2) / (1 - nValue2)) + 0.5 * nz(nFish[1]) +pos = iff(nFish > nz(nFish[1]), 1, + iff(nFish < nz(nFish[1]), -1, nz(pos[1], 0))) +barcolor(pos == -1 ? red: pos == 1 ? green : blue ) +plot(nFish, color=green, title="Fisher") +plot(nz(nFish[1]), color=red, title="Trigger") + +*/ \ No newline at end of file diff --git a/lib/helpers.js b/lib/helpers.js index f712a573be..1e1feb2783 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -13,11 +13,17 @@ module.exports = { crossunder: function(s, key1, key2) { return s.period[key1] < s.period[key2] && s.lookback[0][key1] >= s.lookback[0][key2] }, + crossoverVal: function(p1val1, p1val2, p2val1, p2val2) { + return p1val1 > p1val2 && p2val1 <= p2val2 + }, + crossunderVal: function(p1val1, p1val2, p2val1, p2val2) { + return p1val1 < p1val2 && p2val1 >= p2val2 + }, nz: function(src, val = 0) { - return isNaN(src) ? val : src + return typeof src != 'number' || isNaN(src) ? val : src }, iff: function(v, r, r2) { - return v ? r : r2 + return v != undefined && v ? r : r2 }, hl2: function(period) { return (period.high + period.low) / 2 @@ -36,7 +42,8 @@ module.exports = { xLow = Min(Low, xOpen, xClose) */ let haClose = (period.open + period.high + period.low + period.close) / 4, - haClosePrev = (lookback.open + lookback.high + lookback.low + lookback.close) / 4, + haClosePeriod = lookback != undefined ? lookback : period, + haClosePrev = (haClosePeriod.open + haClosePeriod.high + haClosePeriod.low + haClosePeriod.close) / 4, haOpen = (period.haOpen ? period.haOpen : period.open + haClosePrev) / 2, haHigh = Math.max(period.high, haOpen, haClose), haLow = Math.min(period.low, haOpen, haClose) @@ -52,7 +59,8 @@ module.exports = { xLow = Min(Low, xOpen, xClose) */ let haClose = (period.open + period.high + period.low + period.close) / 4, - haClosePrev = (lookback.open + lookback.high + lookback.low + lookback.close) / 4, + haClosePeriod = lookback != undefined ? lookback : period, + haClosePrev = (haClosePeriod.open + haClosePeriod.high + haClosePeriod.low + haClosePeriod.close) / 4, haOpen = (period.haOpen ? period.haOpen : period.open + haClosePrev) / 2, haHigh = Math.max(period.high, haOpen, haClose), haLow = Math.min(period.low, haOpen, haClose) diff --git a/package-lock.json b/package-lock.json index c26cd93d01..4e4cb4f729 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,17 +5,17 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz", - "integrity": "sha512-eVXQSbu/RimU6OKcK2/gDJVTFcxXJI4sHbIqw2mhwMZeQ2as/8AhS9DGkEDoHMBBNJZ5B0US63lF56x+KDcxiA==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", "requires": { - "@babel/highlight": "7.0.0-beta.40" + "@babel/highlight": "7.0.0-beta.44" } }, "@babel/highlight": { - "version": "7.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.40.tgz", - "integrity": "sha512-mOhhTrzieV6VO7odgzFGFapiwRK0ei8RZRhfzHhb6cpX3QM8XXuCLXWjN8qBB7JReDdUR80V3LFfFrGUYevhNg==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", "requires": { "chalk": "2.3.2", "esutils": "2.0.2", @@ -61,35 +61,35 @@ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" }, "@slack/client": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@slack/client/-/client-4.0.0.tgz", - "integrity": "sha512-Je7iFG10xmOGtndLIMLOuoP61xD3plikWxtAmUUI6AxgZk97I+8xxRIODZzgLqpYt2dyJctHL/50hx1jewYIkQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@slack/client/-/client-4.1.0.tgz", + "integrity": "sha512-lcQRQA3/edBlbhkSdBDsn6BW/ynoymCG8yz8kvo96JiLGKGzODxLZJ/FHRs9SMVsqNGsA+sWZcWChUV60gvvRw==", "requires": { "@types/delay": "2.0.1", "@types/form-data": "2.2.1", - "@types/got": "7.1.7", + "@types/got": "7.1.8", "@types/is-stream": "1.1.0", "@types/loglevel": "1.5.3", + "@types/node": "9.4.7", "@types/p-cancelable": "0.3.0", "@types/p-queue": "2.3.1", "@types/p-retry": "1.0.1", "@types/retry": "0.10.2", "@types/url-join": "0.8.2", - "@types/ws": "4.0.1", + "@types/ws": "4.0.2", "delay": "2.0.0", "eventemitter3": "3.0.1", "finity": "0.5.4", "form-data": "2.3.2", - "got": "8.2.0", + "got": "8.3.0", "is-stream": "1.1.0", "loglevel": "1.6.1", "object.entries": "1.0.4", "object.getownpropertydescriptors": "2.0.3", "object.values": "1.0.4", "p-cancelable": "0.3.0", - "p-queue": "2.3.1", + "p-queue": "2.4.0", "p-retry": "1.0.0", - "pjson": "1.0.9", "retry": "0.10.1", "url-join": "4.0.0", "ws": "4.1.0" @@ -106,6 +106,11 @@ } } }, + "@types/caseless": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz", + "integrity": "sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A==" + }, "@types/delay": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/delay/-/delay-2.0.1.tgz", @@ -125,9 +130,9 @@ } }, "@types/got": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@types/got/-/got-7.1.7.tgz", - "integrity": "sha512-quhlNPGIkaRyO4PnEuP9pEkUPktjfrvPESENGOhiEzgOUNbunETSQXY5bkZY+Bb/J9V5p/f50Rh1eDklD4Z2FQ==", + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/got/-/got-7.1.8.tgz", + "integrity": "sha512-QxcSkx9PjHH7uqbzqKTKOAjGbayyo+dECnnqM3BBMC0WjYAqx0e6Qi9AFR4jluvx91e7qzgz4aGka7AhCTHYRw==", "requires": { "@types/node": "9.4.7" } @@ -168,20 +173,36 @@ "@types/retry": "0.10.2" } }, + "@types/request": { + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.47.0.tgz", + "integrity": "sha512-/KXM5oev+nNCLIgBjkwbk8VqxmzI56woD4VUxn95O+YeQ8hJzcSmIZ1IN3WexiqBb6srzDo2bdMbsXxgXNkz5Q==", + "requires": { + "@types/caseless": "0.12.1", + "@types/form-data": "2.2.1", + "@types/node": "9.4.7", + "@types/tough-cookie": "2.3.2" + } + }, "@types/retry": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.10.2.tgz", "integrity": "sha512-LqJkY4VQ7S09XhI7kA3ON71AxauROhSv74639VsNXC9ish4IWHnIi98if+nP1MxQV3RMPqXSCYgpPsDHjlg9UQ==" }, + "@types/tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha512-vOVmaruQG5EatOU/jM6yU2uCp3Lz6mK1P5Ztu4iJjfM4SVHU9XYktPUQtKlIXuahqXHdEyUarMrBEwg5Cwu+bA==" + }, "@types/url-join": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-0.8.2.tgz", "integrity": "sha1-EYHsvh2XtwNODqHjXmLobMJrQi0=" }, "@types/ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-4.0.1.tgz", - "integrity": "sha512-J56Wn8j7ovzmlrkUSPXnVRH+YXUCGoVokiB49QIjz+yq0234guOrBvF/HHrqrJjnY4p5oq+q6xAxT/7An6SeWQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-4.0.2.tgz", + "integrity": "sha512-tlDVFHCcJdNqYgjGNDPDCo4tNqhFMymIAdJCcykFbdhYr4X6vD7IlMxY0t3/k6Pfup68YNkMTpRfLKTRuKDmnQ==", "requires": { "@types/events": "1.2.0", "@types/node": "9.4.7" @@ -361,7 +382,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "micromatch": "3.1.9", + "micromatch": "3.1.10", "normalize-path": "2.1.1" }, "dependencies": { @@ -402,11 +423,6 @@ "sprintf-js": "1.0.3" } }, - "argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=" - }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -511,9 +527,9 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "ast-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", - "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==" + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", + "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==" }, "async": { "version": "2.6.0", @@ -544,9 +560,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", + "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==" }, "autoprefixer": { "version": "6.7.7", @@ -554,7 +570,7 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000813", + "caniuse-db": "1.0.30000824", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -566,7 +582,7 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000813", + "caniuse-db": "1.0.30000824", "electron-to-chromium": "1.3.36" } } @@ -1373,11 +1389,6 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, - "backoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.3.0.tgz", - "integrity": "sha1-7nx+OAk/kuRyhZ22NedlJFT8Ieo=" - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1489,11 +1500,12 @@ } }, "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "requires": { - "readable-stream": "2.3.5" + "readable-stream": "2.3.5", + "safe-buffer": "5.1.1" } }, "block-stream": { @@ -1523,7 +1535,7 @@ "content-type": "1.0.4", "debug": "2.6.9", "depd": "1.1.2", - "http-errors": "1.6.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.19", "on-finished": "2.3.0", "qs": "6.5.1", @@ -1597,9 +1609,9 @@ } }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { "buffer-xor": "1.0.3", "cipher-base": "1.0.4", @@ -1614,7 +1626,7 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", "requires": { - "browserify-aes": "1.1.1", + "browserify-aes": "1.2.0", "browserify-des": "1.0.0", "evp_bytestokey": "1.0.3" } @@ -1670,9 +1682,9 @@ } }, "bson": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.5.tgz", - "integrity": "sha512-D4SCtud6mlEb48kXdTHU31DRU0bsgOJ+4St1Dcx30uYNnf/aGc+hC9gHB/z0Eth8HYYs/hr0SFdyZViht19SwA==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", + "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ==" }, "buffer": { "version": "4.9.1", @@ -1680,10 +1692,15 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { "base64-js": "1.2.3", - "ieee754": "1.1.8", + "ieee754": "1.1.11", "isarray": "1.0.0" } }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -1719,7 +1736,7 @@ "move-concurrently": "1.0.1", "promise-inflight": "1.0.1", "rimraf": "2.6.2", - "ssri": "5.2.4", + "ssri": "5.3.0", "unique-filename": "1.1.0", "y18n": "4.0.0" }, @@ -1775,20 +1792,13 @@ "dev": true, "requires": { "callsites": "0.2.0" - }, - "dependencies": { - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - } } }, "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true }, "camelcase": { "version": "2.1.1", @@ -1810,7 +1820,7 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000813", + "caniuse-db": "1.0.30000824", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" }, @@ -1820,16 +1830,16 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000813", + "caniuse-db": "1.0.30000824", "electron-to-chromium": "1.3.36" } } } }, "caniuse-db": { - "version": "1.0.30000813", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000813.tgz", - "integrity": "sha1-4KHGA/iICteHsqNWUrJzPzKl4po=" + "version": "1.0.30000824", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000824.tgz", + "integrity": "sha1-u6P/QlKW4EyqN/5CYlkganBWVRs=" }, "caniuse-lite": { "version": "1.0.30000813", @@ -1842,9 +1852,9 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "ccxt": { - "version": "1.11.53", - "resolved": "https://registry.npmjs.org/ccxt/-/ccxt-1.11.53.tgz", - "integrity": "sha512-yiQj956pOB8o6AqqY7ie4bQ6Jnw7rckPuy86ss4GyphvXH9X3Ha7b64wQNB15LQ+TeHxBupw32eqtuPeOXIV8A==", + "version": "1.12.97", + "resolved": "https://registry.npmjs.org/ccxt/-/ccxt-1.12.97.tgz", + "integrity": "sha512-LTYtnLx60VWOeyjue/ZrIEsg4KvgcMY/UKP02hHo7L8g33fSFLOx7FvJ8F81HGxrVADEVRxWlAcriZrgFoUfVg==", "requires": { "cloudscraper": "1.4.1", "crypto-js": "3.1.9-1", @@ -1859,7 +1869,7 @@ "integrity": "sha512-vqt4NxuDJbmCHXnKr1J0viefmJfW0BAo1vqHXXcVIJcYMs6Qs9TXztvlkqanGOq09h9mVQ3Y+xj/GWOdwuvunQ==", "requires": { "debug": "3.1.0", - "moment": "2.21.0", + "moment": "2.22.0", "request": "2.83.0", "underscore": "1.8.3", "ws": "3.3.3" @@ -1908,14 +1918,13 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" }, "chokidar": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", - "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", "requires": { "anymatch": "2.0.0", "async-each": "1.0.1", "braces": "2.3.1", - "fsevents": "1.1.3", "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1944,7 +1953,7 @@ "isobject": "3.0.1", "kind-of": "6.0.2", "repeat-element": "1.1.2", - "snapdragon": "0.8.1", + "snapdragon": "0.8.2", "snapdragon-node": "2.1.1", "split-string": "3.1.0", "to-regex": "3.0.2" @@ -2183,7 +2192,7 @@ "integrity": "sha1-LR738hig54biFFQFYtS9F3/jLZc=", "dev": true, "requires": { - "colors": "1.1.2", + "colors": "1.2.1", "lodash": "3.10.1", "string-width": "1.0.2" }, @@ -2233,6 +2242,11 @@ "number-is-nan": "1.0.1" } }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -2298,9 +2312,9 @@ } }, "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, "clone-buffer": { "version": "1.0.0", @@ -2382,150 +2396,6 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "codecov": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.0.tgz", - "integrity": "sha1-wnO4xPEpRXI+jcnSWAPYk0Pl8o4=", - "requires": { - "argv": "0.0.2", - "request": "2.81.0", - "urlgrey": "0.4.4" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.16.3" - } - } - } - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -2540,7 +2410,7 @@ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "requires": { - "clone": "1.0.3", + "clone": "1.0.4", "color-convert": "1.9.1", "color-string": "0.3.0" } @@ -2577,9 +2447,9 @@ } }, "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", + "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==" }, "combined-stream": { "version": "1.0.6", @@ -2590,9 +2460,9 @@ } }, "commander": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz", - "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg==" + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" }, "commondir": { "version": "1.0.1", @@ -2615,10 +2485,11 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", "readable-stream": "2.3.5", "typedarray": "0.0.6" @@ -2652,11 +2523,6 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "content-type-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", - "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==" - }, "convert-source-map": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", @@ -2763,7 +2629,7 @@ "cipher-base": "1.0.4", "inherits": "2.0.3", "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "sha.js": "2.4.11" } }, "create-hmac": { @@ -2776,7 +2642,7 @@ "inherits": "2.0.3", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "sha.js": "2.4.11" } }, "cross-spawn": { @@ -2878,9 +2744,9 @@ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" }, "css-loader": { - "version": "0.28.10", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.10.tgz", - "integrity": "sha512-X1IJteKnW9Llmrd+lJ0f7QZHh9Arf+11S7iRcoT2+riig3BK0QaCaOtubAulMK6Itbo08W6d3l8sW21r+Jhp5Q==", + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", "requires": { "babel-code-frame": "6.26.0", "css-selector-tokenizer": "0.7.0", @@ -3023,6 +2889,16 @@ "assert-plus": "1.0.0" } }, + "data-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", + "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", + "requires": { + "abab": "1.0.4", + "whatwg-mimetype": "2.1.0", + "whatwg-url": "6.4.0" + } + }, "date-fns": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", @@ -3034,9 +2910,9 @@ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" }, "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" }, "debug": { "version": "2.6.9", @@ -3122,27 +2998,13 @@ "requires": { "globby": "5.0.0", "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1", "rimraf": "2.6.2" }, "dependencies": { - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -3230,11 +3092,6 @@ "esutils": "2.0.2" } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -3292,9 +3149,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", - "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=" + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.8.tgz", + "integrity": "sha512-QIDZL54fyV8MDcAsO91BMH1ft2qGGaHIJsJIA/+t+7uvXol1dm413fPcUgUb4k8F/9457rx4/KFE4XfDifrQxQ==" }, "electron-to-chromium": { "version": "1.3.36", @@ -3356,6 +3213,11 @@ "tapable": "1.0.0" } }, + "envinfo": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-4.4.2.tgz", + "integrity": "sha512-5rfRs+m+6pwoKRCFqpsA5+qsLngFms1aWPrxfKbrObCzQaPc3M3yPloZx+BL9UE3dK58cxw36XVQbFRSCCfGSQ==" + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -3444,27 +3306,27 @@ } }, "eslint": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.18.2.tgz", - "integrity": "sha512-qy4i3wODqKMYfz9LUI8N2qYDkHkoieTbiHpMrYUI/WbjhXJQr7lI4VngixTgaG+yHX+NBCv7nW4hA0ShbvaNKw==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { "ajv": "5.5.2", "babel-code-frame": "6.26.0", "chalk": "2.3.2", - "concat-stream": "1.6.1", + "concat-stream": "1.6.2", "cross-spawn": "5.1.0", "debug": "3.1.0", "doctrine": "2.1.0", "eslint-scope": "3.7.1", "eslint-visitor-keys": "1.0.0", "espree": "3.5.4", - "esquery": "1.0.0", + "esquery": "1.0.1", "esutils": "2.0.2", "file-entry-cache": "2.0.0", "functional-red-black-tree": "1.0.1", "glob": "7.1.2", - "globals": "11.3.0", + "globals": "11.4.0", "ignore": "3.3.7", "imurmurhash": "0.1.4", "inquirer": "3.0.6", @@ -3480,6 +3342,7 @@ "path-is-inside": "1.0.2", "pluralize": "7.0.0", "progress": "2.0.0", + "regexpp": "1.1.0", "require-uncached": "1.0.3", "semver": "5.5.0", "strip-ansi": "4.0.0", @@ -3530,9 +3393,9 @@ "dev": true }, "globals": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", - "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", "dev": true }, "has-flag": { @@ -3602,9 +3465,9 @@ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { "estraverse": "4.2.0" @@ -3701,16 +3564,16 @@ } }, "expect": { - "version": "22.4.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.0.tgz", - "integrity": "sha512-Fiy862jT3qc70hwIHwwCBNISmaqBrfWKKrtqyMJ6iwZr+6KXtcnHojZFtd63TPRvRl8EQTJ+YXYy2lK6/6u+Hw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz", + "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", "requires": { "ansi-styles": "3.2.1", - "jest-diff": "22.4.0", - "jest-get-type": "22.1.0", - "jest-matcher-utils": "22.4.0", - "jest-message-util": "22.4.0", - "jest-regex-util": "22.1.0" + "jest-diff": "22.4.3", + "jest-get-type": "22.4.3", + "jest-matcher-utils": "22.4.3", + "jest-message-util": "22.4.3", + "jest-regex-util": "22.4.3" }, "dependencies": { "ansi-styles": { @@ -3740,14 +3603,14 @@ } }, "expose-loader": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.4.tgz", - "integrity": "sha512-lweINkewAXcQtNjd7j1gO3cd8O/8lNYijsEwH4YZ+Dv3gT2Kh9/YvJov5Mdp2A75QIhgOvsSyRa/ZG3wYjNZpA==" + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz", + "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==" }, "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { "accepts": "1.3.5", "array-flatten": "1.1.1", @@ -3761,7 +3624,7 @@ "encodeurl": "1.0.2", "escape-html": "1.0.3", "etag": "1.8.1", - "finalhandler": "1.1.0", + "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "1.1.2", @@ -3772,10 +3635,10 @@ "qs": "6.5.1", "range-parser": "1.2.0", "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", + "send": "0.16.2", + "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.3.1", + "statuses": "1.4.0", "type-is": "1.6.16", "utils-merge": "1.0.1", "vary": "1.1.2" @@ -3806,9 +3669,9 @@ } }, "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "requires": { "chardet": "0.4.2", "iconv-lite": "0.4.19", @@ -3926,16 +3789,16 @@ } }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", "encodeurl": "1.0.2", "escape-html": "1.0.3", "on-finished": "2.3.0", "parseurl": "1.3.2", - "statuses": "1.3.1", + "statuses": "1.4.0", "unpipe": "1.0.0" } }, @@ -3993,14 +3856,14 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" }, "flow-parser": { - "version": "0.67.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.67.1.tgz", - "integrity": "sha1-GR/tVsz9jQl9ydSH8to7Da50WEk=" + "version": "0.69.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.69.0.tgz", + "integrity": "sha1-N4tRKNbQtVSosvFqTKPhq5ZJ8A4=" }, "flush-write-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", - "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "requires": { "inherits": "2.0.3", "readable-stream": "2.3.5" @@ -4047,12 +3910,6 @@ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, - "forex.analytics": { - "version": "github:mkmarek/forex.analytics#7bc278987700d4204e959af17de61495941d1a14", - "requires": { - "nan": "2.9.2" - } - }, "form-data": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", @@ -4100,6 +3957,14 @@ "readable-stream": "2.3.5" } }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "2.2.4" + } + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -4116,848 +3981,49 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "optional": true, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "requires": { - "nan": "2.9.2", - "node-pre-gyp": "0.6.39" + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" }, "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -4981,10 +4047,11 @@ } }, "gdax": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/gdax/-/gdax-0.6.0.tgz", - "integrity": "sha512-5KdMBa+S6F6nlz9emyLRDp6ybrg3zA7oeWvjXnP5d++sK0Pv4rBSS2zuZ/Q63fFFXXMSHo2EA95pITSCbGcRSA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/gdax/-/gdax-0.7.0.tgz", + "integrity": "sha512-lJHXlGchJVNtql8VWH+Idalehl5T5N6O9g5MUEW7IOuPtsbb7D15vgz6MOx1NgSyZe0fSIINv9s0HxujYB3sqg==", "requires": { + "@types/request": "2.47.0", "bignumber.js": "5.0.0", "bintrees": "1.0.2", "request": "2.83.0", @@ -5227,22 +4294,6 @@ } } }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - } - } - }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -5271,11 +4322,13 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" }, "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, "requires": { "array-union": "1.0.2", + "arrify": "1.0.1", "glob": "7.1.2", "object-assign": "4.1.1", "pify": "2.3.0", @@ -5285,7 +4338,8 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true } } }, @@ -5300,9 +4354,9 @@ } }, "got": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/got/-/got-8.2.0.tgz", - "integrity": "sha512-giadqJpXIwjY+ZsuWys8p2yjZGhOHiU4hiJHjS/oeCxw1u8vANQz3zPlrxW2Zw/siCXsSMI3hvzWGcnFyujyAg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.0.tgz", + "integrity": "sha512-kBNy/S2CGwrYgDSec5KTWGKUvupwkkTVAjIsVFF2shXO13xpZdFP4d4kxa//CLX2tN/rV0aYwK8vY6UKWGn2vQ==", "requires": { "@sindresorhus/is": "0.7.0", "cacheable-request": "2.1.4", @@ -5314,13 +4368,20 @@ "isurl": "1.0.0", "lowercase-keys": "1.0.0", "mimic-response": "1.0.0", - "p-cancelable": "0.3.0", + "p-cancelable": "0.4.1", "p-timeout": "2.0.1", "pify": "3.0.0", "safe-buffer": "5.1.1", "timed-out": "4.0.1", "url-parse-lax": "3.0.0", "url-to-options": "1.0.1" + }, + "dependencies": { + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" + } } }, "graceful-fs": { @@ -5533,26 +4594,14 @@ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.1", + "depd": "1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } + "setprototypeof": "1.1.0", + "statuses": "1.4.0" } }, "http-parser-js": { @@ -5600,7 +4649,7 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "requires": { - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -5627,9 +4676,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { "chalk": "2.3.2", "source-map": "0.6.1", @@ -5656,13 +4705,13 @@ "resolved": "https://registry.npmjs.org/idgen/-/idgen-2.0.2.tgz", "integrity": "sha1-ZFpO6n7bUz2UH1jt2UMVVUWPwqg=", "requires": { - "commander": "2.15.0" + "commander": "2.15.1" } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" }, "iferr": { "version": "0.1.5", @@ -5675,6 +4724,23 @@ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", "dev": true }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "requires": { + "minimatch": "3.0.4" + } + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, "imports-loader": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.8.0.tgz", @@ -5747,7 +4813,7 @@ "chalk": "1.1.3", "cli-cursor": "2.1.0", "cli-width": "2.2.0", - "external-editor": "2.1.0", + "external-editor": "2.2.0", "figures": "2.0.0", "lodash": "4.17.5", "mute-stream": "0.0.7", @@ -6019,9 +5085,9 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { "is-path-inside": "1.0.1" @@ -6209,21 +5275,21 @@ "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" }, "jest-config": { - "version": "22.4.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.2.tgz", - "integrity": "sha512-oG31qYO73/3vj/Q8aM2RgzmHndTkz9nRk8ISybfuJqqbf0RW7OUjHVOZPLOUiwLWtz52Yq2HkjIblsyhbA7vrg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.3.tgz", + "integrity": "sha512-KSg3EOToCgkX+lIvenKY7J8s426h6ahXxaUFJxvGoEk0562Z6inWj1TnKoGycTASwiLD+6kSYFALcjdosq9KIQ==", "requires": { "chalk": "2.3.2", "glob": "7.1.2", - "jest-environment-jsdom": "22.4.1", - "jest-environment-node": "22.4.1", - "jest-get-type": "22.1.0", - "jest-jasmine2": "22.4.2", - "jest-regex-util": "22.1.0", - "jest-resolve": "22.4.2", - "jest-util": "22.4.1", - "jest-validate": "22.4.2", - "pretty-format": "22.4.0" + "jest-environment-jsdom": "22.4.3", + "jest-environment-node": "22.4.3", + "jest-get-type": "22.4.3", + "jest-jasmine2": "22.4.3", + "jest-regex-util": "22.4.3", + "jest-resolve": "22.4.3", + "jest-util": "22.4.3", + "jest-validate": "22.4.3", + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { @@ -6260,14 +5326,14 @@ } }, "jest-diff": { - "version": "22.4.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.0.tgz", - "integrity": "sha512-+/t20WmnkOkB8MOaGaPziI8zWKxquMvYw4Ub+wOzi7AUhmpFXz43buWSxVoZo4J5RnCozpGbX3/FssjJ5KV9Nw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", "requires": { "chalk": "2.3.2", "diff": "3.5.0", - "jest-get-type": "22.1.0", - "pretty-format": "22.4.0" + "jest-get-type": "22.4.3", + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { @@ -6304,45 +5370,45 @@ } }, "jest-environment-jsdom": { - "version": "22.4.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.1.tgz", - "integrity": "sha512-x/JzAoH+dWPBnIMv5OQKiIR0TYf6UvbRjsIuDZ11yDFXkHKGJZg6jNnLAsokAm3cq9kUa2hH5BPUC9XU4n1ELQ==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", + "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", "requires": { - "jest-mock": "22.2.0", - "jest-util": "22.4.1", - "jsdom": "11.6.2" + "jest-mock": "22.4.3", + "jest-util": "22.4.3", + "jsdom": "11.7.0" } }, "jest-environment-node": { - "version": "22.4.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.1.tgz", - "integrity": "sha512-wj9+zzfRgnUbm5VwFOCGgG1QmbucUyrjPKBKUJdLW8K5Ss5zrNc1k+v6feZhFg6sS3ZGnjgtIyklaxEARxu+LQ==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", + "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", "requires": { - "jest-mock": "22.2.0", - "jest-util": "22.4.1" + "jest-mock": "22.4.3", + "jest-util": "22.4.3" } }, "jest-get-type": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.1.0.tgz", - "integrity": "sha512-nD97IVOlNP6fjIN5i7j5XRH+hFsHL7VlauBbzRvueaaUe70uohrkz7pL/N8lx/IAwZRTJ//wOdVgh85OgM7g3w==" + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==" }, "jest-jasmine2": { - "version": "22.4.2", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.2.tgz", - "integrity": "sha512-KZaIHpXQ0AIlvQJFCU0uoXxtz5GG47X14r9upMe7VXE55UazoMZBFnQb9TX2HoYX2/AxJYnjHuvwKVCFqOrEtw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz", + "integrity": "sha512-yZCPCJUcEY6R5KJB/VReo1AYI2b+5Ky+C+JA1v34jndJsRcLpU4IZX4rFJn7yDTtdNbO/nNqg+3SDIPNH2ecnw==", "requires": { "chalk": "2.3.2", "co": "4.6.0", - "expect": "22.4.0", + "expect": "22.4.3", "graceful-fs": "4.1.11", "is-generator-fn": "1.0.0", - "jest-diff": "22.4.0", - "jest-matcher-utils": "22.4.0", - "jest-message-util": "22.4.0", - "jest-snapshot": "22.4.0", - "jest-util": "22.4.1", - "source-map-support": "0.5.3" + "jest-diff": "22.4.3", + "jest-matcher-utils": "22.4.3", + "jest-message-util": "22.4.3", + "jest-snapshot": "22.4.3", + "jest-util": "22.4.3", + "source-map-support": "0.5.4" }, "dependencies": { "ansi-styles": { @@ -6374,9 +5440,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz", - "integrity": "sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz", + "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", "requires": { "source-map": "0.6.1" } @@ -6392,13 +5458,13 @@ } }, "jest-matcher-utils": { - "version": "22.4.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.0.tgz", - "integrity": "sha512-03m3issxUXpWMwDYTfmL8hRNewUB0yCRTeXPm+eq058rZxLHD9f5NtSSO98CWHqe4UyISIxd9Ao9iDVjHWd2qg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", + "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", "requires": { "chalk": "2.3.2", - "jest-get-type": "22.1.0", - "pretty-format": "22.4.0" + "jest-get-type": "22.4.3", + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { @@ -6435,11 +5501,11 @@ } }, "jest-message-util": { - "version": "22.4.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.0.tgz", - "integrity": "sha512-eyCJB0T3hrlpFF2FqQoIB093OulP+1qvATQmD3IOgJgMGqPL6eYw8TbC5P/VCWPqKhGL51xvjIIhow5eZ2wHFw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", + "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", "requires": { - "@babel/code-frame": "7.0.0-beta.40", + "@babel/code-frame": "7.0.0-beta.44", "chalk": "2.3.2", "micromatch": "2.3.11", "slash": "1.0.0", @@ -6521,19 +5587,19 @@ } }, "jest-mock": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.2.0.tgz", - "integrity": "sha512-eOfoUYLOB/JlxChOFkh/bzpWGqUXb9I+oOpkprHHs9L7nUNfL8Rk28h1ycWrqzWCEQ/jZBg/xIv7VdQkfAkOhw==" + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", + "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==" }, "jest-regex-util": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.1.0.tgz", - "integrity": "sha512-on0LqVS6Xeh69sw3d1RukVnur+lVOl3zkmb0Q54FHj9wHoq6dbtWqb3TSlnVUyx36hqjJhjgs/QLqs07Bzu72Q==" + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", + "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==" }, "jest-resolve": { - "version": "22.4.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.2.tgz", - "integrity": "sha512-P1hSfcc2HJYT5t+WPu/11OfFMa7m8pBb2Gf2vm6W9OVs7YTXQ5RCC3nDqaYZQaTqxEM1ZZaTcQGcE6U2xMOsqQ==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", + "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", "requires": { "browser-resolve": "1.11.2", "chalk": "2.3.2" @@ -6573,16 +5639,16 @@ } }, "jest-snapshot": { - "version": "22.4.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.0.tgz", - "integrity": "sha512-6Zz4F9G1Nbr93kfm5h3A2+OkE+WGpgJlskYE4iSNN2uYfoTL5b9W6aB9Orpx+ueReHyqmy7HET7Z3EmYlL3hKw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", + "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", "requires": { "chalk": "2.3.2", - "jest-diff": "22.4.0", - "jest-matcher-utils": "22.4.0", + "jest-diff": "22.4.3", + "jest-matcher-utils": "22.4.3", "mkdirp": "0.5.1", "natural-compare": "1.4.0", - "pretty-format": "22.4.0" + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { @@ -6619,15 +5685,15 @@ } }, "jest-util": { - "version": "22.4.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.1.tgz", - "integrity": "sha512-9ySBdJY2qVWpg0OvZbGcFXE2NgwccpZVj384E9bx7brKFc7l5anpqah15mseWcz7FLDk7/N+LyYgqFme7Rez2Q==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", + "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", "requires": { "callsites": "2.0.0", "chalk": "2.3.2", "graceful-fs": "4.1.11", "is-ci": "1.1.0", - "jest-message-util": "22.4.0", + "jest-message-util": "22.4.3", "mkdirp": "0.5.1", "source-map": "0.6.1" }, @@ -6640,6 +5706,11 @@ "color-convert": "1.9.1" } }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", @@ -6671,15 +5742,15 @@ } }, "jest-validate": { - "version": "22.4.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.2.tgz", - "integrity": "sha512-TLOgc/EULFBjMCAqZp5OdVvjxV16DZpfthd/UyPzM6lRmgWluohNVemAdnL3JvugU1s2Q2npcIqtbOtiPjaZ0A==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.3.tgz", + "integrity": "sha512-CfFM18W3GSP/xgmA4UouIx0ljdtfD2mjeBC6c89Gg17E44D4tQhAcTrZmf9djvipwU30kSTnk6CzcxdCCeSXfA==", "requires": { "chalk": "2.3.2", - "jest-config": "22.4.2", - "jest-get-type": "22.1.0", + "jest-config": "22.4.3", + "jest-get-type": "22.4.3", "leven": "2.1.0", - "pretty-format": "22.4.0" + "pretty-format": "22.4.3" }, "dependencies": { "ansi-styles": { @@ -6746,36 +5817,31 @@ "optional": true }, "jscodeshift": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", - "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.0.tgz", + "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", "requires": { - "async": "1.5.2", "babel-plugin-transform-flow-strip-types": "6.22.0", "babel-preset-es2015": "6.24.1", "babel-preset-stage-1": "6.24.1", "babel-register": "6.26.0", - "babylon": "6.18.0", - "colors": "1.1.2", - "flow-parser": "0.67.1", + "babylon": "7.0.0-beta.44", + "colors": "1.2.1", + "flow-parser": "0.69.0", "lodash": "4.17.5", "micromatch": "2.3.11", + "neo-async": "2.5.0", "node-dir": "0.1.8", "nomnom": "1.8.1", - "recast": "0.12.9", + "recast": "0.14.7", "temp": "0.8.3", "write-file-atomic": "1.3.4" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==" }, "is-extglob": { "version": "1.0.0", @@ -6817,44 +5883,26 @@ "requires": { "remove-trailing-separator": "1.1.0" } - }, - "recast": { - "version": "0.12.9", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", - "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", - "requires": { - "ast-types": "0.10.1", - "core-js": "2.5.3", - "esprima": "4.0.0", - "private": "0.1.8", - "source-map": "0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, "jsdom": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.6.2.tgz", - "integrity": "sha512-pAeZhpbSlUp5yQcS6cBQJwkbzmv4tWFaYxHbFVSxzXefqjvtRA851Z5N2P+TguVG9YeUDcgb8pdeVQRJh0XR3Q==", + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.7.0.tgz", + "integrity": "sha512-9NzSc4Iz4gN9p4uoPbBUzro21QdgL32swaWIaWS8eEVQ2I69fRJAy/MKyvlEIk0V7HtKgfMbbOKyTZUrzR2Hsw==", "requires": { "abab": "1.0.4", "acorn": "5.5.3", "acorn-globals": "4.1.0", "array-equal": "1.0.0", - "browser-process-hrtime": "0.1.2", - "content-type-parser": "1.0.2", "cssom": "0.3.2", "cssstyle": "0.2.37", + "data-urls": "1.0.0", "domexception": "1.0.1", "escodegen": "1.9.1", "html-encoding-sniffer": "1.0.2", "left-pad": "1.2.0", - "nwmatcher": "1.4.3", + "nwmatcher": "1.4.4", "parse5": "4.0.0", "pn": "1.1.0", "request": "2.83.0", @@ -6865,6 +5913,7 @@ "w3c-hr-time": "1.0.1", "webidl-conversions": "4.0.2", "whatwg-encoding": "1.0.3", + "whatwg-mimetype": "2.1.0", "whatwg-url": "6.4.0", "ws": "4.1.0", "xml-name-validator": "3.0.0" @@ -6892,9 +5941,9 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, "json-parse-better-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", - "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "json-schema": { "version": "0.2.3", @@ -6906,14 +5955,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } - }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -6926,13 +5967,13 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json2csv": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.0.1.tgz", - "integrity": "sha512-pMVLgfRrYULd3Y8XhTUWPX+VJIpVHlfNr29w0HakkF73+vGdJ+LYCWP53wGQa/weF2qNEWbcT8TvLGS60/MsQw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.0.2.tgz", + "integrity": "sha512-0YkqHRfAiKtSRu+CldnY9O/tQdnSex4wWVt98lioZDodNHQmc3eIoMg3RxTVNBcfrEfz3p1BYHeVDteOIQQ7Mw==", "dev": true, "requires": { "cli-table2": "0.2.0", - "commander": "2.15.0", + "commander": "2.15.1", "jsonparse": "1.3.1", "lodash.clonedeep": "4.5.0", "lodash.get": "4.4.2", @@ -6949,11 +5990,6 @@ "resolved": "https://registry.npmjs.org/jsonic/-/jsonic-0.3.0.tgz", "integrity": "sha1-tUXalfVDkuWLPdoF9fLjd6bJ0b8=" }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -7050,14 +6086,6 @@ } } }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "requires": { - "set-getter": "0.1.0" - } - }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -7086,30 +6114,31 @@ } }, "lint-staged": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.0.0.tgz", - "integrity": "sha512-6Z89we28Qy1Ez7ZxO8yYfPKqzdxkSjnURq1d3RS2gKkZrA135xN+ptF3EWHrcHyBMmgA20vA7dGCQGj+OMS22g==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.0.4.tgz", + "integrity": "sha512-9w4vwNJ1A7o4mwKhz/5B0VateS24KJjeU1ppO2UOBdbTg/iiypF4U6F3yckEms0Fbf5uvfLiPVp9pG2lBbVA6g==", "requires": { "app-root-path": "2.0.1", "chalk": "2.3.2", - "commander": "2.15.0", + "commander": "2.15.1", "cosmiconfig": "4.0.0", "debug": "3.1.0", "dedent": "0.7.0", "execa": "0.9.0", "find-parent-dir": "0.3.0", "is-glob": "4.0.0", - "jest-validate": "22.4.2", + "jest-validate": "22.4.3", "listr": "0.13.0", "lodash": "4.17.5", "log-symbols": "2.2.0", - "micromatch": "3.1.9", + "micromatch": "3.1.10", "npm-which": "3.0.1", "p-map": "1.2.0", "path-is-inside": "1.0.2", "pify": "3.0.0", "please-upgrade-node": "3.0.1", - "staged-git-files": "1.1.0", + "staged-git-files": "1.1.1", + "string-argv": "0.0.2", "stringify-object": "3.2.2" }, "dependencies": { @@ -7173,7 +6202,7 @@ "log-update": "1.0.2", "ora": "0.2.3", "p-map": "1.2.0", - "rxjs": "5.5.6", + "rxjs": "5.5.8", "stream-to-observable": "0.2.0", "strip-ansi": "3.0.1" }, @@ -7627,9 +6656,9 @@ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=" }, "mathjs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-4.0.0.tgz", - "integrity": "sha512-8MiwG5kGDrN5VhvdoFZpezEmVeY+Zi1Sq1Piy79xnCXZ+Fac3/2fAAgwKmYTcj/Zx0thnTs7KTPhX+f8boow1g==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-4.0.1.tgz", + "integrity": "sha512-XqQF+755gF9jjdno0X3V/1SzHJIE784jSo9fhu6DlYtcjo14vj/4jbiRV8mc28uqVP8hVk2JXBGvwTWDaSaSfw==", "requires": { "complex.js": "2.0.4", "decimal.js": "9.0.1", @@ -7638,7 +6667,7 @@ "javascript-natural-sort": "0.7.1", "seed-random": "2.2.0", "tiny-emitter": "2.0.2", - "typed-function": "1.0.1" + "typed-function": "1.0.3" } }, "md5.js": { @@ -7680,7 +6709,7 @@ "requires": { "commondir": "1.0.1", "deep-extend": "0.4.2", - "ejs": "2.5.7", + "ejs": "2.5.8", "glob": "7.1.2", "globby": "6.1.0", "mkdirp": "0.5.1", @@ -7700,6 +6729,23 @@ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", @@ -7762,9 +6808,9 @@ "integrity": "sha1-oannMhcBT01AGqH+Vp6NdReB1yY=" }, "micromatch": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", - "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { "arr-diff": "4.0.0", "array-unique": "0.3.2", @@ -7777,7 +6823,7 @@ "nanomatch": "1.2.9", "object.pick": "1.3.0", "regex-not": "1.0.2", - "snapdragon": "0.8.1", + "snapdragon": "0.8.2", "to-regex": "3.0.2" }, "dependencies": { @@ -7804,7 +6850,7 @@ "isobject": "3.0.1", "kind-of": "6.0.2", "repeat-element": "1.1.2", - "snapdragon": "0.8.1", + "snapdragon": "0.8.2", "snapdragon-node": "2.1.1", "split-string": "3.1.0", "to-regex": "3.0.2" @@ -7838,7 +6884,7 @@ "extend-shallow": "2.0.1", "posix-character-classes": "0.1.1", "regex-not": "1.0.2", - "snapdragon": "0.8.1", + "snapdragon": "0.8.2", "to-regex": "3.0.2" }, "dependencies": { @@ -7886,7 +6932,7 @@ "extend-shallow": "2.0.1", "fragment-cache": "0.2.1", "regex-not": "1.0.2", - "snapdragon": "0.8.1", + "snapdragon": "0.8.2", "to-regex": "3.0.2" }, "dependencies": { @@ -8005,9 +7051,9 @@ } }, "mime": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz", - "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.2.tgz", + "integrity": "sha512-A7PDg4s48MkqFEcYg2b069m3DXOEq7hx+9q9rIFrSSYfzsh35GX+LOVMQ8Au0ko7d8bSQCIAuzkjp0vCtwENlQ==" }, "mime-db": { "version": "1.33.0", @@ -8032,14 +7078,6 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "0.1.1" - } - }, "minctest": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/minctest/-/minctest-0.0.2.tgz", @@ -8068,15 +7106,39 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", + "requires": { + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + } + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "requires": { + "minipass": "2.2.4" + } + }, "mississippi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "requires": { - "concat-stream": "1.6.1", + "concat-stream": "1.6.2", "duplexify": "3.5.4", "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.2", + "flush-write-stream": "1.0.3", "from2": "2.3.0", "parallel-transform": "1.1.0", "pump": "2.0.1", @@ -8136,32 +7198,43 @@ } }, "mock-require": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-3.0.1.tgz", - "integrity": "sha1-1e/YNMDaDOxzx7Z3Y9gWfTLYUd4=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-3.0.2.tgz", + "integrity": "sha512-aD/Y1ZFHqw5pHg3HVQ50dLbfaAAcytS6sqLuhP51Dk3TSPdFb2VkSAa3mjrHifLIlGAtwQHJHINafAyqAne7vA==", "requires": { - "get-caller-file": "1.0.2" + "get-caller-file": "1.0.2", + "normalize-path": "2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } + } } }, "moment": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz", - "integrity": "sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ==" + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.0.tgz", + "integrity": "sha512-1muXCh8jb1N/gHRbn9VDUBr0GYb8A/aVcHlII9QSB68a50spqEVLIGN6KVmCOnSvJrUhC0edGgKU5ofnGXdYdg==" }, "mongodb": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.4.tgz", - "integrity": "sha512-90YIIs7A4ko4kCGafxxXj3foexCAlJBC0YLwwIKgSLoE7Vni2IqUMz6HSsZ3zbXOfR1KWtxfnc0RyAMAY/ViLg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.5.tgz", + "integrity": "sha512-8ioTyyc8tkNwZCTDa1FPWvmpJFfvE484DnugC8KpVrw4AKAE03OOAlORl2yYTNtz3TX4Ab7FRo00vzgexB/67A==", "requires": { - "mongodb-core": "3.0.4" + "mongodb-core": "3.0.5" } }, "mongodb-core": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.4.tgz", - "integrity": "sha512-OTH267FjfwBdEufSnrgd+u8HuLWRuQ6p8DR0XirPl2BdlLEMh4XwjJf1RTlruILp5p2m1w8dDC8rCxibC3W8qQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.5.tgz", + "integrity": "sha512-4A1nx/xAU5d/NPICjiyzVxzNrIdJQQsYRe3xQkV1O638t+fHHfAOLK+SQagqGnu1m0aeSxb1ixp/P0FGSQWIGA==", "requires": { - "bson": "1.0.5", + "bson": "1.0.6", "require_optional": "1.0.1" } }, @@ -8224,7 +7297,7 @@ "kind-of": "6.0.2", "object.pick": "1.3.0", "regex-not": "1.0.2", - "snapdragon": "0.8.1", + "snapdragon": "0.8.2", "to-regex": "3.0.2" }, "dependencies": { @@ -8250,6 +7323,16 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.19", + "sax": "1.2.4" + } + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -8344,7 +7427,7 @@ "querystring-es3": "0.2.1", "readable-stream": "2.3.5", "stream-browserify": "2.0.1", - "stream-http": "2.8.0", + "stream-http": "2.8.1", "string_decoder": "1.0.3", "timers-browserify": "2.0.6", "tty-browserify": "0.0.0", @@ -8354,108 +7437,22 @@ } }, "node-pre-gyp": { - "version": "0.6.39", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz", - "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.0.tgz", + "integrity": "sha1-vdTDr6ybGx6/8Kn/M2KFnrZ4G7g=", "requires": { "detect-libc": "1.0.3", - "hawk": "3.1.3", "mkdirp": "0.5.1", + "needle": "2.2.0", "nopt": "4.0.1", + "npm-packlist": "1.1.10", "npmlog": "4.1.2", - "rc": "1.2.5", - "request": "2.81.0", + "rc": "1.2.6", "rimraf": "2.6.2", "semver": "5.5.0", - "tar": "2.2.1", - "tar-pack": "3.4.1" + "tar": "4.4.1" }, "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, "nopt": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", @@ -8465,52 +7462,24 @@ "osenv": "0.1.5" } }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", + "tar": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "yallist": "3.0.2" } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.16.3" - } + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" } } }, @@ -8531,9 +7500,9 @@ } }, "node-sass": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz", - "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.8.3.tgz", + "integrity": "sha512-tfFWhUsCk/Y19zarDcPo5xpj+IW3qCfOjVdHtYeG6S1CKbQOh1zqylnQK6cV3z9k80yxAnFX9Y+a9+XysDhhfg==", "requires": { "async-foreach": "0.1.3", "chalk": "1.1.3", @@ -8547,7 +7516,7 @@ "lodash.mergewith": "4.6.1", "meow": "3.7.0", "mkdirp": "0.5.1", - "nan": "2.9.2", + "nan": "2.10.0", "node-gyp": "3.6.2", "npmlog": "4.1.2", "request": "2.79.0", @@ -8612,7 +7581,7 @@ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "requires": { "chalk": "1.1.3", - "commander": "2.15.0", + "commander": "2.15.1", "is-my-json-valid": "2.17.2", "pinkie-promise": "2.0.1" } @@ -8643,6 +7612,11 @@ "sshpk": "1.13.1" } }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + }, "qs": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", @@ -8696,7 +7670,7 @@ "integrity": "sha512-+EeM+fe3Xt81KIPqN3L6s6eK+FK4QaqyDcwCwkY/jqsleERXwwjGlVbf4lJCOZ0uJuF5PfqTmvVNtua7AZfBXg==", "requires": { "array.prototype.findindex": "2.0.2", - "bl": "1.2.1", + "bl": "1.2.2", "bluebird": "3.5.1", "debug": "3.1.0", "depd": "1.1.2", @@ -8764,8 +7738,7 @@ "debug": "2.6.9", "inherits": "2.0.3", "lodash.assign": "4.2.0", - "node-xmpp-tls-connect": "1.0.1", - "reconnect-core": "https://github.com/dodo/reconnect-core/tarball/merged" + "node-xmpp-tls-connect": "1.0.1" } }, "node-xmpp-tls-connect": { @@ -8849,10 +7822,24 @@ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "requires": { "prepend-http": "2.0.0", - "query-string": "5.1.0", + "query-string": "5.1.1", "sort-keys": "2.0.0" } }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==" + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + } + }, "npm-path": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", @@ -8874,7 +7861,7 @@ "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", "requires": { - "commander": "2.15.0", + "commander": "2.15.1", "npm-path": "2.0.4", "which": "1.3.0" } @@ -8905,13 +7892,10 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "numbro": { - "version": "github:highvelocityspace/numbro#65a801c05c40496e5701458c0d4e780060e9a742" - }, "nwmatcher": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", - "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==" + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==" }, "oauth-sign": { "version": "0.8.2", @@ -9184,11 +8168,6 @@ "lcid": "1.0.0" } }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=" - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -9258,9 +8237,9 @@ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" }, "p-queue": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.3.1.tgz", - "integrity": "sha512-MJGD2eVNHhtCsGLBDsfNzhBDlWxBFb5BvVXhJFbmlXH76Llo792ylwqEYJguLo+BnxZpos/Qw9dq0voyQRD3pg==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.0.tgz", + "integrity": "sha512-ZXisZuQjnDcRd4/Np7lNrE2f3qq2Cy8Ikg8T2gbLjQZbRnSVqOr9cQUMbyVJJuIDUJYWMOZ+Q/5fJbYJtMbZ2A==" }, "p-reduce": { "version": "1.0.0", @@ -9309,7 +8288,7 @@ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "requires": { "asn1.js": "4.10.1", - "browserify-aes": "1.1.1", + "browserify-aes": "1.2.0", "create-hash": "1.1.3", "evp_bytestokey": "1.0.3", "pbkdf2": "3.0.14" @@ -9347,7 +8326,7 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.1" + "json-parse-better-errors": "1.0.2" } }, "parse-passwd": { @@ -9440,7 +8419,7 @@ "create-hmac": "1.1.6", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "sha.js": "2.4.11" } }, "performance-now": { @@ -9466,11 +8445,6 @@ "pinkie": "2.0.4" } }, - "pjson": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/pjson/-/pjson-1.0.9.tgz", - "integrity": "sha512-4hRJH3YzkUpOlShRzhyxAmThSNnAaIlWZCAb27hd0pVUAXNUAHAO7XZbsPPvsCYwBFEScTmCCL6DGE8NyZ8BdQ==" - }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -9667,9 +8641,9 @@ } }, "popper.js": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.12.9.tgz", - "integrity": "sha1-DfvC3/lsRRuzMu3Pz6r1ZtMx1bM=" + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.3.tgz", + "integrity": "sha1-FDj5jQRqz3tNeM1QK/QYrGTU8JU=" }, "posix-character-classes": { "version": "0.1.1", @@ -9893,12 +8867,12 @@ } }, "postcss-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.1.tgz", - "integrity": "sha512-f0J/DWE/hyO9/LH0WHpXkny/ZZ238sSaG3p1SRBtVZnFWUtD7GXIEgHoBg8cnAeRbmEvUxHQptY46zWfwNYj/w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.3.tgz", + "integrity": "sha512-RuBcNE8rjCkIB0IsbmkGFRmQJTeQJfCI88E0VTarPNTvaNSv9OFv1DvTwgtAN/qlzyiELsmmmtX/tEzKp/cdug==", "requires": { "loader-utils": "1.1.0", - "postcss": "6.0.19", + "postcss": "6.0.21", "postcss-load-config": "1.2.0", "schema-utils": "0.4.5" }, @@ -9927,9 +8901,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { "chalk": "2.3.2", "source-map": "0.6.1", @@ -9986,7 +8960,7 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000813", + "caniuse-db": "1.0.30000824", "electron-to-chromium": "1.3.36" } } @@ -10043,7 +9017,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "requires": { - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -10070,9 +9044,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { "chalk": "2.3.2", "source-map": "0.6.1", @@ -10100,7 +9074,7 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -10127,9 +9101,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { "chalk": "2.3.2", "source-map": "0.6.1", @@ -10157,7 +9131,7 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -10184,9 +9158,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { "chalk": "2.3.2", "source-map": "0.6.1", @@ -10214,7 +9188,7 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "requires": { "icss-replace-symbols": "1.1.0", - "postcss": "6.0.19" + "postcss": "6.0.21" }, "dependencies": { "ansi-styles": { @@ -10241,9 +9215,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", + "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { "chalk": "2.3.2", "source-map": "0.6.1", @@ -10427,9 +9401,9 @@ "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" }, "pretty-format": { - "version": "22.4.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.0.tgz", - "integrity": "sha512-pvCxP2iODIIk9adXlo4S3GRj0BrJiil68kByAa1PrgG97c1tClh9dLMgp3Z6cHFZrclaABt0UH8PIhwHuFLqYA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", "requires": { "ansi-regex": "3.0.0", "ansi-styles": "3.2.1" @@ -10588,9 +9562,9 @@ } }, "query-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.0.tgz", - "integrity": "sha512-F3DkxxlY0AqD/rwe4YAwjRE2HjOkKW7TxsuteyrS/Jbwrxw887PqYBL4sWUJ9D/V1hmFns0SCD6FDyvlwo9RCQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "requires": { "decode-uri-component": "0.2.0", "object-assign": "4.1.1", @@ -10680,12 +9654,35 @@ "http-errors": "1.6.2", "iconv-lite": "0.4.19", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } } }, "rc": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz", - "integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", + "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", "requires": { "deep-extend": "0.4.2", "ini": "1.3.5", @@ -10766,21 +9763,16 @@ } }, "recast": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.4.tgz", - "integrity": "sha512-b6fRXujYf8mTIyljymL3rglje1LfuGKdD44CuKs6o1B18MmZ+mEEpD5gsaxGVABZHyPvYwPLcyBTA/SvxtiyFg==", + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", + "integrity": "sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==", "requires": { - "ast-types": "0.11.2", + "ast-types": "0.11.3", "esprima": "4.0.0", "private": "0.1.8", "source-map": "0.6.1" }, "dependencies": { - "ast-types": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.2.tgz", - "integrity": "sha512-aL+pcOQ+6dpWd0xrUe+Obo2CgdkFvsntkXEmzZKqEN4cR0PStF+1MBuc4V+YZsv4Q36luvyjG7F4lc+wH2bmag==" - }, "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", @@ -10801,13 +9793,6 @@ "resolve": "1.1.7" } }, - "reconnect-core": { - "version": "https://github.com/dodo/reconnect-core/tarball/merged", - "integrity": "sha512-wZK/v5ZaNaSUs2Wnwh2YSX/Jqv6bQHKNEwojdzV11tByKziR9ikOssf5tvUhx+8/oCBz6AakOFAjZuqPoiRHJQ==", - "requires": { - "backoff": "2.3.0" - } - }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -10901,6 +9886,12 @@ "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.9.tgz", "integrity": "sha512-VncXxOF6uFlYog5prG2j+e2UGJeam5MfNiJnB/qEgo4KTnMm2XrELCg4rNZ6IlaEUZnGlb8aB6lXowCRQtTkkA==" }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", @@ -11055,15 +10046,7 @@ "dev": true, "requires": { "caller-path": "0.1.0", - "resolve-from": "1.0.1" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } + "resolve-from": "1.0.1" } }, "require_optional": { @@ -11073,6 +10056,13 @@ "requires": { "resolve-from": "2.0.0", "semver": "5.5.0" + }, + "dependencies": { + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + } } }, "resolve": { @@ -11105,9 +10095,10 @@ } }, "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true }, "resolve-url": { "version": "0.2.1", @@ -11231,9 +10222,9 @@ } }, "run-parallel-limit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.0.3.tgz", - "integrity": "sha1-bDkwzHwLR9Na50IBCfZgqt4kAeM=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.0.4.tgz", + "integrity": "sha512-zpNZCoIA+x0fWw2tiD15lrGecycMbao/n4uBER53pcW5GB9TUEu4pZxd5CTgXLBh2MwI0E4nhRv7xymfo592vA==", "dev": true }, "run-queue": { @@ -11263,9 +10254,9 @@ } }, "rxjs": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", - "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "version": "5.5.8", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.8.tgz", + "integrity": "sha512-Bz7qou7VAIoGiglJZbzbXa4vpX5BmTTN2Dj/se6+SwADtw4SihqBIiEa7VmTXJ8pynvq0iFr5Gx9VLyye1rIxQ==", "requires": { "symbol-observable": "1.0.1" }, @@ -11427,9 +10418,9 @@ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", "depd": "1.1.2", @@ -11438,12 +10429,12 @@ "escape-html": "1.0.3", "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", "on-finished": "2.3.0", "range-parser": "1.2.0", - "statuses": "1.3.1" + "statuses": "1.4.0" }, "dependencies": { "mime": { @@ -11459,14 +10450,14 @@ "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=" }, "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { "encodeurl": "1.0.2", "escape-html": "1.0.3", "parseurl": "1.3.2", - "send": "0.16.1" + "send": "0.16.2" } }, "set-blocking": { @@ -11474,14 +10465,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", - "requires": { - "to-object-path": "0.3.0" - } - }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", @@ -11519,9 +10502,9 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "sha.js": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", - "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.1" @@ -11561,7 +10544,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", - "dev": true, "requires": { "glob": "7.1.2", "interpret": "1.1.0", @@ -11601,9 +10583,13 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } }, "slide": { "version": "1.1.6", @@ -11611,9 +10597,9 @@ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" }, "snapdragon": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", - "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { "base": "0.11.2", "debug": "2.6.9", @@ -11622,7 +10608,7 @@ "map-cache": "0.2.2", "source-map": "0.5.7", "source-map-resolve": "0.5.1", - "use": "2.0.2" + "use": "3.1.0" }, "dependencies": { "define-property": { @@ -11758,7 +10744,7 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "requires": { - "atob": "2.0.3", + "atob": "2.1.0", "decode-uri-component": "0.2.0", "resolve-url": "0.2.1", "source-map-url": "0.4.0", @@ -11778,15 +10764,6 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "requires": { - "concat-stream": "1.6.1", - "os-shim": "0.1.3" - } - }, "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", @@ -11844,9 +10821,9 @@ } }, "ssri": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.2.4.tgz", - "integrity": "sha512-UnEAgMZa15973iH7cUi0AHjJn1ACDIkaMyZILoqwN6yzt+4P81I8tBc5Hl+qwi5auMplZtPQsHrPBR5vJLcQtQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "requires": { "safe-buffer": "5.1.1" } @@ -11862,9 +10839,9 @@ "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=" }, "staged-git-files": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.0.tgz", - "integrity": "sha1-GpuxMcGIVgECPHqt3T1UwiFCxSY=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.1.tgz", + "integrity": "sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==" }, "static-extend": { "version": "0.1.2", @@ -11945,9 +10922,9 @@ } }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, "stdout-stream": { "version": "1.4.0", @@ -11981,9 +10958,9 @@ } }, "stream-http": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", - "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", @@ -12010,6 +10987,11 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, + "string-argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", + "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=" + }, "string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", @@ -12103,9 +11085,9 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "style-loader": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.20.2.tgz", - "integrity": "sha512-FrLMGaOLVhS5pvoez3eJyc0ktchT1inEZziBSjBq1hHQBK3GFkF57Qd825DcrUhjaAWQk70MKrIl5bfjadR/Dg==", + "version": "0.20.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.20.3.tgz", + "integrity": "sha512-2I7AVP73MvK33U7B9TKlYZAqdROyMXDYSMvHLX43qy3GCOaJNiV6i0v/sv9idWIaQ42Yn2dNv79Q5mKXbKhAZg==", "requires": { "loader-utils": "1.1.0", "schema-utils": "0.4.5" @@ -12160,6 +11142,13 @@ "mkdirp": "0.5.1", "sax": "1.2.4", "whet.extend": "0.9.9" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + } } }, "symbol-observable": { @@ -12218,15 +11207,6 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0" - } - }, "supports-color": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", @@ -12261,21 +11241,6 @@ "inherits": "2.0.3" } }, - "tar-pack": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz", - "integrity": "sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==", - "requires": { - "debug": "2.6.9", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.3.5", - "rimraf": "2.6.2", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, "temp": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", @@ -12321,7 +11286,7 @@ "resolved": "https://registry.npmjs.org/timebucket/-/timebucket-0.4.0.tgz", "integrity": "sha1-2H9xqMhrjqq95zX3qcSzJc6ZhXw=", "requires": { - "moment": "2.21.0" + "moment": "2.22.0" } }, "timed-out": { @@ -12464,14 +11429,14 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, "tulind": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/tulind/-/tulind-0.8.9.tgz", - "integrity": "sha1-1wnbFUPLWufnVMXUuedYjMHS5xA=", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/tulind/-/tulind-0.8.10.tgz", + "integrity": "sha1-/VB5TJxfGOCp870CJT6/JLu93DE=", "requires": { "bindings": "1.3.0", "minctest": "0.0.2", "nan": "2.9.2", - "node-pre-gyp": "0.6.39" + "node-pre-gyp": "0.9.0" } }, "tunnel-agent": { @@ -12506,9 +11471,9 @@ } }, "typed-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-1.0.1.tgz", - "integrity": "sha512-Ie5d+HS39FU+sKj5nzcSV9pucMOtHsomaZPaxX9CWnxeqcdBkGl0cGKx1xd5v+b1czUd1iVa/RMZbsN8wnfGPg==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-1.0.3.tgz", + "integrity": "sha512-sVC/1pm70oELDFMdYtFXMFqyawenLoaDiAXA3QvOAwKF/WvFNTSJN23cY2lFNL8iP0kh3T0PPKewrboO8XUVGQ==" }, "typedarray": { "version": "0.0.6", @@ -12545,9 +11510,9 @@ } }, "uglifyjs-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-CG/NvzXfemUAm5Y4Guh5eEaJYHtkG7kKNpXEJHp9QpxsFVB5/qKvYWoMaq4sa99ccZ0hM3MK8vQV9XPZB4357A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz", + "integrity": "sha512-z0IbjpW8b3O/OVn+TTZN4pI29RN1zktFBXLIzzfZ+++cUtZ1ERSlLWgpE/5OERuEUs1ijVQnpYAkSlpoVmQmSQ==", "requires": { "cacache": "10.0.4", "find-cache-dir": "1.0.0", @@ -12566,11 +11531,6 @@ } } }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" - }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", @@ -12703,6 +11663,21 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==" }, + "uri-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", + "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + } + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -12735,7 +11710,7 @@ "integrity": "sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==", "requires": { "loader-utils": "1.1.0", - "mime": "2.2.0", + "mime": "2.2.2", "schema-utils": "0.4.5" } }, @@ -12752,84 +11727,18 @@ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" }, - "urlgrey": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", - "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=" - }, "use": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", - "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2" + "kind-of": "6.0.2" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -12902,7 +11811,7 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "requires": { - "clone": "1.0.3", + "clone": "1.0.4", "clone-stats": "0.0.1", "replace-ext": "0.0.1" } @@ -12948,7 +11857,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", "requires": { - "chokidar": "2.0.2", + "chokidar": "2.0.3", "graceful-fs": "4.1.11", "neo-async": "2.5.0" } @@ -12964,13 +11873,13 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.1.1.tgz", - "integrity": "sha512-PwxKH81yLjbPyBSZvPj/Ji9pT99XOGFA0t6zipoOKOMNRZ+09N39J5Uzcx3rYKnsHgKwDnfGkvzac4MF2Taknw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.5.0.tgz", + "integrity": "sha512-6GrZsvQJnG7o7mjbfjp6s5CyMfdopjt1A/X8LcYwceis9ySjqBX6Lusso2wNZ06utHj2ZvfL6L3f7hfgVeJP6g==", "requires": { "acorn": "5.5.3", "acorn-dynamic-import": "3.0.0", - "ajv": "6.2.1", + "ajv": "6.4.0", "ajv-keywords": "3.1.0", "chrome-trace-event": "0.1.2", "enhanced-resolve": "4.0.0", @@ -12978,25 +11887,26 @@ "loader-runner": "2.3.0", "loader-utils": "1.1.0", "memory-fs": "0.4.1", - "micromatch": "3.1.9", + "micromatch": "3.1.10", "mkdirp": "0.5.1", "neo-async": "2.5.0", "node-libs-browser": "2.1.0", "schema-utils": "0.4.5", "tapable": "1.0.0", - "uglifyjs-webpack-plugin": "1.2.2", + "uglifyjs-webpack-plugin": "1.2.4", "watchpack": "1.5.0", "webpack-sources": "1.1.0" }, "dependencies": { "ajv": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", - "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "requires": { "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" } } } @@ -13007,25 +11917,122 @@ "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", "requires": { "jscodeshift": "0.4.1" + }, + "dependencies": { + "ast-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", + "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==" + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "jscodeshift": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", + "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", + "requires": { + "async": "1.5.2", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-1": "6.24.1", + "babel-register": "6.26.0", + "babylon": "6.18.0", + "colors": "1.2.1", + "flow-parser": "0.69.0", + "lodash": "4.17.5", + "micromatch": "2.3.11", + "node-dir": "0.1.8", + "nomnom": "1.8.1", + "recast": "0.12.9", + "temp": "0.8.3", + "write-file-atomic": "1.3.4" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "recast": { + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", + "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", + "requires": { + "ast-types": "0.10.1", + "core-js": "2.5.3", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "webpack-cli": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.10.tgz", - "integrity": "sha512-PQWEOoXkhjBV4svPuESghZRc80VvDoSSRPaLiInWifDlRJgoPWpiLCFXyMLQTTaug7ApLrSEW7BcuwwY6DEv5w==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.14.tgz", + "integrity": "sha512-gRoWaxSi2JWiYsn1QgOTb6ENwIeSvN1YExZ+kJ0STsTZK7bWPElW+BBBv1UnTbvcPC3v7E17mK8hlFX8DOYSGw==", "requires": { "chalk": "2.3.2", - "codecov": "3.0.0", "cross-spawn": "6.0.5", "diff": "3.5.0", "enhanced-resolve": "4.0.0", + "envinfo": "4.4.2", "glob-all": "3.1.0", - "global": "4.3.2", "global-modules": "1.0.0", - "got": "8.2.0", - "inquirer": "5.1.0", + "got": "8.3.0", + "import-local": "1.0.0", + "inquirer": "5.2.0", "interpret": "1.1.0", - "jscodeshift": "0.4.1", + "jscodeshift": "0.5.0", "listr": "0.13.0", "loader-utils": "1.1.0", "lodash": "4.17.5", @@ -13034,21 +12041,18 @@ "p-each-series": "1.0.0", "p-lazy": "1.0.0", "prettier": "1.11.1", - "recast": "0.14.4", - "resolve-cwd": "2.0.0", "supports-color": "5.3.0", - "uglifyjs-webpack-plugin": "1.2.2", "v8-compile-cache": "1.1.2", "webpack-addons": "1.1.5", - "yargs": "9.0.1", - "yeoman-environment": "2.0.5", - "yeoman-generator": "github:ev1stensberg/generator#9e24fa31c85302ca1145ae34fc68b4f133251ca0" + "yargs": "11.1.0", + "yeoman-environment": "2.0.6", + "yeoman-generator": "2.0.3" }, "dependencies": { "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" }, "ansi-regex": { "version": "3.0.0", @@ -13063,11 +12067,6 @@ "color-convert": "1.9.1" } }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", @@ -13089,31 +12088,13 @@ "shebang-command": "1.2.0", "which": "1.3.0" } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" } }, "has-flag": { @@ -13122,84 +12103,61 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "inquirer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.1.0.tgz", - "integrity": "sha512-kn7N70US1MSZHZHSGJLiZ7iCwwncc7b0gc68YtlX29OjI3Mp0tSVV+snVXpZ1G+ONS3Ac9zd1m6hve2ibLDYfA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", "requires": { - "ansi-escapes": "3.0.0", + "ansi-escapes": "3.1.0", "chalk": "2.3.2", "cli-cursor": "2.1.0", "cli-width": "2.2.0", - "external-editor": "2.1.0", + "external-editor": "2.2.0", "figures": "2.0.0", "lodash": "4.17.5", "mute-stream": "0.0.7", "run-async": "2.3.0", - "rxjs": "5.5.6", + "rxjs": "5.5.8", "string-width": "2.1.1", "strip-ansi": "4.0.0", "through": "2.3.8" } }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "requires": { "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", + "parse-json": "4.0.0", + "pify": "3.0.0", "strip-bom": "3.0.0" } }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { - "pify": "2.3.0" + "pify": "3.0.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "requires": { - "load-json-file": "2.0.0", + "load-json-file": "4.0.0", "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "path-type": "3.0.0" } }, "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "requires": { "find-up": "2.1.0", - "read-pkg": "2.0.0" + "read-pkg": "3.0.0" } }, "strip-ansi": { @@ -13222,39 +12180,6 @@ "requires": { "has-flag": "3.0.0" } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "requires": { - "camelcase": "4.1.0" - } } } }, @@ -13312,6 +12237,11 @@ "iconv-lite": "0.4.19" } }, + "whatwg-mimetype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", + "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==" + }, "whatwg-url": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz", @@ -13461,9 +12391,9 @@ } }, "ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.0.0.tgz", - "integrity": "sha512-XXG4S0b771C68AeTHebBsJJBZMguxj7Em+D657RViuj6ppRd3tfuOhIK8eGwZGNb76C8MjQfCTfH2NN50rJN4w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.1.1.tgz", + "integrity": "sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw==", "requires": { "async-limiter": "1.0.0" } @@ -13507,10 +12437,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", - "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", - "dev": true, + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "requires": { "cliui": "4.0.0", "decamelize": "1.2.0", @@ -13529,20 +12458,17 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, "cliui": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", - "dev": true, "requires": { "string-width": "2.1.1", "strip-ansi": "4.0.0", @@ -13553,7 +12479,6 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, "requires": { "cross-spawn": "5.1.0", "get-stream": "3.0.0", @@ -13568,7 +12493,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, "requires": { "execa": "0.7.0", "lcid": "1.0.0", @@ -13579,7 +12503,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "3.0.0" } @@ -13587,14 +12510,12 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "yargs-parser": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "dev": true, "requires": { "camelcase": "4.1.0" } @@ -13617,9 +12538,9 @@ } }, "yeoman-environment": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.5.tgz", - "integrity": "sha512-6/W7/B54OPHJXob0n0+pmkwFsirC8cokuQkPSmT/D0lCcSxkKtg/BA6ZnjUBIwjuGqmw3DTrT4en++htaUju5g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", + "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", "requires": { "chalk": "2.3.2", "debug": "3.1.0", @@ -13637,9 +12558,9 @@ }, "dependencies": { "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" }, "ansi-regex": { "version": "3.0.0", @@ -13672,6 +12593,18 @@ "ms": "2.0.0" } }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -13682,11 +12615,11 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "requires": { - "ansi-escapes": "3.0.0", + "ansi-escapes": "3.1.0", "chalk": "2.3.2", "cli-cursor": "2.1.0", "cli-width": "2.2.0", - "external-editor": "2.1.0", + "external-editor": "2.2.0", "figures": "2.0.0", "lodash": "4.17.5", "mute-stream": "0.0.7", @@ -13698,6 +12631,11 @@ "through": "2.3.8" } }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -13717,261 +12655,32 @@ } }, "yeoman-generator": { - "version": "github:ev1stensberg/generator#9e24fa31c85302ca1145ae34fc68b4f133251ca0", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.3.tgz", + "integrity": "sha512-mODmrZ26a94djmGZZuIiomSGlN4wULdou29ZwcySupb2e9FdvoCl7Ps2FqHFjEHio3kOl/iBeaNqrnx3C3NwWg==", "requires": { "async": "2.6.0", - "chalk": "1.1.3", "cli-table": "0.3.1", "cross-spawn": "5.1.0", "dargs": "5.1.0", - "dateformat": "2.2.0", - "debug": "2.6.9", + "dateformat": "3.0.3", "detect-conflict": "1.0.1", "error": "7.0.2", "find-up": "2.1.0", "github-username": "4.1.0", "istextorbinary": "2.2.1", "lodash": "4.17.5", + "make-dir": "1.2.0", "mem-fs-editor": "3.0.2", "minimist": "1.2.0", - "mkdirp": "0.5.1", "pretty-bytes": "4.0.2", "read-chunk": "2.1.0", - "read-pkg-up": "2.0.0", "rimraf": "2.6.2", "run-async": "2.3.0", - "shelljs": "0.7.8", + "shelljs": "0.8.1", "text-table": "0.2.0", "through2": "2.0.3", - "yeoman-environment": "1.6.6" - }, - "dependencies": { - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "1.0.1" - } - }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=" - }, - "external-editor": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", - "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", - "requires": { - "extend": "3.0.1", - "spawn-sync": "1.0.15", - "tmp": "0.0.29" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "6.0.4", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", - "requires": { - "ansi-escapes": "1.4.0", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "external-editor": "1.1.1", - "figures": "1.7.0", - "lodash": "4.17.5", - "mute-stream": "0.0.6", - "pinkie-promise": "2.0.1", - "run-async": "2.3.0", - "rx": "4.1.0", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "requires": { - "chalk": "1.1.3" - } - }, - "mute-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=" - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "2.3.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "untildify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", - "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", - "requires": { - "os-homedir": "1.0.2" - } - }, - "yeoman-environment": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-1.6.6.tgz", - "integrity": "sha1-zYX6Z9FWBg5EDXgH1+988NLR1nE=", - "requires": { - "chalk": "1.1.3", - "debug": "2.6.9", - "diff": "2.2.3", - "escape-string-regexp": "1.0.5", - "globby": "4.1.0", - "grouped-queue": "0.3.3", - "inquirer": "1.2.3", - "lodash": "4.17.5", - "log-symbols": "1.0.2", - "mem-fs": "1.1.3", - "text-table": "0.2.0", - "untildify": "2.1.0" - } - } + "yeoman-environment": "2.0.6" } }, "zero-fill": { diff --git a/package.json b/package.json index f98c842c47..e562f5dda9 100644 --- a/package.json +++ b/package.json @@ -27,31 +27,31 @@ ] }, "dependencies": { - "@slack/client": "^4.0.0", + "@slack/client": "^4.1.0", "async": "^2.5.0", "babel-core": "^6.26.0", "babel-loader": "^7.1.2", "babel-preset-env": "^1.6.1", "bitfinex-api-node": "^1.2.0", "bitstamp": "^1.0.4", - "bl": "^1.2.1", + "bl": "^1.2.2", "bollinger-bands": "^3.0.1", "bootstrap": "^4.0.0-beta.2", - "ccxt": "^1.10.1216", + "ccxt": "^1.12.97", "cexio-api-node": "^1.0.8", "cliff": "^0.1.10", - "colors": "^1.1.2", - "commander": "^2.9.0", + "colors": "^1.2.1", + "commander": "^2.15.1", "convnetjs": "0.3.0", "counterup": "^1.0.2", - "css-loader": "^0.28.7", + "css-loader": "^0.28.11", "echarts": "^4.0.2", - "ejs": "^2.5.7", + "ejs": "^2.5.8", "exports-loader": "^0.7.0", - "expose-loader": "^0.7.4", - "express": "^4.16.2", + "expose-loader": "^0.7.5", + "express": "^4.16.3", "file-loader": "^1.1.6", - "forex.analytics": "mkmarek/forex.analytics#7bc278987700d4204e959af17de61495941d1a14", + "forex.analytics": "github:mkmarek/forex.analytics#7bc278987700d4204e959af17de61495941d1a14", "gdax": "^0.7.0", "gemini-api": "^2.0.4", "glob": "^7.1.1", @@ -64,26 +64,26 @@ "jquery": "^3.2.1", "keltnerchannel": "^1.4.2", "kraken-api": "^1.0.0", - "lint-staged": "^7.0.0", + "lint-staged": "^7.0.4", "lodash": "^4.17.4", "lolex": "^2.3.2", - "mathjs": "^4.0.0", + "mathjs": "^4.0.1", "micro-request": "^666.0.10", - "mime": "^2.2.0", + "mime": "^2.2.2", "minimist": "^1.2.0", - "mock-require": "^3.0.1", - "moment": "^2.18.1", - "mongodb": "^3.0.1", + "mock-require": "^3.0.2", + "moment": "^2.22.0", + "mongodb": "^3.0.5", "node-bittrex-api": "^0.8.2", "node-prowl": "^0.1.7", - "node-sass": "^4.7.2", + "node-sass": "^4.8.3", "node-telegram-bot-api": "^0.30.0", "number-abbreviate": "^2.0.0", - "numbro": "highvelocityspace/numbro", + "numbro": "github:highvelocityspace/numbro", "path": "^0.12.7", "poloniex.js": "0.0.8", - "popper.js": "^1.12.9", - "postcss-loader": "^2.0.9", + "popper.js": "^1.14.3", + "postcss-loader": "^2.1.3", "progress": "^2.0.0", "pushbullet": "2.2.0", "pusher-js": "^4.1.0", @@ -100,24 +100,24 @@ "talib": "^1.0.4", "timebucket": "^0.4.0", "trend": "0.3.0", - "tulind": "^0.8.9", + "tulind": "^0.8.10", "url-loader": "^1.0.1", "uuid": "^3.1.0", "waypoints": "^4.0.1", - "webpack": "^4.0.0", - "webpack-cli": "^2.0.9", + "webpack": "^4.5.0", + "webpack-cli": "^2.0.14", "wexnz": "^0.1.3", - "ws": "^5.0.0", + "ws": "^5.1.1", "zero-fill": "^2.2.3" }, "devDependencies": { - "eslint": "^4.7.1", + "eslint": "^4.19.1", "geneticalgorithm": "^0.3.4", - "json2csv": "^4.0.0", + "json2csv": "^4.0.2", "round-precision": "^1.0.0", - "run-parallel-limit": "^1.0.3", + "run-parallel-limit": "^1.0.4", "shelljs": "^0.8.0", - "yargs": "^11.0.0" + "yargs": "^11.1.0" }, "engines": { "node": "^8.3.0 || ^9.0.0" diff --git a/update.bat b/update.bat new file mode 100644 index 0000000000..0733209558 --- /dev/null +++ b/update.bat @@ -0,0 +1,5 @@ +REM git checkout package.json package-lock.json +REM git pull + +rd /q /s node_modules +npm install && npm update && npm dedupe \ No newline at end of file From 866877368dff83ae01c67c3ac65e2f22940e4009 Mon Sep 17 00:00:00 2001 From: Chase Sillevis Date: Mon, 23 Apr 2018 12:15:40 +0200 Subject: [PATCH 74/74] Sync some things --- .gitignore | 1 + boot.js | 4 +- conf-sample.js | 1 + package-lock.json | 2820 ++++++++++++++++++++++++++++----------------- package.json | 2 +- 5 files changed, 1774 insertions(+), 1054 deletions(-) diff --git a/.gitignore b/.gitignore index 06ad28f5b9..b609715067 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store +.env *.tar.gz *.log.* t.js diff --git a/boot.js b/boot.js index 40cbba318c..fa1c77afeb 100644 --- a/boot.js +++ b/boot.js @@ -45,7 +45,7 @@ module.exports = function (cb) { authStr += '@' // authMechanism could be a conf.js parameter to support more mongodb authentication methods - authMechanism = 'DEFAULT' + authMechanism = zenbot.conf.mongo.authMechanism || 'DEFAULT' } if (zenbot.conf.mongo.connectionString) { @@ -68,4 +68,4 @@ module.exports = function (cb) { _.set(zenbot, 'conf.db.mongo', db) cb(null, zenbot) }) -} \ No newline at end of file +} diff --git a/conf-sample.js b/conf-sample.js index 3a5390a86a..805c4c6932 100644 --- a/conf-sample.js +++ b/conf-sample.js @@ -14,6 +14,7 @@ c.mongo.username = null c.mongo.password = null // when using mongodb replication, i.e. when running a mongodb cluster, you can define your replication set here; when you are not using replication (most of the users), just set it to `null` (default). c.mongo.replicaSet = null +c.mongo.authMechanism = null // default selector. only used if omitting [selector] argument from a command. c.selector = 'gdax.BTC-USD' diff --git a/package-lock.json b/package-lock.json index 4e4cb4f729..660c487a6f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,19 +5,19 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", - "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "version": "7.0.0-beta.46", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.46.tgz", + "integrity": "sha512-7BKRkmYaPZm3Yff5HGZJKCz7RqZ5jUjknsXT6Gz5YKG23J3uq9hAj0epncCB0rlqmnZ8Q+UUpQB2tCR5mT37vw==", "requires": { - "@babel/highlight": "7.0.0-beta.44" + "@babel/highlight": "7.0.0-beta.46" } }, "@babel/highlight": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", - "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "version": "7.0.0-beta.46", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.46.tgz", + "integrity": "sha512-r4snW6Q8ICL3Y8hGzYJRvyG/+sc+kvkewXNedG9tQjoHmUFMwMSv/o45GWQUQswevGnWghiGkpRPivFfOuMsOA==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "esutils": "2.0.2", "js-tokens": "3.0.2" }, @@ -31,13 +31,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -46,9 +46,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -70,7 +70,7 @@ "@types/got": "7.1.8", "@types/is-stream": "1.1.0", "@types/loglevel": "1.5.3", - "@types/node": "9.4.7", + "@types/node": "9.6.6", "@types/p-cancelable": "0.3.0", "@types/p-queue": "2.3.1", "@types/p-retry": "1.0.1", @@ -88,7 +88,7 @@ "object.getownpropertydescriptors": "2.0.3", "object.values": "1.0.4", "p-cancelable": "0.3.0", - "p-queue": "2.4.0", + "p-queue": "2.4.1", "p-retry": "1.0.0", "retry": "0.10.1", "url-join": "4.0.0", @@ -126,7 +126,7 @@ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", "requires": { - "@types/node": "9.4.7" + "@types/node": "9.6.6" } }, "@types/got": { @@ -134,7 +134,7 @@ "resolved": "https://registry.npmjs.org/@types/got/-/got-7.1.8.tgz", "integrity": "sha512-QxcSkx9PjHH7uqbzqKTKOAjGbayyo+dECnnqM3BBMC0WjYAqx0e6Qi9AFR4jluvx91e7qzgz4aGka7AhCTHYRw==", "requires": { - "@types/node": "9.4.7" + "@types/node": "9.6.6" } }, "@types/is-stream": { @@ -142,7 +142,7 @@ "resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==", "requires": { - "@types/node": "9.4.7" + "@types/node": "9.6.6" } }, "@types/loglevel": { @@ -151,9 +151,9 @@ "integrity": "sha512-TzzIZihV+y9kxSg5xJMkyIkaoGkXi50isZTtGHObNHRqAAwjGNjSCNPI7AUAv0tZUKTq9f2cdkCUd/2JVZUTrA==" }, "@types/node": { - "version": "9.4.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.7.tgz", - "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==" + "version": "9.6.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.6.tgz", + "integrity": "sha512-SJe0g5cZeGNDP5sD8mIX3scb+eq8LQQZ60FXiKZHipYSeEFZ5EKml+NNMiO76F74TY4PoMWlNxF/YRY40FOvZQ==" }, "@types/p-cancelable": { "version": "0.3.0", @@ -180,7 +180,7 @@ "requires": { "@types/caseless": "0.12.1", "@types/form-data": "2.2.1", - "@types/node": "9.4.7", + "@types/node": "9.6.6", "@types/tough-cookie": "2.3.2" } }, @@ -205,7 +205,7 @@ "integrity": "sha512-tlDVFHCcJdNqYgjGNDPDCo4tNqhFMymIAdJCcykFbdhYr4X6vD7IlMxY0t3/k6Pfup68YNkMTpRfLKTRuKDmnQ==", "requires": { "@types/events": "1.2.0", - "@types/node": "9.4.7" + "@types/node": "9.6.6" } }, "@xmpp/jid": { @@ -412,7 +412,7 @@ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "requires": { "delegates": "1.0.0", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "argparse": { @@ -485,7 +485,7 @@ "integrity": "sha1-WAaNJYh+9QXknckssAxE3O5VsGc=", "requires": { "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "es-abstract": "1.11.0" } }, "arrify": { @@ -505,7 +505,7 @@ "requires": { "bn.js": "4.11.8", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -570,7 +570,7 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000824", + "caniuse-db": "1.0.30000830", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -582,8 +582,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000824", - "electron-to-chromium": "1.3.36" + "caniuse-db": "1.0.30000830", + "electron-to-chromium": "1.3.42" } } } @@ -594,9 +594,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "axios": { "version": "0.16.2", @@ -1210,7 +1210,7 @@ "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", "requires": { "babel-runtime": "6.26.0", - "core-js": "2.5.3", + "core-js": "2.5.5", "regenerator-runtime": "0.10.5" }, "dependencies": { @@ -1254,7 +1254,7 @@ "babel-plugin-transform-exponentiation-operator": "6.24.1", "babel-plugin-transform-regenerator": "6.26.0", "browserslist": "2.11.3", - "invariant": "2.2.3", + "invariant": "2.2.4", "semver": "5.5.0" } }, @@ -1329,7 +1329,7 @@ "requires": { "babel-core": "6.26.0", "babel-runtime": "6.26.0", - "core-js": "2.5.3", + "core-js": "2.5.5", "home-or-tmp": "2.0.0", "lodash": "4.17.5", "mkdirp": "0.5.1", @@ -1341,7 +1341,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.3", + "core-js": "2.5.5", "regenerator-runtime": "0.11.1" } }, @@ -1369,7 +1369,7 @@ "babylon": "6.18.0", "debug": "2.6.9", "globals": "9.18.0", - "invariant": "2.2.3", + "invariant": "2.2.4", "lodash": "4.17.5" } }, @@ -1389,6 +1389,11 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, + "backoff": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.3.0.tgz", + "integrity": "sha1-7nx+OAk/kuRyhZ22NedlJFT8Ieo=" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1416,17 +1421,48 @@ "is-descriptor": "1.0.2" } }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, "base64-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", - "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -1474,7 +1510,7 @@ "requires": { "debug": "2.6.9", "lodash": "4.17.5", - "request": "2.83.0", + "request": "2.85.0", "request-promise": "4.2.2", "ws": "3.3.3" }, @@ -1504,7 +1540,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "requires": { - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "safe-buffer": "5.1.1" } }, @@ -1541,6 +1577,13 @@ "qs": "6.5.1", "raw-body": "2.3.2", "type-is": "1.6.16" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + } } }, "bollinger-bands": { @@ -1562,9 +1605,9 @@ } }, "bootstrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.0.0.tgz", - "integrity": "sha512-gulJE5dGFo6Q61V/whS6VM4WIyrlydXfCgkE+Gxe5hjrJ8rXLLZlALq7zq2RPhOc45PSwQpJkrTnc2KgD6cvmA==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.0.tgz", + "integrity": "sha512-kCo82nE8qYVfOa/Z3hL98CPgPIEkh6iPdiJrUJMQ9n9r0+6PEET7cmhLlV0XVYmEj5QtKIOaSGMLxy5jSFhKog==" }, "brace-expansion": { "version": "1.1.11", @@ -1615,26 +1658,26 @@ "requires": { "buffer-xor": "1.0.3", "cipher-base": "1.0.4", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "evp_bytestokey": "1.0.3", "inherits": "2.0.3", "safe-buffer": "5.1.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { "browserify-aes": "1.2.0", - "browserify-des": "1.0.0", + "browserify-des": "1.0.1", "evp_bytestokey": "1.0.3" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "requires": { "cipher-base": "1.0.4", "des.js": "1.0.0", @@ -1657,11 +1700,11 @@ "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", "elliptic": "6.4.0", "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "parse-asn1": "5.1.1" } }, "browserify-zlib": { @@ -1677,8 +1720,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", "requires": { - "caniuse-lite": "1.0.30000813", - "electron-to-chromium": "1.3.36" + "caniuse-lite": "1.0.30000830", + "electron-to-chromium": "1.3.42" } }, "bson": { @@ -1691,7 +1734,7 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { - "base64-js": "1.2.3", + "base64-js": "1.3.0", "ieee754": "1.1.11", "isarray": "1.0.0" } @@ -1783,6 +1826,13 @@ "lowercase-keys": "1.0.0", "normalize-url": "2.0.1", "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + } } }, "caller-path": { @@ -1792,13 +1842,20 @@ "dev": true, "requires": { "callsites": "0.2.0" + }, + "dependencies": { + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + } } }, "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" }, "camelcase": { "version": "2.1.1", @@ -1820,7 +1877,7 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000824", + "caniuse-db": "1.0.30000830", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" }, @@ -1830,21 +1887,21 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000824", - "electron-to-chromium": "1.3.36" + "caniuse-db": "1.0.30000830", + "electron-to-chromium": "1.3.42" } } } }, "caniuse-db": { - "version": "1.0.30000824", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000824.tgz", - "integrity": "sha1-u6P/QlKW4EyqN/5CYlkganBWVRs=" + "version": "1.0.30000830", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000830.tgz", + "integrity": "sha1-bkUlWzRWSf0V/1kHLaHhK7PeLxM=" }, "caniuse-lite": { - "version": "1.0.30000813", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000813.tgz", - "integrity": "sha512-A8ITSmH5SFdMFdC704ggjg+x2z5PzQmVlG8tavwnfvbC33Q1UYrj0+G+Xm0SNAnd4He36fwUE/KEWytOEchw+A==" + "version": "1.0.30000830", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000830.tgz", + "integrity": "sha512-yMqGkujkoOIZfvOYiWdqPALgY/PVGiqCHUJb6yNq7xhI/pR+gQO0U2K6lRDqAiJv4+CIU3CtTLblNGw0QGnr6g==" }, "caseless": { "version": "0.12.0", @@ -1852,9 +1909,9 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "ccxt": { - "version": "1.12.97", - "resolved": "https://registry.npmjs.org/ccxt/-/ccxt-1.12.97.tgz", - "integrity": "sha512-LTYtnLx60VWOeyjue/ZrIEsg4KvgcMY/UKP02hHo7L8g33fSFLOx7FvJ8F81HGxrVADEVRxWlAcriZrgFoUfVg==", + "version": "1.13.32", + "resolved": "https://registry.npmjs.org/ccxt/-/ccxt-1.13.32.tgz", + "integrity": "sha512-QPZ5XNFRBaoT07Z4pARubtETKlXU67KYdb0oLfyAJiJkfuKLafVbuUgtDIUWioerWfNP83lX5hK/YcevZO0TVg==", "requires": { "cloudscraper": "1.4.1", "crypto-js": "3.1.9-1", @@ -1869,9 +1926,9 @@ "integrity": "sha512-vqt4NxuDJbmCHXnKr1J0viefmJfW0BAo1vqHXXcVIJcYMs6Qs9TXztvlkqanGOq09h9mVQ3Y+xj/GWOdwuvunQ==", "requires": { "debug": "3.1.0", - "moment": "2.22.0", - "request": "2.83.0", - "underscore": "1.8.3", + "moment": "2.22.1", + "request": "2.85.0", + "underscore": "1.9.0", "ws": "3.3.3" }, "dependencies": { @@ -1884,9 +1941,9 @@ } }, "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.0.tgz", + "integrity": "sha512-4IV1DSSxC1QK48j9ONFK1MoIAKKkbE8i7u55w2R6IqBqbT7A/iG7aZBCR2Bi8piF0Uz+i/MG1aeqLwl/5vqF+A==" }, "ws": { "version": "3.3.3", @@ -1924,7 +1981,8 @@ "requires": { "anymatch": "2.0.0", "async-each": "1.0.1", - "braces": "2.3.1", + "braces": "2.3.2", + "fsevents": "1.2.0", "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1941,17 +1999,15 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "braces": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", - "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { "arr-flatten": "1.1.0", "array-unique": "0.3.2", - "define-property": "1.0.0", "extend-shallow": "2.0.1", "fill-range": "4.0.0", "isobject": "3.0.1", - "kind-of": "6.0.2", "repeat-element": "1.1.2", "snapdragon": "0.8.2", "snapdragon-node": "2.1.1", @@ -1959,14 +2015,6 @@ "to-regex": "3.0.2" } }, - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -2011,16 +2059,6 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } } }, "isobject": { @@ -2028,11 +2066,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", @@ -2049,14 +2082,14 @@ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, "chrome-trace-event": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.2.tgz", - "integrity": "sha1-kPNohdU0WlBiEzLwcXtZWIPV2YI=" + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz", + "integrity": "sha512-sjndyZHrrWiu4RY7AkHgjn80GfAM2ZSzUkZLV/Js59Ldmh6JDThf0SUmOHU53rFu2rVxxfCzJ30Ukcfch3Gb/A==" }, "ci-info": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", - "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==" }, "cipher-base": { "version": "1.0.4", @@ -2100,61 +2133,10 @@ "is-descriptor": "0.1.6" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -2242,11 +2224,6 @@ "number-is-nan": "1.0.1" } }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -2361,13 +2338,13 @@ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" }, "cloneable-readable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.1.tgz", - "integrity": "sha512-DNNEq6JdqBFPzS29TaoqZFPNLn5Xn3XyPFqLIhyBT8Xou4lHQEWzD6FinXoJUfhIfWX3aE1JkRa3cbWCHFbt1g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "requires": { "inherits": "2.0.3", "process-nextick-args": "2.0.0", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "cloudscraper": { @@ -2375,7 +2352,7 @@ "resolved": "https://registry.npmjs.org/cloudscraper/-/cloudscraper-1.4.1.tgz", "integrity": "sha1-8rRDHzFyhtgZsTVyZso0Y7ES68o=", "requires": { - "request": "2.83.0" + "request": "2.85.0" } }, "co": { @@ -2491,7 +2468,7 @@ "requires": { "buffer-from": "1.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "typedarray": "0.0.6" } }, @@ -2567,9 +2544,9 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=" }, "core-util-is": { "version": "1.0.2", @@ -2584,7 +2561,7 @@ "is-directory": "0.3.1", "js-yaml": "3.11.0", "parse-json": "4.0.0", - "require-from-string": "2.0.1" + "require-from-string": "2.0.2" }, "dependencies": { "esprima": { @@ -2613,34 +2590,35 @@ } }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz", + "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", "requires": { "bn.js": "4.11.8", "elliptic": "6.4.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { "cipher-base": "1.0.4", "inherits": "2.0.3", - "ripemd160": "2.0.1", + "md5.js": "1.3.4", + "ripemd160": "2.0.2", "sha.js": "2.4.11" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { "cipher-base": "1.0.4", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "inherits": "2.0.3", - "ripemd160": "2.0.1", + "ripemd160": "2.0.2", "safe-buffer": "5.1.1", "sha.js": "2.4.11" } @@ -2678,15 +2656,15 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { - "browserify-cipher": "1.0.0", + "browserify-cipher": "1.0.1", "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", + "create-ecdh": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", + "pbkdf2": "3.0.16", + "public-encrypt": "4.0.2", "randombytes": "2.0.6", "randomfill": "1.0.4" } @@ -2896,7 +2874,7 @@ "requires": { "abab": "1.0.4", "whatwg-mimetype": "2.1.0", - "whatwg-url": "6.4.0" + "whatwg-url": "6.4.1" } }, "date-fns": { @@ -2978,10 +2956,41 @@ "isobject": "3.0.1" }, "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -3005,6 +3014,20 @@ "rimraf": "2.6.2" }, "dependencies": { + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -3042,7 +3065,7 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "destroy": { @@ -3074,9 +3097,9 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { "bn.js": "4.11.8", "miller-rabin": "4.0.1", @@ -3117,7 +3140,7 @@ "requires": { "end-of-stream": "1.4.1", "inherits": "2.0.3", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "stream-shift": "1.0.0" } }, @@ -3149,14 +3172,14 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.8.tgz", - "integrity": "sha512-QIDZL54fyV8MDcAsO91BMH1ft2qGGaHIJsJIA/+t+7uvXol1dm413fPcUgUb4k8F/9457rx4/KFE4XfDifrQxQ==" + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", + "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==" }, "electron-to-chromium": { - "version": "1.3.36", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.36.tgz", - "integrity": "sha1-Dqv3Gp6+qQE/scw1o5DgaGJPJ+g=" + "version": "1.3.42", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.42.tgz", + "integrity": "sha1-lcM78B0MxAVVauyJn+Yf1NduoPk=" }, "elegant-spinner": { "version": "1.0.1", @@ -3173,7 +3196,7 @@ "hash.js": "1.1.3", "hmac-drbg": "1.0.1", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", + "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" } }, @@ -3192,7 +3215,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "0.4.21" } }, "end-of-stream": { @@ -3244,9 +3267,9 @@ } }, "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", "requires": { "es-to-primitive": "1.1.1", "function-bind": "1.1.1", @@ -3313,7 +3336,7 @@ "requires": { "ajv": "5.5.2", "babel-code-frame": "6.26.0", - "chalk": "2.3.2", + "chalk": "2.4.0", "concat-stream": "1.6.2", "cross-spawn": "5.1.0", "debug": "3.1.0", @@ -3367,14 +3390,14 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "debug": { @@ -3424,9 +3447,9 @@ } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -3674,7 +3697,7 @@ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "requires": { "chardet": "0.4.2", - "iconv-lite": "0.4.19", + "iconv-lite": "0.4.21", "tmp": "0.0.33" } }, @@ -3835,7 +3858,7 @@ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", "requires": { - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "flat-cache": { @@ -3856,9 +3879,9 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" }, "flow-parser": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.69.0.tgz", - "integrity": "sha1-N4tRKNbQtVSosvFqTKPhq5ZJ8A4=" + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.70.0.tgz", + "integrity": "sha512-gGdyVUZWswG5jcINrVDHd3RY4nJptBTAx9mR9thGsrGGmAUR7omgJXQSpR+fXrLtxSTAea3HpAZNU/yzRJc2Cg==" }, "flush-write-stream": { "version": "1.0.3", @@ -3866,7 +3889,7 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "follow-redirects": { @@ -3910,6 +3933,12 @@ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, + "forex.analytics": { + "version": "github:mkmarek/forex.analytics#7bc278987700d4204e959af17de61495941d1a14", + "requires": { + "nan": "2.10.0" + } + }, "form-data": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", @@ -3921,9 +3950,9 @@ } }, "formidable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.0.tgz", - "integrity": "sha512-hr9aT30rAi7kf8Q2aaTpSP7xGMhlJ+MdrUDVZs3rxbD3L/K46A86s2VY7qC2D2kGYGBtiT/3j6wTx1eeUq5xAQ==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", + "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" }, "forwarded": { "version": "0.1.2", @@ -3954,7 +3983,7 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "fs-minipass": { @@ -3973,7 +4002,7 @@ "graceful-fs": "4.1.11", "iferr": "0.1.5", "imurmurhash": "0.1.4", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "fs.realpath": { @@ -3981,86 +4010,861 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "fsevents": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.0.tgz", + "integrity": "sha512-ROrBIbmw4ulxmQTwYAAGyN/0xgIOAFd6gX/K3F1aGLP/K5KxkubrlGISMV5EEWEB7qtiEdE0HpaqvMMHR+Ib6w==", + "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "nan": "2.10.0", + "node-pre-gyp": "0.9.1" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, "requires": { - "number-is-nan": "1.0.1" + "co": "4.6.0", + "json-stable-stringify": "1.0.1" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "delegates": "1.0.0", + "readable-stream": "2.2.9" } - } - } - }, - "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "requires": { - "globule": "1.2.0" - } - }, - "gdax": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/gdax/-/gdax-0.7.0.tgz", - "integrity": "sha512-lJHXlGchJVNtql8VWH+Idalehl5T5N6O9g5MUEW7IOuPtsbb7D15vgz6MOx1NgSyZe0fSIINv9s0HxujYB3sqg==", - "requires": { - "@types/request": "2.47.0", - "bignumber.js": "5.0.0", - "bintrees": "1.0.2", - "request": "2.83.0", - "ws": "4.1.0" - }, - "dependencies": { - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + }, + "asn1": { + "version": "0.2.3", + "bundled": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "co": { + "version": "4.6.0", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true + }, + "node-pre-gyp": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz", + "integrity": "sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA=", + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.0", + "rc": "1.2.1", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "4.4.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "optional": true + }, + "tar": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", + "optional": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true + }, + "qs": { + "version": "6.4.0", + "bundled": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "optional": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "gaze": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "requires": { + "globule": "1.2.0" + } + }, + "gdax": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/gdax/-/gdax-0.7.0.tgz", + "integrity": "sha512-lJHXlGchJVNtql8VWH+Idalehl5T5N6O9g5MUEW7IOuPtsbb7D15vgz6MOx1NgSyZe0fSIINv9s0HxujYB3sqg==", + "requires": { + "@types/request": "2.47.0", + "bignumber.js": "5.0.0", + "bintrees": "1.0.2", + "request": "2.85.0", + "ws": "4.1.0" + }, + "dependencies": { + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "requires": { "async-limiter": "1.0.0", @@ -4170,7 +4974,7 @@ "is-retry-allowed": "1.1.0", "is-stream": "1.1.0", "isurl": "1.0.0", - "lowercase-keys": "1.0.0", + "lowercase-keys": "1.0.1", "p-cancelable": "0.3.0", "p-timeout": "1.2.1", "safe-buffer": "5.1.1", @@ -4322,13 +5126,11 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" }, "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "requires": { "array-union": "1.0.2", - "arrify": "1.0.1", "glob": "7.1.2", "object-assign": "4.1.1", "pify": "2.3.0", @@ -4338,8 +5140,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } }, @@ -4366,7 +5167,7 @@ "into-stream": "3.1.0", "is-retry-allowed": "1.1.0", "isurl": "1.0.0", - "lowercase-keys": "1.0.0", + "lowercase-keys": "1.0.1", "mimic-response": "1.0.0", "p-cancelable": "0.4.1", "p-timeout": "2.0.1", @@ -4524,7 +5325,7 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "requires": { "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "hawk": { @@ -4544,7 +5345,7 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", + "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" } }, @@ -4616,7 +5417,7 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "https-browserify": { @@ -4635,9 +5436,12 @@ } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "requires": { + "safer-buffer": "2.1.2" + } }, "icss-replace-symbols": { "version": "1.1.0", @@ -4661,13 +5465,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -4680,9 +5484,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -4691,9 +5495,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -4839,9 +5643,9 @@ } }, "invariant": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", - "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { "loose-envify": "1.3.1" } @@ -4867,18 +5671,11 @@ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } + "kind-of": "3.2.2" } }, "is-arrayish": { @@ -4915,24 +5712,17 @@ "is-ci": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", - "requires": { - "ci-info": "1.1.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "requires": { + "ci-info": "1.1.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" } }, "is-date-object": { @@ -4941,19 +5731,19 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -5279,7 +6069,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.3.tgz", "integrity": "sha512-KSg3EOToCgkX+lIvenKY7J8s426h6ahXxaUFJxvGoEk0562Z6inWj1TnKoGycTASwiLD+6kSYFALcjdosq9KIQ==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "glob": "7.1.2", "jest-environment-jsdom": "22.4.3", "jest-environment-node": "22.4.3", @@ -5301,13 +6091,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5316,9 +6106,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5330,7 +6120,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "diff": "3.5.0", "jest-get-type": "22.4.3", "pretty-format": "22.4.3" @@ -5345,13 +6135,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5360,9 +6150,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5376,7 +6166,7 @@ "requires": { "jest-mock": "22.4.3", "jest-util": "22.4.3", - "jsdom": "11.7.0" + "jsdom": "11.9.0" } }, "jest-environment-node": { @@ -5398,7 +6188,7 @@ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz", "integrity": "sha512-yZCPCJUcEY6R5KJB/VReo1AYI2b+5Ky+C+JA1v34jndJsRcLpU4IZX4rFJn7yDTtdNbO/nNqg+3SDIPNH2ecnw==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "co": "4.6.0", "expect": "22.4.3", "graceful-fs": "4.1.11", @@ -5420,13 +6210,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5448,9 +6238,9 @@ } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5462,7 +6252,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "jest-get-type": "22.4.3", "pretty-format": "22.4.3" }, @@ -5476,13 +6266,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5491,9 +6281,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5505,8 +6295,8 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", "requires": { - "@babel/code-frame": "7.0.0-beta.44", - "chalk": "2.3.2", + "@babel/code-frame": "7.0.0-beta.46", + "chalk": "2.4.0", "micromatch": "2.3.11", "slash": "1.0.0", "stack-utils": "1.0.1" @@ -5521,13 +6311,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5577,9 +6367,9 @@ } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5602,7 +6392,7 @@ "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", "requires": { "browser-resolve": "1.11.2", - "chalk": "2.3.2" + "chalk": "2.4.0" }, "dependencies": { "ansi-styles": { @@ -5614,13 +6404,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5629,9 +6419,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5643,7 +6433,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "jest-diff": "22.4.3", "jest-matcher-utils": "22.4.3", "mkdirp": "0.5.1", @@ -5660,13 +6450,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5675,9 +6465,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5690,7 +6480,7 @@ "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", "requires": { "callsites": "2.0.0", - "chalk": "2.3.2", + "chalk": "2.4.0", "graceful-fs": "4.1.11", "is-ci": "1.1.0", "jest-message-util": "22.4.3", @@ -5706,19 +6496,14 @@ "color-convert": "1.9.1" } }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5732,9 +6517,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5746,7 +6531,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.3.tgz", "integrity": "sha512-CfFM18W3GSP/xgmA4UouIx0ljdtfD2mjeBC6c89Gg17E44D4tQhAcTrZmf9djvipwU30kSTnk6CzcxdCCeSXfA==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "jest-config": "22.4.3", "jest-get-type": "22.4.3", "leven": "2.1.0", @@ -5762,13 +6547,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5777,9 +6562,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5825,12 +6610,12 @@ "babel-preset-es2015": "6.24.1", "babel-preset-stage-1": "6.24.1", "babel-register": "6.26.0", - "babylon": "7.0.0-beta.44", + "babylon": "7.0.0-beta.46", "colors": "1.2.1", - "flow-parser": "0.69.0", + "flow-parser": "0.70.0", "lodash": "4.17.5", "micromatch": "2.3.11", - "neo-async": "2.5.0", + "neo-async": "2.5.1", "node-dir": "0.1.8", "nomnom": "1.8.1", "recast": "0.14.7", @@ -5839,9 +6624,9 @@ }, "dependencies": { "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==" + "version": "7.0.0-beta.46", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.46.tgz", + "integrity": "sha512-WFJlg2WatdkXRFMpk7BN/Uzzkjkcjk+WaqnrSCpay+RYl4ypW9ZetZyT9kNt22IH/BQNst3M6PaaBn9IXsUNrg==" }, "is-extglob": { "version": "1.0.0", @@ -5887,9 +6672,9 @@ } }, "jsdom": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.7.0.tgz", - "integrity": "sha512-9NzSc4Iz4gN9p4uoPbBUzro21QdgL32swaWIaWS8eEVQ2I69fRJAy/MKyvlEIk0V7HtKgfMbbOKyTZUrzR2Hsw==", + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.9.0.tgz", + "integrity": "sha512-sb3omwJTJ+HwAltLZevM/KQBusY+l2Ar5UfnTCWk9oUVBiDnQPBNiG1BaTAKttCnneonYbNo7vi4EFDY2lBfNA==", "requires": { "abab": "1.0.4", "acorn": "5.5.3", @@ -5901,11 +6686,11 @@ "domexception": "1.0.1", "escodegen": "1.9.1", "html-encoding-sniffer": "1.0.2", - "left-pad": "1.2.0", + "left-pad": "1.3.0", "nwmatcher": "1.4.4", "parse5": "4.0.0", "pn": "1.1.0", - "request": "2.83.0", + "request": "2.85.0", "request-promise-native": "1.0.5", "sax": "1.2.4", "symbol-tree": "3.2.2", @@ -5914,7 +6699,7 @@ "webidl-conversions": "4.0.2", "whatwg-encoding": "1.0.3", "whatwg-mimetype": "2.1.0", - "whatwg-url": "6.4.0", + "whatwg-url": "6.4.1", "ws": "4.1.0", "xml-name-validator": "3.0.0" }, @@ -5967,9 +6752,9 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json2csv": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.0.2.tgz", - "integrity": "sha512-0YkqHRfAiKtSRu+CldnY9O/tQdnSex4wWVt98lioZDodNHQmc3eIoMg3RxTVNBcfrEfz3p1BYHeVDteOIQQ7Mw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.1.2.tgz", + "integrity": "sha512-cYCezNey5QGRhvYDQvsUJq2GwrFAgKjcLd8UoylP7HlmcHBt85b1kI01QQYmqVFXMIrf8Dsb5PX9efUaSRY2XA==", "dev": true, "requires": { "cli-table2": "0.2.0", @@ -6054,7 +6839,7 @@ "is-retry-allowed": "1.1.0", "is-stream": "1.1.0", "isurl": "1.0.0", - "lowercase-keys": "1.0.0", + "lowercase-keys": "1.0.1", "p-cancelable": "0.3.0", "p-timeout": "1.2.1", "safe-buffer": "5.1.1", @@ -6095,9 +6880,9 @@ } }, "left-pad": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz", - "integrity": "sha1-0wpzxrggHY99jnlWupYWCHpo4O4=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" }, "leven": { "version": "2.1.0", @@ -6119,7 +6904,7 @@ "integrity": "sha512-9w4vwNJ1A7o4mwKhz/5B0VateS24KJjeU1ppO2UOBdbTg/iiypF4U6F3yckEms0Fbf5uvfLiPVp9pG2lBbVA6g==", "requires": { "app-root-path": "2.0.1", - "chalk": "2.3.2", + "chalk": "2.4.0", "commander": "2.15.1", "cosmiconfig": "4.0.0", "debug": "3.1.0", @@ -6151,13 +6936,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "debug": { @@ -6174,9 +6959,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -6202,7 +6987,7 @@ "log-update": "1.0.2", "ora": "0.2.3", "p-map": "1.2.0", - "rxjs": "5.5.8", + "rxjs": "5.5.10", "stream-to-observable": "0.2.0", "strip-ansi": "3.0.1" }, @@ -6300,7 +7085,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" }, "restore-cursor": { @@ -6496,7 +7281,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "requires": { - "chalk": "2.3.2" + "chalk": "2.4.0" }, "dependencies": { "ansi-styles": { @@ -6508,13 +7293,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -6523,9 +7308,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -6551,7 +7336,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" }, "restore-cursor": { @@ -6593,9 +7378,9 @@ } }, "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "lru-cache": { "version": "4.1.2", @@ -6656,9 +7441,9 @@ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=" }, "mathjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-4.0.1.tgz", - "integrity": "sha512-XqQF+755gF9jjdno0X3V/1SzHJIE784jSo9fhu6DlYtcjo14vj/4jbiRV8mc28uqVP8hVk2JXBGvwTWDaSaSfw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-4.1.2.tgz", + "integrity": "sha512-lZhxnazJNxZOzGyYUm3IdWhUXe8LbVeZEIZadqTR0rh3l58Ip6wWJ/KjL7aTEFCHY3VGgBQ6AVlCcqCQ7po3JA==", "requires": { "complex.js": "2.0.4", "decimal.js": "9.0.1", @@ -6709,7 +7494,7 @@ "requires": { "commondir": "1.0.1", "deep-extend": "0.4.2", - "ejs": "2.5.8", + "ejs": "2.5.9", "glob": "7.1.2", "globby": "6.1.0", "mkdirp": "0.5.1", @@ -6720,32 +7505,15 @@ }, "dependencies": { "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" }, "clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", @@ -6756,10 +7524,10 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "requires": { - "clone": "2.1.1", + "clone": "2.1.2", "clone-buffer": "1.0.0", "clone-stats": "1.0.0", - "cloneable-readable": "1.1.1", + "cloneable-readable": "1.1.2", "remove-trailing-separator": "1.1.0", "replace-ext": "1.0.0" } @@ -6772,7 +7540,7 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { "errno": "0.1.7", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "meow": { @@ -6814,7 +7582,7 @@ "requires": { "arr-diff": "4.0.0", "array-unique": "0.3.2", - "braces": "2.3.1", + "braces": "2.3.2", "define-property": "2.0.2", "extend-shallow": "3.0.2", "extglob": "2.0.4", @@ -6838,17 +7606,15 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "braces": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", - "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { "arr-flatten": "1.1.0", "array-unique": "0.3.2", - "define-property": "1.0.0", "extend-shallow": "2.0.1", "fill-range": "4.0.0", "isobject": "3.0.1", - "kind-of": "6.0.2", "repeat-element": "1.1.2", "snapdragon": "0.8.2", "snapdragon-node": "2.1.1", @@ -6856,14 +7622,6 @@ "to-regex": "3.0.2" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -6904,6 +7662,42 @@ "is-extendable": "0.1.1" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -6976,39 +7770,29 @@ } }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } + "kind-of": "6.0.2" } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "is-number": { @@ -7051,9 +7835,9 @@ } }, "mime": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.2.tgz", - "integrity": "sha512-A7PDg4s48MkqFEcYg2b069m3DXOEq7hx+9q9rIFrSSYfzsh35GX+LOVMQ8Au0ko7d8bSQCIAuzkjp0vCtwENlQ==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==" }, "mime-db": { "version": "1.33.0", @@ -7084,9 +7868,9 @@ "integrity": "sha1-mDOxA3vZWrkIYzrQ3Fkn0Ocq3tM=" }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", @@ -7217,22 +8001,22 @@ } }, "moment": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.0.tgz", - "integrity": "sha512-1muXCh8jb1N/gHRbn9VDUBr0GYb8A/aVcHlII9QSB68a50spqEVLIGN6KVmCOnSvJrUhC0edGgKU5ofnGXdYdg==" + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", + "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" }, "mongodb": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.5.tgz", - "integrity": "sha512-8ioTyyc8tkNwZCTDa1FPWvmpJFfvE484DnugC8KpVrw4AKAE03OOAlORl2yYTNtz3TX4Ab7FRo00vzgexB/67A==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.7.tgz", + "integrity": "sha512-n/14kMJEoARXz1qhpNPhUocqy+z5130jhqgEIX1Tsl8UVpHrndQ8et+VmgC4yPK/I8Tcgc93JEMQCHTekBUnNA==", "requires": { - "mongodb-core": "3.0.5" + "mongodb-core": "3.0.7" } }, "mongodb-core": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.5.tgz", - "integrity": "sha512-4A1nx/xAU5d/NPICjiyzVxzNrIdJQQsYRe3xQkV1O638t+fHHfAOLK+SQagqGnu1m0aeSxb1ixp/P0FGSQWIGA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.7.tgz", + "integrity": "sha512-z6YufO7s40wLiv2ssFshqoLS4+Kf+huhHq6KZ7gDArsKNzXYjAwTMnhEIJ9GQ8fIfBGs5tBLNPfbIDoCKGPmOw==", "requires": { "bson": "1.0.6", "require_optional": "1.0.1" @@ -7278,9 +8062,9 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "nan": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", - "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, "nanomatch": { "version": "1.2.9", @@ -7329,7 +8113,7 @@ "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", "requires": { "debug": "2.6.9", - "iconv-lite": "0.4.19", + "iconv-lite": "0.4.21", "sax": "1.2.4" } }, @@ -7339,9 +8123,9 @@ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "neo-async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", - "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==" }, "nice-try": { "version": "1.0.4", @@ -7356,7 +8140,7 @@ "cloudscraper": "1.4.1", "jsonic": "0.3.0", "object-assign": "4.1.1", - "request": "2.83.0", + "request": "2.85.0", "signalr-client": "0.0.17" } }, @@ -7375,9 +8159,9 @@ } }, "node-forge": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.4.tgz", - "integrity": "sha512-8Df0906+tq/omxuCZD6PqhPaQDYuyJ1d+VITgxoIA8zvQd1ru+nMJcDChHH324MWitIgbVkAkQoGEEVJNpn/PA==" + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==" }, "node-gyp": { "version": "3.6.2", @@ -7392,7 +8176,7 @@ "nopt": "3.0.6", "npmlog": "4.1.2", "osenv": "0.1.5", - "request": "2.83.0", + "request": "2.85.0", "rimraf": "2.6.2", "semver": "5.3.0", "tar": "2.2.1", @@ -7425,11 +8209,11 @@ "process": "0.11.10", "punycode": "1.4.1", "querystring-es3": "0.2.1", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "stream-browserify": "2.0.1", "stream-http": "2.8.1", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.6", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", "url": "0.11.0", "util": "0.10.3", @@ -7437,9 +8221,9 @@ } }, "node-pre-gyp": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.0.tgz", - "integrity": "sha1-vdTDr6ybGx6/8Kn/M2KFnrZ4G7g=", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz", + "integrity": "sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA=", "requires": { "detect-libc": "1.0.3", "mkdirp": "0.5.1", @@ -7609,14 +8393,9 @@ "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, "qs": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", @@ -7628,7 +8407,7 @@ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", "requires": { "aws-sign2": "0.6.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.11.0", "combined-stream": "1.0.6", "extend": "3.0.1", @@ -7678,7 +8457,7 @@ "file-type": "3.9.0", "mime": "1.6.0", "pump": "2.0.1", - "request": "2.83.0", + "request": "2.85.0", "request-promise": "4.2.2" }, "dependencies": { @@ -7707,7 +8486,7 @@ "md5.js": "1.3.4", "minimist": "1.2.0", "node-xmpp-core": "5.0.9", - "request": "2.83.0", + "request": "2.85.0", "ws": "1.1.5" }, "dependencies": { @@ -7738,7 +8517,8 @@ "debug": "2.6.9", "inherits": "2.0.3", "lodash.assign": "4.2.0", - "node-xmpp-tls-connect": "1.0.1" + "node-xmpp-tls-connect": "1.0.1", + "reconnect-core": "https://github.com/dodo/reconnect-core/tarball/merged" } }, "node-xmpp-tls-connect": { @@ -7892,6 +8672,9 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, + "numbro": { + "version": "github:highvelocityspace/numbro#65a801c05c40496e5701458c0d4e780060e9a742" + }, "nwmatcher": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", @@ -7924,39 +8707,6 @@ "requires": { "is-descriptor": "0.1.6" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } } } }, @@ -7991,7 +8741,7 @@ "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", "requires": { "define-properties": "1.1.2", - "es-abstract": "1.10.0", + "es-abstract": "1.11.0", "function-bind": "1.1.1", "has": "1.0.1" } @@ -8002,7 +8752,7 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "requires": { "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "es-abstract": "1.11.0" } }, "object.omit": { @@ -8035,7 +8785,7 @@ "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", "requires": { "define-properties": "1.1.2", - "es-abstract": "1.10.0", + "es-abstract": "1.11.0", "function-bind": "1.1.1", "has": "1.0.1" } @@ -8136,7 +8886,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" }, "restore-cursor": { @@ -8237,9 +8987,9 @@ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" }, "p-queue": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.0.tgz", - "integrity": "sha512-ZXisZuQjnDcRd4/Np7lNrE2f3qq2Cy8Ikg8T2gbLjQZbRnSVqOr9cQUMbyVJJuIDUJYWMOZ+Q/5fJbYJtMbZ2A==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-2.4.1.tgz", + "integrity": "sha512-xqevcHZy5F9ewg/pnox4S1gFo+9wbLuo+XRMIpdreSaB7d2hAm4JNDuDauOKtHvSmFiS00gTSQoYNbo8rbLoBA==" }, "p-reduce": { "version": "1.0.0", @@ -8279,19 +9029,19 @@ "requires": { "cyclist": "0.2.2", "inherits": "2.0.3", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "requires": { "asn1.js": "4.10.1", "browserify-aes": "1.2.0", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "pbkdf2": "3.0.16" } }, "parse-glob": { @@ -8411,13 +9161,13 @@ } }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", "safe-buffer": "5.1.1", "sha.js": "2.4.11" } @@ -8867,9 +9617,9 @@ } }, "postcss-loader": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.3.tgz", - "integrity": "sha512-RuBcNE8rjCkIB0IsbmkGFRmQJTeQJfCI88E0VTarPNTvaNSv9OFv1DvTwgtAN/qlzyiELsmmmtX/tEzKp/cdug==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.4.tgz", + "integrity": "sha512-L2p654oK945B/gDFUGgOhh7uzj19RWoY1SVMeJVoKno1H2MdbQ0RppR/28JGju4pMb22iRC7BJ9aDzbxXSLf4A==", "requires": { "loader-utils": "1.1.0", "postcss": "6.0.21", @@ -8886,13 +9636,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -8905,9 +9655,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -8916,9 +9666,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -8952,7 +9702,7 @@ "caniuse-api": "1.6.1", "postcss": "5.2.18", "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" + "vendors": "1.0.2" }, "dependencies": { "browserslist": { @@ -8960,8 +9710,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000824", - "electron-to-chromium": "1.3.36" + "caniuse-db": "1.0.30000830", + "electron-to-chromium": "1.3.42" } } } @@ -9029,13 +9779,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -9048,9 +9798,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -9059,9 +9809,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -9086,13 +9836,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -9105,9 +9855,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -9116,9 +9866,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -9143,13 +9893,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -9162,9 +9912,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -9173,9 +9923,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -9200,13 +9950,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -9219,9 +9969,9 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz", "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -9230,9 +9980,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -9391,9 +10141,9 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.11.1.tgz", - "integrity": "sha512-T/KD65Ot0PB97xTrG8afQ46x3oiVhnfGjGESSI9NWYcG92+OUPZKkwHqGWXH2t9jK1crnQjubECW0FuOth+hxw==" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", + "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=" }, "pretty-bytes": { "version": "4.0.2", @@ -9469,14 +10219,14 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", "randombytes": "2.0.6" } }, @@ -9511,8 +10261,8 @@ "requires": { "clone": "2.1.2", "mime": "1.6.0", - "node-forge": "0.7.4", - "request": "2.83.0", + "node-forge": "0.7.5", + "request": "2.85.0", "request-promise-native": "1.0.5", "websocket": "1.0.25" }, @@ -9558,7 +10308,7 @@ "resolved": "https://registry.npmjs.org/quadrigacx/-/quadrigacx-0.0.7.tgz", "integrity": "sha1-vptrBG28vDpNqRbBpQtJ2kiulsQ=", "requires": { - "request": "2.83.0" + "request": "2.85.0" } }, "query-string": { @@ -9672,6 +10422,11 @@ "statuses": "1.4.0" } }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, "setprototypeof": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", @@ -9738,16 +10493,16 @@ } }, "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "2.0.0", "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", + "string_decoder": "1.1.1", "util-deprecate": "1.0.2" } }, @@ -9758,7 +10513,7 @@ "requires": { "graceful-fs": "4.1.11", "minimatch": "3.0.4", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "set-immediate-shim": "1.0.1" } }, @@ -9793,6 +10548,13 @@ "resolve": "1.1.7" } }, + "reconnect-core": { + "version": "https://github.com/dodo/reconnect-core/tarball/merged", + "integrity": "sha512-wZK/v5ZaNaSUs2Wnwh2YSX/Jqv6bQHKNEwojdzV11tByKziR9ikOssf5tvUhx+8/oCBz6AakOFAjZuqPoiRHJQ==", + "requires": { + "backoff": "2.3.0" + } + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -9956,12 +10718,12 @@ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { "aws-sign2": "0.7.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.12.0", "combined-stream": "1.0.6", "extend": "3.0.1", @@ -10030,9 +10792,9 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz", - "integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { "version": "1.0.1", @@ -10047,6 +10809,14 @@ "requires": { "caller-path": "0.1.0", "resolve-from": "1.0.1" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } } }, "require_optional": { @@ -10056,13 +10826,6 @@ "requires": { "resolve-from": "2.0.0", "semver": "5.5.0" - }, - "dependencies": { - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - } } }, "resolve": { @@ -10095,10 +10858,9 @@ } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, "resolve-url": { "version": "0.2.1", @@ -10133,7 +10895,7 @@ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "requires": { - "lowercase-keys": "1.0.0" + "lowercase-keys": "1.0.1" } }, "restore-cursor": { @@ -10185,22 +10947,12 @@ } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "hash-base": "2.0.2", + "hash-base": "3.0.4", "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "requires": { - "inherits": "2.0.3" - } - } } }, "round-precision": { @@ -10254,9 +11006,9 @@ } }, "rxjs": { - "version": "5.5.8", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.8.tgz", - "integrity": "sha512-Bz7qou7VAIoGiglJZbzbXa4vpX5BmTTN2Dj/se6+SwADtw4SihqBIiEa7VmTXJ8pynvq0iFr5Gx9VLyye1rIxQ==", + "version": "5.5.10", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", + "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", "requires": { "symbol-observable": "1.0.1" }, @@ -10289,6 +11041,11 @@ "ret": "0.1.15" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "sass-graph": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", @@ -10346,14 +11103,14 @@ } }, "sass-loader": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz", - "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.0.1.tgz", + "integrity": "sha512-MeVVJFejJELlAbA7jrRchi88PGP6U9yIfqyiG+bBC4a9s2PX+ulJB9h8bbEohtPBfZmlLhNZ0opQM9hovRXvlw==", "requires": { "clone-deep": "2.0.2", "loader-utils": "1.1.0", "lodash.tail": "4.1.1", - "neo-async": "2.5.0", + "neo-async": "2.5.1", "pify": "3.0.0" } }, @@ -10367,18 +11124,19 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "requires": { - "ajv": "6.2.1", + "ajv": "6.4.0", "ajv-keywords": "3.1.0" }, "dependencies": { "ajv": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", - "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "requires": { "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" } } } @@ -10445,9 +11203,9 @@ } }, "serialize-javascript": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", - "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==" }, "serve-static": { "version": "1.13.2", @@ -10583,13 +11341,9 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0" - } + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" }, "slide": { "version": "1.1.6", @@ -10607,76 +11361,25 @@ "extend-shallow": "2.0.1", "map-cache": "0.2.2", "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } + "source-map-resolve": "0.5.1", + "use": "3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-extendable": "0.1.1" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -10698,10 +11401,41 @@ "is-descriptor": "1.0.2" } }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -10806,9 +11540,9 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -10859,57 +11593,6 @@ "requires": { "is-descriptor": "0.1.6" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -10931,7 +11614,7 @@ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", "requires": { - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "stealthy-require": { @@ -10945,7 +11628,7 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "stream-each": { @@ -10964,7 +11647,7 @@ "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" } @@ -11022,9 +11705,9 @@ } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "5.1.1" } @@ -11085,9 +11768,9 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "style-loader": { - "version": "0.20.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.20.3.tgz", - "integrity": "sha512-2I7AVP73MvK33U7B9TKlYZAqdROyMXDYSMvHLX43qy3GCOaJNiV6i0v/sv9idWIaQ42Yn2dNv79Q5mKXbKhAZg==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", + "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", "requires": { "loader-utils": "1.1.0", "schema-utils": "0.4.5" @@ -11103,11 +11786,11 @@ "debug": "3.1.0", "extend": "3.0.1", "form-data": "2.3.2", - "formidable": "1.2.0", + "formidable": "1.2.1", "methods": "1.1.2", "mime": "1.6.0", "qs": "6.5.1", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" }, "dependencies": { "debug": { @@ -11169,7 +11852,7 @@ "requires": { "ajv": "5.5.2", "ajv-keywords": "2.1.1", - "chalk": "2.3.2", + "chalk": "2.4.0", "lodash": "4.17.5", "slice-ansi": "1.0.0", "string-width": "2.1.1" @@ -11191,14 +11874,14 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "dev": true, "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -11207,10 +11890,19 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -11223,7 +11915,7 @@ "resolved": "https://registry.npmjs.org/talib/-/talib-1.0.4.tgz", "integrity": "sha512-s4QITrKVUZ4feHl78296sMKLRWBG8dbuBPE0nr8NHVJimzrz1GVI27PBfBHlx0Bx1+Bmu8/6IbQM+84x0B0eKQ==", "requires": { - "nan": "2.9.2" + "nan": "2.10.0" } }, "tapable": { @@ -11277,7 +11969,7 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "xtend": "4.0.1" } }, @@ -11286,7 +11978,7 @@ "resolved": "https://registry.npmjs.org/timebucket/-/timebucket-0.4.0.tgz", "integrity": "sha1-2H9xqMhrjqq95zX3qcSzJc6ZhXw=", "requires": { - "moment": "2.22.0" + "moment": "2.22.1" } }, "timed-out": { @@ -11295,9 +11987,9 @@ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "requires": { "setimmediate": "1.0.5" } @@ -11435,8 +12127,8 @@ "requires": { "bindings": "1.3.0", "minctest": "0.0.2", - "nan": "2.9.2", - "node-pre-gyp": "0.9.0" + "nan": "2.10.0", + "node-pre-gyp": "0.9.1" } }, "tunnel-agent": { @@ -11510,14 +12202,14 @@ } }, "uglifyjs-webpack-plugin": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz", - "integrity": "sha512-z0IbjpW8b3O/OVn+TTZN4pI29RN1zktFBXLIzzfZ+++cUtZ1ERSlLWgpE/5OERuEUs1ijVQnpYAkSlpoVmQmSQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", + "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", "requires": { "cacache": "10.0.4", "find-cache-dir": "1.0.0", "schema-utils": "0.4.5", - "serialize-javascript": "1.4.0", + "serialize-javascript": "1.5.0", "source-map": "0.6.1", "uglify-es": "3.3.9", "webpack-sources": "1.1.0", @@ -11710,7 +12402,7 @@ "integrity": "sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==", "requires": { "loader-utils": "1.1.0", - "mime": "2.2.2", + "mime": "2.3.1", "schema-utils": "0.4.5" } }, @@ -11792,9 +12484,9 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" }, "verror": { "version": "1.10.0", @@ -11859,7 +12551,7 @@ "requires": { "chokidar": "2.0.3", "graceful-fs": "4.1.11", - "neo-async": "2.5.0" + "neo-async": "2.5.1" } }, "waypoints": { @@ -11873,15 +12565,15 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.5.0.tgz", - "integrity": "sha512-6GrZsvQJnG7o7mjbfjp6s5CyMfdopjt1A/X8LcYwceis9ySjqBX6Lusso2wNZ06utHj2ZvfL6L3f7hfgVeJP6g==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.6.0.tgz", + "integrity": "sha512-Fu/k/3fZeGtIhuFkiYpIy1UDHhMiGKjG4FFPVuvG+5Os2lWA1ttWpmi9Qnn6AgfZqj9MvhZW/rmj/ip+nHr06g==", "requires": { "acorn": "5.5.3", "acorn-dynamic-import": "3.0.0", "ajv": "6.4.0", "ajv-keywords": "3.1.0", - "chrome-trace-event": "0.1.2", + "chrome-trace-event": "0.1.3", "enhanced-resolve": "4.0.0", "eslint-scope": "3.7.1", "loader-runner": "2.3.0", @@ -11889,11 +12581,11 @@ "memory-fs": "0.4.1", "micromatch": "3.1.10", "mkdirp": "0.5.1", - "neo-async": "2.5.0", + "neo-async": "2.5.1", "node-libs-browser": "2.1.0", "schema-utils": "0.4.5", "tapable": "1.0.0", - "uglifyjs-webpack-plugin": "1.2.4", + "uglifyjs-webpack-plugin": "1.2.5", "watchpack": "1.5.0", "webpack-sources": "1.1.0" }, @@ -11959,7 +12651,7 @@ "babel-register": "6.26.0", "babylon": "6.18.0", "colors": "1.2.1", - "flow-parser": "0.69.0", + "flow-parser": "0.70.0", "lodash": "4.17.5", "micromatch": "2.3.11", "node-dir": "0.1.8", @@ -12003,7 +12695,7 @@ "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", "requires": { "ast-types": "0.10.1", - "core-js": "2.5.3", + "core-js": "2.5.5", "esprima": "4.0.0", "private": "0.1.8", "source-map": "0.6.1" @@ -12017,11 +12709,11 @@ } }, "webpack-cli": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.14.tgz", - "integrity": "sha512-gRoWaxSi2JWiYsn1QgOTb6ENwIeSvN1YExZ+kJ0STsTZK7bWPElW+BBBv1UnTbvcPC3v7E17mK8hlFX8DOYSGw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.15.tgz", + "integrity": "sha512-bjNeIUO51D4OsmZ5ufzcpzVoacjxfWNfeBZKYL3jc+EMfCME3TyfdCPSUoKiOnebQChfupQuIRpAnx7L4l3Hew==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "cross-spawn": "6.0.5", "diff": "3.5.0", "enhanced-resolve": "4.0.0", @@ -12040,13 +12732,13 @@ "mkdirp": "0.5.1", "p-each-series": "1.0.0", "p-lazy": "1.0.0", - "prettier": "1.11.1", - "supports-color": "5.3.0", + "prettier": "1.12.1", + "supports-color": "5.4.0", "v8-compile-cache": "1.1.2", "webpack-addons": "1.1.5", "yargs": "11.1.0", "yeoman-environment": "2.0.6", - "yeoman-generator": "2.0.3" + "yeoman-generator": "2.0.4" }, "dependencies": { "ansi-escapes": { @@ -12068,13 +12760,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "cross-spawn": { @@ -12089,14 +12781,6 @@ "which": "1.3.0" } }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -12108,7 +12792,7 @@ "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", "requires": { "ansi-escapes": "3.1.0", - "chalk": "2.3.2", + "chalk": "2.4.0", "cli-cursor": "2.1.0", "cli-width": "2.2.0", "external-editor": "2.2.0", @@ -12116,50 +12800,12 @@ "lodash": "4.17.5", "mute-stream": "0.0.7", "run-async": "2.3.0", - "rxjs": "5.5.8", + "rxjs": "5.5.10", "string-width": "2.1.1", "strip-ansi": "4.0.0", "through": "2.3.8" } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "3.0.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -12168,15 +12814,10 @@ "ansi-regex": "3.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -12205,7 +12846,7 @@ "integrity": "sha512-M58njvi6ZxVb5k7kpnHh2BvNKuBWiwIYvsToErBzWhvBZYwlEiLcyLrG41T1jRcrY9ettqPYEqduLI7ul54CVQ==", "requires": { "debug": "2.6.9", - "nan": "2.9.2", + "nan": "2.10.0", "typedarray-to-buffer": "3.1.5", "yaeti": "0.0.6" } @@ -12235,6 +12876,13 @@ "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", "requires": { "iconv-lite": "0.4.19" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + } } }, "whatwg-mimetype": { @@ -12243,9 +12891,9 @@ "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==" }, "whatwg-url": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz", - "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", + "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", "requires": { "lodash.sortby": "4.7.0", "tr46": "1.0.1", @@ -12441,7 +13089,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "requires": { - "cliui": "4.0.0", + "cliui": "4.1.0", "decamelize": "1.2.0", "find-up": "2.1.0", "get-caller-file": "1.0.2", @@ -12466,9 +13114,9 @@ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, "cliui": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", - "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "requires": { "string-width": "2.1.1", "strip-ansi": "4.0.0", @@ -12542,7 +13190,7 @@ "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.0", "debug": "3.1.0", "diff": "3.5.0", "escape-string-regexp": "1.0.5", @@ -12576,13 +13224,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "debug": { @@ -12593,18 +13241,6 @@ "ms": "2.0.0" } }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -12616,7 +13252,7 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "requires": { "ansi-escapes": "3.1.0", - "chalk": "2.3.2", + "chalk": "2.4.0", "cli-cursor": "2.1.0", "cli-width": "2.2.0", "external-editor": "2.2.0", @@ -12631,11 +13267,6 @@ "through": "2.3.8" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -12645,9 +13276,9 @@ } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -12655,15 +13286,17 @@ } }, "yeoman-generator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.3.tgz", - "integrity": "sha512-mODmrZ26a94djmGZZuIiomSGlN4wULdou29ZwcySupb2e9FdvoCl7Ps2FqHFjEHio3kOl/iBeaNqrnx3C3NwWg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.4.tgz", + "integrity": "sha512-Sgvz3MAkOpEIobcpW3rjEl6bOTNnl8SkibP9z7hYKfIGIlw0QDC2k0MAeXvyE2pLqc2M0Duql+6R7/W9GrJojg==", "requires": { "async": "2.6.0", + "chalk": "2.4.0", "cli-table": "0.3.1", "cross-spawn": "5.1.0", "dargs": "5.1.0", "dateformat": "3.0.3", + "debug": "3.1.0", "detect-conflict": "1.0.1", "error": "7.0.2", "find-up": "2.1.0", @@ -12675,12 +13308,97 @@ "minimist": "1.2.0", "pretty-bytes": "4.0.2", "read-chunk": "2.1.0", + "read-pkg-up": "3.0.0", "rimraf": "2.6.2", "run-async": "2.3.0", "shelljs": "0.8.1", "text-table": "0.2.0", "through2": "2.0.3", "yeoman-environment": "2.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", + "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "4.0.0", + "pify": "3.0.0", + "strip-bom": "3.0.0" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "3.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "requires": { + "load-json-file": "4.0.0", + "normalize-package-data": "2.4.0", + "path-type": "3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "requires": { + "find-up": "2.1.0", + "read-pkg": "3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "3.0.0" + } + } } }, "zero-fill": { diff --git a/package.json b/package.json index e562f5dda9..ddeb80fcf6 100644 --- a/package.json +++ b/package.json @@ -122,4 +122,4 @@ "engines": { "node": "^8.3.0 || ^9.0.0" } -} \ No newline at end of file +}