From 0a4719932f0a531db069dc926f33bab21dc1a4bd Mon Sep 17 00:00:00 2001 From: Anthony Cregan Date: Mon, 9 Jul 2018 15:01:01 +0100 Subject: [PATCH 01/26] Updated Path to UIconfig.js file in setup instructions. --- docs/installation/installing_gekko_on_raspberry_pi_2_or_3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/installing_gekko_on_raspberry_pi_2_or_3.md b/docs/installation/installing_gekko_on_raspberry_pi_2_or_3.md index eeab9abc7..5c2d2fb93 100644 --- a/docs/installation/installing_gekko_on_raspberry_pi_2_or_3.md +++ b/docs/installation/installing_gekko_on_raspberry_pi_2_or_3.md @@ -43,7 +43,7 @@ Once you have Gekko downloaded you need to install the dependencies, open your t ## Configure your Pi as a headless server - cd web/vue + cd web/vue/dist nano UIconfig.js Set headless to true From f9363397b47b4932dab44cea786849f05f6a2216 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Fri, 10 Aug 2018 22:09:32 +0800 Subject: [PATCH 02/26] v0.6.5 (#2428) * [docs] install indicator libs without updating package.json * add tulip example strat configs, see #2341 * uppercase default macd strat * temp revert bfx dep to main repo (fixes importer) * binance set default fee as percentage * rename bitx to luno (#2352) * v0.6 support for bitx (aka Luno) * v0.6 support for bitx (aka Luno) * remove log * move dependency to gb * rename bitx to luno * rename bitx to luno * make sure we pass amount as positive value * make sure we overlap when importing trades * rm 500 as retryable error, see #2354 * only try to set fee when live trading, see #2358 * make gekko pic path relative * make select arrow path relative * Fix method name for stratNotification event * make sure we parse both TS (backtest) & moment strings (live) * make sure GB throws errors * only render warmup warning when there is required history * v0.6.4 * fix plugin event wire warning * check portfolio data before calculating report (#2369) * Changed several log messages from debug to warn (#2374) Changed "Not creating order" message and "exchange did not provide fee info" from debug to warn messages so users can see these issues even when debug is set to false. * make sure we pass on exchange error (#2379) * fix backtest result exporter in standalone mode (#2382) * make sure to pass order id in cancel edge flow, fix #2386 (#2387) * Emit trade and trade errors via Telegram (#2385) * Emit trade and trade errors via Telegram * Added semi-colons Added missing semi-colons in processTradeCompleted and processTradeErrored methods. * Register methods only if set to true in config * catch undefined CPU cores on ARM (#2391) * export portfolio values as part of stratCandles (#2402) * rm space in backtest export file location * [GB/Binance] retry on 403 (#2404) * completely disable broken limit order for now, fix #2398 * rewire cancelfix cb, see #2386 * remove slack dependency that is triggering warnings (#2408) * move slack plugin dep out of main repo * remove twitter & pushbullet plugin dependencies from main repo (#2409) * move slack dependency out of main repo * rm slack dep from main repo * also remove pushbullet & twitter deps from main repo * use forked bittrex dep with updated dependencies (#2410) * use bittrex fork with updated deps * [GB] introduce optimizedConnection flag in binance * [GB] catch strange networking error * update binance market files, see #2406 * [GB] point to supported_exchanges doc * [GB] add example usage, fix #2414 * assume CF maintainance to be recoverable, fix #2407 * use npm version of of forked bittrex dep * catch gb init errors * [sqlite] wait for 10 seconds on busy * throw errors, not strings * [GB] update bfx & cf markets * Update Luno (#2417) * v0.6 support for bitx (aka Luno) * v0.6 support for bitx (aka Luno) * remove log * move dependency to gb * rename bitx to luno * rename bitx to luno * temp fix simultaneous advice error * - re-add logging - Retry insufficient balance due to server update delay - Enhanced getPorfolio - getOrder now return fees * update * update * update * revert 4b5d09f * v.0.6.5 --- core/budfox/marketFetcher.js | 2 +- core/budfox/tradeBatcher.js | 4 +- core/candleBatcher.js | 7 +- core/pipeline.js | 26 +- core/talib.js | 10 +- core/tools/dataStitcher.js | 4 + core/tulind.js | 10 +- core/workers/datasetScan/parent.js | 7 +- docs/gekko-broker/introduction.md | 86 +- docs/internals/events.md | 2 +- docs/introduction/supported_exchanges.md | 4 +- docs/strategies/talib_indicators.md | 2 +- docs/strategies/tulip_indicators.md | 2 +- exchange/gekkoBroker.js | 11 +- exchange/orders/index.js | 4 +- exchange/orders/limit.js | 5 + exchange/orders/sticky.js | 1 + exchange/package-lock.json | 302 ++-- exchange/package.json | 5 +- exchange/wrappers/binance-markets.json | 236 ++- exchange/wrappers/binance.js | 51 +- exchange/wrappers/bitfinex-markets.json | 508 ++++--- exchange/wrappers/bitfinex.js | 1 - exchange/wrappers/coinfalcon-markets.json | 480 ------- exchange/wrappers/coinfalcon.js | 4 +- exchange/wrappers/{bitx.js => luno.js} | 231 +-- exchange/wrappers/poloniex.js | 18 +- importers/exchanges/bitfinex.js | 8 +- importers/exchanges/{bitx.js => luno.js} | 10 +- package-lock.json | 1269 +++++------------ package.json | 9 +- plugins.js | 21 +- plugins/backtestResultExporter.js | 33 +- .../performanceAnalyzer.js | 27 +- plugins/sqlite/handle.js | 2 +- plugins/telegrambot.js | 40 + plugins/trader/trader.js | 10 +- plugins/tradingAdvisor/baseTradingMethod.js | 2 +- sample-config.js | 282 ++-- strategies/DEBUG_toggle-advice.js | 4 +- strategies/tulip-adx.js | 3 +- web/vue/dist/app.9aa8dda3.js | 2 + web/vue/dist/app.9aa8dda3.js.map | 1 + web/vue/dist/app.bd655fc0.js | 2 - web/vue/dist/app.bd655fc0.js.map | 1 - web/vue/dist/index.html | 2 +- web/vue/dist/vendor/furtive.min.css | 2 +- web/vue/package.json | 2 +- web/vue/public/vendor/furtive.min.css | 2 +- web/vue/src/components/gekko/singleGekko.vue | 8 +- web/vue/src/components/layout/home.vue | 4 +- web/vue/src/d3/chart4.js | 12 +- 52 files changed, 1657 insertions(+), 2124 deletions(-) rename exchange/wrappers/{bitx.js => luno.js} (54%) rename importers/exchanges/{bitx.js => luno.js} (87%) create mode 100644 web/vue/dist/app.9aa8dda3.js create mode 100644 web/vue/dist/app.9aa8dda3.js.map delete mode 100644 web/vue/dist/app.bd655fc0.js delete mode 100644 web/vue/dist/app.bd655fc0.js.map diff --git a/core/budfox/marketFetcher.js b/core/budfox/marketFetcher.js index 3e0c5e944..2e6c6575d 100644 --- a/core/budfox/marketFetcher.js +++ b/core/budfox/marketFetcher.js @@ -20,7 +20,7 @@ const TradeBatcher = require(util.dirs().budfox + 'tradeBatcher'); const Fetcher = function(config) { if(!_.isObject(config)) - throw 'TradeFetcher expects a config'; + throw new Error('TradeFetcher expects a config'); const exchangeName = config.watch.exchange.toLowerCase(); const DataProvider = require(util.dirs().gekko + 'exchange/wrappers/' + exchangeName); diff --git a/core/budfox/tradeBatcher.js b/core/budfox/tradeBatcher.js index b6b5e13d1..20bdb16cb 100644 --- a/core/budfox/tradeBatcher.js +++ b/core/budfox/tradeBatcher.js @@ -37,7 +37,7 @@ var log = require('../log'); var TradeBatcher = function(tid) { if(!_.isString(tid)) - throw 'tid is not a string'; + throw new Error('tid is not a string'); _.bindAll(this); this.tid = tid; @@ -49,7 +49,7 @@ util.makeEventEmitter(TradeBatcher); TradeBatcher.prototype.write = function(batch) { if(!_.isArray(batch)) - throw 'batch is not an array'; + throw new Error('batch is not an array'); if(_.isEmpty(batch)) return log.debug('Trade fetch came back empty.'); diff --git a/core/candleBatcher.js b/core/candleBatcher.js index dd64d456b..0cb5ade07 100644 --- a/core/candleBatcher.js +++ b/core/candleBatcher.js @@ -14,7 +14,7 @@ var util = require(__dirname + '/util'); var CandleBatcher = function(candleSize) { if(!_.isNumber(candleSize)) - throw 'candleSize is not a number'; + throw new Error('candleSize is not a number'); this.candleSize = candleSize; this.smallCandles = []; @@ -26,8 +26,9 @@ var CandleBatcher = function(candleSize) { util.makeEventEmitter(CandleBatcher); CandleBatcher.prototype.write = function(candles) { - if(!_.isArray(candles)) - throw 'candles is not an array'; + if(!_.isArray(candles)) { + throw new Error('candles is not an array'); + } this.emitted = 0; diff --git a/core/pipeline.js b/core/pipeline.js index dd0cfe092..6cb31e380 100644 --- a/core/pipeline.js +++ b/core/pipeline.js @@ -88,6 +88,8 @@ var pipeline = (settings) => { _.each( pluginSubscriptions.filter(s => _.isArray(s.emitter)), subscription => { + // cache full list + subscription.emitters = subscription.emitter; var singleEventEmitters = subscription.emitter .filter( s => _.size(plugins.filter(p => p.meta.slug === s)) @@ -110,18 +112,28 @@ var pipeline = (settings) => { _.each(pluginSubscriptions, function(sub) { if(plugin[sub.handler]) { - // if a plugin wants to listen // to something disabled if(!emitters[sub.emitter]) { if(!plugin.meta.greedy) { - log.warn([ + + let emitterMessage; + if(sub.emitters) { + emitterMessage = 'all of the emitting plugins [ '; + emitterMessage += sub.emitters.join(', '); + emitterMessage += ' ] are disabled.'; + } else { + emitterMessage += 'the emitting plugin (' + sub.emitter; + emitterMessage += ')is disabled.' + } + + log.error([ plugin.meta.name, - 'wanted to listen to the', - sub.emitter + ',', - 'however the', - sub.emitter, - 'is disabled.' + 'wanted to listen to event', + sub.event + ',', + 'however', + emitterMessage, + plugin.meta.name + ' might malfunction because of it.' ].join(' ')); } return; diff --git a/core/talib.js b/core/talib.js index 117da8b1f..38fdaaccc 100644 --- a/core/talib.js +++ b/core/talib.js @@ -36,13 +36,15 @@ var verifyParams = (methodName, params) => { var requiredParams = methods[methodName].requires; _.each(requiredParams, paramName => { - if(!_.has(params, paramName)) - throw talibError + methodName + ' requires ' + paramName + '.'; + if(!_.has(params, paramName)) { + throw new Error(talibError + methodName + ' requires ' + paramName + '.'); + } var val = params[paramName]; - if(!_.isNumber(val)) - throw talibError + paramName + ' needs to be a number'; + if(!_.isNumber(val)) { + throw new Error(talibError + paramName + ' needs to be a number'); + } }); } diff --git a/core/tools/dataStitcher.js b/core/tools/dataStitcher.js index 6b739ba7e..fb3995ade 100644 --- a/core/tools/dataStitcher.js +++ b/core/tools/dataStitcher.js @@ -197,6 +197,10 @@ Stitcher.prototype.checkExchangeTrades = function(since, next) { var watcher = new DataProvider(exchangeConfig); watcher.getTrades(since, function(e, d) { + if(e) { + util.die(e.message); + } + if(_.isEmpty(d)) return util.die( `Gekko tried to retrieve data since ${since.format('YYYY-MM-DD HH:mm:ss')}, however diff --git a/core/tulind.js b/core/tulind.js index a46a5fb80..04b6766ff 100644 --- a/core/tulind.js +++ b/core/tulind.js @@ -32,13 +32,15 @@ var verifyParams = (methodName, params) => { var requiredParams = methods[methodName].requires; _.each(requiredParams, paramName => { - if(!_.has(params, paramName)) - throw tulindError + methodName + ' requires ' + paramName + '.'; + if(!_.has(params, paramName)) { + throw new Error(tulindError + methodName + ' requires ' + paramName + '.'); + } var val = params[paramName]; - if(!_.isNumber(val)) - throw tulindError + paramName + ' needs to be a number'; + if(!_.isNumber(val)) { + throw new Error(tulindError + paramName + ' needs to be a number'); + } }); } diff --git a/core/workers/datasetScan/parent.js b/core/workers/datasetScan/parent.js index edc08f9c9..c345610b3 100644 --- a/core/workers/datasetScan/parent.js +++ b/core/workers/datasetScan/parent.js @@ -20,7 +20,10 @@ module.exports = function(config, done) { if(err) return done(err); - async.eachLimit(markets, os.cpus().length, (market, next) => { + let numCPUCores = os.cpus().length; + if(numCPUCores === undefined) + numCPUCores = 1; + async.eachLimit(markets, numCPUCores, (market, next) => { let marketConfig = _.clone(config); marketConfig.watch = market; @@ -48,4 +51,4 @@ module.exports = function(config, done) { done(err, resp); }) }); -} \ No newline at end of file +} diff --git a/docs/gekko-broker/introduction.md b/docs/gekko-broker/introduction.md index e0a425c76..71f777086 100644 --- a/docs/gekko-broker/introduction.md +++ b/docs/gekko-broker/introduction.md @@ -30,19 +30,7 @@ This library allows you to: ## Status -Early WIP. All communication is via the REST APIs of exchanges. Not all exchanges are supported. - -Currently fully supported exchanges: - -- Binance -- GDAX -- Poloniex -- Coinfalcon -- Kraken - -Currently exchanges with limited support: - -- bittrex +Early WIP. All communication is via the REST APIs of exchanges. Not all exchanges are supported, see which ones are in [this doc](../introduction/supported_exchanges.md). ## Order types @@ -62,6 +50,78 @@ TODO: - Stop - If Touched (stop but opposite direction) +### Example + +Set up a Gekko Broker instance: + + // from the gekko repo (make sure you have deps installed + // inside the exchange folder). + const Broker = require('../gekko/exchange/GekkoBroker'); + // or from NPM + // const Broker = require('gekko-broker'); + + const binance = new Broker({ + currency: 'USDT', + asset: 'BTC', + private: true, + + exchange: 'binance', + key: 'x', // add your API key + secret: 'y' // add your API secret + }); + +Now we have an instance that can create a [sticky order](./sticky_order.md): + + const type = 'sticky'; + const side = 'buy'; + const amount = 1; + + const order = binance.createOrder(type, side, amount); + + order.on('statusChange', s => console.log(now(), 'new status', s)); + order.on('fill', s => console.log(now(), 'filled', s)); + order.on('error', s => console.log(now(), 'error!', e)); + order.on('completed', a => { + console.log(new Date, 'completed!'); + order.createSummary((err, s) => { + console.log(new Date, 'summary:'); + console.log(JSON.stringify(s, null, 2)); + }); + }); + +This one doesn't have an upper limit price for what it will buy at. It will stick it's bid offer at BBO until it's filled. If you have a limit in mind you can specify it when creating, do this instead: + + const order = binance.createOrder(type, side, amount, { limit: 100 }); + +It will never offer to buy for more than 100, even if the BBO is above 100 (the bid will end up deep in the book). + +At any point in time you can change the limit (or the amount), for example: + + order.moveLimit(120); + +Running the above example (without setting a limit and moving it) will yield: + + root@foxtail:~/gb/nusadua# node b + 2018-07-29 03:46:02 new status SUBMITTED + 2018-07-29 03:46:02 new status OPEN + 2018-07-29 03:46:04 filled 1 + 2018-07-29 03:46:04 new status FILLED + 2018-07-29T03:46:04.127Z 'completed!' + 2018-07-29T03:46:04.358Z 'summary:' + { + "price": 0.0017479, + "amount": 1, + "date": "2018-07-29T03:46:02.576Z", + "side": "buy", + "orders": 1, + "fees": { + "BNB": 0.00075 + }, + "feePercent": 0.075 + } + +NOTE: not all status changes are documented and more events are planned but not implemented. + ### TODO - finish all exchange integrations that gekko supports diff --git a/docs/internals/events.md b/docs/internals/events.md index 403b829b1..2b8a3612b 100644 --- a/docs/internals/events.md +++ b/docs/internals/events.md @@ -106,7 +106,7 @@ and will start signaling advice. - What: An object describing new notification from your strategy - When: when the strategy emit using `this.notify()` function -- Subscribe: You can subscribe to this event by registering the `stratNotification` method. +- Subscribe: You can subscribe to this event by registering the `processStratNotification` method. - Example: { date: [moment object of the start time of the candle], diff --git a/docs/introduction/supported_exchanges.md b/docs/introduction/supported_exchanges.md index 241e7b37d..baf8b9e35 100644 --- a/docs/introduction/supported_exchanges.md +++ b/docs/introduction/supported_exchanges.md @@ -22,7 +22,7 @@ Gekko is able to directly communicate with the APIs of a number of exchanges. Ho | [Okcoin.cn][11]* | ✓ | ✓ | ✕ | China, see [#352][20] | | [Cex.io][12]* | ✓ | ✕ | ✕ | | | [BTC Markets][13]* | ✓ | ✓ | ✕ | | -| [bitX][14] | ✓ | ✓ | ✓ | aka Luno | +| [Luno][14] | ✓ | ✓ | ✓ | previously BitX | | [lakeBTC][15]* | ✓ | ✕ | ✕ | | | [meXBT][16]* | ✓ | ✕ | ✕ | see [here][21] | | [zaif][17]* | ✓ | ✕ | ✕ | | @@ -60,5 +60,3 @@ Gekko is able to directly communicate with the APIs of a number of exchanges. Ho [24]: https://www.binance.com/?ref=11236330 [25]: https://coinfalcon.com/?ref=CFJSQBMXZZDS [26]: https://github.com/askmike/gekko/pull/2310 - - diff --git a/docs/strategies/talib_indicators.md b/docs/strategies/talib_indicators.md index d0c14ebf0..886d53b1c 100644 --- a/docs/strategies/talib_indicators.md +++ b/docs/strategies/talib_indicators.md @@ -10,7 +10,7 @@ Open your terminal. Then: ``` cd ~/gekko -npm install talib +npm install talib --no-save ``` ## Example diff --git a/docs/strategies/tulip_indicators.md b/docs/strategies/tulip_indicators.md index 92ed8cfd7..2408ab8e9 100644 --- a/docs/strategies/tulip_indicators.md +++ b/docs/strategies/tulip_indicators.md @@ -10,7 +10,7 @@ Open your terminal. Then: ``` cd ~/gekko -npm install tulind +npm install tulind --no-save ``` ## Example diff --git a/exchange/gekkoBroker.js b/exchange/gekkoBroker.js index 3a2a10d69..09706a52a 100644 --- a/exchange/gekkoBroker.js +++ b/exchange/gekkoBroker.js @@ -24,18 +24,14 @@ class Broker { if(config.private) { if(this.cantTrade()) { - throw this.cantTrade(); + throw new Error(this.cantTrade()); } } else { if(this.cantMonitor()) { - throw this.cantMonitor(); + throw new Error(this.cantMonitor()); } } - if(config.private && this.cantTrade()) { - throw this.cantTrade(); - } - this.orders = { // contains current open orders open: [], @@ -81,8 +77,9 @@ class Broker { return; } - if(this.cantTrade()) + if(this.cantTrade()) { throw new errors.ExchangeError(this.cantTrade()); + } this.syncPrivateData(); } diff --git a/exchange/orders/index.js b/exchange/orders/index.js index 6b28034f5..4fe87d6f1 100644 --- a/exchange/orders/index.js +++ b/exchange/orders/index.js @@ -1,7 +1,5 @@ const sticky = require('./sticky'); -const limit = require('./limit'); module.exports = { - sticky, - limit + sticky } \ No newline at end of file diff --git a/exchange/orders/limit.js b/exchange/orders/limit.js index b229caa5e..a289f9031 100644 --- a/exchange/orders/limit.js +++ b/exchange/orders/limit.js @@ -1,3 +1,8 @@ +// NOTE: this is currently broken, see +// @link https://github.com/askmike/gekko/issues/2398 + +throw ':('; + /* The limit order is a simple order: - It is created at the specified price diff --git a/exchange/orders/sticky.js b/exchange/orders/sticky.js index 138aa82f5..385f27376 100644 --- a/exchange/orders/sticky.js +++ b/exchange/orders/sticky.js @@ -203,6 +203,7 @@ class StickyOrder extends BaseOrder { throw err; this.ticker = ticker; + this.emit('ticker', ticker); const bookSide = this.side === 'buy' ? 'bid' : 'ask'; // note: might be string VS float diff --git a/exchange/package-lock.json b/exchange/package-lock.json index 9be58c4ca..faaaf981d 100644 --- a/exchange/package-lock.json +++ b/exchange/package-lock.json @@ -1,6 +1,6 @@ { "name": "gekko-broker", - "version": "0.6.2", + "version": "0.6.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -14,13 +14,13 @@ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", "requires": { - "@types/node": "10.1.2" + "@types/node": "10.5.7" } }, "@types/node": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.1.2.tgz", - "integrity": "sha512-bjk1RIeZBCe/WukrFToIVegOf91Pebr8cXYBwLBIsfiGWVQ+ifwWsT59H3RxrWzWrzd1l/Amk1/ioY5Fq3/bpA==" + "version": "10.5.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.7.tgz", + "integrity": "sha512-VkKcfuitP+Nc/TaTFH0B8qNmn+6NbI6crLkQonbedViVz7O2w8QV/GERPlkJ4bg42VGHiEWa31CoTOPs1q6z1w==" }, "@types/request": { "version": "2.47.0", @@ -29,7 +29,7 @@ "requires": { "@types/caseless": "0.12.1", "@types/form-data": "2.2.1", - "@types/node": "10.1.2", + "@types/node": "10.5.7", "@types/tough-cookie": "2.3.3" } }, @@ -50,9 +50,12 @@ } }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "2.1.2" + } }, "assert-plus": { "version": "1.0.0", @@ -60,9 +63,9 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "requires": { "lodash": "4.17.10" } @@ -83,23 +86,23 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.6", + "core-js": "2.5.7", "regenerator-runtime": "0.11.1" } }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "optional": true, "requires": { "tweetnacl": "0.14.5" @@ -115,8 +118,8 @@ "resolved": "https://registry.npmjs.org/binance/-/binance-1.3.3.tgz", "integrity": "sha512-1eV2QUoH/Z0FZPiGjigJg4udXV9Uu6Clr0Sg1xsX3xStgPfzXz0juA3mllQIiIaHx7dmfAQgEiZIyeJLx5ajag==", "requires": { - "request": "2.86.0", - "underscore": "1.9.0", + "request": "2.87.0", + "underscore": "1.9.1", "ws": "3.3.3" } }, @@ -136,22 +139,27 @@ "debug": "2.6.9", "lodash": "4.17.10", "lodash.throttle": "4.1.1", - "request": "2.86.0", + "request": "2.87.0", "request-promise": "4.2.2", "ws": "3.3.3" } }, + "bitx": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/bitx/-/bitx-1.5.1.tgz", + "integrity": "sha1-+h9cYuhIEFse1Pj2tIIwd4jmMq0=" + }, "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", + "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", "requires": { - "hoek": "4.2.1" + "hoek": "0.9.1" } }, "caseless": { @@ -169,7 +177,7 @@ "resolved": "https://registry.npmjs.org/cloudscraper/-/cloudscraper-1.5.0.tgz", "integrity": "sha512-bZagLhj59+N6Z6lD9zRksYu87GthLwXdKARULi4RZ6UVpotH39ruSFN3UQmw3uuqoj00iDxkGrapAvxeurmlQA==", "requires": { - "request": "2.86.0" + "request": "2.87.0" } }, "co": { @@ -178,9 +186,9 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "coinfalcon": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/coinfalcon/-/coinfalcon-1.0.3.tgz", - "integrity": "sha512-dzyLdeDGY9Fg4zewCFolK/TjB/Mrf9tpBupx7IAqhZcYH6jY5z7xxMywIgJnf4bbRKMIEnJ2GJFqgue9M1nwnw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/coinfalcon/-/coinfalcon-1.0.5.tgz", + "integrity": "sha512-TyzLmcE2Vmll6oCyZSdEkla/thVZPjLxhDwlPyYKB5/Uv5wf/dzwox3Q2DrnJcOKRAQ1bKcHWmR2dFQKaEoK+A==", "requires": { "babel-runtime": "6.26.0" } @@ -194,9 +202,9 @@ } }, "core-js": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", - "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==" + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" }, "core-util-is": { "version": "1.0.2", @@ -213,21 +221,12 @@ } }, "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", + "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", + "optional": true, "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "requires": { - "hoek": "4.2.1" - } - } + "boom": "0.4.2" } }, "ctype": { @@ -257,7 +256,7 @@ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { - "mimic-response": "1.0.0" + "mimic-response": "1.0.1" } }, "delayed-stream": { @@ -271,12 +270,13 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "exit-on-epipe": { @@ -285,9 +285,9 @@ "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extsprintf": { "version": "1.3.0", @@ -316,7 +316,7 @@ "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "mime-types": "2.1.19" } }, "gdax": { @@ -327,7 +327,7 @@ "@types/request": "2.47.0", "bignumber.js": "5.0.0", "bintrees": "1.0.2", - "request": "2.86.0", + "request": "2.87.0", "ws": "4.1.0" }, "dependencies": { @@ -347,6 +347,18 @@ } } }, + "gekko-bittrex": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/gekko-bittrex/-/gekko-bittrex-0.8.5.tgz", + "integrity": "sha512-yA4FV1MjVXIX5/vpKGtZnh28OG9Mj+R2Dcb9v71OBPan6uHw4HYfX8gM6RBwlLmiVGxhyg5uDsHBiYab9yr86A==", + "requires": { + "cloudscraper": "1.5.0", + "jsonic": "0.3.0", + "object-assign": "4.1.1", + "request": "2.87.0", + "signalr-client": "0.0.17" + } + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -409,20 +421,21 @@ } }, "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz", + "integrity": "sha1-uQuxaYByhUEdp//LjdJZhQLTtS0=", + "optional": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "0.4.2", + "cryptiles": "0.2.2", + "hoek": "0.9.1", + "sntp": "0.2.4" } }, "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", + "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=" }, "http-signature": { "version": "1.2.0", @@ -431,7 +444,7 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.14.1" + "sshpk": "1.14.2" } }, "is-object": { @@ -540,27 +553,27 @@ "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=" }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "requires": { - "mime-db": "1.33.0" + "mime-db": "1.35.0" } }, "mimic-response": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", - "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "moment": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", - "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" }, "ms": { "version": "2.0.0", @@ -572,18 +585,6 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, - "node.bittrex.api": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node.bittrex.api/-/node.bittrex.api-1.0.0.tgz", - "integrity": "sha1-hN/4wIMWAW1BB6zazZVbsI/74/c=", - "requires": { - "cloudscraper": "1.5.0", - "jsonic": "0.3.0", - "object-assign": "4.1.1", - "request": "2.86.0", - "signalr-client": "0.0.17" - } - }, "nonce": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/nonce/-/nonce-1.0.4.tgz", @@ -653,14 +654,6 @@ "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", "optional": true }, - "boom": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", - "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", - "requires": { - "hoek": "0.9.1" - } - }, "combined-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", @@ -670,15 +663,6 @@ "delayed-stream": "0.0.5" } }, - "cryptiles": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", - "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", - "optional": true, - "requires": { - "boom": "0.4.2" - } - }, "delayed-stream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", @@ -701,23 +685,6 @@ "mime": "1.2.11" } }, - "hawk": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz", - "integrity": "sha1-uQuxaYByhUEdp//LjdJZhQLTtS0=", - "optional": true, - "requires": { - "boom": "0.4.2", - "cryptiles": "0.2.2", - "hoek": "0.9.1", - "sntp": "0.2.4" - } - }, - "hoek": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", - "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=" - }, "http-signature": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", @@ -764,15 +731,6 @@ "tunnel-agent": "0.3.0" } }, - "sntp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", - "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", - "optional": true, - "requires": { - "hoek": "0.9.1" - } - }, "tunnel-agent": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz", @@ -807,31 +765,30 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "request": { - "version": "2.86.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.86.0.tgz", - "integrity": "sha512-BQZih67o9r+Ys94tcIW4S7Uu8pthjrQVxhsZ/weOwHbDfACxvIyvnAbzFQxjy1jMtvFSzv5zf4my6cZsJBbVzw==", + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { "aws-sign2": "0.7.0", - "aws4": "1.7.0", + "aws4": "1.8.0", "caseless": "0.12.0", "combined-stream": "1.0.6", - "extend": "3.0.1", + "extend": "3.0.2", "forever-agent": "0.6.1", "form-data": "2.3.2", "har-validator": "5.0.3", - "hawk": "6.0.2", "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", + "mime-types": "2.1.19", "oauth-sign": "0.8.2", "performance-now": "2.1.0", "qs": "6.5.2", "safe-buffer": "5.1.2", "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "uuid": "3.3.2" } }, "request-promise": { @@ -843,16 +800,14 @@ "request-promise-core": "1.1.1", "stealthy-require": "1.1.1", "tough-cookie": "2.3.4" - }, - "dependencies": { - "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", - "requires": { - "lodash": "4.17.10" - } - } + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "requires": { + "lodash": "4.17.10" } }, "retry": { @@ -865,6 +820,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "signalr-client": { "version": "0.0.17", "resolved": "https://registry.npmjs.org/signalr-client/-/signalr-client-0.0.17.tgz", @@ -874,25 +834,27 @@ } }, "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", + "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", + "optional": true, "requires": { - "hoek": "4.2.1" + "hoek": "0.9.1" } }, "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { - "asn1": "0.2.3", + "asn1": "0.2.4", "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", + "bcrypt-pbkdf": "1.0.2", "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", + "ecc-jsbn": "0.1.2", "getpass": "0.1.7", "jsbn": "0.1.1", + "safer-buffer": "2.1.2", "tweetnacl": "0.14.5" } }, @@ -942,9 +904,9 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, "underscore": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.0.tgz", - "integrity": "sha512-4IV1DSSxC1QK48j9ONFK1MoIAKKkbE8i7u55w2R6IqBqbT7A/iG7aZBCR2Bi8piF0Uz+i/MG1aeqLwl/5vqF+A==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, "url-parse-lax": { "version": "1.0.0", @@ -960,9 +922,9 @@ "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "verror": { "version": "1.10.0", diff --git a/exchange/package.json b/exchange/package.json index 9a795b4fc..ebf2d6394 100644 --- a/exchange/package.json +++ b/exchange/package.json @@ -1,6 +1,6 @@ { "name": "gekko-broker", - "version": "0.6.3", + "version": "0.6.4", "description": "Gekko's order execution library for bitcoin & crypto exchanges", "main": "gekkoBroker.js", "scripts": { @@ -23,6 +23,7 @@ "async": "^2.6.0", "binance": "^1.3.3", "bitfinex-api-node": "^2.0.0-beta", + "bitx": "^1.5.0", "bluebird": "^3.5.1", "coinfalcon": "^1.0.3", "gdax": "^0.7.0", @@ -32,6 +33,6 @@ "poloniex.js": "git://github.com/askmike/poloniex.js.git#69f5e254353e66d135070844fc3328efcbe3641c", "request-promise": "^4.2.2", "retry": "^0.12.0", - "node.bittrex.api": "^1.0.0" + "gekko-bittrex": "^0.8.5" } } diff --git a/exchange/wrappers/binance-markets.json b/exchange/wrappers/binance-markets.json index 4520cd2ef..c26a20cc0 100644 --- a/exchange/wrappers/binance-markets.json +++ b/exchange/wrappers/binance-markets.json @@ -1,7 +1,6 @@ { "assets": [ "NULS", - "VEN", "BNB", "NEO", "LINK", @@ -39,6 +38,7 @@ "AION", "AMB", "APPC", + "ARDR", "ARK", "ARN", "BAT", @@ -60,6 +60,7 @@ "DENT", "DGD", "DLT", + "DOCK", "EDO", "ELF", "ENG", @@ -71,6 +72,7 @@ "GTO", "GVT", "GXS", + "HOT", "HSR", "ICX", "INS", @@ -101,6 +103,7 @@ "PIVX", "POA", "POE", + "POLY", "POWR", "PPT", "QKC", @@ -125,6 +128,7 @@ "TRIG", "TRX", "TUSD", + "VET", "VIA", "VIB", "VIBE", @@ -156,22 +160,11 @@ "NULS" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } }, - { - "pair": [ - "BNB", - "VEN" - ], - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 1 - } - }, { "pair": [ "BTC", @@ -684,7 +677,7 @@ "ADA" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -728,7 +721,7 @@ "ADX" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -761,7 +754,7 @@ "AE" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -794,7 +787,7 @@ "AGI" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -827,7 +820,7 @@ "AION" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -860,7 +853,7 @@ "AMB" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -893,7 +886,7 @@ "APPC" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -920,6 +913,39 @@ "order": 0.01 } }, + { + "pair": [ + "BNB", + "ARDR" + ], + "minimalOrder": { + "amount": 0.1, + "price": 0.00001, + "order": 1 + } + }, + { + "pair": [ + "BTC", + "ARDR" + ], + "minimalOrder": { + "amount": 1, + "price": 1e-8, + "order": 0.001 + } + }, + { + "pair": [ + "ETH", + "ARDR" + ], + "minimalOrder": { + "amount": 1, + "price": 1e-8, + "order": 0.01 + } + }, { "pair": [ "BTC", @@ -981,7 +1007,7 @@ "BAT" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1102,7 +1128,7 @@ "BCPT" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1135,7 +1161,7 @@ "BLZ" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1190,7 +1216,7 @@ "BRD" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1245,7 +1271,7 @@ "BTS" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1344,7 +1370,7 @@ "CMT" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1410,7 +1436,7 @@ "CVC" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1531,7 +1557,7 @@ "DLT" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1569,6 +1595,28 @@ "order": 0.001 } }, + { + "pair": [ + "BTC", + "DOCK" + ], + "minimalOrder": { + "amount": 1, + "price": 1e-8, + "order": 0.001 + } + }, + { + "pair": [ + "ETH", + "DOCK" + ], + "minimalOrder": { + "amount": 1, + "price": 1e-8, + "order": 0.01 + } + }, { "pair": [ "BTC", @@ -1795,7 +1843,7 @@ "GNT" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1850,7 +1898,7 @@ "GTO" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -1921,6 +1969,28 @@ "order": 0.01 } }, + { + "pair": [ + "BTC", + "HOT" + ], + "minimalOrder": { + "amount": 1, + "price": 1e-8, + "order": 0.001 + } + }, + { + "pair": [ + "ETH", + "HOT" + ], + "minimalOrder": { + "amount": 1, + "price": 1e-8, + "order": 0.01 + } + }, { "pair": [ "BTC", @@ -1960,7 +2030,7 @@ "ICX" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2048,7 +2118,7 @@ "IOTA" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2158,7 +2228,7 @@ "LOOM" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2323,7 +2393,7 @@ "MCO" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2488,7 +2558,7 @@ "NAS" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2521,7 +2591,7 @@ "NAV" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2587,7 +2657,7 @@ "NEBL" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2658,6 +2728,17 @@ "order": 0.01 } }, + { + "pair": [ + "USDT", + "NULS" + ], + "minimalOrder": { + "amount": 0.01, + "price": 0.0001, + "order": 10 + } + }, { "pair": [ "BNB", @@ -2708,7 +2789,7 @@ "ONT" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2785,7 +2866,7 @@ "PIVX" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2818,7 +2899,7 @@ "POA" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -2867,13 +2948,35 @@ "order": 0.01 } }, + { + "pair": [ + "BNB", + "POLY" + ], + "minimalOrder": { + "amount": 0.1, + "price": 0.00001, + "order": 1 + } + }, + { + "pair": [ + "BTC", + "POLY" + ], + "minimalOrder": { + "amount": 1, + "price": 1e-8, + "order": 0.001 + } + }, { "pair": [ "BNB", "POWR" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3016,7 +3119,7 @@ "QTUM" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3071,7 +3174,7 @@ "RDN" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3159,7 +3262,7 @@ "RLC" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3302,7 +3405,7 @@ "STEEM" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3412,7 +3515,7 @@ "SYS" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3445,7 +3548,7 @@ "THETA" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3522,7 +3625,7 @@ "TRIG" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3588,7 +3691,7 @@ "TUSD" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3626,10 +3729,21 @@ "order": 10 } }, + { + "pair": [ + "BNB", + "VET" + ], + "minimalOrder": { + "amount": 0.1, + "price": 0.00001, + "order": 1 + } + }, { "pair": [ "BTC", - "VEN" + "VET" ], "minimalOrder": { "amount": 1, @@ -3640,7 +3754,7 @@ { "pair": [ "ETH", - "VEN" + "VET" ], "minimalOrder": { "amount": 1, @@ -3651,11 +3765,11 @@ { "pair": [ "USDT", - "VEN" + "VET" ], "minimalOrder": { - "amount": 0.01, - "price": 0.0001, + "amount": 0.1, + "price": 0.00001, "order": 10 } }, @@ -3665,7 +3779,7 @@ "VIA" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3742,7 +3856,7 @@ "WABI" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3775,7 +3889,7 @@ "WAN" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3896,7 +4010,7 @@ "XEM" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3929,7 +4043,7 @@ "XLM" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } @@ -3962,7 +4076,7 @@ "XLM" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 10 } @@ -3995,7 +4109,7 @@ "XRP" ], "minimalOrder": { - "amount": 0.01, + "amount": 0.1, "price": 0.00001, "order": 1 } diff --git a/exchange/wrappers/binance.js b/exchange/wrappers/binance.js index 7bc78e4e5..d5d1520a3 100644 --- a/exchange/wrappers/binance.js +++ b/exchange/wrappers/binance.js @@ -10,7 +10,9 @@ const Binance = require('binance'); const Trader = function(config) { _.bindAll(this, [ 'roundAmount', - 'roundPrice' + 'roundPrice', + 'isValidPrice', + 'isValidLot' ]); if (_.isObject(config)) { @@ -20,6 +22,18 @@ const Trader = function(config) { this.asset = config.asset.toUpperCase(); } + let recvWindow = 6000; + if(config.optimizedConnection) { + // there is a bug in binance's API + // where some requests randomly take + // over a second, this tells binance + // to bail out after 500ms. + // + // As discussed in binance API + // telegram. TODO add link. + recvWindow = 500; + } + this.pair = this.asset + this.currency; this.name = 'binance'; @@ -27,26 +41,30 @@ const Trader = function(config) { return market.pair[0] === this.currency && market.pair[1] === this.asset }); - // Note non standard func: - // - // On binance we might pay fees in BNB - // if we do we CANNOT calculate feePercent - // since we don't track BNB price (when we - // are not trading on a BNB market). - // - // Though we can deduce feePercent based - // on user fee tracked through `this.getFee`. - // Set default here, overwrite in getFee. - this.fee = 0.1 / 100; - this.binance = new Binance.BinanceRest({ key: this.key, secret: this.secret, timeout: 15000, - recvWindow: 60000, // suggested by binance + recvWindow, disableBeautification: false, handleDrift: true, }); + + if(config.key && config.secret) { + // Note non standard func: + // + // On binance we might pay fees in BNB + // if we do we CANNOT calculate feePercent + // since we don't track BNB price (when we + // are not trading on a BNB market). + // + // Though we can deduce feePercent based + // on user fee tracked through `this.getFee`. + // Set default here, overwrite in getFee. + this.fee = 0.1; + // Set the proper fee asap. + this.getFee(_.noop); + } }; const recoverableErrors = [ @@ -58,7 +76,9 @@ const recoverableErrors = [ 'Error -1021', 'Response code 429', 'Response code 5', - 'ETIMEDOUT' + 'Response code 403', + 'ETIMEDOUT', + 'EHOSTUNREACH' ]; const includes = (str, list) => { @@ -279,6 +299,7 @@ Trader.prototype.isValidPrice = function(price) { } Trader.prototype.isValidLot = function(price, amount) { + console.log('isValidLot', this.market.minimalOrder.order, amount * price >= this.market.minimalOrder.order) return amount * price >= this.market.minimalOrder.order; } diff --git a/exchange/wrappers/bitfinex-markets.json b/exchange/wrappers/bitfinex-markets.json index 307168756..670be0cd2 100644 --- a/exchange/wrappers/bitfinex-markets.json +++ b/exchange/wrappers/bitfinex-markets.json @@ -81,7 +81,13 @@ "ATM", "HOT", "DTA", - "IQX" + "IQX", + "WPR", + "ZIL", + "BNT", + "ABS", + "XRA", + "MAN" ], "currencies": [ "USD", @@ -209,7 +215,7 @@ "XMR" ], "minimalOrder": { - "amount": "0.1", + "amount": "0.2", "unit": "asset" } }, @@ -219,7 +225,7 @@ "XMR" ], "minimalOrder": { - "amount": "0.1", + "amount": "0.2", "unit": "asset" } }, @@ -229,7 +235,7 @@ "DSH" ], "minimalOrder": { - "amount": "0.04", + "amount": "0.06", "unit": "asset" } }, @@ -239,7 +245,7 @@ "DSH" ], "minimalOrder": { - "amount": "0.04", + "amount": "0.06", "unit": "asset" } }, @@ -269,7 +275,7 @@ "XRP" ], "minimalOrder": { - "amount": "22.0", + "amount": "30.0", "unit": "asset" } }, @@ -279,7 +285,7 @@ "XRP" ], "minimalOrder": { - "amount": "22.0", + "amount": "30.0", "unit": "asset" } }, @@ -289,7 +295,7 @@ "IOT" ], "minimalOrder": { - "amount": "10.0", + "amount": "16.0", "unit": "asset" } }, @@ -299,7 +305,7 @@ "IOT" ], "minimalOrder": { - "amount": "10.0", + "amount": "16.0", "unit": "asset" } }, @@ -309,7 +315,7 @@ "IOT" ], "minimalOrder": { - "amount": "10.0", + "amount": "16.0", "unit": "asset" } }, @@ -349,7 +355,7 @@ "SAN" ], "minimalOrder": { - "amount": "14.0", + "amount": "16.0", "unit": "asset" } }, @@ -359,7 +365,7 @@ "SAN" ], "minimalOrder": { - "amount": "14.0", + "amount": "16.0", "unit": "asset" } }, @@ -369,7 +375,7 @@ "SAN" ], "minimalOrder": { - "amount": "14.0", + "amount": "16.0", "unit": "asset" } }, @@ -469,7 +475,7 @@ "ETP" ], "minimalOrder": { - "amount": "16.0", + "amount": "10.0", "unit": "asset" } }, @@ -479,7 +485,7 @@ "ETP" ], "minimalOrder": { - "amount": "16.0", + "amount": "10.0", "unit": "asset" } }, @@ -489,7 +495,7 @@ "ETP" ], "minimalOrder": { - "amount": "16.0", + "amount": "10.0", "unit": "asset" } }, @@ -529,7 +535,7 @@ "AVT" ], "minimalOrder": { - "amount": "12.0", + "amount": "16.0", "unit": "asset" } }, @@ -539,7 +545,7 @@ "AVT" ], "minimalOrder": { - "amount": "12.0", + "amount": "16.0", "unit": "asset" } }, @@ -549,7 +555,7 @@ "AVT" ], "minimalOrder": { - "amount": "12.0", + "amount": "16.0", "unit": "asset" } }, @@ -559,7 +565,7 @@ "EDO" ], "minimalOrder": { - "amount": "12.0", + "amount": "16.0", "unit": "asset" } }, @@ -569,7 +575,7 @@ "EDO" ], "minimalOrder": { - "amount": "12.0", + "amount": "16.0", "unit": "asset" } }, @@ -579,7 +585,7 @@ "EDO" ], "minimalOrder": { - "amount": "12.0", + "amount": "16.0", "unit": "asset" } }, @@ -609,7 +615,7 @@ "DAT" ], "minimalOrder": { - "amount": "194.0", + "amount": "256.0", "unit": "asset" } }, @@ -619,7 +625,7 @@ "DAT" ], "minimalOrder": { - "amount": "194.0", + "amount": "256.0", "unit": "asset" } }, @@ -629,7 +635,7 @@ "DAT" ], "minimalOrder": { - "amount": "194.0", + "amount": "256.0", "unit": "asset" } }, @@ -639,7 +645,7 @@ "QSH" ], "minimalOrder": { - "amount": "46.0", + "amount": "68.0", "unit": "asset" } }, @@ -649,7 +655,7 @@ "QSH" ], "minimalOrder": { - "amount": "46.0", + "amount": "68.0", "unit": "asset" } }, @@ -659,7 +665,7 @@ "QSH" ], "minimalOrder": { - "amount": "46.0", + "amount": "68.0", "unit": "asset" } }, @@ -669,7 +675,7 @@ "YYW" ], "minimalOrder": { - "amount": "198.0", + "amount": "374.0", "unit": "asset" } }, @@ -679,7 +685,7 @@ "YYW" ], "minimalOrder": { - "amount": "198.0", + "amount": "374.0", "unit": "asset" } }, @@ -689,7 +695,7 @@ "YYW" ], "minimalOrder": { - "amount": "198.0", + "amount": "374.0", "unit": "asset" } }, @@ -699,7 +705,7 @@ "GNT" ], "minimalOrder": { - "amount": "36.0", + "amount": "54.0", "unit": "asset" } }, @@ -709,7 +715,7 @@ "GNT" ], "minimalOrder": { - "amount": "36.0", + "amount": "54.0", "unit": "asset" } }, @@ -719,7 +725,7 @@ "GNT" ], "minimalOrder": { - "amount": "36.0", + "amount": "54.0", "unit": "asset" } }, @@ -729,7 +735,7 @@ "SNT" ], "minimalOrder": { - "amount": "192.0", + "amount": "216.0", "unit": "asset" } }, @@ -739,7 +745,7 @@ "SNT" ], "minimalOrder": { - "amount": "192.0", + "amount": "216.0", "unit": "asset" } }, @@ -749,7 +755,7 @@ "SNT" ], "minimalOrder": { - "amount": "192.0", + "amount": "216.0", "unit": "asset" } }, @@ -759,7 +765,7 @@ "IOT" ], "minimalOrder": { - "amount": "10.0", + "amount": "16.0", "unit": "asset" } }, @@ -829,7 +835,7 @@ "FUN" ], "minimalOrder": { - "amount": "446.0", + "amount": "554.0", "unit": "asset" } }, @@ -839,7 +845,7 @@ "FUN" ], "minimalOrder": { - "amount": "446.0", + "amount": "554.0", "unit": "asset" } }, @@ -849,7 +855,7 @@ "FUN" ], "minimalOrder": { - "amount": "446.0", + "amount": "554.0", "unit": "asset" } }, @@ -889,7 +895,7 @@ "TNB" ], "minimalOrder": { - "amount": "528.0", + "amount": "652.0", "unit": "asset" } }, @@ -899,7 +905,7 @@ "TNB" ], "minimalOrder": { - "amount": "528.0", + "amount": "652.0", "unit": "asset" } }, @@ -909,7 +915,7 @@ "TNB" ], "minimalOrder": { - "amount": "528.0", + "amount": "652.0", "unit": "asset" } }, @@ -919,7 +925,7 @@ "SPK" ], "minimalOrder": { - "amount": "128.0", + "amount": "184.0", "unit": "asset" } }, @@ -929,7 +935,7 @@ "SPK" ], "minimalOrder": { - "amount": "128.0", + "amount": "184.0", "unit": "asset" } }, @@ -939,7 +945,7 @@ "SPK" ], "minimalOrder": { - "amount": "128.0", + "amount": "184.0", "unit": "asset" } }, @@ -949,7 +955,7 @@ "TRX" ], "minimalOrder": { - "amount": "310.0", + "amount": "410.0", "unit": "asset" } }, @@ -959,7 +965,7 @@ "TRX" ], "minimalOrder": { - "amount": "310.0", + "amount": "410.0", "unit": "asset" } }, @@ -969,7 +975,7 @@ "TRX" ], "minimalOrder": { - "amount": "310.0", + "amount": "410.0", "unit": "asset" } }, @@ -979,7 +985,7 @@ "RCN" ], "minimalOrder": { - "amount": "236.0", + "amount": "322.0", "unit": "asset" } }, @@ -989,7 +995,7 @@ "RCN" ], "minimalOrder": { - "amount": "236.0", + "amount": "322.0", "unit": "asset" } }, @@ -999,7 +1005,7 @@ "RCN" ], "minimalOrder": { - "amount": "236.0", + "amount": "322.0", "unit": "asset" } }, @@ -1009,7 +1015,7 @@ "RLC" ], "minimalOrder": { - "amount": "14.0", + "amount": "28.0", "unit": "asset" } }, @@ -1019,7 +1025,7 @@ "RLC" ], "minimalOrder": { - "amount": "14.0", + "amount": "28.0", "unit": "asset" } }, @@ -1029,7 +1035,7 @@ "RLC" ], "minimalOrder": { - "amount": "14.0", + "amount": "28.0", "unit": "asset" } }, @@ -1039,7 +1045,7 @@ "AID" ], "minimalOrder": { - "amount": "102.0", + "amount": "122.0", "unit": "asset" } }, @@ -1049,7 +1055,7 @@ "AID" ], "minimalOrder": { - "amount": "102.0", + "amount": "122.0", "unit": "asset" } }, @@ -1059,7 +1065,7 @@ "AID" ], "minimalOrder": { - "amount": "102.0", + "amount": "122.0", "unit": "asset" } }, @@ -1069,7 +1075,7 @@ "SNG" ], "minimalOrder": { - "amount": "298.0", + "amount": "452.0", "unit": "asset" } }, @@ -1079,7 +1085,7 @@ "SNG" ], "minimalOrder": { - "amount": "298.0", + "amount": "452.0", "unit": "asset" } }, @@ -1089,7 +1095,7 @@ "SNG" ], "minimalOrder": { - "amount": "298.0", + "amount": "452.0", "unit": "asset" } }, @@ -1259,7 +1265,7 @@ "IOT" ], "minimalOrder": { - "amount": "10.0", + "amount": "16.0", "unit": "asset" } }, @@ -1269,7 +1275,7 @@ "IOT" ], "minimalOrder": { - "amount": "10.0", + "amount": "16.0", "unit": "asset" } }, @@ -1279,7 +1285,7 @@ "IOS" ], "minimalOrder": { - "amount": "484.0", + "amount": "596.0", "unit": "asset" } }, @@ -1289,7 +1295,7 @@ "IOS" ], "minimalOrder": { - "amount": "484.0", + "amount": "596.0", "unit": "asset" } }, @@ -1299,7 +1305,7 @@ "IOS" ], "minimalOrder": { - "amount": "484.0", + "amount": "596.0", "unit": "asset" } }, @@ -1309,7 +1315,7 @@ "AIO" ], "minimalOrder": { - "amount": "12.0", + "amount": "20.0", "unit": "asset" } }, @@ -1319,7 +1325,7 @@ "AIO" ], "minimalOrder": { - "amount": "12.0", + "amount": "20.0", "unit": "asset" } }, @@ -1329,7 +1335,7 @@ "AIO" ], "minimalOrder": { - "amount": "12.0", + "amount": "20.0", "unit": "asset" } }, @@ -1339,7 +1345,7 @@ "REQ" ], "minimalOrder": { - "amount": "156.0", + "amount": "206.0", "unit": "asset" } }, @@ -1349,7 +1355,7 @@ "REQ" ], "minimalOrder": { - "amount": "156.0", + "amount": "206.0", "unit": "asset" } }, @@ -1359,7 +1365,7 @@ "REQ" ], "minimalOrder": { - "amount": "156.0", + "amount": "206.0", "unit": "asset" } }, @@ -1369,7 +1375,7 @@ "RDN" ], "minimalOrder": { - "amount": "14.0", + "amount": "18.0", "unit": "asset" } }, @@ -1379,7 +1385,7 @@ "RDN" ], "minimalOrder": { - "amount": "14.0", + "amount": "18.0", "unit": "asset" } }, @@ -1389,7 +1395,7 @@ "RDN" ], "minimalOrder": { - "amount": "14.0", + "amount": "18.0", "unit": "asset" } }, @@ -1399,7 +1405,7 @@ "LRC" ], "minimalOrder": { - "amount": "38.0", + "amount": "80.0", "unit": "asset" } }, @@ -1409,7 +1415,7 @@ "LRC" ], "minimalOrder": { - "amount": "38.0", + "amount": "80.0", "unit": "asset" } }, @@ -1419,7 +1425,7 @@ "LRC" ], "minimalOrder": { - "amount": "38.0", + "amount": "80.0", "unit": "asset" } }, @@ -1489,7 +1495,7 @@ "CFI" ], "minimalOrder": { - "amount": "290.0", + "amount": "368.0", "unit": "asset" } }, @@ -1499,7 +1505,7 @@ "CFI" ], "minimalOrder": { - "amount": "290.0", + "amount": "368.0", "unit": "asset" } }, @@ -1509,7 +1515,7 @@ "CFI" ], "minimalOrder": { - "amount": "290.0", + "amount": "368.0", "unit": "asset" } }, @@ -1519,7 +1525,7 @@ "AGI" ], "minimalOrder": { - "amount": "100.0", + "amount": "158.0", "unit": "asset" } }, @@ -1529,7 +1535,7 @@ "AGI" ], "minimalOrder": { - "amount": "100.0", + "amount": "158.0", "unit": "asset" } }, @@ -1539,7 +1545,7 @@ "AGI" ], "minimalOrder": { - "amount": "100.0", + "amount": "158.0", "unit": "asset" } }, @@ -1549,7 +1555,7 @@ "BFT" ], "minimalOrder": { - "amount": "138.0", + "amount": "180.0", "unit": "asset" } }, @@ -1559,7 +1565,7 @@ "BFT" ], "minimalOrder": { - "amount": "138.0", + "amount": "180.0", "unit": "asset" } }, @@ -1569,7 +1575,7 @@ "BFT" ], "minimalOrder": { - "amount": "138.0", + "amount": "180.0", "unit": "asset" } }, @@ -1579,7 +1585,7 @@ "MTN" ], "minimalOrder": { - "amount": "178.0", + "amount": "334.0", "unit": "asset" } }, @@ -1589,7 +1595,7 @@ "MTN" ], "minimalOrder": { - "amount": "178.0", + "amount": "334.0", "unit": "asset" } }, @@ -1599,7 +1605,7 @@ "MTN" ], "minimalOrder": { - "amount": "178.0", + "amount": "334.0", "unit": "asset" } }, @@ -1609,7 +1615,7 @@ "ODE" ], "minimalOrder": { - "amount": "66.0", + "amount": "50.0", "unit": "asset" } }, @@ -1619,7 +1625,7 @@ "ODE" ], "minimalOrder": { - "amount": "66.0", + "amount": "50.0", "unit": "asset" } }, @@ -1629,7 +1635,7 @@ "ODE" ], "minimalOrder": { - "amount": "66.0", + "amount": "50.0", "unit": "asset" } }, @@ -1639,7 +1645,7 @@ "ANT" ], "minimalOrder": { - "amount": "6.0", + "amount": "8.0", "unit": "asset" } }, @@ -1649,7 +1655,7 @@ "ANT" ], "minimalOrder": { - "amount": "6.0", + "amount": "8.0", "unit": "asset" } }, @@ -1659,7 +1665,7 @@ "ANT" ], "minimalOrder": { - "amount": "6.0", + "amount": "8.0", "unit": "asset" } }, @@ -1669,7 +1675,7 @@ "DTH" ], "minimalOrder": { - "amount": "302.0", + "amount": "304.0", "unit": "asset" } }, @@ -1679,7 +1685,7 @@ "DTH" ], "minimalOrder": { - "amount": "302.0", + "amount": "304.0", "unit": "asset" } }, @@ -1689,7 +1695,7 @@ "DTH" ], "minimalOrder": { - "amount": "302.0", + "amount": "304.0", "unit": "asset" } }, @@ -1819,7 +1825,7 @@ "XVG" ], "minimalOrder": { - "amount": "470.0", + "amount": "664.0", "unit": "asset" } }, @@ -1829,7 +1835,7 @@ "XVG" ], "minimalOrder": { - "amount": "470.0", + "amount": "664.0", "unit": "asset" } }, @@ -1839,7 +1845,7 @@ "XVG" ], "minimalOrder": { - "amount": "470.0", + "amount": "664.0", "unit": "asset" } }, @@ -1849,7 +1855,7 @@ "XVG" ], "minimalOrder": { - "amount": "470.0", + "amount": "664.0", "unit": "asset" } }, @@ -1859,7 +1865,7 @@ "XVG" ], "minimalOrder": { - "amount": "470.0", + "amount": "664.0", "unit": "asset" } }, @@ -1869,7 +1875,7 @@ "XVG" ], "minimalOrder": { - "amount": "470.0", + "amount": "664.0", "unit": "asset" } }, @@ -1879,7 +1885,7 @@ "BCI" ], "minimalOrder": { - "amount": "6.0", + "amount": "8.0", "unit": "asset" } }, @@ -1889,7 +1895,7 @@ "BCI" ], "minimalOrder": { - "amount": "6.0", + "amount": "8.0", "unit": "asset" } }, @@ -1929,7 +1935,7 @@ "VEN" ], "minimalOrder": { - "amount": "4.0", + "amount": "10.0", "unit": "asset" } }, @@ -1939,7 +1945,7 @@ "VEN" ], "minimalOrder": { - "amount": "4.0", + "amount": "10.0", "unit": "asset" } }, @@ -1949,7 +1955,7 @@ "VEN" ], "minimalOrder": { - "amount": "4.0", + "amount": "10.0", "unit": "asset" } }, @@ -1959,7 +1965,7 @@ "KNC" ], "minimalOrder": { - "amount": "14.0", + "amount": "18.0", "unit": "asset" } }, @@ -1969,7 +1975,7 @@ "KNC" ], "minimalOrder": { - "amount": "14.0", + "amount": "18.0", "unit": "asset" } }, @@ -1979,7 +1985,7 @@ "KNC" ], "minimalOrder": { - "amount": "14.0", + "amount": "18.0", "unit": "asset" } }, @@ -1989,7 +1995,7 @@ "POA" ], "minimalOrder": { - "amount": "62.0", + "amount": "102.0", "unit": "asset" } }, @@ -1999,7 +2005,7 @@ "POA" ], "minimalOrder": { - "amount": "62.0", + "amount": "102.0", "unit": "asset" } }, @@ -2009,7 +2015,7 @@ "POA" ], "minimalOrder": { - "amount": "62.0", + "amount": "102.0", "unit": "asset" } }, @@ -2019,7 +2025,7 @@ "LYM" ], "minimalOrder": { - "amount": "410.0", + "amount": "584.0", "unit": "asset" } }, @@ -2029,7 +2035,7 @@ "LYM" ], "minimalOrder": { - "amount": "410.0", + "amount": "584.0", "unit": "asset" } }, @@ -2039,7 +2045,7 @@ "LYM" ], "minimalOrder": { - "amount": "410.0", + "amount": "584.0", "unit": "asset" } }, @@ -2049,7 +2055,7 @@ "UTK" ], "minimalOrder": { - "amount": "162.0", + "amount": "218.0", "unit": "asset" } }, @@ -2059,7 +2065,7 @@ "UTK" ], "minimalOrder": { - "amount": "162.0", + "amount": "218.0", "unit": "asset" } }, @@ -2069,7 +2075,7 @@ "UTK" ], "minimalOrder": { - "amount": "162.0", + "amount": "218.0", "unit": "asset" } }, @@ -2079,7 +2085,7 @@ "VEE" ], "minimalOrder": { - "amount": "606.0", + "amount": "774.0", "unit": "asset" } }, @@ -2089,7 +2095,7 @@ "VEE" ], "minimalOrder": { - "amount": "606.0", + "amount": "774.0", "unit": "asset" } }, @@ -2099,7 +2105,7 @@ "VEE" ], "minimalOrder": { - "amount": "606.0", + "amount": "774.0", "unit": "asset" } }, @@ -2109,7 +2115,7 @@ "DAD" ], "minimalOrder": { - "amount": "82.0", + "amount": "140.0", "unit": "asset" } }, @@ -2119,7 +2125,7 @@ "DAD" ], "minimalOrder": { - "amount": "82.0", + "amount": "140.0", "unit": "asset" } }, @@ -2129,7 +2135,7 @@ "DAD" ], "minimalOrder": { - "amount": "82.0", + "amount": "140.0", "unit": "asset" } }, @@ -2169,7 +2175,7 @@ "AUC" ], "minimalOrder": { - "amount": "68.0", + "amount": "102.0", "unit": "asset" } }, @@ -2179,7 +2185,7 @@ "AUC" ], "minimalOrder": { - "amount": "68.0", + "amount": "102.0", "unit": "asset" } }, @@ -2189,7 +2195,7 @@ "AUC" ], "minimalOrder": { - "amount": "68.0", + "amount": "102.0", "unit": "asset" } }, @@ -2199,7 +2205,7 @@ "POY" ], "minimalOrder": { - "amount": "36.0", + "amount": "44.0", "unit": "asset" } }, @@ -2209,7 +2215,7 @@ "POY" ], "minimalOrder": { - "amount": "36.0", + "amount": "44.0", "unit": "asset" } }, @@ -2219,7 +2225,7 @@ "POY" ], "minimalOrder": { - "amount": "36.0", + "amount": "44.0", "unit": "asset" } }, @@ -2229,7 +2235,7 @@ "FSN" ], "minimalOrder": { - "amount": "4.0", + "amount": "8.0", "unit": "asset" } }, @@ -2239,7 +2245,7 @@ "FSN" ], "minimalOrder": { - "amount": "4.0", + "amount": "8.0", "unit": "asset" } }, @@ -2249,7 +2255,7 @@ "FSN" ], "minimalOrder": { - "amount": "4.0", + "amount": "8.0", "unit": "asset" } }, @@ -2259,7 +2265,7 @@ "CBT" ], "minimalOrder": { - "amount": "496.0", + "amount": "562.0", "unit": "asset" } }, @@ -2269,7 +2275,7 @@ "CBT" ], "minimalOrder": { - "amount": "496.0", + "amount": "562.0", "unit": "asset" } }, @@ -2279,7 +2285,7 @@ "CBT" ], "minimalOrder": { - "amount": "496.0", + "amount": "562.0", "unit": "asset" } }, @@ -2289,7 +2295,7 @@ "ZCN" ], "minimalOrder": { - "amount": "22.0", + "amount": "52.0", "unit": "asset" } }, @@ -2299,7 +2305,7 @@ "ZCN" ], "minimalOrder": { - "amount": "22.0", + "amount": "52.0", "unit": "asset" } }, @@ -2309,7 +2315,7 @@ "ZCN" ], "minimalOrder": { - "amount": "22.0", + "amount": "52.0", "unit": "asset" } }, @@ -2319,7 +2325,7 @@ "SEN" ], "minimalOrder": { - "amount": "596.0", + "amount": "906.0", "unit": "asset" } }, @@ -2329,7 +2335,7 @@ "SEN" ], "minimalOrder": { - "amount": "596.0", + "amount": "906.0", "unit": "asset" } }, @@ -2339,7 +2345,7 @@ "SEN" ], "minimalOrder": { - "amount": "596.0", + "amount": "906.0", "unit": "asset" } }, @@ -2349,7 +2355,7 @@ "NCA" ], "minimalOrder": { - "amount": "826.0", + "amount": "1352.0", "unit": "asset" } }, @@ -2359,7 +2365,7 @@ "NCA" ], "minimalOrder": { - "amount": "826.0", + "amount": "1352.0", "unit": "asset" } }, @@ -2369,7 +2375,7 @@ "NCA" ], "minimalOrder": { - "amount": "826.0", + "amount": "1352.0", "unit": "asset" } }, @@ -2379,7 +2385,7 @@ "CND" ], "minimalOrder": { - "amount": "358.0", + "amount": "498.0", "unit": "asset" } }, @@ -2389,7 +2395,7 @@ "CND" ], "minimalOrder": { - "amount": "358.0", + "amount": "498.0", "unit": "asset" } }, @@ -2399,7 +2405,7 @@ "CND" ], "minimalOrder": { - "amount": "358.0", + "amount": "498.0", "unit": "asset" } }, @@ -2409,7 +2415,7 @@ "CTX" ], "minimalOrder": { - "amount": "18.0", + "amount": "30.0", "unit": "asset" } }, @@ -2419,7 +2425,7 @@ "CTX" ], "minimalOrder": { - "amount": "18.0", + "amount": "30.0", "unit": "asset" } }, @@ -2429,7 +2435,7 @@ "CTX" ], "minimalOrder": { - "amount": "18.0", + "amount": "30.0", "unit": "asset" } }, @@ -2439,7 +2445,7 @@ "PAI" ], "minimalOrder": { - "amount": "10.0", + "amount": "20.0", "unit": "asset" } }, @@ -2449,7 +2455,7 @@ "PAI" ], "minimalOrder": { - "amount": "10.0", + "amount": "20.0", "unit": "asset" } }, @@ -2459,7 +2465,7 @@ "SEE" ], "minimalOrder": { - "amount": "1654.0", + "amount": "3262.0", "unit": "asset" } }, @@ -2469,7 +2475,7 @@ "SEE" ], "minimalOrder": { - "amount": "1654.0", + "amount": "3262.0", "unit": "asset" } }, @@ -2479,7 +2485,7 @@ "SEE" ], "minimalOrder": { - "amount": "1654.0", + "amount": "3262.0", "unit": "asset" } }, @@ -2489,7 +2495,7 @@ "ESS" ], "minimalOrder": { - "amount": "452.0", + "amount": "798.0", "unit": "asset" } }, @@ -2499,7 +2505,7 @@ "ESS" ], "minimalOrder": { - "amount": "452.0", + "amount": "798.0", "unit": "asset" } }, @@ -2509,7 +2515,7 @@ "ESS" ], "minimalOrder": { - "amount": "452.0", + "amount": "798.0", "unit": "asset" } }, @@ -2519,7 +2525,7 @@ "ATM" ], "minimalOrder": { - "amount": "316.0", + "amount": "516.0", "unit": "asset" } }, @@ -2529,7 +2535,7 @@ "ATM" ], "minimalOrder": { - "amount": "316.0", + "amount": "516.0", "unit": "asset" } }, @@ -2539,7 +2545,7 @@ "ATM" ], "minimalOrder": { - "amount": "316.0", + "amount": "516.0", "unit": "asset" } }, @@ -2549,7 +2555,7 @@ "HOT" ], "minimalOrder": { - "amount": "330.0", + "amount": "562.0", "unit": "asset" } }, @@ -2559,7 +2565,7 @@ "HOT" ], "minimalOrder": { - "amount": "330.0", + "amount": "562.0", "unit": "asset" } }, @@ -2569,7 +2575,7 @@ "HOT" ], "minimalOrder": { - "amount": "330.0", + "amount": "562.0", "unit": "asset" } }, @@ -2579,7 +2585,7 @@ "DTA" ], "minimalOrder": { - "amount": "1560.0", + "amount": "3480.0", "unit": "asset" } }, @@ -2589,7 +2595,7 @@ "DTA" ], "minimalOrder": { - "amount": "1560.0", + "amount": "3480.0", "unit": "asset" } }, @@ -2599,7 +2605,7 @@ "DTA" ], "minimalOrder": { - "amount": "1560.0", + "amount": "3480.0", "unit": "asset" } }, @@ -2609,7 +2615,7 @@ "IQX" ], "minimalOrder": { - "amount": "190.0", + "amount": "578.0", "unit": "asset" } }, @@ -2619,7 +2625,7 @@ "IQX" ], "minimalOrder": { - "amount": "190.0", + "amount": "578.0", "unit": "asset" } }, @@ -2629,7 +2635,157 @@ "IQX" ], "minimalOrder": { - "amount": "190.0", + "amount": "578.0", + "unit": "asset" + } + }, + { + "pair": [ + "USD", + "WPR" + ], + "minimalOrder": { + "amount": "370.0", + "unit": "asset" + } + }, + { + "pair": [ + "BTC", + "WPR" + ], + "minimalOrder": { + "amount": "370.0", + "unit": "asset" + } + }, + { + "pair": [ + "ETH", + "WPR" + ], + "minimalOrder": { + "amount": "370.0", + "unit": "asset" + } + }, + { + "pair": [ + "USD", + "ZIL" + ], + "minimalOrder": { + "amount": "248.0", + "unit": "asset" + } + }, + { + "pair": [ + "BTC", + "ZIL" + ], + "minimalOrder": { + "amount": "248.0", + "unit": "asset" + } + }, + { + "pair": [ + "ETH", + "ZIL" + ], + "minimalOrder": { + "amount": "248.0", + "unit": "asset" + } + }, + { + "pair": [ + "USD", + "BNT" + ], + "minimalOrder": { + "amount": "6.0", + "unit": "asset" + } + }, + { + "pair": [ + "BTC", + "BNT" + ], + "minimalOrder": { + "amount": "6.0", + "unit": "asset" + } + }, + { + "pair": [ + "ETH", + "BNT" + ], + "minimalOrder": { + "amount": "6.0", + "unit": "asset" + } + }, + { + "pair": [ + "USD", + "ABS" + ], + "minimalOrder": { + "amount": "278.0", + "unit": "asset" + } + }, + { + "pair": [ + "ETH", + "ABS" + ], + "minimalOrder": { + "amount": "278.0", + "unit": "asset" + } + }, + { + "pair": [ + "USD", + "XRA" + ], + "minimalOrder": { + "amount": "62.0", + "unit": "asset" + } + }, + { + "pair": [ + "ETH", + "XRA" + ], + "minimalOrder": { + "amount": "62.0", + "unit": "asset" + } + }, + { + "pair": [ + "USD", + "MAN" + ], + "minimalOrder": { + "amount": "30.0", + "unit": "asset" + } + }, + { + "pair": [ + "ETH", + "MAN" + ], + "minimalOrder": { + "amount": "30.0", "unit": "asset" } } diff --git a/exchange/wrappers/bitfinex.js b/exchange/wrappers/bitfinex.js index 534a15e54..d2bd5d6b6 100644 --- a/exchange/wrappers/bitfinex.js +++ b/exchange/wrappers/bitfinex.js @@ -42,7 +42,6 @@ const recoverableErrors = [ '443', '504', '503', - '500', '502', 'Empty response', 'Nonce is too small' diff --git a/exchange/wrappers/coinfalcon-markets.json b/exchange/wrappers/coinfalcon-markets.json index f0da4320f..b2779666f 100644 --- a/exchange/wrappers/coinfalcon-markets.json +++ b/exchange/wrappers/coinfalcon-markets.json @@ -6,34 +6,16 @@ "BTC", "NANO", "BCH", - "TAU", - "CRED", "KIN", - "SPHTX", "TRX", - "VET", "CRPT", - "GNT", - "DCN", - "REBL", - "VIU", - "EBTC", - "TRAC", - "CHSB", "GRLC", "ECA", "XRP", - "WPR", - "XBY", - "WAX", - "DADI", - "REF", "ADA", - "LDN", "DOGE", "STQ", "DASC", - "LET", "EOS", "DTX" ], @@ -88,17 +70,6 @@ "order": 0 } }, - { - "pair": [ - "ETH", - "NANO" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, { "pair": [ "BTC", @@ -121,50 +92,6 @@ "order": 0 } }, - { - "pair": [ - "ETH", - "TAU" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "TAU" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "CRED" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 0.000001, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "CRED" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 0.000001, - "order": 0 - } - }, { "pair": [ "BTC", @@ -187,28 +114,6 @@ "order": 0 } }, - { - "pair": [ - "BTC", - "SPHTX" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "SPHTX" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, { "pair": [ "BTC", @@ -220,39 +125,6 @@ "order": 0 } }, - { - "pair": [ - "ETH", - "TRX" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "VET" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "VET" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, { "pair": [ "BTC", @@ -264,160 +136,6 @@ "order": 0 } }, - { - "pair": [ - "ETH", - "CRPT" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "GNT" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "GNT" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "DCN" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "DCN" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "REBL" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "REBL" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "VIU" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "EBTC" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "EBTC" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "TRAC" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "TRAC" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "CHSB" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "CHSB" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, { "pair": [ "BTC", @@ -429,17 +147,6 @@ "order": 0 } }, - { - "pair": [ - "ETH", - "GRLC" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, { "pair": [ "BTC", @@ -473,127 +180,6 @@ "order": 0 } }, - { - "pair": [ - "ETH", - "XRP" - ], - "minimalOrder": { - "amount": 1e-8, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "WPR" - ], - "minimalOrder": { - "amount": 0.000001, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "WPR" - ], - "minimalOrder": { - "amount": 0.000001, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "XBY" - ], - "minimalOrder": { - "amount": 0.01, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "XBY" - ], - "minimalOrder": { - "amount": 0.01, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "WAX" - ], - "minimalOrder": { - "amount": 0.01, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "WAX" - ], - "minimalOrder": { - "amount": 0.01, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "DADI" - ], - "minimalOrder": { - "amount": 0.000001, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "DADI" - ], - "minimalOrder": { - "amount": 0.000001, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "BTC", - "REF" - ], - "minimalOrder": { - "amount": 0.000001, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "REF" - ], - "minimalOrder": { - "amount": 0.000001, - "price": 1e-8, - "order": 0 - } - }, { "pair": [ "BTC", @@ -616,28 +202,6 @@ "order": 0 } }, - { - "pair": [ - "BTC", - "LDN" - ], - "minimalOrder": { - "amount": 0.00001, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "LDN" - ], - "minimalOrder": { - "amount": 0.00001, - "price": 1e-8, - "order": 0 - } - }, { "pair": [ "BTC", @@ -649,39 +213,6 @@ "order": 0 } }, - { - "pair": [ - "ETH", - "IOT" - ], - "minimalOrder": { - "amount": 0.00001, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "DOGE" - ], - "minimalOrder": { - "amount": 0.00001, - "price": 1e-8, - "order": 0 - } - }, - { - "pair": [ - "ETH", - "STQ" - ], - "minimalOrder": { - "amount": 0.01, - "price": 1e-8, - "order": 0 - } - }, { "pair": [ "BTC", @@ -759,17 +290,6 @@ "order": 0 } }, - { - "pair": [ - "USDT", - "LET" - ], - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 0 - } - }, { "pair": [ "USDT", diff --git a/exchange/wrappers/coinfalcon.js b/exchange/wrappers/coinfalcon.js index ca03977f4..92f82594a 100644 --- a/exchange/wrappers/coinfalcon.js +++ b/exchange/wrappers/coinfalcon.js @@ -49,7 +49,9 @@ const recoverableErrors = [ '408', // "The timestamp 1527996378 is invalid, current timestamp is 1527996441." 'is invalid, current timestamp is', - 'EHOSTUNREACH' + 'EHOSTUNREACH', + // https://github.com/askmike/gekko/issues/2407 + 'We are fixing a few issues, be back shortly.' ]; Trader.prototype.processResponse = function(method, args, next) { diff --git a/exchange/wrappers/bitx.js b/exchange/wrappers/luno.js similarity index 54% rename from exchange/wrappers/bitx.js rename to exchange/wrappers/luno.js index 78a271f9d..c3f697f94 100644 --- a/exchange/wrappers/bitx.js +++ b/exchange/wrappers/luno.js @@ -1,11 +1,12 @@ -const BitX = require("bitx"); +const Luno = require("bitx"); const _ = require('lodash'); const moment = require('moment'); - +const node_util = require('util'); const Errors = require('../exchangeErrors'); const retry = require('../exchangeUtils').retry; +const name = 'Luno'; -const name = 'BitX'; +var tradeAttempt = 0; const Trader = function(config) { if (_.isObject(config)) { @@ -15,13 +16,29 @@ const Trader = function(config) { this.asset = config.asset; this.pair = config.asset + config.currency; } - this.bitx = new BitX(this.key, this.secret, { pair: this.pair }); + this.luno = new Luno(this.key, this.secret, { + pair: this.pair + }); this.market = _.find(Trader.getCapabilities().markets, (market) => { return market.pair[0] === this.currency && market.pair[1] === this.asset; }); - this.interval = 3000; + this.interval = 2000; +} + +const log = function() { + const message = node_util.format.apply(null, _.toArray(arguments)); + console.log(moment().format('YYYY-MM-DD HH:mm:ss') + ' (DEBUG): ' + message); } +Trader.prototype.inspect = function(obj) { + return node_util.inspect(obj, { + showhidden: false, + depth: null, + breakLength: Infinity, + colors: true + }); +}; + const setPrecision = (amount, digits) => { let precision = 100000000; if (Number.isInteger(digits)) precision = Math.pow(10, digits); @@ -38,7 +55,6 @@ const round = (value, decimals = 14) => { const includes = (str, list) => { if (!_.isString(str)) return false; - let result = _.some(list, item => str.includes(item)); return result; } @@ -51,20 +67,45 @@ const recoverableErrors = [ 'NOTFOUND' ]; + const processResponse = function(funcName, callback) { return (error, body) => { + /* BitX Error Codes + Error: BitX error 400: invalid id + Error: BitX error 401: "error":"API key not found","error_code":"ErrAPIKeyNotFound","error_action": + Error: BitX error 429: -- API limit + Error: BitX error 500: Something went wrong, we're looking into it. + */ + if (!error && !body) { - error = new Error('Empty response'); + error = new Error('received empty response'); } if (error) { + log(name, funcName + '() received error -->', error.message); + if (includes(error.message, recoverableErrors)) { error.notFatal = true; } - if (includes(error.message, ['BitX error 429'])) { + if (includes(error.message, ['error 429'])) { error.notFatal = true; - error.backoffDelay = 10000; + error.backoffDelay = 3000; + } + + if (includes(error.message, ['error 500'])) { + error.notFatal = true; + error.backoffDelay = 15000; + } + + if (includes(error.message, ['Insufficient balance'])) { + error.notFatal = true; + error.backoffDelay = 2000; + tradeAttempt++; + if (tradeAttempt >= 3) { + error.notFatal = false; + log(name, funcName + '() giving up after 3 failed attempts.'); + } } return callback(error, undefined); @@ -77,9 +118,11 @@ const processResponse = function(funcName, callback) { //------- Gekko Functions ---------// Trader.prototype.getTicker = function(callback) { + // log(name, 'getTicker()'); + const process = (err, data) => { if (err) { - console.log(name, 'Error: --> ', err); + log(name, 'Error: -->', err); return callback(err); } const ticker = { @@ -87,99 +130,111 @@ Trader.prototype.getTicker = function(callback) { bid: data.bid, spread: round(data.ask - data.bid) }; + log(name, 'getTicker() -->', this.inspect(ticker)); callback(undefined, ticker); }; - const handler = cb => this.bitx.getTicker(processResponse('getTicker', cb)); + const handler = cb => this.luno.getTicker(processResponse('getTicker', cb)); retry(null, handler, process); } Trader.prototype.getFee = function(callback) { - // const process = (err, data) => { - // if (err) { - // console.log(name, 'Error: --> ', err); - // return callback(err); - // } - // callback(undefined, data.taker_fee / 100); - // }; - // const handler = cb => this.bitx.getFee(processResponse('getFee', cb)); - // retry(null, handler, process); + // log(name, 'getFee()'); if (this.pair === 'ETHXBT') - callback(undefined, 0.000025); + return callback(undefined, 0.000025); else if (this.pair === 'XBTIDR') - callback(undefined, 0.00002); + return callback(undefined, 0.00002); else - callback(undefined, 0.0001); + return callback(undefined, 0.0001); + + /* + const process = (err, data) => { + if (err) { + // log(name, 'Error: -->', err); + return callback(err); + } + // log(name, 'getFee() --> fee:', data.taker_fee / 100); + callback(undefined, data.taker_fee / 100); + }; + const handler = cb => this.luno.getFee(processResponse('getFee', cb)); + retry(null, handler, process); + */ } Trader.prototype.getPortfolio = function(callback) { + // log(name, 'getPortfolio()'); + const process = (err, data) => { if (err) { - console.log(name, 'Error: --> ', err); + log(name, 'Error: -->', err); return callback(err); } + const assetProfile = _.find(data.balance, a => a.asset === this.asset); + const currencyProfile = _.find(data.balance, a => a.asset === this.currency); + let assetAmount = round(assetProfile.balance - assetProfile.reserved); + let currencyAmount = round(currencyProfile.balance - currencyProfile.reserved); - let assetAmount = 0, - currencyAmount = 0, - assetHold = 0, - currencyHold = 0; - - _.forEach(data.balance, (t) => { - if (this.asset === t.asset) { - assetAmount = +t.balance; - assetHold = +t.reserved; - } else if (this.currency === t.asset) { - currencyAmount = +t.balance; - currencyHold = +t.reserved; - } - }); + if (!_.isNumber(assetAmount) || _.isNaN(assetAmount)) { + assetAmount = 0; + } - if (!_.isNumber(assetAmount) || _.isNaN(assetAmount) || - !_.isNumber(currencyAmount) || _.isNaN(currencyAmount) - ) { - return console.log(name, 'account balance error: Gekko is unable to trade with ', this.currency.toUpperCase(), ':', currencyAmount, ' or ', this.asset.toUpperCase(), ':', assetAmount); + if (!_.isNumber(currencyAmount) || _.isNaN(currencyAmount)) { + currencyAmount = 0; } - const portfolio = [ - { name: this.asset.toUpperCase(), amount: round(assetAmount - assetHold) }, - { name: this.currency.toUpperCase(), amount: round(currencyAmount - currencyHold) } + const portfolio = [{ + name: this.asset.toUpperCase(), + amount: assetAmount + }, + { + name: this.currency.toUpperCase(), + amount: currencyAmount + } ]; - - callback(err, portfolio); + log(name, 'getPortfolio() --> ' + this.inspect(portfolio)); + callback(undefined, portfolio); }; - const handler = cb => this.bitx.getBalance(processResponse('getPortfolio', cb)); + const handler = cb => this.luno.getBalance(processResponse('getPortfolio', cb)); retry(null, handler, process); } Trader.prototype.buy = function(amount, price, callback) { + log(name, 'buy() amount:', amount, 'price:', price); + + tradeAttempt = 0; amount = round(amount); price = round(price); const process = (err, data) => { if (err) { - console.log(name, 'unable to buy:', err.message); + log(name, 'unable to buy:', err.message); return callback(err); } - callback(err, data.order_id); + log(name, 'buy() order id: -->', data.order_id); + callback(undefined, data.order_id); }; - const handler = cb => this.bitx.postBuyOrder(amount, price, processResponse('buy', cb)); + const handler = cb => this.luno.postBuyOrder(amount, price, processResponse('buy', cb)); retry(null, handler, process); } Trader.prototype.sell = function(amount, price, callback) { + log(name, 'sell() amount:', amount, 'price:', price); + + tradeAttempt = 0; amount = round(amount); price = round(price); const process = (err, data) => { if (err) { - console.log(name, 'unable to sell:', err.message); + log(name, 'unable to sell:', err.message); return callback(err); } - callback(err, data.order_id); + log(name, 'sell() order id: -->', data.order_id); + callback(undefined, data.order_id); }; - const handler = cb => this.bitx.postSellOrder(amount, price, processResponse('sell', cb)); + const handler = cb => this.luno.postSellOrder(amount, price, processResponse('sell', cb)); retry(null, handler, process); } @@ -193,104 +248,119 @@ Trader.prototype.roundPrice = function(price) { } Trader.prototype.getOrder = function(order, callback) { + // log(name, 'getOrder() order id:', order); + if (!order) { return callback('invalid order_id', false); } const process = (err, data) => { if (err) { - console.log(name, 'Error: --> ', err); + log(name, 'Error: -->', err); return callback(err); } - let price = 0; - let amount = 0; + const price = parseFloat(data.limit_price); + const amount = parseFloat(data.base); let date = moment(); - price = parseFloat(data.limit_price); - amount = parseFloat(data.base); + const fees = { + [this.asset]: +data.fee_base, + [this.currency]: +data.fee_counter + }; + const feePercent = round(data.fee_base / data.base * 100, 2); if (data.state === 'PENDING') { date = moment(data.creation_timestamp); } else { date = moment(data.completed_timestamp); } - callback(err, { price, amount, date }); + const result = { + price, + amount, + date, + fees, + feePercent + }; + log(name, 'getOrder() -->', this.inspect(result)); + callback(undefined, result); }; - const handler = cb => this.bitx.getOrder(order, processResponse('getOrder', cb)); + const handler = cb => this.luno.getOrder(order, processResponse('getOrder', cb)); retry(null, handler, process); } Trader.prototype.checkOrder = function(order, callback) { + // log(name, 'checkOrder() order id:', order); + if (!order) { return callback('invalid order_id'); } const process = (err, data) => { if (err) { - console.log(name, 'Error: --> ', err); + log(name, 'Error: -->', err); return callback(err); } - const result = { open: data.state === 'PENDING', executed: data.limit_volume === data.base, filledAmount: +data.base, remaining: round(+data.limit_volume - +data.base) } - + log(name, 'checkOrder()', order, 'result:', this.inspect(result)); callback(undefined, result); }; - const handler = cb => this.bitx.getOrder(order, processResponse('checkOrder', cb)); + const handler = cb => this.luno.getOrder(order, processResponse('checkOrder', cb)); retry(null, handler, process); } Trader.prototype.cancelOrder = function(order, callback) { + log(name, 'cancelOrder() order id:', order); + if (!order) { return callback('invalid order_id'); } const process = (err, data) => { if (err) { if (_.includes(err.message, 'Cannot stop unknown')) { - console.log(name, 'unable to cancel order:', order, '(' + err.message + ') assuming success...'); - // return callback(undefined, true); + log(name, 'unable to cancel order:', order, '(' + err.message + ') assuming success...'); } else { - console.log(name, 'unable to cancel order:', order, '(' + err.message + ') aborting...'); + log(name, 'unable to cancel order:', order, '(' + err.message + ') aborting...'); return callback(err); } } if (data && !data.success) { - console.log('cancelOrder() --> status:', data.success); + log('cancelOrder() --> status:', data.success); return callback(undefined, false); } this.checkOrder(order, (error, orderStatus) => { if (error) { - console.log(name, 'cancelOrder\'s checkOrder failed. What do i do here?'); + log(name, 'cancelOrder\'s checkOrder failed. What do i do here?'); return callback(error, false); } if (orderStatus.executed) { + log(name, 'cancelOrder() -->', order, 'was fulfilled before cancelOrder was completed.'); return callback(undefined, true); } - - // TODO: Fees? const remaining = { remaining: orderStatus.remaining, filled: orderStatus.filledAmount } - + log(name, 'cancelOrder() --> status: false remaining:', this.inspect(remaining)); return callback(undefined, false, remaining); }); - } - const handler = cb => this.bitx.stopOrder(order, processResponse('cancelOrder', cb)); + const handler = cb => this.luno.stopOrder(order, processResponse('cancelOrder', cb)); retry(null, handler, process); } Trader.prototype.getTrades = function(since, callback, descending) { + // log(name, 'getTrades() since:', since); + const process = (err, result) => { if (err) { - console.log(name, 'Error: --> ', err); + log(name, 'Error: -->', err); return callback(err); } let trades = _.map(result.trades, (t) => { @@ -301,7 +371,6 @@ Trader.prototype.getTrades = function(since, callback, descending) { tid: t.timestamp } }); - // Decending by default if (!descending) { trades = trades.reverse() } @@ -316,14 +385,14 @@ Trader.prototype.getTrades = function(since, callback, descending) { since: since } - const handler = cb => this.bitx.getTrades(options, processResponse('getTrades', cb)); + const handler = cb => this.luno.getTrades(options, processResponse('getTrades', cb)); retry(null, handler, process); } Trader.getCapabilities = function() { return { - name: 'BitX', - slug: 'bitx', + name: 'Luno', + slug: 'luno', currencies: ['MYR', 'KES', 'NGN', 'ZAR', 'XBT'], assets: ['ETH', 'XBT'], markets: [ @@ -332,7 +401,7 @@ Trader.getCapabilities = function() { { pair: ['KES', 'XBT'], minimalOrder: { amount: 0.0005, unit: 'asset' }, precision: 6 }, { pair: ['NGN', 'XBT'], minimalOrder: { amount: 0.0005, unit: 'asset' }, precision: 6 }, { pair: ['ZAR', 'XBT'], minimalOrder: { amount: 0.0005, unit: 'asset' }, precision: 6 }, - ], + ], requires: ['key', 'secret'], providesFullHistory: true, providesHistory: 'date', diff --git a/exchange/wrappers/poloniex.js b/exchange/wrappers/poloniex.js index 36f7ce93c..5f3d03b05 100644 --- a/exchange/wrappers/poloniex.js +++ b/exchange/wrappers/poloniex.js @@ -131,17 +131,19 @@ Trader.prototype.processResponse = function(next, fn, payload) { // it was cancelled, we need to check filled amount.. console.log(new Date, '[CANCELFIX] process cancel response'); console.log('[CANCELFIX] rechecking fill') - setTimeout(this.getOrder((error, order) => { - if(error) { - return next(error) - } + setTimeout(() => { + this.getOrder(payload, (error, order) => { + if(error) { + return next(error) + } - console.log('[CANCELFIX] checked, got:', order); + console.log('[CANCELFIX] checked, got:', order); - return next(undefined, { filled: order.amount }); - - }), this.checkInterval); + return next(undefined, { filled: order.amount }); + }); + }, this.checkInterval); }); + }, this.checkInterval); return; } diff --git a/importers/exchanges/bitfinex.js b/importers/exchanges/bitfinex.js index 627a835cd..70f32a76e 100644 --- a/importers/exchanges/bitfinex.js +++ b/importers/exchanges/bitfinex.js @@ -22,7 +22,7 @@ Fetcher.prototype.getTrades = function(upto, callback, descending) { tid: trade.ID, date: moment(trade.MTS).format('X'), price: +trade.PRICE, - amount: +trade.AMOUNT, + amount: +Math.abs(trade.AMOUNT), }; }); } @@ -76,12 +76,16 @@ var fetch = () => { if (lastTimestamp) { // We need to slow this down to prevent hitting the rate limits setTimeout(() => { - fetcher.getTrades(lastTimestamp, handleFetch); + + // make sure we fetch with overlap from last batch + const since = lastTimestamp - 1000; + fetcher.getTrades(since, handleFetch); }, 2500); } else { lastTimestamp = from.valueOf(); batch_start = moment(from); batch_end = moment(from).add(stride, 'h'); + fetcher.getTrades(batch_end, handleFetch); } }; diff --git a/importers/exchanges/bitx.js b/importers/exchanges/luno.js similarity index 87% rename from importers/exchanges/bitx.js rename to importers/exchanges/luno.js index 8084e72ce..437b3a459 100644 --- a/importers/exchanges/bitx.js +++ b/importers/exchanges/luno.js @@ -5,7 +5,7 @@ const retry = require('../../exchange/exchangeUtils').retry; const config = util.getConfig(); const dirs = util.dirs(); -const Fetcher = require(dirs.exchanges + 'bitx'); +const Fetcher = require(dirs.exchanges + 'luno'); util.makeEventEmitter(Fetcher); @@ -34,7 +34,7 @@ Fetcher.prototype.getTrades = function(since, callback, descending) { error.notFatal = true; } - if (includes(error.message, ['BitX error 429'])) { + if (includes(error.message, ['error 429'])) { error.notFatal = true; error.backoffDelay = 10000; } @@ -65,9 +65,9 @@ Fetcher.prototype.getTrades = function(since, callback, descending) { if (moment.isMoment(since)) since = since.valueOf(); (_.isNumber(since) && since > 0) ? since: since = 0; - console.log('importer getting trades from BitX since', moment(since).format('YYYY-MM-DD HH:mm:ss')); + console.log('importer getting trades from Luno since', moment.utc(since).format('YYYY-MM-DD HH:mm:ss'), 'UTC'); - const handler = cb => this.bitx.getTrades({ since: since, pair: this.pair }, processResponse('getTrades', cb)); + const handler = cb => this.luno.getTrades({ since: since, pair: this.pair }, processResponse('getTrades', cb)); retry(null, handler, process); } @@ -80,7 +80,7 @@ const fetch = () => { const handleFetch = (err, trades) => { if (err) { - console.log(`There was an error importing from BitX ${err}`); + console.log(`There was an error importing from Luno: ${err}`); fetcher.emit('done'); return fetcher.emit('trades', []); } diff --git a/package-lock.json b/package-lock.json index f0766a032..4c6a1f9a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,43 +1,16 @@ { "name": "gekko", - "version": "0.6.2", + "version": "0.6.4", "lockfileVersion": 1, "requires": true, "dependencies": { - "@slack/client": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@slack/client/-/client-3.13.0.tgz", - "integrity": "sha512-45hHqycaVK4UVL0e1jRK1bEOyb2/a3V6QJAgP43Bg03y2En4BZ3J3Qe7zNh09VTYsQ6KJeHTOWldDhNJUbdkTw==", - "requires": { - "async": "1.5.2", - "bluebird": "3.5.0", - "eventemitter3": "1.2.0", - "https-proxy-agent": "1.0.0", - "inherits": "2.0.3", - "lodash": "4.17.4", - "pkginfo": "0.4.1", - "request": "2.83.0", - "retry": "0.9.0", - "url-join": "0.0.1", - "winston": "2.3.1", - "ws": "1.1.4" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "retry": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.9.0.tgz", - "integrity": "sha1-b2l+UKDk3cjI9/tUeptg3q1DZ40=" - } + "@sinonjs/formatio": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", + "dev": true, + "requires": { + "samsam": "1.3.0" } }, "abbrev": { @@ -46,37 +19,21 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.17", + "mime-types": "2.1.19", "negotiator": "0.6.1" } }, - "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", - "requires": { - "extend": "3.0.1", - "semver": "5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" - } - } - }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -115,11 +72,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -129,7 +81,7 @@ "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "string_decoder": "1.1.1", "util-deprecate": "1.0.2" } @@ -139,7 +91,7 @@ "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" + "safe-buffer": "5.1.2" } } } @@ -150,14 +102,22 @@ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assertion-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", - "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "async": { @@ -165,25 +125,35 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.1.2.tgz", "integrity": "sha1-YSpKtF70KnDN6Aa62G7m2wR+g4U=", "requires": { - "lodash": "4.17.4" + "lodash": "4.17.10" }, "dependencies": { "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" } } }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "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==" }, "balanced-match": { "version": "1.0.0", @@ -191,37 +161,51 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "optional": true, "requires": { "tweetnacl": "0.14.5" } }, - "bitx": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/bitx/-/bitx-1.5.1.tgz", - "integrity": "sha1-+h9cYuhIEFse1Pj2tIIwd4jmMq0=" + "bitfinex-api-node": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bitfinex-api-node/-/bitfinex-api-node-1.2.1.tgz", + "integrity": "sha512-pG4BMCD7T/R1vkLhLdHPim4Lbfbkdyt/yTaJ+A48vrzGsQO7MwxIRRs6rEx1Acm/vpsUyksbOaQyladh2T8Whw==", + "requires": { + "debug": "2.6.9", + "lodash": "4.17.10", + "request": "2.87.0", + "request-promise": "4.2.2", + "ws": "3.3.3" + }, + "dependencies": { + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + } + } }, "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "bytes": { @@ -240,29 +224,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.0.2", + "assertion-error": "1.1.0", "check-error": "1.0.2", "deep-eql": "3.0.1", "get-func-name": "2.0.0", "pathval": "1.1.0", - "type-detect": "4.0.7" - }, - "dependencies": { - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "4.0.7" - } - }, - "type-detect": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.7.tgz", - "integrity": "sha512-4Rh17pAMVdMWzktddFhISRnUnFIStObtUMNGzDwlA6w/77bmGv3aBbRdCmQR6IjzfkTo9otnW+2K/cDRhKSxDA==", - "dev": true - } + "type-detect": "4.0.8" } }, "chalk": { @@ -294,14 +261,14 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "co-body": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-5.1.1.tgz", - "integrity": "sha1-2XeB0eM0S6SoIP0YBr3fg0FQUjY=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-5.2.0.tgz", + "integrity": "sha512-sX/LQ7LqUhgyaxzbe7IqwPeTr2yfpfUIQ/dgpKo6ZI4y4lpQA0YxAomWIY+7I7rHWcG02PG+OuPREzMW/5tszQ==", "requires": { "inflation": "2.0.0", - "qs": "6.4.0", - "raw-body": "2.3.2", - "type-is": "1.6.15" + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" } }, "co-from-stream": { @@ -332,22 +299,22 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { "delayed-stream": "1.0.0" } }, "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.0.tgz", + "integrity": "sha512-477o1hdVORiFlZxw8wgsXYCef3lh0zl/OV0FTftqiDxJSWw6dPQ2ipS4k20J2qBcsmsmLKSyr2iFrf9e3JGi4w==" }, "composition": { "version": "2.3.0", @@ -383,7 +350,7 @@ "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz", "integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=", "requires": { - "depd": "1.1.1", + "depd": "1.1.2", "keygrip": "1.0.2" } }, @@ -397,49 +364,40 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", - "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", - "optional": true - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, "deep-extend": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz", - "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "delayed-stream": { "version": "1.0.0", @@ -452,9 +410,9 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "destroy": { "version": "1.0.4", @@ -467,18 +425,19 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "ee-first": { @@ -506,30 +465,20 @@ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-2.2.2.tgz", "integrity": "sha1-QH6nHCAgzVdTggOrfnpr3Pt2ktU=" }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=" - }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" - }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -552,28 +501,19 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true, - "requires": { - "samsam": "1.3.0" + "combined-stream": "1.0.6", + "mime-types": "2.1.19" } }, "fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs-minipass": { "version": "1.2.5", @@ -620,13 +560,6 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "glob": { @@ -643,9 +576,9 @@ } }, "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "har-schema": { @@ -671,9 +604,9 @@ } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-unicode": { @@ -693,34 +626,48 @@ "integrity": "sha1-oxpc+IyHPsu1eWkH1NbxMujAHko=", "requires": { "deep-equal": "1.0.1", - "http-errors": "1.6.2" + "http-errors": "1.6.3" + }, + "dependencies": { + "http-errors": { + "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.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + } } }, "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.7.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.0.tgz", + "integrity": "sha512-hz3BtSHB7Z6dNWzYc+gUbWqG4dIpJedwwOhe1cvGUq5tGmcTTIRkPiAbyh/JlZx+ksSJyGJlgcHo5jGahiXnKw==", "requires": { - "depd": "1.1.1", + "depd": "1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" + "setprototypeof": "1.1.0", + "statuses": "1.5.0", + "toidentifier": "1.0.0" } }, - "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "agent-base": "2.1.1", - "debug": "2.6.8", - "extend": "3.0.1" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" } }, "humanize-duration": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.10.1.tgz", - "integrity": "sha512-FHD+u5OKj8TSsSdMHJxSCC78N5Rt4ecil6sWvI+xPbUKhxvHmkKo/V8imbR1m2dXueZYLIl7PcSYX9i/oEiOIA==" + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.15.1.tgz", + "integrity": "sha512-xfwsDoAinTTTNUAuYUGdeSPOUWEXzn9Xkep5LR0gpSw0gMKfpqLA7oxLWVRstYtZUarnCaeN0QqkOTC0TTPUpg==" }, "humanize-number": { "version": "0.0.2", @@ -728,9 +675,12 @@ "integrity": "sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=" }, "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.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } }, "ignore-walk": { "version": "3.0.1", @@ -769,7 +719,7 @@ "resolved": "https://registry.npmjs.org/ipcee/-/ipcee-1.0.6.tgz", "integrity": "sha1-PI3I5nh9gdIkyY6POcvvCeBV5tQ=", "requires": { - "debug": "2.6.8", + "debug": "2.6.9", "eventemitter2": "2.2.2" } }, @@ -837,13 +787,6 @@ "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "just-extend": { @@ -858,33 +801,33 @@ "integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E=" }, "koa": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/koa/-/koa-1.4.0.tgz", - "integrity": "sha1-X79tkMZq4Si3hnyi5UjOh0NDbXY=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-1.6.0.tgz", + "integrity": "sha512-tW7xJGDG4LyhFUTtzIyqJCIaJIFgkre1tJPGNe/moRKOIU0L9vEIhW5z7iMX7FJTkYm45urdbPOGBp0VlWF03w==", "requires": { - "accepts": "1.3.4", + "accepts": "1.3.5", "co": "4.6.0", "composition": "2.3.0", "content-disposition": "0.5.2", "content-type": "1.0.4", "cookies": "0.7.1", - "debug": "2.6.8", + "debug": "2.6.9", "delegates": "1.0.0", "destroy": "1.0.4", "error-inject": "1.0.0", "escape-html": "1.0.3", - "fresh": "0.3.0", + "fresh": "0.5.2", "http-assert": "1.3.0", - "http-errors": "1.6.2", + "http-errors": "1.7.0", "koa-compose": "2.5.1", "koa-is-json": "1.0.0", - "mime-types": "2.1.17", + "mime-types": "2.1.19", "on-finished": "2.3.0", "only": "0.0.2", "parseurl": "1.3.2", - "statuses": "1.3.1", - "type-is": "1.6.15", - "vary": "1.1.1" + "statuses": "1.5.0", + "type-is": "1.6.16", + "vary": "1.1.2" } }, "koa-bodyparser": { @@ -892,7 +835,7 @@ "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-2.5.0.tgz", "integrity": "sha1-PrckP0eZii53LbBfbcTg9PPMvfA=", "requires": { - "co-body": "5.1.1", + "co-body": "5.2.0", "copy-to": "2.0.1" } }, @@ -935,8 +878,8 @@ "integrity": "sha1-Tb26fnFZU9VobAO3w/29IUYx+HA=", "requires": { "co": "4.6.0", - "debug": "2.6.8", - "http-errors": "1.6.2", + "debug": "2.6.9", + "http-errors": "1.7.0", "methods": "1.1.2", "path-to-regexp": "1.7.0" } @@ -947,9 +890,9 @@ "integrity": "sha1-WkriRVZGgMbs9geeknX6UXOoYdw=", "requires": { "co": "4.6.0", - "debug": "2.6.8", + "debug": "2.6.9", "mz": "2.7.0", - "resolve-path": "1.3.3" + "resolve-path": "1.4.0" } }, "koa-static": { @@ -957,7 +900,7 @@ "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-2.1.0.tgz", "integrity": "sha1-z+KS6n2ryWqnI+SkiGFcxlrnQWk=", "requires": { - "debug": "2.6.8", + "debug": "2.6.9", "koa-send": "3.3.0" } }, @@ -973,9 +916,9 @@ "dev": true }, "lolex": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.1.tgz", - "integrity": "sha512-mQuW55GhduF3ppo+ZRUTz1PRjEh1hS5BbqU7d8D0ez2OKxHDod7StPPeAVKisZR5aLkHZjdGWSL42LSONUJsZw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.1.tgz", + "integrity": "sha512-Oo2Si3RMKV3+lV5MsSWplDQFoTClz/24S0MMHYcgGWWmFXr6TMlqcqk/l1GtH+d5wLBwNRiqGnwDRMirtFalJw==", "dev": true }, "media-typer": { @@ -994,22 +937,17 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "mime": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", - "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=" - }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "requires": { - "mime-db": "1.30.0" + "mime-db": "1.35.0" } }, "minimatch": { @@ -1017,7 +955,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -1032,13 +970,6 @@ "requires": { "safe-buffer": "5.1.2", "yallist": "3.0.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } } }, "minizlib": { @@ -1058,27 +989,28 @@ } }, "mocha": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.0.tgz", - "integrity": "sha512-ukB2dF+u4aeJjc6IGtPNnJXfeby5d4ZqySlIBT0OEyva/DrMjVm5HkQxKnHDLKEfEQBsEnwTg9HHhtPHJdTd8w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", + "browser-stdout": "1.3.1", + "commander": "2.15.1", "debug": "3.1.0", - "diff": "3.3.1", + "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", - "growl": "1.10.3", + "growl": "1.10.5", "he": "1.1.1", + "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "4.4.0" + "supports-color": "5.4.0" }, "dependencies": { "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, "debug": { @@ -1091,12 +1023,12 @@ } }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "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": "2.0.0" + "has-flag": "3.0.0" } } } @@ -1108,9 +1040,9 @@ "dev": true }, "moment": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", - "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" }, "ms": { "version": "2.0.0", @@ -1133,17 +1065,17 @@ } }, "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=" + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, "needle": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz", "integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==", "requires": { - "debug": "2.6.8", - "iconv-lite": "0.4.19", + "debug": "2.6.9", + "iconv-lite": "0.4.23", "sax": "1.2.4" } }, @@ -1153,24 +1085,16 @@ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "nise": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.2.0.tgz", - "integrity": "sha512-q9jXh3UNsMV28KeqI43ILz5+c3l+RiNW8mhurEwCKckuHQbL+hTJIKKTiUlCPKlgQ/OukFvSnKB/Jk3+sFbkGA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", + "integrity": "sha512-BxH/DxoQYYdhKgVAfqVy4pzXRZELHOIewzoesxpjYvpU+7YOalQhGNPf7wAx8pLrTNPrHRDlLOkAl8UI0ZpXjw==", "dev": true, "requires": { - "formatio": "1.2.0", + "@sinonjs/formatio": "2.0.0", "just-extend": "1.1.27", - "lolex": "1.6.0", + "lolex": "2.7.1", "path-to-regexp": "1.7.0", "text-encoding": "0.6.4" - }, - "dependencies": { - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", - "dev": true - } } }, "node-pre-gyp": { @@ -1182,12 +1106,12 @@ "mkdirp": "0.5.1", "needle": "2.2.1", "nopt": "4.0.1", - "npm-packlist": "1.1.10", + "npm-packlist": "1.1.11", "npmlog": "4.1.2", "rc": "1.2.8", "rimraf": "2.6.2", "semver": "5.4.1", - "tar": "4.4.4" + "tar": "4.4.6" } }, "nodegit-promise": { @@ -1213,9 +1137,9 @@ "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==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz", + "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", "requires": { "ignore-walk": "3.0.1", "npm-bundled": "1.0.3" @@ -1277,11 +1201,6 @@ "pinkie-promise": "2.0.1" } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -1348,10 +1267,10 @@ "pinkie": "2.0.4" } }, - "pkginfo": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", - "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "promisify-node": { "version": "0.5.0", @@ -1377,11 +1296,6 @@ "version": "0.1.22", "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" } } }, @@ -1401,215 +1315,35 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, - "pushbullet": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/pushbullet/-/pushbullet-1.4.3.tgz", - "integrity": "sha1-e/i87XooCKYrnIMpslyHH8lEoM4=", + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "requires": { - "mime": "1.2.11", - "request": "2.44.0", - "websocket": "1.0.24" + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" }, "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "optional": true - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "optional": true - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "optional": true - }, - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", - "optional": true - }, - "bl": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", - "requires": { - "readable-stream": "1.0.34" - } - }, - "boom": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", - "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", - "requires": { - "hoek": "0.9.1" - } - }, - "caseless": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz", - "integrity": "sha1-gWfBq4OX+1u5X5bSjlqBxQ8kesQ=" - }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "optional": true, - "requires": { - "delayed-stream": "0.0.5" - } - }, - "cryptiles": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", - "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", - "optional": true, - "requires": { - "boom": "0.4.2" - } - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", - "optional": true - }, - "forever-agent": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", - "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=" - }, - "form-data": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", - "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=", - "optional": true, - "requires": { - "async": "0.9.2", - "combined-stream": "0.0.7", - "mime": "1.2.11" - } - }, - "hawk": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", - "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=", - "optional": true, - "requires": { - "boom": "0.4.2", - "cryptiles": "0.2.2", - "hoek": "0.9.1", - "sntp": "0.2.4" - } - }, - "hoek": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", - "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=" - }, - "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "optional": true, - "requires": { - "asn1": "0.1.11", - "assert-plus": "0.1.5", - "ctype": "0.5.3" - } - }, - "mime-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz", - "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4=" - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" - }, - "oauth-sign": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz", - "integrity": "sha1-8ilW8x6nFRqCHl8vsywRPK2Ln2k=", - "optional": true - }, - "qs": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", - "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "core-util-is": "1.0.2", + "depd": "1.1.2", "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "setprototypeof": "1.1.0", + "statuses": "1.5.0" } - }, - "request": { - "version": "2.44.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.44.0.tgz", - "integrity": "sha1-eNYkVNaIU8rfsHrTH1i57JgHLqg=", - "requires": { - "aws-sign2": "0.5.0", - "bl": "0.9.5", - "caseless": "0.6.0", - "forever-agent": "0.5.2", - "form-data": "0.1.4", - "hawk": "1.1.1", - "http-signature": "0.10.1", - "json-stringify-safe": "5.0.1", - "mime-types": "1.0.2", - "node-uuid": "1.4.8", - "oauth-sign": "0.4.0", - "qs": "1.2.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.4.3" - } - }, - "sntp": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", - "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", - "optional": true, - "requires": { - "hoek": "0.9.1" - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" } } }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - } - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -1621,11 +1355,6 @@ "strip-json-comments": "2.0.1" }, "dependencies": { - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -1642,12 +1371,12 @@ } }, "relieve": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/relieve/-/relieve-2.2.1.tgz", - "integrity": "sha1-7PG6kC2B0yaGef8StamGlunncXY=", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/relieve/-/relieve-2.2.3.tgz", + "integrity": "sha512-h3i6n981nqh1K0TxK+TKaFf/Kf2MUgJHhEYUeKNj+by0uoxne/ldYsNKB2HA9fBX77v+uZE+pfxoRa9ZxuBgIA==", "requires": { - "bluebird": "3.5.0", - "debug": "2.6.8", + "bluebird": "3.5.1", + "debug": "2.6.9", "eventemitter2": "2.2.2", "ipcee": "1.0.6", "uuid": "2.0.3" @@ -1661,156 +1390,55 @@ } }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { "aws-sign2": "0.7.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", + "combined-stream": "1.0.6", + "extend": "3.0.2", "forever-agent": "0.6.1", - "form-data": "2.3.1", + "form-data": "2.3.2", "har-validator": "5.0.3", - "hawk": "6.0.2", "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.19", "oauth-sign": "0.8.2", "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "requires": { - "hoek": "4.2.0" - } - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "requires": { - "hoek": "4.2.0" - } - } - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.1.0" - } - }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "requires": { - "hoek": "4.2.0" - } - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "requires": { - "punycode": "1.4.1" - } - } + "uuid": "3.3.2" } }, "request-promise": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", - "dev": true, "requires": { - "bluebird": "3.5.0", + "bluebird": "3.5.1", "request-promise-core": "1.1.1", "stealthy-require": "1.1.1", - "tough-cookie": "2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - } + "tough-cookie": "2.3.4" } }, "request-promise-core": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", - "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "4.17.10" }, "dependencies": { "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" } } }, @@ -1821,28 +1449,24 @@ "dev": true }, "resolve-path": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.3.3.tgz", - "integrity": "sha1-TYOrpkaMK45jKldeP1Kw+g2+Glw=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", "requires": { - "http-errors": "1.5.1", + "http-errors": "1.6.3", "path-is-absolute": "1.0.1" }, "dependencies": { "http-errors": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", - "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", + "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.2", "inherits": "2.0.3", - "setprototypeof": "1.0.2", - "statuses": "1.3.1" + "setprototypeof": "1.1.0", + "statuses": "1.5.0" } - }, - "setprototypeof": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", - "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=" } } }, @@ -1865,9 +1489,14 @@ } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "samsam": { "version": "1.3.0", @@ -1891,9 +1520,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "signal-exit": { "version": "3.0.2", @@ -1901,34 +1530,28 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sinon": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.2.0.tgz", - "integrity": "sha512-FAdCcQ6lUAakWQMVRSIhiQU90d5EH1k3V6wRPrjxcYsv4vlBHjFzWLeoD63GoTKrFkfzVQs209aFW8V3cGLNtA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz", + "integrity": "sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w==", "dev": true, "requires": { - "diff": "3.3.1", - "formatio": "1.2.0", + "@sinonjs/formatio": "2.0.0", + "diff": "3.5.0", "lodash.get": "4.4.2", - "lolex": "2.3.1", - "nise": "1.2.0", - "supports-color": "5.1.0", - "type-detect": "4.0.7" + "lolex": "2.7.1", + "nise": "1.4.2", + "supports-color": "5.4.0", + "type-detect": "4.0.8" }, "dependencies": { "supports-color": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", - "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", + "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": "2.0.0" + "has-flag": "3.0.0" } - }, - "type-detect": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.7.tgz", - "integrity": "sha512-4Rh17pAMVdMWzktddFhISRnUnFIStObtUMNGzDwlA6w/77bmGv3aBbRdCmQR6IjzfkTo9otnW+2K/cDRhKSxDA==", - "dev": true } } }, @@ -1940,120 +1563,41 @@ "nan": "2.10.0", "node-pre-gyp": "0.10.3", "request": "2.87.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "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.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "requires": { - "aws-sign2": "0.7.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.3.1", - "har-validator": "5.0.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.1", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - } - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "requires": { - "punycode": "1.4.1" - } - } } }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { - "asn1": "0.2.3", + "asn1": "0.2.4", "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", + "bcrypt-pbkdf": "1.0.2", "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", + "ecc-jsbn": "0.1.2", "getpass": "0.1.7", "jsbn": "0.1.1", + "safer-buffer": "2.1.2", "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, "stats-lite": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/stats-lite/-/stats-lite-2.1.0.tgz", - "integrity": "sha1-R2hU/biNA1xJvLv/cEyNhe6Esbo=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/stats-lite/-/stats-lite-2.1.1.tgz", + "integrity": "sha512-5QkxGCWGMbeQ+PXqI2N7ES6kW4IimvbMQBCKvZbekaEpf3InckVHiIXdCJbZsKUjLE7a3jha2cTEJqtOGGcVMw==", "requires": { "isnumber": "1.0.0" } }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, "string-width": { "version": "1.0.2", @@ -2065,16 +1609,6 @@ "strip-ansi": "3.0.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -2094,9 +1628,9 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "tar": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.4.tgz", - "integrity": "sha512-mq9ixIYfNF9SK0IS/h2HKMu8Q2iaCuhDDsZhdEag/FHv8fOaYld4vN7ouMgcSSt5WKZzPs8atclTcJm36OTh4w==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz", + "integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==", "requires": { "chownr": "1.0.1", "fs-minipass": "1.2.5", @@ -2105,13 +1639,6 @@ "mkdirp": "0.5.1", "safe-buffer": "5.1.2", "yallist": "3.0.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } } }, "text-encoding": { @@ -2146,16 +1673,20 @@ "resolved": "https://registry.npmjs.org/tiny-promisify/-/tiny-promisify-0.1.1.tgz", "integrity": "sha1-FoHhWVyKEUIq9b9ESAIVQCdiq4Q=" }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "toml": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.3.tgz", "integrity": "sha512-O7L5hhSQHxuufWUdcTRPfuTh3phKfAZ/dqfxZFoxPCj2RYmpaSGLEIs016FCXItQwNr08yefUB5TSjzRYnajTA==" }, "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "optional": true, + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { "punycode": "1.4.1" } @@ -2165,7 +1696,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -2174,61 +1705,45 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true }, - "twitter": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/twitter/-/twitter-1.7.1.tgz", - "integrity": "sha1-B2I3jx3BwFDkj2ZqypBOJLGpYvQ=", - "requires": { - "deep-extend": "0.5.0", - "request": "2.83.0" - } + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.17" - } - }, - "typedarray-to-buffer": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.2.tgz", - "integrity": "sha1-EBezLZhP9VbroQD1AViauhrOLgQ=", - "requires": { - "is-typedarray": "1.0.0" + "mime-types": "2.1.19" } }, "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "url-join": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "vary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", - "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "verror": { "version": "1.10.0", @@ -2238,24 +1753,6 @@ "assert-plus": "1.0.0", "core-util-is": "1.0.2", "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "websocket": { - "version": "1.0.24", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.24.tgz", - "integrity": "sha1-dJA+dfJUW2suHeFCW8HJBZF6GJA=", - "requires": { - "debug": "2.6.8", - "nan": "2.7.0", - "typedarray-to-buffer": "3.1.2", - "yaeti": "0.0.6" } }, "wide-align": { @@ -2266,45 +1763,21 @@ "string-width": "1.0.2" } }, - "winston": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.3.1.tgz", - "integrity": "sha1-C0hCDZeMAYBM8CMLZIhhWYIloRk=", - "requires": { - "async": "1.0.0", - "colors": "1.0.3", - "cycle": "1.0.3", - "eyes": "0.1.8", - "isstream": "0.1.2", - "stack-trace": "0.0.10" - }, - "dependencies": { - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - } - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", - "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" } }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, "yallist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", diff --git a/package.json b/package.json index 62ee70bcf..73d977471 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gekko", - "version": "0.6.3", + "version": "0.6.5", "description": "A bitcoin trading bot for auto trading at various exchanges", "keywords": [ "trading", @@ -15,9 +15,8 @@ }, "author": "Mike van Rossum ", "dependencies": { - "@slack/client": "^3.10.0", "async": "2.1.2", - "bitx": "^1.5.0", + "bitfinex-api-node": "^1.2.1", "co-fs": "^1.2.0", "commander": "^2.13.0", "gekko": "0.0.9", @@ -33,15 +32,13 @@ "opn": "^4.0.2", "promisify-node": "^0.5.0", "prompt-lite": "0.1.1", - "pushbullet": "1.4.3", "relieve": "^2.1.3", "retry": "^0.10.1", "semver": "5.4.1", "sqlite3": "^4.0.0", "stats-lite": "^2.0.4", "tiny-promisify": "^0.1.1", - "toml": "^2.3.0", - "twitter": "^1.7.1" + "toml": "^2.3.0" }, "devDependencies": { "chai": "^4.1.2", diff --git a/plugins.js b/plugins.js index 813d3ccce..bf84edf8d 100644 --- a/plugins.js +++ b/plugins.js @@ -165,7 +165,11 @@ var plugins = [ description: 'Sends advice to pushbullet.', slug: 'pushbullet', async: false, - modes: ['realtime'] + modes: ['realtime'], + dependencies: [{ + module: 'pushbullet', + version: '1.4.3' + }] }, { name: 'Kodi', @@ -179,14 +183,22 @@ var plugins = [ description: 'Sends trades to twitter.', slug: 'twitter', async: false, - modes: ['realtime'] + modes: ['realtime'], + dependencies: [{ + module: 'twitter', + version: '1.7.1' + }] }, { name: 'Slack', description: 'Sends trades to slack channel.', slug: 'slack', async: false, - modes: ['realtime'] + modes: ['realtime'], + dependencies: [{ + module: '@slack/client', + version: '3.13.0' + }] }, { name: 'IFTTT', @@ -200,7 +212,8 @@ var plugins = [ description: 'Logs all gekko events.', slug: 'eventLogger', async: false, - modes: ['realtime', 'backtest'] + modes: ['realtime', 'backtest'], + greedy: true }, { name: 'Backtest result export', diff --git a/plugins/backtestResultExporter.js b/plugins/backtestResultExporter.js index 9563753b7..5cd9fdd49 100644 --- a/plugins/backtestResultExporter.js +++ b/plugins/backtestResultExporter.js @@ -4,6 +4,7 @@ const log = require('../core/log'); const _ = require('lodash'); const util = require('../core/util.js'); +const env = util.gekkoEnv(); const config = util.getConfig(); const moment = require('moment'); const fs = require('fs'); @@ -26,12 +27,19 @@ const BacktestResultExporter = function() { if(!config.backtestResultExporter.data.stratCandles) this.processStratCandles = null; + if(!config.backtestResultExporter.data.portfolioValues) + this.processPortfolioValueChange = null; + if(!config.backtestResultExporter.data.trades) this.processTradeCompleted = null; _.bindAll(this); } +BacktestResultExporter.prototype.processPortfolioValueChange = function(portfolio) { + this.portfolioValue = portfolio.balance; +} + BacktestResultExporter.prototype.processStratCandle = function(candle) { let strippedCandle; @@ -47,6 +55,9 @@ BacktestResultExporter.prototype.processStratCandle = function(candle) { } } + if(config.backtestResultExporter.data.portfolioValues) + strippedCandle.portfolioValue = this.portfolioValue; + this.stratCandles.push(strippedCandle); }; @@ -93,23 +104,29 @@ BacktestResultExporter.prototype.finalize = function(done) { if(config.backtestResultExporter.data.trades) backtest.trades = this.trades; - process.send({backtest}); + if(env === 'child-process') { + process.send({backtest}); + } - if(config.backtestResultExporter.writeToDisk) - this.writeToDisk(done) - else + if(config.backtestResultExporter.writeToDisk) { + this.writeToDisk(backtest, done); + } else { done(); + } }; -BacktestResultExporter.prototype.writeToDisk = function(next) { - const now = moment().format('YYYY-MM-DD HH:mm:ss'); - const filename = `backtest-${config.tradingAdvisor.method}-${now}.log`; +BacktestResultExporter.prototype.writeToDisk = function(backtest, next) { + const now = moment().format('YYYY-MM-DD_HH-mm-ss'); + const filename = `backtest-${config.tradingAdvisor.method}-${now}.json`; fs.writeFile( util.dirs().gekko + filename, JSON.stringify(backtest), err => { - if(err) + if(err) { log.error('unable to write backtest result', err); + } else { + log.info('written backtest to: ', util.dirs().gekko + filename); + } next(); } diff --git a/plugins/performanceAnalyzer/performanceAnalyzer.js b/plugins/performanceAnalyzer/performanceAnalyzer.js index 7e1f57250..aa0cad580 100644 --- a/plugins/performanceAnalyzer/performanceAnalyzer.js +++ b/plugins/performanceAnalyzer/performanceAnalyzer.js @@ -4,6 +4,7 @@ const moment = require('moment'); const statslite = require('stats-lite'); const util = require('../../core/util'); +const log = require(util.dirs().core + 'log') const ENV = util.gekkoEnv(); const config = util.getConfig(); @@ -48,13 +49,15 @@ const PerformanceAnalyzer = function() { } PerformanceAnalyzer.prototype.processPortfolioValueChange = function(event) { - if(!this.start.balance) + if(!this.start.balance) { this.start.balance = event.balance; + } } PerformanceAnalyzer.prototype.processPortfolioChange = function(event) { - if(!this.start.portfolio) + if(!this.start.portfolio) { this.start.portfolio = event; + } } PerformanceAnalyzer.prototype.processCandle = function(candle, done) { @@ -91,13 +94,13 @@ PerformanceAnalyzer.prototype.processTradeCompleted = function(trade) { this.portfolio = trade.portfolio; this.balance = trade.balance; - const report = this.calculateReportStatistics(); - - this.logger.handleTrade(trade, report); - this.registerRoundtripPart(trade); - this.deferredEmit('performanceReport', report); + const report = this.calculateReportStatistics(); + if(report) { + this.logger.handleTrade(trade, report); + this.deferredEmit('performanceReport', report); + } } PerformanceAnalyzer.prototype.registerRoundtripPart = function(trade) { @@ -163,6 +166,12 @@ PerformanceAnalyzer.prototype.handleCompletedRoundtrip = function() { } PerformanceAnalyzer.prototype.calculateReportStatistics = function() { + if(!this.start.balance || !this.start.portfolio) { + log.error('Cannot calculate a profit report without having received portfolio data.'); + log.error('Skipping performanceReport..'); + return false; + } + // the portfolio's balance is measured in {currency} const profit = this.balance - this.start.balance; @@ -214,7 +223,9 @@ PerformanceAnalyzer.prototype.finalize = function(done) { } const report = this.calculateReportStatistics(); - this.logger.finalize(report); + if(report) { + this.logger.finalize(report); + } done(); } diff --git a/plugins/sqlite/handle.js b/plugins/sqlite/handle.js index fd25b490e..93832ee4f 100644 --- a/plugins/sqlite/handle.js +++ b/plugins/sqlite/handle.js @@ -52,7 +52,7 @@ module.exports = { var db = new sqlite3.Database(fullPath); db.run('PRAGMA synchronous = ' + syncMode); db.run('PRAGMA journal_mode = ' + journalMode); - db.configure('busyTimeout', 1500); + db.configure('busyTimeout', 10000); return db; } }; diff --git a/plugins/telegrambot.js b/plugins/telegrambot.js index 1260ee52f..7fe18fb18 100644 --- a/plugins/telegrambot.js +++ b/plugins/telegrambot.js @@ -3,6 +3,7 @@ const moment = require('moment'); const _ = require('lodash'); const config = require('../core/util').getConfig(); const telegrambot = config.telegrambot; +const emitTrades = telegrambot.emitTrades; const utc = moment.utc; const telegram = require("node-telegram-bot-api"); @@ -48,6 +49,45 @@ Actor.prototype.processAdvice = function(advice) { this.subscribers.forEach(this.emitAdvice, this); }; +if(emitTrades) { + Actor.prototype.processTradeInitiated = function (tradeInitiated) { + var message = 'Trade initiated. ID: ' + tradeInitiated.id + + '\nAction: ' + tradeInitiated.action + '\nPortfolio: ' + + tradeInitiated.portfolio + '\nBalance: ' + tradeInitiated.balance; + this.bot.sendMessage(this.chatId, message); + } + + Actor.prototype.processTradeCancelled = function (tradeCancelled) { + var message = 'Trade cancelled. ID: ' + tradeCancelled.id; + this.bot.sendMessage(this.chatId, message); + } + + Actor.prototype.processTradeAborted = function (tradeAborted) { + var message = 'Trade aborted. ID: ' + tradeAborted.id + + '\nNot creating order! Reason: ' + tradeAborted.reason; + this.bot.sendMessage(this.chatId, message); + } + + Actor.prototype.processTradeErrored = function (tradeErrored) { + var message = 'Trade errored. ID: ' + tradeErrored.id + + '\nReason: ' + tradeErrored.reason; + this.bot.sendMessage(this.chatId, message); + } + + Actor.prototype.processTradeCompleted = function (tradeCompleted) { + var message = 'Trade completed. ID: ' + tradeCompleted.id + + '\nAction: ' + tradeCompleted.action + + '\nPrice: ' + tradeCompleted.price + + '\nAmount: ' + tradeCompleted.amount + + '\nCost: ' + tradeCompleted.cost + + '\nPortfolio: ' + tradeCompleted.portfolio + + '\nBalance: ' + tradeCompleted.balance + + '\nFee percent: ' + tradeCompleted.feePercent + + '\nEffective price: ' + tradeCompleted.effectivePrice; + this.bot.sendMessage(this.chatId, message); + } +} + Actor.prototype.verifyQuestion = function(msg, text) { this.chatId = msg.chat.id; if (text[1].toLowerCase() in this.commands) { diff --git a/plugins/trader/trader.js b/plugins/trader/trader.js index 6474e1b5f..2ce53b198 100644 --- a/plugins/trader/trader.js +++ b/plugins/trader/trader.js @@ -19,7 +19,11 @@ const Trader = function(next) { this.propogatedTrades = 0; - this.broker = new Broker(this.brokerConfig); + try { + this.broker = new Broker(this.brokerConfig); + } catch(e) { + util.die(e.message); + } if(!this.broker.capabilities.gekkoBroker) { util.die('This exchange is not yet supported'); @@ -219,7 +223,7 @@ Trader.prototype.createOrder = function(side, amount, advice, id) { const check = this.broker.isValidOrder(amount, this.price); if(!check.valid) { - log.debug('NOT creating order! Reason:', check.reason); + log.warn('NOT creating order! Reason:', check.reason); return this.deferredEmit('tradeAborted', { id, adviceId: advice.id, @@ -278,7 +282,7 @@ Trader.prototype.createOrder = function(side, amount, advice, id) { effectivePrice = summary.price * (1 - summary.feePercent / 100); } } else { - log.debug('WARNING: exchange did not provide fee information, assuming no fees..'); + log.warn('WARNING: exchange did not provide fee information, assuming no fees..'); effectivePrice = summary.price; } diff --git a/plugins/tradingAdvisor/baseTradingMethod.js b/plugins/tradingAdvisor/baseTradingMethod.js index b0a808765..b4c13a584 100644 --- a/plugins/tradingAdvisor/baseTradingMethod.js +++ b/plugins/tradingAdvisor/baseTradingMethod.js @@ -54,7 +54,7 @@ var Base = function(settings) { // make sure we have all methods _.each(['init', 'check'], function(fn) { if(!this[fn]) - util.die('No ' + fn + ' function in this trading method found.') + util.die('No ' + fn + ' function in this strategy found.') }, this); if(!this.update) diff --git a/sample-config.js b/sample-config.js index 17bdad12b..3e5174622 100644 --- a/sample-config.js +++ b/sample-config.js @@ -16,7 +16,7 @@ config.debug = true; // for additional logging / debugging config.watch = { // see https://gekko.wizb.it/docs/introduction/supported_exchanges.html - exchange: 'poloniex', + exchange: 'binance', currency: 'USDT', asset: 'BTC', @@ -37,19 +37,6 @@ config.tradingAdvisor = { historySize: 10, } -// Exponential Moving Averages settings: -config.DEMA = { - // EMA weight (α) - // the higher the weight, the more smooth (and delayed) the line - weight: 21, - // amount of candles to remember and base initial EMAs on - // the difference between the EMAs (to act as triggers) - thresholds: { - down: -0.025, - up: 0.025 - } -}; - // MACD settings: config.MACD = { // EMA weight (α) @@ -67,116 +54,8 @@ config.MACD = { } }; -// PPO settings: -config.PPO = { - // EMA weight (α) - // the higher the weight, the more smooth (and delayed) the line - short: 12, - long: 26, - signal: 9, - // the difference between the EMAs (to act as triggers) - thresholds: { - down: -0.025, - up: 0.025, - // How many candle intervals should a trend persist - // before we consider it real? - persistence: 2 - } -}; - -// Uses one of the momentum indicators but adjusts the thresholds when PPO is bullish or bearish -// Uses settings from the ppo and momentum indicator config block -config.varPPO = { - momentum: 'TSI', // RSI, TSI or UO - thresholds: { - // new threshold is default threshold + PPOhist * PPOweight - weightLow: 120, - weightHigh: -120, - // How many candle intervals should a trend persist - // before we consider it real? - persistence: 0 - } -}; - -// RSI settings: -config.RSI = { - interval: 14, - thresholds: { - low: 30, - high: 70, - // How many candle intervals should a trend persist - // before we consider it real? - persistence: 1 - } -}; - -// TSI settings: -config.TSI = { - short: 13, - long: 25, - thresholds: { - low: -25, - high: 25, - // How many candle intervals should a trend persist - // before we consider it real? - persistence: 1 - } -}; - -// Ultimate Oscillator Settings -config.UO = { - first: {weight: 4, period: 7}, - second: {weight: 2, period: 14}, - third: {weight: 1, period: 28}, - thresholds: { - low: 30, - high: 70, - // How many candle intervals should a trend persist - // before we consider it real? - persistence: 1 - } -}; - -// CCI Settings -config.CCI = { - constant: 0.015, // constant multiplier. 0.015 gets to around 70% fit - history: 90, // history size, make same or smaller than history - thresholds: { - up: 100, // fixed values for overbuy upward trajectory - down: -100, // fixed value for downward trajectory - persistence: 0 // filter spikes by adding extra filters candles - } -}; - -// StochRSI settings -config.StochRSI = { - interval: 3, - thresholds: { - low: 20, - high: 80, - // How many candle intervals should a trend persist - // before we consider it real? - persistence: 3 - } -}; - - -// custom settings: -config.custom = { - my_custom_setting: 10, -} - -config['talib-macd'] = { - parameters: { - optInFastPeriod: 10, - optInSlowPeriod: 21, - optInSignalPeriod: 9 - }, - thresholds: { - down: -0.025, - up: 0.025, - } -} +// settings for other strategies can be found at the bottom, note that only +// one strategy is active per gekko, the other settings are ignored. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CONFIGURING PLUGINS @@ -303,6 +182,8 @@ config.ircbot = { config.telegrambot = { enabled: false, + // Receive notifications for trades and warnings/errors related to trading + emitTrades: false, token: 'YOUR_TELEGRAM_BOT_TOKEN', }; @@ -389,8 +270,9 @@ config.backtestResultExporter = { writeToDisk: false, data: { stratUpdates: false, - roundtrips: true, + portfolioValues: true, stratCandles: true, + roundtrips: true, trades: true } } @@ -464,6 +346,156 @@ config.importer = { } } + +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// OTHER STRATEGY SETTINGS +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +// Exponential Moving Averages settings: +config.DEMA = { + // EMA weight (α) + // the higher the weight, the more smooth (and delayed) the line + weight: 21, + // amount of candles to remember and base initial EMAs on + // the difference between the EMAs (to act as triggers) + thresholds: { + down: -0.025, + up: 0.025 + } +}; + +// PPO settings: +config.PPO = { + // EMA weight (α) + // the higher the weight, the more smooth (and delayed) the line + short: 12, + long: 26, + signal: 9, + // the difference between the EMAs (to act as triggers) + thresholds: { + down: -0.025, + up: 0.025, + // How many candle intervals should a trend persist + // before we consider it real? + persistence: 2 + } +}; + +// Uses one of the momentum indicators but adjusts the thresholds when PPO is bullish or bearish +// Uses settings from the ppo and momentum indicator config block +config.varPPO = { + momentum: 'TSI', // RSI, TSI or UO + thresholds: { + // new threshold is default threshold + PPOhist * PPOweight + weightLow: 120, + weightHigh: -120, + // How many candle intervals should a trend persist + // before we consider it real? + persistence: 0 + } +}; + +// RSI settings: +config.RSI = { + interval: 14, + thresholds: { + low: 30, + high: 70, + // How many candle intervals should a trend persist + // before we consider it real? + persistence: 1 + } +}; + +// TSI settings: +config.TSI = { + short: 13, + long: 25, + thresholds: { + low: -25, + high: 25, + // How many candle intervals should a trend persist + // before we consider it real? + persistence: 1 + } +}; + +// Ultimate Oscillator Settings +config.UO = { + first: {weight: 4, period: 7}, + second: {weight: 2, period: 14}, + third: {weight: 1, period: 28}, + thresholds: { + low: 30, + high: 70, + // How many candle intervals should a trend persist + // before we consider it real? + persistence: 1 + } +}; + +// CCI Settings +config.CCI = { + constant: 0.015, // constant multiplier. 0.015 gets to around 70% fit + history: 90, // history size, make same or smaller than history + thresholds: { + up: 100, // fixed values for overbuy upward trajectory + down: -100, // fixed value for downward trajectory + persistence: 0 // filter spikes by adding extra filters candles + } +}; + +// StochRSI settings +config.StochRSI = { + interval: 3, + thresholds: { + low: 20, + high: 80, + // How many candle intervals should a trend persist + // before we consider it real? + persistence: 3 + } +}; + + +// custom settings: +config.custom = { + my_custom_setting: 10, +} + +config['talib-macd'] = { + parameters: { + optInFastPeriod: 10, + optInSlowPeriod: 21, + optInSignalPeriod: 9 + }, + thresholds: { + down: -0.025, + up: 0.025, + } +} + +config['talib-macd'] = { + parameters: { + optInFastPeriod: 10, + optInSlowPeriod: 21, + optInSignalPeriod: 9 + }, + thresholds: { + down: -0.025, + up: 0.025, + } +} + +config['tulip-adx'] = { + optInTimePeriod: 10, + thresholds: { + down: -0.025, + up: 0.025, + } +} + + // set this to true if you understand that Gekko will // invest according to how you configured the indicators. // None of the advice in the output is Gekko telling you diff --git a/strategies/DEBUG_toggle-advice.js b/strategies/DEBUG_toggle-advice.js index 1fabd2184..251585a57 100644 --- a/strategies/DEBUG_toggle-advice.js +++ b/strategies/DEBUG_toggle-advice.js @@ -23,7 +23,7 @@ var method = { return; log.info('iteration:', i); - + if(i % settings.each === 0) { log.debug('trigger SHORT'); this.advice('short'); @@ -42,4 +42,4 @@ var method = { } }; -module.exports = method; \ No newline at end of file +module.exports = method; diff --git a/strategies/tulip-adx.js b/strategies/tulip-adx.js index a96640648..358af0be1 100644 --- a/strategies/tulip-adx.js +++ b/strategies/tulip-adx.js @@ -1,10 +1,9 @@ -// Let's create our own method var method = {}; // Prepare everything our method needs method.init = function() { this.name = 'tulip-adx' this.trend = 'none'; - this.requiredHistory = this.settings.historySize; + this.requiredHistory = this.tradingAdvisor.historySize; this.addTulipIndicator('myadx', 'adx', this.settings); } // What happens on every new candle? diff --git a/web/vue/dist/app.9aa8dda3.js b/web/vue/dist/app.9aa8dda3.js new file mode 100644 index 000000000..6c8aebd79 --- /dev/null +++ b/web/vue/dist/app.9aa8dda3.js @@ -0,0 +1,2 @@ +(function(t){function e(e){for(var n,s,o=e[0],c=e[1],u=e[2],d=0,f=[];d0?"profit":"loss"}}},s=i,o=(a("tr8z"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},"0zrD":function(t,e,a){"use strict";var n=a("jf14"),r=a.n(n);r.a},26:function(t,e,a){t.exports=a("Vtdi")},"2A8w":function(t,e,a){"use strict";var n=a("TDb6"),r=a.n(n);r.a},"2Yda":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[a("h3",[t._v("Start a new gekko")]),a("gekko-config-builder",{on:{config:t.updateConfig}}),a("div",{staticClass:"hr"}),t.config.valid?a("div",{staticClass:"txt--center"},[t.pendingStratrunner?t._e():a("a",{staticClass:"w100--s my1 btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.start(e)}}},[t._v("Start")]),t.pendingStratrunner?a("spinner"):t._e()],1):t._e()],1)},r=[],i=(a("Z2Ku"),a("L9s1"),a("dRSK"),a("LvDl")),s=a.n(i),o=a("Kw5r"),c=a("wiDz"),u=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("h3",[t._v("Market")]),a("market-picker",{attrs:{"only-tradable":t.isTradebot},on:{market:t.updateMarketConfig}})],1),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("type-picker",{on:{type:t.updateType}})],1)]),"market watcher"!==t.type?[a("div",{staticClass:"hr"}),a("strat-picker",{staticClass:"contain my2",on:{stratConfig:t.updateStrat}}),"paper trader"===t.type?a("div",{staticClass:"hr"}):t._e(),"paper trader"===t.type?a("paper-trader",{on:{settings:t.updatePaperTrader}}):t._e()]:t._e()],2)},l=[],d=(a("91GP"),a("6BxS")),f=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h3",[t._v("Type")]),[a("label",{staticClass:"wrapper",attrs:{for:"type"}},[t._v("What do you want to do with gekko?")]),a("form",{staticClass:"radio grd"},t._l(t.types,function(e,n){return a("div",{staticClass:"grd-row m1"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedTypeIndex,expression:"selectedTypeIndex"}],staticClass:"grd-row-col-1-6",attrs:{type:"radio"},domProps:{value:n,checked:t._q(t.selectedTypeIndex,n)},on:{change:function(e){t.selectedTypeIndex=n}}}),a("label",{staticClass:"grd-row-col-5-6",attrs:{for:n}},[t._v(t._s(e))])])}))]],2)},h=[],m={created:function(){this.emitType()},data:function(){return{types:["paper trader","market watcher","tradebot"],selectedTypeIndex:0}},methods:{emitType:function(){this.$emit("type",this.type)}},watch:{type:function(){this.emitType()}},computed:{type:function(){return this.types[this.selectedTypeIndex]}}},v=m,p=(a("wVPO"),a("KHd+")),g=Object(p["a"])(v,f,h,!1,null,null,null),_=g.exports,k=a("6Wkr"),y=a("rloZ"),w={created:function(){var t=this;Object(c["a"])("configPart/candleWriter",function(e,a){t.candleWriter=toml.parse(a.part)}),Object(c["a"])("configPart/performanceAnalyzer",function(e,a){t.performanceAnalyzer=toml.parse(a.part),t.performanceAnalyzer.enabled=!0})},data:function(){return{market:{},range:{},type:"",strat:{},paperTrader:{},candleWriter:{},performanceAnalyzer:{}}},components:{marketPicker:d["a"],typePicker:_,stratPicker:k["a"],paperTrader:y["a"]},computed:{isTradebot:function(){return"tradebot"===this.type},config:function(){var t={};return Object.assign(t,this.market,this.strat,{paperTrader:this.paperTrader},{candleWriter:this.candleWriter},{type:this.type},{performanceAnalyzer:this.performanceAnalyzer}),this.isTradebot&&(delete t.paperTrader,t.trader={enabled:!0}),t.valid=this.validConfig(t),t}},methods:{validConfig:function(t){if("market watcher"===t.type)return!0;if(!t.tradingAdvisor)return!1;if(s.a.isNaN(t.tradingAdvisor.candleSize))return!1;if(0==t.tradingAdvisor.candleSize)return!1;var e=t.tradingAdvisor.method;return!s.a.isEmpty(t[e])},updateMarketConfig:function(t){this.market=t,this.emitConfig()},updateType:function(t){this.type=t,this.emitConfig()},updateStrat:function(t){this.strat=t,this.emitConfig()},updatePaperTrader:function(t){this.paperTrader=t,this.paperTrader.enabled=!0,this.emitConfig()},emitConfig:function(){this.$emit("config",this.config)}}},b=w,C=(a("YEdZ"),Object(p["a"])(b,u,l,!1,null,null,null)),x=C.exports,S=a("MB/c"),T={components:{gekkoConfigBuilder:x,spinner:S["a"]},data:function(){return{pendingStratrunner:!1,config:{}}},computed:{gekkos:function(){return this.$store.state.gekkos},watchConfig:function(){var t=s.a.pick(this.config,"watch","candleWriter"),e=o["a"].util.extend({},t);return e.type="market watcher",e.mode="realtime",e},requiredHistoricalData:function(){if(this.config.tradingAdvisor&&this.config.valid){var t=this.config.tradingAdvisor;return t.candleSize*t.historySize}},gekkoConfig:function(){var t;if(this.existingMarketWatcher){if(this.requiredHistoricalData){var e=moment().utc().startOf("minute").subtract(this.requiredHistoricalData,"minutes").unix(),a=moment.utc(this.existingMarketWatcher.events.initial.candle.start).unix();t=moment.unix(Math.max(e,a)).utc().format()}else t=moment().utc().startOf("minute").format();var n=o["a"].util.extend({market:{type:"leech",from:t},mode:"realtime"},this.config);return n}},existingMarketWatcher:function(){var t=o["a"].util.extend({},this.watchConfig.watch);return s.a.find(this.gekkos,{config:{watch:t}})},exchange:function(){return this.watchConfig.watch.exchange},existingTradebot:function(){var t=this;return s.a.find(this.gekkos,function(e){return"tradebot"===e.logType&&e.config.watch.exchange===t.exchange})},availableApiKeys:function(){return this.$store.state.apiKeys}},watch:{existingMarketWatcher:function(t,e){var a=this;if(this.pendingStratrunner){var n=this.existingMarketWatcher;n.events.latest.candle&&(this.pendingStratrunner=!1,this.startGekko(function(t,e){a.$router.push({path:"/live-gekkos/".concat(e.id)})}))}}},methods:{updateConfig:function(t){this.config=t},start:function(){var t=this;if("tradebot"===this.config.type){if(this.existingTradebot){var e="You already have a tradebot running on this exchange";return e+=", you can only run one tradebot per exchange.",alert(e)}if(!this.availableApiKeys.includes(this.exchange))return alert("Please first configure API keys for this exchange in the config page.")}"market watcher"===this.config.type?this.existingMarketWatcher?(alert("This market is already being watched, redirecting you now..."),this.$router.push({path:"/live-gekkos/".concat(this.existingMarketWatcher.id)})):this.startWatcher(function(e,a){t.$router.push({path:"/live-gekkos/".concat(a.id)})}):this.existingMarketWatcher?this.startGekko(this.routeToGekko):this.startWatcher(function(e,a){t.pendingStratrunner=a.id})},routeToGekko:function(t,e){if(t||e.error)return console.error(t,e.error);this.$router.push({path:"/live-gekkos/".concat(e.id)})},startWatcher:function(t){Object(c["b"])("startGekko",this.watchConfig,t)},startGekko:function(t){Object(c["b"])("startGekko",this.gekkoConfig,t)}}},E=T,P=(a("2A8w"),Object(p["a"])(E,n,r,!1,null,null,null));e["a"]=P.exports},"2rY9":function(t,e,a){"use strict";var n=a("SWS5"),r=a.n(n);r.a},"5/bm":function(t,e,a){},"5shn":function(t,e,a){"use strict";var n=a("DlQD"),r=new n.Renderer;r.link=function(t,e,a){var n,r,i;return n=/^https?:\/\/.+$/.test(t),r=n||"newWindow"===e,i='"+a+""},n.setOptions({renderer:r}),e["a"]=n},"6BxS":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("div",{staticClass:"mx1"},[a("label",{staticClass:"wrapper",attrs:{for:"exchange"}},[t._v("Exchange:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.exchange,expression:"exchange"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.exchange=e.target.multiple?a:a[0]}}},t._l(t.exchanges,function(e,n){return a("option",[t._v(t._s(n))])}))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("label",{attrs:{for:"currency"}},[t._v("Currency:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.currency,expression:"currency"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.currency=e.target.multiple?a:a[0]}}},t._l(t.currencies,function(e){return a("option",[t._v(t._s(e))])}))])]),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("label",{attrs:{for:"asset"}},[t._v("Asset:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.asset,expression:"asset"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.asset=e.target.multiple?a:a[0]}}},t._l(t.assets,function(e){return a("option",[t._v(t._s(e))])}))])])])])},r=[],i=(a("rGqo"),a("yt8O"),a("f3/d"),a("91GP"),a("LvDl")),s=a.n(i),o=(a("YIjs"),a("FhOJ"),a("wiDz"),{props:["onlyTradable","onlyImportable"],data:function(){return{exchange:"poloniex",currency:"USDT",asset:"BTC"}},created:function(){this.emitConfig()},computed:{exchanges:function(){var t=Object.assign({},this.$store.state.exchanges);return!s.a.isEmpty(t)&&(this.onlyTradable&&s.a.each(t,function(e,a){e.tradable||delete t[a]}),this.onlyImportable&&s.a.each(t,function(e,a){e.importable||delete t[a]}),t)},markets:function(){return this.exchanges?this.exchanges[this.exchange]:null},assets:function(){return this.exchanges?this.exchanges[this.exchange].markets[this.currency]:null},currencies:function(){return this.exchanges?s.a.keys(this.exchanges[this.exchange].markets):null},watchConfig:function(){return{watch:{exchange:this.exchange,currency:this.currency,asset:this.asset}}}},watch:{currency:function(){this.emitConfig()},asset:function(){this.emitConfig()},market:function(){this.emitConfig()},exchanges:function(){this.emitConfig()},exchange:function(){this.emitConfig()}},methods:{emitConfig:function(){this.$emit("market",this.watchConfig)}}}),c=o,u=a("KHd+"),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},"6Wkr":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 px1"},[a("h3",[t._v("Strategy")]),a("div",[a("label",{staticClass:"wrapper",attrs:{for:"strat"}},[t._v("Strategy:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.strategy,expression:"strategy"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.strategy=e.target.multiple?a:a[0]}}},t._l(t.strategies,function(e){return a("option",[t._v(t._s(e.name))])}))])]),a("div",[a("label",{attrs:{for:"candleSize"}},[t._v("Candle Size")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.rawCandleSize,expression:"rawCandleSize"}],domProps:{value:t.rawCandleSize},on:{input:function(e){e.target.composing||(t.rawCandleSize=e.target.value)}}})]),a("div",{staticClass:"grd-row-col-3-6 align"},[a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.candleSizeUnit,expression:"candleSizeUnit"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.candleSizeUnit=e.target.multiple?a:a[0]}}},[a("option",[t._v("minutes")]),a("option",[t._v("hours")]),a("option",[t._v("days")])])])])])]),a("div",[a("label",{attrs:{for:"historySize"}},[t._v("Warmup period (in "+t._s(t.rawCandleSize)+" "+t._s(t.singularCandleSizeUnit)+" candles):")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.historySize,expression:"historySize"}],domProps:{value:t.historySize},on:{input:function(e){e.target.composing||(t.historySize=e.target.value)}}}),a("em",{staticClass:"label-like"},[t._v("(will use "+t._s(t.humanizeDuration(t.candleSize*t.historySize*1e3*60))+" of data as history)")])])]),a("div",{staticClass:"grd-row-col-3-6 px1"},[a("div",[a("h3",[t._v("Parameters")]),a("p",[t._v(t._s(t.strategy)+" Parameters:")]),a("textarea",{directives:[{name:"model",rawName:"v-model",value:t.rawStratParams,expression:"rawStratParams"}],staticClass:"params",domProps:{value:t.rawStratParams},on:{input:function(e){e.target.composing||(t.rawStratParams=e.target.value)}}}),t.rawStratParamsError?a("p",{staticClass:"bg--red p1"},[t._v(t._s(t.rawStratParamsError.message))]):t._e()])])])])},r=[],i=(a("dRSK"),a("LvDl")),s=a.n(i),o=a("wiDz"),c={data:function(){return{strategies:[],candleSizeUnit:"hours",rawCandleSize:1,strategy:"MACD",historySize:10,rawStratParams:"",rawStratParamsError:!1,emptyStrat:!1,stratParams:{}}},created:function(){var t=this;Object(o["a"])("strategies",function(e,a){t.strategies=a,s.a.each(t.strategies,function(t){t.empty=""===t.params}),t.rawStratParams=s.a.find(t.strategies,{name:t.strategy}).params,t.emptyStrat=s.a.find(t.strategies,{name:t.strategy}).empty,t.emitConfig()})},watch:{strategy:function(t){t=s.a.find(this.strategies,{name:t}),this.rawStratParams=t.params,this.emptyStrat=t.empty,this.emitConfig()},candleSize:function(){this.emitConfig()},historySize:function(){this.emitConfig()},rawStratParams:function(){this.emitConfig()}},computed:{candleSize:function(){return"minutes"===this.candleSizeUnit?this.rawCandleSize:"hours"===this.candleSizeUnit?60*this.rawCandleSize:"days"===this.candleSizeUnit?60*this.rawCandleSize*24:void 0},singularCandleSizeUnit:function(){return this.candleSizeUnit.slice(0,-1)},config:function(){var t={tradingAdvisor:{enabled:!0,method:this.strategy,candleSize:+this.candleSize,historySize:+this.historySize}};return this.emptyStrat?t[this.strategy]={__empty:!0}:t[this.strategy]=this.stratParams,t}},methods:{humanizeDuration:function(t){return window.humanizeDuration(t)},emitConfig:function(){this.parseParams(),this.$emit("stratConfig",this.config)},parseParams:function(){try{this.stratParams=toml.parse(this.rawStratParams),this.rawStratParamsError=!1}catch(t){this.rawStratParamsError=t,this.stratParams={}}}}},u=c,l=(a("tr8f"),a("KHd+")),d=Object(l["a"])(u,n,r,!1,null,null,null);e["a"]=d.exports},"7LpK":function(t,e,a){},"8KAT":function(t,e,a){},"9RND":function(t){t.exports={name:"gekko",version:"0.6.5",description:"A bitcoin trading bot for auto trading at various exchanges",keywords:["trading","bot","bitcoin","TA","finance"],scripts:{test:"./node_modules/.bin/mocha test/*.js --recursive test -u tdd --reporter spec",start:"node ./gekko --config config.js --ui"},author:"Mike van Rossum ",dependencies:{"@slack/client":"^3.10.0",async:"2.1.2","bitfinex-api-node":"^1.2.1","co-fs":"^1.2.0",commander:"^2.13.0",gekko:"0.0.9","humanize-duration":"^3.10.0",koa:"^1.2.0","koa-bodyparser":"^2.2.0","koa-cors":"0.0.16","koa-logger":"^1.3.0","koa-router":"^5.4.0","koa-static":"^2.0.0",lodash:"2.x",moment:"^2.20.1",opn:"^4.0.2","promisify-node":"^0.5.0","prompt-lite":"0.1.1",pushbullet:"1.4.3",relieve:"^2.1.3",retry:"^0.10.1",semver:"5.4.1",sqlite3:"^4.0.0","stats-lite":"^2.0.4","tiny-promisify":"^0.1.1",toml:"^2.3.0",twitter:"^1.7.1"},devDependencies:{chai:"^4.1.2",mocha:"^5.0.0",proxyquire:"^1.7.10",request:"^2.83.0","request-promise":"^4.2.2",sinon:"^4.2.0"},engines:{node:">=8.11.2"},license:"MIT",repository:{type:"git",url:"https://github.com/askmike/gekko.git"}}},CyGp:function(t,e,a){"use strict";var n=a("jTvs"),r=a.n(n);r.a},EAJ1:function(t,e,a){},EDI0:function(t,e,a){},EfWa:function(t,e,a){},FhOJ:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h3",[t._v("Daterange")]),a("div",[a("label",{attrs:{for:"from"}},[t._v("From")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.from,expression:"from"}],domProps:{value:t.from},on:{input:function(e){e.target.composing||(t.from=e.target.value)}}})]),a("div",[a("label",{attrs:{for:"to"}},[t._v("To")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.to,expression:"to"}],domProps:{value:t.to},on:{input:function(e){e.target.composing||(t.to=e.target.value)}}})])])},r=[],i=(a("LvDl"),a("wiDz"),{data:function(){return{from:"",to:""}},created:function(){var t=moment().startOf("minute"),e=t.clone().subtract(3,"months");this.to=this.fmt(t),this.from=this.fmt(e),this.emitRange()},methods:{fmtTs:function(t){return moment.unix(t).utc()},fmt:function(t){return t.utc().format("YYYY-MM-DD HH:mm")},emitRange:function(){this.$emit("range",{from:this.fmtTs(this.from),to:this.fmtTs(this.to)})},emitManualEntry:function(){if(this.from.length<"4"||this.from.length<"4")return this.$emit("range",{});var t=moment.utc(this.from),e=moment.utc(this.to);t.isValid()&&e.isValid()?this.$emit("range",{from:this.fmt(t),to:this.fmt(e)}):this.$emit("range",{})}},watch:{from:function(){this.emitManualEntry()},to:function(){this.emitManualEntry()},config:function(){this.scanned=!1},tab:function(){this.scanned=!1,this.$emit("range",{})},selectedRangeIndex:function(){var t=this.ranges[this.selectedRangeIndex];t&&this.emitRange(t)}}}),s=i,o=(a("TPp/"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},"H+ir":function(t,e,a){"use strict";var n=a("5/bm"),r=a.n(n);r.a},Kd0R:function(t,e,a){},"MB/c":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"spinner"},[a("div",{staticClass:"rect1"}),a("div",{staticClass:"rect2"}),a("div",{staticClass:"rect3"}),a("div",{staticClass:"rect4"})])}],i={},s=i,o=(a("q431"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},Pf3K:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"app"}},[a("top"),a("div",{staticClass:"fill"},[a("router-view",{staticClass:"view"})],1),a("bottom"),a("modal")],1)},r=[],i=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("div",{attrs:{id:"top"}}),t._m(0),a("nav",{staticClass:"bg--light-gray"},[a("div",{staticClass:"menu contain"},[a("router-link",{staticClass:"py1",attrs:{to:"/home"}},[t._v("Home")]),a("router-link",{staticClass:"py1",attrs:{to:"/live-gekkos"}},[t._v("Live Gekkos")]),a("router-link",{staticClass:"py1",attrs:{to:"/backtest"}},[t._v("Backtest")]),a("router-link",{staticClass:"py1",attrs:{to:"/data"}},[t._v("Local data")]),a("router-link",{staticClass:"py1",attrs:{to:"/config"}},[t._v("Config")]),a("a",{staticClass:"py1",attrs:{href:"https://gekko.wizb.it/docs/introduction/about_gekko.html",target:"_blank"}},[t._v("Documentation")])],1)])])},s=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("header",{staticClass:"bg--off-white grd"},[a("div",{staticClass:"contain grd-row"},[a("h3",{staticClass:"py1 px2 col-2"},[t._v("Gekko UI")])])])}],o={},c=o,u=(a("uMTv"),a("KHd+")),l=Object(u["a"])(c,i,s,!1,null,null,null),d=l.exports,f=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("footer",{staticClass:"p2 bg--off-white"},[a("div",{staticClass:"contain"},[t._m(0),a("p",[t._v("Using Gekko v"+t._s(t.version.gekko)+" and Gekko UI v"+t._s(t.version.ui)+".")])])])},h=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("p",[a("em",[t._v("Use Gekko at your own risk.")])])}],m=a("9RND"),v=a("kiQV"),p={data:function(){return{version:{gekko:m.version,ui:v.version}}}},g=p,_=Object(u["a"])(g,f,h,!1,null,null,null),k=_.exports,y=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.active?a("div",[a("div",{attrs:{id:"modal-background"}}),a("div",{staticClass:"modal",attrs:{id:"modal"}},[a("div",{staticClass:"modal-guts",domProps:{innerHTML:t._s(t.content)}})])]):t._e()},w=[],b=a("5shn"),C={disconnected:Object(b["a"])("\n\n## Disconnected\n\nSomething happened to either Gekko or the connection.\nPlease check the terminal where Gekko is running or\nyour network connection.\n\n*This message is shown when the UI is unable to open a websocket connection with the Gekko Server.*\n\n ")},x={computed:{active:function(){return!this.$store.state.warnings.connected},content:function(){return this.$store.state.warnings.connected?"":C.disconnected}}},S=x,T=(a("TfKe"),Object(u["a"])(S,y,w,!1,null,null,null)),E=T.exports,P={name:"app",components:{top:d,bottom:k,modal:E}},A=P,z=(a("ZL7j"),Object(u["a"])(A,n,r,!1,null,null,null));e["a"]=z.exports},Q2AE:function(t,e,a){"use strict";var n={};a.r(n),a.d(n,"addImport",function(){return d}),a.d(n,"syncImports",function(){return f}),a.d(n,"updateImport",function(){return h});var r={};a.r(r),a.d(r,"syncGekkos",function(){return g}),a.d(r,"addGekko",function(){return _}),a.d(r,"updateGekko",function(){return k}),a.d(r,"archiveGekko",function(){return y}),a.d(r,"errorGekko",function(){return w}),a.d(r,"deleteGekko",function(){return b});var i={};a.r(i),a.d(i,"setGlobalWarning",function(){return C});var s={};a.r(s),a.d(s,"syncApiKeys",function(){return x}),a.d(s,"syncExchanges",function(){return S});a("VRzm");var o=a("Kw5r"),c=a("L2JU"),u=a("LvDl"),l=a.n(u),d=(a("INYr"),function(t,e){return t.imports.push(e),t}),f=function(t,e){return t.imports=e,t},h=function(t,e){var a=t.imports.findIndex(function(t){return t.id===e.import_id}),n=t.imports[a];if(!n)return t;var r=o["a"].util.extend(n,e.updates);return o["a"].set(t.imports,a,r),t},m=a("oyJW"),v=a("yT7P"),p=a("c7Wa"),g=function(t,e){return e?(t.gekkos=e.live,t.archivedGekkos=e.archive,t):t},_=function(t,e){return t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,e)),t},k=function(t,e){return e.id&&l.a.has(t.gekkos,e.id)?(t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,p(t.gekkos[e.id],e.event))),t):console.error("cannot update unknown gekko..")},y=function(t,e){return l.a.has(t.gekkos,e)?(t.archivedGekkos=Object(v["a"])({},t.archivedGekkos,Object(m["a"])({},e,Object(v["a"])({},t.gekkos[e],{stopped:!0,active:!1}))),t.gekkos=l.a.omit(t.gekkos,e),t):console.error("cannot archive unknown gekko..")},w=function(t,e){return l.a.has(t.gekkos,e.id)?(t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,Object(v["a"])({},t.gekkos[e.id],{errored:!0,errorMessage:e.error}))),t):console.error("cannot error unknown gekko..")},b=function(t,e){return l.a.has(t.archivedGekkos,e)?(t.archivedGekkos=l.a.omit(t.archivedGekkos,e),t):console.error("cannot delete unknown gekko..")},C=function(t,e){return t.warnings[e.key]=e.value,t},x=function(t,e){return o["a"].set(t,"apiKeys",e),t},S=function(t,e){return o["a"].set(t,"exchanges",e),t};o["a"].use(c["a"]);var T=!1,E={};l.a.merge(E,n),l.a.merge(E,r),l.a.merge(E,i),l.a.merge(E,s);e["a"]=new c["a"].Store({state:{warnings:{connected:!0},imports:[],gekkos:{},archivedGekkos:{},connection:{disconnected:!1,reconnected:!1},apiKeys:[],exchanges:{}},mutations:E,strict:T})},Q6eY:function(t,e,a){"use strict";var n=a("SDwi"),r=a.n(n);r.a},SDwi:function(t,e,a){},SWS5:function(t,e,a){},T0Mt:function(t,e,a){"use strict";var n=a("pd3X"),r=a.n(n);r.a},TDb6:function(t,e,a){},"TPp/":function(t,e,a){"use strict";var n=a("7LpK"),r=a.n(n);r.a},TfKe:function(t,e,a){"use strict";var n=a("ZpQ2"),r=a.n(n);r.a},UeuA:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{class:{clickable:!t.isClicked},attrs:{id:"chartWrapper"}},[a("div",{staticClass:"shield",on:{click:function(e){return e.preventDefault(),t.click(e)}}}),a("svg",{attrs:{id:"chart",width:"960",height:t.height}})])},r=[],i=a("k5N+"),s=a("LvDl"),o=a.n(s),c=function(t,e,a){var n=function(t){return o.a.isNumber(t)?moment.unix(t).utc().toDate():moment.utc(t).toDate()},r=e.map(function(t){return{price:t.price,date:n(t.date),action:t.action}}),s=t.map(function(t){return{price:t.open,date:n(t.start)}}),c=s.map(function(t){return+t.date}),u=s.map(function(t){return+t.price}),l=d3.select("#chart");l.attr("width",window.innerWidth-20);var d={top:20,right:20,bottom:110,left:40},f=a-d.top-d.bottom,h={top:a-70,right:20,bottom:30,left:40},m=+l.attr("width")-d.left-d.right,v=a-h.top-h.bottom,p=d3.scaleUtc().range([0,m]),g=d3.scaleUtc().range([0,m]),_=d3.scaleLinear().range([f,0]),k=d3.scaleLinear().range([v,0]),y=d3.axisBottom(p),w=d3.axisBottom(g),b=d3.axisLeft(_).ticks(a/50),C=d3.brushX().extent([[0,0],[m,v]]).on("brush end",z),x=d3.zoom().scaleExtent([1,100]).translateExtent([[0,0],[m,f]]).extent([[0,0],[m,f]]).on("zoom",$),S=d3.line().x(function(t){return p(t.date)}).y(function(t){return _(t.price)}),T=d3.line().x(function(t){return g(t.date)}).y(function(t){return k(t.price)});l.append("defs").append("clipPath").attr("id","clip").append("rect").attr("width",m).attr("height",f);var E=l.append("g").attr("class","focus").attr("transform","translate("+d.left+","+d.top+")"),P=l.append("g").attr("class","context").attr("transform","translate("+h.left+","+h.top+")");p.domain(d3.extent(s,function(t){return t.date})),_.domain([.99*d3.min(u),1.01*d3.max(u)]),g.domain(p.domain()),k.domain(_.domain()),E.append("path").datum(s).attr("class","line price").attr("d",S),E.append("g").attr("class","axis axis--x").attr("transform","translate(0,"+f+")").call(y),E.append("g").attr("class","axis axis--y").call(b),P.append("path").datum(s).attr("class","line").attr("d",T),P.append("g").attr("class","axis axis--x").attr("transform","translate(0,"+v+")").call(w);var A=l.append("g").attr("transform","translate("+d.left+","+d.top+")").selectAll("circle").data(r).enter().append("circle").attr("class",function(t){return t.action}).attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}).attr("r",5);P.append("g").selectAll("circle").data(r).enter().append("circle").attr("class",function(t){return t.action}).attr("cx",function(t){return g(t.date)}).attr("cy",function(t){return k(t.price)}).attr("r",3);function z(){if(!d3.event.sourceEvent||"zoom"!==d3.event.sourceEvent.type){var t=d3.event.selection||g.range();p.domain(t.map(g.invert,g)),D(p.domain()),l.select(".axis--y").call(b),A.attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}),E.select(".line").attr("d",S),E.select(".axis--x").call(y),l.select(".zoom").call(x.transform,d3.zoomIdentity.scale(m/(t[1]-t[0])).translate(-t[0],0))}}function D(t){var e=Object(i["a"])(t,2),a=e[0],n=e[1],r=o.a.sortedIndex(c,a),s=o.a.sortedIndex(c,n),l=u.slice(r,s);_.domain([.9995*d3.min(l),1.0005*d3.max(l)])}function $(){if(!d3.event.sourceEvent||"brush"!==d3.event.sourceEvent.type){var t=d3.event.transform;D(t.rescaleX(g).domain()),l.select(".axis--y").call(b),p.domain(t.rescaleX(g).domain()),E.select(".line").attr("d",S),A.attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}),E.select(".axis--x").call(y),P.select(".brush").call(C.move,p.range().map(t.invertX,t))}}P.append("g").attr("class","brush").call(C).call(C.move,p.range()),l.append("rect").attr("class","zoom").attr("width",m).attr("height",f).attr("transform","translate("+d.left+","+d.top+")").call(x)},u=(a("dRSK"),function(t){d3.select("#chart").append("text").attr("class","message").attr("x",150).attr("y",150).text(t)}),l=4,d={props:["data","height"],data:function(){return{isClicked:!1}},watch:{data:function(){this.render()}},created:function(){setTimeout(this.render,100)},beforeDestroy:function(){this.remove()},methods:{click:function(){this.isClicked=!0},render:function(){this.remove(),_.size(this.data.candles)0?"profit":"loss"}}},$=D,j=(a("WlXR"),Object(g["a"])($,P,A,!1,null,null,null)),O=j.exports,M=a("UeuA"),G=a("vf3E"),I={props:["result"],data:function(){return{}},methods:{},components:{roundtripTable:G["a"],resultSummary:O,chart:M["a"]},computed:{candles:function(){return{candles:this.result.stratCandles,trades:this.result.trades}}}},R=I,H=(a("wVP4"),Object(g["a"])(R,T,E,!1,null,null,null)),K=H.exports,Y={data:function(){return{backtestable:!1,backtestState:"idle",backtestResult:!1,config:!1}},methods:{check:function(t){if(this.config=t,!t.valid)return this.backtestable=!1;this.backtestable=!0},run:function(){var t=this;this.backtestState="fetching",Object(f["b"])("backtest",this.config,function(e,a){t.backtestState="fetched",t.backtestResult=a})}},components:{configBuilder:S,result:K,spinner:h["a"]}},W=Y,N=Object(g["a"])(W,n,r,!1,null,null,null);e["a"]=N.exports},c7Wa:function(t,e){const a=["marketUpdate"],n=["marketStart","stratWarmupCompleted"],r=["tradeCompleted","advice","roundtrip"],i=(t,e)=>{const i=e.type,s=e.payload;return t={...t,latestUpdate:new Date},r.includes(i)&&(t=t.events[i]?{...t,events:{...t.events,[i]:[...t.events[i],s]}}:{...t,events:{...t.events,[i]:[s]}}),t.events.initial[i]||a.includes(i)||(t={...t,events:{...t.events,initial:{...t.events.initial,[i]:s}}}),n.includes(i)||(t={...t,events:{...t.events,latest:{...t.events.latest,[i]:s}}}),t};t.exports=i},dHeD:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain"},[a("div",{staticClass:"text",domProps:{innerHTML:t._s(t.intro)}}),a("div",{staticClass:"hr"}),a("h2",[t._v("Available datasets")]),"idle"===t.datasetScanstate?a("div",{staticClass:"txt--center my2"},[a("a",{staticClass:"w100--s btn--primary scan-btn",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.scan(e)}}},[t._v("Scan available data")])]):t._e(),"scanning"===t.datasetScanstate?a("div",{staticClass:"txt--center my2"},[a("spinner")],1):t._e(),"scanned"===t.datasetScanstate?a("div",{staticClass:"my2"},[t.unscannableMakets.length?a("div",{staticClass:"bg--orange p1 warning my1"},[t.viewUnscannable?t._e():a("p",{staticClass:"clickable",on:{click:function(e){return e.preventDefault(),t.toggleUnscannable(e)}}},[t._v("Some markets were unscannable, click here for details.")]),t.viewUnscannable?[a("p",[t._v("Unable to find datasets in the following markets:")]),t._l(t.unscannableMakets,function(e){return a("div",{staticClass:"mx2"},[t._v("- "+t._s(e.exchange)+":"+t._s(e.currency)+":"+t._s(e.asset))])})]:t._e()],2):t._e(),t.datasets.length?[a("table",{staticClass:"full data"},[t._m(0),a("tbody",t._l(t.datasets,function(e){return a("tr",[a("td",[t._v(t._s(e.exchange))]),a("td",[t._v(t._s(e.currency))]),a("td",[t._v(t._s(e.asset))]),a("td",[t._v(t._s(t.fmt(e.from)))]),a("td",[t._v(t._s(t.fmt(e.to)))]),a("td",[t._v(t._s(t.humanizeDuration(e.to.diff(e.from))))])])}))])]:t._e(),t.datasets.length?t._e():[a("p",[t._v("It looks like you don't have any local data yet.")])]],2):t._e(),a("div",{staticClass:"my2"},[a("h2",[t._v("Import more data")]),a("p",{staticClass:"text"},[t._v("You can easily import more market data directly from exchanges using the importer.")]),a("router-link",{staticClass:"btn--primary",attrs:{to:"/data/importer"}},[t._v("Go to the importer!")])],1)])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("from")]),a("th",[t._v("to")]),a("th",[t._v("duration")])])])}],i=(a("VRzm"),a("MB/c")),s=a("5shn"),o=a("spvI"),c=Object(s["a"])("\n\n## Local data\n\nGekko needs local market data in order to backtest strategies. The local\ndata can also be used in a warmup period when running a strategy against a\nlive market.\n\n"),u={mixins:[o["a"]],components:{spinner:i["a"]},data:function(){return{intro:c,viewUnscannable:!1}},methods:{toggleUnscannable:function(){this.viewUnscannable=!0},humanizeDuration:function(t){return window.humanizeDuration(t)},fmt:function(t){return t.format("YYYY-MM-DD HH:mm")}}},l=u,d=(a("2rY9"),a("KHd+")),f=Object(d["a"])(l,n,r,!1,null,null,null);e["a"]=f.exports},dW8q:function(t,e,a){"use strict";var n=a("w3yp"),r=a.n(n);r.a},daul:function(t,e,a){"use strict";var n=a("Kd0R"),r=a.n(n);r.a},g298:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[t.data&&!t.data.done?a("div",[a("h2",[t._v("Importing data..")]),a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[t._m(0),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.data.watch.exchange))])]),a("div",{staticClass:"grd-row"},[t._m(1),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.data.watch.currency)+"/"+t._s(t.data.watch.asset))])])]),a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[t._m(2),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.from)))])]),a("div",{staticClass:"grd-row"},[t._m(3),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.to)))])]),t.initialized?a("div",{staticClass:"grd-row"},[t._m(4),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.latest)))])]):t._e(),t.initialized?a("div",{staticClass:"grd-row"},[t._m(5),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fromEnd))])]):t._e()]),t.initialized?t._e():a("spinner"),t.initialized?a("div",{staticClass:"contain"},[a("progressBar",{attrs:{progress:t.progress}})],1):t._e(),a("p",[a("em",[t._v("(you don't have to wait until the import is done,you can already start "),a("router-link",{attrs:{to:"/backtest"}},[t._v("backtesting")]),t._v(").")],1)])],1):t._e(),t.data&&t.data.done?a("div",{staticClass:"txt--center"},[a("h2",[t._v("Import done")]),a("p",[t._v(" Go and "),a("router-link",{attrs:{to:"/backtest"}},[t._v("backtest")]),t._v(" with your new data!")],1)]):t._e(),t.data?t._e():a("div",{staticClass:"txt--center"},[a("h2",[t._v("ERROR: Unknown import")]),a("p",[a("I",[t._v("don't know this import..")])],1)])])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Market:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Currency/Asset:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("From:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("To:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Imported data until:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Remaining:")])])}],i=(a("dRSK"),a("LvDl")),s=a.n(i),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.progress?a("div",{staticClass:"progressbarWrapper"},[a("p",[a("strong",[t._v(t._s(t.round(t.progress))+"%")])]),a("div",{staticClass:"progressbar"},[a("div",{style:{width:t.progress+"%"}})])]):t._e()},c=[],u={props:["progress"],methods:{round:function(t){return(+t).toFixed(2)}}},l=u,d=(a("/vJE"),a("KHd+")),f=Object(d["a"])(l,o,c,!1,null,null,null),h=f.exports,m=a("MB/c"),v={components:{progressBar:h,spinner:m["a"]},computed:{data:function(){return s.a.find(this.$store.state.imports,{id:this.$route.params.id})},initialized:function(){if(this.data&&this.latest.isValid())return!0},latest:function(){if(this.data)return this.mom(this.data.latest)},fromEndMs:function(){if(this.data)return this.to.diff(this.latest)},fromEnd:function(){return this.latest?humanizeDuration(this.fromEndMs):"LOADING"},from:function(){if(this.data)return this.mom(this.data.from)},to:function(){if(this.data)return this.mom(this.data.to)},timespan:function(){if(this.data)return this.to.diff(this.from)},progress:function(){if(this.data){var t=this.timespan-this.fromEndMs;return 100*t/this.timespan}}},methods:{fmt:function(t){return t.format("YYYY-MM-DD HH:mm:ss")},mom:function(t){return moment.utc(t)}}},p=v,g=(a("qDq4"),Object(d["a"])(p,n,r,!1,null,null,null));e["a"]=g.exports},gYof:function(t,e,a){"use strict";a("LvDl");var n=a("Kw5r"),r=a("r0f2"),i=(a("L2JU"),a("wiDz")),s=a("Q2AE"),o=function(){Object(i["a"])("imports",function(t,e){s["a"].commit("syncImports",e)})},c=function(){C.$on("import_update",function(t){s["a"].commit("updateImport",t)})},u=function(){o(),c()},l=function(){Object(i["a"])("gekkos",function(t,e){var a=e;s["a"].commit("syncGekkos",a)})},d=function(){C.$on("gekko_new",function(t){return s["a"].commit("addGekko",t.state)}),C.$on("gekko_event",function(t){return s["a"].commit("updateGekko",t)}),C.$on("gekko_archived",function(t){return s["a"].commit("archiveGekko",t.id)}),C.$on("gekko_error",function(t){return s["a"].commit("errorGekko",t)}),C.$on("gekko_deleted",function(t){return s["a"].commit("deleteGekko",t.id)})},f=function(){l(),d()},h=function(){},m=function(){C.$on("WS_STATUS_CHANGE",function(t){return s["a"].commit("setGlobalWarning",{key:"connected",value:t.connected})})},v=function(){h(),m()},p=a("k5N+"),g=(a("rGqo"),function(t){if(!t)return{};var e=t,a={};return e.forEach(function(t){a[t.slug]=a[t.slug]||{markets:{}},t.markets.forEach(function(e){var n=Object(p["a"])(e["pair"],2),r=n[0],i=n[1];a[t.slug].markets[r]=a[t.slug].markets[r]||[],a[t.slug].markets[r].push(i)}),"exchangeMaxHistoryAge"in t&&(a[t.slug].exchangeMaxHistoryAge=t.exchangeMaxHistoryAge),a[t.slug].importable=!!t.providesFullHistory,a[t.slug].tradable=!!t.tradable,a[t.slug].requires=t.requires}),a}),_=function(){Object(i["a"])("apiKeys",function(t,e){s["a"].commit("syncApiKeys",e)}),Object(i["a"])("exchanges",function(t,e){s["a"].commit("syncExchanges",g(e))})},k=function(){C.$on("apiKeys",function(t){s["a"].commit("syncApiKeys",t.exchanges)})},y=function(){_(),k()},w=function(){u(),f(),v(),y()};a.d(e,"a",function(){return C}),a.d(e,"b",function(){return S});var b=null,C=new n["a"];C.$on("gekko_update",function(t){return console.log(t)}),C.$on("import_update",function(t){return console.log(t)}),C.$on("import_error",function(t){alert("IMPORT ERROR: "+t.error)});var x={connected:!1},S=function(){b=new ReconnectingWebSocket(r["b"],null,{maxReconnectInterval:4e3}),setTimeout(function(){x.connected||(w(),C.$emit("WS_STATUS_CHANGE",x))},500),b.onopen=function(){x.connected||(x.connected=!0,C.$emit("WS_STATUS_CHANGE",x),w())},b.onclose=function(){x.connected&&(x.connected=!1,C.$emit("WS_STATUS_CHANGE",x))},b.onerror=function(){x.connected&&(x.connected=!1,C.$emit("WS_STATUS_CHANGE",x))},b.onmessage=function(t){var e=JSON.parse(t.data);C.$emit(e.type,e)}}},h8ks:function(t,e,a){},hGnM:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain py2"},[a("h3",[t._v("Market watchers")]),t.watchers.length?t._e():a("div",{staticClass:"text"},[a("p",[t._v("You don't have any market watchers.")])]),t.watchers.length?a("table",{staticClass:"full clickable"},[t._m(0),a("tbody",t._l(t.watchers,function(e){return a("tr",{staticClass:"clickable",on:{click:function(a){t.$router.push({path:"/live-gekkos/"+e.id})}}},[a("td",[t._v(t._s(e.config.watch.exchange))]),a("td",[t._v(t._s(e.config.watch.currency))]),a("td",[t._v(t._s(e.config.watch.asset))]),a("td",[t._v(t._s(t.status(e)))]),a("td",[e.events.initial.candle?[t._v(t._s(t.fmt(e.events.initial.candle.start)))]:t._e()],2),a("td",[e.events.latest.candle?[t._v(t._s(t.fmt(e.events.latest.candle.start)))]:t._e()],2),a("td",[e.events.initial.candle&&e.events.latest.candle?[t._v(t._s(t.timespan(e.events.latest.candle.start,e.events.initial.candle.start)))]:t._e()],2)])}))]):t._e(),a("h3",[t._v("Strat runners")]),t.stratrunners.length?t._e():a("div",{staticClass:"text"},[a("p",[t._v("You don't have any stratrunners.")])]),t.stratrunners.length?a("table",{staticClass:"full"},[t._m(1),a("tbody",t._l(t.stratrunners,function(e){return a("tr",{staticClass:"clickable",on:{click:function(a){t.$router.push({path:"/live-gekkos/"+e.id})}}},[a("td",[t._v(t._s(e.config.watch.exchange))]),a("td",[t._v(t._s(e.config.watch.currency))]),a("td",[t._v(t._s(e.config.watch.asset))]),a("td",[t._v(t._s(t.status(e)))]),a("td",[e.events.initial.candle&&e.events.latest.candle?[t._v(t._s(t.timespan(e.events.latest.candle.start,e.events.initial.candle.start)))]:t._e()],2),a("td",[t._v(t._s(e.config.tradingAdvisor.method))]),a("td",[t.report(e)?t._e():[t._v("0")],t.report(e)?[t._v(t._s(t.round(t.report(e).profit))+" "+t._s(t.report(e).currency))]:t._e()],2),a("td",[t._v(t._s(e.logType))]),a("td",[e.events.tradeCompleted?t._e():[t._v("0")],e.events.tradeCompleted?[t._v(t._s(e.events.tradeCompleted.length))]:t._e()],2)])}))]):t._e(),a("div",{staticClass:"hr"}),a("h2",[t._v("Start a new live Gekko")]),a("router-link",{staticClass:"btn--primary",attrs:{to:"/live-gekkos/new"}},[t._v("Start a new live Gekko!")])],1)},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("status")]),a("th",[t._v("started at")]),a("th",[t._v("last update")]),a("th",[t._v("duration")])])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("status")]),a("th",[t._v("duration")]),a("th",[t._v("strategy")]),a("th",[t._v("PnL")]),a("th",[t._v("type")]),a("th",[t._v("trades")])])])}],i=(a("a1Th"),a("rGqo"),a("yt8O"),a("VRzm"),{created:function(){var t=this;this.timer=setInterval(function(){t.now=moment()},1e3)},destroyed:function(){clearTimeout(this.timer)},data:function(){return{timer:!1,now:moment()}},computed:{stratrunners:function(){return _.values(this.$store.state.gekkos).concat(_.values(this.$store.state.archivedGekkos)).filter(function(t){return"papertrader"===t.logType||"tradebot"===t.logType})},watchers:function(){return _.values(this.$store.state.gekkos).concat(_.values(this.$store.state.archivedGekkos)).filter(function(t){return"watcher"===t.logType})}},methods:{humanizeDuration:function(t){return window.humanizeDuration(t)},moment:function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(t){return moment.utc(t)}),fmt:function(t){return moment.utc(t).format("YYYY-MM-DD HH:mm")},round:function(t){return(+t).toFixed(3)},timespan:function(t,e){return this.humanizeDuration(this.moment(t).diff(this.moment(e)))},status:function(t){return t.errored?"errored":t.stopped?"stopped":t.active?"running":void console.log("unknown state:",t)},report:function(t){return _.get(t,"events.latest.performanceReport")}}}),s=i,o=(a("daul"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},jTvs:function(t,e,a){},jVW9:function(t,e,a){},jf14:function(t,e,a){},jloR:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[a("div",{staticClass:"text",domProps:{innerHTML:t._s(t.intro)}}),a("div",{staticClass:"hr"}),a("h3",[t._v("Currently running imports")]),0===t.imports.length?a("p",[t._v("You currently don't have any imports running.")]):t._e(),t.imports.length?a("ul",t._l(t.imports,function(e){return a("li",[a("router-link",{attrs:{to:"/data/importer/import/"+e.id}},[t._v(t._s(e.watch.exchange)+":"+t._s(e.watch.currency)+"/"+t._s(e.watch.asset))])],1)})):t._e(),a("div",{staticClass:"hr"}),a("h3",[t._v("Start a new import")]),a("import-config-builder",{on:{config:t.updateConfig}}),a("div",{staticClass:"hr"}),a("div",{staticClass:"txt--center"},[a("a",{staticClass:"w100--s my1 btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.run(e)}}},[t._v("Import")])])],1)},r=[],i=a("wiDz"),s=a("MB/c"),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("h3",[t._v("Market")]),a("market-picker",{attrs:{"only-importable":"true"},on:{market:t.updateMarketConfig}})],1),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("range-creator",{on:{range:t.updateRange}})],1)])])},c=[],u=(a("91GP"),a("6BxS")),l=a("FhOJ"),d=(a("LvDl"),{data:function(){return{market:{},range:{}}},components:{marketPicker:u["a"],rangeCreator:l["a"]},computed:{config:function(){var t={};return Object.assign(t,this.market,{importer:{daterange:this.range}},{candleWriter:{enabled:!0}}),t}},methods:{updateMarketConfig:function(t){this.market=t,this.emitConfig()},updateRange:function(t){this.range=t,this.emitConfig()},emitConfig:function(){this.$emit("config",this.config)}}}),f=d,h=(a("H+ir"),a("KHd+")),m=Object(h["a"])(f,o,c,!1,null,null,null),v=m.exports,p=a("5shn"),g=Object(p["a"])("\n\n## Import data\n\nThe importer can download historical market data directly from the exchange.\n\n"),_={components:{importConfigBuilder:v,spinner:s["a"]},data:function(){return{intro:g,config:{}}},computed:{imports:function(){return this.$store.state.imports}},methods:{daysApart:function(t){var e=moment(t.to),a=moment(t.from);return e.diff(a,"days")},updateConfig:function(t){this.config=t},run:function(){var t=this,e=this.daysApart(this.config.importer.daterange);if(e<1)return alert("You can only import at least one day of data..");var a=this.$store.state.exchanges[this.config.watch.exchange];if("exchangeMaxHistoryAge"in a&&moment(this.config.importer.daterange.from) 1%","last 2 versions","not ie <= 8"]}},ldlP:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("section",{staticClass:"contain grd-row"},[a("div",{staticClass:"grd-row-col-3-6",domProps:{innerHTML:t._s(t.left)}}),t._m(0)])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-3-6 txt--center"},[a("img",{attrs:{src:"static/gekko.jpg"}}),a("p",[a("em",[t._v("The most valuable commodity I know of is information.")])])])}],i=(a("VRzm"),a("5shn")),s=Object(i["a"])("\n\n## Gekko\n\nGekko is a Bitcoin trading bot and backtesting platform that\nconnects to popular Bitcoin exchanges. It is written in javascript\nand runs on nodejs.\n\n[Find out more](https://gekko.wizb.it/).\n\n*Gekko is 100% free (open source), if you paid for this you have been scammed.*\n\n"),o={data:function(){return{left:s}}},c=o,u=a("KHd+"),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},mf2E:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"my2"},[t.data?t._e():a("div",{staticClass:"contain"},[a("h1",[t._v("Unknown Gekko instance")]),a("p",[t._v("Gekko doesn't know what gekko this is...")])]),t.data?a("div",[a("h2",{staticClass:"contain"},[t._v("Gekko "+t._s(t.type))]),t.isArchived?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This is an archived Gekko, it is currently not running anymore.")]):t._e(),t.data.errorMessage?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This is Gekko crashed with the following error: "+t._s(t.data.errorMessage))]):t._e(),a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Market")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Exchange")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.exchange))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Currency")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.currency))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Asset")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.asset))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Type")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.type))])])]),a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Runtime")]),t.isLoading?a("spinner"):t._e(),t.isLoading?t._e():[t.initialEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Watching since")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.initialEvents.candle.start)))])]):t._e(),t.latestEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Received data until")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.latestEvents.candle.start)))])]):t._e(),t.latestEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Data spanning")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.humanizeDuration(t.moment(t.latestEvents.candle.start).diff(t.moment(t.initialEvents.candle.start)))))])]):t._e(),t.isStratrunner?[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Amount of trades")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.trades.length))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Candle size")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.config.tradingAdvisor.candleSize))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("History size")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.config.tradingAdvisor.historySize))])])]:t._e()]],2)]),t.warmupRemaining?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This stratrunner is still warming up for the next "),a("i",[t._v(t._s(t.warmupRemaining.replace(","," and ")))]),t._v(", it will not trade until it is warmed up.")]):t._e(),t.isStratrunner?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Strategy")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Name")]),a("div",{staticClass:"grd-row-col-3-6"},[a("strong",[t._v(t._s(t.stratName))])])]),t._v("Parameters"),a("pre",[t._v(t._s(t.stratParams))])]),a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Profit report")]),t.report?t._e():[a("p",[t.isArchived?a("em",[t._v("This Gekko never executed a trade..")]):t._e(),t.isArchived?t._e():a("em",[t._v("Waiting for at least one trade..")])])],t.report?[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Start balance")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.startBalance)))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Current balance")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.balance)))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Market")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.market/100*t.report.startPrice))+" "+t._s(t.config.watch.currency)+" ("+t._s(t.round(t.report.market))+" %)")])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Profit")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.profit))+" "+t._s(t.config.watch.currency)+" ("+t._s(t.round(t.report.relativeProfit))+" %)")])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Alpha")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.alpha))+" "+t._s(t.config.watch.currency))])])]:t._e()],2)]):t._e(),!t.isStratrunner||t.watcher||t.isArchived?t._e():a("p",[t._v("WARNING: stale gekko, not attached to a watcher, please report "),a("a",{attrs:{href:"https://github.com/askmike/gekko/issues"}},[t._v("here")]),t._v(".")]),t.isArchived?t._e():a("p",[a("a",{staticClass:"w100--s my1 btn--red",on:{click:t.stopGekko}},[t._v("Stop Gekko")])]),t.isArchived?a("p",[a("a",{staticClass:"w100--s my1 btn--red",on:{click:t.deleteGekko}},[t._v("Delete Gekko")])]):t._e(),t.isStratrunner&&t.watcher&&!t.isArchived?a("p",[a("em",[t._v("This gekko gets market data from "),a("router-link",{attrs:{to:"/live-gekkos/"+t.watcher.id}},[t._v("this market watcher")])],1),t._v(".")]):t._e()]),t.isLoading?t._e():[a("h3",{staticClass:"contain"},[t._v("Market graph")]),"fetching"===t.candleFetch?a("spinner"):t._e(),"fetched"===t.candleFetch?[a("chart",{attrs:{data:t.chartData,height:300}})]:t._e(),t.isStratrunner?a("roundtrips",{attrs:{roundtrips:t.roundtrips}}):t._e()]],2):t._e()])},r=[],i=(a("a1Th"),a("dRSK"),a("VRzm"),a("Kw5r")),s=a("LvDl"),o=a.n(s),c=a("wiDz"),u=a("MB/c"),l=a("UeuA"),d=a("vf3E"),f=a("0Bu0"),h={created:function(){this.isLoading||this.getCandles()},components:{spinner:u["a"],chart:l["a"],paperTradeSummary:f["a"],roundtrips:d["a"]},data:function(){return{candleFetch:"idle",candles:!1}},computed:{id:function(){return this.$route.params.id},gekkos:function(){return this.$store.state.gekkos},archivedGekkos:function(){return this.$store.state.archivedGekkos},data:function(){return!!this.gekkos&&(o.a.has(this.gekkos,this.id)?this.gekkos[this.id]:!!o.a.has(this.archivedGekkos,this.id)&&this.archivedGekkos[this.id])},config:function(){return o.a.get(this,"data.config")},latestEvents:function(){return o.a.get(this,"data.events.latest")},initialEvents:function(){return o.a.get(this,"data.events.initial")},trades:function(){return o.a.get(this,"data.events.tradeCompleted")||[]},roundtrips:function(){return o.a.get(this,"data.events.roundtrip")||[]},isLive:function(){return o.a.has(this.gekkos,this.id)},type:function(){return this.data.logType},isStratrunner:function(){return"watcher"!==this.type},isArchived:function(){return this.data.stopped},warmupRemaining:function(){if(!this.isStratrunner)return!1;if(this.isArchived)return!1;if(this.initialEvents.stratWarmupCompleted)return!1;if(!this.initialEvents.candle)return!1;var t=o.a.get(this.config,"tradingAdvisor.historySize");if(!t)return!1;var e=o.a.get(this.config,"tradingAdvisor.candleSize")*t;return humanizeDuration(moment(this.initialEvents.candle.start).add(e,"m").diff(moment()),{largest:2})},chartData:function(){return{candles:this.candles,trades:this.trades}},report:function(){return o.a.get(this.latestEvents,"performanceReport")},stratName:function(){if(this.data)return this.data.config.tradingAdvisor.method},stratParams:function(){if(!this.data)return"Loading...";var t=i["a"].util.extend({},this.data.config[this.stratName]);return delete t.__empty,o.a.isEmpty(t)?"No parameters":JSON.stringify(t,null,4)},isLoading:function(){return!this.data||(!o.a.get(this.data,"events.initial.candle")||!o.a.get(this.data,"events.latest.candle"))},watcher:function(){var t=this;if(!this.isStratrunner)return!1;var e=i["a"].util.extend({},this.data.config.watch);return o.a.find(this.gekkos,function(a){return a.id!==t.id&&o.a.isEqual(e,a.config.watch)})},hasLeechers:function(){var t=this;if(this.isStratrunner)return!1;var e=i["a"].util.extend({},this.data.config.watch);return o.a.find(this.gekkos,function(a){return a.id!==t.id&&o.a.isEqual(e,a.config.watch)})}},watch:{"data.events.latest.candle.start":function(){setTimeout(this.getCandles,o.a.random(100,2e3))}},methods:{round:function(t){return(+t).toFixed(5)},humanizeDuration:function(t,e){return window.humanizeDuration(t,e)},moment:function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(t){return moment.utc(t)}),fmt:function(t){return moment.utc(t).format("YYYY-MM-DD HH:mm")},getCandles:function(){var t=this;if(!this.isLoading&&"fetching"!==this.candleFetch){this.candleFetch="fetching";var e=this.data.events.latest.candle.start,a=this.data.events.initial.candle.start,n=1;"watcher"!==this.type&&(n=this.data.config.tradingAdvisor.candleSize);var r={watch:this.data.config.watch,daterange:{to:e,from:a},candleSize:n};setTimeout(function(){Object(c["b"])("getCandles",r,function(e,a){if(t.candleFetch="fetched",!a||a.error||!o.a.isArray(a))return console.log(a);t.candles=a.map(function(t){return t.start=moment.unix(t.start).utc().format(),t})})},o.a.random(150,2500))}},stopGekko:function(){if(this.hasLeechers)return alert("This Gekko is fetching market data for multiple stratrunners, stop these first.");confirm("Are you sure you want to stop this Gekko?")&&Object(c["b"])("stopGekko",{id:this.data.id},function(t,e){console.log("stopped gekko")})},deleteGekko:function(){var t=this;if(!this.isArchived)return alert("This Gekko is still running, stop it first!");confirm("Are you sure you want to delete this Gekko?")&&Object(c["b"])("deleteGekko",{id:this.data.id},function(e,a){t.$router.push({path:"/live-gekkos/"})})}}},m=h,v=(a("/Dpa"),a("KHd+")),p=Object(v["a"])(m,n,r,!1,null,null,null);e["a"]=p.exports},ngcj:function(t,e,a){"use strict";var n=a("EAJ1"),r=a.n(n);r.a},nzng:function(t,e,a){},pd3X:function(t,e,a){},pyMo:function(t,e,a){},q431:function(t,e,a){"use strict";var n=a("ydmZ"),r=a.n(n);r.a},qDq4:function(t,e,a){"use strict";var n=a("nzng"),r=a.n(n);r.a},r0f2:function(t,e,a){"use strict";a.d(e,"b",function(){return i}),a.d(e,"a",function(){return r});var n,r,i,s=window.CONFIG.ui,o="".concat(s.host).concat(80===s.port?"":":".concat(s.port)).concat(s.path);n=s.ssl?"https://".concat(o):"http://".concat(o),r=n+"api/",i=s.ssl?"wss://".concat(o,"api"):"ws://".concat(o,"api")},rloZ:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd"},[a("div",{staticClass:"px1"},[a("h3",[t._v("Paper trader")]),"closed"===t.toggle?a("a",{staticClass:"btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.switchToggle(e)}}},[t._v("Change paper trader settings")]):t._e(),"open"===t.toggle?[a("p",[t._v("Settings:")]),a("textarea",{directives:[{name:"model",rawName:"v-model",value:t.rawPaperTraderParams,expression:"rawPaperTraderParams"}],staticClass:"params",domProps:{value:t.rawPaperTraderParams},on:{input:function(e){e.target.composing||(t.rawPaperTraderParams=e.target.value)}}}),t.rawPaperTraderParamsError?a("p",{staticClass:"bg--red p1"},[t._v(t._s(t.rawPaperTraderParamsError.message))]):t._e()]:t._e()],2)])},r=[],i=(a("LvDl"),a("wiDz")),s={created:function(){var t=this;Object(i["a"])("configPart/paperTrader",function(e,a){t.rawPaperTraderParams=a.part})},data:function(){return{rawPaperTraderParams:"",rawPaperTraderParamsError:!1,paperTraderParams:{},toggle:"closed"}},watch:{rawPaperTraderParams:function(){this.emitConfig()}},methods:{switchToggle:function(){"open"===this.toggle?this.toggle="closed":this.toggle="open"},emitConfig:function(){this.parseParams(),this.$emit("settings",this.paperTraderParams)},parseParams:function(){try{this.paperTraderParams=toml.parse(this.rawPaperTraderParams),this.paperTraderParams.reportRoundtrips=!0,this.rawPaperTraderParamsError=!1}catch(t){this.rawPaperTraderParamsError=t,this.paperTraderParams={}}}}},o=s,c=(a("0zrD"),a("KHd+")),u=Object(c["a"])(o,n,r,!1,null,null,null);e["a"]=u.exports},spvI:function(t,e,a){"use strict";a("Vd3H"),a("rGqo");var n=a("wiDz"),r={data:function(){return{datasets:[],datasetScanstate:"idle",unscannableMakets:[]}},methods:{scan:function(){var t=this;this.datasetScanstate="scanning",Object(n["b"])("scansets",{},function(e,a){t.datasetScanstate="scanned",t.unscannableMakets=a.errors;var n=[];a.datasets.forEach(function(t){t.ranges.forEach(function(e,a){n.push({exchange:t.exchange,currency:t.currency,asset:t.asset,from:moment.unix(e.from).utc(),to:moment.unix(e.to).utc(),id:t.exchange+t.asset+t.currency+a})})}),n=n.filter(function(t){if(t.to.diff(t.from,"hours")>2)return!0}),n=n.sort(function(t,e){var a=t.to.diff(t.from),n=e.to.diff(e.from);return an?1:0}).reverse(),t.datasets=n})}}};e["a"]=r},tr8f:function(t,e,a){"use strict";var n=a("h8ks"),r=a.n(n);r.a},tr8z:function(t,e,a){"use strict";var n=a("Ug4+"),r=a.n(n);r.a},uMTv:function(t,e,a){"use strict";var n=a("pyMo"),r=a.n(n);r.a},uXxc:function(t,e,a){},vf3E:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain roundtrips"},[a("h2",[t._v("Roundtrips")]),t.roundtrips.length?a("table",[a("thead",[t._m(0),t._l(t.roundtrips,function(e){return a("tr",[a("td",[t._v(t._s(t.fmt(e.entryAt)))]),a("td",[t._v(t._s(t.fmt(e.exitAt)))]),a("td",[t._v(t._s(t.diff(e.duration)))]),a("td",[t._v(t._s(t.round(e.entryBalance)))]),a("td",[t._v(t._s(t.round(e.exitBalance)))]),-1===Math.sign(e.pnl)?[a("td",{staticClass:"loss"},[t._v(t._s(Math.sign(e.pnl)*e.pnl.toFixed(2)))]),a("td",{staticClass:"loss"},[t._v(t._s(e.profit.toFixed(2))+"%")])]:[a("td",{staticClass:"profit"},[t._v(t._s(e.pnl.toFixed(2)))]),a("td",{staticClass:"profit"},[t._v(t._s(e.profit.toFixed(2))+"%")])]],2)})],2)]):t._e(),t.roundtrips.length?t._e():a("div",[a("p",[t._v("Not enough data to display")])])])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("tr",[a("th",[t._v("Entry at (UTC)")]),a("th",[t._v("Exit at (UTC)")]),a("th",[t._v("Exposure")]),a("th",[t._v("Entry balance")]),a("th",[t._v("Exit balance")]),a("th",[t._v("P&L")]),a("th",[t._v("Profit")])])}],i=a("LvDl"),s=a.n(i),o={props:["roundtrips"],data:function(){return{}},methods:{diff:function(t){return moment.duration(t).humanize()},humanizeDuration:function(t){return window.humanizeDuration(t)},fmt:function(t){var e;return e=s.a.isNumber(t)?moment.unix(t):moment(t).utc(),e.utc().format("YYYY-MM-DD HH:mm")},round:function(t){return(+t).toFixed(3)}}},c=o,u=(a("dW8q"),a("KHd+")),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},vwRV:function(t,e,a){},w3yp:function(t,e,a){},wVP4:function(t,e,a){"use strict";var n=a("vwRV"),r=a.n(n);r.a},wVPO:function(t,e,a){"use strict";var n=a("uXxc"),r=a.n(n);r.a},wiDz:function(t,e,a){"use strict";a.d(e,"b",function(){return u}),a.d(e,"a",function(){return l});var n=a("24Ii"),r=a.n(n),i=a("TrxG"),s=a.n(i),o=a("r0f2"),c=function(t){return function(e,a){if(e)return t(e);if(!a.text)return t("no data");var n=JSON.parse(a.text);t(!1,n)}},u=function(t,e,a){r.a.post(o["a"]+t).use(s.a).send(e).end(c(a))},l=function(t,e){r.a.get(o["a"]+t).use(s.a).end(c(e))}},ydmZ:function(t,e,a){},yomC:function(t,e,a){"use strict";var n=a("EfWa"),r=a.n(n);r.a},yuKf:function(t,e,a){}}); +//# sourceMappingURL=app.9aa8dda3.js.map \ No newline at end of file diff --git a/web/vue/dist/app.9aa8dda3.js.map b/web/vue/dist/app.9aa8dda3.js.map new file mode 100644 index 000000000..3b348202f --- /dev/null +++ b/web/vue/dist/app.9aa8dda3.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/gekko/singleGekko.vue?6cec","webpack:///./src/components/global/progressBar.vue?7bcc","webpack:///./src/components/global/paperTradeSummary.vue?13b5","webpack:///src/components/global/paperTradeSummary.vue","webpack:///./src/components/global/paperTradeSummary.vue?a8ef","webpack:///./src/components/global/paperTradeSummary.vue","webpack:///./src/components/global/configbuilder/papertrader.vue?c5cd","webpack:///./src/components/gekko/new.vue?c104","webpack:///./src/components/gekko/new.vue?367c","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?035a","webpack:///./src/components/global/configbuilder/typepicker.vue?df24","webpack:///src/components/global/configbuilder/typepicker.vue","webpack:///./src/components/global/configbuilder/typepicker.vue?cf28","webpack:///./src/components/global/configbuilder/typepicker.vue","webpack:///src/components/gekko/gekkoConfigBuilder.vue","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?8d92","webpack:///./src/components/gekko/gekkoConfigBuilder.vue","webpack:///src/components/gekko/new.vue","webpack:///./src/components/gekko/new.vue?ae9a","webpack:///./src/components/gekko/new.vue","webpack:///./src/components/data/data.vue?4abe","webpack:///./src/tools/marked.js","webpack:///./src/components/global/configbuilder/marketpicker.vue?d701","webpack:///src/components/global/configbuilder/marketpicker.vue","webpack:///./src/components/global/configbuilder/marketpicker.vue?200d","webpack:///./src/components/global/configbuilder/marketpicker.vue","webpack:///./src/components/global/configbuilder/stratpicker.vue?fda9","webpack:///src/components/global/configbuilder/stratpicker.vue","webpack:///./src/components/global/configbuilder/stratpicker.vue?8a34","webpack:///./src/components/global/configbuilder/stratpicker.vue","webpack:///./src/components/global/configbuilder/rangepicker.vue?ce7c","webpack:///./src/components/global/configbuilder/rangecreator.vue?8425","webpack:///src/components/global/configbuilder/rangecreator.vue","webpack:///./src/components/global/configbuilder/rangecreator.vue?3f8d","webpack:///./src/components/global/configbuilder/rangecreator.vue","webpack:///./src/components/data/import/importConfigBuilder.vue?3911","webpack:///./src/components/global/blockSpinner.vue?cca6","webpack:///src/components/global/blockSpinner.vue","webpack:///./src/components/global/blockSpinner.vue?7b17","webpack:///./src/components/global/blockSpinner.vue","webpack:///./src/App.vue?77b6","webpack:///./src/components/layout/header.vue?345a","webpack:///src/components/layout/header.vue","webpack:///./src/components/layout/header.vue?8ecd","webpack:///./src/components/layout/header.vue","webpack:///./src/components/layout/footer.vue?0614","webpack:///src/components/layout/footer.vue","webpack:///./src/components/layout/footer.vue?6aff","webpack:///./src/components/layout/footer.vue","webpack:///./src/components/layout/modal.vue?5ed7","webpack:///src/components/layout/modal.vue","webpack:///./src/components/layout/modal.vue?6e33","webpack:///./src/components/layout/modal.vue","webpack:///src/App.vue","webpack:///./src/App.vue?8f16","webpack:///./src/App.vue","webpack:///./src/store/modules/imports/mutations.js","webpack:///./src/store/modules/gekkos/mutations.js","webpack:///./src/store/modules/notifications/mutations.js","webpack:///./src/store/modules/config/mutations.js","webpack:///./src/store/index.js","webpack:///./src/components/backtester/backtestConfigBuilder.vue?fda9","webpack:///./src/components/backtester/result/chartWrapper.vue?d2a0","webpack:///./src/components/global/configbuilder/rangecreator.vue?c7ad","webpack:///./src/components/layout/modal.vue?a2b4","webpack:///./src/components/backtester/result/chartWrapper.vue?cfc8","webpack:///./src/d3/chart4.js","webpack:///./src/d3/message.js","webpack:///src/components/backtester/result/chartWrapper.vue","webpack:///./src/components/backtester/result/chartWrapper.vue?414d","webpack:///./src/components/backtester/result/chartWrapper.vue","webpack:///./src/main.js","webpack:///./src/components/backtester/result/summary.vue?6f4b","webpack:///./src/components/config/config.vue?9014","webpack:///./src/components/config/apiConfigBuilder.vue?901e","webpack:///./src/components/global/configbuilder/exchangepicker.vue?f5ea","webpack:///src/components/global/configbuilder/exchangepicker.vue","webpack:///./src/components/global/configbuilder/exchangepicker.vue?f140","webpack:///./src/components/global/configbuilder/exchangepicker.vue","webpack:///src/components/config/apiConfigBuilder.vue","webpack:///./src/components/config/apiConfigBuilder.vue?a340","webpack:///./src/components/config/apiConfigBuilder.vue","webpack:///src/components/config/config.vue","webpack:///./src/components/config/config.vue?03e8","webpack:///./src/components/config/config.vue","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?c09b","webpack:///./src/components/global/configbuilder/rangepicker.vue?e445","webpack:///src/components/global/configbuilder/rangepicker.vue","webpack:///./src/components/global/configbuilder/rangepicker.vue?6482","webpack:///./src/components/global/configbuilder/rangepicker.vue","webpack:///./src/App.vue?8b0d","webpack:///./src/components/config/apiConfigBuilder.vue?bb40","webpack:///./src/components/backtester/backtester.vue?06dc","webpack:///./src/components/backtester/backtestConfigBuilder.vue?bafa","webpack:///./src/components/global/configbuilder/datasetpicker.vue?dc86","webpack:///src/components/global/configbuilder/datasetpicker.vue","webpack:///./src/components/global/configbuilder/datasetpicker.vue?adbd","webpack:///./src/components/global/configbuilder/datasetpicker.vue","webpack:///src/components/backtester/backtestConfigBuilder.vue","webpack:///./src/components/backtester/backtestConfigBuilder.vue?6bee","webpack:///./src/components/backtester/backtestConfigBuilder.vue","webpack:///./src/components/backtester/result/result.vue?f19d","webpack:///./src/components/backtester/result/summary.vue?a48b","webpack:///src/components/backtester/result/summary.vue","webpack:///./src/components/backtester/result/summary.vue?2c9f","webpack:///./src/components/backtester/result/summary.vue","webpack:///src/components/backtester/result/result.vue","webpack:///./src/components/backtester/result/result.vue?a333","webpack:///./src/components/backtester/result/result.vue","webpack:///src/components/backtester/backtester.vue","webpack:///./src/components/backtester/backtester.vue?b754","webpack:///./src/components/backtester/backtester.vue","webpack:///../state/reduceState.js","webpack:///./src/components/data/data.vue?5f3a","webpack:///src/components/data/data.vue","webpack:///./src/components/data/data.vue?7897","webpack:///./src/components/data/data.vue","webpack:///./src/components/backtester/result/roundtripTable.vue?cb8d","webpack:///./src/components/gekko/list.vue?dec3","webpack:///./src/components/data/import/single.vue?892b","webpack:///./src/components/global/progressBar.vue?f48f","webpack:///src/components/global/progressBar.vue","webpack:///./src/components/global/progressBar.vue?3819","webpack:///./src/components/global/progressBar.vue","webpack:///src/components/data/import/single.vue","webpack:///./src/components/data/import/single.vue?ea36","webpack:///./src/components/data/import/single.vue","webpack:///./src/store/modules/imports/sync.js","webpack:///./src/store/modules/gekkos/sync.js","webpack:///./src/store/modules/notifications/sync.js","webpack:///./src/store/modules/config/sync.js","webpack:///./src/store/init.js","webpack:///./src/components/global/ws.js","webpack:///./src/components/gekko/list.vue?889e","webpack:///src/components/gekko/list.vue","webpack:///./src/components/gekko/list.vue?1de5","webpack:///./src/components/gekko/list.vue","webpack:///./src/components/data/import/importer.vue?370b","webpack:///./src/components/data/import/importConfigBuilder.vue?d697","webpack:///src/components/data/import/importConfigBuilder.vue","webpack:///./src/components/data/import/importConfigBuilder.vue?4a12","webpack:///./src/components/data/import/importConfigBuilder.vue","webpack:///src/components/data/import/importer.vue","webpack:///./src/components/data/import/importer.vue?5b1c","webpack:///./src/components/data/import/importer.vue","webpack:///./src/components/layout/home.vue?d339","webpack:///src/components/layout/home.vue","webpack:///./src/components/layout/home.vue?334a","webpack:///./src/components/layout/home.vue","webpack:///./src/components/gekko/singleGekko.vue?a7f7","webpack:///src/components/gekko/singleGekko.vue","webpack:///./src/components/gekko/singleGekko.vue?71ef","webpack:///./src/components/gekko/singleGekko.vue","webpack:///./src/components/global/configbuilder/datasetpicker.vue?0d02","webpack:///./src/components/global/blockSpinner.vue?69ce","webpack:///./src/components/data/import/single.vue?dfe8","webpack:///./src/tools/api.js","webpack:///./src/components/global/configbuilder/papertrader.vue?4204","webpack:///src/components/global/configbuilder/papertrader.vue","webpack:///./src/components/global/configbuilder/papertrader.vue?fdb2","webpack:///./src/components/global/configbuilder/papertrader.vue","webpack:///./src/components/global/mixins/dataset.js","webpack:///./src/components/global/configbuilder/stratpicker.vue?808f","webpack:///./src/components/global/paperTradeSummary.vue?c6c2","webpack:///./src/components/layout/header.vue?b5b8","webpack:///./src/components/backtester/result/roundtripTable.vue?64de","webpack:///src/components/backtester/result/roundtripTable.vue","webpack:///./src/components/backtester/result/roundtripTable.vue?35c4","webpack:///./src/components/backtester/result/roundtripTable.vue","webpack:///./src/components/backtester/result/result.vue?65dd","webpack:///./src/components/global/configbuilder/typepicker.vue?09f6","webpack:///./src/tools/ajax.js","webpack:///./src/components/data/import/importer.vue?3808"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_singleGekko_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressBar_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","render","_vm","this","_h","$createElement","_c","_self","staticClass","_v","_s","report","trades","round2","sharpe","round","startBalance","currency","balance","_m","class","profitClass","relativeProfit","staticRenderFns","paperTradeSummaryvue_type_script_lang_js","props","methods","toFixed","computed","global_paperTradeSummaryvue_type_script_lang_js","component","componentNormalizer","__webpack_exports__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_papertrader_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","on","config","updateConfig","pendingStratrunner","_e","attrs","href","click","$event","preventDefault","start","gekkoConfigBuildervue_type_template_id_6015a1e6_lang_pug_render","only-tradable","isTradebot","market","updateMarketConfig","type","updateType","stratConfig","updateStrat","settings","updatePaperTrader","gekkoConfigBuildervue_type_template_id_6015a1e6_lang_pug_staticRenderFns","typepickervue_type_template_id_4a1aa84c_lang_pug_render","for","_l","directives","rawName","expression","domProps","checked","_q","selectedTypeIndex","change","typepickervue_type_template_id_4a1aa84c_lang_pug_staticRenderFns","typepickervue_type_script_lang_js","created","emitType","types","$emit","watch","configbuilder_typepickervue_type_script_lang_js","typepicker","gekkoConfigBuildervue_type_script_lang_js","_this","ajax","error","response","candleWriter","toml","parse","part","performanceAnalyzer","enabled","range","strat","paperTrader","components","marketPicker","marketpicker","typePicker","stratPicker","stratpicker","papertrader","assign","trader","valid","validConfig","tradingAdvisor","lodash_default","a","isNaN","candleSize","method","isEmpty","mc","emitConfig","pt","gekko_gekkoConfigBuildervue_type_script_lang_js","gekkoConfigBuilder_component","gekkoConfigBuilder","newvue_type_script_lang_js","spinner","blockSpinner","gekkos","$store","state","watchConfig","raw","pick","vue_runtime_esm","util","extend","requiredHistoricalData","stratSettings","historySize","gekkoConfig","startAt","existingMarketWatcher","optimal","moment","utc","startOf","subtract","unix","available","events","initial","candle","Math","max","format","from","find","exchange","existingTradebot","g","logType","availableApiKeys","apiKeys","val","prev","_this2","gekko","latest","startGekko","err","resp","$router","path","concat","id","_this3","str","alert","includes","startWatcher","routeToGekko","console","next","gekko_newvue_type_script_lang_js","new_component","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_data_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","marked","myRenderer","Renderer","link","title","text","external","newWindow","out","test","setOptions","renderer","$$selectedVal","Array","filter","target","options","selected","map","_value","multiple","e","cur","asset","asst","marketpickervue_type_script_lang_js","exchanges","onlyTradable","each","tradable","onlyImportable","importable","markets","assets","currencies","keys","configbuilder_marketpickervue_type_script_lang_js","strategy","input","composing","rawCandleSize","candleSizeUnit","singularCandleSizeUnit","humanizeDuration","rawStratParams","rawStratParamsError","message","stratpickervue_type_script_lang_js","strategies","emptyStrat","stratParams","empty","params","__empty","parseParams","configbuilder_stratpickervue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rangepicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","to","rangecreatorvue_type_script_lang_js","now","then","clone","fmt","emitRange","fmtTs","mom","emitManualEntry","isValid","scanned","tab","selectedRangeIndex","selectedRange","ranges","configbuilder_rangecreatorvue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_importConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","blockSpinnervue_type_script_lang_js","global_blockSpinnervue_type_script_lang_js","headervue_type_template_id_0a62d360_lang_pug_render","headervue_type_template_id_0a62d360_lang_pug_staticRenderFns","headervue_type_script_lang_js","layout_headervue_type_script_lang_js","header","footervue_type_template_id_7782dc11_lang_pug_render","version","ui","footervue_type_template_id_7782dc11_lang_pug_staticRenderFns","gekkoPackage","uiPackage","footervue_type_script_lang_js","layout_footervue_type_script_lang_js","footer_component","footer","modalvue_type_template_id_340a7d17_lang_pug_render","innerHTML","content","modalvue_type_template_id_340a7d17_lang_pug_staticRenderFns","messages","disconnected","modalvue_type_script_lang_js","active","warnings","connected","layout_modalvue_type_script_lang_js","modal_component","modal","Appvue_type_script_lang_js","top","bottom","src_Appvue_type_script_lang_js","App_component","addImport","imp","imports","syncImports","mutations_updateImport","update","index","findIndex","import_id","item","updated","updates","set","reduceState","syncGekkos","live","archivedGekkos","archive","mutations_addGekko","objectSpread","mutations_updateGekko","has","event","mutations_archiveGekko","stopped","omit","mutations_errorGekko","errored","errorMessage","mutations_deleteGekko","setGlobalWarning","warning","mutations_syncApiKeys","mutations_syncExchanges","use","vuex_esm","debug","mutations","merge","mutations_namespaceObject","gekkos_mutations_namespaceObject","notifications_mutations_namespaceObject","config_mutations_namespaceObject","Store","connection","reconnected","strict","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_backtestConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_chartWrapper_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rangecreator_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","chartWrappervue_type_template_id_12bcb8d8_lang_pug_render","clickable","isClicked","width","height","_data","_trades","_height","toDate","isNumber","price","date","action","open","dates","prices","svg","d3","select","attr","innerWidth","margin","right","left","margin2","height2","x","scaleUtc","x2","y","scaleLinear","y2","xAxis","axisBottom","xAxis2","yAxis","axisLeft","ticks","brush","brushX","extent","brushed","zoom","scaleExtent","translateExtent","zoomed","line","line2","append","focus","context","domain","min","datum","circles","selectAll","enter","sourceEvent","selection","invert","scaleY","transform","zoomIdentity","scale","translate","_domain","slicedToArray","minIndex","sortedIndex","maxIndex","rescaleX","move","invertX","draw","MIN_CANDLES","chartWrappervue_type_script_lang_js","setTimeout","beforeDestroy","remove","_","size","candles","chart4","html","result_chartWrappervue_type_script_lang_js","vue__WEBPACK_IMPORTED_MODULE_1__","vue_router__WEBPACK_IMPORTED_MODULE_3__","router","base","__dirname","routes","redirect","_components_layout_home_vue__WEBPACK_IMPORTED_MODULE_6__","_components_backtester_backtester_vue__WEBPACK_IMPORTED_MODULE_5__","_components_config_config_vue__WEBPACK_IMPORTED_MODULE_10__","_components_data_data_vue__WEBPACK_IMPORTED_MODULE_7__","_components_data_import_importer_vue__WEBPACK_IMPORTED_MODULE_8__","_components_data_import_single_vue__WEBPACK_IMPORTED_MODULE_9__","_components_gekko_list_vue__WEBPACK_IMPORTED_MODULE_11__","_components_gekko_new_vue__WEBPACK_IMPORTED_MODULE_12__","_components_gekko_singleGekko_vue__WEBPACK_IMPORTED_MODULE_13__","_components_global_ws__WEBPACK_IMPORTED_MODULE_14__","store","_store__WEBPACK_IMPORTED_MODULE_4__","el","h","_App_vue__WEBPACK_IMPORTED_MODULE_2__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_summary_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","apiKeySets","removeApiKey","addApiToggle","openAddApi","apiConfigBuildervue_type_template_id_4a31b09e_lang_pug_render","updateExchange","cred","credentials","$set","upload","apiConfigBuildervue_type_template_id_4a31b09e_lang_pug_staticRenderFns","exchangepickervue_type_template_id_50c29cb0_lang_pug_render","exchangepickervue_type_template_id_50c29cb0_lang_pug_staticRenderFns","exchangepickervue_type_script_lang_js","emitExchange","configbuilder_exchangepickervue_type_script_lang_js","exchangepicker","apiConfigBuildervue_type_script_lang_js","exchangePicker","requires","values","confirm","config_apiConfigBuildervue_type_script_lang_js","apiConfigBuilder_component","apiConfigBuilder","configvue_type_script_lang_js","config_configvue_type_script_lang_js","config_component","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_gekkoConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","scan","printRange","rangepickervue_type_script_lang_js","diff","duration","humanize","reset","configbuilder_rangepickervue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_apiConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","check","backtestState","run","backtestResult","backtestConfigBuildervue_type_template_id_0b74d9a3_lang_pug_render","dataset","updateDataset","backtestConfigBuildervue_type_template_id_0b74d9a3_lang_pug_staticRenderFns","datasetpickervue_type_template_id_689b8a00_lang_pug_render","datasetScanstate","datasets","setIndex","rangeVisible","openRange","customFrom","customTo","datasetpickervue_type_template_id_689b8a00_lang_pug_staticRenderFns","datasetpickervue_type_script_lang_js","mixins","largest","updateCustomRange","emitSet","configbuilder_datasetpickervue_type_script_lang_js","datasetpicker","backtestConfigBuildervue_type_script_lang_js","datasetPicker","backtest","daterange","backtestResultExporter","writeToDisk","stratUpdates","roundtrips","stratCandles","stratCandleProps","sc","backtester_backtestConfigBuildervue_type_script_lang_js","backtestConfigBuilder_component","backtestConfigBuilder","resultvue_type_template_id_72b63acc_lang_pug_render","performanceReport","resultvue_type_template_id_72b63acc_lang_pug_staticRenderFns","summaryvue_type_template_id_5bfc891d_lang_pug_render","startTime","endTime","timespan","startPrice","endPrice","summaryvue_type_template_id_5bfc891d_lang_pug_staticRenderFns","summaryvue_type_script_lang_js","paperTradeSummary","result_summaryvue_type_script_lang_js","summary_component","summary","resultvue_type_script_lang_js","roundtripTable","resultSummary","chart","chartWrapper","result_resultvue_type_script_lang_js","result_component","backtestervue_type_script_lang_js","backtestable","configBuilder","backtester_backtestervue_type_script_lang_js","backtester_component","skipInitialEvents","skipLatestEvents","trackAllEvents","reduce","payload","latestUpdate","Date","[object Object]","intro","unscannableMakets","viewUnscannable","toggleUnscannable","datavue_type_script_lang_js","data_datavue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_roundtripTable_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","done","fromEnd","initialized","progress","progressBarvue_type_template_id_2b42ff94_lang_pug_render","style","progressBarvue_type_template_id_2b42ff94_lang_pug_staticRenderFns","progressBarvue_type_script_lang_js","global_progressBarvue_type_script_lang_js","progressBar","singlevue_type_script_lang_js","$route","fromEndMs","current","import_singlevue_type_script_lang_js","single_component","sync_init","commit","sync_sync","bus","$on","imports_sync","gekkos_sync_init","gekkos_sync_sync","gekkos_sync","notifications_sync_init","notifications_sync_sync","ws","notifications_sync","sync_transformMarkets","backendData","exchangesRaw","exchangesTemp","forEach","slug","pair","_pair$pair","exchangeMaxHistoryAge","providesFullHistory","config_sync_init","config_sync_sync","config_sync","store_init","socket","log","info","ws_connect","ReconnectingWebSocket","api","maxReconnectInterval","onopen","onclose","onerror","onmessage","JSON","watchers","status","stratrunners","profit","tradeCompleted","listvue_type_script_lang_js","timer","setInterval","destroyed","clearTimeout","_moment","_x","arguments","toString","b","gekko_listvue_type_script_lang_js","_import","importConfigBuildervue_type_template_id_a8c578c6_lang_pug_render","only-importable","updateRange","importConfigBuildervue_type_template_id_a8c578c6_lang_pug_staticRenderFns","importConfigBuildervue_type_script_lang_js","rangeCreator","rangecreator","importer","import_importConfigBuildervue_type_script_lang_js","importConfigBuilder","importervue_type_script_lang_js","daysApart","import_importervue_type_script_lang_js","importer_component","src","homevue_type_script_lang_js","layout_homevue_type_script_lang_js","isLoading","initialEvents","latestEvents","warmupRemaining","replace","stratName","isArchived","alpha","isStratrunner","watcher","stopGekko","deleteGekko","candleFetch","chartData","singleGekkovue_type_script_lang_js","getCandles","isLive","stratWarmupCompleted","warmupTime","add","stringify","isEqual","hasLeechers","data.events.latest.candle.start","random","res","isArray","_this4","gekko_singleGekkovue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_datasetpicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_blockSpinner_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_single_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","basePath","restPath","wsPath","CONFIG","endpoint","host","port","ssl","toggle","switchToggle","rawPaperTraderParams","rawPaperTraderParamsError","papertradervue_type_script_lang_js","paperTraderParams","reportRoundtrips","configbuilder_papertradervue_type_script_lang_js","mixin","_tools_ajax__WEBPACK_IMPORTED_MODULE_2__","errors","sets","sort","adiff","bdiff","reverse","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_stratpicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paperTradeSummary_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","rt","entryAt","exitAt","entryBalance","exitBalance","sign","pnl","roundtripTablevue_type_script_lang_js","result_roundtripTablevue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_result_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_typepicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","processResponse","post","superagent__WEBPACK_IMPORTED_MODULE_0___default","_api_js__WEBPACK_IMPORTED_MODULE_2__","superagent_no_cache__WEBPACK_IMPORTED_MODULE_1___default","send","end","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_importer_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default"],"mappings":"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","file":"app.9aa8dda3.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([26,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-3-6\"},[_c('table',{staticClass:\"p1\"},[_c('tr',[_c('th',[_vm._v(\"amount of trades\")]),_c('td',[_vm._v(_vm._s(_vm.report.trades))])]),_c('tr',[_c('th',[_vm._v(\"sharpe ratio\")]),_c('td',[_vm._v(_vm._s(_vm.round2(_vm.report.sharpe)))])]),_c('tr',[_c('th',[_vm._v(\"start balance\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.startBalance))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"final balance\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.balance))+\" \"+_vm._s(_vm.report.currency))])]),_vm._m(0)]),_c('div',{staticClass:\"big txt--right price\",class:_vm.profitClass},[_vm._v(_vm._s(_vm.round(_vm.report.relativeProfit))+\"%\")])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"simulated profit\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./paperTradeSummary.vue?vue&type=template&id=637e135e&lang=pug\"\nimport script from \"./paperTradeSummary.vue?vue&type=script&lang=js\"\nexport * from \"./paperTradeSummary.vue?vue&type=script&lang=js\"\nimport style0 from \"./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[_c('h3',[_vm._v(\"Start a new gekko\")]),_c('gekko-config-builder',{on:{\"config\":_vm.updateConfig}}),_c('div',{staticClass:\"hr\"}),(_vm.config.valid)?_c('div',{staticClass:\"txt--center\"},[(!_vm.pendingStratrunner)?_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.start($event)}}},[_vm._v(\"Start\")]):_vm._e(),(_vm.pendingStratrunner)?_c('spinner'):_vm._e()],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Market\")]),_c('market-picker',{attrs:{\"only-tradable\":_vm.isTradebot},on:{\"market\":_vm.updateMarketConfig}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('type-picker',{on:{\"type\":_vm.updateType}})],1)]),(_vm.type !== \"market watcher\")?[_c('div',{staticClass:\"hr\"}),_c('strat-picker',{staticClass:\"contain my2\",on:{\"stratConfig\":_vm.updateStrat}}),(_vm.type === \"paper trader\")?_c('div',{staticClass:\"hr\"}):_vm._e(),(_vm.type === \"paper trader\")?_c('paper-trader',{on:{\"settings\":_vm.updatePaperTrader}}):_vm._e()]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Type\")]),[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"type\"}},[_vm._v(\"What do you want to do with gekko?\")]),_c('form',{staticClass:\"radio grd\"},_vm._l((_vm.types),function(type,i){return _c('div',{staticClass:\"grd-row m1\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedTypeIndex),expression:\"selectedTypeIndex\"}],staticClass:\"grd-row-col-1-6\",attrs:{\"type\":\"radio\"},domProps:{\"value\":i,\"checked\":_vm._q(_vm.selectedTypeIndex,i)},on:{\"change\":function($event){_vm.selectedTypeIndex=i}}}),_c('label',{staticClass:\"grd-row-col-5-6\",attrs:{\"for\":i}},[_vm._v(_vm._s(type))])])}))]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./typepicker.vue?vue&type=template&id=4a1aa84c&lang=pug\"\nimport script from \"./typepicker.vue?vue&type=script&lang=js\"\nexport * from \"./typepicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./typepicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./gekkoConfigBuilder.vue?vue&type=template&id=6015a1e6&lang=pug\"\nimport script from \"./gekkoConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./gekkoConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./new.vue?vue&type=template&id=da0dc488&lang=pug\"\nimport script from \"./new.vue?vue&type=script&lang=js\"\nexport * from \"./new.vue?vue&type=script&lang=js\"\nimport style0 from \"./new.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=style&index=0&lang=css\"","const marked = require('marked');\n\n// add `target='_blank'` to outgoing links\n\n// https://github.com/chjj/marked/pull/451#issuecomment-49976076\n\nvar myRenderer = new marked.Renderer();\nmyRenderer.link = function(href, title, text) {\n var external, newWindow, out;\n external = /^https?:\\/\\/.+$/.test(href);\n newWindow = external || title === 'newWindow';\n out = \"\" + text + \"\";\n};\n\nmarked.setOptions({renderer: myRenderer});\n\nexport default marked;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"mx1\"},[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Exchange:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.exchange),expression:\"exchange\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.exchange=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.exchanges),function(market,e){return _c('option',[_vm._v(_vm._s(e))])}))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('label',{attrs:{\"for\":\"currency\"}},[_vm._v(\"Currency:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currency),expression:\"currency\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.currency=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.currencies),function(cur){return _c('option',[_vm._v(_vm._s(cur))])}))])]),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('label',{attrs:{\"for\":\"asset\"}},[_vm._v(\"Asset:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.asset),expression:\"asset\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.asset=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.assets),function(asst){return _c('option',[_vm._v(_vm._s(asst))])}))])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./marketpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./marketpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./marketpicker.vue?vue&type=template&id=df4a8b2a&lang=pug\"\nimport script from \"./marketpicker.vue?vue&type=script&lang=js\"\nexport * from \"./marketpicker.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 px1\"},[_c('h3',[_vm._v(\"Strategy\")]),_c('div',[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"strat\"}},[_vm._v(\"Strategy:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.strategy),expression:\"strategy\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.strategy=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.strategies),function(strat){return _c('option',[_vm._v(_vm._s(strat.name))])}))])]),_c('div',[_c('label',{attrs:{\"for\":\"candleSize\"}},[_vm._v(\"Candle Size\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawCandleSize),expression:\"rawCandleSize\"}],domProps:{\"value\":(_vm.rawCandleSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawCandleSize=$event.target.value}}})]),_c('div',{staticClass:\"grd-row-col-3-6 align\"},[_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.candleSizeUnit),expression:\"candleSizeUnit\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.candleSizeUnit=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',[_vm._v(\"minutes\")]),_c('option',[_vm._v(\"hours\")]),_c('option',[_vm._v(\"days\")])])])])])]),_c('div',[_c('label',{attrs:{\"for\":\"historySize\"}},[_vm._v(\"Warmup period (in \"+_vm._s(_vm.rawCandleSize)+\" \"+_vm._s(_vm.singularCandleSizeUnit)+\" candles):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.historySize),expression:\"historySize\"}],domProps:{\"value\":(_vm.historySize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.historySize=$event.target.value}}}),_c('em',{staticClass:\"label-like\"},[_vm._v(\"(will use \"+_vm._s(_vm.humanizeDuration(_vm.candleSize * _vm.historySize * 1000 * 60))+\" of data as history)\")])])]),_c('div',{staticClass:\"grd-row-col-3-6 px1\"},[_c('div',[_c('h3',[_vm._v(\"Parameters\")]),_c('p',[_vm._v(_vm._s(_vm.strategy)+\" Parameters:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawStratParams),expression:\"rawStratParams\"}],staticClass:\"params\",domProps:{\"value\":(_vm.rawStratParams)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawStratParams=$event.target.value}}}),(_vm.rawStratParamsError)?_c('p',{staticClass:\"bg--red p1\"},[_vm._v(_vm._s(_vm.rawStratParamsError.message))]):_vm._e()])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./stratpicker.vue?vue&type=template&id=1df710ae&lang=pug\"\nimport script from \"./stratpicker.vue?vue&type=script&lang=js\"\nexport * from \"./stratpicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./stratpicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Daterange\")]),_c('div',[_c('label',{attrs:{\"for\":\"from\"}},[_vm._v(\"From\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.from),expression:\"from\"}],domProps:{\"value\":(_vm.from)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.from=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"to\"}},[_vm._v(\"To\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.to),expression:\"to\"}],domProps:{\"value\":(_vm.to)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.to=$event.target.value}}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./rangecreator.vue?vue&type=template&id=8c51143a&lang=pug\"\nimport script from \"./rangecreator.vue?vue&type=script&lang=js\"\nexport * from \"./rangecreator.vue?vue&type=script&lang=js\"\nimport style0 from \"./rangecreator.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"spinner\"},[_c('div',{staticClass:\"rect1\"}),_c('div',{staticClass:\"rect2\"}),_c('div',{staticClass:\"rect3\"}),_c('div',{staticClass:\"rect4\"})])}]\n\nexport { render, staticRenderFns }","// http://tobiasahlin.com/spinkit/\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./blockSpinner.vue?vue&type=template&id=45447ea6&lang=pug\"\nimport script from \"./blockSpinner.vue?vue&type=script&lang=js\"\nexport * from \"./blockSpinner.vue?vue&type=script&lang=js\"\nimport style0 from \"./blockSpinner.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('top'),_c('div',{staticClass:\"fill\"},[_c('router-view',{staticClass:\"view\"})],1),_c('bottom'),_c('modal')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"top\"}}),_vm._m(0),_c('nav',{staticClass:\"bg--light-gray\"},[_c('div',{staticClass:\"menu contain\"},[_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/home\"}},[_vm._v(\"Home\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/live-gekkos\"}},[_vm._v(\"Live Gekkos\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/backtest\"}},[_vm._v(\"Backtest\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/data\"}},[_vm._v(\"Local data\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/config\"}},[_vm._v(\"Config\")]),_c('a',{staticClass:\"py1\",attrs:{\"href\":\"https://gekko.wizb.it/docs/introduction/about_gekko.html\",\"target\":\"_blank\"}},[_vm._v(\"Documentation\")])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"bg--off-white grd\"},[_c('div',{staticClass:\"contain grd-row\"},[_c('h3',{staticClass:\"py1 px2 col-2\"},[_vm._v(\"Gekko UI\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./header.vue?vue&type=template&id=0a62d360&lang=pug\"\nimport script from \"./header.vue?vue&type=script&lang=js\"\nexport * from \"./header.vue?vue&type=script&lang=js\"\nimport style0 from \"./header.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"p2 bg--off-white\"},[_c('div',{staticClass:\"contain\"},[_vm._m(0),_c('p',[_vm._v(\"Using Gekko v\"+_vm._s(_vm.version.gekko)+\" and Gekko UI v\"+_vm._s(_vm.version.ui)+\".\")])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',[_c('em',[_vm._v(\"Use Gekko at your own risk.\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./footer.vue?vue&type=template&id=7782dc11&lang=pug\"\nimport script from \"./footer.vue?vue&type=script&lang=js\"\nexport * from \"./footer.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.active)?_c('div',[_c('div',{attrs:{\"id\":\"modal-background\"}}),_c('div',{staticClass:\"modal\",attrs:{\"id\":\"modal\"}},[_c('div',{staticClass:\"modal-guts\",domProps:{\"innerHTML\":_vm._s(_vm.content)}})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./modal.vue?vue&type=template&id=340a7d17&lang=pug\"\nimport script from \"./modal.vue?vue&type=script&lang=js\"\nexport * from \"./modal.vue?vue&type=script&lang=js\"\nimport style0 from \"./modal.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=29e7b8c2&lang=pug\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\n\nexport const addImport = (state, imp) => {\n state.imports.push(imp);\n return state;\n}\n\nexport const syncImports = (state, imports) => {\n state.imports = imports;\n return state;\n}\n\nexport const updateImport = (state, update) => {\n let index = state.imports.findIndex(i => i.id === update.import_id);\n let item = state.imports[index];\n if(!item)\n return state;\n\n let updated = Vue.util.extend(item, update.updates);\n Vue.set(state.imports, index, updated);\n\n return state;\n}","import Vue from 'vue'\nimport _ from 'lodash';\nconst reduceState = require('../../../../../state/reduceState');\n\nexport const syncGekkos = (state, data) => {\n if(!data) {\n return state;\n }\n\n state.gekkos = data.live;\n state.archivedGekkos = data.archive;\n return state;\n}\n\nexport const addGekko = (state, gekko) => {\n state.gekkos = {\n ...state.gekkos,\n [gekko.id]: gekko\n }\n return state;\n}\n\nexport const updateGekko = (state, update) => {\n if(!update.id || !_.has(state.gekkos, update.id)) {\n return console.error('cannot update unknown gekko..');;\n }\n\n state.gekkos = {\n ...state.gekkos,\n [update.id]: reduceState(state.gekkos[update.id], update.event)\n }\n return state;\n}\n\nexport const archiveGekko = (state, id) => {\n if(!_.has(state.gekkos, id)) {\n return console.error('cannot archive unknown gekko..');\n }\n\n state.archivedGekkos = {\n ...state.archivedGekkos,\n [id]: {\n ...state.gekkos[id],\n stopped: true,\n active: false\n }\n }\n\n state.gekkos = _.omit(state.gekkos, id);\n return state;\n}\n\nexport const errorGekko = (state, data) => {\n if(!_.has(state.gekkos, data.id)) {\n return console.error('cannot error unknown gekko..');\n }\n\n state.gekkos = {\n ...state.gekkos,\n [data.id]: {\n ...state.gekkos[data.id],\n errored: true,\n errorMessage: data.error\n }\n }\n\n return state;\n}\n\nexport const deleteGekko = (state, id) => {\n if(!_.has(state.archivedGekkos, id)) {\n return console.error('cannot delete unknown gekko..');\n }\n\n state.archivedGekkos = _.omit(state.archivedGekkos, id);\n return state;\n}","import Vue from 'vue'\nimport _ from 'lodash'\n\nexport const setGlobalWarning = (state, warning) => {\n state.warnings[warning.key] = warning.value;\n return state;\n}","import Vue from 'vue'\n\nexport const syncApiKeys = (state, apiKeys) => {\n Vue.set(state, 'apiKeys', apiKeys);\n return state;\n}\n\nexport const syncExchanges = (state, exchanges) => {\n Vue.set(state, 'exchanges', exchanges);\n return state;\n}","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport _ from 'lodash'\n\nimport * as importMutations from './modules/imports/mutations'\nimport * as gekkoMutations from './modules/gekkos/mutations'\nimport * as notificationMutations from './modules/notifications/mutations'\nimport * as configMutations from './modules/config/mutations'\n\nVue.use(Vuex);\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nlet mutations = {};\n\n_.merge(mutations, importMutations);\n_.merge(mutations, gekkoMutations);\n_.merge(mutations, notificationMutations);\n_.merge(mutations, configMutations);\n\nexport default new Vuex.Store({\n state: {\n warnings: {\n connected: true, // assume we will connect\n },\n imports: [],\n gekkos: {},\n archivedGekkos: {},\n connection: {\n disconnected: false,\n reconnected: false\n },\n apiKeys: [],\n exchanges: {}\n },\n mutations,\n strict: debug\n})","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ clickable: !_vm.isClicked },attrs:{\"id\":\"chartWrapper\"}},[_c('div',{staticClass:\"shield\",on:{\"click\":function($event){$event.preventDefault();return _vm.click($event)}}}),_c('svg',{attrs:{\"id\":\"chart\",\"width\":\"960\",\"height\":_vm.height}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import _ from 'lodash';\n// global moment\n\nexport default function(_data, _trades, _height) {\n\n const toDate = i => {\n if(_.isNumber(i)) {\n return moment.unix(i).utc().toDate();\n } else {\n return moment.utc(i).toDate();\n }\n }\n\n const trades = _trades.map(t => {\n return {\n price: t.price,\n date: toDate(t.date),\n action: t.action\n }\n });\n\n const data = _data.map(c => {\n return {\n price: c.open,\n date: toDate(c.start)\n }\n });\n\n var dates = data.map(c => +c.date);\n var prices = data.map(c => +c.price)\n\n var svg = d3.select(\"#chart\");\n\n svg.attr(\"width\", window.innerWidth - 20);\n\n var margin = {top: 20, right: 20, bottom: 110, left: 40};\n var height = _height - margin.top - margin.bottom;\n var margin2 = {top: _height - 70, right: 20, bottom: 30, left: 40};\n var width = +svg.attr(\"width\") - margin.left - margin.right;\n var height2 = _height - margin2.top - margin2.bottom;\n\n var x = d3.scaleUtc().range([0, width]),\n x2 = d3.scaleUtc().range([0, width]),\n y = d3.scaleLinear().range([height, 0]),\n y2 = d3.scaleLinear().range([height2, 0]);\n\n var xAxis = d3.axisBottom(x),\n xAxis2 = d3.axisBottom(x2),\n yAxis = d3.axisLeft(y).ticks(_height / 50);\n\n var brush = d3.brushX()\n .extent([[0, 0], [width, height2]])\n .on(\"brush end\", brushed);\n\n var zoom = d3.zoom()\n .scaleExtent([1, 100])\n .translateExtent([[0, 0], [width, height]])\n .extent([[0, 0], [width, height]])\n .on(\"zoom\", zoomed);\n\n var line = d3.line()\n .x(function(d) { return x(d.date); })\n .y(function(d) { return y(d.price); });\n\n var line2 = d3.line()\n .x(function(d) { return x2(d.date); })\n .y(function(d) { return y2(d.price); });\n\n svg.append(\"defs\").append(\"clipPath\")\n .attr(\"id\", \"clip\")\n .append(\"rect\")\n .attr(\"width\", width)\n .attr(\"height\", height);\n\n var focus = svg.append(\"g\")\n .attr(\"class\", \"focus\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var context = svg.append(\"g\")\n .attr(\"class\", \"context\")\n .attr(\"transform\", \"translate(\" + margin2.left + \",\" + margin2.top + \")\");\n\n x.domain(d3.extent(data, function(d) { return d.date; }));\n y.domain([\n d3.min(prices) * 0.99,\n d3.max(prices) * 1.01\n ]);\n x2.domain(x.domain());\n y2.domain(y.domain());\n\n focus.append(\"path\")\n .datum(data)\n .attr(\"class\", \"line price\")\n .attr(\"d\", line);\n\n focus.append(\"g\")\n .attr(\"class\", \"axis axis--x\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis);\n\n focus.append(\"g\")\n .attr(\"class\", \"axis axis--y\")\n .call(yAxis);\n\n context.append(\"path\")\n .datum(data)\n .attr(\"class\", \"line\")\n .attr(\"d\", line2);\n\n context.append(\"g\")\n .attr(\"class\", \"axis axis--x\")\n .attr(\"transform\", \"translate(0,\" + height2 + \")\")\n .call(xAxis2);\n\n var circles = svg\n .append('g')\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .selectAll(\"circle\")\n .data(trades)\n .enter().append(\"circle\")\n .attr('class', function(d) { return d.action })\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n .attr('r', 5);\n\n var brushCircles = context\n .append('g')\n // .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .selectAll(\"circle\")\n .data(trades)\n .enter().append(\"circle\")\n .attr('class', function(d) { return d.action })\n .attr(\"cx\", function(d) { return x2(d.date); })\n .attr(\"cy\", function(d) { return y2(d.price); })\n .attr('r', 3);\n\n\n context.append(\"g\")\n .attr(\"class\", \"brush\")\n .call(brush)\n .call(brush.move, x.range());\n\n svg.append(\"rect\")\n .attr(\"class\", \"zoom\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .call(zoom);\n\n function brushed() {\n if (d3.event.sourceEvent && d3.event.sourceEvent.type === \"zoom\") return; // ignore brush-by-zoom\n var s = d3.event.selection || x2.range();\n x.domain(s.map(x2.invert, x2));\n\n scaleY(x.domain());\n\n svg.select(\".axis--y\")\n .call(yAxis);\n\n circles\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n\n focus.select(\".line\").attr(\"d\", line);\n focus.select(\".axis--x\").call(xAxis);\n svg.select(\".zoom\").call(zoom.transform, d3.zoomIdentity\n .scale(width / (s[1] - s[0]))\n .translate(-s[0], 0));\n }\n\n function scaleY(domain) {\n let [min, max] = domain;\n\n let minIndex = _.sortedIndex(dates, min);\n let maxIndex = _.sortedIndex(dates, max);\n\n let set = prices.slice(minIndex, maxIndex);\n y.domain([\n d3.min(set) * 0.9995,\n d3.max(set) * 1.0005\n ]);\n }\n\n function zoomed() {\n if (d3.event.sourceEvent && d3.event.sourceEvent.type === \"brush\") return; // ignore zoom-by-brush\n var t = d3.event.transform;\n\n scaleY(t.rescaleX(x2).domain()); \n\n svg.select(\".axis--y\")\n .call(yAxis);\n\n x.domain(t.rescaleX(x2).domain());\n focus.select(\".line\").attr(\"d\", line);\n\n circles\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n\n\n focus.select(\".axis--x\").call(xAxis);\n context.select(\".brush\").call(brush.move, x.range().map(t.invertX, t));\n }\n}","export const draw = function(message) {\n d3.select(\"#chart\").append(\"text\")\n .attr('class', 'message')\n .attr('x', 150)\n .attr('y', 150)\n .text(message);\n}\n\nexport const clear = function() {\n d3.select(\"#chart\").find('text').remove();\n}","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./chartWrapper.vue?vue&type=template&id=12bcb8d8&lang=pug\"\nimport script from \"./chartWrapper.vue?vue&type=script&lang=js\"\nexport * from \"./chartWrapper.vue?vue&type=script&lang=js\"\nimport style0 from \"./chartWrapper.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\n\nimport VueRouter from 'vue-router'\nVue.use(VueRouter);\n\nimport store from './store'\n\nimport backtester from './components/backtester/backtester.vue'\nimport home from './components/layout/home.vue'\n\nimport data from './components/data/data.vue'\nimport importer from './components/data/import/importer.vue'\nimport singleImport from './components/data/import/single.vue'\nimport config from './components/config/config.vue'\n\nimport gekkoList from './components/gekko/list.vue'\nimport newGekko from './components/gekko/new.vue'\nimport singleGekko from './components/gekko/singleGekko.vue'\nimport { connect as connectWS } from './components/global/ws'\n\nconst router = new VueRouter({\n mode: 'hash',\n base: __dirname,\n routes: [\n { path: '/', redirect: '/home' },\n { path: '/home', component: home },\n { path: '/backtest', component: backtester },\n { path: '/config', component: config },\n { path: '/data', component: data },\n { path: '/data/importer', component: importer },\n { path: '/data/importer/import/:id', component: singleImport },\n { path: '/live-gekkos', component: gekkoList },\n { path: '/live-gekkos/new', component: newGekko },\n { path: '/live-gekkos/:id', component: singleGekko },\n ]\n});\n\n// setup some stuff\nconnectWS();\n\nnew Vue({\n router,\n store,\n el: '#app',\n render: h => h(App)\n})","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('h2',[_vm._v(\"Config\")]),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Available API keys\")]),(!_vm.apiKeySets.length)?_c('p',[_c('em',[_vm._v(\"You don't have any API keys yet.\")])]):_vm._e(),_c('ul',_vm._l((_vm.apiKeySets),function(exchange){return _c('li',[_vm._v(_vm._s(exchange)+\" (\"),_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.removeApiKey(exchange)}}},[_vm._v(\"remove\")]),_vm._v(\")\")])})),(!_vm.addApiToggle)?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.openAddApi($event)}}},[_vm._v(\"Add an API key\")]):_vm._e(),(_vm.addApiToggle)?[_c('div',{staticClass:\"hr\"}),_c('apiConfigBuilder')]:_vm._e(),_c('div',{staticClass:\"hr\"})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('h3',[_vm._v(\"Add an API key\")]),_c('p',[_vm._v(\"Make sure that the API key has the permissions to create and cancel orders and view balances.\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Exchange\")]),_c('exchange-picker',{attrs:{\"only-tradable\":\"true\"},on:{\"exchange\":_vm.updateExchange}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Credentials\")]),_vm._l((_vm.requires),function(cred){return [_c('label',[_vm._v(_vm._s(cred))]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.credentials[cred]),expression:\"credentials[cred]\"}],domProps:{\"value\":(_vm.credentials[cred])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.credentials, cred, $event.target.value)}}})]})],2)]),_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.upload($event)}}},[_vm._v(\"Add\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"mx1\"},[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Exchange:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.exchange),expression:\"exchange\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.exchange=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.exchanges),function(market,e){return _c('option',[_vm._v(_vm._s(e))])}))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./exchangepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./exchangepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./exchangepicker.vue?vue&type=template&id=50c29cb0&lang=pug\"\nimport script from \"./exchangepicker.vue?vue&type=script&lang=js\"\nexport * from \"./exchangepicker.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./apiConfigBuilder.vue?vue&type=template&id=4a31b09e&lang=pug\"\nimport script from \"./apiConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./apiConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./config.vue?vue&type=template&id=d21dbde6&lang=pug\"\nimport script from \"./config.vue?vue&type=script&lang=js\"\nexport * from \"./config.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Daterange\")]),(_vm.tab === \"scan\")?[(!_vm.scanned)?_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.scanned == \"fetching\")?_c('div',{staticClass:\"txt--center\"},[_c('p',{staticClass:\"scan-btn\"},[_vm._v(\"Scanning..\")])]):_vm._e(),(_vm.scanned == true)?[(_vm.ranges.length === 0)?[_c('p',[_c('strong',[_vm._v(\"Unable to find any local data, do you have local data available for\\\"\"+_vm._s(_vm.config.watch.exchange)+\":\"+_vm._s(_vm.config.watch.currency)+\"/\"+_vm._s(_vm.config.watch.asset)+\"\\\"?\")])])]:[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Run simulation over:\")]),_c('form',{staticClass:\"radio grd\"},_vm._l((_vm.ranges),function(range,i){return _c('div',{staticClass:\"grd-row m1\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedRangeIndex),expression:\"selectedRangeIndex\"}],staticClass:\"grd-row-col-1-6\",attrs:{\"type\":\"radio\"},domProps:{\"value\":i,\"checked\":_vm._q(_vm.selectedRangeIndex,i)},on:{\"change\":function($event){_vm.selectedRangeIndex=i}}}),_c('label',{staticClass:\"grd-row-col-5-6\",attrs:{\"for\":i}},[_vm._v(_vm._s(_vm.printRange(range)))])])}))],_c('p',[_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"rescan\")])])])]:_vm._e(),_c('p',{staticClass:\"txt--center\"},[_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.tab = \"manual\"}}},[_vm._v(\"Or manually set a daterange\")])])])]:_vm._e(),(_vm.tab === \"manual\")?[_c('div',[_c('label',{attrs:{\"for\":\"from\"}},[_vm._v(\"From:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.from),expression:\"from\"}],domProps:{\"value\":(_vm.from)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.from=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"to\"}},[_vm._v(\"To:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.to),expression:\"to\"}],domProps:{\"value\":(_vm.to)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.to=$event.target.value}}})]),_c('p',{staticClass:\"txt--center\"}),_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.tab = \"scan\"}}},[_vm._v(\"Or scan for a daterange\")])])]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./rangepicker.vue?vue&type=template&id=5037047f&lang=pug\"\nimport script from \"./rangepicker.vue?vue&type=script&lang=js\"\nexport * from \"./rangepicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./rangepicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h2',{staticClass:\"contain\"},[_vm._v(\"Backtest\")]),_c('div',{staticClass:\"hr\"}),_c('config-builder',{on:{\"config\":_vm.check}}),(_vm.backtestable)?_c('div',[_c('div',{staticClass:\"txt--center\"},[(_vm.backtestState !== \"fetching\")?_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.run($event)}}},[_vm._v(\"Backtest\")]):_vm._e(),(_vm.backtestState === \"fetching\")?_c('div',{staticClass:\"scan-btn\"},[_c('p',[_vm._v(\"Running backtest..\")]),_c('spinner')],1):_vm._e()])]):_vm._e(),(_vm.backtestResult && _vm.backtestState === \"fetched\")?_c('result',{attrs:{\"result\":_vm.backtestResult}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('dataset-picker',{staticClass:\"my2 contain\",on:{\"dataset\":_vm.updateDataset}}),_c('div',{staticClass:\"hr\"}),_c('strat-picker',{staticClass:\"my2 contain\",on:{\"stratConfig\":_vm.updateStrat}}),_c('div',{staticClass:\"hr\"}),_c('paper-trader',{staticClass:\"contain\",on:{\"settings\":_vm.updatePaperTrader}}),_c('div',{staticClass:\"hr\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Select a dataset\")]),(_vm.datasetScanstate === \"idle\")?_c('div',{staticClass:\"txt--center my2\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.datasetScanstate === \"scanning\")?_c('div',{staticClass:\"txt--center my2\"},[_c('spinner')],1):_vm._e(),(_vm.datasetScanstate === \"scanned\")?_c('div',{staticClass:\"my2\"},[(_vm.datasets.length != 0)?_c('div',[_c('table',{staticClass:\"full\"},[_vm._m(0),_c('tbody',_vm._l((_vm.datasets),function(set,i){return _c('tr',[_c('td',{staticClass:\"radio\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.setIndex),expression:\"setIndex\"}],attrs:{\"type\":\"radio\",\"name\":\"dataset\",\"id\":set.id},domProps:{\"value\":i,\"checked\":_vm._q(_vm.setIndex,i)},on:{\"change\":function($event){_vm.setIndex=i}}})]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.exchange))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.currency))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.asset))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.fmt(set.from)))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.fmt(set.to)))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.humanizeDuration(set.to.diff(set.from))))])])])}))]),(!_vm.rangeVisible)?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.openRange($event)}}},[_vm._v(\"Adjust range\")]):_vm._e(),(_vm.rangeVisible)?[_c('div',[_c('label',{attrs:{\"for\":\"customFrom\"}},[_vm._v(\"From:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.customFrom),expression:\"customFrom\"}],domProps:{\"value\":(_vm.customFrom)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.customFrom=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"customTo\"}},[_vm._v(\"To:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.customTo),expression:\"customTo\"}],domProps:{\"value\":(_vm.customTo)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.customTo=$event.target.value}}})])]:_vm._e()],2):_c('em',[_vm._v(\"No Data found \"),_c('a',{attrs:{\"href\":\"#/data/importer\"}},[_vm._v(\"Lets add some\")])])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th'),_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"from\")]),_c('th',[_vm._v(\"to\")]),_c('th',[_vm._v(\"duration\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./datasetpicker.vue?vue&type=template&id=689b8a00&lang=pug\"\nimport script from \"./datasetpicker.vue?vue&type=script&lang=js\"\nexport * from \"./datasetpicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./datasetpicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./backtestConfigBuilder.vue?vue&type=template&id=0b74d9a3&lang=pug\"\nimport script from \"./backtestConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./backtestConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"hr contain\"}),_vm._m(0),_c('result-summary',{attrs:{\"report\":_vm.result.performanceReport}}),_c('div',{staticClass:\"hr contain\"}),_c('chart',{attrs:{\"data\":_vm.candles,\"height\":\"500\"}}),_c('div',{staticClass:\"hr contain\"}),_c('roundtripTable',{attrs:{\"roundtrips\":_vm.result.roundtrips}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('h3',[_vm._v(\"Backtest result\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('div',{staticClass:\"grd-row summary\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('table',{staticClass:\"p1\"},[_c('tr',[_c('th',[_vm._v(\"start time\")]),_c('td',[_vm._v(_vm._s(_vm.report.startTime))])]),_c('tr',[_c('th',[_vm._v(\"end time\")]),_c('td',[_vm._v(_vm._s(_vm.report.endTime))])]),_c('tr',[_c('th',[_vm._v(\"timespan\")]),_c('td',[_vm._v(_vm._s(_vm.report.timespan))])]),_c('tr',[_c('th',[_vm._v(\"start price\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.startPrice))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"end price\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.endPrice))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"market\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.market))+\"%\")])])])]),_c('paperTradeSummary',{attrs:{\"report\":_vm.report}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./summary.vue?vue&type=template&id=5bfc891d&lang=pug\"\nimport script from \"./summary.vue?vue&type=script&lang=js\"\nexport * from \"./summary.vue?vue&type=script&lang=js\"\nimport style0 from \"./summary.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./result.vue?vue&type=template&id=72b63acc&lang=pug\"\nimport script from \"./result.vue?vue&type=script&lang=js\"\nexport * from \"./result.vue?vue&type=script&lang=js\"\nimport style0 from \"./result.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtester.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtester.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./backtester.vue?vue&type=template&id=da4202e8&lang=pug\"\nimport script from \"./backtester.vue?vue&type=script&lang=js\"\nexport * from \"./backtester.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Redux/vuex inspired reducer, reduces an event into a gekko state.\n// NOTE: this is used by the backend as well as the frontend.\n\nconst skipInitialEvents = ['marketUpdate'];\nconst skipLatestEvents = ['marketStart', 'stratWarmupCompleted'];\nconst trackAllEvents = ['tradeCompleted', 'advice', 'roundtrip'];\n\nconst reduce = (state, event) => {\n const type = event.type;\n const payload = event.payload;\n\n state = {\n ...state,\n latestUpdate: new Date()\n }\n\n if(trackAllEvents.includes(type)) {\n if(!state.events[type]) {\n state = {\n ...state,\n events: {\n ...state.events,\n [type]: [ payload ]\n }\n }\n } else {\n state = {\n ...state,\n events: {\n ...state.events,\n [type]: [ ...state.events[type], payload ]\n }\n }\n }\n }\n\n if(!state.events.initial[type] && !skipInitialEvents.includes(type)) {\n state = {\n ...state,\n events: {\n ...state.events,\n initial: {\n ...state.events.initial,\n [type]: payload\n }\n }\n }\n }\n\n if(!skipLatestEvents.includes(type)) {\n state = {\n ...state,\n events: {\n ...state.events,\n latest: {\n ...state.events.latest,\n [type]: payload\n }\n }\n }\n }\n\n return state;\n}\n\n// export default reduce;\nmodule.exports = reduce;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('div',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.intro)}}),_c('div',{staticClass:\"hr\"}),_c('h2',[_vm._v(\"Available datasets\")]),(_vm.datasetScanstate === \"idle\")?_c('div',{staticClass:\"txt--center my2\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.datasetScanstate === \"scanning\")?_c('div',{staticClass:\"txt--center my2\"},[_c('spinner')],1):_vm._e(),(_vm.datasetScanstate === \"scanned\")?_c('div',{staticClass:\"my2\"},[(_vm.unscannableMakets.length)?_c('div',{staticClass:\"bg--orange p1 warning my1\"},[(!_vm.viewUnscannable)?_c('p',{staticClass:\"clickable\",on:{\"click\":function($event){$event.preventDefault();return _vm.toggleUnscannable($event)}}},[_vm._v(\"Some markets were unscannable, click here for details.\")]):_vm._e(),(_vm.viewUnscannable)?[_c('p',[_vm._v(\"Unable to find datasets in the following markets:\")]),_vm._l((_vm.unscannableMakets),function(market){return _c('div',{staticClass:\"mx2\"},[_vm._v(\"- \"+_vm._s(market.exchange)+\":\"+_vm._s(market.currency)+\":\"+_vm._s(market.asset))])})]:_vm._e()],2):_vm._e(),(_vm.datasets.length)?[_c('table',{staticClass:\"full data\"},[_vm._m(0),_c('tbody',_vm._l((_vm.datasets),function(set){return _c('tr',[_c('td',[_vm._v(_vm._s(set.exchange))]),_c('td',[_vm._v(_vm._s(set.currency))]),_c('td',[_vm._v(_vm._s(set.asset))]),_c('td',[_vm._v(_vm._s(_vm.fmt(set.from)))]),_c('td',[_vm._v(_vm._s(_vm.fmt(set.to)))]),_c('td',[_vm._v(_vm._s(_vm.humanizeDuration(set.to.diff(set.from))))])])}))])]:_vm._e(),(!_vm.datasets.length)?[_c('p',[_vm._v(\"It looks like you don't have any local data yet.\")])]:_vm._e()],2):_vm._e(),_c('div',{staticClass:\"my2\"},[_c('h2',[_vm._v(\"Import more data\")]),_c('p',{staticClass:\"text\"},[_vm._v(\"You can easily import more market data directly from exchanges using the importer.\")]),_c('router-link',{staticClass:\"btn--primary\",attrs:{\"to\":\"/data/importer\"}},[_vm._v(\"Go to the importer!\")])],1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"from\")]),_c('th',[_vm._v(\"to\")]),_c('th',[_vm._v(\"duration\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./data.vue?vue&type=template&id=6009d44c&lang=pug\"\nimport script from \"./data.vue?vue&type=script&lang=js\"\nexport * from \"./data.vue?vue&type=script&lang=js\"\nimport style0 from \"./data.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[(_vm.data && !_vm.data.done)?_c('div',[_c('h2',[_vm._v(\"Importing data..\")]),_c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_vm._m(0),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.data.watch.exchange))])]),_c('div',{staticClass:\"grd-row\"},[_vm._m(1),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.data.watch.currency)+\"/\"+_vm._s(_vm.data.watch.asset))])])]),_c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_vm._m(2),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.from)))])]),_c('div',{staticClass:\"grd-row\"},[_vm._m(3),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.to)))])]),(_vm.initialized)?_c('div',{staticClass:\"grd-row\"},[_vm._m(4),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.latest)))])]):_vm._e(),(_vm.initialized)?_c('div',{staticClass:\"grd-row\"},[_vm._m(5),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fromEnd))])]):_vm._e()]),(!_vm.initialized)?_c('spinner'):_vm._e(),(_vm.initialized)?_c('div',{staticClass:\"contain\"},[_c('progressBar',{attrs:{\"progress\":_vm.progress}})],1):_vm._e(),_c('p',[_c('em',[_vm._v(\"(you don't have to wait until the import is done,you can already start \"),_c('router-link',{attrs:{\"to\":\"/backtest\"}},[_vm._v(\"backtesting\")]),_vm._v(\").\")],1)])],1):_vm._e(),(_vm.data && _vm.data.done)?_c('div',{staticClass:\"txt--center\"},[_c('h2',[_vm._v(\"Import done\")]),_c('p',[_vm._v(\" Go and \"),_c('router-link',{attrs:{\"to\":\"/backtest\"}},[_vm._v(\"backtest\")]),_vm._v(\" with your new data!\")],1)]):_vm._e(),(!_vm.data)?_c('div',{staticClass:\"txt--center\"},[_c('h2',[_vm._v(\"ERROR: Unknown import\")]),_c('p',[_c('I',[_vm._v(\"don't know this import..\")])],1)]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Market:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Currency/Asset:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"From:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"To:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Imported data until:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Remaining:\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.progress)?_c('div',{staticClass:\"progressbarWrapper\"},[_c('p',[_c('strong',[_vm._v(_vm._s(_vm.round(_vm.progress))+\"%\")])]),_c('div',{staticClass:\"progressbar\"},[_c('div',{style:({width: _vm.progress + \"%\"})})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// http://stackoverflow.com/questions/7190898/progress-bar-with-html-and-css\n\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./progressBar.vue?vue&type=template&id=2b42ff94&lang=pug\"\nimport script from \"./progressBar.vue?vue&type=script&lang=js\"\nexport * from \"./progressBar.vue?vue&type=script&lang=js\"\nimport style0 from \"./progressBar.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./single.vue?vue&type=template&id=b930fa5e&lang=pug\"\nimport script from \"./single.vue?vue&type=script&lang=js\"\nexport * from \"./single.vue?vue&type=script&lang=js\"\nimport style0 from \"./single.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst init = () => {\n get('imports', (err, resp) => {\n store.commit('syncImports', resp);\n });\n}\n\nconst sync = () => {\n bus.$on('import_update', data => {\n store.commit('updateImport', data);\n });\n}\n\nexport default function() {\n init();\n sync();\n}","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\nimport _ from 'lodash'\n\nconst init = () => {\n get('gekkos', (err, resp) => {\n const gekkos = resp;\n store.commit('syncGekkos', gekkos);\n });\n}\n\nconst sync = () => {\n bus.$on('gekko_new', data => store.commit('addGekko', data.state));\n bus.$on('gekko_event', data => store.commit('updateGekko', data));\n bus.$on('gekko_archived', data => store.commit('archiveGekko', data.id));\n bus.$on('gekko_error', data => store.commit('errorGekko', data));\n bus.$on('gekko_deleted', data => store.commit('deleteGekko', data.id));\n\n // unused:\n // bus.$on('gekko_stopped', data => store.commit('x', data.id));\n // bus.$on('gekko_deleted', data => store.commit('x', data.id));\n}\n\nexport default function() {\n init();\n sync();\n}","import store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst init = () => {}\n\nconst sync = () => {\n bus.$on('WS_STATUS_CHANGE', ws => {\n return store.commit('setGlobalWarning', {key: 'connected', value: ws.connected});\n });\n}\n\nexport default function() {\n init();\n sync();\n}","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst transformMarkets = backendData => {\n if(!backendData) {\n return {};\n }\n\n var exchangesRaw = backendData;\n var exchangesTemp = {};\n\n exchangesRaw.forEach(e => {\n exchangesTemp[e.slug] = exchangesTemp[e.slug] || {markets: {}};\n\n e.markets.forEach( pair => {\n let [ currency, asset ] = pair['pair'];\n exchangesTemp[e.slug].markets[currency] = exchangesTemp[e.slug].markets[currency] || [];\n exchangesTemp[e.slug].markets[currency].push( asset );\n });\n\n if (\"exchangeMaxHistoryAge\" in e) {\n exchangesTemp[e.slug].exchangeMaxHistoryAge = e.exchangeMaxHistoryAge;\n }\n\n exchangesTemp[e.slug].importable = e.providesFullHistory ? true : false;\n exchangesTemp[e.slug].tradable = e.tradable ? true : false;\n exchangesTemp[e.slug].requires = e.requires;\n });\n\n return exchangesTemp;\n}\n\n\nconst init = () => {\n get('apiKeys', (err, resp) => {\n store.commit('syncApiKeys', resp);\n });\n\n get('exchanges', (err, resp) => {\n store.commit('syncExchanges', transformMarkets(resp));\n })\n}\n\nconst sync = () => {\n bus.$on('apiKeys', data => {\n store.commit('syncApiKeys', data.exchanges);\n });\n}\n\nexport default function() {\n init();\n sync();\n}\n","import Vue from 'vue'\nimport Vuex from 'vuex'\n\nimport syncImports from './modules/imports/sync'\nimport syncGekkos from './modules/gekkos/sync'\nimport syncNotifications from './modules/notifications/sync'\nimport syncConfig from './modules/config/sync'\n\nexport default function() {\n syncImports();\n syncGekkos();\n syncNotifications();\n syncConfig();\n}","import _ from 'lodash'\nimport Vue from 'vue'\n\nimport { wsPath } from '../../tools/api'\nimport initializeState from '../../store/init'\n\nvar socket = null;\n\nexport const bus = new Vue();\n\nbus.$on('gekko_update', data => console.log(data))\n\nbus.$on('import_update', data => console.log(data))\nbus.$on('import_error', data => {\n alert('IMPORT ERROR: ' + data.error);\n});\n\nconst info = {\n connected: false\n}\n\nexport const connect = () => {\n socket = new ReconnectingWebSocket(wsPath, null, { maxReconnectInterval: 4000 });\n\n setTimeout(() => {\n // in case we cannot connect\n if(!info.connected) {\n initializeState();\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n }, 500);\n\n socket.onopen = () => {\n if(info.connected)\n return;\n\n info.connected = true;\n bus.$emit('WS_STATUS_CHANGE', info);\n initializeState();\n }\n socket.onclose = () => {\n if(!info.connected)\n return;\n\n info.connected = false;\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n socket.onerror = () => {\n if(!info.connected)\n return;\n\n info.connected = false;\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n socket.onmessage = function(message) {\n const payload = JSON.parse(message.data);\n // console.log('ws message:', payload);\n bus.$emit(payload.type, payload);\n };\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain py2\"},[_c('h3',[_vm._v(\"Market watchers\")]),(!_vm.watchers.length)?_c('div',{staticClass:\"text\"},[_c('p',[_vm._v(\"You don't have any market watchers.\")])]):_vm._e(),(_vm.watchers.length)?_c('table',{staticClass:\"full clickable\"},[_vm._m(0),_c('tbody',_vm._l((_vm.watchers),function(gekko){return _c('tr',{staticClass:\"clickable\",on:{\"click\":function($event){_vm.$router.push({path: (\"/live-gekkos/\" + (gekko.id))})}}},[_c('td',[_vm._v(_vm._s(gekko.config.watch.exchange))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.currency))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.asset))]),_c('td',[_vm._v(_vm._s(_vm.status(gekko)))]),_c('td',[(gekko.events.initial.candle)?[_vm._v(_vm._s(_vm.fmt(gekko.events.initial.candle.start)))]:_vm._e()],2),_c('td',[(gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.fmt(gekko.events.latest.candle.start)))]:_vm._e()],2),_c('td',[(gekko.events.initial.candle && gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.timespan(gekko.events.latest.candle.start, gekko.events.initial.candle.start)))]:_vm._e()],2)])}))]):_vm._e(),_c('h3',[_vm._v(\"Strat runners\")]),(!_vm.stratrunners.length)?_c('div',{staticClass:\"text\"},[_c('p',[_vm._v(\"You don't have any stratrunners.\")])]):_vm._e(),(_vm.stratrunners.length)?_c('table',{staticClass:\"full\"},[_vm._m(1),_c('tbody',_vm._l((_vm.stratrunners),function(gekko){return _c('tr',{staticClass:\"clickable\",on:{\"click\":function($event){_vm.$router.push({path: (\"/live-gekkos/\" + (gekko.id))})}}},[_c('td',[_vm._v(_vm._s(gekko.config.watch.exchange))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.currency))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.asset))]),_c('td',[_vm._v(_vm._s(_vm.status(gekko)))]),_c('td',[(gekko.events.initial.candle && gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.timespan(gekko.events.latest.candle.start, gekko.events.initial.candle.start)))]:_vm._e()],2),_c('td',[_vm._v(_vm._s(gekko.config.tradingAdvisor.method))]),_c('td',[(!_vm.report(gekko))?[_vm._v(\"0\")]:_vm._e(),(_vm.report(gekko))?[_vm._v(_vm._s(_vm.round(_vm.report(gekko).profit))+\" \"+_vm._s(_vm.report(gekko).currency))]:_vm._e()],2),_c('td',[_vm._v(_vm._s(gekko.logType))]),_c('td',[(!gekko.events.tradeCompleted)?[_vm._v(\"0\")]:_vm._e(),(gekko.events.tradeCompleted)?[_vm._v(_vm._s(gekko.events.tradeCompleted.length))]:_vm._e()],2)])}))]):_vm._e(),_c('div',{staticClass:\"hr\"}),_c('h2',[_vm._v(\"Start a new live Gekko\")]),_c('router-link',{staticClass:\"btn--primary\",attrs:{\"to\":\"/live-gekkos/new\"}},[_vm._v(\"Start a new live Gekko!\")])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"status\")]),_c('th',[_vm._v(\"started at\")]),_c('th',[_vm._v(\"last update\")]),_c('th',[_vm._v(\"duration\")])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"status\")]),_c('th',[_vm._v(\"duration\")]),_c('th',[_vm._v(\"strategy\")]),_c('th',[_vm._v(\"PnL\")]),_c('th',[_vm._v(\"type\")]),_c('th',[_vm._v(\"trades\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./list.vue?vue&type=template&id=55dd2514&lang=pug\"\nimport script from \"./list.vue?vue&type=script&lang=js\"\nexport * from \"./list.vue?vue&type=script&lang=js\"\nimport style0 from \"./list.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[_c('div',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.intro)}}),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Currently running imports\")]),(_vm.imports.length === 0)?_c('p',[_vm._v(\"You currently don't have any imports running.\")]):_vm._e(),(_vm.imports.length)?_c('ul',_vm._l((_vm.imports),function(_import){return _c('li',[_c('router-link',{attrs:{\"to\":\"/data/importer/import/\" + _import.id}},[_vm._v(_vm._s(_import.watch.exchange)+\":\"+_vm._s(_import.watch.currency)+\"/\"+_vm._s(_import.watch.asset))])],1)})):_vm._e(),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Start a new import\")]),_c('import-config-builder',{on:{\"config\":_vm.updateConfig}}),_c('div',{staticClass:\"hr\"}),_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.run($event)}}},[_vm._v(\"Import\")])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Market\")]),_c('market-picker',{attrs:{\"only-importable\":\"true\"},on:{\"market\":_vm.updateMarketConfig}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('range-creator',{on:{\"range\":_vm.updateRange}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./importConfigBuilder.vue?vue&type=template&id=a8c578c6&lang=pug\"\nimport script from \"./importConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./importConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./importer.vue?vue&type=template&id=3e819299&lang=pug\"\nimport script from \"./importer.vue?vue&type=script&lang=js\"\nexport * from \"./importer.vue?vue&type=script&lang=js\"\nimport style0 from \"./importer.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"contain grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\",domProps:{\"innerHTML\":_vm._s(_vm.left)}}),_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-3-6 txt--center\"},[_c('img',{attrs:{\"src\":\"static/gekko.jpg\"}}),_c('p',[_c('em',[_vm._v(\"The most valuable commodity I know of is information.\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./home.vue?vue&type=template&id=2758f780&lang=pug\"\nimport script from \"./home.vue?vue&type=script&lang=js\"\nexport * from \"./home.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"my2\"},[(!_vm.data)?_c('div',{staticClass:\"contain\"},[_c('h1',[_vm._v(\"Unknown Gekko instance\")]),_c('p',[_vm._v(\"Gekko doesn't know what gekko this is...\")])]):_vm._e(),(_vm.data)?_c('div',[_c('h2',{staticClass:\"contain\"},[_vm._v(\"Gekko \"+_vm._s(_vm.type))]),(_vm.isArchived)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This is an archived Gekko, it is currently not running anymore.\")]):_vm._e(),(_vm.data.errorMessage)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This is Gekko crashed with the following error: \"+_vm._s(_vm.data.errorMessage))]):_vm._e(),_c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Market\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Exchange\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.exchange))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Currency\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.currency))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Asset\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.asset))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Type\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.type))])])]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Runtime\")]),(_vm.isLoading)?_c('spinner'):_vm._e(),(!_vm.isLoading)?[(_vm.initialEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Watching since\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.initialEvents.candle.start)))])]):_vm._e(),(_vm.latestEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Received data until\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.latestEvents.candle.start)))])]):_vm._e(),(_vm.latestEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Data spanning\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.humanizeDuration(_vm.moment(_vm.latestEvents.candle.start).diff(_vm.moment(_vm.initialEvents.candle.start)))))])]):_vm._e(),(_vm.isStratrunner)?[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Amount of trades\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.trades.length))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Candle size\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.config.tradingAdvisor.candleSize))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"History size\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.config.tradingAdvisor.historySize))])])]:_vm._e()]:_vm._e()],2)]),(_vm.warmupRemaining)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This stratrunner is still warming up for the next \"),_c('i',[_vm._v(_vm._s(_vm.warmupRemaining.replace(',', ' and ')))]),_vm._v(\", it will not trade until it is warmed up.\")]):_vm._e(),(_vm.isStratrunner)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Strategy\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Name\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('strong',[_vm._v(_vm._s(_vm.stratName))])])]),_vm._v(\"Parameters\"),_c('pre',[_vm._v(_vm._s(_vm.stratParams))])]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Profit report\")]),(!_vm.report)?[_c('p',[(_vm.isArchived)?_c('em',[_vm._v(\"This Gekko never executed a trade..\")]):_vm._e(),(!_vm.isArchived)?_c('em',[_vm._v(\"Waiting for at least one trade..\")]):_vm._e()])]:_vm._e(),(_vm.report)?[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Start balance\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.startBalance)))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Current balance\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.balance)))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Market\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.market / 100 * _vm.report.startPrice))+\" \"+_vm._s(_vm.config.watch.currency)+\" (\"+_vm._s(_vm.round(_vm.report.market))+\" %)\")])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Profit\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.profit))+\" \"+_vm._s(_vm.config.watch.currency)+\" (\"+_vm._s(_vm.round(_vm.report.relativeProfit))+\" %)\")])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Alpha\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.alpha))+\" \"+_vm._s(_vm.config.watch.currency))])])]:_vm._e()],2)]):_vm._e(),(_vm.isStratrunner && !_vm.watcher && !_vm.isArchived)?_c('p',[_vm._v(\"WARNING: stale gekko, not attached to a watcher, please report \"),_c('a',{attrs:{\"href\":\"https://github.com/askmike/gekko/issues\"}},[_vm._v(\"here\")]),_vm._v(\".\")]):_vm._e(),(!_vm.isArchived)?_c('p',[_c('a',{staticClass:\"w100--s my1 btn--red\",on:{\"click\":_vm.stopGekko}},[_vm._v(\"Stop Gekko\")])]):_vm._e(),(_vm.isArchived)?_c('p',[_c('a',{staticClass:\"w100--s my1 btn--red\",on:{\"click\":_vm.deleteGekko}},[_vm._v(\"Delete Gekko\")])]):_vm._e(),(_vm.isStratrunner && _vm.watcher && !_vm.isArchived)?_c('p',[_c('em',[_vm._v(\"This gekko gets market data from \"),_c('router-link',{attrs:{\"to\":\"/live-gekkos/\" + _vm.watcher.id}},[_vm._v(\"this market watcher\")])],1),_vm._v(\".\")]):_vm._e()]),(!_vm.isLoading)?[_c('h3',{staticClass:\"contain\"},[_vm._v(\"Market graph\")]),(_vm.candleFetch === \"fetching\")?_c('spinner'):_vm._e(),(_vm.candleFetch === \"fetched\")?[_c('chart',{attrs:{\"data\":_vm.chartData,\"height\":300}})]:_vm._e(),(_vm.isStratrunner)?_c('roundtrips',{attrs:{\"roundtrips\":_vm.roundtrips}}):_vm._e()]:_vm._e()],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./singleGekko.vue?vue&type=template&id=5ce0f611&lang=pug\"\nimport script from \"./singleGekko.vue?vue&type=script&lang=js\"\nexport * from \"./singleGekko.vue?vue&type=script&lang=js\"\nimport style0 from \"./singleGekko.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=style&index=0&lang=css\"","// global window.CONFIG\n\nconst config = window.CONFIG.ui;\nconst endpoint = `${config.host}${config.port === 80 ? '' : `:${config.port}`}${config.path}`;\n\nlet basePath, restPath, wsPath;\n\n// rest API path\nif(config.ssl) {\n basePath = `https://${endpoint}`;\n} else {\n basePath = `http://${endpoint}`;\n}\n\nrestPath = basePath + 'api/';\n\n// ws API path\nif(config.ssl) {\n wsPath = `wss://${endpoint}api`;\n} else {\n wsPath = `ws://${endpoint}api`;\n}\n\nexport {\n wsPath,\n restPath,\n basePath\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"px1\"},[_c('h3',[_vm._v(\"Paper trader\")]),(_vm.toggle === \"closed\")?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.switchToggle($event)}}},[_vm._v(\"Change paper trader settings\")]):_vm._e(),(_vm.toggle === \"open\")?[_c('p',[_vm._v(\"Settings:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawPaperTraderParams),expression:\"rawPaperTraderParams\"}],staticClass:\"params\",domProps:{\"value\":(_vm.rawPaperTraderParams)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawPaperTraderParams=$event.target.value}}}),(_vm.rawPaperTraderParamsError)?_c('p',{staticClass:\"bg--red p1\"},[_vm._v(_vm._s(_vm.rawPaperTraderParamsError.message))]):_vm._e()]:_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./papertrader.vue?vue&type=template&id=6a733e04&lang=pug\"\nimport script from \"./papertrader.vue?vue&type=script&lang=js\"\nexport * from \"./papertrader.vue?vue&type=script&lang=js\"\nimport style0 from \"./papertrader.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { post } from '../../../tools/ajax'\n\nvar mixin = {\n data: () => {\n return {\n datasets: [],\n datasetScanstate: 'idle',\n unscannableMakets: []\n } \n },\n methods: {\n scan: function() {\n this.datasetScanstate = 'scanning';\n\n post('scansets', {}, (error, response) => {\n this.datasetScanstate = 'scanned';\n\n this.unscannableMakets = response.errors;\n\n let sets = [];\n\n response.datasets.forEach(market => {\n market.ranges.forEach((range, i) => {\n sets.push({\n exchange: market.exchange,\n currency: market.currency,\n asset: market.asset,\n from: moment.unix(range.from).utc(),\n to: moment.unix(range.to).utc(),\n id: market.exchange + market.asset + market.currency + i\n });\n });\n });\n\n // for now, filter out sets smaller than 3 hours..\n sets = sets.filter(set => {\n if(set.to.diff(set.from, 'hours') > 2)\n return true;\n });\n\n sets = sets.sort((a, b) => {\n let adiff = a.to.diff(a.from);\n let bdiff = b.to.diff(b.from);\n\n if(adiff < bdiff)\n return -1;\n\n if(adiff > bdiff)\n return 1;\n\n return 0;\n }).reverse();\n\n this.datasets = sets;\n })\n }\n }\n}\n\nexport default mixin;","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain roundtrips\"},[_c('h2',[_vm._v(\"Roundtrips\")]),(_vm.roundtrips.length)?_c('table',[_c('thead',[_vm._m(0),_vm._l((_vm.roundtrips),function(rt){return _c('tr',[_c('td',[_vm._v(_vm._s(_vm.fmt(rt.entryAt)))]),_c('td',[_vm._v(_vm._s(_vm.fmt(rt.exitAt)))]),_c('td',[_vm._v(_vm._s(_vm.diff(rt.duration)))]),_c('td',[_vm._v(_vm._s(_vm.round(rt.entryBalance)))]),_c('td',[_vm._v(_vm._s(_vm.round(rt.exitBalance)))]),(Math.sign(rt.pnl)===-1)?[_c('td',{staticClass:\"loss\"},[_vm._v(_vm._s(Math.sign(rt.pnl)*rt.pnl.toFixed(2)))]),_c('td',{staticClass:\"loss\"},[_vm._v(_vm._s(rt.profit.toFixed(2))+\"%\")])]:[_c('td',{staticClass:\"profit\"},[_vm._v(_vm._s(rt.pnl.toFixed(2)))]),_c('td',{staticClass:\"profit\"},[_vm._v(_vm._s(rt.profit.toFixed(2))+\"%\")])]],2)})],2)]):_vm._e(),(!_vm.roundtrips.length)?_c('div',[_c('p',[_vm._v(\"Not enough data to display\")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"Entry at (UTC)\")]),_c('th',[_vm._v(\"Exit at (UTC)\")]),_c('th',[_vm._v(\"Exposure\")]),_c('th',[_vm._v(\"Entry balance\")]),_c('th',[_vm._v(\"Exit balance\")]),_c('th',[_vm._v(\"P&L\")]),_c('th',[_vm._v(\"Profit\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./roundtripTable.vue?vue&type=template&id=3c32021a&lang=pug\"\nimport script from \"./roundtripTable.vue?vue&type=script&lang=js\"\nexport * from \"./roundtripTable.vue?vue&type=script&lang=js\"\nimport style0 from \"./roundtripTable.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=style&index=0&lang=css\"","import superagent from 'superagent'\nimport noCache from 'superagent-no-cache'\nimport { restPath } from './api.js'\n\nconst processResponse = next => (err, res) => {\n if(err)\n return next(err);\n\n if(!res.text)\n return next('no data');\n\n let data = JSON.parse(res.text);\n\n next(false, data);\n}\n\nexport const post = (to, data, next) => {\n superagent\n .post(restPath + to)\n .use(noCache)\n .send(data)\n .end(processResponse(next));\n}\n\nexport const get = (to, next) => {\n superagent\n .get(restPath + to)\n .use(noCache)\n .end(processResponse(next));\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=style&index=0&lang=css\""],"sourceRoot":""} \ No newline at end of file diff --git a/web/vue/dist/app.bd655fc0.js b/web/vue/dist/app.bd655fc0.js deleted file mode 100644 index e76399540..000000000 --- a/web/vue/dist/app.bd655fc0.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(t){function e(e){for(var n,s,o=e[0],c=e[1],u=e[2],d=0,f=[];d0?"profit":"loss"}}},s=i,o=(a("tr8z"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},"0zrD":function(t,e,a){"use strict";var n=a("jf14"),r=a.n(n);r.a},26:function(t,e,a){t.exports=a("Vtdi")},"2A8w":function(t,e,a){"use strict";var n=a("TDb6"),r=a.n(n);r.a},"2Yda":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[a("h3",[t._v("Start a new gekko")]),a("gekko-config-builder",{on:{config:t.updateConfig}}),a("div",{staticClass:"hr"}),t.config.valid?a("div",{staticClass:"txt--center"},[t.pendingStratrunner?t._e():a("a",{staticClass:"w100--s my1 btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.start(e)}}},[t._v("Start")]),t.pendingStratrunner?a("spinner"):t._e()],1):t._e()],1)},r=[],i=(a("Z2Ku"),a("L9s1"),a("dRSK"),a("LvDl")),s=a.n(i),o=a("Kw5r"),c=a("wiDz"),u=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("h3",[t._v("Market")]),a("market-picker",{attrs:{"only-tradable":t.isTradebot},on:{market:t.updateMarketConfig}})],1),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("type-picker",{on:{type:t.updateType}})],1)]),"market watcher"!==t.type?[a("div",{staticClass:"hr"}),a("strat-picker",{staticClass:"contain my2",on:{stratConfig:t.updateStrat}}),"paper trader"===t.type?a("div",{staticClass:"hr"}):t._e(),"paper trader"===t.type?a("paper-trader",{on:{settings:t.updatePaperTrader}}):t._e()]:t._e()],2)},l=[],d=(a("91GP"),a("6BxS")),f=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h3",[t._v("Type")]),[a("label",{staticClass:"wrapper",attrs:{for:"type"}},[t._v("What do you want to do with gekko?")]),a("form",{staticClass:"radio grd"},t._l(t.types,function(e,n){return a("div",{staticClass:"grd-row m1"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedTypeIndex,expression:"selectedTypeIndex"}],staticClass:"grd-row-col-1-6",attrs:{type:"radio"},domProps:{value:n,checked:t._q(t.selectedTypeIndex,n)},on:{change:function(e){t.selectedTypeIndex=n}}}),a("label",{staticClass:"grd-row-col-5-6",attrs:{for:n}},[t._v(t._s(e))])])}))]],2)},h=[],m={created:function(){this.emitType()},data:function(){return{types:["paper trader","market watcher","tradebot"],selectedTypeIndex:0}},methods:{emitType:function(){this.$emit("type",this.type)}},watch:{type:function(){this.emitType()}},computed:{type:function(){return this.types[this.selectedTypeIndex]}}},v=m,p=(a("wVPO"),a("KHd+")),g=Object(p["a"])(v,f,h,!1,null,null,null),_=g.exports,k=a("6Wkr"),y=a("rloZ"),w={created:function(){var t=this;Object(c["a"])("configPart/candleWriter",function(e,a){t.candleWriter=toml.parse(a.part)}),Object(c["a"])("configPart/performanceAnalyzer",function(e,a){t.performanceAnalyzer=toml.parse(a.part),t.performanceAnalyzer.enabled=!0})},data:function(){return{market:{},range:{},type:"",strat:{},paperTrader:{},candleWriter:{},performanceAnalyzer:{}}},components:{marketPicker:d["a"],typePicker:_,stratPicker:k["a"],paperTrader:y["a"]},computed:{isTradebot:function(){return"tradebot"===this.type},config:function(){var t={};return Object.assign(t,this.market,this.strat,{paperTrader:this.paperTrader},{candleWriter:this.candleWriter},{type:this.type},{performanceAnalyzer:this.performanceAnalyzer}),this.isTradebot&&(delete t.paperTrader,t.trader={enabled:!0}),t.valid=this.validConfig(t),t}},methods:{validConfig:function(t){if("market watcher"===t.type)return!0;if(!t.tradingAdvisor)return!1;if(s.a.isNaN(t.tradingAdvisor.candleSize))return!1;if(0==t.tradingAdvisor.candleSize)return!1;var e=t.tradingAdvisor.method;return!s.a.isEmpty(t[e])},updateMarketConfig:function(t){this.market=t,this.emitConfig()},updateType:function(t){this.type=t,this.emitConfig()},updateStrat:function(t){this.strat=t,this.emitConfig()},updatePaperTrader:function(t){this.paperTrader=t,this.paperTrader.enabled=!0,this.emitConfig()},emitConfig:function(){this.$emit("config",this.config)}}},b=w,C=(a("YEdZ"),Object(p["a"])(b,u,l,!1,null,null,null)),x=C.exports,S=a("MB/c"),T={components:{gekkoConfigBuilder:x,spinner:S["a"]},data:function(){return{pendingStratrunner:!1,config:{}}},computed:{gekkos:function(){return this.$store.state.gekkos},watchConfig:function(){var t=s.a.pick(this.config,"watch","candleWriter"),e=o["a"].util.extend({},t);return e.type="market watcher",e.mode="realtime",e},requiredHistoricalData:function(){if(this.config.tradingAdvisor&&this.config.valid){var t=this.config.tradingAdvisor;return t.candleSize*t.historySize}},gekkoConfig:function(){var t;if(this.existingMarketWatcher){if(this.requiredHistoricalData){var e=moment().utc().startOf("minute").subtract(this.requiredHistoricalData,"minutes").unix(),a=moment.utc(this.existingMarketWatcher.events.initial.candle.start).unix();t=moment.unix(Math.max(e,a)).utc().format()}else t=moment().utc().startOf("minute").format();var n=o["a"].util.extend({market:{type:"leech",from:t},mode:"realtime"},this.config);return n}},existingMarketWatcher:function(){var t=o["a"].util.extend({},this.watchConfig.watch);return s.a.find(this.gekkos,{config:{watch:t}})},exchange:function(){return this.watchConfig.watch.exchange},existingTradebot:function(){var t=this;return s.a.find(this.gekkos,function(e){return"tradebot"===e.logType&&e.config.watch.exchange===t.exchange})},availableApiKeys:function(){return this.$store.state.apiKeys}},watch:{existingMarketWatcher:function(t,e){var a=this;if(this.pendingStratrunner){var n=this.existingMarketWatcher;n.events.latest.candle&&(this.pendingStratrunner=!1,this.startGekko(function(t,e){a.$router.push({path:"/live-gekkos/".concat(e.id)})}))}}},methods:{updateConfig:function(t){this.config=t},start:function(){var t=this;if("tradebot"===this.config.type){if(this.existingTradebot){var e="You already have a tradebot running on this exchange";return e+=", you can only run one tradebot per exchange.",alert(e)}if(!this.availableApiKeys.includes(this.exchange))return alert("Please first configure API keys for this exchange in the config page.")}"market watcher"===this.config.type?this.existingMarketWatcher?(alert("This market is already being watched, redirecting you now..."),this.$router.push({path:"/live-gekkos/".concat(this.existingMarketWatcher.id)})):this.startWatcher(function(e,a){t.$router.push({path:"/live-gekkos/".concat(a.id)})}):this.existingMarketWatcher?this.startGekko(this.routeToGekko):this.startWatcher(function(e,a){t.pendingStratrunner=a.id})},routeToGekko:function(t,e){if(t||e.error)return console.error(t,e.error);this.$router.push({path:"/live-gekkos/".concat(e.id)})},startWatcher:function(t){Object(c["b"])("startGekko",this.watchConfig,t)},startGekko:function(t){Object(c["b"])("startGekko",this.gekkoConfig,t)}}},E=T,P=(a("2A8w"),Object(p["a"])(E,n,r,!1,null,null,null));e["a"]=P.exports},"2rY9":function(t,e,a){"use strict";var n=a("SWS5"),r=a.n(n);r.a},"5/bm":function(t,e,a){},"5shn":function(t,e,a){"use strict";var n=a("DlQD"),r=new n.Renderer;r.link=function(t,e,a){var n,r,i;return n=/^https?:\/\/.+$/.test(t),r=n||"newWindow"===e,i='"+a+""},n.setOptions({renderer:r}),e["a"]=n},"6BxS":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("div",{staticClass:"mx1"},[a("label",{staticClass:"wrapper",attrs:{for:"exchange"}},[t._v("Exchange:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.exchange,expression:"exchange"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.exchange=e.target.multiple?a:a[0]}}},t._l(t.exchanges,function(e,n){return a("option",[t._v(t._s(n))])}))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("label",{attrs:{for:"currency"}},[t._v("Currency:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.currency,expression:"currency"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.currency=e.target.multiple?a:a[0]}}},t._l(t.currencies,function(e){return a("option",[t._v(t._s(e))])}))])]),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("label",{attrs:{for:"asset"}},[t._v("Asset:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.asset,expression:"asset"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.asset=e.target.multiple?a:a[0]}}},t._l(t.assets,function(e){return a("option",[t._v(t._s(e))])}))])])])])},r=[],i=(a("rGqo"),a("yt8O"),a("f3/d"),a("91GP"),a("LvDl")),s=a.n(i),o=(a("YIjs"),a("FhOJ"),a("wiDz"),{props:["onlyTradable","onlyImportable"],data:function(){return{exchange:"poloniex",currency:"USDT",asset:"BTC"}},created:function(){this.emitConfig()},computed:{exchanges:function(){var t=Object.assign({},this.$store.state.exchanges);return!s.a.isEmpty(t)&&(this.onlyTradable&&s.a.each(t,function(e,a){e.tradable||delete t[a]}),this.onlyImportable&&s.a.each(t,function(e,a){e.importable||delete t[a]}),t)},markets:function(){return this.exchanges?this.exchanges[this.exchange]:null},assets:function(){return this.exchanges?this.exchanges[this.exchange].markets[this.currency]:null},currencies:function(){return this.exchanges?s.a.keys(this.exchanges[this.exchange].markets):null},watchConfig:function(){return{watch:{exchange:this.exchange,currency:this.currency,asset:this.asset}}}},watch:{currency:function(){this.emitConfig()},asset:function(){this.emitConfig()},market:function(){this.emitConfig()},exchanges:function(){this.emitConfig()},exchange:function(){this.emitConfig()}},methods:{emitConfig:function(){this.$emit("market",this.watchConfig)}}}),c=o,u=a("KHd+"),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},"6Wkr":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 px1"},[a("h3",[t._v("Strategy")]),a("div",[a("label",{staticClass:"wrapper",attrs:{for:"strat"}},[t._v("Strategy:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.strategy,expression:"strategy"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.strategy=e.target.multiple?a:a[0]}}},t._l(t.strategies,function(e){return a("option",[t._v(t._s(e.name))])}))])]),a("div",[a("label",{attrs:{for:"candleSize"}},[t._v("Candle Size")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.rawCandleSize,expression:"rawCandleSize"}],domProps:{value:t.rawCandleSize},on:{input:function(e){e.target.composing||(t.rawCandleSize=e.target.value)}}})]),a("div",{staticClass:"grd-row-col-3-6 align"},[a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.candleSizeUnit,expression:"candleSizeUnit"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.candleSizeUnit=e.target.multiple?a:a[0]}}},[a("option",[t._v("minutes")]),a("option",[t._v("hours")]),a("option",[t._v("days")])])])])])]),a("div",[a("label",{attrs:{for:"historySize"}},[t._v("Warmup period (in "+t._s(t.rawCandleSize)+" "+t._s(t.singularCandleSizeUnit)+" candles):")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.historySize,expression:"historySize"}],domProps:{value:t.historySize},on:{input:function(e){e.target.composing||(t.historySize=e.target.value)}}}),a("em",{staticClass:"label-like"},[t._v("(will use "+t._s(t.humanizeDuration(t.candleSize*t.historySize*1e3*60))+" of data as history)")])])]),a("div",{staticClass:"grd-row-col-3-6 px1"},[a("div",[a("h3",[t._v("Parameters")]),a("p",[t._v(t._s(t.strategy)+" Parameters:")]),a("textarea",{directives:[{name:"model",rawName:"v-model",value:t.rawStratParams,expression:"rawStratParams"}],staticClass:"params",domProps:{value:t.rawStratParams},on:{input:function(e){e.target.composing||(t.rawStratParams=e.target.value)}}}),t.rawStratParamsError?a("p",{staticClass:"bg--red p1"},[t._v(t._s(t.rawStratParamsError.message))]):t._e()])])])])},r=[],i=(a("dRSK"),a("LvDl")),s=a.n(i),o=a("wiDz"),c={data:function(){return{strategies:[],candleSizeUnit:"hours",rawCandleSize:1,strategy:"MACD",historySize:10,rawStratParams:"",rawStratParamsError:!1,emptyStrat:!1,stratParams:{}}},created:function(){var t=this;Object(o["a"])("strategies",function(e,a){t.strategies=a,s.a.each(t.strategies,function(t){t.empty=""===t.params}),t.rawStratParams=s.a.find(t.strategies,{name:t.strategy}).params,t.emptyStrat=s.a.find(t.strategies,{name:t.strategy}).empty,t.emitConfig()})},watch:{strategy:function(t){t=s.a.find(this.strategies,{name:t}),this.rawStratParams=t.params,this.emptyStrat=t.empty,this.emitConfig()},candleSize:function(){this.emitConfig()},historySize:function(){this.emitConfig()},rawStratParams:function(){this.emitConfig()}},computed:{candleSize:function(){return"minutes"===this.candleSizeUnit?this.rawCandleSize:"hours"===this.candleSizeUnit?60*this.rawCandleSize:"days"===this.candleSizeUnit?60*this.rawCandleSize*24:void 0},singularCandleSizeUnit:function(){return this.candleSizeUnit.slice(0,-1)},config:function(){var t={tradingAdvisor:{enabled:!0,method:this.strategy,candleSize:+this.candleSize,historySize:+this.historySize}};return this.emptyStrat?t[this.strategy]={__empty:!0}:t[this.strategy]=this.stratParams,t}},methods:{humanizeDuration:function(t){return window.humanizeDuration(t)},emitConfig:function(){this.parseParams(),this.$emit("stratConfig",this.config)},parseParams:function(){try{this.stratParams=toml.parse(this.rawStratParams),this.rawStratParamsError=!1}catch(t){this.rawStratParamsError=t,this.stratParams={}}}}},u=c,l=(a("tr8f"),a("KHd+")),d=Object(l["a"])(u,n,r,!1,null,null,null);e["a"]=d.exports},"7LpK":function(t,e,a){},"8KAT":function(t,e,a){},"9RND":function(t){t.exports={name:"gekko",version:"0.6.3",description:"A bitcoin trading bot for auto trading at various exchanges",keywords:["trading","bot","bitcoin","TA","finance"],scripts:{test:"./node_modules/.bin/mocha test/*.js --recursive test -u tdd --reporter spec",start:"node ./gekko --config config.js --ui"},author:"Mike van Rossum ",dependencies:{"@slack/client":"^3.10.0",async:"2.1.2",bitx:"^1.5.0","co-fs":"^1.2.0",commander:"^2.13.0",gekko:"0.0.9","humanize-duration":"^3.10.0",koa:"^1.2.0","koa-bodyparser":"^2.2.0","koa-cors":"0.0.16","koa-logger":"^1.3.0","koa-router":"^5.4.0","koa-static":"^2.0.0",lodash:"2.x",moment:"^2.20.1",opn:"^4.0.2","promisify-node":"^0.5.0","prompt-lite":"0.1.1",pushbullet:"1.4.3",relieve:"^2.1.3",retry:"^0.10.1",semver:"5.4.1",sqlite3:"^4.0.0","stats-lite":"^2.0.4","tiny-promisify":"^0.1.1",toml:"^2.3.0",twitter:"^1.7.1"},devDependencies:{chai:"^4.1.2",mocha:"^5.0.0",proxyquire:"^1.7.10",request:"^2.83.0","request-promise":"^4.2.2",sinon:"^4.2.0"},engines:{node:">=8.11.2"},license:"MIT",repository:{type:"git",url:"https://github.com/askmike/gekko.git"}}},CyGp:function(t,e,a){"use strict";var n=a("jTvs"),r=a.n(n);r.a},EAJ1:function(t,e,a){},EDI0:function(t,e,a){},EfWa:function(t,e,a){},FhOJ:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h3",[t._v("Daterange")]),a("div",[a("label",{attrs:{for:"from"}},[t._v("From")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.from,expression:"from"}],domProps:{value:t.from},on:{input:function(e){e.target.composing||(t.from=e.target.value)}}})]),a("div",[a("label",{attrs:{for:"to"}},[t._v("To")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.to,expression:"to"}],domProps:{value:t.to},on:{input:function(e){e.target.composing||(t.to=e.target.value)}}})])])},r=[],i=(a("LvDl"),a("wiDz"),{data:function(){return{from:"",to:""}},created:function(){var t=moment().startOf("minute"),e=t.clone().subtract(3,"months");this.to=this.fmt(t),this.from=this.fmt(e),this.emitRange()},methods:{fmtTs:function(t){return moment.unix(t).utc()},fmt:function(t){return t.utc().format("YYYY-MM-DD HH:mm")},emitRange:function(){this.$emit("range",{from:this.fmtTs(this.from),to:this.fmtTs(this.to)})},emitManualEntry:function(){if(this.from.length<"4"||this.from.length<"4")return this.$emit("range",{});var t=moment.utc(this.from),e=moment.utc(this.to);t.isValid()&&e.isValid()?this.$emit("range",{from:this.fmt(t),to:this.fmt(e)}):this.$emit("range",{})}},watch:{from:function(){this.emitManualEntry()},to:function(){this.emitManualEntry()},config:function(){this.scanned=!1},tab:function(){this.scanned=!1,this.$emit("range",{})},selectedRangeIndex:function(){var t=this.ranges[this.selectedRangeIndex];t&&this.emitRange(t)}}}),s=i,o=(a("TPp/"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},"H+ir":function(t,e,a){"use strict";var n=a("5/bm"),r=a.n(n);r.a},Kd0R:function(t,e,a){},"MB/c":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"spinner"},[a("div",{staticClass:"rect1"}),a("div",{staticClass:"rect2"}),a("div",{staticClass:"rect3"}),a("div",{staticClass:"rect4"})])}],i={},s=i,o=(a("q431"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},Pf3K:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"app"}},[a("top"),a("div",{staticClass:"fill"},[a("router-view",{staticClass:"view"})],1),a("bottom"),a("modal")],1)},r=[],i=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("div",{attrs:{id:"top"}}),t._m(0),a("nav",{staticClass:"bg--light-gray"},[a("div",{staticClass:"menu contain"},[a("router-link",{staticClass:"py1",attrs:{to:"/home"}},[t._v("Home")]),a("router-link",{staticClass:"py1",attrs:{to:"/live-gekkos"}},[t._v("Live Gekkos")]),a("router-link",{staticClass:"py1",attrs:{to:"/backtest"}},[t._v("Backtest")]),a("router-link",{staticClass:"py1",attrs:{to:"/data"}},[t._v("Local data")]),a("router-link",{staticClass:"py1",attrs:{to:"/config"}},[t._v("Config")]),a("a",{staticClass:"py1",attrs:{href:"https://gekko.wizb.it/docs/introduction/about_gekko.html",target:"_blank"}},[t._v("Documentation")])],1)])])},s=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("header",{staticClass:"bg--off-white grd"},[a("div",{staticClass:"contain grd-row"},[a("h3",{staticClass:"py1 px2 col-2"},[t._v("Gekko UI")])])])}],o={},c=o,u=(a("uMTv"),a("KHd+")),l=Object(u["a"])(c,i,s,!1,null,null,null),d=l.exports,f=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("footer",{staticClass:"p2 bg--off-white"},[a("div",{staticClass:"contain"},[t._m(0),a("p",[t._v("Using Gekko v"+t._s(t.version.gekko)+" and Gekko UI v"+t._s(t.version.ui)+".")])])])},h=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("p",[a("em",[t._v("Use Gekko at your own risk.")])])}],m=a("9RND"),v=a("kiQV"),p={data:function(){return{version:{gekko:m.version,ui:v.version}}}},g=p,_=Object(u["a"])(g,f,h,!1,null,null,null),k=_.exports,y=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.active?a("div",[a("div",{attrs:{id:"modal-background"}}),a("div",{staticClass:"modal",attrs:{id:"modal"}},[a("div",{staticClass:"modal-guts",domProps:{innerHTML:t._s(t.content)}})])]):t._e()},w=[],b=a("5shn"),C={disconnected:Object(b["a"])("\n\n## Disconnected\n\nSomething happened to either Gekko or the connection.\nPlease check the terminal where Gekko is running or\nyour network connection.\n\n*This message is shown when the UI is unable to open a websocket connection with the Gekko Server.*\n\n ")},x={computed:{active:function(){return!this.$store.state.warnings.connected},content:function(){return this.$store.state.warnings.connected?"":C.disconnected}}},S=x,T=(a("TfKe"),Object(u["a"])(S,y,w,!1,null,null,null)),E=T.exports,P={name:"app",components:{top:d,bottom:k,modal:E}},A=P,D=(a("ZL7j"),Object(u["a"])(A,n,r,!1,null,null,null));e["a"]=D.exports},Q2AE:function(t,e,a){"use strict";var n={};a.r(n),a.d(n,"addImport",function(){return d}),a.d(n,"syncImports",function(){return f}),a.d(n,"updateImport",function(){return h});var r={};a.r(r),a.d(r,"syncGekkos",function(){return g}),a.d(r,"addGekko",function(){return _}),a.d(r,"updateGekko",function(){return k}),a.d(r,"archiveGekko",function(){return y}),a.d(r,"errorGekko",function(){return w}),a.d(r,"deleteGekko",function(){return b});var i={};a.r(i),a.d(i,"setGlobalWarning",function(){return C});var s={};a.r(s),a.d(s,"syncApiKeys",function(){return x}),a.d(s,"syncExchanges",function(){return S});a("VRzm");var o=a("Kw5r"),c=a("L2JU"),u=a("LvDl"),l=a.n(u),d=(a("INYr"),function(t,e){return t.imports.push(e),t}),f=function(t,e){return t.imports=e,t},h=function(t,e){var a=t.imports.findIndex(function(t){return t.id===e.import_id}),n=t.imports[a];if(!n)return t;var r=o["a"].util.extend(n,e.updates);return o["a"].set(t.imports,a,r),t},m=a("oyJW"),v=a("yT7P"),p=a("c7Wa"),g=function(t,e){return e?(t.gekkos=e.live,t.archivedGekkos=e.archive,t):t},_=function(t,e){return t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,e)),t},k=function(t,e){return e.id&&l.a.has(t.gekkos,e.id)?(t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,p(t.gekkos[e.id],e.event))),t):console.error("cannot update unknown gekko..")},y=function(t,e){return l.a.has(t.gekkos,e)?(t.archivedGekkos=Object(v["a"])({},t.archivedGekkos,Object(m["a"])({},e,Object(v["a"])({},t.gekkos[e],{stopped:!0,active:!1}))),t.gekkos=l.a.omit(t.gekkos,e),t):console.error("cannot archive unknown gekko..")},w=function(t,e){return l.a.has(t.gekkos,e.id)?(t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,Object(v["a"])({},t.gekkos[e.id],{errored:!0,errorMessage:e.error}))),t):console.error("cannot error unknown gekko..")},b=function(t,e){return l.a.has(t.archivedGekkos,e)?(t.archivedGekkos=l.a.omit(t.archivedGekkos,e),t):console.error("cannot delete unknown gekko..")},C=function(t,e){return t.warnings[e.key]=e.value,t},x=function(t,e){return o["a"].set(t,"apiKeys",e),t},S=function(t,e){return o["a"].set(t,"exchanges",e),t};o["a"].use(c["a"]);var T=!1,E={};l.a.merge(E,n),l.a.merge(E,r),l.a.merge(E,i),l.a.merge(E,s);e["a"]=new c["a"].Store({state:{warnings:{connected:!0},imports:[],gekkos:{},archivedGekkos:{},connection:{disconnected:!1,reconnected:!1},apiKeys:[],exchanges:{}},mutations:E,strict:T})},Q6eY:function(t,e,a){"use strict";var n=a("SDwi"),r=a.n(n);r.a},SDwi:function(t,e,a){},SWS5:function(t,e,a){},T0Mt:function(t,e,a){"use strict";var n=a("pd3X"),r=a.n(n);r.a},TDb6:function(t,e,a){},"TPp/":function(t,e,a){"use strict";var n=a("7LpK"),r=a.n(n);r.a},TfKe:function(t,e,a){"use strict";var n=a("ZpQ2"),r=a.n(n);r.a},UeuA:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{class:{clickable:!t.isClicked},attrs:{id:"chartWrapper"}},[a("div",{staticClass:"shield",on:{click:function(e){return e.preventDefault(),t.click(e)}}}),a("svg",{attrs:{id:"chart",width:"960",height:t.height}})])},r=[],i=a("k5N+"),s=a("LvDl"),o=a.n(s),c=function(t,e,a){var n=e.map(function(t){return{price:t.price,date:moment.utc(t.date).toDate(),action:t.action}}),r=t.map(function(t){return{price:t.open,date:moment.utc(t.start).toDate()}}),s=r.map(function(t){return+t.date}),c=r.map(function(t){return+t.price}),u=d3.select("#chart");u.attr("width",window.innerWidth-20);var l={top:20,right:20,bottom:110,left:40},d=a-l.top-l.bottom,f={top:a-70,right:20,bottom:30,left:40},h=+u.attr("width")-l.left-l.right,m=a-f.top-f.bottom,v=d3.scaleUtc().range([0,h]),p=d3.scaleUtc().range([0,h]),g=d3.scaleLinear().range([d,0]),_=d3.scaleLinear().range([m,0]),k=d3.axisBottom(v),y=d3.axisBottom(p),w=d3.axisLeft(g).ticks(a/50),b=d3.brushX().extent([[0,0],[h,m]]).on("brush end",A),C=d3.zoom().scaleExtent([1,100]).translateExtent([[0,0],[h,d]]).extent([[0,0],[h,d]]).on("zoom",z),x=d3.line().x(function(t){return v(t.date)}).y(function(t){return g(t.price)}),S=d3.line().x(function(t){return p(t.date)}).y(function(t){return _(t.price)});u.append("defs").append("clipPath").attr("id","clip").append("rect").attr("width",h).attr("height",d);var T=u.append("g").attr("class","focus").attr("transform","translate("+l.left+","+l.top+")"),E=u.append("g").attr("class","context").attr("transform","translate("+f.left+","+f.top+")");v.domain(d3.extent(r,function(t){return t.date})),g.domain([.99*d3.min(c),1.01*d3.max(c)]),p.domain(v.domain()),_.domain(g.domain()),T.append("path").datum(r).attr("class","line price").attr("d",x),T.append("g").attr("class","axis axis--x").attr("transform","translate(0,"+d+")").call(k),T.append("g").attr("class","axis axis--y").call(w),E.append("path").datum(r).attr("class","line").attr("d",S),E.append("g").attr("class","axis axis--x").attr("transform","translate(0,"+m+")").call(y);var P=u.append("g").attr("transform","translate("+l.left+","+l.top+")").selectAll("circle").data(n).enter().append("circle").attr("class",function(t){return t.action}).attr("cx",function(t){return v(t.date)}).attr("cy",function(t){return g(t.price)}).attr("r",5);E.append("g").selectAll("circle").data(n).enter().append("circle").attr("class",function(t){return t.action}).attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}).attr("r",3);function A(){if(!d3.event.sourceEvent||"zoom"!==d3.event.sourceEvent.type){var t=d3.event.selection||p.range();v.domain(t.map(p.invert,p)),D(v.domain()),u.select(".axis--y").call(w),P.attr("cx",function(t){return v(t.date)}).attr("cy",function(t){return g(t.price)}),T.select(".line").attr("d",x),T.select(".axis--x").call(k),u.select(".zoom").call(C.transform,d3.zoomIdentity.scale(h/(t[1]-t[0])).translate(-t[0],0))}}function D(t){var e=Object(i["a"])(t,2),a=e[0],n=e[1],r=o.a.sortedIndex(s,a),u=o.a.sortedIndex(s,n),l=c.slice(r,u);g.domain([.9995*d3.min(l),1.0005*d3.max(l)])}function z(){if(!d3.event.sourceEvent||"brush"!==d3.event.sourceEvent.type){var t=d3.event.transform;D(t.rescaleX(p).domain()),u.select(".axis--y").call(w),v.domain(t.rescaleX(p).domain()),T.select(".line").attr("d",x),P.attr("cx",function(t){return v(t.date)}).attr("cy",function(t){return g(t.price)}),T.select(".axis--x").call(k),E.select(".brush").call(b.move,v.range().map(t.invertX,t))}}E.append("g").attr("class","brush").call(b).call(b.move,v.range()),u.append("rect").attr("class","zoom").attr("width",h).attr("height",d).attr("transform","translate("+l.left+","+l.top+")").call(C)},u=(a("dRSK"),function(t){d3.select("#chart").append("text").attr("class","message").attr("x",150).attr("y",150).text(t)}),l=4,d={props:["data","height"],data:function(){return{isClicked:!1}},watch:{data:function(){this.render()}},created:function(){setTimeout(this.render,100)},beforeDestroy:function(){this.remove()},methods:{click:function(){this.isClicked=!0},render:function(){this.remove(),_.size(this.data.candles)0?"profit":"loss"}}},$=z,j=(a("WlXR"),Object(g["a"])($,P,A,!1,null,null,null)),O=j.exports,M=a("UeuA"),G=a("vf3E"),I={props:["result"],data:function(){return{}},methods:{},components:{roundtripTable:G["a"],resultSummary:O,chart:M["a"]},computed:{candles:function(){return{candles:this.result.stratCandles,trades:this.result.trades}}}},R=I,H=(a("wVP4"),Object(g["a"])(R,T,E,!1,null,null,null)),K=H.exports,Y={data:function(){return{backtestable:!1,backtestState:"idle",backtestResult:!1,config:!1}},methods:{check:function(t){if(this.config=t,!t.valid)return this.backtestable=!1;this.backtestable=!0},run:function(){var t=this;this.backtestState="fetching",Object(f["b"])("backtest",this.config,function(e,a){t.backtestState="fetched",t.backtestResult=a})}},components:{configBuilder:S,result:K,spinner:h["a"]}},W=Y,N=Object(g["a"])(W,n,r,!1,null,null,null);e["a"]=N.exports},c7Wa:function(t,e){const a=["marketUpdate"],n=["marketStart","stratWarmupCompleted"],r=["tradeCompleted","advice","roundtrip"],i=(t,e)=>{const i=e.type,s=e.payload;return t={...t,latestUpdate:new Date},r.includes(i)&&(t=t.events[i]?{...t,events:{...t.events,[i]:[...t.events[i],s]}}:{...t,events:{...t.events,[i]:[s]}}),t.events.initial[i]||a.includes(i)||(t={...t,events:{...t.events,initial:{...t.events.initial,[i]:s}}}),n.includes(i)||(t={...t,events:{...t.events,latest:{...t.events.latest,[i]:s}}}),t};t.exports=i},dHeD:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain"},[a("div",{staticClass:"text",domProps:{innerHTML:t._s(t.intro)}}),a("div",{staticClass:"hr"}),a("h2",[t._v("Available datasets")]),"idle"===t.datasetScanstate?a("div",{staticClass:"txt--center my2"},[a("a",{staticClass:"w100--s btn--primary scan-btn",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.scan(e)}}},[t._v("Scan available data")])]):t._e(),"scanning"===t.datasetScanstate?a("div",{staticClass:"txt--center my2"},[a("spinner")],1):t._e(),"scanned"===t.datasetScanstate?a("div",{staticClass:"my2"},[t.unscannableMakets.length?a("div",{staticClass:"bg--orange p1 warning my1"},[t.viewUnscannable?t._e():a("p",{staticClass:"clickable",on:{click:function(e){return e.preventDefault(),t.toggleUnscannable(e)}}},[t._v("Some markets were unscannable, click here for details.")]),t.viewUnscannable?[a("p",[t._v("Unable to find datasets in the following markets:")]),t._l(t.unscannableMakets,function(e){return a("div",{staticClass:"mx2"},[t._v("- "+t._s(e.exchange)+":"+t._s(e.currency)+":"+t._s(e.asset))])})]:t._e()],2):t._e(),t.datasets.length?[a("table",{staticClass:"full data"},[t._m(0),a("tbody",t._l(t.datasets,function(e){return a("tr",[a("td",[t._v(t._s(e.exchange))]),a("td",[t._v(t._s(e.currency))]),a("td",[t._v(t._s(e.asset))]),a("td",[t._v(t._s(t.fmt(e.from)))]),a("td",[t._v(t._s(t.fmt(e.to)))]),a("td",[t._v(t._s(t.humanizeDuration(e.to.diff(e.from))))])])}))])]:t._e(),t.datasets.length?t._e():[a("p",[t._v("It looks like you don't have any local data yet.")])]],2):t._e(),a("div",{staticClass:"my2"},[a("h2",[t._v("Import more data")]),a("p",{staticClass:"text"},[t._v("You can easily import more market data directly from exchanges using the importer.")]),a("router-link",{staticClass:"btn--primary",attrs:{to:"/data/importer"}},[t._v("Go to the importer!")])],1)])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("from")]),a("th",[t._v("to")]),a("th",[t._v("duration")])])])}],i=(a("VRzm"),a("MB/c")),s=a("5shn"),o=a("spvI"),c=Object(s["a"])("\n\n## Local data\n\nGekko needs local market data in order to backtest strategies. The local\ndata can also be used in a warmup period when running a strategy against a\nlive market.\n\n"),u={mixins:[o["a"]],components:{spinner:i["a"]},data:function(){return{intro:c,viewUnscannable:!1}},methods:{toggleUnscannable:function(){this.viewUnscannable=!0},humanizeDuration:function(t){return window.humanizeDuration(t)},fmt:function(t){return t.format("YYYY-MM-DD HH:mm")}}},l=u,d=(a("2rY9"),a("KHd+")),f=Object(d["a"])(l,n,r,!1,null,null,null);e["a"]=f.exports},dW8q:function(t,e,a){"use strict";var n=a("w3yp"),r=a.n(n);r.a},daul:function(t,e,a){"use strict";var n=a("Kd0R"),r=a.n(n);r.a},g298:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[t.data&&!t.data.done?a("div",[a("h2",[t._v("Importing data..")]),a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[t._m(0),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.data.watch.exchange))])]),a("div",{staticClass:"grd-row"},[t._m(1),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.data.watch.currency)+"/"+t._s(t.data.watch.asset))])])]),a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[t._m(2),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.from)))])]),a("div",{staticClass:"grd-row"},[t._m(3),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.to)))])]),t.initialized?a("div",{staticClass:"grd-row"},[t._m(4),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.latest)))])]):t._e(),t.initialized?a("div",{staticClass:"grd-row"},[t._m(5),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fromEnd))])]):t._e()]),t.initialized?t._e():a("spinner"),t.initialized?a("div",{staticClass:"contain"},[a("progressBar",{attrs:{progress:t.progress}})],1):t._e(),a("p",[a("em",[t._v("(you don't have to wait until the import is done,you can already start "),a("router-link",{attrs:{to:"/backtest"}},[t._v("backtesting")]),t._v(").")],1)])],1):t._e(),t.data&&t.data.done?a("div",{staticClass:"txt--center"},[a("h2",[t._v("Import done")]),a("p",[t._v(" Go and "),a("router-link",{attrs:{to:"/backtest"}},[t._v("backtest")]),t._v(" with your new data!")],1)]):t._e(),t.data?t._e():a("div",{staticClass:"txt--center"},[a("h2",[t._v("ERROR: Unknown import")]),a("p",[a("I",[t._v("don't know this import..")])],1)])])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Market:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Currency/Asset:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("From:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("To:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Imported data until:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Remaining:")])])}],i=(a("dRSK"),a("LvDl")),s=a.n(i),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.progress?a("div",{staticClass:"progressbarWrapper"},[a("p",[a("strong",[t._v(t._s(t.round(t.progress))+"%")])]),a("div",{staticClass:"progressbar"},[a("div",{style:{width:t.progress+"%"}})])]):t._e()},c=[],u={props:["progress"],methods:{round:function(t){return(+t).toFixed(2)}}},l=u,d=(a("/vJE"),a("KHd+")),f=Object(d["a"])(l,o,c,!1,null,null,null),h=f.exports,m=a("MB/c"),v={components:{progressBar:h,spinner:m["a"]},computed:{data:function(){return s.a.find(this.$store.state.imports,{id:this.$route.params.id})},initialized:function(){if(this.data&&this.latest.isValid())return!0},latest:function(){if(this.data)return this.mom(this.data.latest)},fromEndMs:function(){if(this.data)return this.to.diff(this.latest)},fromEnd:function(){return this.latest?humanizeDuration(this.fromEndMs):"LOADING"},from:function(){if(this.data)return this.mom(this.data.from)},to:function(){if(this.data)return this.mom(this.data.to)},timespan:function(){if(this.data)return this.to.diff(this.from)},progress:function(){if(this.data){var t=this.timespan-this.fromEndMs;return 100*t/this.timespan}}},methods:{fmt:function(t){return t.format("YYYY-MM-DD HH:mm:ss")},mom:function(t){return moment.utc(t)}}},p=v,g=(a("qDq4"),Object(d["a"])(p,n,r,!1,null,null,null));e["a"]=g.exports},gYof:function(t,e,a){"use strict";a("LvDl");var n=a("Kw5r"),r=a("r0f2"),i=(a("L2JU"),a("wiDz")),s=a("Q2AE"),o=function(){Object(i["a"])("imports",function(t,e){s["a"].commit("syncImports",e)})},c=function(){C.$on("import_update",function(t){s["a"].commit("updateImport",t)})},u=function(){o(),c()},l=function(){Object(i["a"])("gekkos",function(t,e){var a=e;s["a"].commit("syncGekkos",a)})},d=function(){C.$on("gekko_new",function(t){return s["a"].commit("addGekko",t.state)}),C.$on("gekko_event",function(t){return s["a"].commit("updateGekko",t)}),C.$on("gekko_archived",function(t){return s["a"].commit("archiveGekko",t.id)}),C.$on("gekko_error",function(t){return s["a"].commit("errorGekko",t)}),C.$on("gekko_deleted",function(t){return s["a"].commit("deleteGekko",t.id)})},f=function(){l(),d()},h=function(){},m=function(){C.$on("WS_STATUS_CHANGE",function(t){return s["a"].commit("setGlobalWarning",{key:"connected",value:t.connected})})},v=function(){h(),m()},p=a("k5N+"),g=(a("rGqo"),function(t){if(!t)return{};var e=t,a={};return e.forEach(function(t){a[t.slug]=a[t.slug]||{markets:{}},t.markets.forEach(function(e){var n=Object(p["a"])(e["pair"],2),r=n[0],i=n[1];a[t.slug].markets[r]=a[t.slug].markets[r]||[],a[t.slug].markets[r].push(i)}),"exchangeMaxHistoryAge"in t&&(a[t.slug].exchangeMaxHistoryAge=t.exchangeMaxHistoryAge),a[t.slug].importable=!!t.providesFullHistory,a[t.slug].tradable=!!t.tradable,a[t.slug].requires=t.requires}),a}),_=function(){Object(i["a"])("apiKeys",function(t,e){s["a"].commit("syncApiKeys",e)}),Object(i["a"])("exchanges",function(t,e){s["a"].commit("syncExchanges",g(e))})},k=function(){C.$on("apiKeys",function(t){s["a"].commit("syncApiKeys",t.exchanges)})},y=function(){_(),k()},w=function(){u(),f(),v(),y()};a.d(e,"a",function(){return C}),a.d(e,"b",function(){return S});var b=null,C=new n["a"];C.$on("gekko_update",function(t){return console.log(t)}),C.$on("import_update",function(t){return console.log(t)}),C.$on("import_error",function(t){alert("IMPORT ERROR: "+t.error)});var x={connected:!1},S=function(){b=new ReconnectingWebSocket(r["b"],null,{maxReconnectInterval:4e3}),setTimeout(function(){x.connected||(w(),C.$emit("WS_STATUS_CHANGE",x))},500),b.onopen=function(){x.connected||(x.connected=!0,C.$emit("WS_STATUS_CHANGE",x),w())},b.onclose=function(){x.connected&&(x.connected=!1,C.$emit("WS_STATUS_CHANGE",x))},b.onerror=function(){x.connected&&(x.connected=!1,C.$emit("WS_STATUS_CHANGE",x))},b.onmessage=function(t){var e=JSON.parse(t.data);C.$emit(e.type,e)}}},h8ks:function(t,e,a){},hGnM:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain py2"},[a("h3",[t._v("Market watchers")]),t.watchers.length?t._e():a("div",{staticClass:"text"},[a("p",[t._v("You don't have any market watchers.")])]),t.watchers.length?a("table",{staticClass:"full clickable"},[t._m(0),a("tbody",t._l(t.watchers,function(e){return a("tr",{staticClass:"clickable",on:{click:function(a){t.$router.push({path:"/live-gekkos/"+e.id})}}},[a("td",[t._v(t._s(e.config.watch.exchange))]),a("td",[t._v(t._s(e.config.watch.currency))]),a("td",[t._v(t._s(e.config.watch.asset))]),a("td",[t._v(t._s(t.status(e)))]),a("td",[e.events.initial.candle?[t._v(t._s(t.fmt(e.events.initial.candle.start)))]:t._e()],2),a("td",[e.events.latest.candle?[t._v(t._s(t.fmt(e.events.latest.candle.start)))]:t._e()],2),a("td",[e.events.initial.candle&&e.events.latest.candle?[t._v(t._s(t.timespan(e.events.latest.candle.start,e.events.initial.candle.start)))]:t._e()],2)])}))]):t._e(),a("h3",[t._v("Strat runners")]),t.stratrunners.length?t._e():a("div",{staticClass:"text"},[a("p",[t._v("You don't have any stratrunners.")])]),t.stratrunners.length?a("table",{staticClass:"full"},[t._m(1),a("tbody",t._l(t.stratrunners,function(e){return a("tr",{staticClass:"clickable",on:{click:function(a){t.$router.push({path:"/live-gekkos/"+e.id})}}},[a("td",[t._v(t._s(e.config.watch.exchange))]),a("td",[t._v(t._s(e.config.watch.currency))]),a("td",[t._v(t._s(e.config.watch.asset))]),a("td",[t._v(t._s(t.status(e)))]),a("td",[e.events.initial.candle&&e.events.latest.candle?[t._v(t._s(t.timespan(e.events.latest.candle.start,e.events.initial.candle.start)))]:t._e()],2),a("td",[t._v(t._s(e.config.tradingAdvisor.method))]),a("td",[t.report(e)?t._e():[t._v("0")],t.report(e)?[t._v(t._s(t.round(t.report(e).profit))+" "+t._s(t.report(e).currency))]:t._e()],2),a("td",[t._v(t._s(e.logType))]),a("td",[e.events.tradeCompleted?t._e():[t._v("0")],e.events.tradeCompleted?[t._v(t._s(e.events.tradeCompleted.length))]:t._e()],2)])}))]):t._e(),a("div",{staticClass:"hr"}),a("h2",[t._v("Start a new live Gekko")]),a("router-link",{staticClass:"btn--primary",attrs:{to:"/live-gekkos/new"}},[t._v("Start a new live Gekko!")])],1)},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("status")]),a("th",[t._v("started at")]),a("th",[t._v("last update")]),a("th",[t._v("duration")])])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("status")]),a("th",[t._v("duration")]),a("th",[t._v("strategy")]),a("th",[t._v("PnL")]),a("th",[t._v("type")]),a("th",[t._v("trades")])])])}],i=(a("a1Th"),a("rGqo"),a("yt8O"),a("VRzm"),{created:function(){var t=this;this.timer=setInterval(function(){t.now=moment()},1e3)},destroyed:function(){clearTimeout(this.timer)},data:function(){return{timer:!1,now:moment()}},computed:{stratrunners:function(){return _.values(this.$store.state.gekkos).concat(_.values(this.$store.state.archivedGekkos)).filter(function(t){return"papertrader"===t.logType||"tradebot"===t.logType})},watchers:function(){return _.values(this.$store.state.gekkos).concat(_.values(this.$store.state.archivedGekkos)).filter(function(t){return"watcher"===t.logType})}},methods:{humanizeDuration:function(t){return window.humanizeDuration(t)},moment:function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(t){return moment.utc(t)}),fmt:function(t){return moment.utc(t).format("YYYY-MM-DD HH:mm")},round:function(t){return(+t).toFixed(3)},timespan:function(t,e){return this.humanizeDuration(this.moment(t).diff(this.moment(e)))},status:function(t){return t.errored?"errored":t.stopped?"stopped":t.active?"running":void console.log("unknown state:",t)},report:function(t){return _.get(t,"events.latest.performanceReport")}}}),s=i,o=(a("daul"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},jTvs:function(t,e,a){},jVW9:function(t,e,a){},jf14:function(t,e,a){},jloR:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[a("div",{staticClass:"text",domProps:{innerHTML:t._s(t.intro)}}),a("div",{staticClass:"hr"}),a("h3",[t._v("Currently running imports")]),0===t.imports.length?a("p",[t._v("You currently don't have any imports running.")]):t._e(),t.imports.length?a("ul",t._l(t.imports,function(e){return a("li",[a("router-link",{attrs:{to:"/data/importer/import/"+e.id}},[t._v(t._s(e.watch.exchange)+":"+t._s(e.watch.currency)+"/"+t._s(e.watch.asset))])],1)})):t._e(),a("div",{staticClass:"hr"}),a("h3",[t._v("Start a new import")]),a("import-config-builder",{on:{config:t.updateConfig}}),a("div",{staticClass:"hr"}),a("div",{staticClass:"txt--center"},[a("a",{staticClass:"w100--s my1 btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.run(e)}}},[t._v("Import")])])],1)},r=[],i=a("wiDz"),s=a("MB/c"),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("h3",[t._v("Market")]),a("market-picker",{attrs:{"only-importable":"true"},on:{market:t.updateMarketConfig}})],1),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("range-creator",{on:{range:t.updateRange}})],1)])])},c=[],u=(a("91GP"),a("6BxS")),l=a("FhOJ"),d=(a("LvDl"),{data:function(){return{market:{},range:{}}},components:{marketPicker:u["a"],rangeCreator:l["a"]},computed:{config:function(){var t={};return Object.assign(t,this.market,{importer:{daterange:this.range}},{candleWriter:{enabled:!0}}),t}},methods:{updateMarketConfig:function(t){this.market=t,this.emitConfig()},updateRange:function(t){this.range=t,this.emitConfig()},emitConfig:function(){this.$emit("config",this.config)}}}),f=d,h=(a("H+ir"),a("KHd+")),m=Object(h["a"])(f,o,c,!1,null,null,null),v=m.exports,p=a("5shn"),g=Object(p["a"])("\n\n## Import data\n\nThe importer can download historical market data directly from the exchange.\n\n"),_={components:{importConfigBuilder:v,spinner:s["a"]},data:function(){return{intro:g,config:{}}},computed:{imports:function(){return this.$store.state.imports}},methods:{daysApart:function(t){var e=moment(t.to),a=moment(t.from);return e.diff(a,"days")},updateConfig:function(t){this.config=t},run:function(){var t=this,e=this.daysApart(this.config.importer.daterange);if(e<1)return alert("You can only import at least one day of data..");var a=this.$store.state.exchanges[this.config.watch.exchange];if("exchangeMaxHistoryAge"in a&&moment(this.config.importer.daterange.from) 1%","last 2 versions","not ie <= 8"]}},ldlP:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("section",{staticClass:"contain grd-row"},[a("div",{staticClass:"grd-row-col-3-6",domProps:{innerHTML:t._s(t.left)}}),t._m(0)])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-3-6 txt--center"},[a("img",{attrs:{src:"/static/gekko.jpg"}}),a("p",[a("em",[t._v("The most valuable commodity I know of is information.")])])])}],i=a("5shn"),s=Object(i["a"])("\n\n## Gekko\n\nGekko is a Bitcoin trading bot and backtesting platform that\nconnects to popular Bitcoin exchanges. It is written in javascript\nand runs on nodejs.\n\n[Find out more](https://gekko.wizb.it/).\n\n*Gekko is 100% open source and free, if you paid for this you have been scammed.*\n\n"),o={data:function(){return{left:s}}},c=o,u=a("KHd+"),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},mf2E:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"my2"},[t.data?t._e():a("div",{staticClass:"contain"},[a("h1",[t._v("Unknown Gekko instance")]),a("p",[t._v("Gekko doesn't know what gekko this is...")])]),t.data?a("div",[a("h2",{staticClass:"contain"},[t._v("Gekko "+t._s(t.type))]),t.isArchived?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This is an archived Gekko, it is currently not running anymore.")]):t._e(),t.data.errorMessage?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This is Gekko crashed with the following error: "+t._s(t.data.errorMessage))]):t._e(),a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Market")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Exchange")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.exchange))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Currency")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.currency))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Asset")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.asset))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Type")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.type))])])]),a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Runtime")]),t.isLoading?a("spinner"):t._e(),t.isLoading?t._e():[t.initialEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Watching since")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.initialEvents.candle.start)))])]):t._e(),t.latestEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Received data until")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.latestEvents.candle.start)))])]):t._e(),t.latestEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Data spanning")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.humanizeDuration(t.moment(t.latestEvents.candle.start).diff(t.moment(t.initialEvents.candle.start)))))])]):t._e(),t.isStratrunner?[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Amount of trades")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.trades.length))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Candle size")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.config.tradingAdvisor.candleSize))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("History size")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.config.tradingAdvisor.historySize))])])]:t._e()]],2)]),t.warmupRemaining?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This stratrunner is still warming up for the next "),a("i",[t._v(t._s(t.warmupRemaining.replace(","," and ")))]),t._v(", it will not trade until it is warmed up.")]):t._e(),t.isStratrunner?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Strategy")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Name")]),a("div",{staticClass:"grd-row-col-3-6"},[a("strong",[t._v(t._s(t.stratName))])])]),t._v("Parameters"),a("pre",[t._v(t._s(t.stratParams))])]),a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Profit report")]),t.report?t._e():[a("p",[t.isArchived?a("em",[t._v("This Gekko never executed a trade..")]):t._e(),t.isArchived?t._e():a("em",[t._v("Waiting for at least one trade..")])])],t.report?[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Start balance")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.startBalance)))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Current balance")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.balance)))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Market")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.market/100*t.report.startPrice))+" "+t._s(t.config.watch.currency)+" ("+t._s(t.round(t.report.market))+" %)")])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Profit")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.profit))+" "+t._s(t.config.watch.currency)+" ("+t._s(t.round(t.report.relativeProfit))+" %)")])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Alpha")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.alpha))+" "+t._s(t.config.watch.currency))])])]:t._e()],2)]):t._e(),!t.isStratrunner||t.watcher||t.isArchived?t._e():a("p",[t._v("WARNING: stale gekko, not attached to a watcher, please report "),a("a",{attrs:{href:"https://github.com/askmike/gekko/issues"}},[t._v("here")]),t._v(".")]),t.isArchived?t._e():a("p",[a("a",{staticClass:"w100--s my1 btn--red",on:{click:t.stopGekko}},[t._v("Stop Gekko")])]),t.isArchived?a("p",[a("a",{staticClass:"w100--s my1 btn--red",on:{click:t.deleteGekko}},[t._v("Delete Gekko")])]):t._e(),t.isStratrunner&&t.watcher&&!t.isArchived?a("p",[a("em",[t._v("This gekko gets market data from "),a("router-link",{attrs:{to:"/live-gekkos/"+t.watcher.id}},[t._v("this market watcher")])],1),t._v(".")]):t._e()]),t.isLoading?t._e():[a("h3",{staticClass:"contain"},[t._v("Market graph")]),"fetching"===t.candleFetch?a("spinner"):t._e(),"fetched"===t.candleFetch?[a("chart",{attrs:{data:t.chartData,height:300}})]:t._e(),t.isStratrunner?a("roundtrips",{attrs:{roundtrips:t.roundtrips}}):t._e()]],2):t._e()])},r=[],i=(a("a1Th"),a("dRSK"),a("Kw5r")),s=a("LvDl"),o=a.n(s),c=a("wiDz"),u=a("MB/c"),l=a("UeuA"),d=a("vf3E"),f=a("0Bu0"),h={created:function(){this.isLoading||this.getCandles()},components:{spinner:u["a"],chart:l["a"],paperTradeSummary:f["a"],roundtrips:d["a"]},data:function(){return{candleFetch:"idle",candles:!1}},computed:{id:function(){return this.$route.params.id},gekkos:function(){return this.$store.state.gekkos},archivedGekkos:function(){return this.$store.state.archivedGekkos},data:function(){return!!this.gekkos&&(o.a.has(this.gekkos,this.id)?this.gekkos[this.id]:!!o.a.has(this.archivedGekkos,this.id)&&this.archivedGekkos[this.id])},config:function(){return o.a.get(this,"data.config")},latestEvents:function(){return o.a.get(this,"data.events.latest")},initialEvents:function(){return o.a.get(this,"data.events.initial")},trades:function(){return o.a.get(this,"data.events.tradeCompleted")||[]},roundtrips:function(){return o.a.get(this,"data.events.roundtrip")||[]},isLive:function(){return o.a.has(this.gekkos,this.id)},type:function(){return this.data.logType},isStratrunner:function(){return"watcher"!==this.type},isArchived:function(){return this.data.stopped},warmupRemaining:function(){if(!this.isStratrunner)return!1;if(this.isArchived)return!1;if(this.initialEvents.stratWarmupCompleted)return!1;if(!this.initialEvents.candle)return!1;var t=o.a.get(this.config,"tradingAdvisor.candleSize")*o.a.get(this.config,"tradingAdvisor.historySize");return humanizeDuration(moment(this.initialEvents.candle.start).add(t,"m").diff(moment()),{largest:2})},chartData:function(){return{candles:this.candles,trades:this.trades}},report:function(){return o.a.get(this.latestEvents,"performanceReport")},stratName:function(){if(this.data)return this.data.config.tradingAdvisor.method},stratParams:function(){if(!this.data)return"Loading...";var t=i["a"].util.extend({},this.data.config[this.stratName]);return delete t.__empty,o.a.isEmpty(t)?"No parameters":JSON.stringify(t,null,4)},isLoading:function(){return!this.data||(!o.a.get(this.data,"events.initial.candle")||!o.a.get(this.data,"events.latest.candle"))},watcher:function(){var t=this;if(!this.isStratrunner)return!1;var e=i["a"].util.extend({},this.data.config.watch);return o.a.find(this.gekkos,function(a){return a.id!==t.id&&o.a.isEqual(e,a.config.watch)})},hasLeechers:function(){var t=this;if(this.isStratrunner)return!1;var e=i["a"].util.extend({},this.data.config.watch);return o.a.find(this.gekkos,function(a){return a.id!==t.id&&o.a.isEqual(e,a.config.watch)})}},watch:{"data.events.latest.candle.start":function(){setTimeout(this.getCandles,o.a.random(100,2e3))}},methods:{round:function(t){return(+t).toFixed(5)},humanizeDuration:function(t,e){return window.humanizeDuration(t,e)},moment:function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(t){return moment.utc(t)}),fmt:function(t){return moment.utc(t).format("YYYY-MM-DD HH:mm")},getCandles:function(){var t=this;if(!this.isLoading&&"fetching"!==this.candleFetch){this.candleFetch="fetching";var e=this.data.events.latest.candle.start,a=this.data.events.initial.candle.start,n=1;"watcher"!==this.type&&(n=this.data.config.tradingAdvisor.candleSize);var r={watch:this.data.config.watch,daterange:{to:e,from:a},candleSize:n};setTimeout(function(){Object(c["b"])("getCandles",r,function(e,a){if(t.candleFetch="fetched",!a||a.error||!o.a.isArray(a))return console.log(a);t.candles=a.map(function(t){return t.start=moment.unix(t.start).utc().format(),t})})},o.a.random(150,2500))}},stopGekko:function(){if(this.hasLeechers)return alert("This Gekko is fetching market data for multiple stratrunners, stop these first.");confirm("Are you sure you want to stop this Gekko?")&&Object(c["b"])("stopGekko",{id:this.data.id},function(t,e){console.log("stopped gekko")})},deleteGekko:function(){var t=this;if(!this.isArchived)return alert("This Gekko is still running, stop it first!");confirm("Are you sure you want to delete this Gekko?")&&Object(c["b"])("deleteGekko",{id:this.data.id},function(e,a){t.$router.push({path:"/live-gekkos/"})})}}},m=h,v=(a("/Dpa"),a("KHd+")),p=Object(v["a"])(m,n,r,!1,null,null,null);e["a"]=p.exports},ngcj:function(t,e,a){"use strict";var n=a("EAJ1"),r=a.n(n);r.a},nzng:function(t,e,a){},pd3X:function(t,e,a){},pyMo:function(t,e,a){},q431:function(t,e,a){"use strict";var n=a("ydmZ"),r=a.n(n);r.a},qDq4:function(t,e,a){"use strict";var n=a("nzng"),r=a.n(n);r.a},r0f2:function(t,e,a){"use strict";a.d(e,"b",function(){return i}),a.d(e,"a",function(){return r});var n,r,i,s=window.CONFIG.ui,o="".concat(s.host).concat(80===s.port?"":":".concat(s.port)).concat(s.path);n=s.ssl?"https://".concat(o):"http://".concat(o),r=n+"api/",i=s.ssl?"wss://".concat(o,"api"):"ws://".concat(o,"api")},rloZ:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd"},[a("div",{staticClass:"px1"},[a("h3",[t._v("Paper trader")]),"closed"===t.toggle?a("a",{staticClass:"btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.switchToggle(e)}}},[t._v("Change paper trader settings")]):t._e(),"open"===t.toggle?[a("p",[t._v("Settings:")]),a("textarea",{directives:[{name:"model",rawName:"v-model",value:t.rawPaperTraderParams,expression:"rawPaperTraderParams"}],staticClass:"params",domProps:{value:t.rawPaperTraderParams},on:{input:function(e){e.target.composing||(t.rawPaperTraderParams=e.target.value)}}}),t.rawPaperTraderParamsError?a("p",{staticClass:"bg--red p1"},[t._v(t._s(t.rawPaperTraderParamsError.message))]):t._e()]:t._e()],2)])},r=[],i=(a("LvDl"),a("wiDz")),s={created:function(){var t=this;Object(i["a"])("configPart/paperTrader",function(e,a){t.rawPaperTraderParams=a.part})},data:function(){return{rawPaperTraderParams:"",rawPaperTraderParamsError:!1,paperTraderParams:{},toggle:"closed"}},watch:{rawPaperTraderParams:function(){this.emitConfig()}},methods:{switchToggle:function(){"open"===this.toggle?this.toggle="closed":this.toggle="open"},emitConfig:function(){this.parseParams(),this.$emit("settings",this.paperTraderParams)},parseParams:function(){try{this.paperTraderParams=toml.parse(this.rawPaperTraderParams),this.paperTraderParams.reportRoundtrips=!0,this.rawPaperTraderParamsError=!1}catch(t){this.rawPaperTraderParamsError=t,this.paperTraderParams={}}}}},o=s,c=(a("0zrD"),a("KHd+")),u=Object(c["a"])(o,n,r,!1,null,null,null);e["a"]=u.exports},spvI:function(t,e,a){"use strict";a("Vd3H"),a("rGqo");var n=a("wiDz"),r={data:function(){return{datasets:[],datasetScanstate:"idle",unscannableMakets:[]}},methods:{scan:function(){var t=this;this.datasetScanstate="scanning",Object(n["b"])("scansets",{},function(e,a){t.datasetScanstate="scanned",t.unscannableMakets=a.errors;var n=[];a.datasets.forEach(function(t){t.ranges.forEach(function(e,a){n.push({exchange:t.exchange,currency:t.currency,asset:t.asset,from:moment.unix(e.from).utc(),to:moment.unix(e.to).utc(),id:t.exchange+t.asset+t.currency+a})})}),n=n.filter(function(t){if(t.to.diff(t.from,"hours")>2)return!0}),n=n.sort(function(t,e){var a=t.to.diff(t.from),n=e.to.diff(e.from);return an?1:0}).reverse(),t.datasets=n})}}};e["a"]=r},tr8f:function(t,e,a){"use strict";var n=a("h8ks"),r=a.n(n);r.a},tr8z:function(t,e,a){"use strict";var n=a("Ug4+"),r=a.n(n);r.a},uMTv:function(t,e,a){"use strict";var n=a("pyMo"),r=a.n(n);r.a},uXxc:function(t,e,a){},vf3E:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain roundtrips"},[a("h2",[t._v("Roundtrips")]),t.roundtrips.length?a("table",[a("thead",[t._m(0),t._l(t.roundtrips,function(e){return a("tr",[a("td",[t._v(t._s(t.fmt(e.entryAt)))]),a("td",[t._v(t._s(t.fmt(e.exitAt)))]),a("td",[t._v(t._s(t.diff(e.duration)))]),a("td",[t._v(t._s(t.round(e.entryBalance)))]),a("td",[t._v(t._s(t.round(e.exitBalance)))]),-1===Math.sign(e.pnl)?[a("td",{staticClass:"loss"},[t._v(t._s(Math.sign(e.pnl)*e.pnl.toFixed(2)))]),a("td",{staticClass:"loss"},[t._v(t._s(e.profit.toFixed(2))+"%")])]:[a("td",{staticClass:"profit"},[t._v(t._s(e.pnl.toFixed(2)))]),a("td",{staticClass:"profit"},[t._v(t._s(e.profit.toFixed(2))+"%")])]],2)})],2)]):t._e(),t.roundtrips.length?t._e():a("div",[a("p",[t._v("Not enough data to display")])])])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("tr",[a("th",[t._v("Entry at (UTC)")]),a("th",[t._v("Exit at (UTC)")]),a("th",[t._v("Exposure")]),a("th",[t._v("Entry balance")]),a("th",[t._v("Exit balance")]),a("th",[t._v("P&L")]),a("th",[t._v("Profit")])])}],i=(a("VRzm"),a("LvDl")),s=a.n(i),o={props:["roundtrips"],data:function(){return{}},methods:{diff:function(t){return moment.duration(t).humanize()},humanizeDuration:function(t){return window.humanizeDuration(t)},fmt:function(t){var e;return e=s.a.isNumber(t)?moment.unix(t):moment(t).utc(),e.utc().format("YYYY-MM-DD HH:mm")},round:function(t){return(+t).toFixed(3)}}},c=o,u=(a("dW8q"),a("KHd+")),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},vwRV:function(t,e,a){},w3yp:function(t,e,a){},wVP4:function(t,e,a){"use strict";var n=a("vwRV"),r=a.n(n);r.a},wVPO:function(t,e,a){"use strict";var n=a("uXxc"),r=a.n(n);r.a},wiDz:function(t,e,a){"use strict";a.d(e,"b",function(){return u}),a.d(e,"a",function(){return l});var n=a("24Ii"),r=a.n(n),i=a("TrxG"),s=a.n(i),o=a("r0f2"),c=function(t){return function(e,a){if(e)return t(e);if(!a.text)return t("no data");var n=JSON.parse(a.text);t(!1,n)}},u=function(t,e,a){r.a.post(o["a"]+t).use(s.a).send(e).end(c(a))},l=function(t,e){r.a.get(o["a"]+t).use(s.a).end(c(e))}},ydmZ:function(t,e,a){},yomC:function(t,e,a){"use strict";var n=a("EfWa"),r=a.n(n);r.a},yuKf:function(t,e,a){}}); -//# sourceMappingURL=app.bd655fc0.js.map \ No newline at end of file diff --git a/web/vue/dist/app.bd655fc0.js.map b/web/vue/dist/app.bd655fc0.js.map deleted file mode 100644 index d96924bf5..000000000 --- a/web/vue/dist/app.bd655fc0.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/gekko/singleGekko.vue?6cec","webpack:///./src/components/global/progressBar.vue?7bcc","webpack:///./src/components/global/paperTradeSummary.vue?13b5","webpack:///src/components/global/paperTradeSummary.vue","webpack:///./src/components/global/paperTradeSummary.vue?a8ef","webpack:///./src/components/global/paperTradeSummary.vue","webpack:///./src/components/global/configbuilder/papertrader.vue?c5cd","webpack:///./src/components/gekko/new.vue?c104","webpack:///./src/components/gekko/new.vue?367c","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?035a","webpack:///./src/components/global/configbuilder/typepicker.vue?df24","webpack:///src/components/global/configbuilder/typepicker.vue","webpack:///./src/components/global/configbuilder/typepicker.vue?cf28","webpack:///./src/components/global/configbuilder/typepicker.vue","webpack:///src/components/gekko/gekkoConfigBuilder.vue","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?8d92","webpack:///./src/components/gekko/gekkoConfigBuilder.vue","webpack:///src/components/gekko/new.vue","webpack:///./src/components/gekko/new.vue?ae9a","webpack:///./src/components/gekko/new.vue","webpack:///./src/components/data/data.vue?4abe","webpack:///./src/tools/marked.js","webpack:///./src/components/global/configbuilder/marketpicker.vue?d701","webpack:///src/components/global/configbuilder/marketpicker.vue","webpack:///./src/components/global/configbuilder/marketpicker.vue?200d","webpack:///./src/components/global/configbuilder/marketpicker.vue","webpack:///./src/components/global/configbuilder/stratpicker.vue?fda9","webpack:///src/components/global/configbuilder/stratpicker.vue","webpack:///./src/components/global/configbuilder/stratpicker.vue?8a34","webpack:///./src/components/global/configbuilder/stratpicker.vue","webpack:///./src/components/global/configbuilder/rangepicker.vue?ce7c","webpack:///./src/components/global/configbuilder/rangecreator.vue?8425","webpack:///src/components/global/configbuilder/rangecreator.vue","webpack:///./src/components/global/configbuilder/rangecreator.vue?3f8d","webpack:///./src/components/global/configbuilder/rangecreator.vue","webpack:///./src/components/data/import/importConfigBuilder.vue?3911","webpack:///./src/components/global/blockSpinner.vue?cca6","webpack:///src/components/global/blockSpinner.vue","webpack:///./src/components/global/blockSpinner.vue?7b17","webpack:///./src/components/global/blockSpinner.vue","webpack:///./src/App.vue?77b6","webpack:///./src/components/layout/header.vue?345a","webpack:///src/components/layout/header.vue","webpack:///./src/components/layout/header.vue?8ecd","webpack:///./src/components/layout/header.vue","webpack:///./src/components/layout/footer.vue?0614","webpack:///src/components/layout/footer.vue","webpack:///./src/components/layout/footer.vue?6aff","webpack:///./src/components/layout/footer.vue","webpack:///./src/components/layout/modal.vue?5ed7","webpack:///src/components/layout/modal.vue","webpack:///./src/components/layout/modal.vue?6e33","webpack:///./src/components/layout/modal.vue","webpack:///src/App.vue","webpack:///./src/App.vue?8f16","webpack:///./src/App.vue","webpack:///./src/store/modules/imports/mutations.js","webpack:///./src/store/modules/gekkos/mutations.js","webpack:///./src/store/modules/notifications/mutations.js","webpack:///./src/store/modules/config/mutations.js","webpack:///./src/store/index.js","webpack:///./src/components/backtester/backtestConfigBuilder.vue?fda9","webpack:///./src/components/backtester/result/chartWrapper.vue?d2a0","webpack:///./src/components/global/configbuilder/rangecreator.vue?c7ad","webpack:///./src/components/layout/modal.vue?a2b4","webpack:///./src/components/backtester/result/chartWrapper.vue?cfc8","webpack:///./src/d3/chart4.js","webpack:///./src/d3/message.js","webpack:///src/components/backtester/result/chartWrapper.vue","webpack:///./src/components/backtester/result/chartWrapper.vue?414d","webpack:///./src/components/backtester/result/chartWrapper.vue","webpack:///./src/main.js","webpack:///./src/components/backtester/result/summary.vue?6f4b","webpack:///./src/components/config/config.vue?9014","webpack:///./src/components/config/apiConfigBuilder.vue?901e","webpack:///./src/components/global/configbuilder/exchangepicker.vue?f5ea","webpack:///src/components/global/configbuilder/exchangepicker.vue","webpack:///./src/components/global/configbuilder/exchangepicker.vue?f140","webpack:///./src/components/global/configbuilder/exchangepicker.vue","webpack:///src/components/config/apiConfigBuilder.vue","webpack:///./src/components/config/apiConfigBuilder.vue?a340","webpack:///./src/components/config/apiConfigBuilder.vue","webpack:///src/components/config/config.vue","webpack:///./src/components/config/config.vue?03e8","webpack:///./src/components/config/config.vue","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?c09b","webpack:///./src/components/global/configbuilder/rangepicker.vue?e445","webpack:///src/components/global/configbuilder/rangepicker.vue","webpack:///./src/components/global/configbuilder/rangepicker.vue?6482","webpack:///./src/components/global/configbuilder/rangepicker.vue","webpack:///./src/App.vue?8b0d","webpack:///./src/components/config/apiConfigBuilder.vue?bb40","webpack:///./src/components/backtester/backtester.vue?06dc","webpack:///./src/components/backtester/backtestConfigBuilder.vue?bafa","webpack:///./src/components/global/configbuilder/datasetpicker.vue?dc86","webpack:///src/components/global/configbuilder/datasetpicker.vue","webpack:///./src/components/global/configbuilder/datasetpicker.vue?adbd","webpack:///./src/components/global/configbuilder/datasetpicker.vue","webpack:///src/components/backtester/backtestConfigBuilder.vue","webpack:///./src/components/backtester/backtestConfigBuilder.vue?6bee","webpack:///./src/components/backtester/backtestConfigBuilder.vue","webpack:///./src/components/backtester/result/result.vue?f19d","webpack:///./src/components/backtester/result/summary.vue?a48b","webpack:///src/components/backtester/result/summary.vue","webpack:///./src/components/backtester/result/summary.vue?2c9f","webpack:///./src/components/backtester/result/summary.vue","webpack:///src/components/backtester/result/result.vue","webpack:///./src/components/backtester/result/result.vue?a333","webpack:///./src/components/backtester/result/result.vue","webpack:///src/components/backtester/backtester.vue","webpack:///./src/components/backtester/backtester.vue?b754","webpack:///./src/components/backtester/backtester.vue","webpack:///../state/reduceState.js","webpack:///./src/components/data/data.vue?5f3a","webpack:///src/components/data/data.vue","webpack:///./src/components/data/data.vue?7897","webpack:///./src/components/data/data.vue","webpack:///./src/components/backtester/result/roundtripTable.vue?cb8d","webpack:///./src/components/gekko/list.vue?dec3","webpack:///./src/components/data/import/single.vue?892b","webpack:///./src/components/global/progressBar.vue?f48f","webpack:///src/components/global/progressBar.vue","webpack:///./src/components/global/progressBar.vue?3819","webpack:///./src/components/global/progressBar.vue","webpack:///src/components/data/import/single.vue","webpack:///./src/components/data/import/single.vue?ea36","webpack:///./src/components/data/import/single.vue","webpack:///./src/store/modules/imports/sync.js","webpack:///./src/store/modules/gekkos/sync.js","webpack:///./src/store/modules/notifications/sync.js","webpack:///./src/store/modules/config/sync.js","webpack:///./src/store/init.js","webpack:///./src/components/global/ws.js","webpack:///./src/components/gekko/list.vue?889e","webpack:///src/components/gekko/list.vue","webpack:///./src/components/gekko/list.vue?1de5","webpack:///./src/components/gekko/list.vue","webpack:///./src/components/data/import/importer.vue?370b","webpack:///./src/components/data/import/importConfigBuilder.vue?d697","webpack:///src/components/data/import/importConfigBuilder.vue","webpack:///./src/components/data/import/importConfigBuilder.vue?4a12","webpack:///./src/components/data/import/importConfigBuilder.vue","webpack:///src/components/data/import/importer.vue","webpack:///./src/components/data/import/importer.vue?5b1c","webpack:///./src/components/data/import/importer.vue","webpack:///./src/components/layout/home.vue?e103","webpack:///src/components/layout/home.vue","webpack:///./src/components/layout/home.vue?334a","webpack:///./src/components/layout/home.vue","webpack:///./src/components/gekko/singleGekko.vue?b47b","webpack:///src/components/gekko/singleGekko.vue","webpack:///./src/components/gekko/singleGekko.vue?71ef","webpack:///./src/components/gekko/singleGekko.vue","webpack:///./src/components/global/configbuilder/datasetpicker.vue?0d02","webpack:///./src/components/global/blockSpinner.vue?69ce","webpack:///./src/components/data/import/single.vue?dfe8","webpack:///./src/tools/api.js","webpack:///./src/components/global/configbuilder/papertrader.vue?4204","webpack:///src/components/global/configbuilder/papertrader.vue","webpack:///./src/components/global/configbuilder/papertrader.vue?fdb2","webpack:///./src/components/global/configbuilder/papertrader.vue","webpack:///./src/components/global/mixins/dataset.js","webpack:///./src/components/global/configbuilder/stratpicker.vue?808f","webpack:///./src/components/global/paperTradeSummary.vue?c6c2","webpack:///./src/components/layout/header.vue?b5b8","webpack:///./src/components/backtester/result/roundtripTable.vue?64de","webpack:///src/components/backtester/result/roundtripTable.vue","webpack:///./src/components/backtester/result/roundtripTable.vue?35c4","webpack:///./src/components/backtester/result/roundtripTable.vue","webpack:///./src/components/backtester/result/result.vue?65dd","webpack:///./src/components/global/configbuilder/typepicker.vue?09f6","webpack:///./src/tools/ajax.js","webpack:///./src/components/data/import/importer.vue?3808"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_singleGekko_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressBar_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","render","_vm","this","_h","$createElement","_c","_self","staticClass","_v","_s","report","trades","round2","sharpe","round","startBalance","currency","balance","_m","class","profitClass","relativeProfit","staticRenderFns","paperTradeSummaryvue_type_script_lang_js","props","methods","toFixed","computed","global_paperTradeSummaryvue_type_script_lang_js","component","componentNormalizer","__webpack_exports__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_papertrader_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","on","config","updateConfig","pendingStratrunner","_e","attrs","href","click","$event","preventDefault","start","gekkoConfigBuildervue_type_template_id_6015a1e6_lang_pug_render","only-tradable","isTradebot","market","updateMarketConfig","type","updateType","stratConfig","updateStrat","settings","updatePaperTrader","gekkoConfigBuildervue_type_template_id_6015a1e6_lang_pug_staticRenderFns","typepickervue_type_template_id_4a1aa84c_lang_pug_render","for","_l","directives","rawName","expression","domProps","checked","_q","selectedTypeIndex","change","typepickervue_type_template_id_4a1aa84c_lang_pug_staticRenderFns","typepickervue_type_script_lang_js","created","emitType","types","$emit","watch","configbuilder_typepickervue_type_script_lang_js","typepicker","gekkoConfigBuildervue_type_script_lang_js","_this","ajax","error","response","candleWriter","toml","parse","part","performanceAnalyzer","enabled","range","strat","paperTrader","components","marketPicker","marketpicker","typePicker","stratPicker","stratpicker","papertrader","assign","trader","valid","validConfig","tradingAdvisor","lodash_default","a","isNaN","candleSize","method","isEmpty","mc","emitConfig","pt","gekko_gekkoConfigBuildervue_type_script_lang_js","gekkoConfigBuilder_component","gekkoConfigBuilder","newvue_type_script_lang_js","spinner","blockSpinner","gekkos","$store","state","watchConfig","raw","pick","vue_runtime_esm","util","extend","requiredHistoricalData","stratSettings","historySize","gekkoConfig","startAt","existingMarketWatcher","optimal","moment","utc","startOf","subtract","unix","available","events","initial","candle","Math","max","format","from","find","exchange","existingTradebot","g","logType","availableApiKeys","apiKeys","val","prev","_this2","gekko","latest","startGekko","err","resp","$router","path","concat","id","_this3","str","alert","includes","startWatcher","routeToGekko","console","next","gekko_newvue_type_script_lang_js","new_component","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_data_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","marked","myRenderer","Renderer","link","title","text","external","newWindow","out","test","setOptions","renderer","$$selectedVal","Array","filter","target","options","selected","map","_value","multiple","e","cur","asset","asst","marketpickervue_type_script_lang_js","exchanges","onlyTradable","each","tradable","onlyImportable","importable","markets","assets","currencies","keys","configbuilder_marketpickervue_type_script_lang_js","strategy","input","composing","rawCandleSize","candleSizeUnit","singularCandleSizeUnit","humanizeDuration","rawStratParams","rawStratParamsError","message","stratpickervue_type_script_lang_js","strategies","emptyStrat","stratParams","empty","params","__empty","parseParams","configbuilder_stratpickervue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rangepicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","to","rangecreatorvue_type_script_lang_js","now","then","clone","fmt","emitRange","fmtTs","mom","emitManualEntry","isValid","scanned","tab","selectedRangeIndex","selectedRange","ranges","configbuilder_rangecreatorvue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_importConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","blockSpinnervue_type_script_lang_js","global_blockSpinnervue_type_script_lang_js","headervue_type_template_id_0a62d360_lang_pug_render","headervue_type_template_id_0a62d360_lang_pug_staticRenderFns","headervue_type_script_lang_js","layout_headervue_type_script_lang_js","header","footervue_type_template_id_7782dc11_lang_pug_render","version","ui","footervue_type_template_id_7782dc11_lang_pug_staticRenderFns","gekkoPackage","uiPackage","footervue_type_script_lang_js","layout_footervue_type_script_lang_js","footer_component","footer","modalvue_type_template_id_340a7d17_lang_pug_render","innerHTML","content","modalvue_type_template_id_340a7d17_lang_pug_staticRenderFns","messages","disconnected","modalvue_type_script_lang_js","active","warnings","connected","layout_modalvue_type_script_lang_js","modal_component","modal","Appvue_type_script_lang_js","top","bottom","src_Appvue_type_script_lang_js","App_component","addImport","imp","imports","syncImports","mutations_updateImport","update","index","findIndex","import_id","item","updated","updates","set","reduceState","syncGekkos","live","archivedGekkos","archive","mutations_addGekko","objectSpread","mutations_updateGekko","has","event","mutations_archiveGekko","stopped","omit","mutations_errorGekko","errored","errorMessage","mutations_deleteGekko","setGlobalWarning","warning","mutations_syncApiKeys","mutations_syncExchanges","use","vuex_esm","debug","mutations","merge","mutations_namespaceObject","gekkos_mutations_namespaceObject","notifications_mutations_namespaceObject","config_mutations_namespaceObject","Store","connection","reconnected","strict","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_backtestConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_chartWrapper_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rangecreator_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","chartWrappervue_type_template_id_12bcb8d8_lang_pug_render","clickable","isClicked","width","height","chart4","_data","_trades","_height","price","date","toDate","action","open","dates","prices","svg","d3","select","attr","innerWidth","margin","right","left","margin2","height2","x","scaleUtc","x2","y","scaleLinear","y2","xAxis","axisBottom","xAxis2","yAxis","axisLeft","ticks","brush","brushX","extent","brushed","zoom","scaleExtent","translateExtent","zoomed","line","line2","append","focus","context","domain","min","datum","circles","selectAll","enter","sourceEvent","selection","invert","scaleY","transform","zoomIdentity","scale","translate","_domain","slicedToArray","minIndex","sortedIndex","maxIndex","rescaleX","move","invertX","draw","MIN_CANDLES","chartWrappervue_type_script_lang_js","setTimeout","beforeDestroy","remove","_","size","candles","html","result_chartWrappervue_type_script_lang_js","vue__WEBPACK_IMPORTED_MODULE_1__","vue_router__WEBPACK_IMPORTED_MODULE_3__","router","base","__dirname","routes","redirect","_components_layout_home_vue__WEBPACK_IMPORTED_MODULE_6__","_components_backtester_backtester_vue__WEBPACK_IMPORTED_MODULE_5__","_components_config_config_vue__WEBPACK_IMPORTED_MODULE_10__","_components_data_data_vue__WEBPACK_IMPORTED_MODULE_7__","_components_data_import_importer_vue__WEBPACK_IMPORTED_MODULE_8__","_components_data_import_single_vue__WEBPACK_IMPORTED_MODULE_9__","_components_gekko_list_vue__WEBPACK_IMPORTED_MODULE_11__","_components_gekko_new_vue__WEBPACK_IMPORTED_MODULE_12__","_components_gekko_singleGekko_vue__WEBPACK_IMPORTED_MODULE_13__","_components_global_ws__WEBPACK_IMPORTED_MODULE_14__","store","_store__WEBPACK_IMPORTED_MODULE_4__","el","h","_App_vue__WEBPACK_IMPORTED_MODULE_2__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_summary_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","apiKeySets","removeApiKey","addApiToggle","openAddApi","apiConfigBuildervue_type_template_id_4a31b09e_lang_pug_render","updateExchange","cred","credentials","$set","upload","apiConfigBuildervue_type_template_id_4a31b09e_lang_pug_staticRenderFns","exchangepickervue_type_template_id_50c29cb0_lang_pug_render","exchangepickervue_type_template_id_50c29cb0_lang_pug_staticRenderFns","exchangepickervue_type_script_lang_js","emitExchange","configbuilder_exchangepickervue_type_script_lang_js","exchangepicker","apiConfigBuildervue_type_script_lang_js","exchangePicker","requires","values","confirm","config_apiConfigBuildervue_type_script_lang_js","apiConfigBuilder_component","apiConfigBuilder","configvue_type_script_lang_js","config_configvue_type_script_lang_js","config_component","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_gekkoConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","scan","printRange","rangepickervue_type_script_lang_js","diff","duration","humanize","reset","configbuilder_rangepickervue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_apiConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","check","backtestState","run","backtestResult","backtestConfigBuildervue_type_template_id_0b74d9a3_lang_pug_render","dataset","updateDataset","backtestConfigBuildervue_type_template_id_0b74d9a3_lang_pug_staticRenderFns","datasetpickervue_type_template_id_689b8a00_lang_pug_render","datasetScanstate","datasets","setIndex","rangeVisible","openRange","customFrom","customTo","datasetpickervue_type_template_id_689b8a00_lang_pug_staticRenderFns","datasetpickervue_type_script_lang_js","mixins","largest","updateCustomRange","emitSet","configbuilder_datasetpickervue_type_script_lang_js","datasetpicker","backtestConfigBuildervue_type_script_lang_js","datasetPicker","backtest","daterange","backtestResultExporter","writeToDisk","stratUpdates","roundtrips","stratCandles","stratCandleProps","sc","backtester_backtestConfigBuildervue_type_script_lang_js","backtestConfigBuilder_component","backtestConfigBuilder","resultvue_type_template_id_72b63acc_lang_pug_render","performanceReport","resultvue_type_template_id_72b63acc_lang_pug_staticRenderFns","summaryvue_type_template_id_5bfc891d_lang_pug_render","startTime","endTime","timespan","startPrice","endPrice","summaryvue_type_template_id_5bfc891d_lang_pug_staticRenderFns","summaryvue_type_script_lang_js","paperTradeSummary","result_summaryvue_type_script_lang_js","summary_component","summary","resultvue_type_script_lang_js","roundtripTable","resultSummary","chart","chartWrapper","result_resultvue_type_script_lang_js","result_component","backtestervue_type_script_lang_js","backtestable","configBuilder","backtester_backtestervue_type_script_lang_js","backtester_component","skipInitialEvents","skipLatestEvents","trackAllEvents","reduce","payload","latestUpdate","Date","[object Object]","intro","unscannableMakets","viewUnscannable","toggleUnscannable","datavue_type_script_lang_js","data_datavue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_roundtripTable_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","done","fromEnd","initialized","progress","progressBarvue_type_template_id_2b42ff94_lang_pug_render","style","progressBarvue_type_template_id_2b42ff94_lang_pug_staticRenderFns","progressBarvue_type_script_lang_js","global_progressBarvue_type_script_lang_js","progressBar","singlevue_type_script_lang_js","$route","fromEndMs","current","import_singlevue_type_script_lang_js","single_component","sync_init","commit","sync_sync","bus","$on","imports_sync","gekkos_sync_init","gekkos_sync_sync","gekkos_sync","notifications_sync_init","notifications_sync_sync","ws","notifications_sync","sync_transformMarkets","backendData","exchangesRaw","exchangesTemp","forEach","slug","pair","_pair$pair","exchangeMaxHistoryAge","providesFullHistory","config_sync_init","config_sync_sync","config_sync","store_init","socket","log","info","ws_connect","ReconnectingWebSocket","api","maxReconnectInterval","onopen","onclose","onerror","onmessage","JSON","watchers","status","stratrunners","profit","tradeCompleted","listvue_type_script_lang_js","timer","setInterval","destroyed","clearTimeout","_moment","_x","arguments","toString","b","gekko_listvue_type_script_lang_js","_import","importConfigBuildervue_type_template_id_a8c578c6_lang_pug_render","only-importable","updateRange","importConfigBuildervue_type_template_id_a8c578c6_lang_pug_staticRenderFns","importConfigBuildervue_type_script_lang_js","rangeCreator","rangecreator","importer","import_importConfigBuildervue_type_script_lang_js","importConfigBuilder","importervue_type_script_lang_js","daysApart","import_importervue_type_script_lang_js","importer_component","src","homevue_type_script_lang_js","layout_homevue_type_script_lang_js","isLoading","initialEvents","latestEvents","warmupRemaining","replace","stratName","isArchived","alpha","isStratrunner","watcher","stopGekko","deleteGekko","candleFetch","chartData","singleGekkovue_type_script_lang_js","getCandles","isLive","stratWarmupCompleted","warmupTime","add","stringify","isEqual","hasLeechers","data.events.latest.candle.start","random","res","isArray","_this4","gekko_singleGekkovue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_datasetpicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_blockSpinner_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_single_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","basePath","restPath","wsPath","CONFIG","endpoint","host","port","ssl","toggle","switchToggle","rawPaperTraderParams","rawPaperTraderParamsError","papertradervue_type_script_lang_js","paperTraderParams","reportRoundtrips","configbuilder_papertradervue_type_script_lang_js","mixin","_tools_ajax__WEBPACK_IMPORTED_MODULE_2__","errors","sets","sort","adiff","bdiff","reverse","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_stratpicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paperTradeSummary_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","rt","entryAt","exitAt","entryBalance","exitBalance","sign","pnl","roundtripTablevue_type_script_lang_js","isNumber","result_roundtripTablevue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_result_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_typepicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","processResponse","post","superagent__WEBPACK_IMPORTED_MODULE_0___default","_api_js__WEBPACK_IMPORTED_MODULE_2__","superagent_no_cache__WEBPACK_IMPORTED_MODULE_1___default","send","end","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_importer_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default"],"mappings":"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","file":"app.bd655fc0.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([26,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-3-6\"},[_c('table',{staticClass:\"p1\"},[_c('tr',[_c('th',[_vm._v(\"amount of trades\")]),_c('td',[_vm._v(_vm._s(_vm.report.trades))])]),_c('tr',[_c('th',[_vm._v(\"sharpe ratio\")]),_c('td',[_vm._v(_vm._s(_vm.round2(_vm.report.sharpe)))])]),_c('tr',[_c('th',[_vm._v(\"start balance\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.startBalance))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"final balance\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.balance))+\" \"+_vm._s(_vm.report.currency))])]),_vm._m(0)]),_c('div',{staticClass:\"big txt--right price\",class:_vm.profitClass},[_vm._v(_vm._s(_vm.round(_vm.report.relativeProfit))+\"%\")])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"simulated profit\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./paperTradeSummary.vue?vue&type=template&id=637e135e&lang=pug\"\nimport script from \"./paperTradeSummary.vue?vue&type=script&lang=js\"\nexport * from \"./paperTradeSummary.vue?vue&type=script&lang=js\"\nimport style0 from \"./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[_c('h3',[_vm._v(\"Start a new gekko\")]),_c('gekko-config-builder',{on:{\"config\":_vm.updateConfig}}),_c('div',{staticClass:\"hr\"}),(_vm.config.valid)?_c('div',{staticClass:\"txt--center\"},[(!_vm.pendingStratrunner)?_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.start($event)}}},[_vm._v(\"Start\")]):_vm._e(),(_vm.pendingStratrunner)?_c('spinner'):_vm._e()],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Market\")]),_c('market-picker',{attrs:{\"only-tradable\":_vm.isTradebot},on:{\"market\":_vm.updateMarketConfig}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('type-picker',{on:{\"type\":_vm.updateType}})],1)]),(_vm.type !== \"market watcher\")?[_c('div',{staticClass:\"hr\"}),_c('strat-picker',{staticClass:\"contain my2\",on:{\"stratConfig\":_vm.updateStrat}}),(_vm.type === \"paper trader\")?_c('div',{staticClass:\"hr\"}):_vm._e(),(_vm.type === \"paper trader\")?_c('paper-trader',{on:{\"settings\":_vm.updatePaperTrader}}):_vm._e()]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Type\")]),[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"type\"}},[_vm._v(\"What do you want to do with gekko?\")]),_c('form',{staticClass:\"radio grd\"},_vm._l((_vm.types),function(type,i){return _c('div',{staticClass:\"grd-row m1\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedTypeIndex),expression:\"selectedTypeIndex\"}],staticClass:\"grd-row-col-1-6\",attrs:{\"type\":\"radio\"},domProps:{\"value\":i,\"checked\":_vm._q(_vm.selectedTypeIndex,i)},on:{\"change\":function($event){_vm.selectedTypeIndex=i}}}),_c('label',{staticClass:\"grd-row-col-5-6\",attrs:{\"for\":i}},[_vm._v(_vm._s(type))])])}))]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./typepicker.vue?vue&type=template&id=4a1aa84c&lang=pug\"\nimport script from \"./typepicker.vue?vue&type=script&lang=js\"\nexport * from \"./typepicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./typepicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./gekkoConfigBuilder.vue?vue&type=template&id=6015a1e6&lang=pug\"\nimport script from \"./gekkoConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./gekkoConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./new.vue?vue&type=template&id=da0dc488&lang=pug\"\nimport script from \"./new.vue?vue&type=script&lang=js\"\nexport * from \"./new.vue?vue&type=script&lang=js\"\nimport style0 from \"./new.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=style&index=0&lang=css\"","const marked = require('marked');\n\n// add `target='_blank'` to outgoing links\n\n// https://github.com/chjj/marked/pull/451#issuecomment-49976076\n\nvar myRenderer = new marked.Renderer();\nmyRenderer.link = function(href, title, text) {\n var external, newWindow, out;\n external = /^https?:\\/\\/.+$/.test(href);\n newWindow = external || title === 'newWindow';\n out = \"\" + text + \"\";\n};\n\nmarked.setOptions({renderer: myRenderer});\n\nexport default marked;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"mx1\"},[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Exchange:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.exchange),expression:\"exchange\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.exchange=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.exchanges),function(market,e){return _c('option',[_vm._v(_vm._s(e))])}))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('label',{attrs:{\"for\":\"currency\"}},[_vm._v(\"Currency:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currency),expression:\"currency\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.currency=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.currencies),function(cur){return _c('option',[_vm._v(_vm._s(cur))])}))])]),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('label',{attrs:{\"for\":\"asset\"}},[_vm._v(\"Asset:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.asset),expression:\"asset\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.asset=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.assets),function(asst){return _c('option',[_vm._v(_vm._s(asst))])}))])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./marketpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./marketpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./marketpicker.vue?vue&type=template&id=df4a8b2a&lang=pug\"\nimport script from \"./marketpicker.vue?vue&type=script&lang=js\"\nexport * from \"./marketpicker.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 px1\"},[_c('h3',[_vm._v(\"Strategy\")]),_c('div',[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"strat\"}},[_vm._v(\"Strategy:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.strategy),expression:\"strategy\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.strategy=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.strategies),function(strat){return _c('option',[_vm._v(_vm._s(strat.name))])}))])]),_c('div',[_c('label',{attrs:{\"for\":\"candleSize\"}},[_vm._v(\"Candle Size\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawCandleSize),expression:\"rawCandleSize\"}],domProps:{\"value\":(_vm.rawCandleSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawCandleSize=$event.target.value}}})]),_c('div',{staticClass:\"grd-row-col-3-6 align\"},[_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.candleSizeUnit),expression:\"candleSizeUnit\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.candleSizeUnit=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',[_vm._v(\"minutes\")]),_c('option',[_vm._v(\"hours\")]),_c('option',[_vm._v(\"days\")])])])])])]),_c('div',[_c('label',{attrs:{\"for\":\"historySize\"}},[_vm._v(\"Warmup period (in \"+_vm._s(_vm.rawCandleSize)+\" \"+_vm._s(_vm.singularCandleSizeUnit)+\" candles):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.historySize),expression:\"historySize\"}],domProps:{\"value\":(_vm.historySize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.historySize=$event.target.value}}}),_c('em',{staticClass:\"label-like\"},[_vm._v(\"(will use \"+_vm._s(_vm.humanizeDuration(_vm.candleSize * _vm.historySize * 1000 * 60))+\" of data as history)\")])])]),_c('div',{staticClass:\"grd-row-col-3-6 px1\"},[_c('div',[_c('h3',[_vm._v(\"Parameters\")]),_c('p',[_vm._v(_vm._s(_vm.strategy)+\" Parameters:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawStratParams),expression:\"rawStratParams\"}],staticClass:\"params\",domProps:{\"value\":(_vm.rawStratParams)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawStratParams=$event.target.value}}}),(_vm.rawStratParamsError)?_c('p',{staticClass:\"bg--red p1\"},[_vm._v(_vm._s(_vm.rawStratParamsError.message))]):_vm._e()])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./stratpicker.vue?vue&type=template&id=1df710ae&lang=pug\"\nimport script from \"./stratpicker.vue?vue&type=script&lang=js\"\nexport * from \"./stratpicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./stratpicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Daterange\")]),_c('div',[_c('label',{attrs:{\"for\":\"from\"}},[_vm._v(\"From\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.from),expression:\"from\"}],domProps:{\"value\":(_vm.from)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.from=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"to\"}},[_vm._v(\"To\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.to),expression:\"to\"}],domProps:{\"value\":(_vm.to)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.to=$event.target.value}}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./rangecreator.vue?vue&type=template&id=8c51143a&lang=pug\"\nimport script from \"./rangecreator.vue?vue&type=script&lang=js\"\nexport * from \"./rangecreator.vue?vue&type=script&lang=js\"\nimport style0 from \"./rangecreator.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"spinner\"},[_c('div',{staticClass:\"rect1\"}),_c('div',{staticClass:\"rect2\"}),_c('div',{staticClass:\"rect3\"}),_c('div',{staticClass:\"rect4\"})])}]\n\nexport { render, staticRenderFns }","// http://tobiasahlin.com/spinkit/\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./blockSpinner.vue?vue&type=template&id=45447ea6&lang=pug\"\nimport script from \"./blockSpinner.vue?vue&type=script&lang=js\"\nexport * from \"./blockSpinner.vue?vue&type=script&lang=js\"\nimport style0 from \"./blockSpinner.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('top'),_c('div',{staticClass:\"fill\"},[_c('router-view',{staticClass:\"view\"})],1),_c('bottom'),_c('modal')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"top\"}}),_vm._m(0),_c('nav',{staticClass:\"bg--light-gray\"},[_c('div',{staticClass:\"menu contain\"},[_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/home\"}},[_vm._v(\"Home\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/live-gekkos\"}},[_vm._v(\"Live Gekkos\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/backtest\"}},[_vm._v(\"Backtest\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/data\"}},[_vm._v(\"Local data\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/config\"}},[_vm._v(\"Config\")]),_c('a',{staticClass:\"py1\",attrs:{\"href\":\"https://gekko.wizb.it/docs/introduction/about_gekko.html\",\"target\":\"_blank\"}},[_vm._v(\"Documentation\")])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"bg--off-white grd\"},[_c('div',{staticClass:\"contain grd-row\"},[_c('h3',{staticClass:\"py1 px2 col-2\"},[_vm._v(\"Gekko UI\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./header.vue?vue&type=template&id=0a62d360&lang=pug\"\nimport script from \"./header.vue?vue&type=script&lang=js\"\nexport * from \"./header.vue?vue&type=script&lang=js\"\nimport style0 from \"./header.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"p2 bg--off-white\"},[_c('div',{staticClass:\"contain\"},[_vm._m(0),_c('p',[_vm._v(\"Using Gekko v\"+_vm._s(_vm.version.gekko)+\" and Gekko UI v\"+_vm._s(_vm.version.ui)+\".\")])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',[_c('em',[_vm._v(\"Use Gekko at your own risk.\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./footer.vue?vue&type=template&id=7782dc11&lang=pug\"\nimport script from \"./footer.vue?vue&type=script&lang=js\"\nexport * from \"./footer.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.active)?_c('div',[_c('div',{attrs:{\"id\":\"modal-background\"}}),_c('div',{staticClass:\"modal\",attrs:{\"id\":\"modal\"}},[_c('div',{staticClass:\"modal-guts\",domProps:{\"innerHTML\":_vm._s(_vm.content)}})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./modal.vue?vue&type=template&id=340a7d17&lang=pug\"\nimport script from \"./modal.vue?vue&type=script&lang=js\"\nexport * from \"./modal.vue?vue&type=script&lang=js\"\nimport style0 from \"./modal.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=29e7b8c2&lang=pug\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\n\nexport const addImport = (state, imp) => {\n state.imports.push(imp);\n return state;\n}\n\nexport const syncImports = (state, imports) => {\n state.imports = imports;\n return state;\n}\n\nexport const updateImport = (state, update) => {\n let index = state.imports.findIndex(i => i.id === update.import_id);\n let item = state.imports[index];\n if(!item)\n return state;\n\n let updated = Vue.util.extend(item, update.updates);\n Vue.set(state.imports, index, updated);\n\n return state;\n}","import Vue from 'vue'\nimport _ from 'lodash';\nconst reduceState = require('../../../../../state/reduceState');\n\nexport const syncGekkos = (state, data) => {\n if(!data) {\n return state;\n }\n\n state.gekkos = data.live;\n state.archivedGekkos = data.archive;\n return state;\n}\n\nexport const addGekko = (state, gekko) => {\n state.gekkos = {\n ...state.gekkos,\n [gekko.id]: gekko\n }\n return state;\n}\n\nexport const updateGekko = (state, update) => {\n if(!update.id || !_.has(state.gekkos, update.id)) {\n return console.error('cannot update unknown gekko..');;\n }\n\n state.gekkos = {\n ...state.gekkos,\n [update.id]: reduceState(state.gekkos[update.id], update.event)\n }\n return state;\n}\n\nexport const archiveGekko = (state, id) => {\n if(!_.has(state.gekkos, id)) {\n return console.error('cannot archive unknown gekko..');\n }\n\n state.archivedGekkos = {\n ...state.archivedGekkos,\n [id]: {\n ...state.gekkos[id],\n stopped: true,\n active: false\n }\n }\n\n state.gekkos = _.omit(state.gekkos, id);\n return state;\n}\n\nexport const errorGekko = (state, data) => {\n if(!_.has(state.gekkos, data.id)) {\n return console.error('cannot error unknown gekko..');\n }\n\n state.gekkos = {\n ...state.gekkos,\n [data.id]: {\n ...state.gekkos[data.id],\n errored: true,\n errorMessage: data.error\n }\n }\n\n return state;\n}\n\nexport const deleteGekko = (state, id) => {\n if(!_.has(state.archivedGekkos, id)) {\n return console.error('cannot delete unknown gekko..');\n }\n\n state.archivedGekkos = _.omit(state.archivedGekkos, id);\n return state;\n}","import Vue from 'vue'\nimport _ from 'lodash'\n\nexport const setGlobalWarning = (state, warning) => {\n state.warnings[warning.key] = warning.value;\n return state;\n}","import Vue from 'vue'\n\nexport const syncApiKeys = (state, apiKeys) => {\n Vue.set(state, 'apiKeys', apiKeys);\n return state;\n}\n\nexport const syncExchanges = (state, exchanges) => {\n Vue.set(state, 'exchanges', exchanges);\n return state;\n}","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport _ from 'lodash'\n\nimport * as importMutations from './modules/imports/mutations'\nimport * as gekkoMutations from './modules/gekkos/mutations'\nimport * as notificationMutations from './modules/notifications/mutations'\nimport * as configMutations from './modules/config/mutations'\n\nVue.use(Vuex);\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nlet mutations = {};\n\n_.merge(mutations, importMutations);\n_.merge(mutations, gekkoMutations);\n_.merge(mutations, notificationMutations);\n_.merge(mutations, configMutations);\n\nexport default new Vuex.Store({\n state: {\n warnings: {\n connected: true, // assume we will connect\n },\n imports: [],\n gekkos: {},\n archivedGekkos: {},\n connection: {\n disconnected: false,\n reconnected: false\n },\n apiKeys: [],\n exchanges: {}\n },\n mutations,\n strict: debug\n})","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ clickable: !_vm.isClicked },attrs:{\"id\":\"chartWrapper\"}},[_c('div',{staticClass:\"shield\",on:{\"click\":function($event){$event.preventDefault();return _vm.click($event)}}}),_c('svg',{attrs:{\"id\":\"chart\",\"width\":\"960\",\"height\":_vm.height}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import _ from 'lodash';\n// global moment\n\nexport default function(_data, _trades, _height) {\n\n const trades = _trades.map(t => {\n return {\n price: t.price,\n date: moment.utc(t.date).toDate(),\n action: t.action\n }\n });\n\n const data = _data.map(c => {\n return {\n price: c.open,\n date: moment.utc(c.start).toDate()\n }\n });\n\n var dates = data.map(c => +c.date);\n var prices = data.map(c => +c.price)\n\n var svg = d3.select(\"#chart\");\n\n svg.attr(\"width\", window.innerWidth - 20);\n\n var margin = {top: 20, right: 20, bottom: 110, left: 40};\n var height = _height - margin.top - margin.bottom;\n var margin2 = {top: _height - 70, right: 20, bottom: 30, left: 40};\n var width = +svg.attr(\"width\") - margin.left - margin.right;\n var height2 = _height - margin2.top - margin2.bottom;\n\n var x = d3.scaleUtc().range([0, width]),\n x2 = d3.scaleUtc().range([0, width]),\n y = d3.scaleLinear().range([height, 0]),\n y2 = d3.scaleLinear().range([height2, 0]);\n\n var xAxis = d3.axisBottom(x),\n xAxis2 = d3.axisBottom(x2),\n yAxis = d3.axisLeft(y).ticks(_height / 50);\n\n var brush = d3.brushX()\n .extent([[0, 0], [width, height2]])\n .on(\"brush end\", brushed);\n\n var zoom = d3.zoom()\n .scaleExtent([1, 100])\n .translateExtent([[0, 0], [width, height]])\n .extent([[0, 0], [width, height]])\n .on(\"zoom\", zoomed);\n\n var line = d3.line()\n .x(function(d) { return x(d.date); })\n .y(function(d) { return y(d.price); });\n\n var line2 = d3.line()\n .x(function(d) { return x2(d.date); })\n .y(function(d) { return y2(d.price); });\n\n svg.append(\"defs\").append(\"clipPath\")\n .attr(\"id\", \"clip\")\n .append(\"rect\")\n .attr(\"width\", width)\n .attr(\"height\", height);\n\n var focus = svg.append(\"g\")\n .attr(\"class\", \"focus\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var context = svg.append(\"g\")\n .attr(\"class\", \"context\")\n .attr(\"transform\", \"translate(\" + margin2.left + \",\" + margin2.top + \")\");\n\n x.domain(d3.extent(data, function(d) { return d.date; }));\n y.domain([\n d3.min(prices) * 0.99,\n d3.max(prices) * 1.01\n ]);\n x2.domain(x.domain());\n y2.domain(y.domain());\n\n focus.append(\"path\")\n .datum(data)\n .attr(\"class\", \"line price\")\n .attr(\"d\", line);\n\n focus.append(\"g\")\n .attr(\"class\", \"axis axis--x\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis);\n\n focus.append(\"g\")\n .attr(\"class\", \"axis axis--y\")\n .call(yAxis);\n\n context.append(\"path\")\n .datum(data)\n .attr(\"class\", \"line\")\n .attr(\"d\", line2);\n\n context.append(\"g\")\n .attr(\"class\", \"axis axis--x\")\n .attr(\"transform\", \"translate(0,\" + height2 + \")\")\n .call(xAxis2);\n\n var circles = svg\n .append('g')\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .selectAll(\"circle\")\n .data(trades)\n .enter().append(\"circle\")\n .attr('class', function(d) { return d.action })\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n .attr('r', 5);\n\n var brushCircles = context\n .append('g')\n // .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .selectAll(\"circle\")\n .data(trades)\n .enter().append(\"circle\")\n .attr('class', function(d) { return d.action })\n .attr(\"cx\", function(d) { return x2(d.date); })\n .attr(\"cy\", function(d) { return y2(d.price); })\n .attr('r', 3);\n\n\n context.append(\"g\")\n .attr(\"class\", \"brush\")\n .call(brush)\n .call(brush.move, x.range());\n\n svg.append(\"rect\")\n .attr(\"class\", \"zoom\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .call(zoom);\n\n function brushed() {\n if (d3.event.sourceEvent && d3.event.sourceEvent.type === \"zoom\") return; // ignore brush-by-zoom\n var s = d3.event.selection || x2.range();\n x.domain(s.map(x2.invert, x2));\n\n scaleY(x.domain());\n\n svg.select(\".axis--y\")\n .call(yAxis);\n\n circles\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n\n focus.select(\".line\").attr(\"d\", line);\n focus.select(\".axis--x\").call(xAxis);\n svg.select(\".zoom\").call(zoom.transform, d3.zoomIdentity\n .scale(width / (s[1] - s[0]))\n .translate(-s[0], 0));\n }\n\n function scaleY(domain) {\n let [min, max] = domain;\n\n let minIndex = _.sortedIndex(dates, min);\n let maxIndex = _.sortedIndex(dates, max);\n\n let set = prices.slice(minIndex, maxIndex);\n y.domain([\n d3.min(set) * 0.9995,\n d3.max(set) * 1.0005\n ]);\n }\n\n function zoomed() {\n if (d3.event.sourceEvent && d3.event.sourceEvent.type === \"brush\") return; // ignore zoom-by-brush\n var t = d3.event.transform;\n\n scaleY(t.rescaleX(x2).domain()); \n\n svg.select(\".axis--y\")\n .call(yAxis);\n\n x.domain(t.rescaleX(x2).domain());\n focus.select(\".line\").attr(\"d\", line);\n\n circles\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n\n\n focus.select(\".axis--x\").call(xAxis);\n context.select(\".brush\").call(brush.move, x.range().map(t.invertX, t));\n }\n}","export const draw = function(message) {\n d3.select(\"#chart\").append(\"text\")\n .attr('class', 'message')\n .attr('x', 150)\n .attr('y', 150)\n .text(message);\n}\n\nexport const clear = function() {\n d3.select(\"#chart\").find('text').remove();\n}","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./chartWrapper.vue?vue&type=template&id=12bcb8d8&lang=pug\"\nimport script from \"./chartWrapper.vue?vue&type=script&lang=js\"\nexport * from \"./chartWrapper.vue?vue&type=script&lang=js\"\nimport style0 from \"./chartWrapper.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\n\nimport VueRouter from 'vue-router'\nVue.use(VueRouter);\n\nimport store from './store'\n\nimport backtester from './components/backtester/backtester.vue'\nimport home from './components/layout/home.vue'\n\nimport data from './components/data/data.vue'\nimport importer from './components/data/import/importer.vue'\nimport singleImport from './components/data/import/single.vue'\nimport config from './components/config/config.vue'\n\nimport gekkoList from './components/gekko/list.vue'\nimport newGekko from './components/gekko/new.vue'\nimport singleGekko from './components/gekko/singleGekko.vue'\nimport { connect as connectWS } from './components/global/ws'\n\nconst router = new VueRouter({\n mode: 'hash',\n base: __dirname,\n routes: [\n { path: '/', redirect: '/home' },\n { path: '/home', component: home },\n { path: '/backtest', component: backtester },\n { path: '/config', component: config },\n { path: '/data', component: data },\n { path: '/data/importer', component: importer },\n { path: '/data/importer/import/:id', component: singleImport },\n { path: '/live-gekkos', component: gekkoList },\n { path: '/live-gekkos/new', component: newGekko },\n { path: '/live-gekkos/:id', component: singleGekko },\n ]\n});\n\n// setup some stuff\nconnectWS();\n\nnew Vue({\n router,\n store,\n el: '#app',\n render: h => h(App)\n})","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('h2',[_vm._v(\"Config\")]),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Available API keys\")]),(!_vm.apiKeySets.length)?_c('p',[_c('em',[_vm._v(\"You don't have any API keys yet.\")])]):_vm._e(),_c('ul',_vm._l((_vm.apiKeySets),function(exchange){return _c('li',[_vm._v(_vm._s(exchange)+\" (\"),_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.removeApiKey(exchange)}}},[_vm._v(\"remove\")]),_vm._v(\")\")])})),(!_vm.addApiToggle)?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.openAddApi($event)}}},[_vm._v(\"Add an API key\")]):_vm._e(),(_vm.addApiToggle)?[_c('div',{staticClass:\"hr\"}),_c('apiConfigBuilder')]:_vm._e(),_c('div',{staticClass:\"hr\"})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('h3',[_vm._v(\"Add an API key\")]),_c('p',[_vm._v(\"Make sure that the API key has the permissions to create and cancel orders and view balances.\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Exchange\")]),_c('exchange-picker',{attrs:{\"only-tradable\":\"true\"},on:{\"exchange\":_vm.updateExchange}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Credentials\")]),_vm._l((_vm.requires),function(cred){return [_c('label',[_vm._v(_vm._s(cred))]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.credentials[cred]),expression:\"credentials[cred]\"}],domProps:{\"value\":(_vm.credentials[cred])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.credentials, cred, $event.target.value)}}})]})],2)]),_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.upload($event)}}},[_vm._v(\"Add\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"mx1\"},[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Exchange:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.exchange),expression:\"exchange\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.exchange=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.exchanges),function(market,e){return _c('option',[_vm._v(_vm._s(e))])}))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./exchangepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./exchangepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./exchangepicker.vue?vue&type=template&id=50c29cb0&lang=pug\"\nimport script from \"./exchangepicker.vue?vue&type=script&lang=js\"\nexport * from \"./exchangepicker.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./apiConfigBuilder.vue?vue&type=template&id=4a31b09e&lang=pug\"\nimport script from \"./apiConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./apiConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./config.vue?vue&type=template&id=d21dbde6&lang=pug\"\nimport script from \"./config.vue?vue&type=script&lang=js\"\nexport * from \"./config.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Daterange\")]),(_vm.tab === \"scan\")?[(!_vm.scanned)?_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.scanned == \"fetching\")?_c('div',{staticClass:\"txt--center\"},[_c('p',{staticClass:\"scan-btn\"},[_vm._v(\"Scanning..\")])]):_vm._e(),(_vm.scanned == true)?[(_vm.ranges.length === 0)?[_c('p',[_c('strong',[_vm._v(\"Unable to find any local data, do you have local data available for\\\"\"+_vm._s(_vm.config.watch.exchange)+\":\"+_vm._s(_vm.config.watch.currency)+\"/\"+_vm._s(_vm.config.watch.asset)+\"\\\"?\")])])]:[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Run simulation over:\")]),_c('form',{staticClass:\"radio grd\"},_vm._l((_vm.ranges),function(range,i){return _c('div',{staticClass:\"grd-row m1\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedRangeIndex),expression:\"selectedRangeIndex\"}],staticClass:\"grd-row-col-1-6\",attrs:{\"type\":\"radio\"},domProps:{\"value\":i,\"checked\":_vm._q(_vm.selectedRangeIndex,i)},on:{\"change\":function($event){_vm.selectedRangeIndex=i}}}),_c('label',{staticClass:\"grd-row-col-5-6\",attrs:{\"for\":i}},[_vm._v(_vm._s(_vm.printRange(range)))])])}))],_c('p',[_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"rescan\")])])])]:_vm._e(),_c('p',{staticClass:\"txt--center\"},[_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.tab = \"manual\"}}},[_vm._v(\"Or manually set a daterange\")])])])]:_vm._e(),(_vm.tab === \"manual\")?[_c('div',[_c('label',{attrs:{\"for\":\"from\"}},[_vm._v(\"From:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.from),expression:\"from\"}],domProps:{\"value\":(_vm.from)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.from=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"to\"}},[_vm._v(\"To:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.to),expression:\"to\"}],domProps:{\"value\":(_vm.to)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.to=$event.target.value}}})]),_c('p',{staticClass:\"txt--center\"}),_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.tab = \"scan\"}}},[_vm._v(\"Or scan for a daterange\")])])]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./rangepicker.vue?vue&type=template&id=5037047f&lang=pug\"\nimport script from \"./rangepicker.vue?vue&type=script&lang=js\"\nexport * from \"./rangepicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./rangepicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h2',{staticClass:\"contain\"},[_vm._v(\"Backtest\")]),_c('div',{staticClass:\"hr\"}),_c('config-builder',{on:{\"config\":_vm.check}}),(_vm.backtestable)?_c('div',[_c('div',{staticClass:\"txt--center\"},[(_vm.backtestState !== \"fetching\")?_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.run($event)}}},[_vm._v(\"Backtest\")]):_vm._e(),(_vm.backtestState === \"fetching\")?_c('div',{staticClass:\"scan-btn\"},[_c('p',[_vm._v(\"Running backtest..\")]),_c('spinner')],1):_vm._e()])]):_vm._e(),(_vm.backtestResult && _vm.backtestState === \"fetched\")?_c('result',{attrs:{\"result\":_vm.backtestResult}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('dataset-picker',{staticClass:\"my2 contain\",on:{\"dataset\":_vm.updateDataset}}),_c('div',{staticClass:\"hr\"}),_c('strat-picker',{staticClass:\"my2 contain\",on:{\"stratConfig\":_vm.updateStrat}}),_c('div',{staticClass:\"hr\"}),_c('paper-trader',{staticClass:\"contain\",on:{\"settings\":_vm.updatePaperTrader}}),_c('div',{staticClass:\"hr\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Select a dataset\")]),(_vm.datasetScanstate === \"idle\")?_c('div',{staticClass:\"txt--center my2\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.datasetScanstate === \"scanning\")?_c('div',{staticClass:\"txt--center my2\"},[_c('spinner')],1):_vm._e(),(_vm.datasetScanstate === \"scanned\")?_c('div',{staticClass:\"my2\"},[(_vm.datasets.length != 0)?_c('div',[_c('table',{staticClass:\"full\"},[_vm._m(0),_c('tbody',_vm._l((_vm.datasets),function(set,i){return _c('tr',[_c('td',{staticClass:\"radio\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.setIndex),expression:\"setIndex\"}],attrs:{\"type\":\"radio\",\"name\":\"dataset\",\"id\":set.id},domProps:{\"value\":i,\"checked\":_vm._q(_vm.setIndex,i)},on:{\"change\":function($event){_vm.setIndex=i}}})]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.exchange))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.currency))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.asset))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.fmt(set.from)))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.fmt(set.to)))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.humanizeDuration(set.to.diff(set.from))))])])])}))]),(!_vm.rangeVisible)?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.openRange($event)}}},[_vm._v(\"Adjust range\")]):_vm._e(),(_vm.rangeVisible)?[_c('div',[_c('label',{attrs:{\"for\":\"customFrom\"}},[_vm._v(\"From:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.customFrom),expression:\"customFrom\"}],domProps:{\"value\":(_vm.customFrom)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.customFrom=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"customTo\"}},[_vm._v(\"To:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.customTo),expression:\"customTo\"}],domProps:{\"value\":(_vm.customTo)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.customTo=$event.target.value}}})])]:_vm._e()],2):_c('em',[_vm._v(\"No Data found \"),_c('a',{attrs:{\"href\":\"#/data/importer\"}},[_vm._v(\"Lets add some\")])])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th'),_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"from\")]),_c('th',[_vm._v(\"to\")]),_c('th',[_vm._v(\"duration\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./datasetpicker.vue?vue&type=template&id=689b8a00&lang=pug\"\nimport script from \"./datasetpicker.vue?vue&type=script&lang=js\"\nexport * from \"./datasetpicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./datasetpicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./backtestConfigBuilder.vue?vue&type=template&id=0b74d9a3&lang=pug\"\nimport script from \"./backtestConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./backtestConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"hr contain\"}),_vm._m(0),_c('result-summary',{attrs:{\"report\":_vm.result.performanceReport}}),_c('div',{staticClass:\"hr contain\"}),_c('chart',{attrs:{\"data\":_vm.candles,\"height\":\"500\"}}),_c('div',{staticClass:\"hr contain\"}),_c('roundtripTable',{attrs:{\"roundtrips\":_vm.result.roundtrips}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('h3',[_vm._v(\"Backtest result\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('div',{staticClass:\"grd-row summary\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('table',{staticClass:\"p1\"},[_c('tr',[_c('th',[_vm._v(\"start time\")]),_c('td',[_vm._v(_vm._s(_vm.report.startTime))])]),_c('tr',[_c('th',[_vm._v(\"end time\")]),_c('td',[_vm._v(_vm._s(_vm.report.endTime))])]),_c('tr',[_c('th',[_vm._v(\"timespan\")]),_c('td',[_vm._v(_vm._s(_vm.report.timespan))])]),_c('tr',[_c('th',[_vm._v(\"start price\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.startPrice))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"end price\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.endPrice))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"market\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.market))+\"%\")])])])]),_c('paperTradeSummary',{attrs:{\"report\":_vm.report}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./summary.vue?vue&type=template&id=5bfc891d&lang=pug\"\nimport script from \"./summary.vue?vue&type=script&lang=js\"\nexport * from \"./summary.vue?vue&type=script&lang=js\"\nimport style0 from \"./summary.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./result.vue?vue&type=template&id=72b63acc&lang=pug\"\nimport script from \"./result.vue?vue&type=script&lang=js\"\nexport * from \"./result.vue?vue&type=script&lang=js\"\nimport style0 from \"./result.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtester.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtester.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./backtester.vue?vue&type=template&id=da4202e8&lang=pug\"\nimport script from \"./backtester.vue?vue&type=script&lang=js\"\nexport * from \"./backtester.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Redux/vuex inspired reducer, reduces an event into a gekko state.\n// NOTE: this is used by the backend as well as the frontend.\n\nconst skipInitialEvents = ['marketUpdate'];\nconst skipLatestEvents = ['marketStart', 'stratWarmupCompleted'];\nconst trackAllEvents = ['tradeCompleted', 'advice', 'roundtrip'];\n\nconst reduce = (state, event) => {\n const type = event.type;\n const payload = event.payload;\n\n state = {\n ...state,\n latestUpdate: new Date()\n }\n\n if(trackAllEvents.includes(type)) {\n if(!state.events[type]) {\n state = {\n ...state,\n events: {\n ...state.events,\n [type]: [ payload ]\n }\n }\n } else {\n state = {\n ...state,\n events: {\n ...state.events,\n [type]: [ ...state.events[type], payload ]\n }\n }\n }\n }\n\n if(!state.events.initial[type] && !skipInitialEvents.includes(type)) {\n state = {\n ...state,\n events: {\n ...state.events,\n initial: {\n ...state.events.initial,\n [type]: payload\n }\n }\n }\n }\n\n if(!skipLatestEvents.includes(type)) {\n state = {\n ...state,\n events: {\n ...state.events,\n latest: {\n ...state.events.latest,\n [type]: payload\n }\n }\n }\n }\n\n return state;\n}\n\n// export default reduce;\nmodule.exports = reduce;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('div',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.intro)}}),_c('div',{staticClass:\"hr\"}),_c('h2',[_vm._v(\"Available datasets\")]),(_vm.datasetScanstate === \"idle\")?_c('div',{staticClass:\"txt--center my2\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.datasetScanstate === \"scanning\")?_c('div',{staticClass:\"txt--center my2\"},[_c('spinner')],1):_vm._e(),(_vm.datasetScanstate === \"scanned\")?_c('div',{staticClass:\"my2\"},[(_vm.unscannableMakets.length)?_c('div',{staticClass:\"bg--orange p1 warning my1\"},[(!_vm.viewUnscannable)?_c('p',{staticClass:\"clickable\",on:{\"click\":function($event){$event.preventDefault();return _vm.toggleUnscannable($event)}}},[_vm._v(\"Some markets were unscannable, click here for details.\")]):_vm._e(),(_vm.viewUnscannable)?[_c('p',[_vm._v(\"Unable to find datasets in the following markets:\")]),_vm._l((_vm.unscannableMakets),function(market){return _c('div',{staticClass:\"mx2\"},[_vm._v(\"- \"+_vm._s(market.exchange)+\":\"+_vm._s(market.currency)+\":\"+_vm._s(market.asset))])})]:_vm._e()],2):_vm._e(),(_vm.datasets.length)?[_c('table',{staticClass:\"full data\"},[_vm._m(0),_c('tbody',_vm._l((_vm.datasets),function(set){return _c('tr',[_c('td',[_vm._v(_vm._s(set.exchange))]),_c('td',[_vm._v(_vm._s(set.currency))]),_c('td',[_vm._v(_vm._s(set.asset))]),_c('td',[_vm._v(_vm._s(_vm.fmt(set.from)))]),_c('td',[_vm._v(_vm._s(_vm.fmt(set.to)))]),_c('td',[_vm._v(_vm._s(_vm.humanizeDuration(set.to.diff(set.from))))])])}))])]:_vm._e(),(!_vm.datasets.length)?[_c('p',[_vm._v(\"It looks like you don't have any local data yet.\")])]:_vm._e()],2):_vm._e(),_c('div',{staticClass:\"my2\"},[_c('h2',[_vm._v(\"Import more data\")]),_c('p',{staticClass:\"text\"},[_vm._v(\"You can easily import more market data directly from exchanges using the importer.\")]),_c('router-link',{staticClass:\"btn--primary\",attrs:{\"to\":\"/data/importer\"}},[_vm._v(\"Go to the importer!\")])],1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"from\")]),_c('th',[_vm._v(\"to\")]),_c('th',[_vm._v(\"duration\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./data.vue?vue&type=template&id=6009d44c&lang=pug\"\nimport script from \"./data.vue?vue&type=script&lang=js\"\nexport * from \"./data.vue?vue&type=script&lang=js\"\nimport style0 from \"./data.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[(_vm.data && !_vm.data.done)?_c('div',[_c('h2',[_vm._v(\"Importing data..\")]),_c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_vm._m(0),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.data.watch.exchange))])]),_c('div',{staticClass:\"grd-row\"},[_vm._m(1),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.data.watch.currency)+\"/\"+_vm._s(_vm.data.watch.asset))])])]),_c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_vm._m(2),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.from)))])]),_c('div',{staticClass:\"grd-row\"},[_vm._m(3),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.to)))])]),(_vm.initialized)?_c('div',{staticClass:\"grd-row\"},[_vm._m(4),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.latest)))])]):_vm._e(),(_vm.initialized)?_c('div',{staticClass:\"grd-row\"},[_vm._m(5),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fromEnd))])]):_vm._e()]),(!_vm.initialized)?_c('spinner'):_vm._e(),(_vm.initialized)?_c('div',{staticClass:\"contain\"},[_c('progressBar',{attrs:{\"progress\":_vm.progress}})],1):_vm._e(),_c('p',[_c('em',[_vm._v(\"(you don't have to wait until the import is done,you can already start \"),_c('router-link',{attrs:{\"to\":\"/backtest\"}},[_vm._v(\"backtesting\")]),_vm._v(\").\")],1)])],1):_vm._e(),(_vm.data && _vm.data.done)?_c('div',{staticClass:\"txt--center\"},[_c('h2',[_vm._v(\"Import done\")]),_c('p',[_vm._v(\" Go and \"),_c('router-link',{attrs:{\"to\":\"/backtest\"}},[_vm._v(\"backtest\")]),_vm._v(\" with your new data!\")],1)]):_vm._e(),(!_vm.data)?_c('div',{staticClass:\"txt--center\"},[_c('h2',[_vm._v(\"ERROR: Unknown import\")]),_c('p',[_c('I',[_vm._v(\"don't know this import..\")])],1)]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Market:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Currency/Asset:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"From:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"To:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Imported data until:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Remaining:\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.progress)?_c('div',{staticClass:\"progressbarWrapper\"},[_c('p',[_c('strong',[_vm._v(_vm._s(_vm.round(_vm.progress))+\"%\")])]),_c('div',{staticClass:\"progressbar\"},[_c('div',{style:({width: _vm.progress + \"%\"})})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// http://stackoverflow.com/questions/7190898/progress-bar-with-html-and-css\n\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./progressBar.vue?vue&type=template&id=2b42ff94&lang=pug\"\nimport script from \"./progressBar.vue?vue&type=script&lang=js\"\nexport * from \"./progressBar.vue?vue&type=script&lang=js\"\nimport style0 from \"./progressBar.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./single.vue?vue&type=template&id=b930fa5e&lang=pug\"\nimport script from \"./single.vue?vue&type=script&lang=js\"\nexport * from \"./single.vue?vue&type=script&lang=js\"\nimport style0 from \"./single.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst init = () => {\n get('imports', (err, resp) => {\n store.commit('syncImports', resp);\n });\n}\n\nconst sync = () => {\n bus.$on('import_update', data => {\n store.commit('updateImport', data);\n });\n}\n\nexport default function() {\n init();\n sync();\n}","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\nimport _ from 'lodash'\n\nconst init = () => {\n get('gekkos', (err, resp) => {\n const gekkos = resp;\n store.commit('syncGekkos', gekkos);\n });\n}\n\nconst sync = () => {\n bus.$on('gekko_new', data => store.commit('addGekko', data.state));\n bus.$on('gekko_event', data => store.commit('updateGekko', data));\n bus.$on('gekko_archived', data => store.commit('archiveGekko', data.id));\n bus.$on('gekko_error', data => store.commit('errorGekko', data));\n bus.$on('gekko_deleted', data => store.commit('deleteGekko', data.id));\n\n // unused:\n // bus.$on('gekko_stopped', data => store.commit('x', data.id));\n // bus.$on('gekko_deleted', data => store.commit('x', data.id));\n}\n\nexport default function() {\n init();\n sync();\n}","import store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst init = () => {}\n\nconst sync = () => {\n bus.$on('WS_STATUS_CHANGE', ws => {\n return store.commit('setGlobalWarning', {key: 'connected', value: ws.connected});\n });\n}\n\nexport default function() {\n init();\n sync();\n}","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst transformMarkets = backendData => {\n if(!backendData) {\n return {};\n }\n\n var exchangesRaw = backendData;\n var exchangesTemp = {};\n\n exchangesRaw.forEach(e => {\n exchangesTemp[e.slug] = exchangesTemp[e.slug] || {markets: {}};\n\n e.markets.forEach( pair => {\n let [ currency, asset ] = pair['pair'];\n exchangesTemp[e.slug].markets[currency] = exchangesTemp[e.slug].markets[currency] || [];\n exchangesTemp[e.slug].markets[currency].push( asset );\n });\n\n if (\"exchangeMaxHistoryAge\" in e) {\n exchangesTemp[e.slug].exchangeMaxHistoryAge = e.exchangeMaxHistoryAge;\n }\n\n exchangesTemp[e.slug].importable = e.providesFullHistory ? true : false;\n exchangesTemp[e.slug].tradable = e.tradable ? true : false;\n exchangesTemp[e.slug].requires = e.requires;\n });\n\n return exchangesTemp;\n}\n\n\nconst init = () => {\n get('apiKeys', (err, resp) => {\n store.commit('syncApiKeys', resp);\n });\n\n get('exchanges', (err, resp) => {\n store.commit('syncExchanges', transformMarkets(resp));\n })\n}\n\nconst sync = () => {\n bus.$on('apiKeys', data => {\n store.commit('syncApiKeys', data.exchanges);\n });\n}\n\nexport default function() {\n init();\n sync();\n}\n","import Vue from 'vue'\nimport Vuex from 'vuex'\n\nimport syncImports from './modules/imports/sync'\nimport syncGekkos from './modules/gekkos/sync'\nimport syncNotifications from './modules/notifications/sync'\nimport syncConfig from './modules/config/sync'\n\nexport default function() {\n syncImports();\n syncGekkos();\n syncNotifications();\n syncConfig();\n}","import _ from 'lodash'\nimport Vue from 'vue'\n\nimport { wsPath } from '../../tools/api'\nimport initializeState from '../../store/init'\n\nvar socket = null;\n\nexport const bus = new Vue();\n\nbus.$on('gekko_update', data => console.log(data))\n\nbus.$on('import_update', data => console.log(data))\nbus.$on('import_error', data => {\n alert('IMPORT ERROR: ' + data.error);\n});\n\nconst info = {\n connected: false\n}\n\nexport const connect = () => {\n socket = new ReconnectingWebSocket(wsPath, null, { maxReconnectInterval: 4000 });\n\n setTimeout(() => {\n // in case we cannot connect\n if(!info.connected) {\n initializeState();\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n }, 500);\n\n socket.onopen = () => {\n if(info.connected)\n return;\n\n info.connected = true;\n bus.$emit('WS_STATUS_CHANGE', info);\n initializeState();\n }\n socket.onclose = () => {\n if(!info.connected)\n return;\n\n info.connected = false;\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n socket.onerror = () => {\n if(!info.connected)\n return;\n\n info.connected = false;\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n socket.onmessage = function(message) {\n const payload = JSON.parse(message.data);\n // console.log('ws message:', payload);\n bus.$emit(payload.type, payload);\n };\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain py2\"},[_c('h3',[_vm._v(\"Market watchers\")]),(!_vm.watchers.length)?_c('div',{staticClass:\"text\"},[_c('p',[_vm._v(\"You don't have any market watchers.\")])]):_vm._e(),(_vm.watchers.length)?_c('table',{staticClass:\"full clickable\"},[_vm._m(0),_c('tbody',_vm._l((_vm.watchers),function(gekko){return _c('tr',{staticClass:\"clickable\",on:{\"click\":function($event){_vm.$router.push({path: (\"/live-gekkos/\" + (gekko.id))})}}},[_c('td',[_vm._v(_vm._s(gekko.config.watch.exchange))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.currency))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.asset))]),_c('td',[_vm._v(_vm._s(_vm.status(gekko)))]),_c('td',[(gekko.events.initial.candle)?[_vm._v(_vm._s(_vm.fmt(gekko.events.initial.candle.start)))]:_vm._e()],2),_c('td',[(gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.fmt(gekko.events.latest.candle.start)))]:_vm._e()],2),_c('td',[(gekko.events.initial.candle && gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.timespan(gekko.events.latest.candle.start, gekko.events.initial.candle.start)))]:_vm._e()],2)])}))]):_vm._e(),_c('h3',[_vm._v(\"Strat runners\")]),(!_vm.stratrunners.length)?_c('div',{staticClass:\"text\"},[_c('p',[_vm._v(\"You don't have any stratrunners.\")])]):_vm._e(),(_vm.stratrunners.length)?_c('table',{staticClass:\"full\"},[_vm._m(1),_c('tbody',_vm._l((_vm.stratrunners),function(gekko){return _c('tr',{staticClass:\"clickable\",on:{\"click\":function($event){_vm.$router.push({path: (\"/live-gekkos/\" + (gekko.id))})}}},[_c('td',[_vm._v(_vm._s(gekko.config.watch.exchange))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.currency))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.asset))]),_c('td',[_vm._v(_vm._s(_vm.status(gekko)))]),_c('td',[(gekko.events.initial.candle && gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.timespan(gekko.events.latest.candle.start, gekko.events.initial.candle.start)))]:_vm._e()],2),_c('td',[_vm._v(_vm._s(gekko.config.tradingAdvisor.method))]),_c('td',[(!_vm.report(gekko))?[_vm._v(\"0\")]:_vm._e(),(_vm.report(gekko))?[_vm._v(_vm._s(_vm.round(_vm.report(gekko).profit))+\" \"+_vm._s(_vm.report(gekko).currency))]:_vm._e()],2),_c('td',[_vm._v(_vm._s(gekko.logType))]),_c('td',[(!gekko.events.tradeCompleted)?[_vm._v(\"0\")]:_vm._e(),(gekko.events.tradeCompleted)?[_vm._v(_vm._s(gekko.events.tradeCompleted.length))]:_vm._e()],2)])}))]):_vm._e(),_c('div',{staticClass:\"hr\"}),_c('h2',[_vm._v(\"Start a new live Gekko\")]),_c('router-link',{staticClass:\"btn--primary\",attrs:{\"to\":\"/live-gekkos/new\"}},[_vm._v(\"Start a new live Gekko!\")])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"status\")]),_c('th',[_vm._v(\"started at\")]),_c('th',[_vm._v(\"last update\")]),_c('th',[_vm._v(\"duration\")])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"status\")]),_c('th',[_vm._v(\"duration\")]),_c('th',[_vm._v(\"strategy\")]),_c('th',[_vm._v(\"PnL\")]),_c('th',[_vm._v(\"type\")]),_c('th',[_vm._v(\"trades\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./list.vue?vue&type=template&id=55dd2514&lang=pug\"\nimport script from \"./list.vue?vue&type=script&lang=js\"\nexport * from \"./list.vue?vue&type=script&lang=js\"\nimport style0 from \"./list.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[_c('div',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.intro)}}),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Currently running imports\")]),(_vm.imports.length === 0)?_c('p',[_vm._v(\"You currently don't have any imports running.\")]):_vm._e(),(_vm.imports.length)?_c('ul',_vm._l((_vm.imports),function(_import){return _c('li',[_c('router-link',{attrs:{\"to\":\"/data/importer/import/\" + _import.id}},[_vm._v(_vm._s(_import.watch.exchange)+\":\"+_vm._s(_import.watch.currency)+\"/\"+_vm._s(_import.watch.asset))])],1)})):_vm._e(),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Start a new import\")]),_c('import-config-builder',{on:{\"config\":_vm.updateConfig}}),_c('div',{staticClass:\"hr\"}),_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.run($event)}}},[_vm._v(\"Import\")])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Market\")]),_c('market-picker',{attrs:{\"only-importable\":\"true\"},on:{\"market\":_vm.updateMarketConfig}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('range-creator',{on:{\"range\":_vm.updateRange}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./importConfigBuilder.vue?vue&type=template&id=a8c578c6&lang=pug\"\nimport script from \"./importConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./importConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./importer.vue?vue&type=template&id=3e819299&lang=pug\"\nimport script from \"./importer.vue?vue&type=script&lang=js\"\nexport * from \"./importer.vue?vue&type=script&lang=js\"\nimport style0 from \"./importer.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"contain grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\",domProps:{\"innerHTML\":_vm._s(_vm.left)}}),_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-3-6 txt--center\"},[_c('img',{attrs:{\"src\":\"/static/gekko.jpg\"}}),_c('p',[_c('em',[_vm._v(\"The most valuable commodity I know of is information.\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./home.vue?vue&type=template&id=257724d2&lang=pug\"\nimport script from \"./home.vue?vue&type=script&lang=js\"\nexport * from \"./home.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"my2\"},[(!_vm.data)?_c('div',{staticClass:\"contain\"},[_c('h1',[_vm._v(\"Unknown Gekko instance\")]),_c('p',[_vm._v(\"Gekko doesn't know what gekko this is...\")])]):_vm._e(),(_vm.data)?_c('div',[_c('h2',{staticClass:\"contain\"},[_vm._v(\"Gekko \"+_vm._s(_vm.type))]),(_vm.isArchived)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This is an archived Gekko, it is currently not running anymore.\")]):_vm._e(),(_vm.data.errorMessage)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This is Gekko crashed with the following error: \"+_vm._s(_vm.data.errorMessage))]):_vm._e(),_c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Market\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Exchange\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.exchange))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Currency\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.currency))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Asset\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.asset))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Type\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.type))])])]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Runtime\")]),(_vm.isLoading)?_c('spinner'):_vm._e(),(!_vm.isLoading)?[(_vm.initialEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Watching since\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.initialEvents.candle.start)))])]):_vm._e(),(_vm.latestEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Received data until\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.latestEvents.candle.start)))])]):_vm._e(),(_vm.latestEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Data spanning\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.humanizeDuration(_vm.moment(_vm.latestEvents.candle.start).diff(_vm.moment(_vm.initialEvents.candle.start)))))])]):_vm._e(),(_vm.isStratrunner)?[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Amount of trades\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.trades.length))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Candle size\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.config.tradingAdvisor.candleSize))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"History size\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.config.tradingAdvisor.historySize))])])]:_vm._e()]:_vm._e()],2)]),(_vm.warmupRemaining)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This stratrunner is still warming up for the next \"),_c('i',[_vm._v(_vm._s(_vm.warmupRemaining.replace(',', ' and ')))]),_vm._v(\", it will not trade until it is warmed up.\")]):_vm._e(),(_vm.isStratrunner)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Strategy\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Name\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('strong',[_vm._v(_vm._s(_vm.stratName))])])]),_vm._v(\"Parameters\"),_c('pre',[_vm._v(_vm._s(_vm.stratParams))])]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Profit report\")]),(!_vm.report)?[_c('p',[(_vm.isArchived)?_c('em',[_vm._v(\"This Gekko never executed a trade..\")]):_vm._e(),(!_vm.isArchived)?_c('em',[_vm._v(\"Waiting for at least one trade..\")]):_vm._e()])]:_vm._e(),(_vm.report)?[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Start balance\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.startBalance)))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Current balance\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.balance)))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Market\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.market / 100 * _vm.report.startPrice))+\" \"+_vm._s(_vm.config.watch.currency)+\" (\"+_vm._s(_vm.round(_vm.report.market))+\" %)\")])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Profit\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.profit))+\" \"+_vm._s(_vm.config.watch.currency)+\" (\"+_vm._s(_vm.round(_vm.report.relativeProfit))+\" %)\")])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Alpha\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.alpha))+\" \"+_vm._s(_vm.config.watch.currency))])])]:_vm._e()],2)]):_vm._e(),(_vm.isStratrunner && !_vm.watcher && !_vm.isArchived)?_c('p',[_vm._v(\"WARNING: stale gekko, not attached to a watcher, please report \"),_c('a',{attrs:{\"href\":\"https://github.com/askmike/gekko/issues\"}},[_vm._v(\"here\")]),_vm._v(\".\")]):_vm._e(),(!_vm.isArchived)?_c('p',[_c('a',{staticClass:\"w100--s my1 btn--red\",on:{\"click\":_vm.stopGekko}},[_vm._v(\"Stop Gekko\")])]):_vm._e(),(_vm.isArchived)?_c('p',[_c('a',{staticClass:\"w100--s my1 btn--red\",on:{\"click\":_vm.deleteGekko}},[_vm._v(\"Delete Gekko\")])]):_vm._e(),(_vm.isStratrunner && _vm.watcher && !_vm.isArchived)?_c('p',[_c('em',[_vm._v(\"This gekko gets market data from \"),_c('router-link',{attrs:{\"to\":\"/live-gekkos/\" + _vm.watcher.id}},[_vm._v(\"this market watcher\")])],1),_vm._v(\".\")]):_vm._e()]),(!_vm.isLoading)?[_c('h3',{staticClass:\"contain\"},[_vm._v(\"Market graph\")]),(_vm.candleFetch === \"fetching\")?_c('spinner'):_vm._e(),(_vm.candleFetch === \"fetched\")?[_c('chart',{attrs:{\"data\":_vm.chartData,\"height\":300}})]:_vm._e(),(_vm.isStratrunner)?_c('roundtrips',{attrs:{\"roundtrips\":_vm.roundtrips}}):_vm._e()]:_vm._e()],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./singleGekko.vue?vue&type=template&id=35f5b818&lang=pug\"\nimport script from \"./singleGekko.vue?vue&type=script&lang=js\"\nexport * from \"./singleGekko.vue?vue&type=script&lang=js\"\nimport style0 from \"./singleGekko.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=style&index=0&lang=css\"","// global window.CONFIG\n\nconst config = window.CONFIG.ui;\nconst endpoint = `${config.host}${config.port === 80 ? '' : `:${config.port}`}${config.path}`;\n\nlet basePath, restPath, wsPath;\n\n// rest API path\nif(config.ssl) {\n basePath = `https://${endpoint}`;\n} else {\n basePath = `http://${endpoint}`;\n}\n\nrestPath = basePath + 'api/';\n\n// ws API path\nif(config.ssl) {\n wsPath = `wss://${endpoint}api`;\n} else {\n wsPath = `ws://${endpoint}api`;\n}\n\nexport {\n wsPath,\n restPath,\n basePath\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"px1\"},[_c('h3',[_vm._v(\"Paper trader\")]),(_vm.toggle === \"closed\")?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.switchToggle($event)}}},[_vm._v(\"Change paper trader settings\")]):_vm._e(),(_vm.toggle === \"open\")?[_c('p',[_vm._v(\"Settings:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawPaperTraderParams),expression:\"rawPaperTraderParams\"}],staticClass:\"params\",domProps:{\"value\":(_vm.rawPaperTraderParams)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawPaperTraderParams=$event.target.value}}}),(_vm.rawPaperTraderParamsError)?_c('p',{staticClass:\"bg--red p1\"},[_vm._v(_vm._s(_vm.rawPaperTraderParamsError.message))]):_vm._e()]:_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./papertrader.vue?vue&type=template&id=6a733e04&lang=pug\"\nimport script from \"./papertrader.vue?vue&type=script&lang=js\"\nexport * from \"./papertrader.vue?vue&type=script&lang=js\"\nimport style0 from \"./papertrader.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { post } from '../../../tools/ajax'\n\nvar mixin = {\n data: () => {\n return {\n datasets: [],\n datasetScanstate: 'idle',\n unscannableMakets: []\n } \n },\n methods: {\n scan: function() {\n this.datasetScanstate = 'scanning';\n\n post('scansets', {}, (error, response) => {\n this.datasetScanstate = 'scanned';\n\n this.unscannableMakets = response.errors;\n\n let sets = [];\n\n response.datasets.forEach(market => {\n market.ranges.forEach((range, i) => {\n sets.push({\n exchange: market.exchange,\n currency: market.currency,\n asset: market.asset,\n from: moment.unix(range.from).utc(),\n to: moment.unix(range.to).utc(),\n id: market.exchange + market.asset + market.currency + i\n });\n });\n });\n\n // for now, filter out sets smaller than 3 hours..\n sets = sets.filter(set => {\n if(set.to.diff(set.from, 'hours') > 2)\n return true;\n });\n\n sets = sets.sort((a, b) => {\n let adiff = a.to.diff(a.from);\n let bdiff = b.to.diff(b.from);\n\n if(adiff < bdiff)\n return -1;\n\n if(adiff > bdiff)\n return 1;\n\n return 0;\n }).reverse();\n\n this.datasets = sets;\n })\n }\n }\n}\n\nexport default mixin;","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain roundtrips\"},[_c('h2',[_vm._v(\"Roundtrips\")]),(_vm.roundtrips.length)?_c('table',[_c('thead',[_vm._m(0),_vm._l((_vm.roundtrips),function(rt){return _c('tr',[_c('td',[_vm._v(_vm._s(_vm.fmt(rt.entryAt)))]),_c('td',[_vm._v(_vm._s(_vm.fmt(rt.exitAt)))]),_c('td',[_vm._v(_vm._s(_vm.diff(rt.duration)))]),_c('td',[_vm._v(_vm._s(_vm.round(rt.entryBalance)))]),_c('td',[_vm._v(_vm._s(_vm.round(rt.exitBalance)))]),(Math.sign(rt.pnl)===-1)?[_c('td',{staticClass:\"loss\"},[_vm._v(_vm._s(Math.sign(rt.pnl)*rt.pnl.toFixed(2)))]),_c('td',{staticClass:\"loss\"},[_vm._v(_vm._s(rt.profit.toFixed(2))+\"%\")])]:[_c('td',{staticClass:\"profit\"},[_vm._v(_vm._s(rt.pnl.toFixed(2)))]),_c('td',{staticClass:\"profit\"},[_vm._v(_vm._s(rt.profit.toFixed(2))+\"%\")])]],2)})],2)]):_vm._e(),(!_vm.roundtrips.length)?_c('div',[_c('p',[_vm._v(\"Not enough data to display\")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"Entry at (UTC)\")]),_c('th',[_vm._v(\"Exit at (UTC)\")]),_c('th',[_vm._v(\"Exposure\")]),_c('th',[_vm._v(\"Entry balance\")]),_c('th',[_vm._v(\"Exit balance\")]),_c('th',[_vm._v(\"P&L\")]),_c('th',[_vm._v(\"Profit\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./roundtripTable.vue?vue&type=template&id=3c32021a&lang=pug\"\nimport script from \"./roundtripTable.vue?vue&type=script&lang=js\"\nexport * from \"./roundtripTable.vue?vue&type=script&lang=js\"\nimport style0 from \"./roundtripTable.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=style&index=0&lang=css\"","import superagent from 'superagent'\nimport noCache from 'superagent-no-cache'\nimport { restPath } from './api.js'\n\nconst processResponse = next => (err, res) => {\n if(err)\n return next(err);\n\n if(!res.text)\n return next('no data');\n\n let data = JSON.parse(res.text);\n\n next(false, data);\n}\n\nexport const post = (to, data, next) => {\n superagent\n .post(restPath + to)\n .use(noCache)\n .send(data)\n .end(processResponse(next));\n}\n\nexport const get = (to, next) => {\n superagent\n .get(restPath + to)\n .use(noCache)\n .end(processResponse(next));\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=style&index=0&lang=css\""],"sourceRoot":""} \ No newline at end of file diff --git a/web/vue/dist/index.html b/web/vue/dist/index.html index f3752a967..084585781 100644 --- a/web/vue/dist/index.html +++ b/web/vue/dist/index.html @@ -1 +1 @@ -Gekko
\ No newline at end of file +Gekko
\ No newline at end of file diff --git a/web/vue/dist/vendor/furtive.min.css b/web/vue/dist/vendor/furtive.min.css index f31d67964..a0850eaab 100644 --- a/web/vue/dist/vendor/furtive.min.css +++ b/web/vue/dist/vendor/furtive.min.css @@ -52,7 +52,7 @@ label { top: 50%; right: 1em; margin-top:-4px; - background-image: url(/assets/select-arrow.png); + background-image: url('select-arrow.png'); background-repeat: no-repeat; background-size: 100%; /* These hacks make the select behind the arrow clickable in some browsers */ diff --git a/web/vue/package.json b/web/vue/package.json index ff2f9c444..66ba7a827 100644 --- a/web/vue/package.json +++ b/web/vue/package.json @@ -1,6 +1,6 @@ { "name": "gekko-vue-ui", - "version": "0.2.2", + "version": "0.2.3", "private": true, "scripts": { "serve": "vue-cli-service serve", diff --git a/web/vue/public/vendor/furtive.min.css b/web/vue/public/vendor/furtive.min.css index f31d67964..a0850eaab 100644 --- a/web/vue/public/vendor/furtive.min.css +++ b/web/vue/public/vendor/furtive.min.css @@ -52,7 +52,7 @@ label { top: 50%; right: 1em; margin-top:-4px; - background-image: url(/assets/select-arrow.png); + background-image: url('select-arrow.png'); background-repeat: no-repeat; background-size: 100%; /* These hacks make the select behind the arrow clickable in some browsers */ diff --git a/web/vue/src/components/gekko/singleGekko.vue b/web/vue/src/components/gekko/singleGekko.vue index 9a68f07c9..702de4921 100644 --- a/web/vue/src/components/gekko/singleGekko.vue +++ b/web/vue/src/components/gekko/singleGekko.vue @@ -195,7 +195,13 @@ export default { return false; } - const warmupTime = _.get(this.config, 'tradingAdvisor.candleSize') * _.get(this.config, 'tradingAdvisor.historySize'); + const historySize = _.get(this.config, 'tradingAdvisor.historySize'); + + if(!historySize) { + return false; + } + + const warmupTime = _.get(this.config, 'tradingAdvisor.candleSize') * historySize; return humanizeDuration( moment(this.initialEvents.candle.start).add(warmupTime, 'm').diff(moment()), diff --git a/web/vue/src/components/layout/home.vue b/web/vue/src/components/layout/home.vue index db3fda3f6..a507fb19e 100644 --- a/web/vue/src/components/layout/home.vue +++ b/web/vue/src/components/layout/home.vue @@ -2,7 +2,7 @@ section.contain.grd-row .grd-row-col-3-6(v-html='left') .grd-row-col-3-6.txt--center - img(src='/static/gekko.jpg') + img(src='static/gekko.jpg') p em The most valuable commodity I know of is information. @@ -20,7 +20,7 @@ and runs on nodejs. [Find out more](https://gekko.wizb.it/). -*Gekko is 100% open source and free, if you paid for this you have been scammed.* +*Gekko is 100% free (open source), if you paid for this you have been scammed.* `); diff --git a/web/vue/src/d3/chart4.js b/web/vue/src/d3/chart4.js index 7b53550b5..0ba89a21c 100644 --- a/web/vue/src/d3/chart4.js +++ b/web/vue/src/d3/chart4.js @@ -3,10 +3,18 @@ import _ from 'lodash'; export default function(_data, _trades, _height) { + const toDate = i => { + if(_.isNumber(i)) { + return moment.unix(i).utc().toDate(); + } else { + return moment.utc(i).toDate(); + } + } + const trades = _trades.map(t => { return { price: t.price, - date: moment.utc(t.date).toDate(), + date: toDate(t.date), action: t.action } }); @@ -14,7 +22,7 @@ export default function(_data, _trades, _height) { const data = _data.map(c => { return { price: c.open, - date: moment.utc(c.start).toDate() + date: toDate(c.start) } }); From 97a9b6d0e066f06bfe05e160042a094581b43acf Mon Sep 17 00:00:00 2001 From: Evgeny Date: Wed, 22 Aug 2018 07:20:11 +0200 Subject: [PATCH 03/26] Disconnect child processes, fix #2457 Sometimes child.kill() failes. Better disconnect the parent and let the child exit itself. --- core/workers/loadCandles/child.js | 6 +++++- core/workers/loadCandles/parent.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/workers/loadCandles/child.js b/core/workers/loadCandles/child.js index d1418db89..c1f705452 100644 --- a/core/workers/loadCandles/child.js +++ b/core/workers/loadCandles/child.js @@ -21,4 +21,8 @@ process.send('ready'); process.on('message', (m) => { if(m.what === 'start') start(m.config, m.candleSize, m.daterange); -}); \ No newline at end of file +}); + +process.on('disconnect', function() { + process.exit(0); +}) diff --git a/core/workers/loadCandles/parent.js b/core/workers/loadCandles/parent.js index 4d6529424..1fc3a4bf3 100644 --- a/core/workers/loadCandles/parent.js +++ b/core/workers/loadCandles/parent.js @@ -56,7 +56,7 @@ module.exports = (config, callback) => { // else we are done and have candles! done(null, m); - child.kill('SIGINT'); + this.disconnect(); }); child.on('exit', code => { From e12eea0279b2c16b2d3e308c09d77e7b24b2d95e Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Wed, 22 Aug 2018 20:21:36 +0800 Subject: [PATCH 04/26] make sure the balance & exposure always gets reset after sync --- plugins/trader/trader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/trader/trader.js b/plugins/trader/trader.js index 7d1b6ba67..6bdbc7896 100644 --- a/plugins/trader/trader.js +++ b/plugins/trader/trader.js @@ -32,7 +32,6 @@ const Trader = function(next) { } this.sync(() => { - this.setBalance(); log.info('\t', 'Portfolio:'); log.info('\t\t', this.portfolio.currency, this.brokerConfig.currency); log.info('\t\t', this.portfolio.asset, this.brokerConfig.asset); @@ -65,6 +64,7 @@ Trader.prototype.sync = function(next) { const oldPortfolio = this.portfolio; this.setPortfolio(); + this.setBalance(); if(this.sendInitialPortfolio && !_.isEqual(oldPortfolio, this.portfolio)) { this.relayPortfolioChange(); From 47f4a49882363b1ac4092b0ca9ac3d0b1fc5da54 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Fri, 24 Aug 2018 18:03:51 +0800 Subject: [PATCH 05/26] bundle current version ws dep, fix #2476 --- package-lock.json | 20 ++++++++++++++------ package.json | 3 ++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index c59fe1f87..ae91e1939 100644 --- a/package-lock.json +++ b/package-lock.json @@ -185,6 +185,16 @@ "version": "4.17.10", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" + } } } }, @@ -1769,13 +1779,11 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.0.0.tgz", + "integrity": "sha512-c2UlYcAZp1VS8AORtpq6y4RJIkJ9dQz18W32SpR/qXGfLDZ2jU4y4wKvvZwqbi7U6gxFQTeE+urMbXU/tsDy4w==", "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" + "async-limiter": "1.0.0" } }, "yallist": { diff --git a/package.json b/package.json index 73d977471..7ce99f8f0 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,8 @@ "sqlite3": "^4.0.0", "stats-lite": "^2.0.4", "tiny-promisify": "^0.1.1", - "toml": "^2.3.0" + "toml": "^2.3.0", + "ws": "^6.0.0" }, "devDependencies": { "chai": "^4.1.2", From 1f0ee10320ffb2445a7086b1ad2f12bd8587bfcf Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Sat, 11 Aug 2018 15:26:15 +0800 Subject: [PATCH 06/26] init trailing stop --- core/triggers/trailingStop.js | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 core/triggers/trailingStop.js diff --git a/core/triggers/trailingStop.js b/core/triggers/trailingStop.js new file mode 100644 index 000000000..4c09c8fed --- /dev/null +++ b/core/triggers/trailingStop.js @@ -0,0 +1,61 @@ +const EventEmitter = require('events'); + +// Note: as of now only supports trailing the price going up (after +// a buy), on trigger (when the price moves down) you should sell. + + +// @param initialPrice: initial price, preferably buy price +// @param trail: fixed offset from the price +class TrailingStop extends EventEmitter { + constructor({trail, initialPrice, onTrigger}) { + super(); + + this.trail = trail; + this.isLive = true; + this.onTrigger = onTrigger; + + this.previousPrice = initialPrice; + this.trailingPoint = initialPrice - this.trail; + } + + updatePrice(price) { + if(!this.isLive) { + return; + } + + if(price > this.previousPrice) { + this.trailingPoint = price - this.trail; + } + + this.previousPrice = price; + + if(price <= this.trailingPoint) { + this.trigger(); + } + } + + updateTrail(trail) { + if(!this.isLive) { + return; + } + + this.trail = trail; + this.trailingPoint = this.previousPrice - this.trail; + // recheck whether moving the trail triggered. + this.updatePrice(this.previousPrice); + } + + trigger() { + if(!this.isLive) { + return; + } + + this.isLive = false; + if(this.onTrigger) { + this.onTrigger(this.previousPrice); + } + this.emit('trigger', this.previousPrice); + } +} + +module.exports = TrailingStop; \ No newline at end of file From d2380164d7175a69a6c44288f9070429c9ed8736 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Sat, 11 Aug 2018 15:26:42 +0800 Subject: [PATCH 07/26] add tests for trailing stop --- test/triggers/trailingStop.js | 132 ++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 test/triggers/trailingStop.js diff --git a/test/triggers/trailingStop.js b/test/triggers/trailingStop.js new file mode 100644 index 000000000..591547988 --- /dev/null +++ b/test/triggers/trailingStop.js @@ -0,0 +1,132 @@ +const chai = require('chai'); +const expect = chai.expect; +const should = chai.should; +const sinon = require('sinon'); + +const _ = require('lodash'); +const moment = require('moment'); + +const utils = require(__dirname + '/../../core/util'); + +const dirs = utils.dirs(); +const TrailingStop = require(dirs.core + 'triggers/trailingStop'); + +describe('core/trigger/trailingStop', () => { + let cb; + + it('should instantiate a trailing stop loss trigger', () => { + expect(() => { + const ts = new TrailingStop({ + trail: 10, + initialPrice: 100, + onTrigger: () => {} + }) + }).to.not.throw() + }) + + it('should call onTrigger when the stop hits', () => { + const spy = sinon.spy(); + + const ts = new TrailingStop({ + trail: 10, + initialPrice: 100, + onTrigger: spy + }); + + ts.updatePrice(50); + + expect(spy.called).to.be.true; + }); + + it('should emit a trigger event when the stop hits', () => { + const spy = sinon.spy(); + + const ts = new TrailingStop({ + trail: 10, + initialPrice: 100 + }); + + ts.on('trigger', spy); + + ts.updatePrice(50); + + expect(spy.called).to.be.true; + }); + + it('should not trigger when the the price does not go down', () => { + const spy = sinon.spy(); + + const ts = new TrailingStop({ + trail: 10, + initialPrice: 100, + onTrigger: spy + }); + + ts.updatePrice(100); + ts.updatePrice(101); + ts.updatePrice(102); + ts.updatePrice(103); + ts.updatePrice(104); + + expect(spy.called).to.be.false; + }); + + it('should not trigger when the the price goes down but above the offset', () => { + const spy = sinon.spy(); + + const ts = new TrailingStop({ + trail: 10, + initialPrice: 100, + onTrigger: spy + }); + + ts.updatePrice(99); + ts.updatePrice(98); + ts.updatePrice(97); + ts.updatePrice(96); + ts.updatePrice(95); + ts.updatePrice(94); + ts.updatePrice(93); + ts.updatePrice(92); + ts.updatePrice(91); + + expect(spy.called).to.be.false; + }); + + it('should trigger when the the price equals the offset', () => { + const spy = sinon.spy(); + + const ts = new TrailingStop({ + trail: 10, + initialPrice: 100, + onTrigger: spy + }); + + ts.updatePrice(99); + ts.updatePrice(98); + ts.updatePrice(92); + ts.updatePrice(90); + + expect(spy.called).to.be.true; + }); + + it('should trigger when the the price goes up and down', () => { + const spy = sinon.spy(); + + const ts = new TrailingStop({ + trail: 10, + initialPrice: 100, + onTrigger: spy + }); + + ts.updatePrice(101); + ts.updatePrice(102); + ts.updatePrice(103); + ts.updatePrice(104); + ts.updatePrice(105); + ts.updatePrice(90); + + expect(spy.called).to.be.true; + }); + +}); \ No newline at end of file From 41107a6be96c3d7191c3a6df8d9587e6b1e8fe58 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Sat, 11 Aug 2018 15:32:08 +0800 Subject: [PATCH 08/26] [TEST] also check spy pre trigger --- test/triggers/trailingStop.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/triggers/trailingStop.js b/test/triggers/trailingStop.js index 591547988..2996594d2 100644 --- a/test/triggers/trailingStop.js +++ b/test/triggers/trailingStop.js @@ -105,6 +105,9 @@ describe('core/trigger/trailingStop', () => { ts.updatePrice(99); ts.updatePrice(98); ts.updatePrice(92); + + expect(spy.called).to.be.false; + ts.updatePrice(90); expect(spy.called).to.be.true; @@ -124,6 +127,9 @@ describe('core/trigger/trailingStop', () => { ts.updatePrice(103); ts.updatePrice(104); ts.updatePrice(105); + + expect(spy.called).to.be.false; + ts.updatePrice(90); expect(spy.called).to.be.true; From 48a3ab99afd62e469039c7f84ab412721751e89e Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Sat, 11 Aug 2018 15:42:34 +0800 Subject: [PATCH 09/26] [TEST] stop should only trigger once --- core/triggers/trailingStop.js | 1 + test/triggers/trailingStop.js | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/core/triggers/trailingStop.js b/core/triggers/trailingStop.js index 4c09c8fed..c8ab24228 100644 --- a/core/triggers/trailingStop.js +++ b/core/triggers/trailingStop.js @@ -6,6 +6,7 @@ const EventEmitter = require('events'); // @param initialPrice: initial price, preferably buy price // @param trail: fixed offset from the price +// @param onTrigger: fn to call when the stop triggers class TrailingStop extends EventEmitter { constructor({trail, initialPrice, onTrigger}) { super(); diff --git a/test/triggers/trailingStop.js b/test/triggers/trailingStop.js index 2996594d2..7019288ab 100644 --- a/test/triggers/trailingStop.js +++ b/test/triggers/trailingStop.js @@ -135,4 +135,22 @@ describe('core/trigger/trailingStop', () => { expect(spy.called).to.be.true; }); + it('should only trigger once', () => { + const spy = sinon.spy(); + + const ts = new TrailingStop({ + trail: 10, + initialPrice: 100, + onTrigger: spy + }); + + ts.updatePrice(90); + expect(spy.called).to.be.true; + + const spy2 = sinon.spy(); + ts.on('trigger', spy2); + ts.updatePrice(80); + expect(spy2.called).to.be.false; + }); + }); \ No newline at end of file From 90a13a6563408380f6571a444ca7a392a4d63766 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Sat, 11 Aug 2018 15:44:09 +0800 Subject: [PATCH 10/26] [TEST] check whether the trailing stop trails up --- test/triggers/trailingStop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/triggers/trailingStop.js b/test/triggers/trailingStop.js index 7019288ab..d6dc5d4f5 100644 --- a/test/triggers/trailingStop.js +++ b/test/triggers/trailingStop.js @@ -130,7 +130,7 @@ describe('core/trigger/trailingStop', () => { expect(spy.called).to.be.false; - ts.updatePrice(90); + ts.updatePrice(95); expect(spy.called).to.be.true; }); From 0ba7ba1ee3ec38a68faa2d6c96521b63545e8b61 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Sat, 11 Aug 2018 22:10:12 +0800 Subject: [PATCH 11/26] init strategy stop API --- docs/internals/events.md | 6 ++- docs/strategies/creating_a_strategy.md | 14 +++-- plugins/tradingAdvisor/baseTradingMethod.js | 57 ++++++++++++++++----- 3 files changed, 61 insertions(+), 16 deletions(-) diff --git a/docs/internals/events.md b/docs/internals/events.md index e5686f791..345ba1b8b 100644 --- a/docs/internals/events.md +++ b/docs/internals/events.md @@ -123,7 +123,11 @@ and will start signaling advice. { recommendation: [position to take, either long or short], date: [moment object of this advice], - id: [string identifying this unique trade] + id: [string identifying this unique trade], + stop: { + type: [type of stop], + // optional parameters per type of stop + } } ### tradeInitiated event diff --git a/docs/strategies/creating_a_strategy.md b/docs/strategies/creating_a_strategy.md index 285107d18..ed8a0219a 100644 --- a/docs/strategies/creating_a_strategy.md +++ b/docs/strategies/creating_a_strategy.md @@ -77,9 +77,17 @@ Most strategies need to warmup before the trading strategy can be started. For e If you find out in the check function that you want to give new advice to the trader you can use the advice function: - this.advice('short'); - // or - this.advice('long'); + this.advice({ + direction: 'long' // or short + stop: { // ignored when direction is not "long" + type: 'trailing', + trailPercentage: 5 + // or: + // trailValue: 100 + } + }); + +The stop is optional, if the direction is long and the stop is specified this will create a trail stop trigger. ### candle variable diff --git a/plugins/tradingAdvisor/baseTradingMethod.js b/plugins/tradingAdvisor/baseTradingMethod.js index b4c13a584..64159eb99 100644 --- a/plugins/tradingAdvisor/baseTradingMethod.js +++ b/plugins/tradingAdvisor/baseTradingMethod.js @@ -49,7 +49,7 @@ var Base = function(settings) { this.asyncIndicatorRunner = new AsyncIndicatorRunner(); - this._prevAdvice; + this._currentDirection; // make sure we have all methods _.each(['init', 'check'], function(fn) { @@ -141,7 +141,7 @@ Base.prototype.propogateTick = function(candle) { // whether candle start time is > startTime var isPremature = false; - if(mode === 'realtime'){ + if(mode === 'realtime') { const startTimeMinusCandleSize = startTime .clone() .subtract(this.tradingAdvisor.candleSize, "minutes"); @@ -211,21 +211,54 @@ Base.prototype.addIndicator = function(name, type, parameters) { // some indicators need a price stream, others need full candles } -Base.prototype.advice = function(newPosition) { +Base.prototype.advice = function(newDirection) { // ignore legacy soft advice - if(!newPosition) + if(!newDirection) { return; + } + + let stop; + if(_.isObject(newDirection)) { + if(!_.isString(newDirection.direction)) { + log.error('Strategy emitted unparsable advice:', newDirection); + return; + } + + if(_.isObject(newDirection.stop)) { + if(newDirection.direction !== 'long') { + log.warn( + 'Strategy adviced a stop on not long, this is not supported.', + 'As such the stop is ignored' + ); + } else { + // the stop is implemented in a trader + stop = newDirection.stop; + } + } + + newDirection = newDirection.direction; + } - // ignore if advice equals previous advice - if(newPosition === this._prevAdvice) + if(newDirection === this._currentDirection) { return; + } - this._prevAdvice = newPosition; + this._currentDirection = newDirection; - this.emit('advice', { - id: 'advice-' + (++this.propogatedAdvices), - recommendation: newPosition - }); + this.propogatedAdvices++; + + const advice = { + id: 'advice-' + this.propogatedAdvices, + recommendation: newDirection + }; + + if(stop) { + advice.stop = stop; + } + + this.emit('advice', advice); + + return this.propogatedAdvices; } Base.prototype.notify = function(content) { @@ -236,7 +269,7 @@ Base.prototype.notify = function(content) { } Base.prototype.finish = function(done) { - // Because the trading method might be async we need + // Because the strategy might be async we need // to be sure we only stop after all candles are // processed. if(!this.asyncTick) { From 11fc34f1ff55c2aee3cee110443016870d362a0b Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Sat, 11 Aug 2018 22:30:03 +0800 Subject: [PATCH 12/26] init paper trader stop implementation --- plugins/paperTrader/paperTrader.js | 63 ++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 7 deletions(-) diff --git a/plugins/paperTrader/paperTrader.js b/plugins/paperTrader/paperTrader.js index 14a05dbf6..510090c3b 100644 --- a/plugins/paperTrader/paperTrader.js +++ b/plugins/paperTrader/paperTrader.js @@ -6,6 +6,10 @@ const ENV = util.gekkoEnv(); const config = util.getConfig(); const calcConfig = config.paperTrader; const watchConfig = config.watch; +const dirs = util.dirs(); +const log = require(dirs.core + 'log'); + +const TrailingStop = require(dirs.core + 'triggers/trailingStop'); const PaperTrader = function() { _.bindAll(this); @@ -63,8 +67,7 @@ PaperTrader.prototype.setStartBalance = function() { // after every succesfull trend ride we hopefully end up // with more BTC than we started with, this function // calculates Gekko's profit in %. -PaperTrader.prototype.updatePosition = function(advice) { - let what = advice.recommendation; +PaperTrader.prototype.updatePosition = function(what) { let cost; let amount; @@ -104,12 +107,25 @@ PaperTrader.prototype.getBalance = function() { PaperTrader.prototype.processAdvice = function(advice) { let action; - if(advice.recommendation === 'short') + if(advice.recommendation === 'short') { action = 'sell'; - else if(advice.recommendation === 'long') + + // clean up potential old stop trigger + if(this.activeStopTrigger) { + delete this.activeStopTrigger; + } + + } else if(advice.recommendation === 'long') { action = 'buy'; - else - return; + + if(advice.stop) { + this.createStop(advice.stop); + } + } else { + return log.warn( + `[Papertrader] ignoring unknown advice recommendation: ${advice.recommendation}` + ); + } this.tradeId = 'trade-' + (++this.propogatedTrades); @@ -122,7 +138,7 @@ PaperTrader.prototype.processAdvice = function(advice) { date: advice.date, }); - const { cost, amount, effectivePrice } = this.updatePosition(advice); + const { cost, amount, effectivePrice } = this.updatePosition(advice.recommendation); this.relayPortfolioChange(); this.relayPortfolioValueChange(); @@ -142,6 +158,35 @@ PaperTrader.prototype.processAdvice = function(advice) { }); } +PaperTrader.prototype.createStop = function(stop) { + if(stop.type === 'trailing') { + + if(stop.trailPercentage && !stop.trailValue) { + stop.trailValue = stop.trailPercentage / 100 * this.price; + } + + if(!stop.trailValue) { + return log.warn(`[Papertrader] ignoring trailing stop without trail value`); + } + + // TODO: emit trigger created + + this.activeStopTrigger = { + adviceId: advice.id, + instance: new TrailingStop({ + initialPrice: this.price, + trail: stop.trailValue, + onTrigger: this.triggerStop + }); + } + } +} + +PaperTrader.prototype.triggerStop = function() { + // TODO: emit trigger stopped + this.updatePosition('short'); +} + PaperTrader.prototype.processCandle = function(candle, done) { this.price = candle.close; @@ -155,6 +200,10 @@ PaperTrader.prototype.processCandle = function(candle, done) { this.relayPortfolioValueChange(); } + if(this.activeStopTrigger) { + this.activeStopTrigger.updatePrice(this.price); + } + done(); } From 8de1c830a254e085c71ff6971810cc426c11452b Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Mon, 13 Aug 2018 23:03:55 +0800 Subject: [PATCH 13/26] [DOCS] add trigger events --- docs/internals/events.md | 49 ++++++++++++++++++++++++++++++++++++++-- plugins.js | 8 +++---- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/docs/internals/events.md b/docs/internals/events.md index 345ba1b8b..9b3655cda 100644 --- a/docs/internals/events.md +++ b/docs/internals/events.md @@ -12,7 +12,7 @@ Note that all events from Gekko come from a plugin (with the exception of the `c - [candle](#candle-event): Every time Gekko calculates a new one minute candle from the market. - [stratWarmupCompleted](#stratWarmupCompleted-event): When the strategy is done warming up. -- [advice](#advice-event): Every time the trading strategy is fed a new candle. +- [advice](#advice-event): Every time the trading strategy has a new trading signal. - [stratUpdate](#stratUpdate-event): Every time the strategy has processed a new strat candle. - [stratNotification](#stratNotification-event): Every time the strategy emit new strategy notification. - [tradeInitiated](#tradeInitiated-event): Every time a trading plugin (either the live trader or the paper trader) is going to start a new trade (buy or sell). @@ -25,8 +25,11 @@ trader) has NOT acted on new advice (due to unsufficiant funds or a similar reas - [portfolioValueChange](#portfolioValueChange-event): Every time value of the portfolio has changed. - [performanceReport](#performanceReport-event): Every time the profit report was updated. - [roundtrip](#roundtrip-event): Every time a new roundtrip has been completed. +- [triggerCreated](#triggerCreated-event): Every time a trader has created a new trigger. +- [triggerFired](#triggerFired-event): Every time a created trigger has fired. +- [triggerAborted](#triggerAborted-event): Every time a created trigger has been aborted due to new advice. -Beside those there are also two additional market events that are only emitted when Gekko is running in either realtime or importing mode (NOT during a backtest for performance reasons). +Beside those there are also two additional market events that are only emitted when Gekko is running in realtime mode (NOT during a backtest for performance reasons). - [marketStart](#marketStart-event): Once, when the market just started. - [marketUpdate](#marketUpdate-event): Whenever the market has fetched new raw market data. @@ -301,6 +304,48 @@ and will start signaling advice. profit: -0.2320439659276161, } +- [](#triggerCreated-event): Every time a trader has created a new trigger. +- [triggerAborted](#triggerAborted-event): Every time a created trigger has been aborted. +- [triggerFired](#triggerFired-event): Every time a created trigger has fired. + +### triggerCreated event + +- What: A summary of a created trigger. +- When: After a buy advice that includes a stop. +- Subscribe: You can subscribe to this event by registering the `processTriggerCreated` method. +- Example: + { + id: [string identifying this trigger], + at: Moment<'2017-03-25 19:41:00'>, + initialPrice: 10.21315498, + type: type: "trailingStop", + properties: { + trail: 10 + } + } + +### triggerFired event + +- What: A message indicating a created trigger has fired +- When: As soon as the trigger fired +- Subscribe: You can subscribe to this event by registering the `processTriggerFired` method. +- Example: + { + id: [string identifying this trigger], + at: Moment<'2017-03-25 19:41:00'> + } + +### triggerAborted event + +- What: A message indicating a created trigger has been aborted +- When: After an advice signal indicating a sell +- Subscribe: You can subscribe to this event by registering the `processTriggerAborted` method. +- Example: + { + id: [string identifying this trigger], + at: Moment<'2017-03-25 19:41:00'> + } + ### marketStart event - What: A moment object describing the first date of the market data. diff --git a/plugins.js b/plugins.js index bf84edf8d..cf9485266 100644 --- a/plugins.js +++ b/plugins.js @@ -41,7 +41,7 @@ var plugins = [ slug: 'tradingAdvisor', async: true, modes: ['realtime', 'backtest'], - emits: ['advice', 'stratWarmupCompleted', 'stratCandle', 'stratUpdate'], + emits: true, path: config => 'tradingAdvisor/tradingAdvisor.js', }, { @@ -128,7 +128,7 @@ var plugins = [ slug: 'trader', async: true, modes: ['realtime'], - emits: ['portfolioUpdate', 'trade'], + emits: true, path: config => 'trader/trader.js', }, { @@ -137,7 +137,7 @@ var plugins = [ slug: 'paperTrader', async: false, modes: ['realtime', 'backtest'], - emits: ['portfolioUpdate', 'trade'], + emits: true, path: config => 'paperTrader/paperTrader.js', }, { @@ -146,7 +146,7 @@ var plugins = [ slug: 'performanceAnalyzer', async: false, modes: ['realtime', 'backtest'], - emits: ['roundtrip', 'roundtripUpdate', 'performanceUpdate'], + emits: true, path: config => 'performanceAnalyzer/performanceAnalyzer.js', }, { From cf495ff531f4c253c9afd092c1d5a15315634390 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Mon, 13 Aug 2018 23:07:25 +0800 Subject: [PATCH 14/26] add trigger event subscriptions --- subscriptions.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/subscriptions.js b/subscriptions.js index 84ccb1851..6c5fc58de 100644 --- a/subscriptions.js +++ b/subscriptions.js @@ -74,6 +74,21 @@ var subscriptions = [ event: 'portfolioChange', handler: 'processPortfolioChange' }, + { + emitter: ['trader', 'paperTrader'], + event: 'triggerCreated', + handler: 'processTriggerCreated' + }, + { + emitter: ['trader', 'paperTrader'], + event: 'triggerAborted', + handler: 'processTriggerAborted' + }, + { + emitter: ['trader', 'paperTrader'], + event: 'triggerFired', + handler: 'processTriggerFired' + }, { emitter: ['trader', 'paperTrader'], event: 'portfolioValueChange', From e7da592211932720da028a775c42af340bfb4ae0 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Mon, 13 Aug 2018 23:25:48 +0800 Subject: [PATCH 15/26] implement triggerCreated & triggerAborted in paper trader --- plugins/paperTrader/paperTrader.js | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/plugins/paperTrader/paperTrader.js b/plugins/paperTrader/paperTrader.js index 510090c3b..57b58d123 100644 --- a/plugins/paperTrader/paperTrader.js +++ b/plugins/paperTrader/paperTrader.js @@ -37,6 +37,7 @@ const PaperTrader = function() { } this.propogatedTrades = 0; + this.propogatedTriggers = 0; } PaperTrader.prototype.relayPortfolioChange = function() { @@ -112,6 +113,11 @@ PaperTrader.prototype.processAdvice = function(advice) { // clean up potential old stop trigger if(this.activeStopTrigger) { + this.deferredEmit('triggerAborted', { + id: triggerId, + at: moment() + }); + delete this.activeStopTrigger; } @@ -119,7 +125,7 @@ PaperTrader.prototype.processAdvice = function(advice) { action = 'buy'; if(advice.stop) { - this.createStop(advice.stop); + this.createStop(advice); } } else { return log.warn( @@ -158,31 +164,45 @@ PaperTrader.prototype.processAdvice = function(advice) { }); } -PaperTrader.prototype.createStop = function(stop) { +PaperTrader.prototype.createStop = function(advice) { + const stop = advice.stop; + if(stop.type === 'trailing') { if(stop.trailPercentage && !stop.trailValue) { stop.trailValue = stop.trailPercentage / 100 * this.price; + log.info('Trail value specified as percentage, setting to:', stop.trailValue, this.currency); } if(!stop.trailValue) { return log.warn(`[Papertrader] ignoring trailing stop without trail value`); } - // TODO: emit trigger created + const triggerId = 'trigger-' + (++this.propogatedTriggers); + + this.deferredEmit('triggerCreated', { + id: triggerId, + at: moment(), + initialPrice: this.price, + type: 'trialingStop', + proprties: { + trail: stop.trailValue + } + }); this.activeStopTrigger = { + triggerId: this.triggerId, adviceId: advice.id, instance: new TrailingStop({ initialPrice: this.price, trail: stop.trailValue, - onTrigger: this.triggerStop + onTrigger: this.onTrigger }); } } } -PaperTrader.prototype.triggerStop = function() { +PaperTrader.prototype.onTrigger = function() { // TODO: emit trigger stopped this.updatePosition('short'); } From 25698c859a5cc915619ab82371f08b740a13de3c Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Mon, 13 Aug 2018 23:27:14 +0800 Subject: [PATCH 16/26] implement triggerFired event --- plugins/paperTrader/paperTrader.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/paperTrader/paperTrader.js b/plugins/paperTrader/paperTrader.js index 57b58d123..58013fd7b 100644 --- a/plugins/paperTrader/paperTrader.js +++ b/plugins/paperTrader/paperTrader.js @@ -114,7 +114,7 @@ PaperTrader.prototype.processAdvice = function(advice) { // clean up potential old stop trigger if(this.activeStopTrigger) { this.deferredEmit('triggerAborted', { - id: triggerId, + id: this.activeStopTrigger.id, at: moment() }); @@ -191,7 +191,7 @@ PaperTrader.prototype.createStop = function(advice) { }); this.activeStopTrigger = { - triggerId: this.triggerId, + id: triggerId, adviceId: advice.id, instance: new TrailingStop({ initialPrice: this.price, @@ -203,8 +203,12 @@ PaperTrader.prototype.createStop = function(advice) { } PaperTrader.prototype.onTrigger = function() { - // TODO: emit trigger stopped + this.deferredEmit('triggerFired', { + id: this.activeStopTrigger.id, + at: moment() + }); this.updatePosition('short'); + delete this.activeStopTrigger; } PaperTrader.prototype.processCandle = function(candle, done) { From 1b8a707729d70241e3982f4c2c6fef03dfd6078e Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Tue, 14 Aug 2018 11:57:29 +0800 Subject: [PATCH 17/26] rewire stop prop into trigger & init paper trader glue --- docs/internals/events.md | 12 ++-- docs/strategies/creating_a_strategy.md | 8 +-- plugins/paperTrader/paperTrader.js | 78 ++++++++++++++++----- plugins/tradingAdvisor/baseTradingMethod.js | 12 ++-- strategies/DEBUG_single-advice.js | 10 ++- 5 files changed, 83 insertions(+), 37 deletions(-) diff --git a/docs/internals/events.md b/docs/internals/events.md index 9b3655cda..f1972a04c 100644 --- a/docs/internals/events.md +++ b/docs/internals/events.md @@ -127,9 +127,9 @@ and will start signaling advice. recommendation: [position to take, either long or short], date: [moment object of this advice], id: [string identifying this unique trade], - stop: { - type: [type of stop], - // optional parameters per type of stop + trigger: { + type: [type of trigger, currently always "trailingStop"], + // optional parameters per type of trigger } } @@ -316,7 +316,7 @@ and will start signaling advice. - Example: { id: [string identifying this trigger], - at: Moment<'2017-03-25 19:41:00'>, + date: Moment<'2017-03-25 19:41:00'>, initialPrice: 10.21315498, type: type: "trailingStop", properties: { @@ -332,7 +332,7 @@ and will start signaling advice. - Example: { id: [string identifying this trigger], - at: Moment<'2017-03-25 19:41:00'> + date: Moment<'2017-03-25 19:41:00'> } ### triggerAborted event @@ -343,7 +343,7 @@ and will start signaling advice. - Example: { id: [string identifying this trigger], - at: Moment<'2017-03-25 19:41:00'> + date: Moment<'2017-03-25 19:41:00'> } ### marketStart event diff --git a/docs/strategies/creating_a_strategy.md b/docs/strategies/creating_a_strategy.md index ed8a0219a..635bfbeba 100644 --- a/docs/strategies/creating_a_strategy.md +++ b/docs/strategies/creating_a_strategy.md @@ -79,19 +79,19 @@ If you find out in the check function that you want to give new advice to the tr this.advice({ direction: 'long' // or short - stop: { // ignored when direction is not "long" - type: 'trailing', + trigger: { // ignored when direction is not "long" + type: 'trailingStop', trailPercentage: 5 // or: // trailValue: 100 } }); -The stop is optional, if the direction is long and the stop is specified this will create a trail stop trigger. +The trigger is optional, if the direction is long and the trigger is specified as a trailingStop this will request the trader to create a trail stop trigger. ### candle variable -The following list of candle variables will be available when writing strategies: +The following list of candle variables will be available when writing strategies, they are part of the candle object which is given to your `update` and `check` functions (it's also accessable through `this.candle`). - candle.close: the closing price of the candle - candle.high: the highest price of the candle diff --git a/plugins/paperTrader/paperTrader.js b/plugins/paperTrader/paperTrader.js index 58013fd7b..7d1945d15 100644 --- a/plugins/paperTrader/paperTrader.js +++ b/plugins/paperTrader/paperTrader.js @@ -106,6 +106,10 @@ PaperTrader.prototype.getBalance = function() { return this.portfolio.currency + this.price * this.portfolio.asset; } +PaperTrader.prototype.now = function() { + return this.candle.start.clone().add(1, 'minute'); +} + PaperTrader.prototype.processAdvice = function(advice) { let action; if(advice.recommendation === 'short') { @@ -115,7 +119,7 @@ PaperTrader.prototype.processAdvice = function(advice) { if(this.activeStopTrigger) { this.deferredEmit('triggerAborted', { id: this.activeStopTrigger.id, - at: moment() + date: advice.date }); delete this.activeStopTrigger; @@ -124,8 +128,19 @@ PaperTrader.prototype.processAdvice = function(advice) { } else if(advice.recommendation === 'long') { action = 'buy'; - if(advice.stop) { - this.createStop(advice); + if(advice.trigger) { + + // clean up potential old stop trigger + if(this.activeStopTrigger) { + this.deferredEmit('triggerAborted', { + id: this.activeStopTrigger.id, + date: advice.date + }); + + delete this.activeStopTrigger; + } + + this.createTrigger(advice); } } else { return log.warn( @@ -164,17 +179,17 @@ PaperTrader.prototype.processAdvice = function(advice) { }); } -PaperTrader.prototype.createStop = function(advice) { - const stop = advice.stop; +PaperTrader.prototype.createTrigger = function(advice) { + const trigger = advice.trigger; - if(stop.type === 'trailing') { + if(trigger.type === 'trailingStop') { - if(stop.trailPercentage && !stop.trailValue) { - stop.trailValue = stop.trailPercentage / 100 * this.price; - log.info('Trail value specified as percentage, setting to:', stop.trailValue, this.currency); + if(trigger.trailPercentage && !trigger.trailValue) { + trigger.trailValue = trigger.trailPercentage / 100 * this.price; + log.info('[PaperTrader] Trailing stop trail value specified as percentage, setting to:', trigger.trailValue, this.currency); } - if(!stop.trailValue) { + if(!trigger.trailValue) { return log.warn(`[Papertrader] ignoring trailing stop without trail value`); } @@ -182,11 +197,11 @@ PaperTrader.prototype.createStop = function(advice) { this.deferredEmit('triggerCreated', { id: triggerId, - at: moment(), + at: advice.date, initialPrice: this.price, type: 'trialingStop', proprties: { - trail: stop.trailValue + trail: trigger.trailValue } }); @@ -195,24 +210,49 @@ PaperTrader.prototype.createStop = function(advice) { adviceId: advice.id, instance: new TrailingStop({ initialPrice: this.price, - trail: stop.trailValue, - onTrigger: this.onTrigger - }); + trail: trigger.trailValue, + onTrigger: this.onStopTrigger + }) } + } else { + log.warn(`[Papertrader] Gekko does not know trigger with type "${trigger.type}".. Ignoring stop.`); } } -PaperTrader.prototype.onTrigger = function() { +PaperTrader.prototype.onStopTrigger = function() { + + const date = this.now(); + this.deferredEmit('triggerFired', { id: this.activeStopTrigger.id, - at: moment() + date + }); + + const { cost, amount, effectivePrice } = this.updatePosition('short'); + + this.relayPortfolioChange(); + this.relayPortfolioValueChange(); + + this.deferredEmit('tradeCompleted', { + id: this.tradeId, + adviceId: this.activeStopTrigger.adviceId, + action: 'sell', + cost, + amount, + price: this.price, + portfolio: this.portfolio, + balance: this.getBalance(), + date, + effectivePrice, + feePercent: this.rawFee }); - this.updatePosition('short'); + delete this.activeStopTrigger; } PaperTrader.prototype.processCandle = function(candle, done) { this.price = candle.close; + this.candle = candle; if(!this.balance) { this.setStartBalance(); @@ -225,7 +265,7 @@ PaperTrader.prototype.processCandle = function(candle, done) { } if(this.activeStopTrigger) { - this.activeStopTrigger.updatePrice(this.price); + this.activeStopTrigger.instance.updatePrice(this.price); } done(); diff --git a/plugins/tradingAdvisor/baseTradingMethod.js b/plugins/tradingAdvisor/baseTradingMethod.js index 64159eb99..a05fb0c6f 100644 --- a/plugins/tradingAdvisor/baseTradingMethod.js +++ b/plugins/tradingAdvisor/baseTradingMethod.js @@ -217,22 +217,22 @@ Base.prototype.advice = function(newDirection) { return; } - let stop; + let trigger; if(_.isObject(newDirection)) { if(!_.isString(newDirection.direction)) { log.error('Strategy emitted unparsable advice:', newDirection); return; } - if(_.isObject(newDirection.stop)) { + if(_.isObject(newDirection.trigger)) { if(newDirection.direction !== 'long') { log.warn( 'Strategy adviced a stop on not long, this is not supported.', 'As such the stop is ignored' ); } else { - // the stop is implemented in a trader - stop = newDirection.stop; + // the trigger is implemented in a trader + trigger = newDirection.trigger; } } @@ -252,8 +252,8 @@ Base.prototype.advice = function(newDirection) { recommendation: newDirection }; - if(stop) { - advice.stop = stop; + if(trigger) { + advice.trigger = trigger; } this.emit('advice', advice); diff --git a/strategies/DEBUG_single-advice.js b/strategies/DEBUG_single-advice.js index b76fe5700..93441732f 100644 --- a/strategies/DEBUG_single-advice.js +++ b/strategies/DEBUG_single-advice.js @@ -17,10 +17,16 @@ var method = { log: _.noop, check: function() { - log.info('iteration:', i); + // log.info('iteration:', i); if(settings.wait === i) { console.log('trigger advice!'); - this.advice(settings.advice); + this.advice({ + direction: settings.advice, + trigger: { + type: 'trailingStop', + trailPercentage: 5 + } + }); } i++ From 5484ebbf2df690d365abf3eecc40ba133bbd8cdd Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Tue, 14 Aug 2018 12:01:41 +0800 Subject: [PATCH 18/26] [TEST] price swings around trail --- test/triggers/trailingStop.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/triggers/trailingStop.js b/test/triggers/trailingStop.js index d6dc5d4f5..9627584c0 100644 --- a/test/triggers/trailingStop.js +++ b/test/triggers/trailingStop.js @@ -153,4 +153,29 @@ describe('core/trigger/trailingStop', () => { expect(spy2.called).to.be.false; }); + it('should not trigger when the the price swings above the trail', () => { + const spy = sinon.spy(); + + const ts = new TrailingStop({ + trail: 10, + initialPrice: 100, + onTrigger: spy + }); + + ts.updatePrice(110); + ts.updatePrice(101); + ts.updatePrice(111); + ts.updatePrice(102); + ts.updatePrice(112); + ts.updatePrice(103); + ts.updatePrice(113); + ts.updatePrice(104); + + expect(spy.called).to.be.false; + + ts.updatePrice(103); + + expect(spy.called).to.be.true; + }); + }); \ No newline at end of file From 2e0b4e2a2a39d0039f6b5b0215b4892e81d4e620 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Tue, 14 Aug 2018 12:29:29 +0800 Subject: [PATCH 19/26] [DOCS] cleanup tmp copy/paste --- docs/internals/events.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/internals/events.md b/docs/internals/events.md index f1972a04c..573e4749d 100644 --- a/docs/internals/events.md +++ b/docs/internals/events.md @@ -304,10 +304,6 @@ and will start signaling advice. profit: -0.2320439659276161, } -- [](#triggerCreated-event): Every time a trader has created a new trigger. -- [triggerAborted](#triggerAborted-event): Every time a created trigger has been aborted. -- [triggerFired](#triggerFired-event): Every time a created trigger has fired. - ### triggerCreated event - What: A summary of a created trigger. From a7038a7163b041586309545c25feff18efc13ded Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Wed, 15 Aug 2018 21:25:07 +0800 Subject: [PATCH 20/26] mv triggers into gekko broker --- core/util.js | 3 ++- {core => exchange}/triggers/trailingStop.js | 0 plugins/paperTrader/paperTrader.js | 2 +- test/triggers/trailingStop.js | 4 ++-- 4 files changed, 5 insertions(+), 4 deletions(-) rename {core => exchange}/triggers/trailingStop.js (100%) diff --git a/core/util.js b/core/util.js index 6b0ab1c77..e3b404e43 100644 --- a/core/util.js +++ b/core/util.js @@ -120,7 +120,8 @@ var util = { tools: ROOT + 'core/tools/', workers: ROOT + 'core/workers/', web: ROOT + 'web/', - config: ROOT + 'config/' + config: ROOT + 'config/', + broker: ROOT + 'exchange/' } }, inherit: function(dest, source) { diff --git a/core/triggers/trailingStop.js b/exchange/triggers/trailingStop.js similarity index 100% rename from core/triggers/trailingStop.js rename to exchange/triggers/trailingStop.js diff --git a/plugins/paperTrader/paperTrader.js b/plugins/paperTrader/paperTrader.js index 7d1945d15..0b4bac940 100644 --- a/plugins/paperTrader/paperTrader.js +++ b/plugins/paperTrader/paperTrader.js @@ -9,7 +9,7 @@ const watchConfig = config.watch; const dirs = util.dirs(); const log = require(dirs.core + 'log'); -const TrailingStop = require(dirs.core + 'triggers/trailingStop'); +const TrailingStop = require(dirs.broker + 'triggers/trailingStop'); const PaperTrader = function() { _.bindAll(this); diff --git a/test/triggers/trailingStop.js b/test/triggers/trailingStop.js index 9627584c0..f195061ea 100644 --- a/test/triggers/trailingStop.js +++ b/test/triggers/trailingStop.js @@ -9,9 +9,9 @@ const moment = require('moment'); const utils = require(__dirname + '/../../core/util'); const dirs = utils.dirs(); -const TrailingStop = require(dirs.core + 'triggers/trailingStop'); +const TrailingStop = require(dirs.broker + 'triggers/trailingStop'); -describe('core/trigger/trailingStop', () => { +describe('exchange/triggers/trailingStop', () => { let cb; it('should instantiate a trailing stop loss trigger', () => { From 7a26284ef4d60e3c6542bfc78a4d21f4cf6832c2 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Wed, 15 Aug 2018 22:32:41 +0800 Subject: [PATCH 21/26] [GB] init real trader trigger glue --- exchange/gekkoBroker.js | 12 +++ exchange/trigger.js | 84 +++++++++++++++++++++ exchange/triggers/index.js | 3 + plugins/paperTrader/paperTrader.js | 7 +- plugins/trader/trader.js | 57 +++++++++++++- plugins/tradingAdvisor/baseTradingMethod.js | 6 ++ 6 files changed, 162 insertions(+), 7 deletions(-) create mode 100644 exchange/trigger.js create mode 100644 exchange/triggers/index.js diff --git a/exchange/gekkoBroker.js b/exchange/gekkoBroker.js index 12749fe67..3e9e9fd1d 100644 --- a/exchange/gekkoBroker.js +++ b/exchange/gekkoBroker.js @@ -14,10 +14,13 @@ const errors = require('./exchangeErrors'); const Portfolio = require('./portfolioManager'); // const Market = require('./market'); const orders = require('./orders'); +const Trigger = require('./trigger'); const exchangeUtils = require('./exchangeUtils'); const bindAll = exchangeUtils.bindAll; const isValidOrder = exchangeUtils.isValidOrder; + + class Broker { constructor(config) { this.config = config; @@ -157,6 +160,15 @@ class Broker { return order; } + + createTrigger({type, onTrigger, props}) { + return new Trigger({ + api: this.api, + type, + props, + onTrigger + }); + } } module.exports = Broker; \ No newline at end of file diff --git a/exchange/trigger.js b/exchange/trigger.js new file mode 100644 index 000000000..61237babc --- /dev/null +++ b/exchange/trigger.js @@ -0,0 +1,84 @@ +// wraps around a low level trigger and feeds +// it live market data. + +const _ = require('lodash'); + +const exchangeUtils = require('./exchangeUtils'); +const bindAll = exchangeUtils.bindAll; + +const triggers = require('./triggers'); + +// @param api: a gekko broker wrapper instance +// @param type: type of trigger to wrap +// @param props: properties to feed to trigger +class Trigger { + constructor({api, type, props, onTrigger}) { + this.onTrigger = onTrigger; + this.api = api; + this.props = props; + this.type = type; + + this.isLive = true; + + // note: we stay on the safe side and trigger + // as soon as the bid goes below trail. + this.tickerProp = 'bid'; + + if(!_.has(triggers, type)) { + throw new Error('Gekko Broker does not know trigger ' + type); + } + + this.CHECK_INTERVAL = this.api.interval * 10; + + bindAll(this); + + this.api.getTicker(this.init); + } + + init(err, ticker) { + if(err) { + return console.log('[GB/trigger] failed to init ticker:', err); + } + + this.trigger = new triggers[this.type]({ + initialPrice: ticker[this.tickerProp], + onTrigger: this.propogateTrigger, + ...this.props + }) + + this.scheduleFetch(); + } + + scheduleFetch() { + setTimeout(this.fetch, this.CHECK_INTERVAL); + } + + fetch() { + if(!this.isLive) { + return; + } + this.api.getTicker(this.processTicker) + } + + processTicker(err, ticker) { + if(!this.isLive) { + return; + } + + if(err) { + return console.log('[GB/trigger] failed to fetch ticker:', err); + } + + this.price = ticker[this.tickerProp]; + + this.trigger.updatePrice(this.price); + this.scheduleFetch(); + } + + propogateTrigger() { + this.isLive = false; + this.onTrigger(); + } +} + +module.exports = Trigger; \ No newline at end of file diff --git a/exchange/triggers/index.js b/exchange/triggers/index.js new file mode 100644 index 000000000..982418284 --- /dev/null +++ b/exchange/triggers/index.js @@ -0,0 +1,3 @@ +const trailingStop = require('./trailingStop'); + +module.exports = { trailingStop }; \ No newline at end of file diff --git a/plugins/paperTrader/paperTrader.js b/plugins/paperTrader/paperTrader.js index 0b4bac940..46d1f83e3 100644 --- a/plugins/paperTrader/paperTrader.js +++ b/plugins/paperTrader/paperTrader.js @@ -182,12 +182,7 @@ PaperTrader.prototype.processAdvice = function(advice) { PaperTrader.prototype.createTrigger = function(advice) { const trigger = advice.trigger; - if(trigger.type === 'trailingStop') { - - if(trigger.trailPercentage && !trigger.trailValue) { - trigger.trailValue = trigger.trailPercentage / 100 * this.price; - log.info('[PaperTrader] Trailing stop trail value specified as percentage, setting to:', trigger.trailValue, this.currency); - } + if(trigger && trigger.type === 'trailingStop') { if(!trigger.trailValue) { return log.warn(`[Papertrader] ignoring trailing stop without trail value`); diff --git a/plugins/trader/trader.js b/plugins/trader/trader.js index 6bdbc7896..4dd79c160 100644 --- a/plugins/trader/trader.js +++ b/plugins/trader/trader.js @@ -5,7 +5,7 @@ const dirs = util.dirs(); const moment = require('moment'); const log = require(dirs.core + 'log'); -const Broker = require(dirs.gekko + '/exchange/gekkoBroker'); +const Broker = require(dirs.broker + '/gekkoBroker'); require(dirs.gekko + '/exchange/dependencyCheck'); @@ -20,6 +20,7 @@ const Trader = function(next) { } this.propogatedTrades = 0; + this.propogatedTriggers = 0; try { this.broker = new Broker(this.brokerConfig); @@ -180,6 +181,34 @@ Trader.prototype.processAdvice = function(advice) { }); } + const trigger = advice.trigger; + + if(trigger && trigger.type === 'trailingStop') { + const triggerId = 'trigger-' + (++this.propogatedTriggers); + + this.deferredEmit('triggerCreated', { + id: triggerId, + at: advice.date, + initialPrice: this.price, + type: 'trialingStop', + proprties: { + trail: trigger.trailValue + } + }); + + this.activeStopTrigger = { + id: triggerId, + adviceId: advice.id, + instance: this.broker.createTrigger({ + type: trigger.type, + onTrigger: this.onStopTrigger, + props: { + trail: trigger.trailValue, + } + }) + } + } + amount = this.portfolio.currency / this.price * 0.95; log.info( @@ -202,6 +231,16 @@ Trader.prototype.processAdvice = function(advice) { }); } + // clean up potential old stop trigger + if(this.activeStopTrigger) { + this.deferredEmit('triggerAborted', { + id: this.activeStopTrigger.id, + date: advice.date + }); + + delete this.activeStopTrigger; + } + amount = this.portfolio.asset; log.info( @@ -320,6 +359,22 @@ Trader.prototype.createOrder = function(side, amount, advice, id) { }); } +Trader.prototype.onStopTrigger = function() { + this.deferredEmit('triggerFired', { + id: this.activeStopTrigger.id, + date: moment() + }); + + const adviceMock = { + recommendation: 'short', + id: this.activeStopTrigger.adviceId + } + + delete this.activeStopTrigger; + + this.processAdvice(adviceMock); +} + Trader.prototype.cancelOrder = function(id, advice, next) { if(!this.order) { diff --git a/plugins/tradingAdvisor/baseTradingMethod.js b/plugins/tradingAdvisor/baseTradingMethod.js index a05fb0c6f..0aa0c74b9 100644 --- a/plugins/tradingAdvisor/baseTradingMethod.js +++ b/plugins/tradingAdvisor/baseTradingMethod.js @@ -231,8 +231,14 @@ Base.prototype.advice = function(newDirection) { 'As such the stop is ignored' ); } else { + // the trigger is implemented in a trader trigger = newDirection.trigger; + + if(trigger.trailPercentage && !trigger.trailValue) { + trigger.trailValue = (1 - (trigger.trailPercentage / 100)) * this.candle.close; + log.info('[StratRunner] Trailing stop trail value specified as percentage, setting to:', trigger.trailValue); + } } } From a63d927e42c8ad90e7edd0fabdfdd40874b5ba61 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Fri, 17 Aug 2018 00:17:11 +0800 Subject: [PATCH 22/26] only create trigger after init trade is completed ref correct trailValue prop --- plugins/eventLogger.js | 2 +- plugins/trader/trader.js | 59 +++++++++++---------- plugins/tradingAdvisor/baseTradingMethod.js | 2 +- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/plugins/eventLogger.js b/plugins/eventLogger.js index 4627d71a1..6e07fe0a7 100644 --- a/plugins/eventLogger.js +++ b/plugins/eventLogger.js @@ -11,7 +11,7 @@ _.each(subscriptions, sub => { } EventLogger.prototype[sub.handler] = (event, next) => { - log.debug(`\t\t\t\t[EVENT ${sub.event}]\n`, event); + log.info(`\t\t\t\t[EVENT ${sub.event}]\n`, event); if(_.isFunction(next)) next(); } diff --git a/plugins/trader/trader.js b/plugins/trader/trader.js index 4dd79c160..3c31773e6 100644 --- a/plugins/trader/trader.js +++ b/plugins/trader/trader.js @@ -181,34 +181,6 @@ Trader.prototype.processAdvice = function(advice) { }); } - const trigger = advice.trigger; - - if(trigger && trigger.type === 'trailingStop') { - const triggerId = 'trigger-' + (++this.propogatedTriggers); - - this.deferredEmit('triggerCreated', { - id: triggerId, - at: advice.date, - initialPrice: this.price, - type: 'trialingStop', - proprties: { - trail: trigger.trailValue - } - }); - - this.activeStopTrigger = { - id: triggerId, - adviceId: advice.id, - instance: this.broker.createTrigger({ - type: trigger.type, - onTrigger: this.onStopTrigger, - props: { - trail: trigger.trailValue, - } - }) - } - } - amount = this.portfolio.currency / this.price * 0.95; log.info( @@ -354,6 +326,37 @@ Trader.prototype.createOrder = function(side, amount, advice, id) { feePercent: summary.feePercent, effectivePrice }); + + if( + side === 'buy' && + advice.trigger && + advice.trigger.type === 'trailingStop' + ) { + const trigger = advice.trigger; + const triggerId = 'trigger-' + (++this.propogatedTriggers); + + this.deferredEmit('triggerCreated', { + id: triggerId, + at: advice.date, + initialPrice: this.price, + type: 'trialingStop', + properties: { + trail: trigger.trailValue + } + }); + + this.activeStopTrigger = { + id: triggerId, + adviceId: advice.id, + instance: this.broker.createTrigger({ + type: 'trailingStop', + onTrigger: this.onStopTrigger, + props: { + trail: trigger.trailValue, + } + }) + } + } }); }) }); diff --git a/plugins/tradingAdvisor/baseTradingMethod.js b/plugins/tradingAdvisor/baseTradingMethod.js index 0aa0c74b9..96efa4097 100644 --- a/plugins/tradingAdvisor/baseTradingMethod.js +++ b/plugins/tradingAdvisor/baseTradingMethod.js @@ -236,7 +236,7 @@ Base.prototype.advice = function(newDirection) { trigger = newDirection.trigger; if(trigger.trailPercentage && !trigger.trailValue) { - trigger.trailValue = (1 - (trigger.trailPercentage / 100)) * this.candle.close; + trigger.trailValue = trigger.trailPercentage / 100 * this.candle.close; log.info('[StratRunner] Trailing stop trail value specified as percentage, setting to:', trigger.trailValue); } } From 331ceeb1f7d3ea47edf5bd7ffeedcae6057a6878 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Fri, 17 Aug 2018 13:09:18 +0800 Subject: [PATCH 23/26] [GB] rewire live trigger to init exec price tweak debug trail log typo [GB] tmp debug log --- docs/internals/events.md | 2 +- exchange/gekkoBroker.js | 4 ++-- exchange/trigger.js | 27 ++++++++++----------------- exchange/triggers/trailingStop.js | 4 ++++ plugins/paperTrader/paperTrader.js | 4 ++-- plugins/trader/trader.js | 15 ++++++++++++--- strategies/DEBUG_single-advice.js | 2 +- 7 files changed, 32 insertions(+), 26 deletions(-) diff --git a/docs/internals/events.md b/docs/internals/events.md index 573e4749d..fe627e2ee 100644 --- a/docs/internals/events.md +++ b/docs/internals/events.md @@ -313,9 +313,9 @@ and will start signaling advice. { id: [string identifying this trigger], date: Moment<'2017-03-25 19:41:00'>, - initialPrice: 10.21315498, type: type: "trailingStop", properties: { + initialPrice: 100, trail: 10 } } diff --git a/exchange/gekkoBroker.js b/exchange/gekkoBroker.js index 3e9e9fd1d..8efbb66dc 100644 --- a/exchange/gekkoBroker.js +++ b/exchange/gekkoBroker.js @@ -165,8 +165,8 @@ class Broker { return new Trigger({ api: this.api, type, - props, - onTrigger + onTrigger, + props }); } } diff --git a/exchange/trigger.js b/exchange/trigger.js index 61237babc..abf3daef5 100644 --- a/exchange/trigger.js +++ b/exchange/trigger.js @@ -15,8 +15,6 @@ class Trigger { constructor({api, type, props, onTrigger}) { this.onTrigger = onTrigger; this.api = api; - this.props = props; - this.type = type; this.isLive = true; @@ -31,26 +29,16 @@ class Trigger { this.CHECK_INTERVAL = this.api.interval * 10; bindAll(this); - - this.api.getTicker(this.init); - } - - init(err, ticker) { - if(err) { - return console.log('[GB/trigger] failed to init ticker:', err); - } - - this.trigger = new triggers[this.type]({ - initialPrice: ticker[this.tickerProp], + this.trigger = new triggers[type]({ onTrigger: this.propogateTrigger, - ...this.props + ...props }) this.scheduleFetch(); } scheduleFetch() { - setTimeout(this.fetch, this.CHECK_INTERVAL); + this.timout = setTimeout(this.fetch, this.CHECK_INTERVAL); } fetch() { @@ -75,9 +63,14 @@ class Trigger { this.scheduleFetch(); } - propogateTrigger() { + cancel() { + this.live = false; + clearTimeout(this.timout); + } + + propogateTrigger(payload) { this.isLive = false; - this.onTrigger(); + this.onTrigger(payload); } } diff --git a/exchange/triggers/trailingStop.js b/exchange/triggers/trailingStop.js index c8ab24228..c4ab6d369 100644 --- a/exchange/triggers/trailingStop.js +++ b/exchange/triggers/trailingStop.js @@ -17,6 +17,10 @@ class TrailingStop extends EventEmitter { this.previousPrice = initialPrice; this.trailingPoint = initialPrice - this.trail; + + setInterval(() => { + console.log(new Date, 'trail:', this.trailingPoint, 'price:', this.previousPrice); + }, 1000 * 60 * 2) } updatePrice(price) { diff --git a/plugins/paperTrader/paperTrader.js b/plugins/paperTrader/paperTrader.js index 46d1f83e3..5998417ef 100644 --- a/plugins/paperTrader/paperTrader.js +++ b/plugins/paperTrader/paperTrader.js @@ -193,10 +193,10 @@ PaperTrader.prototype.createTrigger = function(advice) { this.deferredEmit('triggerCreated', { id: triggerId, at: advice.date, - initialPrice: this.price, type: 'trialingStop', proprties: { - trail: trigger.trailValue + trail: trigger.trailValue, + initialPrice: this.price, } }); diff --git a/plugins/trader/trader.js b/plugins/trader/trader.js index 3c31773e6..9f7620041 100644 --- a/plugins/trader/trader.js +++ b/plugins/trader/trader.js @@ -210,6 +210,8 @@ Trader.prototype.processAdvice = function(advice) { date: advice.date }); + this.activeStopTrigger.instance.cancel(); + delete this.activeStopTrigger; } @@ -338,13 +340,17 @@ Trader.prototype.createOrder = function(side, amount, advice, id) { this.deferredEmit('triggerCreated', { id: triggerId, at: advice.date, - initialPrice: this.price, type: 'trialingStop', properties: { - trail: trigger.trailValue + trail: trigger.trailValue, + initialPrice: summary.price, } }); + log.info(`Creating trailingStop trigger "${triggerId}"! Properties:`); + log.info(`\tInitial price: ${summary.price}`); + log.info(`\tTrail of: ${trigger.trailValue}`); + this.activeStopTrigger = { id: triggerId, adviceId: advice.id, @@ -353,6 +359,7 @@ Trader.prototype.createOrder = function(side, amount, advice, id) { onTrigger: this.onStopTrigger, props: { trail: trigger.trailValue, + initialPrice: summary.price, } }) } @@ -362,7 +369,9 @@ Trader.prototype.createOrder = function(side, amount, advice, id) { }); } -Trader.prototype.onStopTrigger = function() { +Trader.prototype.onStopTrigger = function(price) { + log.info(`TrailingStop trigger "${triggerId}" fired! Observed price was ${price}`); + this.deferredEmit('triggerFired', { id: this.activeStopTrigger.id, date: moment() diff --git a/strategies/DEBUG_single-advice.js b/strategies/DEBUG_single-advice.js index 93441732f..5a8ceb55c 100644 --- a/strategies/DEBUG_single-advice.js +++ b/strategies/DEBUG_single-advice.js @@ -24,7 +24,7 @@ var method = { direction: settings.advice, trigger: { type: 'trailingStop', - trailPercentage: 5 + trailPercentage: 1 } }); } From a418c4a9d8eb24ae284832bae630f7cd99155d60 Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Mon, 27 Aug 2018 17:38:40 +0800 Subject: [PATCH 24/26] make sure we only move the trail up --- exchange/trigger.js | 5 ++++- exchange/triggers/trailingStop.js | 6 +----- plugins/trader/trader.js | 2 +- strategies/DEBUG_single-advice.js | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/exchange/trigger.js b/exchange/trigger.js index abf3daef5..2e72a7644 100644 --- a/exchange/trigger.js +++ b/exchange/trigger.js @@ -64,11 +64,14 @@ class Trigger { } cancel() { - this.live = false; + this.isLive = false; clearTimeout(this.timout); } propogateTrigger(payload) { + if(!this.isLive) { + return; + } this.isLive = false; this.onTrigger(payload); } diff --git a/exchange/triggers/trailingStop.js b/exchange/triggers/trailingStop.js index c4ab6d369..89057d968 100644 --- a/exchange/triggers/trailingStop.js +++ b/exchange/triggers/trailingStop.js @@ -17,10 +17,6 @@ class TrailingStop extends EventEmitter { this.previousPrice = initialPrice; this.trailingPoint = initialPrice - this.trail; - - setInterval(() => { - console.log(new Date, 'trail:', this.trailingPoint, 'price:', this.previousPrice); - }, 1000 * 60 * 2) } updatePrice(price) { @@ -28,7 +24,7 @@ class TrailingStop extends EventEmitter { return; } - if(price > this.previousPrice) { + if(price > this.trailingPoint + this.trail) { this.trailingPoint = price - this.trail; } diff --git a/plugins/trader/trader.js b/plugins/trader/trader.js index 9f7620041..2e21443da 100644 --- a/plugins/trader/trader.js +++ b/plugins/trader/trader.js @@ -370,7 +370,7 @@ Trader.prototype.createOrder = function(side, amount, advice, id) { } Trader.prototype.onStopTrigger = function(price) { - log.info(`TrailingStop trigger "${triggerId}" fired! Observed price was ${price}`); + log.info(`TrailingStop trigger "${this.activeStopTrigger.id}" fired! Observed price was ${price}`); this.deferredEmit('triggerFired', { id: this.activeStopTrigger.id, diff --git a/strategies/DEBUG_single-advice.js b/strategies/DEBUG_single-advice.js index 5a8ceb55c..fbc6eb230 100644 --- a/strategies/DEBUG_single-advice.js +++ b/strategies/DEBUG_single-advice.js @@ -24,7 +24,7 @@ var method = { direction: settings.advice, trigger: { type: 'trailingStop', - trailPercentage: 1 + trailPercentage: 0.5 } }); } From 5a798fb95bc9ae2dd84761c40966d77d83828320 Mon Sep 17 00:00:00 2001 From: eusorov Date: Thu, 23 Aug 2018 19:16:14 +0200 Subject: [PATCH 25/26] when empty data returns, loader never finishes and never get killed --- core/tools/candleLoader.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/tools/candleLoader.js b/core/tools/candleLoader.js index 9311a1072..f39bf6273 100644 --- a/core/tools/candleLoader.js +++ b/core/tools/candleLoader.js @@ -78,7 +78,7 @@ const handleCandles = (err, data) => { util.die('Encountered an error..') } - if(_.size(data) && _.last(data).start >= toUnix) + if(_.size(data) && _.last(data).start >= toUnix || iterator.from.unix() >= toUnix) DONE = true; batcher.write(data); @@ -97,4 +97,4 @@ const handleCandles = (err, data) => { const handleBatchedCandles = candle => { result.push(candle); -} \ No newline at end of file +} From f27b3ce4cba39df9895cb611631ecce0a9c3555e Mon Sep 17 00:00:00 2001 From: Mike van Rossum Date: Mon, 27 Aug 2018 20:09:24 +0800 Subject: [PATCH 26/26] v0.6.6 --- package-lock.json | 2 +- package.json | 2 +- web/vue/dist/app.9aa8dda3.js | 2 -- web/vue/dist/app.f8381cdf.js | 2 ++ web/vue/dist/{app.9aa8dda3.js.map => app.f8381cdf.js.map} | 2 +- web/vue/dist/index.html | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 web/vue/dist/app.9aa8dda3.js create mode 100644 web/vue/dist/app.f8381cdf.js rename web/vue/dist/{app.9aa8dda3.js.map => app.f8381cdf.js.map} (99%) diff --git a/package-lock.json b/package-lock.json index ae91e1939..4f2f3e0ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "gekko", - "version": "0.6.5", + "version": "0.6.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7ce99f8f0..be6ccadd4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gekko", - "version": "0.6.5", + "version": "0.6.6", "description": "A bitcoin trading bot for auto trading at various exchanges", "keywords": [ "trading", diff --git a/web/vue/dist/app.9aa8dda3.js b/web/vue/dist/app.9aa8dda3.js deleted file mode 100644 index 6c8aebd79..000000000 --- a/web/vue/dist/app.9aa8dda3.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(t){function e(e){for(var n,s,o=e[0],c=e[1],u=e[2],d=0,f=[];d0?"profit":"loss"}}},s=i,o=(a("tr8z"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},"0zrD":function(t,e,a){"use strict";var n=a("jf14"),r=a.n(n);r.a},26:function(t,e,a){t.exports=a("Vtdi")},"2A8w":function(t,e,a){"use strict";var n=a("TDb6"),r=a.n(n);r.a},"2Yda":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[a("h3",[t._v("Start a new gekko")]),a("gekko-config-builder",{on:{config:t.updateConfig}}),a("div",{staticClass:"hr"}),t.config.valid?a("div",{staticClass:"txt--center"},[t.pendingStratrunner?t._e():a("a",{staticClass:"w100--s my1 btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.start(e)}}},[t._v("Start")]),t.pendingStratrunner?a("spinner"):t._e()],1):t._e()],1)},r=[],i=(a("Z2Ku"),a("L9s1"),a("dRSK"),a("LvDl")),s=a.n(i),o=a("Kw5r"),c=a("wiDz"),u=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("h3",[t._v("Market")]),a("market-picker",{attrs:{"only-tradable":t.isTradebot},on:{market:t.updateMarketConfig}})],1),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("type-picker",{on:{type:t.updateType}})],1)]),"market watcher"!==t.type?[a("div",{staticClass:"hr"}),a("strat-picker",{staticClass:"contain my2",on:{stratConfig:t.updateStrat}}),"paper trader"===t.type?a("div",{staticClass:"hr"}):t._e(),"paper trader"===t.type?a("paper-trader",{on:{settings:t.updatePaperTrader}}):t._e()]:t._e()],2)},l=[],d=(a("91GP"),a("6BxS")),f=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h3",[t._v("Type")]),[a("label",{staticClass:"wrapper",attrs:{for:"type"}},[t._v("What do you want to do with gekko?")]),a("form",{staticClass:"radio grd"},t._l(t.types,function(e,n){return a("div",{staticClass:"grd-row m1"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedTypeIndex,expression:"selectedTypeIndex"}],staticClass:"grd-row-col-1-6",attrs:{type:"radio"},domProps:{value:n,checked:t._q(t.selectedTypeIndex,n)},on:{change:function(e){t.selectedTypeIndex=n}}}),a("label",{staticClass:"grd-row-col-5-6",attrs:{for:n}},[t._v(t._s(e))])])}))]],2)},h=[],m={created:function(){this.emitType()},data:function(){return{types:["paper trader","market watcher","tradebot"],selectedTypeIndex:0}},methods:{emitType:function(){this.$emit("type",this.type)}},watch:{type:function(){this.emitType()}},computed:{type:function(){return this.types[this.selectedTypeIndex]}}},v=m,p=(a("wVPO"),a("KHd+")),g=Object(p["a"])(v,f,h,!1,null,null,null),_=g.exports,k=a("6Wkr"),y=a("rloZ"),w={created:function(){var t=this;Object(c["a"])("configPart/candleWriter",function(e,a){t.candleWriter=toml.parse(a.part)}),Object(c["a"])("configPart/performanceAnalyzer",function(e,a){t.performanceAnalyzer=toml.parse(a.part),t.performanceAnalyzer.enabled=!0})},data:function(){return{market:{},range:{},type:"",strat:{},paperTrader:{},candleWriter:{},performanceAnalyzer:{}}},components:{marketPicker:d["a"],typePicker:_,stratPicker:k["a"],paperTrader:y["a"]},computed:{isTradebot:function(){return"tradebot"===this.type},config:function(){var t={};return Object.assign(t,this.market,this.strat,{paperTrader:this.paperTrader},{candleWriter:this.candleWriter},{type:this.type},{performanceAnalyzer:this.performanceAnalyzer}),this.isTradebot&&(delete t.paperTrader,t.trader={enabled:!0}),t.valid=this.validConfig(t),t}},methods:{validConfig:function(t){if("market watcher"===t.type)return!0;if(!t.tradingAdvisor)return!1;if(s.a.isNaN(t.tradingAdvisor.candleSize))return!1;if(0==t.tradingAdvisor.candleSize)return!1;var e=t.tradingAdvisor.method;return!s.a.isEmpty(t[e])},updateMarketConfig:function(t){this.market=t,this.emitConfig()},updateType:function(t){this.type=t,this.emitConfig()},updateStrat:function(t){this.strat=t,this.emitConfig()},updatePaperTrader:function(t){this.paperTrader=t,this.paperTrader.enabled=!0,this.emitConfig()},emitConfig:function(){this.$emit("config",this.config)}}},b=w,C=(a("YEdZ"),Object(p["a"])(b,u,l,!1,null,null,null)),x=C.exports,S=a("MB/c"),T={components:{gekkoConfigBuilder:x,spinner:S["a"]},data:function(){return{pendingStratrunner:!1,config:{}}},computed:{gekkos:function(){return this.$store.state.gekkos},watchConfig:function(){var t=s.a.pick(this.config,"watch","candleWriter"),e=o["a"].util.extend({},t);return e.type="market watcher",e.mode="realtime",e},requiredHistoricalData:function(){if(this.config.tradingAdvisor&&this.config.valid){var t=this.config.tradingAdvisor;return t.candleSize*t.historySize}},gekkoConfig:function(){var t;if(this.existingMarketWatcher){if(this.requiredHistoricalData){var e=moment().utc().startOf("minute").subtract(this.requiredHistoricalData,"minutes").unix(),a=moment.utc(this.existingMarketWatcher.events.initial.candle.start).unix();t=moment.unix(Math.max(e,a)).utc().format()}else t=moment().utc().startOf("minute").format();var n=o["a"].util.extend({market:{type:"leech",from:t},mode:"realtime"},this.config);return n}},existingMarketWatcher:function(){var t=o["a"].util.extend({},this.watchConfig.watch);return s.a.find(this.gekkos,{config:{watch:t}})},exchange:function(){return this.watchConfig.watch.exchange},existingTradebot:function(){var t=this;return s.a.find(this.gekkos,function(e){return"tradebot"===e.logType&&e.config.watch.exchange===t.exchange})},availableApiKeys:function(){return this.$store.state.apiKeys}},watch:{existingMarketWatcher:function(t,e){var a=this;if(this.pendingStratrunner){var n=this.existingMarketWatcher;n.events.latest.candle&&(this.pendingStratrunner=!1,this.startGekko(function(t,e){a.$router.push({path:"/live-gekkos/".concat(e.id)})}))}}},methods:{updateConfig:function(t){this.config=t},start:function(){var t=this;if("tradebot"===this.config.type){if(this.existingTradebot){var e="You already have a tradebot running on this exchange";return e+=", you can only run one tradebot per exchange.",alert(e)}if(!this.availableApiKeys.includes(this.exchange))return alert("Please first configure API keys for this exchange in the config page.")}"market watcher"===this.config.type?this.existingMarketWatcher?(alert("This market is already being watched, redirecting you now..."),this.$router.push({path:"/live-gekkos/".concat(this.existingMarketWatcher.id)})):this.startWatcher(function(e,a){t.$router.push({path:"/live-gekkos/".concat(a.id)})}):this.existingMarketWatcher?this.startGekko(this.routeToGekko):this.startWatcher(function(e,a){t.pendingStratrunner=a.id})},routeToGekko:function(t,e){if(t||e.error)return console.error(t,e.error);this.$router.push({path:"/live-gekkos/".concat(e.id)})},startWatcher:function(t){Object(c["b"])("startGekko",this.watchConfig,t)},startGekko:function(t){Object(c["b"])("startGekko",this.gekkoConfig,t)}}},E=T,P=(a("2A8w"),Object(p["a"])(E,n,r,!1,null,null,null));e["a"]=P.exports},"2rY9":function(t,e,a){"use strict";var n=a("SWS5"),r=a.n(n);r.a},"5/bm":function(t,e,a){},"5shn":function(t,e,a){"use strict";var n=a("DlQD"),r=new n.Renderer;r.link=function(t,e,a){var n,r,i;return n=/^https?:\/\/.+$/.test(t),r=n||"newWindow"===e,i='"+a+""},n.setOptions({renderer:r}),e["a"]=n},"6BxS":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("div",{staticClass:"mx1"},[a("label",{staticClass:"wrapper",attrs:{for:"exchange"}},[t._v("Exchange:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.exchange,expression:"exchange"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.exchange=e.target.multiple?a:a[0]}}},t._l(t.exchanges,function(e,n){return a("option",[t._v(t._s(n))])}))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("label",{attrs:{for:"currency"}},[t._v("Currency:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.currency,expression:"currency"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.currency=e.target.multiple?a:a[0]}}},t._l(t.currencies,function(e){return a("option",[t._v(t._s(e))])}))])]),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("label",{attrs:{for:"asset"}},[t._v("Asset:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.asset,expression:"asset"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.asset=e.target.multiple?a:a[0]}}},t._l(t.assets,function(e){return a("option",[t._v(t._s(e))])}))])])])])},r=[],i=(a("rGqo"),a("yt8O"),a("f3/d"),a("91GP"),a("LvDl")),s=a.n(i),o=(a("YIjs"),a("FhOJ"),a("wiDz"),{props:["onlyTradable","onlyImportable"],data:function(){return{exchange:"poloniex",currency:"USDT",asset:"BTC"}},created:function(){this.emitConfig()},computed:{exchanges:function(){var t=Object.assign({},this.$store.state.exchanges);return!s.a.isEmpty(t)&&(this.onlyTradable&&s.a.each(t,function(e,a){e.tradable||delete t[a]}),this.onlyImportable&&s.a.each(t,function(e,a){e.importable||delete t[a]}),t)},markets:function(){return this.exchanges?this.exchanges[this.exchange]:null},assets:function(){return this.exchanges?this.exchanges[this.exchange].markets[this.currency]:null},currencies:function(){return this.exchanges?s.a.keys(this.exchanges[this.exchange].markets):null},watchConfig:function(){return{watch:{exchange:this.exchange,currency:this.currency,asset:this.asset}}}},watch:{currency:function(){this.emitConfig()},asset:function(){this.emitConfig()},market:function(){this.emitConfig()},exchanges:function(){this.emitConfig()},exchange:function(){this.emitConfig()}},methods:{emitConfig:function(){this.$emit("market",this.watchConfig)}}}),c=o,u=a("KHd+"),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},"6Wkr":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 px1"},[a("h3",[t._v("Strategy")]),a("div",[a("label",{staticClass:"wrapper",attrs:{for:"strat"}},[t._v("Strategy:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.strategy,expression:"strategy"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.strategy=e.target.multiple?a:a[0]}}},t._l(t.strategies,function(e){return a("option",[t._v(t._s(e.name))])}))])]),a("div",[a("label",{attrs:{for:"candleSize"}},[t._v("Candle Size")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.rawCandleSize,expression:"rawCandleSize"}],domProps:{value:t.rawCandleSize},on:{input:function(e){e.target.composing||(t.rawCandleSize=e.target.value)}}})]),a("div",{staticClass:"grd-row-col-3-6 align"},[a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.candleSizeUnit,expression:"candleSizeUnit"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.candleSizeUnit=e.target.multiple?a:a[0]}}},[a("option",[t._v("minutes")]),a("option",[t._v("hours")]),a("option",[t._v("days")])])])])])]),a("div",[a("label",{attrs:{for:"historySize"}},[t._v("Warmup period (in "+t._s(t.rawCandleSize)+" "+t._s(t.singularCandleSizeUnit)+" candles):")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.historySize,expression:"historySize"}],domProps:{value:t.historySize},on:{input:function(e){e.target.composing||(t.historySize=e.target.value)}}}),a("em",{staticClass:"label-like"},[t._v("(will use "+t._s(t.humanizeDuration(t.candleSize*t.historySize*1e3*60))+" of data as history)")])])]),a("div",{staticClass:"grd-row-col-3-6 px1"},[a("div",[a("h3",[t._v("Parameters")]),a("p",[t._v(t._s(t.strategy)+" Parameters:")]),a("textarea",{directives:[{name:"model",rawName:"v-model",value:t.rawStratParams,expression:"rawStratParams"}],staticClass:"params",domProps:{value:t.rawStratParams},on:{input:function(e){e.target.composing||(t.rawStratParams=e.target.value)}}}),t.rawStratParamsError?a("p",{staticClass:"bg--red p1"},[t._v(t._s(t.rawStratParamsError.message))]):t._e()])])])])},r=[],i=(a("dRSK"),a("LvDl")),s=a.n(i),o=a("wiDz"),c={data:function(){return{strategies:[],candleSizeUnit:"hours",rawCandleSize:1,strategy:"MACD",historySize:10,rawStratParams:"",rawStratParamsError:!1,emptyStrat:!1,stratParams:{}}},created:function(){var t=this;Object(o["a"])("strategies",function(e,a){t.strategies=a,s.a.each(t.strategies,function(t){t.empty=""===t.params}),t.rawStratParams=s.a.find(t.strategies,{name:t.strategy}).params,t.emptyStrat=s.a.find(t.strategies,{name:t.strategy}).empty,t.emitConfig()})},watch:{strategy:function(t){t=s.a.find(this.strategies,{name:t}),this.rawStratParams=t.params,this.emptyStrat=t.empty,this.emitConfig()},candleSize:function(){this.emitConfig()},historySize:function(){this.emitConfig()},rawStratParams:function(){this.emitConfig()}},computed:{candleSize:function(){return"minutes"===this.candleSizeUnit?this.rawCandleSize:"hours"===this.candleSizeUnit?60*this.rawCandleSize:"days"===this.candleSizeUnit?60*this.rawCandleSize*24:void 0},singularCandleSizeUnit:function(){return this.candleSizeUnit.slice(0,-1)},config:function(){var t={tradingAdvisor:{enabled:!0,method:this.strategy,candleSize:+this.candleSize,historySize:+this.historySize}};return this.emptyStrat?t[this.strategy]={__empty:!0}:t[this.strategy]=this.stratParams,t}},methods:{humanizeDuration:function(t){return window.humanizeDuration(t)},emitConfig:function(){this.parseParams(),this.$emit("stratConfig",this.config)},parseParams:function(){try{this.stratParams=toml.parse(this.rawStratParams),this.rawStratParamsError=!1}catch(t){this.rawStratParamsError=t,this.stratParams={}}}}},u=c,l=(a("tr8f"),a("KHd+")),d=Object(l["a"])(u,n,r,!1,null,null,null);e["a"]=d.exports},"7LpK":function(t,e,a){},"8KAT":function(t,e,a){},"9RND":function(t){t.exports={name:"gekko",version:"0.6.5",description:"A bitcoin trading bot for auto trading at various exchanges",keywords:["trading","bot","bitcoin","TA","finance"],scripts:{test:"./node_modules/.bin/mocha test/*.js --recursive test -u tdd --reporter spec",start:"node ./gekko --config config.js --ui"},author:"Mike van Rossum ",dependencies:{"@slack/client":"^3.10.0",async:"2.1.2","bitfinex-api-node":"^1.2.1","co-fs":"^1.2.0",commander:"^2.13.0",gekko:"0.0.9","humanize-duration":"^3.10.0",koa:"^1.2.0","koa-bodyparser":"^2.2.0","koa-cors":"0.0.16","koa-logger":"^1.3.0","koa-router":"^5.4.0","koa-static":"^2.0.0",lodash:"2.x",moment:"^2.20.1",opn:"^4.0.2","promisify-node":"^0.5.0","prompt-lite":"0.1.1",pushbullet:"1.4.3",relieve:"^2.1.3",retry:"^0.10.1",semver:"5.4.1",sqlite3:"^4.0.0","stats-lite":"^2.0.4","tiny-promisify":"^0.1.1",toml:"^2.3.0",twitter:"^1.7.1"},devDependencies:{chai:"^4.1.2",mocha:"^5.0.0",proxyquire:"^1.7.10",request:"^2.83.0","request-promise":"^4.2.2",sinon:"^4.2.0"},engines:{node:">=8.11.2"},license:"MIT",repository:{type:"git",url:"https://github.com/askmike/gekko.git"}}},CyGp:function(t,e,a){"use strict";var n=a("jTvs"),r=a.n(n);r.a},EAJ1:function(t,e,a){},EDI0:function(t,e,a){},EfWa:function(t,e,a){},FhOJ:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h3",[t._v("Daterange")]),a("div",[a("label",{attrs:{for:"from"}},[t._v("From")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.from,expression:"from"}],domProps:{value:t.from},on:{input:function(e){e.target.composing||(t.from=e.target.value)}}})]),a("div",[a("label",{attrs:{for:"to"}},[t._v("To")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.to,expression:"to"}],domProps:{value:t.to},on:{input:function(e){e.target.composing||(t.to=e.target.value)}}})])])},r=[],i=(a("LvDl"),a("wiDz"),{data:function(){return{from:"",to:""}},created:function(){var t=moment().startOf("minute"),e=t.clone().subtract(3,"months");this.to=this.fmt(t),this.from=this.fmt(e),this.emitRange()},methods:{fmtTs:function(t){return moment.unix(t).utc()},fmt:function(t){return t.utc().format("YYYY-MM-DD HH:mm")},emitRange:function(){this.$emit("range",{from:this.fmtTs(this.from),to:this.fmtTs(this.to)})},emitManualEntry:function(){if(this.from.length<"4"||this.from.length<"4")return this.$emit("range",{});var t=moment.utc(this.from),e=moment.utc(this.to);t.isValid()&&e.isValid()?this.$emit("range",{from:this.fmt(t),to:this.fmt(e)}):this.$emit("range",{})}},watch:{from:function(){this.emitManualEntry()},to:function(){this.emitManualEntry()},config:function(){this.scanned=!1},tab:function(){this.scanned=!1,this.$emit("range",{})},selectedRangeIndex:function(){var t=this.ranges[this.selectedRangeIndex];t&&this.emitRange(t)}}}),s=i,o=(a("TPp/"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},"H+ir":function(t,e,a){"use strict";var n=a("5/bm"),r=a.n(n);r.a},Kd0R:function(t,e,a){},"MB/c":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"spinner"},[a("div",{staticClass:"rect1"}),a("div",{staticClass:"rect2"}),a("div",{staticClass:"rect3"}),a("div",{staticClass:"rect4"})])}],i={},s=i,o=(a("q431"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},Pf3K:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"app"}},[a("top"),a("div",{staticClass:"fill"},[a("router-view",{staticClass:"view"})],1),a("bottom"),a("modal")],1)},r=[],i=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("div",{attrs:{id:"top"}}),t._m(0),a("nav",{staticClass:"bg--light-gray"},[a("div",{staticClass:"menu contain"},[a("router-link",{staticClass:"py1",attrs:{to:"/home"}},[t._v("Home")]),a("router-link",{staticClass:"py1",attrs:{to:"/live-gekkos"}},[t._v("Live Gekkos")]),a("router-link",{staticClass:"py1",attrs:{to:"/backtest"}},[t._v("Backtest")]),a("router-link",{staticClass:"py1",attrs:{to:"/data"}},[t._v("Local data")]),a("router-link",{staticClass:"py1",attrs:{to:"/config"}},[t._v("Config")]),a("a",{staticClass:"py1",attrs:{href:"https://gekko.wizb.it/docs/introduction/about_gekko.html",target:"_blank"}},[t._v("Documentation")])],1)])])},s=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("header",{staticClass:"bg--off-white grd"},[a("div",{staticClass:"contain grd-row"},[a("h3",{staticClass:"py1 px2 col-2"},[t._v("Gekko UI")])])])}],o={},c=o,u=(a("uMTv"),a("KHd+")),l=Object(u["a"])(c,i,s,!1,null,null,null),d=l.exports,f=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("footer",{staticClass:"p2 bg--off-white"},[a("div",{staticClass:"contain"},[t._m(0),a("p",[t._v("Using Gekko v"+t._s(t.version.gekko)+" and Gekko UI v"+t._s(t.version.ui)+".")])])])},h=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("p",[a("em",[t._v("Use Gekko at your own risk.")])])}],m=a("9RND"),v=a("kiQV"),p={data:function(){return{version:{gekko:m.version,ui:v.version}}}},g=p,_=Object(u["a"])(g,f,h,!1,null,null,null),k=_.exports,y=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.active?a("div",[a("div",{attrs:{id:"modal-background"}}),a("div",{staticClass:"modal",attrs:{id:"modal"}},[a("div",{staticClass:"modal-guts",domProps:{innerHTML:t._s(t.content)}})])]):t._e()},w=[],b=a("5shn"),C={disconnected:Object(b["a"])("\n\n## Disconnected\n\nSomething happened to either Gekko or the connection.\nPlease check the terminal where Gekko is running or\nyour network connection.\n\n*This message is shown when the UI is unable to open a websocket connection with the Gekko Server.*\n\n ")},x={computed:{active:function(){return!this.$store.state.warnings.connected},content:function(){return this.$store.state.warnings.connected?"":C.disconnected}}},S=x,T=(a("TfKe"),Object(u["a"])(S,y,w,!1,null,null,null)),E=T.exports,P={name:"app",components:{top:d,bottom:k,modal:E}},A=P,z=(a("ZL7j"),Object(u["a"])(A,n,r,!1,null,null,null));e["a"]=z.exports},Q2AE:function(t,e,a){"use strict";var n={};a.r(n),a.d(n,"addImport",function(){return d}),a.d(n,"syncImports",function(){return f}),a.d(n,"updateImport",function(){return h});var r={};a.r(r),a.d(r,"syncGekkos",function(){return g}),a.d(r,"addGekko",function(){return _}),a.d(r,"updateGekko",function(){return k}),a.d(r,"archiveGekko",function(){return y}),a.d(r,"errorGekko",function(){return w}),a.d(r,"deleteGekko",function(){return b});var i={};a.r(i),a.d(i,"setGlobalWarning",function(){return C});var s={};a.r(s),a.d(s,"syncApiKeys",function(){return x}),a.d(s,"syncExchanges",function(){return S});a("VRzm");var o=a("Kw5r"),c=a("L2JU"),u=a("LvDl"),l=a.n(u),d=(a("INYr"),function(t,e){return t.imports.push(e),t}),f=function(t,e){return t.imports=e,t},h=function(t,e){var a=t.imports.findIndex(function(t){return t.id===e.import_id}),n=t.imports[a];if(!n)return t;var r=o["a"].util.extend(n,e.updates);return o["a"].set(t.imports,a,r),t},m=a("oyJW"),v=a("yT7P"),p=a("c7Wa"),g=function(t,e){return e?(t.gekkos=e.live,t.archivedGekkos=e.archive,t):t},_=function(t,e){return t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,e)),t},k=function(t,e){return e.id&&l.a.has(t.gekkos,e.id)?(t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,p(t.gekkos[e.id],e.event))),t):console.error("cannot update unknown gekko..")},y=function(t,e){return l.a.has(t.gekkos,e)?(t.archivedGekkos=Object(v["a"])({},t.archivedGekkos,Object(m["a"])({},e,Object(v["a"])({},t.gekkos[e],{stopped:!0,active:!1}))),t.gekkos=l.a.omit(t.gekkos,e),t):console.error("cannot archive unknown gekko..")},w=function(t,e){return l.a.has(t.gekkos,e.id)?(t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,Object(v["a"])({},t.gekkos[e.id],{errored:!0,errorMessage:e.error}))),t):console.error("cannot error unknown gekko..")},b=function(t,e){return l.a.has(t.archivedGekkos,e)?(t.archivedGekkos=l.a.omit(t.archivedGekkos,e),t):console.error("cannot delete unknown gekko..")},C=function(t,e){return t.warnings[e.key]=e.value,t},x=function(t,e){return o["a"].set(t,"apiKeys",e),t},S=function(t,e){return o["a"].set(t,"exchanges",e),t};o["a"].use(c["a"]);var T=!1,E={};l.a.merge(E,n),l.a.merge(E,r),l.a.merge(E,i),l.a.merge(E,s);e["a"]=new c["a"].Store({state:{warnings:{connected:!0},imports:[],gekkos:{},archivedGekkos:{},connection:{disconnected:!1,reconnected:!1},apiKeys:[],exchanges:{}},mutations:E,strict:T})},Q6eY:function(t,e,a){"use strict";var n=a("SDwi"),r=a.n(n);r.a},SDwi:function(t,e,a){},SWS5:function(t,e,a){},T0Mt:function(t,e,a){"use strict";var n=a("pd3X"),r=a.n(n);r.a},TDb6:function(t,e,a){},"TPp/":function(t,e,a){"use strict";var n=a("7LpK"),r=a.n(n);r.a},TfKe:function(t,e,a){"use strict";var n=a("ZpQ2"),r=a.n(n);r.a},UeuA:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{class:{clickable:!t.isClicked},attrs:{id:"chartWrapper"}},[a("div",{staticClass:"shield",on:{click:function(e){return e.preventDefault(),t.click(e)}}}),a("svg",{attrs:{id:"chart",width:"960",height:t.height}})])},r=[],i=a("k5N+"),s=a("LvDl"),o=a.n(s),c=function(t,e,a){var n=function(t){return o.a.isNumber(t)?moment.unix(t).utc().toDate():moment.utc(t).toDate()},r=e.map(function(t){return{price:t.price,date:n(t.date),action:t.action}}),s=t.map(function(t){return{price:t.open,date:n(t.start)}}),c=s.map(function(t){return+t.date}),u=s.map(function(t){return+t.price}),l=d3.select("#chart");l.attr("width",window.innerWidth-20);var d={top:20,right:20,bottom:110,left:40},f=a-d.top-d.bottom,h={top:a-70,right:20,bottom:30,left:40},m=+l.attr("width")-d.left-d.right,v=a-h.top-h.bottom,p=d3.scaleUtc().range([0,m]),g=d3.scaleUtc().range([0,m]),_=d3.scaleLinear().range([f,0]),k=d3.scaleLinear().range([v,0]),y=d3.axisBottom(p),w=d3.axisBottom(g),b=d3.axisLeft(_).ticks(a/50),C=d3.brushX().extent([[0,0],[m,v]]).on("brush end",z),x=d3.zoom().scaleExtent([1,100]).translateExtent([[0,0],[m,f]]).extent([[0,0],[m,f]]).on("zoom",$),S=d3.line().x(function(t){return p(t.date)}).y(function(t){return _(t.price)}),T=d3.line().x(function(t){return g(t.date)}).y(function(t){return k(t.price)});l.append("defs").append("clipPath").attr("id","clip").append("rect").attr("width",m).attr("height",f);var E=l.append("g").attr("class","focus").attr("transform","translate("+d.left+","+d.top+")"),P=l.append("g").attr("class","context").attr("transform","translate("+h.left+","+h.top+")");p.domain(d3.extent(s,function(t){return t.date})),_.domain([.99*d3.min(u),1.01*d3.max(u)]),g.domain(p.domain()),k.domain(_.domain()),E.append("path").datum(s).attr("class","line price").attr("d",S),E.append("g").attr("class","axis axis--x").attr("transform","translate(0,"+f+")").call(y),E.append("g").attr("class","axis axis--y").call(b),P.append("path").datum(s).attr("class","line").attr("d",T),P.append("g").attr("class","axis axis--x").attr("transform","translate(0,"+v+")").call(w);var A=l.append("g").attr("transform","translate("+d.left+","+d.top+")").selectAll("circle").data(r).enter().append("circle").attr("class",function(t){return t.action}).attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}).attr("r",5);P.append("g").selectAll("circle").data(r).enter().append("circle").attr("class",function(t){return t.action}).attr("cx",function(t){return g(t.date)}).attr("cy",function(t){return k(t.price)}).attr("r",3);function z(){if(!d3.event.sourceEvent||"zoom"!==d3.event.sourceEvent.type){var t=d3.event.selection||g.range();p.domain(t.map(g.invert,g)),D(p.domain()),l.select(".axis--y").call(b),A.attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}),E.select(".line").attr("d",S),E.select(".axis--x").call(y),l.select(".zoom").call(x.transform,d3.zoomIdentity.scale(m/(t[1]-t[0])).translate(-t[0],0))}}function D(t){var e=Object(i["a"])(t,2),a=e[0],n=e[1],r=o.a.sortedIndex(c,a),s=o.a.sortedIndex(c,n),l=u.slice(r,s);_.domain([.9995*d3.min(l),1.0005*d3.max(l)])}function $(){if(!d3.event.sourceEvent||"brush"!==d3.event.sourceEvent.type){var t=d3.event.transform;D(t.rescaleX(g).domain()),l.select(".axis--y").call(b),p.domain(t.rescaleX(g).domain()),E.select(".line").attr("d",S),A.attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}),E.select(".axis--x").call(y),P.select(".brush").call(C.move,p.range().map(t.invertX,t))}}P.append("g").attr("class","brush").call(C).call(C.move,p.range()),l.append("rect").attr("class","zoom").attr("width",m).attr("height",f).attr("transform","translate("+d.left+","+d.top+")").call(x)},u=(a("dRSK"),function(t){d3.select("#chart").append("text").attr("class","message").attr("x",150).attr("y",150).text(t)}),l=4,d={props:["data","height"],data:function(){return{isClicked:!1}},watch:{data:function(){this.render()}},created:function(){setTimeout(this.render,100)},beforeDestroy:function(){this.remove()},methods:{click:function(){this.isClicked=!0},render:function(){this.remove(),_.size(this.data.candles)0?"profit":"loss"}}},$=D,j=(a("WlXR"),Object(g["a"])($,P,A,!1,null,null,null)),O=j.exports,M=a("UeuA"),G=a("vf3E"),I={props:["result"],data:function(){return{}},methods:{},components:{roundtripTable:G["a"],resultSummary:O,chart:M["a"]},computed:{candles:function(){return{candles:this.result.stratCandles,trades:this.result.trades}}}},R=I,H=(a("wVP4"),Object(g["a"])(R,T,E,!1,null,null,null)),K=H.exports,Y={data:function(){return{backtestable:!1,backtestState:"idle",backtestResult:!1,config:!1}},methods:{check:function(t){if(this.config=t,!t.valid)return this.backtestable=!1;this.backtestable=!0},run:function(){var t=this;this.backtestState="fetching",Object(f["b"])("backtest",this.config,function(e,a){t.backtestState="fetched",t.backtestResult=a})}},components:{configBuilder:S,result:K,spinner:h["a"]}},W=Y,N=Object(g["a"])(W,n,r,!1,null,null,null);e["a"]=N.exports},c7Wa:function(t,e){const a=["marketUpdate"],n=["marketStart","stratWarmupCompleted"],r=["tradeCompleted","advice","roundtrip"],i=(t,e)=>{const i=e.type,s=e.payload;return t={...t,latestUpdate:new Date},r.includes(i)&&(t=t.events[i]?{...t,events:{...t.events,[i]:[...t.events[i],s]}}:{...t,events:{...t.events,[i]:[s]}}),t.events.initial[i]||a.includes(i)||(t={...t,events:{...t.events,initial:{...t.events.initial,[i]:s}}}),n.includes(i)||(t={...t,events:{...t.events,latest:{...t.events.latest,[i]:s}}}),t};t.exports=i},dHeD:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain"},[a("div",{staticClass:"text",domProps:{innerHTML:t._s(t.intro)}}),a("div",{staticClass:"hr"}),a("h2",[t._v("Available datasets")]),"idle"===t.datasetScanstate?a("div",{staticClass:"txt--center my2"},[a("a",{staticClass:"w100--s btn--primary scan-btn",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.scan(e)}}},[t._v("Scan available data")])]):t._e(),"scanning"===t.datasetScanstate?a("div",{staticClass:"txt--center my2"},[a("spinner")],1):t._e(),"scanned"===t.datasetScanstate?a("div",{staticClass:"my2"},[t.unscannableMakets.length?a("div",{staticClass:"bg--orange p1 warning my1"},[t.viewUnscannable?t._e():a("p",{staticClass:"clickable",on:{click:function(e){return e.preventDefault(),t.toggleUnscannable(e)}}},[t._v("Some markets were unscannable, click here for details.")]),t.viewUnscannable?[a("p",[t._v("Unable to find datasets in the following markets:")]),t._l(t.unscannableMakets,function(e){return a("div",{staticClass:"mx2"},[t._v("- "+t._s(e.exchange)+":"+t._s(e.currency)+":"+t._s(e.asset))])})]:t._e()],2):t._e(),t.datasets.length?[a("table",{staticClass:"full data"},[t._m(0),a("tbody",t._l(t.datasets,function(e){return a("tr",[a("td",[t._v(t._s(e.exchange))]),a("td",[t._v(t._s(e.currency))]),a("td",[t._v(t._s(e.asset))]),a("td",[t._v(t._s(t.fmt(e.from)))]),a("td",[t._v(t._s(t.fmt(e.to)))]),a("td",[t._v(t._s(t.humanizeDuration(e.to.diff(e.from))))])])}))])]:t._e(),t.datasets.length?t._e():[a("p",[t._v("It looks like you don't have any local data yet.")])]],2):t._e(),a("div",{staticClass:"my2"},[a("h2",[t._v("Import more data")]),a("p",{staticClass:"text"},[t._v("You can easily import more market data directly from exchanges using the importer.")]),a("router-link",{staticClass:"btn--primary",attrs:{to:"/data/importer"}},[t._v("Go to the importer!")])],1)])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("from")]),a("th",[t._v("to")]),a("th",[t._v("duration")])])])}],i=(a("VRzm"),a("MB/c")),s=a("5shn"),o=a("spvI"),c=Object(s["a"])("\n\n## Local data\n\nGekko needs local market data in order to backtest strategies. The local\ndata can also be used in a warmup period when running a strategy against a\nlive market.\n\n"),u={mixins:[o["a"]],components:{spinner:i["a"]},data:function(){return{intro:c,viewUnscannable:!1}},methods:{toggleUnscannable:function(){this.viewUnscannable=!0},humanizeDuration:function(t){return window.humanizeDuration(t)},fmt:function(t){return t.format("YYYY-MM-DD HH:mm")}}},l=u,d=(a("2rY9"),a("KHd+")),f=Object(d["a"])(l,n,r,!1,null,null,null);e["a"]=f.exports},dW8q:function(t,e,a){"use strict";var n=a("w3yp"),r=a.n(n);r.a},daul:function(t,e,a){"use strict";var n=a("Kd0R"),r=a.n(n);r.a},g298:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[t.data&&!t.data.done?a("div",[a("h2",[t._v("Importing data..")]),a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[t._m(0),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.data.watch.exchange))])]),a("div",{staticClass:"grd-row"},[t._m(1),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.data.watch.currency)+"/"+t._s(t.data.watch.asset))])])]),a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[t._m(2),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.from)))])]),a("div",{staticClass:"grd-row"},[t._m(3),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.to)))])]),t.initialized?a("div",{staticClass:"grd-row"},[t._m(4),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.latest)))])]):t._e(),t.initialized?a("div",{staticClass:"grd-row"},[t._m(5),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fromEnd))])]):t._e()]),t.initialized?t._e():a("spinner"),t.initialized?a("div",{staticClass:"contain"},[a("progressBar",{attrs:{progress:t.progress}})],1):t._e(),a("p",[a("em",[t._v("(you don't have to wait until the import is done,you can already start "),a("router-link",{attrs:{to:"/backtest"}},[t._v("backtesting")]),t._v(").")],1)])],1):t._e(),t.data&&t.data.done?a("div",{staticClass:"txt--center"},[a("h2",[t._v("Import done")]),a("p",[t._v(" Go and "),a("router-link",{attrs:{to:"/backtest"}},[t._v("backtest")]),t._v(" with your new data!")],1)]):t._e(),t.data?t._e():a("div",{staticClass:"txt--center"},[a("h2",[t._v("ERROR: Unknown import")]),a("p",[a("I",[t._v("don't know this import..")])],1)])])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Market:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Currency/Asset:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("From:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("To:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Imported data until:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Remaining:")])])}],i=(a("dRSK"),a("LvDl")),s=a.n(i),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.progress?a("div",{staticClass:"progressbarWrapper"},[a("p",[a("strong",[t._v(t._s(t.round(t.progress))+"%")])]),a("div",{staticClass:"progressbar"},[a("div",{style:{width:t.progress+"%"}})])]):t._e()},c=[],u={props:["progress"],methods:{round:function(t){return(+t).toFixed(2)}}},l=u,d=(a("/vJE"),a("KHd+")),f=Object(d["a"])(l,o,c,!1,null,null,null),h=f.exports,m=a("MB/c"),v={components:{progressBar:h,spinner:m["a"]},computed:{data:function(){return s.a.find(this.$store.state.imports,{id:this.$route.params.id})},initialized:function(){if(this.data&&this.latest.isValid())return!0},latest:function(){if(this.data)return this.mom(this.data.latest)},fromEndMs:function(){if(this.data)return this.to.diff(this.latest)},fromEnd:function(){return this.latest?humanizeDuration(this.fromEndMs):"LOADING"},from:function(){if(this.data)return this.mom(this.data.from)},to:function(){if(this.data)return this.mom(this.data.to)},timespan:function(){if(this.data)return this.to.diff(this.from)},progress:function(){if(this.data){var t=this.timespan-this.fromEndMs;return 100*t/this.timespan}}},methods:{fmt:function(t){return t.format("YYYY-MM-DD HH:mm:ss")},mom:function(t){return moment.utc(t)}}},p=v,g=(a("qDq4"),Object(d["a"])(p,n,r,!1,null,null,null));e["a"]=g.exports},gYof:function(t,e,a){"use strict";a("LvDl");var n=a("Kw5r"),r=a("r0f2"),i=(a("L2JU"),a("wiDz")),s=a("Q2AE"),o=function(){Object(i["a"])("imports",function(t,e){s["a"].commit("syncImports",e)})},c=function(){C.$on("import_update",function(t){s["a"].commit("updateImport",t)})},u=function(){o(),c()},l=function(){Object(i["a"])("gekkos",function(t,e){var a=e;s["a"].commit("syncGekkos",a)})},d=function(){C.$on("gekko_new",function(t){return s["a"].commit("addGekko",t.state)}),C.$on("gekko_event",function(t){return s["a"].commit("updateGekko",t)}),C.$on("gekko_archived",function(t){return s["a"].commit("archiveGekko",t.id)}),C.$on("gekko_error",function(t){return s["a"].commit("errorGekko",t)}),C.$on("gekko_deleted",function(t){return s["a"].commit("deleteGekko",t.id)})},f=function(){l(),d()},h=function(){},m=function(){C.$on("WS_STATUS_CHANGE",function(t){return s["a"].commit("setGlobalWarning",{key:"connected",value:t.connected})})},v=function(){h(),m()},p=a("k5N+"),g=(a("rGqo"),function(t){if(!t)return{};var e=t,a={};return e.forEach(function(t){a[t.slug]=a[t.slug]||{markets:{}},t.markets.forEach(function(e){var n=Object(p["a"])(e["pair"],2),r=n[0],i=n[1];a[t.slug].markets[r]=a[t.slug].markets[r]||[],a[t.slug].markets[r].push(i)}),"exchangeMaxHistoryAge"in t&&(a[t.slug].exchangeMaxHistoryAge=t.exchangeMaxHistoryAge),a[t.slug].importable=!!t.providesFullHistory,a[t.slug].tradable=!!t.tradable,a[t.slug].requires=t.requires}),a}),_=function(){Object(i["a"])("apiKeys",function(t,e){s["a"].commit("syncApiKeys",e)}),Object(i["a"])("exchanges",function(t,e){s["a"].commit("syncExchanges",g(e))})},k=function(){C.$on("apiKeys",function(t){s["a"].commit("syncApiKeys",t.exchanges)})},y=function(){_(),k()},w=function(){u(),f(),v(),y()};a.d(e,"a",function(){return C}),a.d(e,"b",function(){return S});var b=null,C=new n["a"];C.$on("gekko_update",function(t){return console.log(t)}),C.$on("import_update",function(t){return console.log(t)}),C.$on("import_error",function(t){alert("IMPORT ERROR: "+t.error)});var x={connected:!1},S=function(){b=new ReconnectingWebSocket(r["b"],null,{maxReconnectInterval:4e3}),setTimeout(function(){x.connected||(w(),C.$emit("WS_STATUS_CHANGE",x))},500),b.onopen=function(){x.connected||(x.connected=!0,C.$emit("WS_STATUS_CHANGE",x),w())},b.onclose=function(){x.connected&&(x.connected=!1,C.$emit("WS_STATUS_CHANGE",x))},b.onerror=function(){x.connected&&(x.connected=!1,C.$emit("WS_STATUS_CHANGE",x))},b.onmessage=function(t){var e=JSON.parse(t.data);C.$emit(e.type,e)}}},h8ks:function(t,e,a){},hGnM:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain py2"},[a("h3",[t._v("Market watchers")]),t.watchers.length?t._e():a("div",{staticClass:"text"},[a("p",[t._v("You don't have any market watchers.")])]),t.watchers.length?a("table",{staticClass:"full clickable"},[t._m(0),a("tbody",t._l(t.watchers,function(e){return a("tr",{staticClass:"clickable",on:{click:function(a){t.$router.push({path:"/live-gekkos/"+e.id})}}},[a("td",[t._v(t._s(e.config.watch.exchange))]),a("td",[t._v(t._s(e.config.watch.currency))]),a("td",[t._v(t._s(e.config.watch.asset))]),a("td",[t._v(t._s(t.status(e)))]),a("td",[e.events.initial.candle?[t._v(t._s(t.fmt(e.events.initial.candle.start)))]:t._e()],2),a("td",[e.events.latest.candle?[t._v(t._s(t.fmt(e.events.latest.candle.start)))]:t._e()],2),a("td",[e.events.initial.candle&&e.events.latest.candle?[t._v(t._s(t.timespan(e.events.latest.candle.start,e.events.initial.candle.start)))]:t._e()],2)])}))]):t._e(),a("h3",[t._v("Strat runners")]),t.stratrunners.length?t._e():a("div",{staticClass:"text"},[a("p",[t._v("You don't have any stratrunners.")])]),t.stratrunners.length?a("table",{staticClass:"full"},[t._m(1),a("tbody",t._l(t.stratrunners,function(e){return a("tr",{staticClass:"clickable",on:{click:function(a){t.$router.push({path:"/live-gekkos/"+e.id})}}},[a("td",[t._v(t._s(e.config.watch.exchange))]),a("td",[t._v(t._s(e.config.watch.currency))]),a("td",[t._v(t._s(e.config.watch.asset))]),a("td",[t._v(t._s(t.status(e)))]),a("td",[e.events.initial.candle&&e.events.latest.candle?[t._v(t._s(t.timespan(e.events.latest.candle.start,e.events.initial.candle.start)))]:t._e()],2),a("td",[t._v(t._s(e.config.tradingAdvisor.method))]),a("td",[t.report(e)?t._e():[t._v("0")],t.report(e)?[t._v(t._s(t.round(t.report(e).profit))+" "+t._s(t.report(e).currency))]:t._e()],2),a("td",[t._v(t._s(e.logType))]),a("td",[e.events.tradeCompleted?t._e():[t._v("0")],e.events.tradeCompleted?[t._v(t._s(e.events.tradeCompleted.length))]:t._e()],2)])}))]):t._e(),a("div",{staticClass:"hr"}),a("h2",[t._v("Start a new live Gekko")]),a("router-link",{staticClass:"btn--primary",attrs:{to:"/live-gekkos/new"}},[t._v("Start a new live Gekko!")])],1)},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("status")]),a("th",[t._v("started at")]),a("th",[t._v("last update")]),a("th",[t._v("duration")])])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("status")]),a("th",[t._v("duration")]),a("th",[t._v("strategy")]),a("th",[t._v("PnL")]),a("th",[t._v("type")]),a("th",[t._v("trades")])])])}],i=(a("a1Th"),a("rGqo"),a("yt8O"),a("VRzm"),{created:function(){var t=this;this.timer=setInterval(function(){t.now=moment()},1e3)},destroyed:function(){clearTimeout(this.timer)},data:function(){return{timer:!1,now:moment()}},computed:{stratrunners:function(){return _.values(this.$store.state.gekkos).concat(_.values(this.$store.state.archivedGekkos)).filter(function(t){return"papertrader"===t.logType||"tradebot"===t.logType})},watchers:function(){return _.values(this.$store.state.gekkos).concat(_.values(this.$store.state.archivedGekkos)).filter(function(t){return"watcher"===t.logType})}},methods:{humanizeDuration:function(t){return window.humanizeDuration(t)},moment:function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(t){return moment.utc(t)}),fmt:function(t){return moment.utc(t).format("YYYY-MM-DD HH:mm")},round:function(t){return(+t).toFixed(3)},timespan:function(t,e){return this.humanizeDuration(this.moment(t).diff(this.moment(e)))},status:function(t){return t.errored?"errored":t.stopped?"stopped":t.active?"running":void console.log("unknown state:",t)},report:function(t){return _.get(t,"events.latest.performanceReport")}}}),s=i,o=(a("daul"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},jTvs:function(t,e,a){},jVW9:function(t,e,a){},jf14:function(t,e,a){},jloR:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[a("div",{staticClass:"text",domProps:{innerHTML:t._s(t.intro)}}),a("div",{staticClass:"hr"}),a("h3",[t._v("Currently running imports")]),0===t.imports.length?a("p",[t._v("You currently don't have any imports running.")]):t._e(),t.imports.length?a("ul",t._l(t.imports,function(e){return a("li",[a("router-link",{attrs:{to:"/data/importer/import/"+e.id}},[t._v(t._s(e.watch.exchange)+":"+t._s(e.watch.currency)+"/"+t._s(e.watch.asset))])],1)})):t._e(),a("div",{staticClass:"hr"}),a("h3",[t._v("Start a new import")]),a("import-config-builder",{on:{config:t.updateConfig}}),a("div",{staticClass:"hr"}),a("div",{staticClass:"txt--center"},[a("a",{staticClass:"w100--s my1 btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.run(e)}}},[t._v("Import")])])],1)},r=[],i=a("wiDz"),s=a("MB/c"),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("h3",[t._v("Market")]),a("market-picker",{attrs:{"only-importable":"true"},on:{market:t.updateMarketConfig}})],1),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("range-creator",{on:{range:t.updateRange}})],1)])])},c=[],u=(a("91GP"),a("6BxS")),l=a("FhOJ"),d=(a("LvDl"),{data:function(){return{market:{},range:{}}},components:{marketPicker:u["a"],rangeCreator:l["a"]},computed:{config:function(){var t={};return Object.assign(t,this.market,{importer:{daterange:this.range}},{candleWriter:{enabled:!0}}),t}},methods:{updateMarketConfig:function(t){this.market=t,this.emitConfig()},updateRange:function(t){this.range=t,this.emitConfig()},emitConfig:function(){this.$emit("config",this.config)}}}),f=d,h=(a("H+ir"),a("KHd+")),m=Object(h["a"])(f,o,c,!1,null,null,null),v=m.exports,p=a("5shn"),g=Object(p["a"])("\n\n## Import data\n\nThe importer can download historical market data directly from the exchange.\n\n"),_={components:{importConfigBuilder:v,spinner:s["a"]},data:function(){return{intro:g,config:{}}},computed:{imports:function(){return this.$store.state.imports}},methods:{daysApart:function(t){var e=moment(t.to),a=moment(t.from);return e.diff(a,"days")},updateConfig:function(t){this.config=t},run:function(){var t=this,e=this.daysApart(this.config.importer.daterange);if(e<1)return alert("You can only import at least one day of data..");var a=this.$store.state.exchanges[this.config.watch.exchange];if("exchangeMaxHistoryAge"in a&&moment(this.config.importer.daterange.from) 1%","last 2 versions","not ie <= 8"]}},ldlP:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("section",{staticClass:"contain grd-row"},[a("div",{staticClass:"grd-row-col-3-6",domProps:{innerHTML:t._s(t.left)}}),t._m(0)])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-3-6 txt--center"},[a("img",{attrs:{src:"static/gekko.jpg"}}),a("p",[a("em",[t._v("The most valuable commodity I know of is information.")])])])}],i=(a("VRzm"),a("5shn")),s=Object(i["a"])("\n\n## Gekko\n\nGekko is a Bitcoin trading bot and backtesting platform that\nconnects to popular Bitcoin exchanges. It is written in javascript\nand runs on nodejs.\n\n[Find out more](https://gekko.wizb.it/).\n\n*Gekko is 100% free (open source), if you paid for this you have been scammed.*\n\n"),o={data:function(){return{left:s}}},c=o,u=a("KHd+"),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},mf2E:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"my2"},[t.data?t._e():a("div",{staticClass:"contain"},[a("h1",[t._v("Unknown Gekko instance")]),a("p",[t._v("Gekko doesn't know what gekko this is...")])]),t.data?a("div",[a("h2",{staticClass:"contain"},[t._v("Gekko "+t._s(t.type))]),t.isArchived?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This is an archived Gekko, it is currently not running anymore.")]):t._e(),t.data.errorMessage?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This is Gekko crashed with the following error: "+t._s(t.data.errorMessage))]):t._e(),a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Market")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Exchange")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.exchange))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Currency")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.currency))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Asset")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.asset))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Type")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.type))])])]),a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Runtime")]),t.isLoading?a("spinner"):t._e(),t.isLoading?t._e():[t.initialEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Watching since")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.initialEvents.candle.start)))])]):t._e(),t.latestEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Received data until")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.latestEvents.candle.start)))])]):t._e(),t.latestEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Data spanning")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.humanizeDuration(t.moment(t.latestEvents.candle.start).diff(t.moment(t.initialEvents.candle.start)))))])]):t._e(),t.isStratrunner?[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Amount of trades")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.trades.length))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Candle size")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.config.tradingAdvisor.candleSize))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("History size")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.config.tradingAdvisor.historySize))])])]:t._e()]],2)]),t.warmupRemaining?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This stratrunner is still warming up for the next "),a("i",[t._v(t._s(t.warmupRemaining.replace(","," and ")))]),t._v(", it will not trade until it is warmed up.")]):t._e(),t.isStratrunner?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Strategy")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Name")]),a("div",{staticClass:"grd-row-col-3-6"},[a("strong",[t._v(t._s(t.stratName))])])]),t._v("Parameters"),a("pre",[t._v(t._s(t.stratParams))])]),a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Profit report")]),t.report?t._e():[a("p",[t.isArchived?a("em",[t._v("This Gekko never executed a trade..")]):t._e(),t.isArchived?t._e():a("em",[t._v("Waiting for at least one trade..")])])],t.report?[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Start balance")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.startBalance)))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Current balance")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.balance)))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Market")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.market/100*t.report.startPrice))+" "+t._s(t.config.watch.currency)+" ("+t._s(t.round(t.report.market))+" %)")])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Profit")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.profit))+" "+t._s(t.config.watch.currency)+" ("+t._s(t.round(t.report.relativeProfit))+" %)")])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Alpha")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.alpha))+" "+t._s(t.config.watch.currency))])])]:t._e()],2)]):t._e(),!t.isStratrunner||t.watcher||t.isArchived?t._e():a("p",[t._v("WARNING: stale gekko, not attached to a watcher, please report "),a("a",{attrs:{href:"https://github.com/askmike/gekko/issues"}},[t._v("here")]),t._v(".")]),t.isArchived?t._e():a("p",[a("a",{staticClass:"w100--s my1 btn--red",on:{click:t.stopGekko}},[t._v("Stop Gekko")])]),t.isArchived?a("p",[a("a",{staticClass:"w100--s my1 btn--red",on:{click:t.deleteGekko}},[t._v("Delete Gekko")])]):t._e(),t.isStratrunner&&t.watcher&&!t.isArchived?a("p",[a("em",[t._v("This gekko gets market data from "),a("router-link",{attrs:{to:"/live-gekkos/"+t.watcher.id}},[t._v("this market watcher")])],1),t._v(".")]):t._e()]),t.isLoading?t._e():[a("h3",{staticClass:"contain"},[t._v("Market graph")]),"fetching"===t.candleFetch?a("spinner"):t._e(),"fetched"===t.candleFetch?[a("chart",{attrs:{data:t.chartData,height:300}})]:t._e(),t.isStratrunner?a("roundtrips",{attrs:{roundtrips:t.roundtrips}}):t._e()]],2):t._e()])},r=[],i=(a("a1Th"),a("dRSK"),a("VRzm"),a("Kw5r")),s=a("LvDl"),o=a.n(s),c=a("wiDz"),u=a("MB/c"),l=a("UeuA"),d=a("vf3E"),f=a("0Bu0"),h={created:function(){this.isLoading||this.getCandles()},components:{spinner:u["a"],chart:l["a"],paperTradeSummary:f["a"],roundtrips:d["a"]},data:function(){return{candleFetch:"idle",candles:!1}},computed:{id:function(){return this.$route.params.id},gekkos:function(){return this.$store.state.gekkos},archivedGekkos:function(){return this.$store.state.archivedGekkos},data:function(){return!!this.gekkos&&(o.a.has(this.gekkos,this.id)?this.gekkos[this.id]:!!o.a.has(this.archivedGekkos,this.id)&&this.archivedGekkos[this.id])},config:function(){return o.a.get(this,"data.config")},latestEvents:function(){return o.a.get(this,"data.events.latest")},initialEvents:function(){return o.a.get(this,"data.events.initial")},trades:function(){return o.a.get(this,"data.events.tradeCompleted")||[]},roundtrips:function(){return o.a.get(this,"data.events.roundtrip")||[]},isLive:function(){return o.a.has(this.gekkos,this.id)},type:function(){return this.data.logType},isStratrunner:function(){return"watcher"!==this.type},isArchived:function(){return this.data.stopped},warmupRemaining:function(){if(!this.isStratrunner)return!1;if(this.isArchived)return!1;if(this.initialEvents.stratWarmupCompleted)return!1;if(!this.initialEvents.candle)return!1;var t=o.a.get(this.config,"tradingAdvisor.historySize");if(!t)return!1;var e=o.a.get(this.config,"tradingAdvisor.candleSize")*t;return humanizeDuration(moment(this.initialEvents.candle.start).add(e,"m").diff(moment()),{largest:2})},chartData:function(){return{candles:this.candles,trades:this.trades}},report:function(){return o.a.get(this.latestEvents,"performanceReport")},stratName:function(){if(this.data)return this.data.config.tradingAdvisor.method},stratParams:function(){if(!this.data)return"Loading...";var t=i["a"].util.extend({},this.data.config[this.stratName]);return delete t.__empty,o.a.isEmpty(t)?"No parameters":JSON.stringify(t,null,4)},isLoading:function(){return!this.data||(!o.a.get(this.data,"events.initial.candle")||!o.a.get(this.data,"events.latest.candle"))},watcher:function(){var t=this;if(!this.isStratrunner)return!1;var e=i["a"].util.extend({},this.data.config.watch);return o.a.find(this.gekkos,function(a){return a.id!==t.id&&o.a.isEqual(e,a.config.watch)})},hasLeechers:function(){var t=this;if(this.isStratrunner)return!1;var e=i["a"].util.extend({},this.data.config.watch);return o.a.find(this.gekkos,function(a){return a.id!==t.id&&o.a.isEqual(e,a.config.watch)})}},watch:{"data.events.latest.candle.start":function(){setTimeout(this.getCandles,o.a.random(100,2e3))}},methods:{round:function(t){return(+t).toFixed(5)},humanizeDuration:function(t,e){return window.humanizeDuration(t,e)},moment:function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(t){return moment.utc(t)}),fmt:function(t){return moment.utc(t).format("YYYY-MM-DD HH:mm")},getCandles:function(){var t=this;if(!this.isLoading&&"fetching"!==this.candleFetch){this.candleFetch="fetching";var e=this.data.events.latest.candle.start,a=this.data.events.initial.candle.start,n=1;"watcher"!==this.type&&(n=this.data.config.tradingAdvisor.candleSize);var r={watch:this.data.config.watch,daterange:{to:e,from:a},candleSize:n};setTimeout(function(){Object(c["b"])("getCandles",r,function(e,a){if(t.candleFetch="fetched",!a||a.error||!o.a.isArray(a))return console.log(a);t.candles=a.map(function(t){return t.start=moment.unix(t.start).utc().format(),t})})},o.a.random(150,2500))}},stopGekko:function(){if(this.hasLeechers)return alert("This Gekko is fetching market data for multiple stratrunners, stop these first.");confirm("Are you sure you want to stop this Gekko?")&&Object(c["b"])("stopGekko",{id:this.data.id},function(t,e){console.log("stopped gekko")})},deleteGekko:function(){var t=this;if(!this.isArchived)return alert("This Gekko is still running, stop it first!");confirm("Are you sure you want to delete this Gekko?")&&Object(c["b"])("deleteGekko",{id:this.data.id},function(e,a){t.$router.push({path:"/live-gekkos/"})})}}},m=h,v=(a("/Dpa"),a("KHd+")),p=Object(v["a"])(m,n,r,!1,null,null,null);e["a"]=p.exports},ngcj:function(t,e,a){"use strict";var n=a("EAJ1"),r=a.n(n);r.a},nzng:function(t,e,a){},pd3X:function(t,e,a){},pyMo:function(t,e,a){},q431:function(t,e,a){"use strict";var n=a("ydmZ"),r=a.n(n);r.a},qDq4:function(t,e,a){"use strict";var n=a("nzng"),r=a.n(n);r.a},r0f2:function(t,e,a){"use strict";a.d(e,"b",function(){return i}),a.d(e,"a",function(){return r});var n,r,i,s=window.CONFIG.ui,o="".concat(s.host).concat(80===s.port?"":":".concat(s.port)).concat(s.path);n=s.ssl?"https://".concat(o):"http://".concat(o),r=n+"api/",i=s.ssl?"wss://".concat(o,"api"):"ws://".concat(o,"api")},rloZ:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd"},[a("div",{staticClass:"px1"},[a("h3",[t._v("Paper trader")]),"closed"===t.toggle?a("a",{staticClass:"btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.switchToggle(e)}}},[t._v("Change paper trader settings")]):t._e(),"open"===t.toggle?[a("p",[t._v("Settings:")]),a("textarea",{directives:[{name:"model",rawName:"v-model",value:t.rawPaperTraderParams,expression:"rawPaperTraderParams"}],staticClass:"params",domProps:{value:t.rawPaperTraderParams},on:{input:function(e){e.target.composing||(t.rawPaperTraderParams=e.target.value)}}}),t.rawPaperTraderParamsError?a("p",{staticClass:"bg--red p1"},[t._v(t._s(t.rawPaperTraderParamsError.message))]):t._e()]:t._e()],2)])},r=[],i=(a("LvDl"),a("wiDz")),s={created:function(){var t=this;Object(i["a"])("configPart/paperTrader",function(e,a){t.rawPaperTraderParams=a.part})},data:function(){return{rawPaperTraderParams:"",rawPaperTraderParamsError:!1,paperTraderParams:{},toggle:"closed"}},watch:{rawPaperTraderParams:function(){this.emitConfig()}},methods:{switchToggle:function(){"open"===this.toggle?this.toggle="closed":this.toggle="open"},emitConfig:function(){this.parseParams(),this.$emit("settings",this.paperTraderParams)},parseParams:function(){try{this.paperTraderParams=toml.parse(this.rawPaperTraderParams),this.paperTraderParams.reportRoundtrips=!0,this.rawPaperTraderParamsError=!1}catch(t){this.rawPaperTraderParamsError=t,this.paperTraderParams={}}}}},o=s,c=(a("0zrD"),a("KHd+")),u=Object(c["a"])(o,n,r,!1,null,null,null);e["a"]=u.exports},spvI:function(t,e,a){"use strict";a("Vd3H"),a("rGqo");var n=a("wiDz"),r={data:function(){return{datasets:[],datasetScanstate:"idle",unscannableMakets:[]}},methods:{scan:function(){var t=this;this.datasetScanstate="scanning",Object(n["b"])("scansets",{},function(e,a){t.datasetScanstate="scanned",t.unscannableMakets=a.errors;var n=[];a.datasets.forEach(function(t){t.ranges.forEach(function(e,a){n.push({exchange:t.exchange,currency:t.currency,asset:t.asset,from:moment.unix(e.from).utc(),to:moment.unix(e.to).utc(),id:t.exchange+t.asset+t.currency+a})})}),n=n.filter(function(t){if(t.to.diff(t.from,"hours")>2)return!0}),n=n.sort(function(t,e){var a=t.to.diff(t.from),n=e.to.diff(e.from);return an?1:0}).reverse(),t.datasets=n})}}};e["a"]=r},tr8f:function(t,e,a){"use strict";var n=a("h8ks"),r=a.n(n);r.a},tr8z:function(t,e,a){"use strict";var n=a("Ug4+"),r=a.n(n);r.a},uMTv:function(t,e,a){"use strict";var n=a("pyMo"),r=a.n(n);r.a},uXxc:function(t,e,a){},vf3E:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain roundtrips"},[a("h2",[t._v("Roundtrips")]),t.roundtrips.length?a("table",[a("thead",[t._m(0),t._l(t.roundtrips,function(e){return a("tr",[a("td",[t._v(t._s(t.fmt(e.entryAt)))]),a("td",[t._v(t._s(t.fmt(e.exitAt)))]),a("td",[t._v(t._s(t.diff(e.duration)))]),a("td",[t._v(t._s(t.round(e.entryBalance)))]),a("td",[t._v(t._s(t.round(e.exitBalance)))]),-1===Math.sign(e.pnl)?[a("td",{staticClass:"loss"},[t._v(t._s(Math.sign(e.pnl)*e.pnl.toFixed(2)))]),a("td",{staticClass:"loss"},[t._v(t._s(e.profit.toFixed(2))+"%")])]:[a("td",{staticClass:"profit"},[t._v(t._s(e.pnl.toFixed(2)))]),a("td",{staticClass:"profit"},[t._v(t._s(e.profit.toFixed(2))+"%")])]],2)})],2)]):t._e(),t.roundtrips.length?t._e():a("div",[a("p",[t._v("Not enough data to display")])])])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("tr",[a("th",[t._v("Entry at (UTC)")]),a("th",[t._v("Exit at (UTC)")]),a("th",[t._v("Exposure")]),a("th",[t._v("Entry balance")]),a("th",[t._v("Exit balance")]),a("th",[t._v("P&L")]),a("th",[t._v("Profit")])])}],i=a("LvDl"),s=a.n(i),o={props:["roundtrips"],data:function(){return{}},methods:{diff:function(t){return moment.duration(t).humanize()},humanizeDuration:function(t){return window.humanizeDuration(t)},fmt:function(t){var e;return e=s.a.isNumber(t)?moment.unix(t):moment(t).utc(),e.utc().format("YYYY-MM-DD HH:mm")},round:function(t){return(+t).toFixed(3)}}},c=o,u=(a("dW8q"),a("KHd+")),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},vwRV:function(t,e,a){},w3yp:function(t,e,a){},wVP4:function(t,e,a){"use strict";var n=a("vwRV"),r=a.n(n);r.a},wVPO:function(t,e,a){"use strict";var n=a("uXxc"),r=a.n(n);r.a},wiDz:function(t,e,a){"use strict";a.d(e,"b",function(){return u}),a.d(e,"a",function(){return l});var n=a("24Ii"),r=a.n(n),i=a("TrxG"),s=a.n(i),o=a("r0f2"),c=function(t){return function(e,a){if(e)return t(e);if(!a.text)return t("no data");var n=JSON.parse(a.text);t(!1,n)}},u=function(t,e,a){r.a.post(o["a"]+t).use(s.a).send(e).end(c(a))},l=function(t,e){r.a.get(o["a"]+t).use(s.a).end(c(e))}},ydmZ:function(t,e,a){},yomC:function(t,e,a){"use strict";var n=a("EfWa"),r=a.n(n);r.a},yuKf:function(t,e,a){}}); -//# sourceMappingURL=app.9aa8dda3.js.map \ No newline at end of file diff --git a/web/vue/dist/app.f8381cdf.js b/web/vue/dist/app.f8381cdf.js new file mode 100644 index 000000000..cafde3261 --- /dev/null +++ b/web/vue/dist/app.f8381cdf.js @@ -0,0 +1,2 @@ +(function(t){function e(e){for(var n,s,o=e[0],c=e[1],u=e[2],d=0,f=[];d0?"profit":"loss"}}},s=i,o=(a("tr8z"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},"0zrD":function(t,e,a){"use strict";var n=a("jf14"),r=a.n(n);r.a},26:function(t,e,a){t.exports=a("Vtdi")},"2A8w":function(t,e,a){"use strict";var n=a("TDb6"),r=a.n(n);r.a},"2Yda":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[a("h3",[t._v("Start a new gekko")]),a("gekko-config-builder",{on:{config:t.updateConfig}}),a("div",{staticClass:"hr"}),t.config.valid?a("div",{staticClass:"txt--center"},[t.pendingStratrunner?t._e():a("a",{staticClass:"w100--s my1 btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.start(e)}}},[t._v("Start")]),t.pendingStratrunner?a("spinner"):t._e()],1):t._e()],1)},r=[],i=(a("Z2Ku"),a("L9s1"),a("dRSK"),a("LvDl")),s=a.n(i),o=a("Kw5r"),c=a("wiDz"),u=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("h3",[t._v("Market")]),a("market-picker",{attrs:{"only-tradable":t.isTradebot},on:{market:t.updateMarketConfig}})],1),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("type-picker",{on:{type:t.updateType}})],1)]),"market watcher"!==t.type?[a("div",{staticClass:"hr"}),a("strat-picker",{staticClass:"contain my2",on:{stratConfig:t.updateStrat}}),"paper trader"===t.type?a("div",{staticClass:"hr"}):t._e(),"paper trader"===t.type?a("paper-trader",{on:{settings:t.updatePaperTrader}}):t._e()]:t._e()],2)},l=[],d=(a("91GP"),a("6BxS")),f=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h3",[t._v("Type")]),[a("label",{staticClass:"wrapper",attrs:{for:"type"}},[t._v("What do you want to do with gekko?")]),a("form",{staticClass:"radio grd"},t._l(t.types,function(e,n){return a("div",{staticClass:"grd-row m1"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedTypeIndex,expression:"selectedTypeIndex"}],staticClass:"grd-row-col-1-6",attrs:{type:"radio"},domProps:{value:n,checked:t._q(t.selectedTypeIndex,n)},on:{change:function(e){t.selectedTypeIndex=n}}}),a("label",{staticClass:"grd-row-col-5-6",attrs:{for:n}},[t._v(t._s(e))])])}))]],2)},h=[],m={created:function(){this.emitType()},data:function(){return{types:["paper trader","market watcher","tradebot"],selectedTypeIndex:0}},methods:{emitType:function(){this.$emit("type",this.type)}},watch:{type:function(){this.emitType()}},computed:{type:function(){return this.types[this.selectedTypeIndex]}}},v=m,p=(a("wVPO"),a("KHd+")),g=Object(p["a"])(v,f,h,!1,null,null,null),_=g.exports,k=a("6Wkr"),y=a("rloZ"),w={created:function(){var t=this;Object(c["a"])("configPart/candleWriter",function(e,a){t.candleWriter=toml.parse(a.part)}),Object(c["a"])("configPart/performanceAnalyzer",function(e,a){t.performanceAnalyzer=toml.parse(a.part),t.performanceAnalyzer.enabled=!0})},data:function(){return{market:{},range:{},type:"",strat:{},paperTrader:{},candleWriter:{},performanceAnalyzer:{}}},components:{marketPicker:d["a"],typePicker:_,stratPicker:k["a"],paperTrader:y["a"]},computed:{isTradebot:function(){return"tradebot"===this.type},config:function(){var t={};return Object.assign(t,this.market,this.strat,{paperTrader:this.paperTrader},{candleWriter:this.candleWriter},{type:this.type},{performanceAnalyzer:this.performanceAnalyzer}),this.isTradebot&&(delete t.paperTrader,t.trader={enabled:!0}),t.valid=this.validConfig(t),t}},methods:{validConfig:function(t){if("market watcher"===t.type)return!0;if(!t.tradingAdvisor)return!1;if(s.a.isNaN(t.tradingAdvisor.candleSize))return!1;if(0==t.tradingAdvisor.candleSize)return!1;var e=t.tradingAdvisor.method;return!s.a.isEmpty(t[e])},updateMarketConfig:function(t){this.market=t,this.emitConfig()},updateType:function(t){this.type=t,this.emitConfig()},updateStrat:function(t){this.strat=t,this.emitConfig()},updatePaperTrader:function(t){this.paperTrader=t,this.paperTrader.enabled=!0,this.emitConfig()},emitConfig:function(){this.$emit("config",this.config)}}},b=w,C=(a("YEdZ"),Object(p["a"])(b,u,l,!1,null,null,null)),x=C.exports,S=a("MB/c"),T={components:{gekkoConfigBuilder:x,spinner:S["a"]},data:function(){return{pendingStratrunner:!1,config:{}}},computed:{gekkos:function(){return this.$store.state.gekkos},watchConfig:function(){var t=s.a.pick(this.config,"watch","candleWriter"),e=o["a"].util.extend({},t);return e.type="market watcher",e.mode="realtime",e},requiredHistoricalData:function(){if(this.config.tradingAdvisor&&this.config.valid){var t=this.config.tradingAdvisor;return t.candleSize*t.historySize}},gekkoConfig:function(){var t;if(this.existingMarketWatcher){if(this.requiredHistoricalData){var e=moment().utc().startOf("minute").subtract(this.requiredHistoricalData,"minutes").unix(),a=moment.utc(this.existingMarketWatcher.events.initial.candle.start).unix();t=moment.unix(Math.max(e,a)).utc().format()}else t=moment().utc().startOf("minute").format();var n=o["a"].util.extend({market:{type:"leech",from:t},mode:"realtime"},this.config);return n}},existingMarketWatcher:function(){var t=o["a"].util.extend({},this.watchConfig.watch);return s.a.find(this.gekkos,{config:{watch:t}})},exchange:function(){return this.watchConfig.watch.exchange},existingTradebot:function(){var t=this;return s.a.find(this.gekkos,function(e){return"tradebot"===e.logType&&e.config.watch.exchange===t.exchange})},availableApiKeys:function(){return this.$store.state.apiKeys}},watch:{existingMarketWatcher:function(t,e){var a=this;if(this.pendingStratrunner){var n=this.existingMarketWatcher;n.events.latest.candle&&(this.pendingStratrunner=!1,this.startGekko(function(t,e){a.$router.push({path:"/live-gekkos/".concat(e.id)})}))}}},methods:{updateConfig:function(t){this.config=t},start:function(){var t=this;if("tradebot"===this.config.type){if(this.existingTradebot){var e="You already have a tradebot running on this exchange";return e+=", you can only run one tradebot per exchange.",alert(e)}if(!this.availableApiKeys.includes(this.exchange))return alert("Please first configure API keys for this exchange in the config page.")}"market watcher"===this.config.type?this.existingMarketWatcher?(alert("This market is already being watched, redirecting you now..."),this.$router.push({path:"/live-gekkos/".concat(this.existingMarketWatcher.id)})):this.startWatcher(function(e,a){t.$router.push({path:"/live-gekkos/".concat(a.id)})}):this.existingMarketWatcher?this.startGekko(this.routeToGekko):this.startWatcher(function(e,a){t.pendingStratrunner=a.id})},routeToGekko:function(t,e){if(t||e.error)return console.error(t,e.error);this.$router.push({path:"/live-gekkos/".concat(e.id)})},startWatcher:function(t){Object(c["b"])("startGekko",this.watchConfig,t)},startGekko:function(t){Object(c["b"])("startGekko",this.gekkoConfig,t)}}},E=T,P=(a("2A8w"),Object(p["a"])(E,n,r,!1,null,null,null));e["a"]=P.exports},"2rY9":function(t,e,a){"use strict";var n=a("SWS5"),r=a.n(n);r.a},"5/bm":function(t,e,a){},"5shn":function(t,e,a){"use strict";var n=a("DlQD"),r=new n.Renderer;r.link=function(t,e,a){var n,r,i;return n=/^https?:\/\/.+$/.test(t),r=n||"newWindow"===e,i='"+a+""},n.setOptions({renderer:r}),e["a"]=n},"6BxS":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("div",{staticClass:"mx1"},[a("label",{staticClass:"wrapper",attrs:{for:"exchange"}},[t._v("Exchange:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.exchange,expression:"exchange"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.exchange=e.target.multiple?a:a[0]}}},t._l(t.exchanges,function(e,n){return a("option",[t._v(t._s(n))])}))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("label",{attrs:{for:"currency"}},[t._v("Currency:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.currency,expression:"currency"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.currency=e.target.multiple?a:a[0]}}},t._l(t.currencies,function(e){return a("option",[t._v(t._s(e))])}))])]),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("label",{attrs:{for:"asset"}},[t._v("Asset:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.asset,expression:"asset"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.asset=e.target.multiple?a:a[0]}}},t._l(t.assets,function(e){return a("option",[t._v(t._s(e))])}))])])])])},r=[],i=(a("rGqo"),a("yt8O"),a("f3/d"),a("91GP"),a("LvDl")),s=a.n(i),o=(a("YIjs"),a("FhOJ"),a("wiDz"),{props:["onlyTradable","onlyImportable"],data:function(){return{exchange:"poloniex",currency:"USDT",asset:"BTC"}},created:function(){this.emitConfig()},computed:{exchanges:function(){var t=Object.assign({},this.$store.state.exchanges);return!s.a.isEmpty(t)&&(this.onlyTradable&&s.a.each(t,function(e,a){e.tradable||delete t[a]}),this.onlyImportable&&s.a.each(t,function(e,a){e.importable||delete t[a]}),t)},markets:function(){return this.exchanges?this.exchanges[this.exchange]:null},assets:function(){return this.exchanges?this.exchanges[this.exchange].markets[this.currency]:null},currencies:function(){return this.exchanges?s.a.keys(this.exchanges[this.exchange].markets):null},watchConfig:function(){return{watch:{exchange:this.exchange,currency:this.currency,asset:this.asset}}}},watch:{currency:function(){this.emitConfig()},asset:function(){this.emitConfig()},market:function(){this.emitConfig()},exchanges:function(){this.emitConfig()},exchange:function(){this.emitConfig()}},methods:{emitConfig:function(){this.$emit("market",this.watchConfig)}}}),c=o,u=a("KHd+"),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},"6Wkr":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 px1"},[a("h3",[t._v("Strategy")]),a("div",[a("label",{staticClass:"wrapper",attrs:{for:"strat"}},[t._v("Strategy:")]),a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.strategy,expression:"strategy"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.strategy=e.target.multiple?a:a[0]}}},t._l(t.strategies,function(e){return a("option",[t._v(t._s(e.name))])}))])]),a("div",[a("label",{attrs:{for:"candleSize"}},[t._v("Candle Size")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.rawCandleSize,expression:"rawCandleSize"}],domProps:{value:t.rawCandleSize},on:{input:function(e){e.target.composing||(t.rawCandleSize=e.target.value)}}})]),a("div",{staticClass:"grd-row-col-3-6 align"},[a("div",{staticClass:"custom-select button"},[a("select",{directives:[{name:"model",rawName:"v-model",value:t.candleSizeUnit,expression:"candleSizeUnit"}],on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,function(t){return t.selected}).map(function(t){var e="_value"in t?t._value:t.value;return e});t.candleSizeUnit=e.target.multiple?a:a[0]}}},[a("option",[t._v("minutes")]),a("option",[t._v("hours")]),a("option",[t._v("days")])])])])])]),a("div",[a("label",{attrs:{for:"historySize"}},[t._v("Warmup period (in "+t._s(t.rawCandleSize)+" "+t._s(t.singularCandleSizeUnit)+" candles):")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.historySize,expression:"historySize"}],domProps:{value:t.historySize},on:{input:function(e){e.target.composing||(t.historySize=e.target.value)}}}),a("em",{staticClass:"label-like"},[t._v("(will use "+t._s(t.humanizeDuration(t.candleSize*t.historySize*1e3*60))+" of data as history)")])])]),a("div",{staticClass:"grd-row-col-3-6 px1"},[a("div",[a("h3",[t._v("Parameters")]),a("p",[t._v(t._s(t.strategy)+" Parameters:")]),a("textarea",{directives:[{name:"model",rawName:"v-model",value:t.rawStratParams,expression:"rawStratParams"}],staticClass:"params",domProps:{value:t.rawStratParams},on:{input:function(e){e.target.composing||(t.rawStratParams=e.target.value)}}}),t.rawStratParamsError?a("p",{staticClass:"bg--red p1"},[t._v(t._s(t.rawStratParamsError.message))]):t._e()])])])])},r=[],i=(a("dRSK"),a("LvDl")),s=a.n(i),o=a("wiDz"),c={data:function(){return{strategies:[],candleSizeUnit:"hours",rawCandleSize:1,strategy:"MACD",historySize:10,rawStratParams:"",rawStratParamsError:!1,emptyStrat:!1,stratParams:{}}},created:function(){var t=this;Object(o["a"])("strategies",function(e,a){t.strategies=a,s.a.each(t.strategies,function(t){t.empty=""===t.params}),t.rawStratParams=s.a.find(t.strategies,{name:t.strategy}).params,t.emptyStrat=s.a.find(t.strategies,{name:t.strategy}).empty,t.emitConfig()})},watch:{strategy:function(t){t=s.a.find(this.strategies,{name:t}),this.rawStratParams=t.params,this.emptyStrat=t.empty,this.emitConfig()},candleSize:function(){this.emitConfig()},historySize:function(){this.emitConfig()},rawStratParams:function(){this.emitConfig()}},computed:{candleSize:function(){return"minutes"===this.candleSizeUnit?this.rawCandleSize:"hours"===this.candleSizeUnit?60*this.rawCandleSize:"days"===this.candleSizeUnit?60*this.rawCandleSize*24:void 0},singularCandleSizeUnit:function(){return this.candleSizeUnit.slice(0,-1)},config:function(){var t={tradingAdvisor:{enabled:!0,method:this.strategy,candleSize:+this.candleSize,historySize:+this.historySize}};return this.emptyStrat?t[this.strategy]={__empty:!0}:t[this.strategy]=this.stratParams,t}},methods:{humanizeDuration:function(t){return window.humanizeDuration(t)},emitConfig:function(){this.parseParams(),this.$emit("stratConfig",this.config)},parseParams:function(){try{this.stratParams=toml.parse(this.rawStratParams),this.rawStratParamsError=!1}catch(t){this.rawStratParamsError=t,this.stratParams={}}}}},u=c,l=(a("tr8f"),a("KHd+")),d=Object(l["a"])(u,n,r,!1,null,null,null);e["a"]=d.exports},"7LpK":function(t,e,a){},"8KAT":function(t,e,a){},"9RND":function(t){t.exports={name:"gekko",version:"0.6.6",description:"A bitcoin trading bot for auto trading at various exchanges",keywords:["trading","bot","bitcoin","TA","finance"],scripts:{test:"./node_modules/.bin/mocha test/*.js --recursive test -u tdd --reporter spec",start:"node ./gekko --config config.js --ui"},author:"Mike van Rossum ",dependencies:{async:"2.1.2","bitfinex-api-node":"^1.2.1","co-fs":"^1.2.0",commander:"^2.13.0",gekko:"0.0.9","humanize-duration":"^3.10.0",koa:"^1.2.0","koa-bodyparser":"^2.2.0","koa-cors":"0.0.16","koa-logger":"^1.3.0","koa-router":"^5.4.0","koa-static":"^2.0.0",lodash:"2.x",moment:"^2.20.1",opn:"^4.0.2","promisify-node":"^0.5.0","prompt-lite":"0.1.1",relieve:"^2.1.3",retry:"^0.10.1",semver:"5.4.1",sqlite3:"^4.0.0","stats-lite":"^2.0.4","tiny-promisify":"^0.1.1",toml:"^2.3.0",ws:"^6.0.0"},devDependencies:{chai:"^4.1.2",mocha:"^5.0.0",proxyquire:"^1.7.10",request:"^2.83.0","request-promise":"^4.2.2",sinon:"^4.2.0"},engines:{node:">=8.11.2"},license:"MIT",repository:{type:"git",url:"https://github.com/askmike/gekko.git"}}},CyGp:function(t,e,a){"use strict";var n=a("jTvs"),r=a.n(n);r.a},EAJ1:function(t,e,a){},EDI0:function(t,e,a){},EfWa:function(t,e,a){},FhOJ:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("h3",[t._v("Daterange")]),a("div",[a("label",{attrs:{for:"from"}},[t._v("From")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.from,expression:"from"}],domProps:{value:t.from},on:{input:function(e){e.target.composing||(t.from=e.target.value)}}})]),a("div",[a("label",{attrs:{for:"to"}},[t._v("To")]),a("input",{directives:[{name:"model",rawName:"v-model",value:t.to,expression:"to"}],domProps:{value:t.to},on:{input:function(e){e.target.composing||(t.to=e.target.value)}}})])])},r=[],i=(a("LvDl"),a("wiDz"),{data:function(){return{from:"",to:""}},created:function(){var t=moment().startOf("minute"),e=t.clone().subtract(3,"months");this.to=this.fmt(t),this.from=this.fmt(e),this.emitRange()},methods:{fmtTs:function(t){return moment.unix(t).utc()},fmt:function(t){return t.utc().format("YYYY-MM-DD HH:mm")},emitRange:function(){this.$emit("range",{from:this.fmtTs(this.from),to:this.fmtTs(this.to)})},emitManualEntry:function(){if(this.from.length<"4"||this.from.length<"4")return this.$emit("range",{});var t=moment.utc(this.from),e=moment.utc(this.to);t.isValid()&&e.isValid()?this.$emit("range",{from:this.fmt(t),to:this.fmt(e)}):this.$emit("range",{})}},watch:{from:function(){this.emitManualEntry()},to:function(){this.emitManualEntry()},config:function(){this.scanned=!1},tab:function(){this.scanned=!1,this.$emit("range",{})},selectedRangeIndex:function(){var t=this.ranges[this.selectedRangeIndex];t&&this.emitRange(t)}}}),s=i,o=(a("TPp/"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},"H+ir":function(t,e,a){"use strict";var n=a("5/bm"),r=a.n(n);r.a},Kd0R:function(t,e,a){},"MB/c":function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"spinner"},[a("div",{staticClass:"rect1"}),a("div",{staticClass:"rect2"}),a("div",{staticClass:"rect3"}),a("div",{staticClass:"rect4"})])}],i={},s=i,o=(a("q431"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},Pf3K:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"app"}},[a("top"),a("div",{staticClass:"fill"},[a("router-view",{staticClass:"view"})],1),a("bottom"),a("modal")],1)},r=[],i=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",[a("div",{attrs:{id:"top"}}),t._m(0),a("nav",{staticClass:"bg--light-gray"},[a("div",{staticClass:"menu contain"},[a("router-link",{staticClass:"py1",attrs:{to:"/home"}},[t._v("Home")]),a("router-link",{staticClass:"py1",attrs:{to:"/live-gekkos"}},[t._v("Live Gekkos")]),a("router-link",{staticClass:"py1",attrs:{to:"/backtest"}},[t._v("Backtest")]),a("router-link",{staticClass:"py1",attrs:{to:"/data"}},[t._v("Local data")]),a("router-link",{staticClass:"py1",attrs:{to:"/config"}},[t._v("Config")]),a("a",{staticClass:"py1",attrs:{href:"https://gekko.wizb.it/docs/introduction/about_gekko.html",target:"_blank"}},[t._v("Documentation")])],1)])])},s=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("header",{staticClass:"bg--off-white grd"},[a("div",{staticClass:"contain grd-row"},[a("h3",{staticClass:"py1 px2 col-2"},[t._v("Gekko UI")])])])}],o={},c=o,u=(a("uMTv"),a("KHd+")),l=Object(u["a"])(c,i,s,!1,null,null,null),d=l.exports,f=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("footer",{staticClass:"p2 bg--off-white"},[a("div",{staticClass:"contain"},[t._m(0),a("p",[t._v("Using Gekko v"+t._s(t.version.gekko)+" and Gekko UI v"+t._s(t.version.ui)+".")])])])},h=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("p",[a("em",[t._v("Use Gekko at your own risk.")])])}],m=a("9RND"),v=a("kiQV"),p={data:function(){return{version:{gekko:m.version,ui:v.version}}}},g=p,_=Object(u["a"])(g,f,h,!1,null,null,null),k=_.exports,y=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.active?a("div",[a("div",{attrs:{id:"modal-background"}}),a("div",{staticClass:"modal",attrs:{id:"modal"}},[a("div",{staticClass:"modal-guts",domProps:{innerHTML:t._s(t.content)}})])]):t._e()},w=[],b=a("5shn"),C={disconnected:Object(b["a"])("\n\n## Disconnected\n\nSomething happened to either Gekko or the connection.\nPlease check the terminal where Gekko is running or\nyour network connection.\n\n*This message is shown when the UI is unable to open a websocket connection with the Gekko Server.*\n\n ")},x={computed:{active:function(){return!this.$store.state.warnings.connected},content:function(){return this.$store.state.warnings.connected?"":C.disconnected}}},S=x,T=(a("TfKe"),Object(u["a"])(S,y,w,!1,null,null,null)),E=T.exports,P={name:"app",components:{top:d,bottom:k,modal:E}},A=P,z=(a("ZL7j"),Object(u["a"])(A,n,r,!1,null,null,null));e["a"]=z.exports},Q2AE:function(t,e,a){"use strict";var n={};a.r(n),a.d(n,"addImport",function(){return d}),a.d(n,"syncImports",function(){return f}),a.d(n,"updateImport",function(){return h});var r={};a.r(r),a.d(r,"syncGekkos",function(){return g}),a.d(r,"addGekko",function(){return _}),a.d(r,"updateGekko",function(){return k}),a.d(r,"archiveGekko",function(){return y}),a.d(r,"errorGekko",function(){return w}),a.d(r,"deleteGekko",function(){return b});var i={};a.r(i),a.d(i,"setGlobalWarning",function(){return C});var s={};a.r(s),a.d(s,"syncApiKeys",function(){return x}),a.d(s,"syncExchanges",function(){return S});a("VRzm");var o=a("Kw5r"),c=a("L2JU"),u=a("LvDl"),l=a.n(u),d=(a("INYr"),function(t,e){return t.imports.push(e),t}),f=function(t,e){return t.imports=e,t},h=function(t,e){var a=t.imports.findIndex(function(t){return t.id===e.import_id}),n=t.imports[a];if(!n)return t;var r=o["a"].util.extend(n,e.updates);return o["a"].set(t.imports,a,r),t},m=a("oyJW"),v=a("yT7P"),p=a("c7Wa"),g=function(t,e){return e?(t.gekkos=e.live,t.archivedGekkos=e.archive,t):t},_=function(t,e){return t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,e)),t},k=function(t,e){return e.id&&l.a.has(t.gekkos,e.id)?(t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,p(t.gekkos[e.id],e.event))),t):console.error("cannot update unknown gekko..")},y=function(t,e){return l.a.has(t.gekkos,e)?(t.archivedGekkos=Object(v["a"])({},t.archivedGekkos,Object(m["a"])({},e,Object(v["a"])({},t.gekkos[e],{stopped:!0,active:!1}))),t.gekkos=l.a.omit(t.gekkos,e),t):console.error("cannot archive unknown gekko..")},w=function(t,e){return l.a.has(t.gekkos,e.id)?(t.gekkos=Object(v["a"])({},t.gekkos,Object(m["a"])({},e.id,Object(v["a"])({},t.gekkos[e.id],{errored:!0,errorMessage:e.error}))),t):console.error("cannot error unknown gekko..")},b=function(t,e){return l.a.has(t.archivedGekkos,e)?(t.archivedGekkos=l.a.omit(t.archivedGekkos,e),t):console.error("cannot delete unknown gekko..")},C=function(t,e){return t.warnings[e.key]=e.value,t},x=function(t,e){return o["a"].set(t,"apiKeys",e),t},S=function(t,e){return o["a"].set(t,"exchanges",e),t};o["a"].use(c["a"]);var T=!1,E={};l.a.merge(E,n),l.a.merge(E,r),l.a.merge(E,i),l.a.merge(E,s);e["a"]=new c["a"].Store({state:{warnings:{connected:!0},imports:[],gekkos:{},archivedGekkos:{},connection:{disconnected:!1,reconnected:!1},apiKeys:[],exchanges:{}},mutations:E,strict:T})},Q6eY:function(t,e,a){"use strict";var n=a("SDwi"),r=a.n(n);r.a},SDwi:function(t,e,a){},SWS5:function(t,e,a){},T0Mt:function(t,e,a){"use strict";var n=a("pd3X"),r=a.n(n);r.a},TDb6:function(t,e,a){},"TPp/":function(t,e,a){"use strict";var n=a("7LpK"),r=a.n(n);r.a},TfKe:function(t,e,a){"use strict";var n=a("ZpQ2"),r=a.n(n);r.a},UeuA:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{class:{clickable:!t.isClicked},attrs:{id:"chartWrapper"}},[a("div",{staticClass:"shield",on:{click:function(e){return e.preventDefault(),t.click(e)}}}),a("svg",{attrs:{id:"chart",width:"960",height:t.height}})])},r=[],i=a("k5N+"),s=a("LvDl"),o=a.n(s),c=function(t,e,a){var n=function(t){return o.a.isNumber(t)?moment.unix(t).utc().toDate():moment.utc(t).toDate()},r=e.map(function(t){return{price:t.price,date:n(t.date),action:t.action}}),s=t.map(function(t){return{price:t.open,date:n(t.start)}}),c=s.map(function(t){return+t.date}),u=s.map(function(t){return+t.price}),l=d3.select("#chart");l.attr("width",window.innerWidth-20);var d={top:20,right:20,bottom:110,left:40},f=a-d.top-d.bottom,h={top:a-70,right:20,bottom:30,left:40},m=+l.attr("width")-d.left-d.right,v=a-h.top-h.bottom,p=d3.scaleUtc().range([0,m]),g=d3.scaleUtc().range([0,m]),_=d3.scaleLinear().range([f,0]),k=d3.scaleLinear().range([v,0]),y=d3.axisBottom(p),w=d3.axisBottom(g),b=d3.axisLeft(_).ticks(a/50),C=d3.brushX().extent([[0,0],[m,v]]).on("brush end",z),x=d3.zoom().scaleExtent([1,100]).translateExtent([[0,0],[m,f]]).extent([[0,0],[m,f]]).on("zoom",$),S=d3.line().x(function(t){return p(t.date)}).y(function(t){return _(t.price)}),T=d3.line().x(function(t){return g(t.date)}).y(function(t){return k(t.price)});l.append("defs").append("clipPath").attr("id","clip").append("rect").attr("width",m).attr("height",f);var E=l.append("g").attr("class","focus").attr("transform","translate("+d.left+","+d.top+")"),P=l.append("g").attr("class","context").attr("transform","translate("+h.left+","+h.top+")");p.domain(d3.extent(s,function(t){return t.date})),_.domain([.99*d3.min(u),1.01*d3.max(u)]),g.domain(p.domain()),k.domain(_.domain()),E.append("path").datum(s).attr("class","line price").attr("d",S),E.append("g").attr("class","axis axis--x").attr("transform","translate(0,"+f+")").call(y),E.append("g").attr("class","axis axis--y").call(b),P.append("path").datum(s).attr("class","line").attr("d",T),P.append("g").attr("class","axis axis--x").attr("transform","translate(0,"+v+")").call(w);var A=l.append("g").attr("transform","translate("+d.left+","+d.top+")").selectAll("circle").data(r).enter().append("circle").attr("class",function(t){return t.action}).attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}).attr("r",5);P.append("g").selectAll("circle").data(r).enter().append("circle").attr("class",function(t){return t.action}).attr("cx",function(t){return g(t.date)}).attr("cy",function(t){return k(t.price)}).attr("r",3);function z(){if(!d3.event.sourceEvent||"zoom"!==d3.event.sourceEvent.type){var t=d3.event.selection||g.range();p.domain(t.map(g.invert,g)),D(p.domain()),l.select(".axis--y").call(b),A.attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}),E.select(".line").attr("d",S),E.select(".axis--x").call(y),l.select(".zoom").call(x.transform,d3.zoomIdentity.scale(m/(t[1]-t[0])).translate(-t[0],0))}}function D(t){var e=Object(i["a"])(t,2),a=e[0],n=e[1],r=o.a.sortedIndex(c,a),s=o.a.sortedIndex(c,n),l=u.slice(r,s);_.domain([.9995*d3.min(l),1.0005*d3.max(l)])}function $(){if(!d3.event.sourceEvent||"brush"!==d3.event.sourceEvent.type){var t=d3.event.transform;D(t.rescaleX(g).domain()),l.select(".axis--y").call(b),p.domain(t.rescaleX(g).domain()),E.select(".line").attr("d",S),A.attr("cx",function(t){return p(t.date)}).attr("cy",function(t){return _(t.price)}),E.select(".axis--x").call(y),P.select(".brush").call(C.move,p.range().map(t.invertX,t))}}P.append("g").attr("class","brush").call(C).call(C.move,p.range()),l.append("rect").attr("class","zoom").attr("width",m).attr("height",f).attr("transform","translate("+d.left+","+d.top+")").call(x)},u=(a("dRSK"),function(t){d3.select("#chart").append("text").attr("class","message").attr("x",150).attr("y",150).text(t)}),l=4,d={props:["data","height"],data:function(){return{isClicked:!1}},watch:{data:function(){this.render()}},created:function(){setTimeout(this.render,100)},beforeDestroy:function(){this.remove()},methods:{click:function(){this.isClicked=!0},render:function(){this.remove(),_.size(this.data.candles)0?"profit":"loss"}}},$=D,j=(a("WlXR"),Object(g["a"])($,P,A,!1,null,null,null)),O=j.exports,M=a("UeuA"),G=a("vf3E"),I={props:["result"],data:function(){return{}},methods:{},components:{roundtripTable:G["a"],resultSummary:O,chart:M["a"]},computed:{candles:function(){return{candles:this.result.stratCandles,trades:this.result.trades}}}},R=I,H=(a("wVP4"),Object(g["a"])(R,T,E,!1,null,null,null)),K=H.exports,Y={data:function(){return{backtestable:!1,backtestState:"idle",backtestResult:!1,config:!1}},methods:{check:function(t){if(this.config=t,!t.valid)return this.backtestable=!1;this.backtestable=!0},run:function(){var t=this;this.backtestState="fetching",Object(f["b"])("backtest",this.config,function(e,a){t.backtestState="fetched",t.backtestResult=a})}},components:{configBuilder:S,result:K,spinner:h["a"]}},W=Y,N=Object(g["a"])(W,n,r,!1,null,null,null);e["a"]=N.exports},c7Wa:function(t,e){const a=["marketUpdate"],n=["marketStart","stratWarmupCompleted"],r=["tradeCompleted","advice","roundtrip"],i=(t,e)=>{const i=e.type,s=e.payload;return t={...t,latestUpdate:new Date},r.includes(i)&&(t=t.events[i]?{...t,events:{...t.events,[i]:[...t.events[i],s]}}:{...t,events:{...t.events,[i]:[s]}}),t.events.initial[i]||a.includes(i)||(t={...t,events:{...t.events,initial:{...t.events.initial,[i]:s}}}),n.includes(i)||(t={...t,events:{...t.events,latest:{...t.events.latest,[i]:s}}}),t};t.exports=i},dHeD:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain"},[a("div",{staticClass:"text",domProps:{innerHTML:t._s(t.intro)}}),a("div",{staticClass:"hr"}),a("h2",[t._v("Available datasets")]),"idle"===t.datasetScanstate?a("div",{staticClass:"txt--center my2"},[a("a",{staticClass:"w100--s btn--primary scan-btn",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.scan(e)}}},[t._v("Scan available data")])]):t._e(),"scanning"===t.datasetScanstate?a("div",{staticClass:"txt--center my2"},[a("spinner")],1):t._e(),"scanned"===t.datasetScanstate?a("div",{staticClass:"my2"},[t.unscannableMakets.length?a("div",{staticClass:"bg--orange p1 warning my1"},[t.viewUnscannable?t._e():a("p",{staticClass:"clickable",on:{click:function(e){return e.preventDefault(),t.toggleUnscannable(e)}}},[t._v("Some markets were unscannable, click here for details.")]),t.viewUnscannable?[a("p",[t._v("Unable to find datasets in the following markets:")]),t._l(t.unscannableMakets,function(e){return a("div",{staticClass:"mx2"},[t._v("- "+t._s(e.exchange)+":"+t._s(e.currency)+":"+t._s(e.asset))])})]:t._e()],2):t._e(),t.datasets.length?[a("table",{staticClass:"full data"},[t._m(0),a("tbody",t._l(t.datasets,function(e){return a("tr",[a("td",[t._v(t._s(e.exchange))]),a("td",[t._v(t._s(e.currency))]),a("td",[t._v(t._s(e.asset))]),a("td",[t._v(t._s(t.fmt(e.from)))]),a("td",[t._v(t._s(t.fmt(e.to)))]),a("td",[t._v(t._s(t.humanizeDuration(e.to.diff(e.from))))])])}))])]:t._e(),t.datasets.length?t._e():[a("p",[t._v("It looks like you don't have any local data yet.")])]],2):t._e(),a("div",{staticClass:"my2"},[a("h2",[t._v("Import more data")]),a("p",{staticClass:"text"},[t._v("You can easily import more market data directly from exchanges using the importer.")]),a("router-link",{staticClass:"btn--primary",attrs:{to:"/data/importer"}},[t._v("Go to the importer!")])],1)])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("from")]),a("th",[t._v("to")]),a("th",[t._v("duration")])])])}],i=(a("VRzm"),a("MB/c")),s=a("5shn"),o=a("spvI"),c=Object(s["a"])("\n\n## Local data\n\nGekko needs local market data in order to backtest strategies. The local\ndata can also be used in a warmup period when running a strategy against a\nlive market.\n\n"),u={mixins:[o["a"]],components:{spinner:i["a"]},data:function(){return{intro:c,viewUnscannable:!1}},methods:{toggleUnscannable:function(){this.viewUnscannable=!0},humanizeDuration:function(t){return window.humanizeDuration(t)},fmt:function(t){return t.format("YYYY-MM-DD HH:mm")}}},l=u,d=(a("2rY9"),a("KHd+")),f=Object(d["a"])(l,n,r,!1,null,null,null);e["a"]=f.exports},dW8q:function(t,e,a){"use strict";var n=a("w3yp"),r=a.n(n);r.a},daul:function(t,e,a){"use strict";var n=a("Kd0R"),r=a.n(n);r.a},g298:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[t.data&&!t.data.done?a("div",[a("h2",[t._v("Importing data..")]),a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[t._m(0),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.data.watch.exchange))])]),a("div",{staticClass:"grd-row"},[t._m(1),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.data.watch.currency)+"/"+t._s(t.data.watch.asset))])])]),a("div",{staticClass:"grd"},[a("div",{staticClass:"grd-row"},[t._m(2),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.from)))])]),a("div",{staticClass:"grd-row"},[t._m(3),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.to)))])]),t.initialized?a("div",{staticClass:"grd-row"},[t._m(4),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.latest)))])]):t._e(),t.initialized?a("div",{staticClass:"grd-row"},[t._m(5),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fromEnd))])]):t._e()]),t.initialized?t._e():a("spinner"),t.initialized?a("div",{staticClass:"contain"},[a("progressBar",{attrs:{progress:t.progress}})],1):t._e(),a("p",[a("em",[t._v("(you don't have to wait until the import is done,you can already start "),a("router-link",{attrs:{to:"/backtest"}},[t._v("backtesting")]),t._v(").")],1)])],1):t._e(),t.data&&t.data.done?a("div",{staticClass:"txt--center"},[a("h2",[t._v("Import done")]),a("p",[t._v(" Go and "),a("router-link",{attrs:{to:"/backtest"}},[t._v("backtest")]),t._v(" with your new data!")],1)]):t._e(),t.data?t._e():a("div",{staticClass:"txt--center"},[a("h2",[t._v("ERROR: Unknown import")]),a("p",[a("I",[t._v("don't know this import..")])],1)])])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Market:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Currency/Asset:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("From:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("To:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Imported data until:")])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-2-6"},[a("strong",[t._v("Remaining:")])])}],i=(a("dRSK"),a("LvDl")),s=a.n(i),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return t.progress?a("div",{staticClass:"progressbarWrapper"},[a("p",[a("strong",[t._v(t._s(t.round(t.progress))+"%")])]),a("div",{staticClass:"progressbar"},[a("div",{style:{width:t.progress+"%"}})])]):t._e()},c=[],u={props:["progress"],methods:{round:function(t){return(+t).toFixed(2)}}},l=u,d=(a("/vJE"),a("KHd+")),f=Object(d["a"])(l,o,c,!1,null,null,null),h=f.exports,m=a("MB/c"),v={components:{progressBar:h,spinner:m["a"]},computed:{data:function(){return s.a.find(this.$store.state.imports,{id:this.$route.params.id})},initialized:function(){if(this.data&&this.latest.isValid())return!0},latest:function(){if(this.data)return this.mom(this.data.latest)},fromEndMs:function(){if(this.data)return this.to.diff(this.latest)},fromEnd:function(){return this.latest?humanizeDuration(this.fromEndMs):"LOADING"},from:function(){if(this.data)return this.mom(this.data.from)},to:function(){if(this.data)return this.mom(this.data.to)},timespan:function(){if(this.data)return this.to.diff(this.from)},progress:function(){if(this.data){var t=this.timespan-this.fromEndMs;return 100*t/this.timespan}}},methods:{fmt:function(t){return t.format("YYYY-MM-DD HH:mm:ss")},mom:function(t){return moment.utc(t)}}},p=v,g=(a("qDq4"),Object(d["a"])(p,n,r,!1,null,null,null));e["a"]=g.exports},gYof:function(t,e,a){"use strict";a("LvDl");var n=a("Kw5r"),r=a("r0f2"),i=(a("L2JU"),a("wiDz")),s=a("Q2AE"),o=function(){Object(i["a"])("imports",function(t,e){s["a"].commit("syncImports",e)})},c=function(){C.$on("import_update",function(t){s["a"].commit("updateImport",t)})},u=function(){o(),c()},l=function(){Object(i["a"])("gekkos",function(t,e){var a=e;s["a"].commit("syncGekkos",a)})},d=function(){C.$on("gekko_new",function(t){return s["a"].commit("addGekko",t.state)}),C.$on("gekko_event",function(t){return s["a"].commit("updateGekko",t)}),C.$on("gekko_archived",function(t){return s["a"].commit("archiveGekko",t.id)}),C.$on("gekko_error",function(t){return s["a"].commit("errorGekko",t)}),C.$on("gekko_deleted",function(t){return s["a"].commit("deleteGekko",t.id)})},f=function(){l(),d()},h=function(){},m=function(){C.$on("WS_STATUS_CHANGE",function(t){return s["a"].commit("setGlobalWarning",{key:"connected",value:t.connected})})},v=function(){h(),m()},p=a("k5N+"),g=(a("rGqo"),function(t){if(!t)return{};var e=t,a={};return e.forEach(function(t){a[t.slug]=a[t.slug]||{markets:{}},t.markets.forEach(function(e){var n=Object(p["a"])(e["pair"],2),r=n[0],i=n[1];a[t.slug].markets[r]=a[t.slug].markets[r]||[],a[t.slug].markets[r].push(i)}),"exchangeMaxHistoryAge"in t&&(a[t.slug].exchangeMaxHistoryAge=t.exchangeMaxHistoryAge),a[t.slug].importable=!!t.providesFullHistory,a[t.slug].tradable=!!t.tradable,a[t.slug].requires=t.requires}),a}),_=function(){Object(i["a"])("apiKeys",function(t,e){s["a"].commit("syncApiKeys",e)}),Object(i["a"])("exchanges",function(t,e){s["a"].commit("syncExchanges",g(e))})},k=function(){C.$on("apiKeys",function(t){s["a"].commit("syncApiKeys",t.exchanges)})},y=function(){_(),k()},w=function(){u(),f(),v(),y()};a.d(e,"a",function(){return C}),a.d(e,"b",function(){return S});var b=null,C=new n["a"];C.$on("gekko_update",function(t){return console.log(t)}),C.$on("import_update",function(t){return console.log(t)}),C.$on("import_error",function(t){alert("IMPORT ERROR: "+t.error)});var x={connected:!1},S=function(){b=new ReconnectingWebSocket(r["b"],null,{maxReconnectInterval:4e3}),setTimeout(function(){x.connected||(w(),C.$emit("WS_STATUS_CHANGE",x))},500),b.onopen=function(){x.connected||(x.connected=!0,C.$emit("WS_STATUS_CHANGE",x),w())},b.onclose=function(){x.connected&&(x.connected=!1,C.$emit("WS_STATUS_CHANGE",x))},b.onerror=function(){x.connected&&(x.connected=!1,C.$emit("WS_STATUS_CHANGE",x))},b.onmessage=function(t){var e=JSON.parse(t.data);C.$emit(e.type,e)}}},h8ks:function(t,e,a){},hGnM:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain py2"},[a("h3",[t._v("Market watchers")]),t.watchers.length?t._e():a("div",{staticClass:"text"},[a("p",[t._v("You don't have any market watchers.")])]),t.watchers.length?a("table",{staticClass:"full clickable"},[t._m(0),a("tbody",t._l(t.watchers,function(e){return a("tr",{staticClass:"clickable",on:{click:function(a){t.$router.push({path:"/live-gekkos/"+e.id})}}},[a("td",[t._v(t._s(e.config.watch.exchange))]),a("td",[t._v(t._s(e.config.watch.currency))]),a("td",[t._v(t._s(e.config.watch.asset))]),a("td",[t._v(t._s(t.status(e)))]),a("td",[e.events.initial.candle?[t._v(t._s(t.fmt(e.events.initial.candle.start)))]:t._e()],2),a("td",[e.events.latest.candle?[t._v(t._s(t.fmt(e.events.latest.candle.start)))]:t._e()],2),a("td",[e.events.initial.candle&&e.events.latest.candle?[t._v(t._s(t.timespan(e.events.latest.candle.start,e.events.initial.candle.start)))]:t._e()],2)])}))]):t._e(),a("h3",[t._v("Strat runners")]),t.stratrunners.length?t._e():a("div",{staticClass:"text"},[a("p",[t._v("You don't have any stratrunners.")])]),t.stratrunners.length?a("table",{staticClass:"full"},[t._m(1),a("tbody",t._l(t.stratrunners,function(e){return a("tr",{staticClass:"clickable",on:{click:function(a){t.$router.push({path:"/live-gekkos/"+e.id})}}},[a("td",[t._v(t._s(e.config.watch.exchange))]),a("td",[t._v(t._s(e.config.watch.currency))]),a("td",[t._v(t._s(e.config.watch.asset))]),a("td",[t._v(t._s(t.status(e)))]),a("td",[e.events.initial.candle&&e.events.latest.candle?[t._v(t._s(t.timespan(e.events.latest.candle.start,e.events.initial.candle.start)))]:t._e()],2),a("td",[t._v(t._s(e.config.tradingAdvisor.method))]),a("td",[t.report(e)?t._e():[t._v("0")],t.report(e)?[t._v(t._s(t.round(t.report(e).profit))+" "+t._s(t.report(e).currency))]:t._e()],2),a("td",[t._v(t._s(e.logType))]),a("td",[e.events.tradeCompleted?t._e():[t._v("0")],e.events.tradeCompleted?[t._v(t._s(e.events.tradeCompleted.length))]:t._e()],2)])}))]):t._e(),a("div",{staticClass:"hr"}),a("h2",[t._v("Start a new live Gekko")]),a("router-link",{staticClass:"btn--primary",attrs:{to:"/live-gekkos/new"}},[t._v("Start a new live Gekko!")])],1)},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("status")]),a("th",[t._v("started at")]),a("th",[t._v("last update")]),a("th",[t._v("duration")])])])},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("thead",[a("tr",[a("th",[t._v("exchange")]),a("th",[t._v("currency")]),a("th",[t._v("asset")]),a("th",[t._v("status")]),a("th",[t._v("duration")]),a("th",[t._v("strategy")]),a("th",[t._v("PnL")]),a("th",[t._v("type")]),a("th",[t._v("trades")])])])}],i=(a("a1Th"),a("rGqo"),a("yt8O"),a("VRzm"),{created:function(){var t=this;this.timer=setInterval(function(){t.now=moment()},1e3)},destroyed:function(){clearTimeout(this.timer)},data:function(){return{timer:!1,now:moment()}},computed:{stratrunners:function(){return _.values(this.$store.state.gekkos).concat(_.values(this.$store.state.archivedGekkos)).filter(function(t){return"papertrader"===t.logType||"tradebot"===t.logType})},watchers:function(){return _.values(this.$store.state.gekkos).concat(_.values(this.$store.state.archivedGekkos)).filter(function(t){return"watcher"===t.logType})}},methods:{humanizeDuration:function(t){return window.humanizeDuration(t)},moment:function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(t){return moment.utc(t)}),fmt:function(t){return moment.utc(t).format("YYYY-MM-DD HH:mm")},round:function(t){return(+t).toFixed(3)},timespan:function(t,e){return this.humanizeDuration(this.moment(t).diff(this.moment(e)))},status:function(t){return t.errored?"errored":t.stopped?"stopped":t.active?"running":void console.log("unknown state:",t)},report:function(t){return _.get(t,"events.latest.performanceReport")}}}),s=i,o=(a("daul"),a("KHd+")),c=Object(o["a"])(s,n,r,!1,null,null,null);e["a"]=c.exports},jTvs:function(t,e,a){},jVW9:function(t,e,a){},jf14:function(t,e,a){},jloR:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain my2"},[a("div",{staticClass:"text",domProps:{innerHTML:t._s(t.intro)}}),a("div",{staticClass:"hr"}),a("h3",[t._v("Currently running imports")]),0===t.imports.length?a("p",[t._v("You currently don't have any imports running.")]):t._e(),t.imports.length?a("ul",t._l(t.imports,function(e){return a("li",[a("router-link",{attrs:{to:"/data/importer/import/"+e.id}},[t._v(t._s(e.watch.exchange)+":"+t._s(e.watch.currency)+"/"+t._s(e.watch.asset))])],1)})):t._e(),a("div",{staticClass:"hr"}),a("h3",[t._v("Start a new import")]),a("import-config-builder",{on:{config:t.updateConfig}}),a("div",{staticClass:"hr"}),a("div",{staticClass:"txt--center"},[a("a",{staticClass:"w100--s my1 btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.run(e)}}},[t._v("Import")])])],1)},r=[],i=a("wiDz"),s=a("MB/c"),o=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("h3",[t._v("Market")]),a("market-picker",{attrs:{"only-importable":"true"},on:{market:t.updateMarketConfig}})],1),a("div",{staticClass:"grd-row-col-3-6 mx1"},[a("range-creator",{on:{range:t.updateRange}})],1)])])},c=[],u=(a("91GP"),a("6BxS")),l=a("FhOJ"),d=(a("LvDl"),{data:function(){return{market:{},range:{}}},components:{marketPicker:u["a"],rangeCreator:l["a"]},computed:{config:function(){var t={};return Object.assign(t,this.market,{importer:{daterange:this.range}},{candleWriter:{enabled:!0}}),t}},methods:{updateMarketConfig:function(t){this.market=t,this.emitConfig()},updateRange:function(t){this.range=t,this.emitConfig()},emitConfig:function(){this.$emit("config",this.config)}}}),f=d,h=(a("H+ir"),a("KHd+")),m=Object(h["a"])(f,o,c,!1,null,null,null),v=m.exports,p=a("5shn"),g=Object(p["a"])("\n\n## Import data\n\nThe importer can download historical market data directly from the exchange.\n\n"),_={components:{importConfigBuilder:v,spinner:s["a"]},data:function(){return{intro:g,config:{}}},computed:{imports:function(){return this.$store.state.imports}},methods:{daysApart:function(t){var e=moment(t.to),a=moment(t.from);return e.diff(a,"days")},updateConfig:function(t){this.config=t},run:function(){var t=this,e=this.daysApart(this.config.importer.daterange);if(e<1)return alert("You can only import at least one day of data..");var a=this.$store.state.exchanges[this.config.watch.exchange];if("exchangeMaxHistoryAge"in a&&moment(this.config.importer.daterange.from) 1%","last 2 versions","not ie <= 8"]}},ldlP:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("section",{staticClass:"contain grd-row"},[a("div",{staticClass:"grd-row-col-3-6",domProps:{innerHTML:t._s(t.left)}}),t._m(0)])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd-row-col-3-6 txt--center"},[a("img",{attrs:{src:"static/gekko.jpg"}}),a("p",[a("em",[t._v("The most valuable commodity I know of is information.")])])])}],i=(a("VRzm"),a("5shn")),s=Object(i["a"])("\n\n## Gekko\n\nGekko is a Bitcoin trading bot and backtesting platform that\nconnects to popular Bitcoin exchanges. It is written in javascript\nand runs on nodejs.\n\n[Find out more](https://gekko.wizb.it/).\n\n*Gekko is 100% free (open source), if you paid for this you have been scammed.*\n\n"),o={data:function(){return{left:s}}},c=o,u=a("KHd+"),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},mf2E:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"my2"},[t.data?t._e():a("div",{staticClass:"contain"},[a("h1",[t._v("Unknown Gekko instance")]),a("p",[t._v("Gekko doesn't know what gekko this is...")])]),t.data?a("div",[a("h2",{staticClass:"contain"},[t._v("Gekko "+t._s(t.type))]),t.isArchived?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This is an archived Gekko, it is currently not running anymore.")]):t._e(),t.data.errorMessage?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This is Gekko crashed with the following error: "+t._s(t.data.errorMessage))]):t._e(),a("div",{staticClass:"grd contain"},[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Market")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Exchange")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.exchange))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Currency")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.currency))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Asset")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.config.watch.asset))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Type")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.type))])])]),a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Runtime")]),t.isLoading?a("spinner"):t._e(),t.isLoading?t._e():[t.initialEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Watching since")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.initialEvents.candle.start)))])]):t._e(),t.latestEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Received data until")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.fmt(t.latestEvents.candle.start)))])]):t._e(),t.latestEvents.candle?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Data spanning")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.humanizeDuration(t.moment(t.latestEvents.candle.start).diff(t.moment(t.initialEvents.candle.start)))))])]):t._e(),t.isStratrunner?[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Amount of trades")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.trades.length))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("Candle size")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.config.tradingAdvisor.candleSize))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-2-6"},[t._v("History size")]),a("div",{staticClass:"grd-row-col-4-6"},[t._v(t._s(t.config.tradingAdvisor.historySize))])])]:t._e()]],2)]),t.warmupRemaining?a("div",{staticClass:"contain brdr--mid-gray p1 bg--orange"},[t._v("This stratrunner is still warming up for the next "),a("i",[t._v(t._s(t.warmupRemaining.replace(","," and ")))]),t._v(", it will not trade until it is warmed up.")]):t._e(),t.isStratrunner?a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Strategy")]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Name")]),a("div",{staticClass:"grd-row-col-3-6"},[a("strong",[t._v(t._s(t.stratName))])])]),t._v("Parameters"),a("pre",[t._v(t._s(t.stratParams))])]),a("div",{staticClass:"grd-row-col-3-6"},[a("h3",[t._v("Profit report")]),t.report?t._e():[a("p",[t.isArchived?a("em",[t._v("This Gekko never executed a trade..")]):t._e(),t.isArchived?t._e():a("em",[t._v("Waiting for at least one trade..")])])],t.report?[a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Start balance")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.startBalance)))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Current balance")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.balance)))])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Market")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.market/100*t.report.startPrice))+" "+t._s(t.config.watch.currency)+" ("+t._s(t.round(t.report.market))+" %)")])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Profit")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.profit))+" "+t._s(t.config.watch.currency)+" ("+t._s(t.round(t.report.relativeProfit))+" %)")])]),a("div",{staticClass:"grd-row"},[a("div",{staticClass:"grd-row-col-3-6"},[t._v("Alpha")]),a("div",{staticClass:"grd-row-col-3-6"},[t._v(t._s(t.round(t.report.alpha))+" "+t._s(t.config.watch.currency))])])]:t._e()],2)]):t._e(),!t.isStratrunner||t.watcher||t.isArchived?t._e():a("p",[t._v("WARNING: stale gekko, not attached to a watcher, please report "),a("a",{attrs:{href:"https://github.com/askmike/gekko/issues"}},[t._v("here")]),t._v(".")]),t.isArchived?t._e():a("p",[a("a",{staticClass:"w100--s my1 btn--red",on:{click:t.stopGekko}},[t._v("Stop Gekko")])]),t.isArchived?a("p",[a("a",{staticClass:"w100--s my1 btn--red",on:{click:t.deleteGekko}},[t._v("Delete Gekko")])]):t._e(),t.isStratrunner&&t.watcher&&!t.isArchived?a("p",[a("em",[t._v("This gekko gets market data from "),a("router-link",{attrs:{to:"/live-gekkos/"+t.watcher.id}},[t._v("this market watcher")])],1),t._v(".")]):t._e()]),t.isLoading?t._e():[a("h3",{staticClass:"contain"},[t._v("Market graph")]),"fetching"===t.candleFetch?a("spinner"):t._e(),"fetched"===t.candleFetch?[a("chart",{attrs:{data:t.chartData,height:300}})]:t._e(),t.isStratrunner?a("roundtrips",{attrs:{roundtrips:t.roundtrips}}):t._e()]],2):t._e()])},r=[],i=(a("a1Th"),a("dRSK"),a("VRzm"),a("Kw5r")),s=a("LvDl"),o=a.n(s),c=a("wiDz"),u=a("MB/c"),l=a("UeuA"),d=a("vf3E"),f=a("0Bu0"),h={created:function(){this.isLoading||this.getCandles()},components:{spinner:u["a"],chart:l["a"],paperTradeSummary:f["a"],roundtrips:d["a"]},data:function(){return{candleFetch:"idle",candles:!1}},computed:{id:function(){return this.$route.params.id},gekkos:function(){return this.$store.state.gekkos},archivedGekkos:function(){return this.$store.state.archivedGekkos},data:function(){return!!this.gekkos&&(o.a.has(this.gekkos,this.id)?this.gekkos[this.id]:!!o.a.has(this.archivedGekkos,this.id)&&this.archivedGekkos[this.id])},config:function(){return o.a.get(this,"data.config")},latestEvents:function(){return o.a.get(this,"data.events.latest")},initialEvents:function(){return o.a.get(this,"data.events.initial")},trades:function(){return o.a.get(this,"data.events.tradeCompleted")||[]},roundtrips:function(){return o.a.get(this,"data.events.roundtrip")||[]},isLive:function(){return o.a.has(this.gekkos,this.id)},type:function(){return this.data.logType},isStratrunner:function(){return"watcher"!==this.type},isArchived:function(){return this.data.stopped},warmupRemaining:function(){if(!this.isStratrunner)return!1;if(this.isArchived)return!1;if(this.initialEvents.stratWarmupCompleted)return!1;if(!this.initialEvents.candle)return!1;var t=o.a.get(this.config,"tradingAdvisor.historySize");if(!t)return!1;var e=o.a.get(this.config,"tradingAdvisor.candleSize")*t;return humanizeDuration(moment(this.initialEvents.candle.start).add(e,"m").diff(moment()),{largest:2})},chartData:function(){return{candles:this.candles,trades:this.trades}},report:function(){return o.a.get(this.latestEvents,"performanceReport")},stratName:function(){if(this.data)return this.data.config.tradingAdvisor.method},stratParams:function(){if(!this.data)return"Loading...";var t=i["a"].util.extend({},this.data.config[this.stratName]);return delete t.__empty,o.a.isEmpty(t)?"No parameters":JSON.stringify(t,null,4)},isLoading:function(){return!this.data||(!o.a.get(this.data,"events.initial.candle")||!o.a.get(this.data,"events.latest.candle"))},watcher:function(){var t=this;if(!this.isStratrunner)return!1;var e=i["a"].util.extend({},this.data.config.watch);return o.a.find(this.gekkos,function(a){return a.id!==t.id&&o.a.isEqual(e,a.config.watch)})},hasLeechers:function(){var t=this;if(this.isStratrunner)return!1;var e=i["a"].util.extend({},this.data.config.watch);return o.a.find(this.gekkos,function(a){return a.id!==t.id&&o.a.isEqual(e,a.config.watch)})}},watch:{"data.events.latest.candle.start":function(){setTimeout(this.getCandles,o.a.random(100,2e3))}},methods:{round:function(t){return(+t).toFixed(5)},humanizeDuration:function(t,e){return window.humanizeDuration(t,e)},moment:function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}(function(t){return moment.utc(t)}),fmt:function(t){return moment.utc(t).format("YYYY-MM-DD HH:mm")},getCandles:function(){var t=this;if(!this.isLoading&&"fetching"!==this.candleFetch){this.candleFetch="fetching";var e=this.data.events.latest.candle.start,a=this.data.events.initial.candle.start,n=1;"watcher"!==this.type&&(n=this.data.config.tradingAdvisor.candleSize);var r={watch:this.data.config.watch,daterange:{to:e,from:a},candleSize:n};setTimeout(function(){Object(c["b"])("getCandles",r,function(e,a){if(t.candleFetch="fetched",!a||a.error||!o.a.isArray(a))return console.log(a);t.candles=a.map(function(t){return t.start=moment.unix(t.start).utc().format(),t})})},o.a.random(150,2500))}},stopGekko:function(){if(this.hasLeechers)return alert("This Gekko is fetching market data for multiple stratrunners, stop these first.");confirm("Are you sure you want to stop this Gekko?")&&Object(c["b"])("stopGekko",{id:this.data.id},function(t,e){console.log("stopped gekko")})},deleteGekko:function(){var t=this;if(!this.isArchived)return alert("This Gekko is still running, stop it first!");confirm("Are you sure you want to delete this Gekko?")&&Object(c["b"])("deleteGekko",{id:this.data.id},function(e,a){t.$router.push({path:"/live-gekkos/"})})}}},m=h,v=(a("/Dpa"),a("KHd+")),p=Object(v["a"])(m,n,r,!1,null,null,null);e["a"]=p.exports},ngcj:function(t,e,a){"use strict";var n=a("EAJ1"),r=a.n(n);r.a},nzng:function(t,e,a){},pd3X:function(t,e,a){},pyMo:function(t,e,a){},q431:function(t,e,a){"use strict";var n=a("ydmZ"),r=a.n(n);r.a},qDq4:function(t,e,a){"use strict";var n=a("nzng"),r=a.n(n);r.a},r0f2:function(t,e,a){"use strict";a.d(e,"b",function(){return i}),a.d(e,"a",function(){return r});var n,r,i,s=window.CONFIG.ui,o="".concat(s.host).concat(80===s.port?"":":".concat(s.port)).concat(s.path);n=s.ssl?"https://".concat(o):"http://".concat(o),r=n+"api/",i=s.ssl?"wss://".concat(o,"api"):"ws://".concat(o,"api")},rloZ:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"grd"},[a("div",{staticClass:"px1"},[a("h3",[t._v("Paper trader")]),"closed"===t.toggle?a("a",{staticClass:"btn--primary",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.switchToggle(e)}}},[t._v("Change paper trader settings")]):t._e(),"open"===t.toggle?[a("p",[t._v("Settings:")]),a("textarea",{directives:[{name:"model",rawName:"v-model",value:t.rawPaperTraderParams,expression:"rawPaperTraderParams"}],staticClass:"params",domProps:{value:t.rawPaperTraderParams},on:{input:function(e){e.target.composing||(t.rawPaperTraderParams=e.target.value)}}}),t.rawPaperTraderParamsError?a("p",{staticClass:"bg--red p1"},[t._v(t._s(t.rawPaperTraderParamsError.message))]):t._e()]:t._e()],2)])},r=[],i=(a("LvDl"),a("wiDz")),s={created:function(){var t=this;Object(i["a"])("configPart/paperTrader",function(e,a){t.rawPaperTraderParams=a.part})},data:function(){return{rawPaperTraderParams:"",rawPaperTraderParamsError:!1,paperTraderParams:{},toggle:"closed"}},watch:{rawPaperTraderParams:function(){this.emitConfig()}},methods:{switchToggle:function(){"open"===this.toggle?this.toggle="closed":this.toggle="open"},emitConfig:function(){this.parseParams(),this.$emit("settings",this.paperTraderParams)},parseParams:function(){try{this.paperTraderParams=toml.parse(this.rawPaperTraderParams),this.paperTraderParams.reportRoundtrips=!0,this.rawPaperTraderParamsError=!1}catch(t){this.rawPaperTraderParamsError=t,this.paperTraderParams={}}}}},o=s,c=(a("0zrD"),a("KHd+")),u=Object(c["a"])(o,n,r,!1,null,null,null);e["a"]=u.exports},spvI:function(t,e,a){"use strict";a("Vd3H"),a("rGqo");var n=a("wiDz"),r={data:function(){return{datasets:[],datasetScanstate:"idle",unscannableMakets:[]}},methods:{scan:function(){var t=this;this.datasetScanstate="scanning",Object(n["b"])("scansets",{},function(e,a){t.datasetScanstate="scanned",t.unscannableMakets=a.errors;var n=[];a.datasets.forEach(function(t){t.ranges.forEach(function(e,a){n.push({exchange:t.exchange,currency:t.currency,asset:t.asset,from:moment.unix(e.from).utc(),to:moment.unix(e.to).utc(),id:t.exchange+t.asset+t.currency+a})})}),n=n.filter(function(t){if(t.to.diff(t.from,"hours")>2)return!0}),n=n.sort(function(t,e){var a=t.to.diff(t.from),n=e.to.diff(e.from);return an?1:0}).reverse(),t.datasets=n})}}};e["a"]=r},tr8f:function(t,e,a){"use strict";var n=a("h8ks"),r=a.n(n);r.a},tr8z:function(t,e,a){"use strict";var n=a("Ug4+"),r=a.n(n);r.a},uMTv:function(t,e,a){"use strict";var n=a("pyMo"),r=a.n(n);r.a},uXxc:function(t,e,a){},vf3E:function(t,e,a){"use strict";var n=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"contain roundtrips"},[a("h2",[t._v("Roundtrips")]),t.roundtrips.length?a("table",[a("thead",[t._m(0),t._l(t.roundtrips,function(e){return a("tr",[a("td",[t._v(t._s(t.fmt(e.entryAt)))]),a("td",[t._v(t._s(t.fmt(e.exitAt)))]),a("td",[t._v(t._s(t.diff(e.duration)))]),a("td",[t._v(t._s(t.round(e.entryBalance)))]),a("td",[t._v(t._s(t.round(e.exitBalance)))]),-1===Math.sign(e.pnl)?[a("td",{staticClass:"loss"},[t._v(t._s(Math.sign(e.pnl)*e.pnl.toFixed(2)))]),a("td",{staticClass:"loss"},[t._v(t._s(e.profit.toFixed(2))+"%")])]:[a("td",{staticClass:"profit"},[t._v(t._s(e.pnl.toFixed(2)))]),a("td",{staticClass:"profit"},[t._v(t._s(e.profit.toFixed(2))+"%")])]],2)})],2)]):t._e(),t.roundtrips.length?t._e():a("div",[a("p",[t._v("Not enough data to display")])])])},r=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("tr",[a("th",[t._v("Entry at (UTC)")]),a("th",[t._v("Exit at (UTC)")]),a("th",[t._v("Exposure")]),a("th",[t._v("Entry balance")]),a("th",[t._v("Exit balance")]),a("th",[t._v("P&L")]),a("th",[t._v("Profit")])])}],i=a("LvDl"),s=a.n(i),o={props:["roundtrips"],data:function(){return{}},methods:{diff:function(t){return moment.duration(t).humanize()},humanizeDuration:function(t){return window.humanizeDuration(t)},fmt:function(t){var e;return e=s.a.isNumber(t)?moment.unix(t):moment(t).utc(),e.utc().format("YYYY-MM-DD HH:mm")},round:function(t){return(+t).toFixed(3)}}},c=o,u=(a("dW8q"),a("KHd+")),l=Object(u["a"])(c,n,r,!1,null,null,null);e["a"]=l.exports},vwRV:function(t,e,a){},w3yp:function(t,e,a){},wVP4:function(t,e,a){"use strict";var n=a("vwRV"),r=a.n(n);r.a},wVPO:function(t,e,a){"use strict";var n=a("uXxc"),r=a.n(n);r.a},wiDz:function(t,e,a){"use strict";a.d(e,"b",function(){return u}),a.d(e,"a",function(){return l});var n=a("24Ii"),r=a.n(n),i=a("TrxG"),s=a.n(i),o=a("r0f2"),c=function(t){return function(e,a){if(e)return t(e);if(!a.text)return t("no data");var n=JSON.parse(a.text);t(!1,n)}},u=function(t,e,a){r.a.post(o["a"]+t).use(s.a).send(e).end(c(a))},l=function(t,e){r.a.get(o["a"]+t).use(s.a).end(c(e))}},ydmZ:function(t,e,a){},yomC:function(t,e,a){"use strict";var n=a("EfWa"),r=a.n(n);r.a},yuKf:function(t,e,a){}}); +//# sourceMappingURL=app.f8381cdf.js.map \ No newline at end of file diff --git a/web/vue/dist/app.9aa8dda3.js.map b/web/vue/dist/app.f8381cdf.js.map similarity index 99% rename from web/vue/dist/app.9aa8dda3.js.map rename to web/vue/dist/app.f8381cdf.js.map index 3b348202f..37bc7e6e5 100644 --- a/web/vue/dist/app.9aa8dda3.js.map +++ b/web/vue/dist/app.f8381cdf.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/gekko/singleGekko.vue?6cec","webpack:///./src/components/global/progressBar.vue?7bcc","webpack:///./src/components/global/paperTradeSummary.vue?13b5","webpack:///src/components/global/paperTradeSummary.vue","webpack:///./src/components/global/paperTradeSummary.vue?a8ef","webpack:///./src/components/global/paperTradeSummary.vue","webpack:///./src/components/global/configbuilder/papertrader.vue?c5cd","webpack:///./src/components/gekko/new.vue?c104","webpack:///./src/components/gekko/new.vue?367c","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?035a","webpack:///./src/components/global/configbuilder/typepicker.vue?df24","webpack:///src/components/global/configbuilder/typepicker.vue","webpack:///./src/components/global/configbuilder/typepicker.vue?cf28","webpack:///./src/components/global/configbuilder/typepicker.vue","webpack:///src/components/gekko/gekkoConfigBuilder.vue","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?8d92","webpack:///./src/components/gekko/gekkoConfigBuilder.vue","webpack:///src/components/gekko/new.vue","webpack:///./src/components/gekko/new.vue?ae9a","webpack:///./src/components/gekko/new.vue","webpack:///./src/components/data/data.vue?4abe","webpack:///./src/tools/marked.js","webpack:///./src/components/global/configbuilder/marketpicker.vue?d701","webpack:///src/components/global/configbuilder/marketpicker.vue","webpack:///./src/components/global/configbuilder/marketpicker.vue?200d","webpack:///./src/components/global/configbuilder/marketpicker.vue","webpack:///./src/components/global/configbuilder/stratpicker.vue?fda9","webpack:///src/components/global/configbuilder/stratpicker.vue","webpack:///./src/components/global/configbuilder/stratpicker.vue?8a34","webpack:///./src/components/global/configbuilder/stratpicker.vue","webpack:///./src/components/global/configbuilder/rangepicker.vue?ce7c","webpack:///./src/components/global/configbuilder/rangecreator.vue?8425","webpack:///src/components/global/configbuilder/rangecreator.vue","webpack:///./src/components/global/configbuilder/rangecreator.vue?3f8d","webpack:///./src/components/global/configbuilder/rangecreator.vue","webpack:///./src/components/data/import/importConfigBuilder.vue?3911","webpack:///./src/components/global/blockSpinner.vue?cca6","webpack:///src/components/global/blockSpinner.vue","webpack:///./src/components/global/blockSpinner.vue?7b17","webpack:///./src/components/global/blockSpinner.vue","webpack:///./src/App.vue?77b6","webpack:///./src/components/layout/header.vue?345a","webpack:///src/components/layout/header.vue","webpack:///./src/components/layout/header.vue?8ecd","webpack:///./src/components/layout/header.vue","webpack:///./src/components/layout/footer.vue?0614","webpack:///src/components/layout/footer.vue","webpack:///./src/components/layout/footer.vue?6aff","webpack:///./src/components/layout/footer.vue","webpack:///./src/components/layout/modal.vue?5ed7","webpack:///src/components/layout/modal.vue","webpack:///./src/components/layout/modal.vue?6e33","webpack:///./src/components/layout/modal.vue","webpack:///src/App.vue","webpack:///./src/App.vue?8f16","webpack:///./src/App.vue","webpack:///./src/store/modules/imports/mutations.js","webpack:///./src/store/modules/gekkos/mutations.js","webpack:///./src/store/modules/notifications/mutations.js","webpack:///./src/store/modules/config/mutations.js","webpack:///./src/store/index.js","webpack:///./src/components/backtester/backtestConfigBuilder.vue?fda9","webpack:///./src/components/backtester/result/chartWrapper.vue?d2a0","webpack:///./src/components/global/configbuilder/rangecreator.vue?c7ad","webpack:///./src/components/layout/modal.vue?a2b4","webpack:///./src/components/backtester/result/chartWrapper.vue?cfc8","webpack:///./src/d3/chart4.js","webpack:///./src/d3/message.js","webpack:///src/components/backtester/result/chartWrapper.vue","webpack:///./src/components/backtester/result/chartWrapper.vue?414d","webpack:///./src/components/backtester/result/chartWrapper.vue","webpack:///./src/main.js","webpack:///./src/components/backtester/result/summary.vue?6f4b","webpack:///./src/components/config/config.vue?9014","webpack:///./src/components/config/apiConfigBuilder.vue?901e","webpack:///./src/components/global/configbuilder/exchangepicker.vue?f5ea","webpack:///src/components/global/configbuilder/exchangepicker.vue","webpack:///./src/components/global/configbuilder/exchangepicker.vue?f140","webpack:///./src/components/global/configbuilder/exchangepicker.vue","webpack:///src/components/config/apiConfigBuilder.vue","webpack:///./src/components/config/apiConfigBuilder.vue?a340","webpack:///./src/components/config/apiConfigBuilder.vue","webpack:///src/components/config/config.vue","webpack:///./src/components/config/config.vue?03e8","webpack:///./src/components/config/config.vue","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?c09b","webpack:///./src/components/global/configbuilder/rangepicker.vue?e445","webpack:///src/components/global/configbuilder/rangepicker.vue","webpack:///./src/components/global/configbuilder/rangepicker.vue?6482","webpack:///./src/components/global/configbuilder/rangepicker.vue","webpack:///./src/App.vue?8b0d","webpack:///./src/components/config/apiConfigBuilder.vue?bb40","webpack:///./src/components/backtester/backtester.vue?06dc","webpack:///./src/components/backtester/backtestConfigBuilder.vue?bafa","webpack:///./src/components/global/configbuilder/datasetpicker.vue?dc86","webpack:///src/components/global/configbuilder/datasetpicker.vue","webpack:///./src/components/global/configbuilder/datasetpicker.vue?adbd","webpack:///./src/components/global/configbuilder/datasetpicker.vue","webpack:///src/components/backtester/backtestConfigBuilder.vue","webpack:///./src/components/backtester/backtestConfigBuilder.vue?6bee","webpack:///./src/components/backtester/backtestConfigBuilder.vue","webpack:///./src/components/backtester/result/result.vue?f19d","webpack:///./src/components/backtester/result/summary.vue?a48b","webpack:///src/components/backtester/result/summary.vue","webpack:///./src/components/backtester/result/summary.vue?2c9f","webpack:///./src/components/backtester/result/summary.vue","webpack:///src/components/backtester/result/result.vue","webpack:///./src/components/backtester/result/result.vue?a333","webpack:///./src/components/backtester/result/result.vue","webpack:///src/components/backtester/backtester.vue","webpack:///./src/components/backtester/backtester.vue?b754","webpack:///./src/components/backtester/backtester.vue","webpack:///../state/reduceState.js","webpack:///./src/components/data/data.vue?5f3a","webpack:///src/components/data/data.vue","webpack:///./src/components/data/data.vue?7897","webpack:///./src/components/data/data.vue","webpack:///./src/components/backtester/result/roundtripTable.vue?cb8d","webpack:///./src/components/gekko/list.vue?dec3","webpack:///./src/components/data/import/single.vue?892b","webpack:///./src/components/global/progressBar.vue?f48f","webpack:///src/components/global/progressBar.vue","webpack:///./src/components/global/progressBar.vue?3819","webpack:///./src/components/global/progressBar.vue","webpack:///src/components/data/import/single.vue","webpack:///./src/components/data/import/single.vue?ea36","webpack:///./src/components/data/import/single.vue","webpack:///./src/store/modules/imports/sync.js","webpack:///./src/store/modules/gekkos/sync.js","webpack:///./src/store/modules/notifications/sync.js","webpack:///./src/store/modules/config/sync.js","webpack:///./src/store/init.js","webpack:///./src/components/global/ws.js","webpack:///./src/components/gekko/list.vue?889e","webpack:///src/components/gekko/list.vue","webpack:///./src/components/gekko/list.vue?1de5","webpack:///./src/components/gekko/list.vue","webpack:///./src/components/data/import/importer.vue?370b","webpack:///./src/components/data/import/importConfigBuilder.vue?d697","webpack:///src/components/data/import/importConfigBuilder.vue","webpack:///./src/components/data/import/importConfigBuilder.vue?4a12","webpack:///./src/components/data/import/importConfigBuilder.vue","webpack:///src/components/data/import/importer.vue","webpack:///./src/components/data/import/importer.vue?5b1c","webpack:///./src/components/data/import/importer.vue","webpack:///./src/components/layout/home.vue?d339","webpack:///src/components/layout/home.vue","webpack:///./src/components/layout/home.vue?334a","webpack:///./src/components/layout/home.vue","webpack:///./src/components/gekko/singleGekko.vue?a7f7","webpack:///src/components/gekko/singleGekko.vue","webpack:///./src/components/gekko/singleGekko.vue?71ef","webpack:///./src/components/gekko/singleGekko.vue","webpack:///./src/components/global/configbuilder/datasetpicker.vue?0d02","webpack:///./src/components/global/blockSpinner.vue?69ce","webpack:///./src/components/data/import/single.vue?dfe8","webpack:///./src/tools/api.js","webpack:///./src/components/global/configbuilder/papertrader.vue?4204","webpack:///src/components/global/configbuilder/papertrader.vue","webpack:///./src/components/global/configbuilder/papertrader.vue?fdb2","webpack:///./src/components/global/configbuilder/papertrader.vue","webpack:///./src/components/global/mixins/dataset.js","webpack:///./src/components/global/configbuilder/stratpicker.vue?808f","webpack:///./src/components/global/paperTradeSummary.vue?c6c2","webpack:///./src/components/layout/header.vue?b5b8","webpack:///./src/components/backtester/result/roundtripTable.vue?64de","webpack:///src/components/backtester/result/roundtripTable.vue","webpack:///./src/components/backtester/result/roundtripTable.vue?35c4","webpack:///./src/components/backtester/result/roundtripTable.vue","webpack:///./src/components/backtester/result/result.vue?65dd","webpack:///./src/components/global/configbuilder/typepicker.vue?09f6","webpack:///./src/tools/ajax.js","webpack:///./src/components/data/import/importer.vue?3808"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_singleGekko_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressBar_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","render","_vm","this","_h","$createElement","_c","_self","staticClass","_v","_s","report","trades","round2","sharpe","round","startBalance","currency","balance","_m","class","profitClass","relativeProfit","staticRenderFns","paperTradeSummaryvue_type_script_lang_js","props","methods","toFixed","computed","global_paperTradeSummaryvue_type_script_lang_js","component","componentNormalizer","__webpack_exports__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_papertrader_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","on","config","updateConfig","pendingStratrunner","_e","attrs","href","click","$event","preventDefault","start","gekkoConfigBuildervue_type_template_id_6015a1e6_lang_pug_render","only-tradable","isTradebot","market","updateMarketConfig","type","updateType","stratConfig","updateStrat","settings","updatePaperTrader","gekkoConfigBuildervue_type_template_id_6015a1e6_lang_pug_staticRenderFns","typepickervue_type_template_id_4a1aa84c_lang_pug_render","for","_l","directives","rawName","expression","domProps","checked","_q","selectedTypeIndex","change","typepickervue_type_template_id_4a1aa84c_lang_pug_staticRenderFns","typepickervue_type_script_lang_js","created","emitType","types","$emit","watch","configbuilder_typepickervue_type_script_lang_js","typepicker","gekkoConfigBuildervue_type_script_lang_js","_this","ajax","error","response","candleWriter","toml","parse","part","performanceAnalyzer","enabled","range","strat","paperTrader","components","marketPicker","marketpicker","typePicker","stratPicker","stratpicker","papertrader","assign","trader","valid","validConfig","tradingAdvisor","lodash_default","a","isNaN","candleSize","method","isEmpty","mc","emitConfig","pt","gekko_gekkoConfigBuildervue_type_script_lang_js","gekkoConfigBuilder_component","gekkoConfigBuilder","newvue_type_script_lang_js","spinner","blockSpinner","gekkos","$store","state","watchConfig","raw","pick","vue_runtime_esm","util","extend","requiredHistoricalData","stratSettings","historySize","gekkoConfig","startAt","existingMarketWatcher","optimal","moment","utc","startOf","subtract","unix","available","events","initial","candle","Math","max","format","from","find","exchange","existingTradebot","g","logType","availableApiKeys","apiKeys","val","prev","_this2","gekko","latest","startGekko","err","resp","$router","path","concat","id","_this3","str","alert","includes","startWatcher","routeToGekko","console","next","gekko_newvue_type_script_lang_js","new_component","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_data_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","marked","myRenderer","Renderer","link","title","text","external","newWindow","out","test","setOptions","renderer","$$selectedVal","Array","filter","target","options","selected","map","_value","multiple","e","cur","asset","asst","marketpickervue_type_script_lang_js","exchanges","onlyTradable","each","tradable","onlyImportable","importable","markets","assets","currencies","keys","configbuilder_marketpickervue_type_script_lang_js","strategy","input","composing","rawCandleSize","candleSizeUnit","singularCandleSizeUnit","humanizeDuration","rawStratParams","rawStratParamsError","message","stratpickervue_type_script_lang_js","strategies","emptyStrat","stratParams","empty","params","__empty","parseParams","configbuilder_stratpickervue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rangepicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","to","rangecreatorvue_type_script_lang_js","now","then","clone","fmt","emitRange","fmtTs","mom","emitManualEntry","isValid","scanned","tab","selectedRangeIndex","selectedRange","ranges","configbuilder_rangecreatorvue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_importConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","blockSpinnervue_type_script_lang_js","global_blockSpinnervue_type_script_lang_js","headervue_type_template_id_0a62d360_lang_pug_render","headervue_type_template_id_0a62d360_lang_pug_staticRenderFns","headervue_type_script_lang_js","layout_headervue_type_script_lang_js","header","footervue_type_template_id_7782dc11_lang_pug_render","version","ui","footervue_type_template_id_7782dc11_lang_pug_staticRenderFns","gekkoPackage","uiPackage","footervue_type_script_lang_js","layout_footervue_type_script_lang_js","footer_component","footer","modalvue_type_template_id_340a7d17_lang_pug_render","innerHTML","content","modalvue_type_template_id_340a7d17_lang_pug_staticRenderFns","messages","disconnected","modalvue_type_script_lang_js","active","warnings","connected","layout_modalvue_type_script_lang_js","modal_component","modal","Appvue_type_script_lang_js","top","bottom","src_Appvue_type_script_lang_js","App_component","addImport","imp","imports","syncImports","mutations_updateImport","update","index","findIndex","import_id","item","updated","updates","set","reduceState","syncGekkos","live","archivedGekkos","archive","mutations_addGekko","objectSpread","mutations_updateGekko","has","event","mutations_archiveGekko","stopped","omit","mutations_errorGekko","errored","errorMessage","mutations_deleteGekko","setGlobalWarning","warning","mutations_syncApiKeys","mutations_syncExchanges","use","vuex_esm","debug","mutations","merge","mutations_namespaceObject","gekkos_mutations_namespaceObject","notifications_mutations_namespaceObject","config_mutations_namespaceObject","Store","connection","reconnected","strict","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_backtestConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_chartWrapper_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rangecreator_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","chartWrappervue_type_template_id_12bcb8d8_lang_pug_render","clickable","isClicked","width","height","_data","_trades","_height","toDate","isNumber","price","date","action","open","dates","prices","svg","d3","select","attr","innerWidth","margin","right","left","margin2","height2","x","scaleUtc","x2","y","scaleLinear","y2","xAxis","axisBottom","xAxis2","yAxis","axisLeft","ticks","brush","brushX","extent","brushed","zoom","scaleExtent","translateExtent","zoomed","line","line2","append","focus","context","domain","min","datum","circles","selectAll","enter","sourceEvent","selection","invert","scaleY","transform","zoomIdentity","scale","translate","_domain","slicedToArray","minIndex","sortedIndex","maxIndex","rescaleX","move","invertX","draw","MIN_CANDLES","chartWrappervue_type_script_lang_js","setTimeout","beforeDestroy","remove","_","size","candles","chart4","html","result_chartWrappervue_type_script_lang_js","vue__WEBPACK_IMPORTED_MODULE_1__","vue_router__WEBPACK_IMPORTED_MODULE_3__","router","base","__dirname","routes","redirect","_components_layout_home_vue__WEBPACK_IMPORTED_MODULE_6__","_components_backtester_backtester_vue__WEBPACK_IMPORTED_MODULE_5__","_components_config_config_vue__WEBPACK_IMPORTED_MODULE_10__","_components_data_data_vue__WEBPACK_IMPORTED_MODULE_7__","_components_data_import_importer_vue__WEBPACK_IMPORTED_MODULE_8__","_components_data_import_single_vue__WEBPACK_IMPORTED_MODULE_9__","_components_gekko_list_vue__WEBPACK_IMPORTED_MODULE_11__","_components_gekko_new_vue__WEBPACK_IMPORTED_MODULE_12__","_components_gekko_singleGekko_vue__WEBPACK_IMPORTED_MODULE_13__","_components_global_ws__WEBPACK_IMPORTED_MODULE_14__","store","_store__WEBPACK_IMPORTED_MODULE_4__","el","h","_App_vue__WEBPACK_IMPORTED_MODULE_2__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_summary_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","apiKeySets","removeApiKey","addApiToggle","openAddApi","apiConfigBuildervue_type_template_id_4a31b09e_lang_pug_render","updateExchange","cred","credentials","$set","upload","apiConfigBuildervue_type_template_id_4a31b09e_lang_pug_staticRenderFns","exchangepickervue_type_template_id_50c29cb0_lang_pug_render","exchangepickervue_type_template_id_50c29cb0_lang_pug_staticRenderFns","exchangepickervue_type_script_lang_js","emitExchange","configbuilder_exchangepickervue_type_script_lang_js","exchangepicker","apiConfigBuildervue_type_script_lang_js","exchangePicker","requires","values","confirm","config_apiConfigBuildervue_type_script_lang_js","apiConfigBuilder_component","apiConfigBuilder","configvue_type_script_lang_js","config_configvue_type_script_lang_js","config_component","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_gekkoConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","scan","printRange","rangepickervue_type_script_lang_js","diff","duration","humanize","reset","configbuilder_rangepickervue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_apiConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","check","backtestState","run","backtestResult","backtestConfigBuildervue_type_template_id_0b74d9a3_lang_pug_render","dataset","updateDataset","backtestConfigBuildervue_type_template_id_0b74d9a3_lang_pug_staticRenderFns","datasetpickervue_type_template_id_689b8a00_lang_pug_render","datasetScanstate","datasets","setIndex","rangeVisible","openRange","customFrom","customTo","datasetpickervue_type_template_id_689b8a00_lang_pug_staticRenderFns","datasetpickervue_type_script_lang_js","mixins","largest","updateCustomRange","emitSet","configbuilder_datasetpickervue_type_script_lang_js","datasetpicker","backtestConfigBuildervue_type_script_lang_js","datasetPicker","backtest","daterange","backtestResultExporter","writeToDisk","stratUpdates","roundtrips","stratCandles","stratCandleProps","sc","backtester_backtestConfigBuildervue_type_script_lang_js","backtestConfigBuilder_component","backtestConfigBuilder","resultvue_type_template_id_72b63acc_lang_pug_render","performanceReport","resultvue_type_template_id_72b63acc_lang_pug_staticRenderFns","summaryvue_type_template_id_5bfc891d_lang_pug_render","startTime","endTime","timespan","startPrice","endPrice","summaryvue_type_template_id_5bfc891d_lang_pug_staticRenderFns","summaryvue_type_script_lang_js","paperTradeSummary","result_summaryvue_type_script_lang_js","summary_component","summary","resultvue_type_script_lang_js","roundtripTable","resultSummary","chart","chartWrapper","result_resultvue_type_script_lang_js","result_component","backtestervue_type_script_lang_js","backtestable","configBuilder","backtester_backtestervue_type_script_lang_js","backtester_component","skipInitialEvents","skipLatestEvents","trackAllEvents","reduce","payload","latestUpdate","Date","[object Object]","intro","unscannableMakets","viewUnscannable","toggleUnscannable","datavue_type_script_lang_js","data_datavue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_roundtripTable_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","done","fromEnd","initialized","progress","progressBarvue_type_template_id_2b42ff94_lang_pug_render","style","progressBarvue_type_template_id_2b42ff94_lang_pug_staticRenderFns","progressBarvue_type_script_lang_js","global_progressBarvue_type_script_lang_js","progressBar","singlevue_type_script_lang_js","$route","fromEndMs","current","import_singlevue_type_script_lang_js","single_component","sync_init","commit","sync_sync","bus","$on","imports_sync","gekkos_sync_init","gekkos_sync_sync","gekkos_sync","notifications_sync_init","notifications_sync_sync","ws","notifications_sync","sync_transformMarkets","backendData","exchangesRaw","exchangesTemp","forEach","slug","pair","_pair$pair","exchangeMaxHistoryAge","providesFullHistory","config_sync_init","config_sync_sync","config_sync","store_init","socket","log","info","ws_connect","ReconnectingWebSocket","api","maxReconnectInterval","onopen","onclose","onerror","onmessage","JSON","watchers","status","stratrunners","profit","tradeCompleted","listvue_type_script_lang_js","timer","setInterval","destroyed","clearTimeout","_moment","_x","arguments","toString","b","gekko_listvue_type_script_lang_js","_import","importConfigBuildervue_type_template_id_a8c578c6_lang_pug_render","only-importable","updateRange","importConfigBuildervue_type_template_id_a8c578c6_lang_pug_staticRenderFns","importConfigBuildervue_type_script_lang_js","rangeCreator","rangecreator","importer","import_importConfigBuildervue_type_script_lang_js","importConfigBuilder","importervue_type_script_lang_js","daysApart","import_importervue_type_script_lang_js","importer_component","src","homevue_type_script_lang_js","layout_homevue_type_script_lang_js","isLoading","initialEvents","latestEvents","warmupRemaining","replace","stratName","isArchived","alpha","isStratrunner","watcher","stopGekko","deleteGekko","candleFetch","chartData","singleGekkovue_type_script_lang_js","getCandles","isLive","stratWarmupCompleted","warmupTime","add","stringify","isEqual","hasLeechers","data.events.latest.candle.start","random","res","isArray","_this4","gekko_singleGekkovue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_datasetpicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_blockSpinner_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_single_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","basePath","restPath","wsPath","CONFIG","endpoint","host","port","ssl","toggle","switchToggle","rawPaperTraderParams","rawPaperTraderParamsError","papertradervue_type_script_lang_js","paperTraderParams","reportRoundtrips","configbuilder_papertradervue_type_script_lang_js","mixin","_tools_ajax__WEBPACK_IMPORTED_MODULE_2__","errors","sets","sort","adiff","bdiff","reverse","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_stratpicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paperTradeSummary_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","rt","entryAt","exitAt","entryBalance","exitBalance","sign","pnl","roundtripTablevue_type_script_lang_js","result_roundtripTablevue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_result_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_typepicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","processResponse","post","superagent__WEBPACK_IMPORTED_MODULE_0___default","_api_js__WEBPACK_IMPORTED_MODULE_2__","superagent_no_cache__WEBPACK_IMPORTED_MODULE_1___default","send","end","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_importer_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default"],"mappings":"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","file":"app.9aa8dda3.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([26,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-3-6\"},[_c('table',{staticClass:\"p1\"},[_c('tr',[_c('th',[_vm._v(\"amount of trades\")]),_c('td',[_vm._v(_vm._s(_vm.report.trades))])]),_c('tr',[_c('th',[_vm._v(\"sharpe ratio\")]),_c('td',[_vm._v(_vm._s(_vm.round2(_vm.report.sharpe)))])]),_c('tr',[_c('th',[_vm._v(\"start balance\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.startBalance))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"final balance\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.balance))+\" \"+_vm._s(_vm.report.currency))])]),_vm._m(0)]),_c('div',{staticClass:\"big txt--right price\",class:_vm.profitClass},[_vm._v(_vm._s(_vm.round(_vm.report.relativeProfit))+\"%\")])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"simulated profit\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./paperTradeSummary.vue?vue&type=template&id=637e135e&lang=pug\"\nimport script from \"./paperTradeSummary.vue?vue&type=script&lang=js\"\nexport * from \"./paperTradeSummary.vue?vue&type=script&lang=js\"\nimport style0 from \"./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[_c('h3',[_vm._v(\"Start a new gekko\")]),_c('gekko-config-builder',{on:{\"config\":_vm.updateConfig}}),_c('div',{staticClass:\"hr\"}),(_vm.config.valid)?_c('div',{staticClass:\"txt--center\"},[(!_vm.pendingStratrunner)?_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.start($event)}}},[_vm._v(\"Start\")]):_vm._e(),(_vm.pendingStratrunner)?_c('spinner'):_vm._e()],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Market\")]),_c('market-picker',{attrs:{\"only-tradable\":_vm.isTradebot},on:{\"market\":_vm.updateMarketConfig}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('type-picker',{on:{\"type\":_vm.updateType}})],1)]),(_vm.type !== \"market watcher\")?[_c('div',{staticClass:\"hr\"}),_c('strat-picker',{staticClass:\"contain my2\",on:{\"stratConfig\":_vm.updateStrat}}),(_vm.type === \"paper trader\")?_c('div',{staticClass:\"hr\"}):_vm._e(),(_vm.type === \"paper trader\")?_c('paper-trader',{on:{\"settings\":_vm.updatePaperTrader}}):_vm._e()]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Type\")]),[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"type\"}},[_vm._v(\"What do you want to do with gekko?\")]),_c('form',{staticClass:\"radio grd\"},_vm._l((_vm.types),function(type,i){return _c('div',{staticClass:\"grd-row m1\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedTypeIndex),expression:\"selectedTypeIndex\"}],staticClass:\"grd-row-col-1-6\",attrs:{\"type\":\"radio\"},domProps:{\"value\":i,\"checked\":_vm._q(_vm.selectedTypeIndex,i)},on:{\"change\":function($event){_vm.selectedTypeIndex=i}}}),_c('label',{staticClass:\"grd-row-col-5-6\",attrs:{\"for\":i}},[_vm._v(_vm._s(type))])])}))]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./typepicker.vue?vue&type=template&id=4a1aa84c&lang=pug\"\nimport script from \"./typepicker.vue?vue&type=script&lang=js\"\nexport * from \"./typepicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./typepicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./gekkoConfigBuilder.vue?vue&type=template&id=6015a1e6&lang=pug\"\nimport script from \"./gekkoConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./gekkoConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./new.vue?vue&type=template&id=da0dc488&lang=pug\"\nimport script from \"./new.vue?vue&type=script&lang=js\"\nexport * from \"./new.vue?vue&type=script&lang=js\"\nimport style0 from \"./new.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=style&index=0&lang=css\"","const marked = require('marked');\n\n// add `target='_blank'` to outgoing links\n\n// https://github.com/chjj/marked/pull/451#issuecomment-49976076\n\nvar myRenderer = new marked.Renderer();\nmyRenderer.link = function(href, title, text) {\n var external, newWindow, out;\n external = /^https?:\\/\\/.+$/.test(href);\n newWindow = external || title === 'newWindow';\n out = \"\" + text + \"\";\n};\n\nmarked.setOptions({renderer: myRenderer});\n\nexport default marked;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"mx1\"},[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Exchange:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.exchange),expression:\"exchange\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.exchange=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.exchanges),function(market,e){return _c('option',[_vm._v(_vm._s(e))])}))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('label',{attrs:{\"for\":\"currency\"}},[_vm._v(\"Currency:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currency),expression:\"currency\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.currency=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.currencies),function(cur){return _c('option',[_vm._v(_vm._s(cur))])}))])]),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('label',{attrs:{\"for\":\"asset\"}},[_vm._v(\"Asset:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.asset),expression:\"asset\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.asset=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.assets),function(asst){return _c('option',[_vm._v(_vm._s(asst))])}))])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./marketpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./marketpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./marketpicker.vue?vue&type=template&id=df4a8b2a&lang=pug\"\nimport script from \"./marketpicker.vue?vue&type=script&lang=js\"\nexport * from \"./marketpicker.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 px1\"},[_c('h3',[_vm._v(\"Strategy\")]),_c('div',[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"strat\"}},[_vm._v(\"Strategy:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.strategy),expression:\"strategy\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.strategy=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.strategies),function(strat){return _c('option',[_vm._v(_vm._s(strat.name))])}))])]),_c('div',[_c('label',{attrs:{\"for\":\"candleSize\"}},[_vm._v(\"Candle Size\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawCandleSize),expression:\"rawCandleSize\"}],domProps:{\"value\":(_vm.rawCandleSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawCandleSize=$event.target.value}}})]),_c('div',{staticClass:\"grd-row-col-3-6 align\"},[_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.candleSizeUnit),expression:\"candleSizeUnit\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.candleSizeUnit=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',[_vm._v(\"minutes\")]),_c('option',[_vm._v(\"hours\")]),_c('option',[_vm._v(\"days\")])])])])])]),_c('div',[_c('label',{attrs:{\"for\":\"historySize\"}},[_vm._v(\"Warmup period (in \"+_vm._s(_vm.rawCandleSize)+\" \"+_vm._s(_vm.singularCandleSizeUnit)+\" candles):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.historySize),expression:\"historySize\"}],domProps:{\"value\":(_vm.historySize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.historySize=$event.target.value}}}),_c('em',{staticClass:\"label-like\"},[_vm._v(\"(will use \"+_vm._s(_vm.humanizeDuration(_vm.candleSize * _vm.historySize * 1000 * 60))+\" of data as history)\")])])]),_c('div',{staticClass:\"grd-row-col-3-6 px1\"},[_c('div',[_c('h3',[_vm._v(\"Parameters\")]),_c('p',[_vm._v(_vm._s(_vm.strategy)+\" Parameters:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawStratParams),expression:\"rawStratParams\"}],staticClass:\"params\",domProps:{\"value\":(_vm.rawStratParams)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawStratParams=$event.target.value}}}),(_vm.rawStratParamsError)?_c('p',{staticClass:\"bg--red p1\"},[_vm._v(_vm._s(_vm.rawStratParamsError.message))]):_vm._e()])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./stratpicker.vue?vue&type=template&id=1df710ae&lang=pug\"\nimport script from \"./stratpicker.vue?vue&type=script&lang=js\"\nexport * from \"./stratpicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./stratpicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Daterange\")]),_c('div',[_c('label',{attrs:{\"for\":\"from\"}},[_vm._v(\"From\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.from),expression:\"from\"}],domProps:{\"value\":(_vm.from)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.from=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"to\"}},[_vm._v(\"To\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.to),expression:\"to\"}],domProps:{\"value\":(_vm.to)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.to=$event.target.value}}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./rangecreator.vue?vue&type=template&id=8c51143a&lang=pug\"\nimport script from \"./rangecreator.vue?vue&type=script&lang=js\"\nexport * from \"./rangecreator.vue?vue&type=script&lang=js\"\nimport style0 from \"./rangecreator.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"spinner\"},[_c('div',{staticClass:\"rect1\"}),_c('div',{staticClass:\"rect2\"}),_c('div',{staticClass:\"rect3\"}),_c('div',{staticClass:\"rect4\"})])}]\n\nexport { render, staticRenderFns }","// http://tobiasahlin.com/spinkit/\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./blockSpinner.vue?vue&type=template&id=45447ea6&lang=pug\"\nimport script from \"./blockSpinner.vue?vue&type=script&lang=js\"\nexport * from \"./blockSpinner.vue?vue&type=script&lang=js\"\nimport style0 from \"./blockSpinner.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('top'),_c('div',{staticClass:\"fill\"},[_c('router-view',{staticClass:\"view\"})],1),_c('bottom'),_c('modal')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"top\"}}),_vm._m(0),_c('nav',{staticClass:\"bg--light-gray\"},[_c('div',{staticClass:\"menu contain\"},[_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/home\"}},[_vm._v(\"Home\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/live-gekkos\"}},[_vm._v(\"Live Gekkos\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/backtest\"}},[_vm._v(\"Backtest\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/data\"}},[_vm._v(\"Local data\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/config\"}},[_vm._v(\"Config\")]),_c('a',{staticClass:\"py1\",attrs:{\"href\":\"https://gekko.wizb.it/docs/introduction/about_gekko.html\",\"target\":\"_blank\"}},[_vm._v(\"Documentation\")])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"bg--off-white grd\"},[_c('div',{staticClass:\"contain grd-row\"},[_c('h3',{staticClass:\"py1 px2 col-2\"},[_vm._v(\"Gekko UI\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./header.vue?vue&type=template&id=0a62d360&lang=pug\"\nimport script from \"./header.vue?vue&type=script&lang=js\"\nexport * from \"./header.vue?vue&type=script&lang=js\"\nimport style0 from \"./header.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"p2 bg--off-white\"},[_c('div',{staticClass:\"contain\"},[_vm._m(0),_c('p',[_vm._v(\"Using Gekko v\"+_vm._s(_vm.version.gekko)+\" and Gekko UI v\"+_vm._s(_vm.version.ui)+\".\")])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',[_c('em',[_vm._v(\"Use Gekko at your own risk.\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./footer.vue?vue&type=template&id=7782dc11&lang=pug\"\nimport script from \"./footer.vue?vue&type=script&lang=js\"\nexport * from \"./footer.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.active)?_c('div',[_c('div',{attrs:{\"id\":\"modal-background\"}}),_c('div',{staticClass:\"modal\",attrs:{\"id\":\"modal\"}},[_c('div',{staticClass:\"modal-guts\",domProps:{\"innerHTML\":_vm._s(_vm.content)}})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./modal.vue?vue&type=template&id=340a7d17&lang=pug\"\nimport script from \"./modal.vue?vue&type=script&lang=js\"\nexport * from \"./modal.vue?vue&type=script&lang=js\"\nimport style0 from \"./modal.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=29e7b8c2&lang=pug\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\n\nexport const addImport = (state, imp) => {\n state.imports.push(imp);\n return state;\n}\n\nexport const syncImports = (state, imports) => {\n state.imports = imports;\n return state;\n}\n\nexport const updateImport = (state, update) => {\n let index = state.imports.findIndex(i => i.id === update.import_id);\n let item = state.imports[index];\n if(!item)\n return state;\n\n let updated = Vue.util.extend(item, update.updates);\n Vue.set(state.imports, index, updated);\n\n return state;\n}","import Vue from 'vue'\nimport _ from 'lodash';\nconst reduceState = require('../../../../../state/reduceState');\n\nexport const syncGekkos = (state, data) => {\n if(!data) {\n return state;\n }\n\n state.gekkos = data.live;\n state.archivedGekkos = data.archive;\n return state;\n}\n\nexport const addGekko = (state, gekko) => {\n state.gekkos = {\n ...state.gekkos,\n [gekko.id]: gekko\n }\n return state;\n}\n\nexport const updateGekko = (state, update) => {\n if(!update.id || !_.has(state.gekkos, update.id)) {\n return console.error('cannot update unknown gekko..');;\n }\n\n state.gekkos = {\n ...state.gekkos,\n [update.id]: reduceState(state.gekkos[update.id], update.event)\n }\n return state;\n}\n\nexport const archiveGekko = (state, id) => {\n if(!_.has(state.gekkos, id)) {\n return console.error('cannot archive unknown gekko..');\n }\n\n state.archivedGekkos = {\n ...state.archivedGekkos,\n [id]: {\n ...state.gekkos[id],\n stopped: true,\n active: false\n }\n }\n\n state.gekkos = _.omit(state.gekkos, id);\n return state;\n}\n\nexport const errorGekko = (state, data) => {\n if(!_.has(state.gekkos, data.id)) {\n return console.error('cannot error unknown gekko..');\n }\n\n state.gekkos = {\n ...state.gekkos,\n [data.id]: {\n ...state.gekkos[data.id],\n errored: true,\n errorMessage: data.error\n }\n }\n\n return state;\n}\n\nexport const deleteGekko = (state, id) => {\n if(!_.has(state.archivedGekkos, id)) {\n return console.error('cannot delete unknown gekko..');\n }\n\n state.archivedGekkos = _.omit(state.archivedGekkos, id);\n return state;\n}","import Vue from 'vue'\nimport _ from 'lodash'\n\nexport const setGlobalWarning = (state, warning) => {\n state.warnings[warning.key] = warning.value;\n return state;\n}","import Vue from 'vue'\n\nexport const syncApiKeys = (state, apiKeys) => {\n Vue.set(state, 'apiKeys', apiKeys);\n return state;\n}\n\nexport const syncExchanges = (state, exchanges) => {\n Vue.set(state, 'exchanges', exchanges);\n return state;\n}","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport _ from 'lodash'\n\nimport * as importMutations from './modules/imports/mutations'\nimport * as gekkoMutations from './modules/gekkos/mutations'\nimport * as notificationMutations from './modules/notifications/mutations'\nimport * as configMutations from './modules/config/mutations'\n\nVue.use(Vuex);\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nlet mutations = {};\n\n_.merge(mutations, importMutations);\n_.merge(mutations, gekkoMutations);\n_.merge(mutations, notificationMutations);\n_.merge(mutations, configMutations);\n\nexport default new Vuex.Store({\n state: {\n warnings: {\n connected: true, // assume we will connect\n },\n imports: [],\n gekkos: {},\n archivedGekkos: {},\n connection: {\n disconnected: false,\n reconnected: false\n },\n apiKeys: [],\n exchanges: {}\n },\n mutations,\n strict: debug\n})","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ clickable: !_vm.isClicked },attrs:{\"id\":\"chartWrapper\"}},[_c('div',{staticClass:\"shield\",on:{\"click\":function($event){$event.preventDefault();return _vm.click($event)}}}),_c('svg',{attrs:{\"id\":\"chart\",\"width\":\"960\",\"height\":_vm.height}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import _ from 'lodash';\n// global moment\n\nexport default function(_data, _trades, _height) {\n\n const toDate = i => {\n if(_.isNumber(i)) {\n return moment.unix(i).utc().toDate();\n } else {\n return moment.utc(i).toDate();\n }\n }\n\n const trades = _trades.map(t => {\n return {\n price: t.price,\n date: toDate(t.date),\n action: t.action\n }\n });\n\n const data = _data.map(c => {\n return {\n price: c.open,\n date: toDate(c.start)\n }\n });\n\n var dates = data.map(c => +c.date);\n var prices = data.map(c => +c.price)\n\n var svg = d3.select(\"#chart\");\n\n svg.attr(\"width\", window.innerWidth - 20);\n\n var margin = {top: 20, right: 20, bottom: 110, left: 40};\n var height = _height - margin.top - margin.bottom;\n var margin2 = {top: _height - 70, right: 20, bottom: 30, left: 40};\n var width = +svg.attr(\"width\") - margin.left - margin.right;\n var height2 = _height - margin2.top - margin2.bottom;\n\n var x = d3.scaleUtc().range([0, width]),\n x2 = d3.scaleUtc().range([0, width]),\n y = d3.scaleLinear().range([height, 0]),\n y2 = d3.scaleLinear().range([height2, 0]);\n\n var xAxis = d3.axisBottom(x),\n xAxis2 = d3.axisBottom(x2),\n yAxis = d3.axisLeft(y).ticks(_height / 50);\n\n var brush = d3.brushX()\n .extent([[0, 0], [width, height2]])\n .on(\"brush end\", brushed);\n\n var zoom = d3.zoom()\n .scaleExtent([1, 100])\n .translateExtent([[0, 0], [width, height]])\n .extent([[0, 0], [width, height]])\n .on(\"zoom\", zoomed);\n\n var line = d3.line()\n .x(function(d) { return x(d.date); })\n .y(function(d) { return y(d.price); });\n\n var line2 = d3.line()\n .x(function(d) { return x2(d.date); })\n .y(function(d) { return y2(d.price); });\n\n svg.append(\"defs\").append(\"clipPath\")\n .attr(\"id\", \"clip\")\n .append(\"rect\")\n .attr(\"width\", width)\n .attr(\"height\", height);\n\n var focus = svg.append(\"g\")\n .attr(\"class\", \"focus\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var context = svg.append(\"g\")\n .attr(\"class\", \"context\")\n .attr(\"transform\", \"translate(\" + margin2.left + \",\" + margin2.top + \")\");\n\n x.domain(d3.extent(data, function(d) { return d.date; }));\n y.domain([\n d3.min(prices) * 0.99,\n d3.max(prices) * 1.01\n ]);\n x2.domain(x.domain());\n y2.domain(y.domain());\n\n focus.append(\"path\")\n .datum(data)\n .attr(\"class\", \"line price\")\n .attr(\"d\", line);\n\n focus.append(\"g\")\n .attr(\"class\", \"axis axis--x\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis);\n\n focus.append(\"g\")\n .attr(\"class\", \"axis axis--y\")\n .call(yAxis);\n\n context.append(\"path\")\n .datum(data)\n .attr(\"class\", \"line\")\n .attr(\"d\", line2);\n\n context.append(\"g\")\n .attr(\"class\", \"axis axis--x\")\n .attr(\"transform\", \"translate(0,\" + height2 + \")\")\n .call(xAxis2);\n\n var circles = svg\n .append('g')\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .selectAll(\"circle\")\n .data(trades)\n .enter().append(\"circle\")\n .attr('class', function(d) { return d.action })\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n .attr('r', 5);\n\n var brushCircles = context\n .append('g')\n // .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .selectAll(\"circle\")\n .data(trades)\n .enter().append(\"circle\")\n .attr('class', function(d) { return d.action })\n .attr(\"cx\", function(d) { return x2(d.date); })\n .attr(\"cy\", function(d) { return y2(d.price); })\n .attr('r', 3);\n\n\n context.append(\"g\")\n .attr(\"class\", \"brush\")\n .call(brush)\n .call(brush.move, x.range());\n\n svg.append(\"rect\")\n .attr(\"class\", \"zoom\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .call(zoom);\n\n function brushed() {\n if (d3.event.sourceEvent && d3.event.sourceEvent.type === \"zoom\") return; // ignore brush-by-zoom\n var s = d3.event.selection || x2.range();\n x.domain(s.map(x2.invert, x2));\n\n scaleY(x.domain());\n\n svg.select(\".axis--y\")\n .call(yAxis);\n\n circles\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n\n focus.select(\".line\").attr(\"d\", line);\n focus.select(\".axis--x\").call(xAxis);\n svg.select(\".zoom\").call(zoom.transform, d3.zoomIdentity\n .scale(width / (s[1] - s[0]))\n .translate(-s[0], 0));\n }\n\n function scaleY(domain) {\n let [min, max] = domain;\n\n let minIndex = _.sortedIndex(dates, min);\n let maxIndex = _.sortedIndex(dates, max);\n\n let set = prices.slice(minIndex, maxIndex);\n y.domain([\n d3.min(set) * 0.9995,\n d3.max(set) * 1.0005\n ]);\n }\n\n function zoomed() {\n if (d3.event.sourceEvent && d3.event.sourceEvent.type === \"brush\") return; // ignore zoom-by-brush\n var t = d3.event.transform;\n\n scaleY(t.rescaleX(x2).domain()); \n\n svg.select(\".axis--y\")\n .call(yAxis);\n\n x.domain(t.rescaleX(x2).domain());\n focus.select(\".line\").attr(\"d\", line);\n\n circles\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n\n\n focus.select(\".axis--x\").call(xAxis);\n context.select(\".brush\").call(brush.move, x.range().map(t.invertX, t));\n }\n}","export const draw = function(message) {\n d3.select(\"#chart\").append(\"text\")\n .attr('class', 'message')\n .attr('x', 150)\n .attr('y', 150)\n .text(message);\n}\n\nexport const clear = function() {\n d3.select(\"#chart\").find('text').remove();\n}","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./chartWrapper.vue?vue&type=template&id=12bcb8d8&lang=pug\"\nimport script from \"./chartWrapper.vue?vue&type=script&lang=js\"\nexport * from \"./chartWrapper.vue?vue&type=script&lang=js\"\nimport style0 from \"./chartWrapper.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\n\nimport VueRouter from 'vue-router'\nVue.use(VueRouter);\n\nimport store from './store'\n\nimport backtester from './components/backtester/backtester.vue'\nimport home from './components/layout/home.vue'\n\nimport data from './components/data/data.vue'\nimport importer from './components/data/import/importer.vue'\nimport singleImport from './components/data/import/single.vue'\nimport config from './components/config/config.vue'\n\nimport gekkoList from './components/gekko/list.vue'\nimport newGekko from './components/gekko/new.vue'\nimport singleGekko from './components/gekko/singleGekko.vue'\nimport { connect as connectWS } from './components/global/ws'\n\nconst router = new VueRouter({\n mode: 'hash',\n base: __dirname,\n routes: [\n { path: '/', redirect: '/home' },\n { path: '/home', component: home },\n { path: '/backtest', component: backtester },\n { path: '/config', component: config },\n { path: '/data', component: data },\n { path: '/data/importer', component: importer },\n { path: '/data/importer/import/:id', component: singleImport },\n { path: '/live-gekkos', component: gekkoList },\n { path: '/live-gekkos/new', component: newGekko },\n { path: '/live-gekkos/:id', component: singleGekko },\n ]\n});\n\n// setup some stuff\nconnectWS();\n\nnew Vue({\n router,\n store,\n el: '#app',\n render: h => h(App)\n})","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('h2',[_vm._v(\"Config\")]),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Available API keys\")]),(!_vm.apiKeySets.length)?_c('p',[_c('em',[_vm._v(\"You don't have any API keys yet.\")])]):_vm._e(),_c('ul',_vm._l((_vm.apiKeySets),function(exchange){return _c('li',[_vm._v(_vm._s(exchange)+\" (\"),_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.removeApiKey(exchange)}}},[_vm._v(\"remove\")]),_vm._v(\")\")])})),(!_vm.addApiToggle)?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.openAddApi($event)}}},[_vm._v(\"Add an API key\")]):_vm._e(),(_vm.addApiToggle)?[_c('div',{staticClass:\"hr\"}),_c('apiConfigBuilder')]:_vm._e(),_c('div',{staticClass:\"hr\"})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('h3',[_vm._v(\"Add an API key\")]),_c('p',[_vm._v(\"Make sure that the API key has the permissions to create and cancel orders and view balances.\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Exchange\")]),_c('exchange-picker',{attrs:{\"only-tradable\":\"true\"},on:{\"exchange\":_vm.updateExchange}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Credentials\")]),_vm._l((_vm.requires),function(cred){return [_c('label',[_vm._v(_vm._s(cred))]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.credentials[cred]),expression:\"credentials[cred]\"}],domProps:{\"value\":(_vm.credentials[cred])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.credentials, cred, $event.target.value)}}})]})],2)]),_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.upload($event)}}},[_vm._v(\"Add\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"mx1\"},[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Exchange:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.exchange),expression:\"exchange\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.exchange=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.exchanges),function(market,e){return _c('option',[_vm._v(_vm._s(e))])}))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./exchangepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./exchangepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./exchangepicker.vue?vue&type=template&id=50c29cb0&lang=pug\"\nimport script from \"./exchangepicker.vue?vue&type=script&lang=js\"\nexport * from \"./exchangepicker.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./apiConfigBuilder.vue?vue&type=template&id=4a31b09e&lang=pug\"\nimport script from \"./apiConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./apiConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./config.vue?vue&type=template&id=d21dbde6&lang=pug\"\nimport script from \"./config.vue?vue&type=script&lang=js\"\nexport * from \"./config.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Daterange\")]),(_vm.tab === \"scan\")?[(!_vm.scanned)?_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.scanned == \"fetching\")?_c('div',{staticClass:\"txt--center\"},[_c('p',{staticClass:\"scan-btn\"},[_vm._v(\"Scanning..\")])]):_vm._e(),(_vm.scanned == true)?[(_vm.ranges.length === 0)?[_c('p',[_c('strong',[_vm._v(\"Unable to find any local data, do you have local data available for\\\"\"+_vm._s(_vm.config.watch.exchange)+\":\"+_vm._s(_vm.config.watch.currency)+\"/\"+_vm._s(_vm.config.watch.asset)+\"\\\"?\")])])]:[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Run simulation over:\")]),_c('form',{staticClass:\"radio grd\"},_vm._l((_vm.ranges),function(range,i){return _c('div',{staticClass:\"grd-row m1\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedRangeIndex),expression:\"selectedRangeIndex\"}],staticClass:\"grd-row-col-1-6\",attrs:{\"type\":\"radio\"},domProps:{\"value\":i,\"checked\":_vm._q(_vm.selectedRangeIndex,i)},on:{\"change\":function($event){_vm.selectedRangeIndex=i}}}),_c('label',{staticClass:\"grd-row-col-5-6\",attrs:{\"for\":i}},[_vm._v(_vm._s(_vm.printRange(range)))])])}))],_c('p',[_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"rescan\")])])])]:_vm._e(),_c('p',{staticClass:\"txt--center\"},[_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.tab = \"manual\"}}},[_vm._v(\"Or manually set a daterange\")])])])]:_vm._e(),(_vm.tab === \"manual\")?[_c('div',[_c('label',{attrs:{\"for\":\"from\"}},[_vm._v(\"From:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.from),expression:\"from\"}],domProps:{\"value\":(_vm.from)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.from=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"to\"}},[_vm._v(\"To:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.to),expression:\"to\"}],domProps:{\"value\":(_vm.to)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.to=$event.target.value}}})]),_c('p',{staticClass:\"txt--center\"}),_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.tab = \"scan\"}}},[_vm._v(\"Or scan for a daterange\")])])]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./rangepicker.vue?vue&type=template&id=5037047f&lang=pug\"\nimport script from \"./rangepicker.vue?vue&type=script&lang=js\"\nexport * from \"./rangepicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./rangepicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h2',{staticClass:\"contain\"},[_vm._v(\"Backtest\")]),_c('div',{staticClass:\"hr\"}),_c('config-builder',{on:{\"config\":_vm.check}}),(_vm.backtestable)?_c('div',[_c('div',{staticClass:\"txt--center\"},[(_vm.backtestState !== \"fetching\")?_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.run($event)}}},[_vm._v(\"Backtest\")]):_vm._e(),(_vm.backtestState === \"fetching\")?_c('div',{staticClass:\"scan-btn\"},[_c('p',[_vm._v(\"Running backtest..\")]),_c('spinner')],1):_vm._e()])]):_vm._e(),(_vm.backtestResult && _vm.backtestState === \"fetched\")?_c('result',{attrs:{\"result\":_vm.backtestResult}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('dataset-picker',{staticClass:\"my2 contain\",on:{\"dataset\":_vm.updateDataset}}),_c('div',{staticClass:\"hr\"}),_c('strat-picker',{staticClass:\"my2 contain\",on:{\"stratConfig\":_vm.updateStrat}}),_c('div',{staticClass:\"hr\"}),_c('paper-trader',{staticClass:\"contain\",on:{\"settings\":_vm.updatePaperTrader}}),_c('div',{staticClass:\"hr\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Select a dataset\")]),(_vm.datasetScanstate === \"idle\")?_c('div',{staticClass:\"txt--center my2\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.datasetScanstate === \"scanning\")?_c('div',{staticClass:\"txt--center my2\"},[_c('spinner')],1):_vm._e(),(_vm.datasetScanstate === \"scanned\")?_c('div',{staticClass:\"my2\"},[(_vm.datasets.length != 0)?_c('div',[_c('table',{staticClass:\"full\"},[_vm._m(0),_c('tbody',_vm._l((_vm.datasets),function(set,i){return _c('tr',[_c('td',{staticClass:\"radio\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.setIndex),expression:\"setIndex\"}],attrs:{\"type\":\"radio\",\"name\":\"dataset\",\"id\":set.id},domProps:{\"value\":i,\"checked\":_vm._q(_vm.setIndex,i)},on:{\"change\":function($event){_vm.setIndex=i}}})]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.exchange))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.currency))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.asset))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.fmt(set.from)))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.fmt(set.to)))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.humanizeDuration(set.to.diff(set.from))))])])])}))]),(!_vm.rangeVisible)?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.openRange($event)}}},[_vm._v(\"Adjust range\")]):_vm._e(),(_vm.rangeVisible)?[_c('div',[_c('label',{attrs:{\"for\":\"customFrom\"}},[_vm._v(\"From:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.customFrom),expression:\"customFrom\"}],domProps:{\"value\":(_vm.customFrom)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.customFrom=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"customTo\"}},[_vm._v(\"To:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.customTo),expression:\"customTo\"}],domProps:{\"value\":(_vm.customTo)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.customTo=$event.target.value}}})])]:_vm._e()],2):_c('em',[_vm._v(\"No Data found \"),_c('a',{attrs:{\"href\":\"#/data/importer\"}},[_vm._v(\"Lets add some\")])])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th'),_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"from\")]),_c('th',[_vm._v(\"to\")]),_c('th',[_vm._v(\"duration\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./datasetpicker.vue?vue&type=template&id=689b8a00&lang=pug\"\nimport script from \"./datasetpicker.vue?vue&type=script&lang=js\"\nexport * from \"./datasetpicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./datasetpicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./backtestConfigBuilder.vue?vue&type=template&id=0b74d9a3&lang=pug\"\nimport script from \"./backtestConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./backtestConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"hr contain\"}),_vm._m(0),_c('result-summary',{attrs:{\"report\":_vm.result.performanceReport}}),_c('div',{staticClass:\"hr contain\"}),_c('chart',{attrs:{\"data\":_vm.candles,\"height\":\"500\"}}),_c('div',{staticClass:\"hr contain\"}),_c('roundtripTable',{attrs:{\"roundtrips\":_vm.result.roundtrips}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('h3',[_vm._v(\"Backtest result\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('div',{staticClass:\"grd-row summary\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('table',{staticClass:\"p1\"},[_c('tr',[_c('th',[_vm._v(\"start time\")]),_c('td',[_vm._v(_vm._s(_vm.report.startTime))])]),_c('tr',[_c('th',[_vm._v(\"end time\")]),_c('td',[_vm._v(_vm._s(_vm.report.endTime))])]),_c('tr',[_c('th',[_vm._v(\"timespan\")]),_c('td',[_vm._v(_vm._s(_vm.report.timespan))])]),_c('tr',[_c('th',[_vm._v(\"start price\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.startPrice))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"end price\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.endPrice))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"market\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.market))+\"%\")])])])]),_c('paperTradeSummary',{attrs:{\"report\":_vm.report}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./summary.vue?vue&type=template&id=5bfc891d&lang=pug\"\nimport script from \"./summary.vue?vue&type=script&lang=js\"\nexport * from \"./summary.vue?vue&type=script&lang=js\"\nimport style0 from \"./summary.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./result.vue?vue&type=template&id=72b63acc&lang=pug\"\nimport script from \"./result.vue?vue&type=script&lang=js\"\nexport * from \"./result.vue?vue&type=script&lang=js\"\nimport style0 from \"./result.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtester.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtester.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./backtester.vue?vue&type=template&id=da4202e8&lang=pug\"\nimport script from \"./backtester.vue?vue&type=script&lang=js\"\nexport * from \"./backtester.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Redux/vuex inspired reducer, reduces an event into a gekko state.\n// NOTE: this is used by the backend as well as the frontend.\n\nconst skipInitialEvents = ['marketUpdate'];\nconst skipLatestEvents = ['marketStart', 'stratWarmupCompleted'];\nconst trackAllEvents = ['tradeCompleted', 'advice', 'roundtrip'];\n\nconst reduce = (state, event) => {\n const type = event.type;\n const payload = event.payload;\n\n state = {\n ...state,\n latestUpdate: new Date()\n }\n\n if(trackAllEvents.includes(type)) {\n if(!state.events[type]) {\n state = {\n ...state,\n events: {\n ...state.events,\n [type]: [ payload ]\n }\n }\n } else {\n state = {\n ...state,\n events: {\n ...state.events,\n [type]: [ ...state.events[type], payload ]\n }\n }\n }\n }\n\n if(!state.events.initial[type] && !skipInitialEvents.includes(type)) {\n state = {\n ...state,\n events: {\n ...state.events,\n initial: {\n ...state.events.initial,\n [type]: payload\n }\n }\n }\n }\n\n if(!skipLatestEvents.includes(type)) {\n state = {\n ...state,\n events: {\n ...state.events,\n latest: {\n ...state.events.latest,\n [type]: payload\n }\n }\n }\n }\n\n return state;\n}\n\n// export default reduce;\nmodule.exports = reduce;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('div',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.intro)}}),_c('div',{staticClass:\"hr\"}),_c('h2',[_vm._v(\"Available datasets\")]),(_vm.datasetScanstate === \"idle\")?_c('div',{staticClass:\"txt--center my2\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.datasetScanstate === \"scanning\")?_c('div',{staticClass:\"txt--center my2\"},[_c('spinner')],1):_vm._e(),(_vm.datasetScanstate === \"scanned\")?_c('div',{staticClass:\"my2\"},[(_vm.unscannableMakets.length)?_c('div',{staticClass:\"bg--orange p1 warning my1\"},[(!_vm.viewUnscannable)?_c('p',{staticClass:\"clickable\",on:{\"click\":function($event){$event.preventDefault();return _vm.toggleUnscannable($event)}}},[_vm._v(\"Some markets were unscannable, click here for details.\")]):_vm._e(),(_vm.viewUnscannable)?[_c('p',[_vm._v(\"Unable to find datasets in the following markets:\")]),_vm._l((_vm.unscannableMakets),function(market){return _c('div',{staticClass:\"mx2\"},[_vm._v(\"- \"+_vm._s(market.exchange)+\":\"+_vm._s(market.currency)+\":\"+_vm._s(market.asset))])})]:_vm._e()],2):_vm._e(),(_vm.datasets.length)?[_c('table',{staticClass:\"full data\"},[_vm._m(0),_c('tbody',_vm._l((_vm.datasets),function(set){return _c('tr',[_c('td',[_vm._v(_vm._s(set.exchange))]),_c('td',[_vm._v(_vm._s(set.currency))]),_c('td',[_vm._v(_vm._s(set.asset))]),_c('td',[_vm._v(_vm._s(_vm.fmt(set.from)))]),_c('td',[_vm._v(_vm._s(_vm.fmt(set.to)))]),_c('td',[_vm._v(_vm._s(_vm.humanizeDuration(set.to.diff(set.from))))])])}))])]:_vm._e(),(!_vm.datasets.length)?[_c('p',[_vm._v(\"It looks like you don't have any local data yet.\")])]:_vm._e()],2):_vm._e(),_c('div',{staticClass:\"my2\"},[_c('h2',[_vm._v(\"Import more data\")]),_c('p',{staticClass:\"text\"},[_vm._v(\"You can easily import more market data directly from exchanges using the importer.\")]),_c('router-link',{staticClass:\"btn--primary\",attrs:{\"to\":\"/data/importer\"}},[_vm._v(\"Go to the importer!\")])],1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"from\")]),_c('th',[_vm._v(\"to\")]),_c('th',[_vm._v(\"duration\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./data.vue?vue&type=template&id=6009d44c&lang=pug\"\nimport script from \"./data.vue?vue&type=script&lang=js\"\nexport * from \"./data.vue?vue&type=script&lang=js\"\nimport style0 from \"./data.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[(_vm.data && !_vm.data.done)?_c('div',[_c('h2',[_vm._v(\"Importing data..\")]),_c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_vm._m(0),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.data.watch.exchange))])]),_c('div',{staticClass:\"grd-row\"},[_vm._m(1),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.data.watch.currency)+\"/\"+_vm._s(_vm.data.watch.asset))])])]),_c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_vm._m(2),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.from)))])]),_c('div',{staticClass:\"grd-row\"},[_vm._m(3),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.to)))])]),(_vm.initialized)?_c('div',{staticClass:\"grd-row\"},[_vm._m(4),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.latest)))])]):_vm._e(),(_vm.initialized)?_c('div',{staticClass:\"grd-row\"},[_vm._m(5),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fromEnd))])]):_vm._e()]),(!_vm.initialized)?_c('spinner'):_vm._e(),(_vm.initialized)?_c('div',{staticClass:\"contain\"},[_c('progressBar',{attrs:{\"progress\":_vm.progress}})],1):_vm._e(),_c('p',[_c('em',[_vm._v(\"(you don't have to wait until the import is done,you can already start \"),_c('router-link',{attrs:{\"to\":\"/backtest\"}},[_vm._v(\"backtesting\")]),_vm._v(\").\")],1)])],1):_vm._e(),(_vm.data && _vm.data.done)?_c('div',{staticClass:\"txt--center\"},[_c('h2',[_vm._v(\"Import done\")]),_c('p',[_vm._v(\" Go and \"),_c('router-link',{attrs:{\"to\":\"/backtest\"}},[_vm._v(\"backtest\")]),_vm._v(\" with your new data!\")],1)]):_vm._e(),(!_vm.data)?_c('div',{staticClass:\"txt--center\"},[_c('h2',[_vm._v(\"ERROR: Unknown import\")]),_c('p',[_c('I',[_vm._v(\"don't know this import..\")])],1)]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Market:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Currency/Asset:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"From:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"To:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Imported data until:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Remaining:\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.progress)?_c('div',{staticClass:\"progressbarWrapper\"},[_c('p',[_c('strong',[_vm._v(_vm._s(_vm.round(_vm.progress))+\"%\")])]),_c('div',{staticClass:\"progressbar\"},[_c('div',{style:({width: _vm.progress + \"%\"})})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// http://stackoverflow.com/questions/7190898/progress-bar-with-html-and-css\n\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./progressBar.vue?vue&type=template&id=2b42ff94&lang=pug\"\nimport script from \"./progressBar.vue?vue&type=script&lang=js\"\nexport * from \"./progressBar.vue?vue&type=script&lang=js\"\nimport style0 from \"./progressBar.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./single.vue?vue&type=template&id=b930fa5e&lang=pug\"\nimport script from \"./single.vue?vue&type=script&lang=js\"\nexport * from \"./single.vue?vue&type=script&lang=js\"\nimport style0 from \"./single.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst init = () => {\n get('imports', (err, resp) => {\n store.commit('syncImports', resp);\n });\n}\n\nconst sync = () => {\n bus.$on('import_update', data => {\n store.commit('updateImport', data);\n });\n}\n\nexport default function() {\n init();\n sync();\n}","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\nimport _ from 'lodash'\n\nconst init = () => {\n get('gekkos', (err, resp) => {\n const gekkos = resp;\n store.commit('syncGekkos', gekkos);\n });\n}\n\nconst sync = () => {\n bus.$on('gekko_new', data => store.commit('addGekko', data.state));\n bus.$on('gekko_event', data => store.commit('updateGekko', data));\n bus.$on('gekko_archived', data => store.commit('archiveGekko', data.id));\n bus.$on('gekko_error', data => store.commit('errorGekko', data));\n bus.$on('gekko_deleted', data => store.commit('deleteGekko', data.id));\n\n // unused:\n // bus.$on('gekko_stopped', data => store.commit('x', data.id));\n // bus.$on('gekko_deleted', data => store.commit('x', data.id));\n}\n\nexport default function() {\n init();\n sync();\n}","import store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst init = () => {}\n\nconst sync = () => {\n bus.$on('WS_STATUS_CHANGE', ws => {\n return store.commit('setGlobalWarning', {key: 'connected', value: ws.connected});\n });\n}\n\nexport default function() {\n init();\n sync();\n}","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst transformMarkets = backendData => {\n if(!backendData) {\n return {};\n }\n\n var exchangesRaw = backendData;\n var exchangesTemp = {};\n\n exchangesRaw.forEach(e => {\n exchangesTemp[e.slug] = exchangesTemp[e.slug] || {markets: {}};\n\n e.markets.forEach( pair => {\n let [ currency, asset ] = pair['pair'];\n exchangesTemp[e.slug].markets[currency] = exchangesTemp[e.slug].markets[currency] || [];\n exchangesTemp[e.slug].markets[currency].push( asset );\n });\n\n if (\"exchangeMaxHistoryAge\" in e) {\n exchangesTemp[e.slug].exchangeMaxHistoryAge = e.exchangeMaxHistoryAge;\n }\n\n exchangesTemp[e.slug].importable = e.providesFullHistory ? true : false;\n exchangesTemp[e.slug].tradable = e.tradable ? true : false;\n exchangesTemp[e.slug].requires = e.requires;\n });\n\n return exchangesTemp;\n}\n\n\nconst init = () => {\n get('apiKeys', (err, resp) => {\n store.commit('syncApiKeys', resp);\n });\n\n get('exchanges', (err, resp) => {\n store.commit('syncExchanges', transformMarkets(resp));\n })\n}\n\nconst sync = () => {\n bus.$on('apiKeys', data => {\n store.commit('syncApiKeys', data.exchanges);\n });\n}\n\nexport default function() {\n init();\n sync();\n}\n","import Vue from 'vue'\nimport Vuex from 'vuex'\n\nimport syncImports from './modules/imports/sync'\nimport syncGekkos from './modules/gekkos/sync'\nimport syncNotifications from './modules/notifications/sync'\nimport syncConfig from './modules/config/sync'\n\nexport default function() {\n syncImports();\n syncGekkos();\n syncNotifications();\n syncConfig();\n}","import _ from 'lodash'\nimport Vue from 'vue'\n\nimport { wsPath } from '../../tools/api'\nimport initializeState from '../../store/init'\n\nvar socket = null;\n\nexport const bus = new Vue();\n\nbus.$on('gekko_update', data => console.log(data))\n\nbus.$on('import_update', data => console.log(data))\nbus.$on('import_error', data => {\n alert('IMPORT ERROR: ' + data.error);\n});\n\nconst info = {\n connected: false\n}\n\nexport const connect = () => {\n socket = new ReconnectingWebSocket(wsPath, null, { maxReconnectInterval: 4000 });\n\n setTimeout(() => {\n // in case we cannot connect\n if(!info.connected) {\n initializeState();\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n }, 500);\n\n socket.onopen = () => {\n if(info.connected)\n return;\n\n info.connected = true;\n bus.$emit('WS_STATUS_CHANGE', info);\n initializeState();\n }\n socket.onclose = () => {\n if(!info.connected)\n return;\n\n info.connected = false;\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n socket.onerror = () => {\n if(!info.connected)\n return;\n\n info.connected = false;\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n socket.onmessage = function(message) {\n const payload = JSON.parse(message.data);\n // console.log('ws message:', payload);\n bus.$emit(payload.type, payload);\n };\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain py2\"},[_c('h3',[_vm._v(\"Market watchers\")]),(!_vm.watchers.length)?_c('div',{staticClass:\"text\"},[_c('p',[_vm._v(\"You don't have any market watchers.\")])]):_vm._e(),(_vm.watchers.length)?_c('table',{staticClass:\"full clickable\"},[_vm._m(0),_c('tbody',_vm._l((_vm.watchers),function(gekko){return _c('tr',{staticClass:\"clickable\",on:{\"click\":function($event){_vm.$router.push({path: (\"/live-gekkos/\" + (gekko.id))})}}},[_c('td',[_vm._v(_vm._s(gekko.config.watch.exchange))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.currency))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.asset))]),_c('td',[_vm._v(_vm._s(_vm.status(gekko)))]),_c('td',[(gekko.events.initial.candle)?[_vm._v(_vm._s(_vm.fmt(gekko.events.initial.candle.start)))]:_vm._e()],2),_c('td',[(gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.fmt(gekko.events.latest.candle.start)))]:_vm._e()],2),_c('td',[(gekko.events.initial.candle && gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.timespan(gekko.events.latest.candle.start, gekko.events.initial.candle.start)))]:_vm._e()],2)])}))]):_vm._e(),_c('h3',[_vm._v(\"Strat runners\")]),(!_vm.stratrunners.length)?_c('div',{staticClass:\"text\"},[_c('p',[_vm._v(\"You don't have any stratrunners.\")])]):_vm._e(),(_vm.stratrunners.length)?_c('table',{staticClass:\"full\"},[_vm._m(1),_c('tbody',_vm._l((_vm.stratrunners),function(gekko){return _c('tr',{staticClass:\"clickable\",on:{\"click\":function($event){_vm.$router.push({path: (\"/live-gekkos/\" + (gekko.id))})}}},[_c('td',[_vm._v(_vm._s(gekko.config.watch.exchange))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.currency))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.asset))]),_c('td',[_vm._v(_vm._s(_vm.status(gekko)))]),_c('td',[(gekko.events.initial.candle && gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.timespan(gekko.events.latest.candle.start, gekko.events.initial.candle.start)))]:_vm._e()],2),_c('td',[_vm._v(_vm._s(gekko.config.tradingAdvisor.method))]),_c('td',[(!_vm.report(gekko))?[_vm._v(\"0\")]:_vm._e(),(_vm.report(gekko))?[_vm._v(_vm._s(_vm.round(_vm.report(gekko).profit))+\" \"+_vm._s(_vm.report(gekko).currency))]:_vm._e()],2),_c('td',[_vm._v(_vm._s(gekko.logType))]),_c('td',[(!gekko.events.tradeCompleted)?[_vm._v(\"0\")]:_vm._e(),(gekko.events.tradeCompleted)?[_vm._v(_vm._s(gekko.events.tradeCompleted.length))]:_vm._e()],2)])}))]):_vm._e(),_c('div',{staticClass:\"hr\"}),_c('h2',[_vm._v(\"Start a new live Gekko\")]),_c('router-link',{staticClass:\"btn--primary\",attrs:{\"to\":\"/live-gekkos/new\"}},[_vm._v(\"Start a new live Gekko!\")])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"status\")]),_c('th',[_vm._v(\"started at\")]),_c('th',[_vm._v(\"last update\")]),_c('th',[_vm._v(\"duration\")])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"status\")]),_c('th',[_vm._v(\"duration\")]),_c('th',[_vm._v(\"strategy\")]),_c('th',[_vm._v(\"PnL\")]),_c('th',[_vm._v(\"type\")]),_c('th',[_vm._v(\"trades\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./list.vue?vue&type=template&id=55dd2514&lang=pug\"\nimport script from \"./list.vue?vue&type=script&lang=js\"\nexport * from \"./list.vue?vue&type=script&lang=js\"\nimport style0 from \"./list.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[_c('div',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.intro)}}),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Currently running imports\")]),(_vm.imports.length === 0)?_c('p',[_vm._v(\"You currently don't have any imports running.\")]):_vm._e(),(_vm.imports.length)?_c('ul',_vm._l((_vm.imports),function(_import){return _c('li',[_c('router-link',{attrs:{\"to\":\"/data/importer/import/\" + _import.id}},[_vm._v(_vm._s(_import.watch.exchange)+\":\"+_vm._s(_import.watch.currency)+\"/\"+_vm._s(_import.watch.asset))])],1)})):_vm._e(),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Start a new import\")]),_c('import-config-builder',{on:{\"config\":_vm.updateConfig}}),_c('div',{staticClass:\"hr\"}),_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.run($event)}}},[_vm._v(\"Import\")])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Market\")]),_c('market-picker',{attrs:{\"only-importable\":\"true\"},on:{\"market\":_vm.updateMarketConfig}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('range-creator',{on:{\"range\":_vm.updateRange}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./importConfigBuilder.vue?vue&type=template&id=a8c578c6&lang=pug\"\nimport script from \"./importConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./importConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./importer.vue?vue&type=template&id=3e819299&lang=pug\"\nimport script from \"./importer.vue?vue&type=script&lang=js\"\nexport * from \"./importer.vue?vue&type=script&lang=js\"\nimport style0 from \"./importer.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"contain grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\",domProps:{\"innerHTML\":_vm._s(_vm.left)}}),_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-3-6 txt--center\"},[_c('img',{attrs:{\"src\":\"static/gekko.jpg\"}}),_c('p',[_c('em',[_vm._v(\"The most valuable commodity I know of is information.\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./home.vue?vue&type=template&id=2758f780&lang=pug\"\nimport script from \"./home.vue?vue&type=script&lang=js\"\nexport * from \"./home.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"my2\"},[(!_vm.data)?_c('div',{staticClass:\"contain\"},[_c('h1',[_vm._v(\"Unknown Gekko instance\")]),_c('p',[_vm._v(\"Gekko doesn't know what gekko this is...\")])]):_vm._e(),(_vm.data)?_c('div',[_c('h2',{staticClass:\"contain\"},[_vm._v(\"Gekko \"+_vm._s(_vm.type))]),(_vm.isArchived)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This is an archived Gekko, it is currently not running anymore.\")]):_vm._e(),(_vm.data.errorMessage)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This is Gekko crashed with the following error: \"+_vm._s(_vm.data.errorMessage))]):_vm._e(),_c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Market\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Exchange\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.exchange))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Currency\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.currency))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Asset\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.asset))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Type\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.type))])])]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Runtime\")]),(_vm.isLoading)?_c('spinner'):_vm._e(),(!_vm.isLoading)?[(_vm.initialEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Watching since\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.initialEvents.candle.start)))])]):_vm._e(),(_vm.latestEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Received data until\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.latestEvents.candle.start)))])]):_vm._e(),(_vm.latestEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Data spanning\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.humanizeDuration(_vm.moment(_vm.latestEvents.candle.start).diff(_vm.moment(_vm.initialEvents.candle.start)))))])]):_vm._e(),(_vm.isStratrunner)?[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Amount of trades\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.trades.length))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Candle size\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.config.tradingAdvisor.candleSize))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"History size\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.config.tradingAdvisor.historySize))])])]:_vm._e()]:_vm._e()],2)]),(_vm.warmupRemaining)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This stratrunner is still warming up for the next \"),_c('i',[_vm._v(_vm._s(_vm.warmupRemaining.replace(',', ' and ')))]),_vm._v(\", it will not trade until it is warmed up.\")]):_vm._e(),(_vm.isStratrunner)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Strategy\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Name\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('strong',[_vm._v(_vm._s(_vm.stratName))])])]),_vm._v(\"Parameters\"),_c('pre',[_vm._v(_vm._s(_vm.stratParams))])]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Profit report\")]),(!_vm.report)?[_c('p',[(_vm.isArchived)?_c('em',[_vm._v(\"This Gekko never executed a trade..\")]):_vm._e(),(!_vm.isArchived)?_c('em',[_vm._v(\"Waiting for at least one trade..\")]):_vm._e()])]:_vm._e(),(_vm.report)?[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Start balance\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.startBalance)))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Current balance\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.balance)))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Market\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.market / 100 * _vm.report.startPrice))+\" \"+_vm._s(_vm.config.watch.currency)+\" (\"+_vm._s(_vm.round(_vm.report.market))+\" %)\")])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Profit\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.profit))+\" \"+_vm._s(_vm.config.watch.currency)+\" (\"+_vm._s(_vm.round(_vm.report.relativeProfit))+\" %)\")])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Alpha\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.alpha))+\" \"+_vm._s(_vm.config.watch.currency))])])]:_vm._e()],2)]):_vm._e(),(_vm.isStratrunner && !_vm.watcher && !_vm.isArchived)?_c('p',[_vm._v(\"WARNING: stale gekko, not attached to a watcher, please report \"),_c('a',{attrs:{\"href\":\"https://github.com/askmike/gekko/issues\"}},[_vm._v(\"here\")]),_vm._v(\".\")]):_vm._e(),(!_vm.isArchived)?_c('p',[_c('a',{staticClass:\"w100--s my1 btn--red\",on:{\"click\":_vm.stopGekko}},[_vm._v(\"Stop Gekko\")])]):_vm._e(),(_vm.isArchived)?_c('p',[_c('a',{staticClass:\"w100--s my1 btn--red\",on:{\"click\":_vm.deleteGekko}},[_vm._v(\"Delete Gekko\")])]):_vm._e(),(_vm.isStratrunner && _vm.watcher && !_vm.isArchived)?_c('p',[_c('em',[_vm._v(\"This gekko gets market data from \"),_c('router-link',{attrs:{\"to\":\"/live-gekkos/\" + _vm.watcher.id}},[_vm._v(\"this market watcher\")])],1),_vm._v(\".\")]):_vm._e()]),(!_vm.isLoading)?[_c('h3',{staticClass:\"contain\"},[_vm._v(\"Market graph\")]),(_vm.candleFetch === \"fetching\")?_c('spinner'):_vm._e(),(_vm.candleFetch === \"fetched\")?[_c('chart',{attrs:{\"data\":_vm.chartData,\"height\":300}})]:_vm._e(),(_vm.isStratrunner)?_c('roundtrips',{attrs:{\"roundtrips\":_vm.roundtrips}}):_vm._e()]:_vm._e()],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./singleGekko.vue?vue&type=template&id=5ce0f611&lang=pug\"\nimport script from \"./singleGekko.vue?vue&type=script&lang=js\"\nexport * from \"./singleGekko.vue?vue&type=script&lang=js\"\nimport style0 from \"./singleGekko.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=style&index=0&lang=css\"","// global window.CONFIG\n\nconst config = window.CONFIG.ui;\nconst endpoint = `${config.host}${config.port === 80 ? '' : `:${config.port}`}${config.path}`;\n\nlet basePath, restPath, wsPath;\n\n// rest API path\nif(config.ssl) {\n basePath = `https://${endpoint}`;\n} else {\n basePath = `http://${endpoint}`;\n}\n\nrestPath = basePath + 'api/';\n\n// ws API path\nif(config.ssl) {\n wsPath = `wss://${endpoint}api`;\n} else {\n wsPath = `ws://${endpoint}api`;\n}\n\nexport {\n wsPath,\n restPath,\n basePath\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"px1\"},[_c('h3',[_vm._v(\"Paper trader\")]),(_vm.toggle === \"closed\")?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.switchToggle($event)}}},[_vm._v(\"Change paper trader settings\")]):_vm._e(),(_vm.toggle === \"open\")?[_c('p',[_vm._v(\"Settings:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawPaperTraderParams),expression:\"rawPaperTraderParams\"}],staticClass:\"params\",domProps:{\"value\":(_vm.rawPaperTraderParams)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawPaperTraderParams=$event.target.value}}}),(_vm.rawPaperTraderParamsError)?_c('p',{staticClass:\"bg--red p1\"},[_vm._v(_vm._s(_vm.rawPaperTraderParamsError.message))]):_vm._e()]:_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./papertrader.vue?vue&type=template&id=6a733e04&lang=pug\"\nimport script from \"./papertrader.vue?vue&type=script&lang=js\"\nexport * from \"./papertrader.vue?vue&type=script&lang=js\"\nimport style0 from \"./papertrader.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { post } from '../../../tools/ajax'\n\nvar mixin = {\n data: () => {\n return {\n datasets: [],\n datasetScanstate: 'idle',\n unscannableMakets: []\n } \n },\n methods: {\n scan: function() {\n this.datasetScanstate = 'scanning';\n\n post('scansets', {}, (error, response) => {\n this.datasetScanstate = 'scanned';\n\n this.unscannableMakets = response.errors;\n\n let sets = [];\n\n response.datasets.forEach(market => {\n market.ranges.forEach((range, i) => {\n sets.push({\n exchange: market.exchange,\n currency: market.currency,\n asset: market.asset,\n from: moment.unix(range.from).utc(),\n to: moment.unix(range.to).utc(),\n id: market.exchange + market.asset + market.currency + i\n });\n });\n });\n\n // for now, filter out sets smaller than 3 hours..\n sets = sets.filter(set => {\n if(set.to.diff(set.from, 'hours') > 2)\n return true;\n });\n\n sets = sets.sort((a, b) => {\n let adiff = a.to.diff(a.from);\n let bdiff = b.to.diff(b.from);\n\n if(adiff < bdiff)\n return -1;\n\n if(adiff > bdiff)\n return 1;\n\n return 0;\n }).reverse();\n\n this.datasets = sets;\n })\n }\n }\n}\n\nexport default mixin;","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain roundtrips\"},[_c('h2',[_vm._v(\"Roundtrips\")]),(_vm.roundtrips.length)?_c('table',[_c('thead',[_vm._m(0),_vm._l((_vm.roundtrips),function(rt){return _c('tr',[_c('td',[_vm._v(_vm._s(_vm.fmt(rt.entryAt)))]),_c('td',[_vm._v(_vm._s(_vm.fmt(rt.exitAt)))]),_c('td',[_vm._v(_vm._s(_vm.diff(rt.duration)))]),_c('td',[_vm._v(_vm._s(_vm.round(rt.entryBalance)))]),_c('td',[_vm._v(_vm._s(_vm.round(rt.exitBalance)))]),(Math.sign(rt.pnl)===-1)?[_c('td',{staticClass:\"loss\"},[_vm._v(_vm._s(Math.sign(rt.pnl)*rt.pnl.toFixed(2)))]),_c('td',{staticClass:\"loss\"},[_vm._v(_vm._s(rt.profit.toFixed(2))+\"%\")])]:[_c('td',{staticClass:\"profit\"},[_vm._v(_vm._s(rt.pnl.toFixed(2)))]),_c('td',{staticClass:\"profit\"},[_vm._v(_vm._s(rt.profit.toFixed(2))+\"%\")])]],2)})],2)]):_vm._e(),(!_vm.roundtrips.length)?_c('div',[_c('p',[_vm._v(\"Not enough data to display\")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"Entry at (UTC)\")]),_c('th',[_vm._v(\"Exit at (UTC)\")]),_c('th',[_vm._v(\"Exposure\")]),_c('th',[_vm._v(\"Entry balance\")]),_c('th',[_vm._v(\"Exit balance\")]),_c('th',[_vm._v(\"P&L\")]),_c('th',[_vm._v(\"Profit\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./roundtripTable.vue?vue&type=template&id=3c32021a&lang=pug\"\nimport script from \"./roundtripTable.vue?vue&type=script&lang=js\"\nexport * from \"./roundtripTable.vue?vue&type=script&lang=js\"\nimport style0 from \"./roundtripTable.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=style&index=0&lang=css\"","import superagent from 'superagent'\nimport noCache from 'superagent-no-cache'\nimport { restPath } from './api.js'\n\nconst processResponse = next => (err, res) => {\n if(err)\n return next(err);\n\n if(!res.text)\n return next('no data');\n\n let data = JSON.parse(res.text);\n\n next(false, data);\n}\n\nexport const post = (to, data, next) => {\n superagent\n .post(restPath + to)\n .use(noCache)\n .send(data)\n .end(processResponse(next));\n}\n\nexport const get = (to, next) => {\n superagent\n .get(restPath + to)\n .use(noCache)\n .end(processResponse(next));\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=style&index=0&lang=css\""],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/gekko/singleGekko.vue?6cec","webpack:///./src/components/global/progressBar.vue?7bcc","webpack:///./src/components/global/paperTradeSummary.vue?13b5","webpack:///src/components/global/paperTradeSummary.vue","webpack:///./src/components/global/paperTradeSummary.vue?a8ef","webpack:///./src/components/global/paperTradeSummary.vue","webpack:///./src/components/global/configbuilder/papertrader.vue?c5cd","webpack:///./src/components/gekko/new.vue?c104","webpack:///./src/components/gekko/new.vue?367c","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?035a","webpack:///./src/components/global/configbuilder/typepicker.vue?df24","webpack:///src/components/global/configbuilder/typepicker.vue","webpack:///./src/components/global/configbuilder/typepicker.vue?cf28","webpack:///./src/components/global/configbuilder/typepicker.vue","webpack:///src/components/gekko/gekkoConfigBuilder.vue","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?8d92","webpack:///./src/components/gekko/gekkoConfigBuilder.vue","webpack:///src/components/gekko/new.vue","webpack:///./src/components/gekko/new.vue?ae9a","webpack:///./src/components/gekko/new.vue","webpack:///./src/components/data/data.vue?4abe","webpack:///./src/tools/marked.js","webpack:///./src/components/global/configbuilder/marketpicker.vue?d701","webpack:///src/components/global/configbuilder/marketpicker.vue","webpack:///./src/components/global/configbuilder/marketpicker.vue?200d","webpack:///./src/components/global/configbuilder/marketpicker.vue","webpack:///./src/components/global/configbuilder/stratpicker.vue?fda9","webpack:///src/components/global/configbuilder/stratpicker.vue","webpack:///./src/components/global/configbuilder/stratpicker.vue?8a34","webpack:///./src/components/global/configbuilder/stratpicker.vue","webpack:///./src/components/global/configbuilder/rangepicker.vue?ce7c","webpack:///./src/components/global/configbuilder/rangecreator.vue?8425","webpack:///src/components/global/configbuilder/rangecreator.vue","webpack:///./src/components/global/configbuilder/rangecreator.vue?3f8d","webpack:///./src/components/global/configbuilder/rangecreator.vue","webpack:///./src/components/data/import/importConfigBuilder.vue?3911","webpack:///./src/components/global/blockSpinner.vue?cca6","webpack:///src/components/global/blockSpinner.vue","webpack:///./src/components/global/blockSpinner.vue?7b17","webpack:///./src/components/global/blockSpinner.vue","webpack:///./src/App.vue?77b6","webpack:///./src/components/layout/header.vue?345a","webpack:///src/components/layout/header.vue","webpack:///./src/components/layout/header.vue?8ecd","webpack:///./src/components/layout/header.vue","webpack:///./src/components/layout/footer.vue?0614","webpack:///src/components/layout/footer.vue","webpack:///./src/components/layout/footer.vue?6aff","webpack:///./src/components/layout/footer.vue","webpack:///./src/components/layout/modal.vue?5ed7","webpack:///src/components/layout/modal.vue","webpack:///./src/components/layout/modal.vue?6e33","webpack:///./src/components/layout/modal.vue","webpack:///src/App.vue","webpack:///./src/App.vue?8f16","webpack:///./src/App.vue","webpack:///./src/store/modules/imports/mutations.js","webpack:///./src/store/modules/gekkos/mutations.js","webpack:///./src/store/modules/notifications/mutations.js","webpack:///./src/store/modules/config/mutations.js","webpack:///./src/store/index.js","webpack:///./src/components/backtester/backtestConfigBuilder.vue?fda9","webpack:///./src/components/backtester/result/chartWrapper.vue?d2a0","webpack:///./src/components/global/configbuilder/rangecreator.vue?c7ad","webpack:///./src/components/layout/modal.vue?a2b4","webpack:///./src/components/backtester/result/chartWrapper.vue?cfc8","webpack:///./src/d3/chart4.js","webpack:///./src/d3/message.js","webpack:///src/components/backtester/result/chartWrapper.vue","webpack:///./src/components/backtester/result/chartWrapper.vue?414d","webpack:///./src/components/backtester/result/chartWrapper.vue","webpack:///./src/main.js","webpack:///./src/components/backtester/result/summary.vue?6f4b","webpack:///./src/components/config/config.vue?9014","webpack:///./src/components/config/apiConfigBuilder.vue?901e","webpack:///./src/components/global/configbuilder/exchangepicker.vue?f5ea","webpack:///src/components/global/configbuilder/exchangepicker.vue","webpack:///./src/components/global/configbuilder/exchangepicker.vue?f140","webpack:///./src/components/global/configbuilder/exchangepicker.vue","webpack:///src/components/config/apiConfigBuilder.vue","webpack:///./src/components/config/apiConfigBuilder.vue?a340","webpack:///./src/components/config/apiConfigBuilder.vue","webpack:///src/components/config/config.vue","webpack:///./src/components/config/config.vue?03e8","webpack:///./src/components/config/config.vue","webpack:///./src/components/gekko/gekkoConfigBuilder.vue?c09b","webpack:///./src/components/global/configbuilder/rangepicker.vue?e445","webpack:///src/components/global/configbuilder/rangepicker.vue","webpack:///./src/components/global/configbuilder/rangepicker.vue?6482","webpack:///./src/components/global/configbuilder/rangepicker.vue","webpack:///./src/App.vue?8b0d","webpack:///./src/components/config/apiConfigBuilder.vue?bb40","webpack:///./src/components/backtester/backtester.vue?06dc","webpack:///./src/components/backtester/backtestConfigBuilder.vue?bafa","webpack:///./src/components/global/configbuilder/datasetpicker.vue?dc86","webpack:///src/components/global/configbuilder/datasetpicker.vue","webpack:///./src/components/global/configbuilder/datasetpicker.vue?adbd","webpack:///./src/components/global/configbuilder/datasetpicker.vue","webpack:///src/components/backtester/backtestConfigBuilder.vue","webpack:///./src/components/backtester/backtestConfigBuilder.vue?6bee","webpack:///./src/components/backtester/backtestConfigBuilder.vue","webpack:///./src/components/backtester/result/result.vue?f19d","webpack:///./src/components/backtester/result/summary.vue?a48b","webpack:///src/components/backtester/result/summary.vue","webpack:///./src/components/backtester/result/summary.vue?2c9f","webpack:///./src/components/backtester/result/summary.vue","webpack:///src/components/backtester/result/result.vue","webpack:///./src/components/backtester/result/result.vue?a333","webpack:///./src/components/backtester/result/result.vue","webpack:///src/components/backtester/backtester.vue","webpack:///./src/components/backtester/backtester.vue?b754","webpack:///./src/components/backtester/backtester.vue","webpack:///../state/reduceState.js","webpack:///./src/components/data/data.vue?5f3a","webpack:///src/components/data/data.vue","webpack:///./src/components/data/data.vue?7897","webpack:///./src/components/data/data.vue","webpack:///./src/components/backtester/result/roundtripTable.vue?cb8d","webpack:///./src/components/gekko/list.vue?dec3","webpack:///./src/components/data/import/single.vue?892b","webpack:///./src/components/global/progressBar.vue?f48f","webpack:///src/components/global/progressBar.vue","webpack:///./src/components/global/progressBar.vue?3819","webpack:///./src/components/global/progressBar.vue","webpack:///src/components/data/import/single.vue","webpack:///./src/components/data/import/single.vue?ea36","webpack:///./src/components/data/import/single.vue","webpack:///./src/store/modules/imports/sync.js","webpack:///./src/store/modules/gekkos/sync.js","webpack:///./src/store/modules/notifications/sync.js","webpack:///./src/store/modules/config/sync.js","webpack:///./src/store/init.js","webpack:///./src/components/global/ws.js","webpack:///./src/components/gekko/list.vue?889e","webpack:///src/components/gekko/list.vue","webpack:///./src/components/gekko/list.vue?1de5","webpack:///./src/components/gekko/list.vue","webpack:///./src/components/data/import/importer.vue?370b","webpack:///./src/components/data/import/importConfigBuilder.vue?d697","webpack:///src/components/data/import/importConfigBuilder.vue","webpack:///./src/components/data/import/importConfigBuilder.vue?4a12","webpack:///./src/components/data/import/importConfigBuilder.vue","webpack:///src/components/data/import/importer.vue","webpack:///./src/components/data/import/importer.vue?5b1c","webpack:///./src/components/data/import/importer.vue","webpack:///./src/components/layout/home.vue?d339","webpack:///src/components/layout/home.vue","webpack:///./src/components/layout/home.vue?334a","webpack:///./src/components/layout/home.vue","webpack:///./src/components/gekko/singleGekko.vue?a7f7","webpack:///src/components/gekko/singleGekko.vue","webpack:///./src/components/gekko/singleGekko.vue?71ef","webpack:///./src/components/gekko/singleGekko.vue","webpack:///./src/components/global/configbuilder/datasetpicker.vue?0d02","webpack:///./src/components/global/blockSpinner.vue?69ce","webpack:///./src/components/data/import/single.vue?dfe8","webpack:///./src/tools/api.js","webpack:///./src/components/global/configbuilder/papertrader.vue?4204","webpack:///src/components/global/configbuilder/papertrader.vue","webpack:///./src/components/global/configbuilder/papertrader.vue?fdb2","webpack:///./src/components/global/configbuilder/papertrader.vue","webpack:///./src/components/global/mixins/dataset.js","webpack:///./src/components/global/configbuilder/stratpicker.vue?808f","webpack:///./src/components/global/paperTradeSummary.vue?c6c2","webpack:///./src/components/layout/header.vue?b5b8","webpack:///./src/components/backtester/result/roundtripTable.vue?64de","webpack:///src/components/backtester/result/roundtripTable.vue","webpack:///./src/components/backtester/result/roundtripTable.vue?35c4","webpack:///./src/components/backtester/result/roundtripTable.vue","webpack:///./src/components/backtester/result/result.vue?65dd","webpack:///./src/components/global/configbuilder/typepicker.vue?09f6","webpack:///./src/tools/ajax.js","webpack:///./src/components/data/import/importer.vue?3808"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_singleGekko_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_progressBar_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","render","_vm","this","_h","$createElement","_c","_self","staticClass","_v","_s","report","trades","round2","sharpe","round","startBalance","currency","balance","_m","class","profitClass","relativeProfit","staticRenderFns","paperTradeSummaryvue_type_script_lang_js","props","methods","toFixed","computed","global_paperTradeSummaryvue_type_script_lang_js","component","componentNormalizer","__webpack_exports__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_papertrader_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_new_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","on","config","updateConfig","pendingStratrunner","_e","attrs","href","click","$event","preventDefault","start","gekkoConfigBuildervue_type_template_id_6015a1e6_lang_pug_render","only-tradable","isTradebot","market","updateMarketConfig","type","updateType","stratConfig","updateStrat","settings","updatePaperTrader","gekkoConfigBuildervue_type_template_id_6015a1e6_lang_pug_staticRenderFns","typepickervue_type_template_id_4a1aa84c_lang_pug_render","for","_l","directives","rawName","expression","domProps","checked","_q","selectedTypeIndex","change","typepickervue_type_template_id_4a1aa84c_lang_pug_staticRenderFns","typepickervue_type_script_lang_js","created","emitType","types","$emit","watch","configbuilder_typepickervue_type_script_lang_js","typepicker","gekkoConfigBuildervue_type_script_lang_js","_this","ajax","error","response","candleWriter","toml","parse","part","performanceAnalyzer","enabled","range","strat","paperTrader","components","marketPicker","marketpicker","typePicker","stratPicker","stratpicker","papertrader","assign","trader","valid","validConfig","tradingAdvisor","lodash_default","a","isNaN","candleSize","method","isEmpty","mc","emitConfig","pt","gekko_gekkoConfigBuildervue_type_script_lang_js","gekkoConfigBuilder_component","gekkoConfigBuilder","newvue_type_script_lang_js","spinner","blockSpinner","gekkos","$store","state","watchConfig","raw","pick","vue_runtime_esm","util","extend","requiredHistoricalData","stratSettings","historySize","gekkoConfig","startAt","existingMarketWatcher","optimal","moment","utc","startOf","subtract","unix","available","events","initial","candle","Math","max","format","from","find","exchange","existingTradebot","g","logType","availableApiKeys","apiKeys","val","prev","_this2","gekko","latest","startGekko","err","resp","$router","path","concat","id","_this3","str","alert","includes","startWatcher","routeToGekko","console","next","gekko_newvue_type_script_lang_js","new_component","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_data_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","marked","myRenderer","Renderer","link","title","text","external","newWindow","out","test","setOptions","renderer","$$selectedVal","Array","filter","target","options","selected","map","_value","multiple","e","cur","asset","asst","marketpickervue_type_script_lang_js","exchanges","onlyTradable","each","tradable","onlyImportable","importable","markets","assets","currencies","keys","configbuilder_marketpickervue_type_script_lang_js","strategy","input","composing","rawCandleSize","candleSizeUnit","singularCandleSizeUnit","humanizeDuration","rawStratParams","rawStratParamsError","message","stratpickervue_type_script_lang_js","strategies","emptyStrat","stratParams","empty","params","__empty","parseParams","configbuilder_stratpickervue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rangepicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","to","rangecreatorvue_type_script_lang_js","now","then","clone","fmt","emitRange","fmtTs","mom","emitManualEntry","isValid","scanned","tab","selectedRangeIndex","selectedRange","ranges","configbuilder_rangecreatorvue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_importConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","blockSpinnervue_type_script_lang_js","global_blockSpinnervue_type_script_lang_js","headervue_type_template_id_0a62d360_lang_pug_render","headervue_type_template_id_0a62d360_lang_pug_staticRenderFns","headervue_type_script_lang_js","layout_headervue_type_script_lang_js","header","footervue_type_template_id_7782dc11_lang_pug_render","version","ui","footervue_type_template_id_7782dc11_lang_pug_staticRenderFns","gekkoPackage","uiPackage","footervue_type_script_lang_js","layout_footervue_type_script_lang_js","footer_component","footer","modalvue_type_template_id_340a7d17_lang_pug_render","innerHTML","content","modalvue_type_template_id_340a7d17_lang_pug_staticRenderFns","messages","disconnected","modalvue_type_script_lang_js","active","warnings","connected","layout_modalvue_type_script_lang_js","modal_component","modal","Appvue_type_script_lang_js","top","bottom","src_Appvue_type_script_lang_js","App_component","addImport","imp","imports","syncImports","mutations_updateImport","update","index","findIndex","import_id","item","updated","updates","set","reduceState","syncGekkos","live","archivedGekkos","archive","mutations_addGekko","objectSpread","mutations_updateGekko","has","event","mutations_archiveGekko","stopped","omit","mutations_errorGekko","errored","errorMessage","mutations_deleteGekko","setGlobalWarning","warning","mutations_syncApiKeys","mutations_syncExchanges","use","vuex_esm","debug","mutations","merge","mutations_namespaceObject","gekkos_mutations_namespaceObject","notifications_mutations_namespaceObject","config_mutations_namespaceObject","Store","connection","reconnected","strict","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_backtestConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_chartWrapper_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_rangecreator_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","chartWrappervue_type_template_id_12bcb8d8_lang_pug_render","clickable","isClicked","width","height","_data","_trades","_height","toDate","isNumber","price","date","action","open","dates","prices","svg","d3","select","attr","innerWidth","margin","right","left","margin2","height2","x","scaleUtc","x2","y","scaleLinear","y2","xAxis","axisBottom","xAxis2","yAxis","axisLeft","ticks","brush","brushX","extent","brushed","zoom","scaleExtent","translateExtent","zoomed","line","line2","append","focus","context","domain","min","datum","circles","selectAll","enter","sourceEvent","selection","invert","scaleY","transform","zoomIdentity","scale","translate","_domain","slicedToArray","minIndex","sortedIndex","maxIndex","rescaleX","move","invertX","draw","MIN_CANDLES","chartWrappervue_type_script_lang_js","setTimeout","beforeDestroy","remove","_","size","candles","chart4","html","result_chartWrappervue_type_script_lang_js","vue__WEBPACK_IMPORTED_MODULE_1__","vue_router__WEBPACK_IMPORTED_MODULE_3__","router","base","__dirname","routes","redirect","_components_layout_home_vue__WEBPACK_IMPORTED_MODULE_6__","_components_backtester_backtester_vue__WEBPACK_IMPORTED_MODULE_5__","_components_config_config_vue__WEBPACK_IMPORTED_MODULE_10__","_components_data_data_vue__WEBPACK_IMPORTED_MODULE_7__","_components_data_import_importer_vue__WEBPACK_IMPORTED_MODULE_8__","_components_data_import_single_vue__WEBPACK_IMPORTED_MODULE_9__","_components_gekko_list_vue__WEBPACK_IMPORTED_MODULE_11__","_components_gekko_new_vue__WEBPACK_IMPORTED_MODULE_12__","_components_gekko_singleGekko_vue__WEBPACK_IMPORTED_MODULE_13__","_components_global_ws__WEBPACK_IMPORTED_MODULE_14__","store","_store__WEBPACK_IMPORTED_MODULE_4__","el","h","_App_vue__WEBPACK_IMPORTED_MODULE_2__","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_summary_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","apiKeySets","removeApiKey","addApiToggle","openAddApi","apiConfigBuildervue_type_template_id_4a31b09e_lang_pug_render","updateExchange","cred","credentials","$set","upload","apiConfigBuildervue_type_template_id_4a31b09e_lang_pug_staticRenderFns","exchangepickervue_type_template_id_50c29cb0_lang_pug_render","exchangepickervue_type_template_id_50c29cb0_lang_pug_staticRenderFns","exchangepickervue_type_script_lang_js","emitExchange","configbuilder_exchangepickervue_type_script_lang_js","exchangepicker","apiConfigBuildervue_type_script_lang_js","exchangePicker","requires","values","confirm","config_apiConfigBuildervue_type_script_lang_js","apiConfigBuilder_component","apiConfigBuilder","configvue_type_script_lang_js","config_configvue_type_script_lang_js","config_component","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_gekkoConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","scan","printRange","rangepickervue_type_script_lang_js","diff","duration","humanize","reset","configbuilder_rangepickervue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_apiConfigBuilder_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","check","backtestState","run","backtestResult","backtestConfigBuildervue_type_template_id_0b74d9a3_lang_pug_render","dataset","updateDataset","backtestConfigBuildervue_type_template_id_0b74d9a3_lang_pug_staticRenderFns","datasetpickervue_type_template_id_689b8a00_lang_pug_render","datasetScanstate","datasets","setIndex","rangeVisible","openRange","customFrom","customTo","datasetpickervue_type_template_id_689b8a00_lang_pug_staticRenderFns","datasetpickervue_type_script_lang_js","mixins","largest","updateCustomRange","emitSet","configbuilder_datasetpickervue_type_script_lang_js","datasetpicker","backtestConfigBuildervue_type_script_lang_js","datasetPicker","backtest","daterange","backtestResultExporter","writeToDisk","stratUpdates","roundtrips","stratCandles","stratCandleProps","sc","backtester_backtestConfigBuildervue_type_script_lang_js","backtestConfigBuilder_component","backtestConfigBuilder","resultvue_type_template_id_72b63acc_lang_pug_render","performanceReport","resultvue_type_template_id_72b63acc_lang_pug_staticRenderFns","summaryvue_type_template_id_5bfc891d_lang_pug_render","startTime","endTime","timespan","startPrice","endPrice","summaryvue_type_template_id_5bfc891d_lang_pug_staticRenderFns","summaryvue_type_script_lang_js","paperTradeSummary","result_summaryvue_type_script_lang_js","summary_component","summary","resultvue_type_script_lang_js","roundtripTable","resultSummary","chart","chartWrapper","result_resultvue_type_script_lang_js","result_component","backtestervue_type_script_lang_js","backtestable","configBuilder","backtester_backtestervue_type_script_lang_js","backtester_component","skipInitialEvents","skipLatestEvents","trackAllEvents","reduce","payload","latestUpdate","Date","[object Object]","intro","unscannableMakets","viewUnscannable","toggleUnscannable","datavue_type_script_lang_js","data_datavue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_roundtripTable_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","done","fromEnd","initialized","progress","progressBarvue_type_template_id_2b42ff94_lang_pug_render","style","progressBarvue_type_template_id_2b42ff94_lang_pug_staticRenderFns","progressBarvue_type_script_lang_js","global_progressBarvue_type_script_lang_js","progressBar","singlevue_type_script_lang_js","$route","fromEndMs","current","import_singlevue_type_script_lang_js","single_component","sync_init","commit","sync_sync","bus","$on","imports_sync","gekkos_sync_init","gekkos_sync_sync","gekkos_sync","notifications_sync_init","notifications_sync_sync","ws","notifications_sync","sync_transformMarkets","backendData","exchangesRaw","exchangesTemp","forEach","slug","pair","_pair$pair","exchangeMaxHistoryAge","providesFullHistory","config_sync_init","config_sync_sync","config_sync","store_init","socket","log","info","ws_connect","ReconnectingWebSocket","api","maxReconnectInterval","onopen","onclose","onerror","onmessage","JSON","watchers","status","stratrunners","profit","tradeCompleted","listvue_type_script_lang_js","timer","setInterval","destroyed","clearTimeout","_moment","_x","arguments","toString","b","gekko_listvue_type_script_lang_js","_import","importConfigBuildervue_type_template_id_a8c578c6_lang_pug_render","only-importable","updateRange","importConfigBuildervue_type_template_id_a8c578c6_lang_pug_staticRenderFns","importConfigBuildervue_type_script_lang_js","rangeCreator","rangecreator","importer","import_importConfigBuildervue_type_script_lang_js","importConfigBuilder","importervue_type_script_lang_js","daysApart","import_importervue_type_script_lang_js","importer_component","src","homevue_type_script_lang_js","layout_homevue_type_script_lang_js","isLoading","initialEvents","latestEvents","warmupRemaining","replace","stratName","isArchived","alpha","isStratrunner","watcher","stopGekko","deleteGekko","candleFetch","chartData","singleGekkovue_type_script_lang_js","getCandles","isLive","stratWarmupCompleted","warmupTime","add","stringify","isEqual","hasLeechers","data.events.latest.candle.start","random","res","isArray","_this4","gekko_singleGekkovue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_datasetpicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_blockSpinner_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_single_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","basePath","restPath","wsPath","CONFIG","endpoint","host","port","ssl","toggle","switchToggle","rawPaperTraderParams","rawPaperTraderParamsError","papertradervue_type_script_lang_js","paperTraderParams","reportRoundtrips","configbuilder_papertradervue_type_script_lang_js","mixin","_tools_ajax__WEBPACK_IMPORTED_MODULE_2__","errors","sets","sort","adiff","bdiff","reverse","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_stratpicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paperTradeSummary_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","rt","entryAt","exitAt","entryBalance","exitBalance","sign","pnl","roundtripTablevue_type_script_lang_js","result_roundtripTablevue_type_script_lang_js","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_result_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_typepicker_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default","processResponse","post","superagent__WEBPACK_IMPORTED_MODULE_0___default","_api_js__WEBPACK_IMPORTED_MODULE_2__","superagent_no_cache__WEBPACK_IMPORTED_MODULE_1___default","send","end","_node_modules_mini_css_extract_plugin_dist_loader_js_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_lib_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_importer_vue_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default"],"mappings":"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","file":"app.f8381cdf.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([26,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-3-6\"},[_c('table',{staticClass:\"p1\"},[_c('tr',[_c('th',[_vm._v(\"amount of trades\")]),_c('td',[_vm._v(_vm._s(_vm.report.trades))])]),_c('tr',[_c('th',[_vm._v(\"sharpe ratio\")]),_c('td',[_vm._v(_vm._s(_vm.round2(_vm.report.sharpe)))])]),_c('tr',[_c('th',[_vm._v(\"start balance\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.startBalance))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"final balance\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.balance))+\" \"+_vm._s(_vm.report.currency))])]),_vm._m(0)]),_c('div',{staticClass:\"big txt--right price\",class:_vm.profitClass},[_vm._v(_vm._s(_vm.round(_vm.report.relativeProfit))+\"%\")])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"simulated profit\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./paperTradeSummary.vue?vue&type=template&id=637e135e&lang=pug\"\nimport script from \"./paperTradeSummary.vue?vue&type=script&lang=js\"\nexport * from \"./paperTradeSummary.vue?vue&type=script&lang=js\"\nimport style0 from \"./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[_c('h3',[_vm._v(\"Start a new gekko\")]),_c('gekko-config-builder',{on:{\"config\":_vm.updateConfig}}),_c('div',{staticClass:\"hr\"}),(_vm.config.valid)?_c('div',{staticClass:\"txt--center\"},[(!_vm.pendingStratrunner)?_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.start($event)}}},[_vm._v(\"Start\")]):_vm._e(),(_vm.pendingStratrunner)?_c('spinner'):_vm._e()],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Market\")]),_c('market-picker',{attrs:{\"only-tradable\":_vm.isTradebot},on:{\"market\":_vm.updateMarketConfig}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('type-picker',{on:{\"type\":_vm.updateType}})],1)]),(_vm.type !== \"market watcher\")?[_c('div',{staticClass:\"hr\"}),_c('strat-picker',{staticClass:\"contain my2\",on:{\"stratConfig\":_vm.updateStrat}}),(_vm.type === \"paper trader\")?_c('div',{staticClass:\"hr\"}):_vm._e(),(_vm.type === \"paper trader\")?_c('paper-trader',{on:{\"settings\":_vm.updatePaperTrader}}):_vm._e()]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Type\")]),[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"type\"}},[_vm._v(\"What do you want to do with gekko?\")]),_c('form',{staticClass:\"radio grd\"},_vm._l((_vm.types),function(type,i){return _c('div',{staticClass:\"grd-row m1\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedTypeIndex),expression:\"selectedTypeIndex\"}],staticClass:\"grd-row-col-1-6\",attrs:{\"type\":\"radio\"},domProps:{\"value\":i,\"checked\":_vm._q(_vm.selectedTypeIndex,i)},on:{\"change\":function($event){_vm.selectedTypeIndex=i}}}),_c('label',{staticClass:\"grd-row-col-5-6\",attrs:{\"for\":i}},[_vm._v(_vm._s(type))])])}))]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./typepicker.vue?vue&type=template&id=4a1aa84c&lang=pug\"\nimport script from \"./typepicker.vue?vue&type=script&lang=js\"\nexport * from \"./typepicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./typepicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./gekkoConfigBuilder.vue?vue&type=template&id=6015a1e6&lang=pug\"\nimport script from \"./gekkoConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./gekkoConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./new.vue?vue&type=template&id=da0dc488&lang=pug\"\nimport script from \"./new.vue?vue&type=script&lang=js\"\nexport * from \"./new.vue?vue&type=script&lang=js\"\nimport style0 from \"./new.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=style&index=0&lang=css\"","const marked = require('marked');\n\n// add `target='_blank'` to outgoing links\n\n// https://github.com/chjj/marked/pull/451#issuecomment-49976076\n\nvar myRenderer = new marked.Renderer();\nmyRenderer.link = function(href, title, text) {\n var external, newWindow, out;\n external = /^https?:\\/\\/.+$/.test(href);\n newWindow = external || title === 'newWindow';\n out = \"\" + text + \"\";\n};\n\nmarked.setOptions({renderer: myRenderer});\n\nexport default marked;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"mx1\"},[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Exchange:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.exchange),expression:\"exchange\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.exchange=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.exchanges),function(market,e){return _c('option',[_vm._v(_vm._s(e))])}))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('label',{attrs:{\"for\":\"currency\"}},[_vm._v(\"Currency:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.currency),expression:\"currency\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.currency=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.currencies),function(cur){return _c('option',[_vm._v(_vm._s(cur))])}))])]),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('label',{attrs:{\"for\":\"asset\"}},[_vm._v(\"Asset:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.asset),expression:\"asset\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.asset=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.assets),function(asst){return _c('option',[_vm._v(_vm._s(asst))])}))])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./marketpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./marketpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./marketpicker.vue?vue&type=template&id=df4a8b2a&lang=pug\"\nimport script from \"./marketpicker.vue?vue&type=script&lang=js\"\nexport * from \"./marketpicker.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 px1\"},[_c('h3',[_vm._v(\"Strategy\")]),_c('div',[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"strat\"}},[_vm._v(\"Strategy:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.strategy),expression:\"strategy\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.strategy=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.strategies),function(strat){return _c('option',[_vm._v(_vm._s(strat.name))])}))])]),_c('div',[_c('label',{attrs:{\"for\":\"candleSize\"}},[_vm._v(\"Candle Size\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawCandleSize),expression:\"rawCandleSize\"}],domProps:{\"value\":(_vm.rawCandleSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawCandleSize=$event.target.value}}})]),_c('div',{staticClass:\"grd-row-col-3-6 align\"},[_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.candleSizeUnit),expression:\"candleSizeUnit\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.candleSizeUnit=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',[_vm._v(\"minutes\")]),_c('option',[_vm._v(\"hours\")]),_c('option',[_vm._v(\"days\")])])])])])]),_c('div',[_c('label',{attrs:{\"for\":\"historySize\"}},[_vm._v(\"Warmup period (in \"+_vm._s(_vm.rawCandleSize)+\" \"+_vm._s(_vm.singularCandleSizeUnit)+\" candles):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.historySize),expression:\"historySize\"}],domProps:{\"value\":(_vm.historySize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.historySize=$event.target.value}}}),_c('em',{staticClass:\"label-like\"},[_vm._v(\"(will use \"+_vm._s(_vm.humanizeDuration(_vm.candleSize * _vm.historySize * 1000 * 60))+\" of data as history)\")])])]),_c('div',{staticClass:\"grd-row-col-3-6 px1\"},[_c('div',[_c('h3',[_vm._v(\"Parameters\")]),_c('p',[_vm._v(_vm._s(_vm.strategy)+\" Parameters:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawStratParams),expression:\"rawStratParams\"}],staticClass:\"params\",domProps:{\"value\":(_vm.rawStratParams)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawStratParams=$event.target.value}}}),(_vm.rawStratParamsError)?_c('p',{staticClass:\"bg--red p1\"},[_vm._v(_vm._s(_vm.rawStratParamsError.message))]):_vm._e()])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./stratpicker.vue?vue&type=template&id=1df710ae&lang=pug\"\nimport script from \"./stratpicker.vue?vue&type=script&lang=js\"\nexport * from \"./stratpicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./stratpicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Daterange\")]),_c('div',[_c('label',{attrs:{\"for\":\"from\"}},[_vm._v(\"From\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.from),expression:\"from\"}],domProps:{\"value\":(_vm.from)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.from=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"to\"}},[_vm._v(\"To\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.to),expression:\"to\"}],domProps:{\"value\":(_vm.to)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.to=$event.target.value}}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./rangecreator.vue?vue&type=template&id=8c51143a&lang=pug\"\nimport script from \"./rangecreator.vue?vue&type=script&lang=js\"\nexport * from \"./rangecreator.vue?vue&type=script&lang=js\"\nimport style0 from \"./rangecreator.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"spinner\"},[_c('div',{staticClass:\"rect1\"}),_c('div',{staticClass:\"rect2\"}),_c('div',{staticClass:\"rect3\"}),_c('div',{staticClass:\"rect4\"})])}]\n\nexport { render, staticRenderFns }","// http://tobiasahlin.com/spinkit/\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./blockSpinner.vue?vue&type=template&id=45447ea6&lang=pug\"\nimport script from \"./blockSpinner.vue?vue&type=script&lang=js\"\nexport * from \"./blockSpinner.vue?vue&type=script&lang=js\"\nimport style0 from \"./blockSpinner.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('top'),_c('div',{staticClass:\"fill\"},[_c('router-view',{staticClass:\"view\"})],1),_c('bottom'),_c('modal')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"top\"}}),_vm._m(0),_c('nav',{staticClass:\"bg--light-gray\"},[_c('div',{staticClass:\"menu contain\"},[_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/home\"}},[_vm._v(\"Home\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/live-gekkos\"}},[_vm._v(\"Live Gekkos\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/backtest\"}},[_vm._v(\"Backtest\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/data\"}},[_vm._v(\"Local data\")]),_c('router-link',{staticClass:\"py1\",attrs:{\"to\":\"/config\"}},[_vm._v(\"Config\")]),_c('a',{staticClass:\"py1\",attrs:{\"href\":\"https://gekko.wizb.it/docs/introduction/about_gekko.html\",\"target\":\"_blank\"}},[_vm._v(\"Documentation\")])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"bg--off-white grd\"},[_c('div',{staticClass:\"contain grd-row\"},[_c('h3',{staticClass:\"py1 px2 col-2\"},[_vm._v(\"Gekko UI\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./header.vue?vue&type=template&id=0a62d360&lang=pug\"\nimport script from \"./header.vue?vue&type=script&lang=js\"\nexport * from \"./header.vue?vue&type=script&lang=js\"\nimport style0 from \"./header.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('footer',{staticClass:\"p2 bg--off-white\"},[_c('div',{staticClass:\"contain\"},[_vm._m(0),_c('p',[_vm._v(\"Using Gekko v\"+_vm._s(_vm.version.gekko)+\" and Gekko UI v\"+_vm._s(_vm.version.ui)+\".\")])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',[_c('em',[_vm._v(\"Use Gekko at your own risk.\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./footer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./footer.vue?vue&type=template&id=7782dc11&lang=pug\"\nimport script from \"./footer.vue?vue&type=script&lang=js\"\nexport * from \"./footer.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.active)?_c('div',[_c('div',{attrs:{\"id\":\"modal-background\"}}),_c('div',{staticClass:\"modal\",attrs:{\"id\":\"modal\"}},[_c('div',{staticClass:\"modal-guts\",domProps:{\"innerHTML\":_vm._s(_vm.content)}})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./modal.vue?vue&type=template&id=340a7d17&lang=pug\"\nimport script from \"./modal.vue?vue&type=script&lang=js\"\nexport * from \"./modal.vue?vue&type=script&lang=js\"\nimport style0 from \"./modal.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=29e7b8c2&lang=pug\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\n\nexport const addImport = (state, imp) => {\n state.imports.push(imp);\n return state;\n}\n\nexport const syncImports = (state, imports) => {\n state.imports = imports;\n return state;\n}\n\nexport const updateImport = (state, update) => {\n let index = state.imports.findIndex(i => i.id === update.import_id);\n let item = state.imports[index];\n if(!item)\n return state;\n\n let updated = Vue.util.extend(item, update.updates);\n Vue.set(state.imports, index, updated);\n\n return state;\n}","import Vue from 'vue'\nimport _ from 'lodash';\nconst reduceState = require('../../../../../state/reduceState');\n\nexport const syncGekkos = (state, data) => {\n if(!data) {\n return state;\n }\n\n state.gekkos = data.live;\n state.archivedGekkos = data.archive;\n return state;\n}\n\nexport const addGekko = (state, gekko) => {\n state.gekkos = {\n ...state.gekkos,\n [gekko.id]: gekko\n }\n return state;\n}\n\nexport const updateGekko = (state, update) => {\n if(!update.id || !_.has(state.gekkos, update.id)) {\n return console.error('cannot update unknown gekko..');;\n }\n\n state.gekkos = {\n ...state.gekkos,\n [update.id]: reduceState(state.gekkos[update.id], update.event)\n }\n return state;\n}\n\nexport const archiveGekko = (state, id) => {\n if(!_.has(state.gekkos, id)) {\n return console.error('cannot archive unknown gekko..');\n }\n\n state.archivedGekkos = {\n ...state.archivedGekkos,\n [id]: {\n ...state.gekkos[id],\n stopped: true,\n active: false\n }\n }\n\n state.gekkos = _.omit(state.gekkos, id);\n return state;\n}\n\nexport const errorGekko = (state, data) => {\n if(!_.has(state.gekkos, data.id)) {\n return console.error('cannot error unknown gekko..');\n }\n\n state.gekkos = {\n ...state.gekkos,\n [data.id]: {\n ...state.gekkos[data.id],\n errored: true,\n errorMessage: data.error\n }\n }\n\n return state;\n}\n\nexport const deleteGekko = (state, id) => {\n if(!_.has(state.archivedGekkos, id)) {\n return console.error('cannot delete unknown gekko..');\n }\n\n state.archivedGekkos = _.omit(state.archivedGekkos, id);\n return state;\n}","import Vue from 'vue'\nimport _ from 'lodash'\n\nexport const setGlobalWarning = (state, warning) => {\n state.warnings[warning.key] = warning.value;\n return state;\n}","import Vue from 'vue'\n\nexport const syncApiKeys = (state, apiKeys) => {\n Vue.set(state, 'apiKeys', apiKeys);\n return state;\n}\n\nexport const syncExchanges = (state, exchanges) => {\n Vue.set(state, 'exchanges', exchanges);\n return state;\n}","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport _ from 'lodash'\n\nimport * as importMutations from './modules/imports/mutations'\nimport * as gekkoMutations from './modules/gekkos/mutations'\nimport * as notificationMutations from './modules/notifications/mutations'\nimport * as configMutations from './modules/config/mutations'\n\nVue.use(Vuex);\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nlet mutations = {};\n\n_.merge(mutations, importMutations);\n_.merge(mutations, gekkoMutations);\n_.merge(mutations, notificationMutations);\n_.merge(mutations, configMutations);\n\nexport default new Vuex.Store({\n state: {\n warnings: {\n connected: true, // assume we will connect\n },\n imports: [],\n gekkos: {},\n archivedGekkos: {},\n connection: {\n disconnected: false,\n reconnected: false\n },\n apiKeys: [],\n exchanges: {}\n },\n mutations,\n strict: debug\n})","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangecreator.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ clickable: !_vm.isClicked },attrs:{\"id\":\"chartWrapper\"}},[_c('div',{staticClass:\"shield\",on:{\"click\":function($event){$event.preventDefault();return _vm.click($event)}}}),_c('svg',{attrs:{\"id\":\"chart\",\"width\":\"960\",\"height\":_vm.height}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import _ from 'lodash';\n// global moment\n\nexport default function(_data, _trades, _height) {\n\n const toDate = i => {\n if(_.isNumber(i)) {\n return moment.unix(i).utc().toDate();\n } else {\n return moment.utc(i).toDate();\n }\n }\n\n const trades = _trades.map(t => {\n return {\n price: t.price,\n date: toDate(t.date),\n action: t.action\n }\n });\n\n const data = _data.map(c => {\n return {\n price: c.open,\n date: toDate(c.start)\n }\n });\n\n var dates = data.map(c => +c.date);\n var prices = data.map(c => +c.price)\n\n var svg = d3.select(\"#chart\");\n\n svg.attr(\"width\", window.innerWidth - 20);\n\n var margin = {top: 20, right: 20, bottom: 110, left: 40};\n var height = _height - margin.top - margin.bottom;\n var margin2 = {top: _height - 70, right: 20, bottom: 30, left: 40};\n var width = +svg.attr(\"width\") - margin.left - margin.right;\n var height2 = _height - margin2.top - margin2.bottom;\n\n var x = d3.scaleUtc().range([0, width]),\n x2 = d3.scaleUtc().range([0, width]),\n y = d3.scaleLinear().range([height, 0]),\n y2 = d3.scaleLinear().range([height2, 0]);\n\n var xAxis = d3.axisBottom(x),\n xAxis2 = d3.axisBottom(x2),\n yAxis = d3.axisLeft(y).ticks(_height / 50);\n\n var brush = d3.brushX()\n .extent([[0, 0], [width, height2]])\n .on(\"brush end\", brushed);\n\n var zoom = d3.zoom()\n .scaleExtent([1, 100])\n .translateExtent([[0, 0], [width, height]])\n .extent([[0, 0], [width, height]])\n .on(\"zoom\", zoomed);\n\n var line = d3.line()\n .x(function(d) { return x(d.date); })\n .y(function(d) { return y(d.price); });\n\n var line2 = d3.line()\n .x(function(d) { return x2(d.date); })\n .y(function(d) { return y2(d.price); });\n\n svg.append(\"defs\").append(\"clipPath\")\n .attr(\"id\", \"clip\")\n .append(\"rect\")\n .attr(\"width\", width)\n .attr(\"height\", height);\n\n var focus = svg.append(\"g\")\n .attr(\"class\", \"focus\")\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n var context = svg.append(\"g\")\n .attr(\"class\", \"context\")\n .attr(\"transform\", \"translate(\" + margin2.left + \",\" + margin2.top + \")\");\n\n x.domain(d3.extent(data, function(d) { return d.date; }));\n y.domain([\n d3.min(prices) * 0.99,\n d3.max(prices) * 1.01\n ]);\n x2.domain(x.domain());\n y2.domain(y.domain());\n\n focus.append(\"path\")\n .datum(data)\n .attr(\"class\", \"line price\")\n .attr(\"d\", line);\n\n focus.append(\"g\")\n .attr(\"class\", \"axis axis--x\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis);\n\n focus.append(\"g\")\n .attr(\"class\", \"axis axis--y\")\n .call(yAxis);\n\n context.append(\"path\")\n .datum(data)\n .attr(\"class\", \"line\")\n .attr(\"d\", line2);\n\n context.append(\"g\")\n .attr(\"class\", \"axis axis--x\")\n .attr(\"transform\", \"translate(0,\" + height2 + \")\")\n .call(xAxis2);\n\n var circles = svg\n .append('g')\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .selectAll(\"circle\")\n .data(trades)\n .enter().append(\"circle\")\n .attr('class', function(d) { return d.action })\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n .attr('r', 5);\n\n var brushCircles = context\n .append('g')\n // .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .selectAll(\"circle\")\n .data(trades)\n .enter().append(\"circle\")\n .attr('class', function(d) { return d.action })\n .attr(\"cx\", function(d) { return x2(d.date); })\n .attr(\"cy\", function(d) { return y2(d.price); })\n .attr('r', 3);\n\n\n context.append(\"g\")\n .attr(\"class\", \"brush\")\n .call(brush)\n .call(brush.move, x.range());\n\n svg.append(\"rect\")\n .attr(\"class\", \"zoom\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\")\n .call(zoom);\n\n function brushed() {\n if (d3.event.sourceEvent && d3.event.sourceEvent.type === \"zoom\") return; // ignore brush-by-zoom\n var s = d3.event.selection || x2.range();\n x.domain(s.map(x2.invert, x2));\n\n scaleY(x.domain());\n\n svg.select(\".axis--y\")\n .call(yAxis);\n\n circles\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n\n focus.select(\".line\").attr(\"d\", line);\n focus.select(\".axis--x\").call(xAxis);\n svg.select(\".zoom\").call(zoom.transform, d3.zoomIdentity\n .scale(width / (s[1] - s[0]))\n .translate(-s[0], 0));\n }\n\n function scaleY(domain) {\n let [min, max] = domain;\n\n let minIndex = _.sortedIndex(dates, min);\n let maxIndex = _.sortedIndex(dates, max);\n\n let set = prices.slice(minIndex, maxIndex);\n y.domain([\n d3.min(set) * 0.9995,\n d3.max(set) * 1.0005\n ]);\n }\n\n function zoomed() {\n if (d3.event.sourceEvent && d3.event.sourceEvent.type === \"brush\") return; // ignore zoom-by-brush\n var t = d3.event.transform;\n\n scaleY(t.rescaleX(x2).domain()); \n\n svg.select(\".axis--y\")\n .call(yAxis);\n\n x.domain(t.rescaleX(x2).domain());\n focus.select(\".line\").attr(\"d\", line);\n\n circles\n .attr(\"cx\", function(d) { return x(d.date); })\n .attr(\"cy\", function(d) { return y(d.price); })\n\n\n focus.select(\".axis--x\").call(xAxis);\n context.select(\".brush\").call(brush.move, x.range().map(t.invertX, t));\n }\n}","export const draw = function(message) {\n d3.select(\"#chart\").append(\"text\")\n .attr('class', 'message')\n .attr('x', 150)\n .attr('y', 150)\n .text(message);\n}\n\nexport const clear = function() {\n d3.select(\"#chart\").find('text').remove();\n}","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chartWrapper.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./chartWrapper.vue?vue&type=template&id=12bcb8d8&lang=pug\"\nimport script from \"./chartWrapper.vue?vue&type=script&lang=js\"\nexport * from \"./chartWrapper.vue?vue&type=script&lang=js\"\nimport style0 from \"./chartWrapper.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\n\nimport VueRouter from 'vue-router'\nVue.use(VueRouter);\n\nimport store from './store'\n\nimport backtester from './components/backtester/backtester.vue'\nimport home from './components/layout/home.vue'\n\nimport data from './components/data/data.vue'\nimport importer from './components/data/import/importer.vue'\nimport singleImport from './components/data/import/single.vue'\nimport config from './components/config/config.vue'\n\nimport gekkoList from './components/gekko/list.vue'\nimport newGekko from './components/gekko/new.vue'\nimport singleGekko from './components/gekko/singleGekko.vue'\nimport { connect as connectWS } from './components/global/ws'\n\nconst router = new VueRouter({\n mode: 'hash',\n base: __dirname,\n routes: [\n { path: '/', redirect: '/home' },\n { path: '/home', component: home },\n { path: '/backtest', component: backtester },\n { path: '/config', component: config },\n { path: '/data', component: data },\n { path: '/data/importer', component: importer },\n { path: '/data/importer/import/:id', component: singleImport },\n { path: '/live-gekkos', component: gekkoList },\n { path: '/live-gekkos/new', component: newGekko },\n { path: '/live-gekkos/:id', component: singleGekko },\n ]\n});\n\n// setup some stuff\nconnectWS();\n\nnew Vue({\n router,\n store,\n el: '#app',\n render: h => h(App)\n})","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('h2',[_vm._v(\"Config\")]),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Available API keys\")]),(!_vm.apiKeySets.length)?_c('p',[_c('em',[_vm._v(\"You don't have any API keys yet.\")])]):_vm._e(),_c('ul',_vm._l((_vm.apiKeySets),function(exchange){return _c('li',[_vm._v(_vm._s(exchange)+\" (\"),_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.removeApiKey(exchange)}}},[_vm._v(\"remove\")]),_vm._v(\")\")])})),(!_vm.addApiToggle)?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.openAddApi($event)}}},[_vm._v(\"Add an API key\")]):_vm._e(),(_vm.addApiToggle)?[_c('div',{staticClass:\"hr\"}),_c('apiConfigBuilder')]:_vm._e(),_c('div',{staticClass:\"hr\"})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('h3',[_vm._v(\"Add an API key\")]),_c('p',[_vm._v(\"Make sure that the API key has the permissions to create and cancel orders and view balances.\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Exchange\")]),_c('exchange-picker',{attrs:{\"only-tradable\":\"true\"},on:{\"exchange\":_vm.updateExchange}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Credentials\")]),_vm._l((_vm.requires),function(cred){return [_c('label',[_vm._v(_vm._s(cred))]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.credentials[cred]),expression:\"credentials[cred]\"}],domProps:{\"value\":(_vm.credentials[cred])},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.credentials, cred, $event.target.value)}}})]})],2)]),_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.upload($event)}}},[_vm._v(\"Add\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"mx1\"},[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Exchange:\")]),_c('div',{staticClass:\"custom-select button\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.exchange),expression:\"exchange\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.exchange=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},_vm._l((_vm.exchanges),function(market,e){return _c('option',[_vm._v(_vm._s(e))])}))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./exchangepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./exchangepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./exchangepicker.vue?vue&type=template&id=50c29cb0&lang=pug\"\nimport script from \"./exchangepicker.vue?vue&type=script&lang=js\"\nexport * from \"./exchangepicker.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./apiConfigBuilder.vue?vue&type=template&id=4a31b09e&lang=pug\"\nimport script from \"./apiConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./apiConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./config.vue?vue&type=template&id=d21dbde6&lang=pug\"\nimport script from \"./config.vue?vue&type=script&lang=js\"\nexport * from \"./config.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./gekkoConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Daterange\")]),(_vm.tab === \"scan\")?[(!_vm.scanned)?_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.scanned == \"fetching\")?_c('div',{staticClass:\"txt--center\"},[_c('p',{staticClass:\"scan-btn\"},[_vm._v(\"Scanning..\")])]):_vm._e(),(_vm.scanned == true)?[(_vm.ranges.length === 0)?[_c('p',[_c('strong',[_vm._v(\"Unable to find any local data, do you have local data available for\\\"\"+_vm._s(_vm.config.watch.exchange)+\":\"+_vm._s(_vm.config.watch.currency)+\"/\"+_vm._s(_vm.config.watch.asset)+\"\\\"?\")])])]:[_c('label',{staticClass:\"wrapper\",attrs:{\"for\":\"exchange\"}},[_vm._v(\"Run simulation over:\")]),_c('form',{staticClass:\"radio grd\"},_vm._l((_vm.ranges),function(range,i){return _c('div',{staticClass:\"grd-row m1\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedRangeIndex),expression:\"selectedRangeIndex\"}],staticClass:\"grd-row-col-1-6\",attrs:{\"type\":\"radio\"},domProps:{\"value\":i,\"checked\":_vm._q(_vm.selectedRangeIndex,i)},on:{\"change\":function($event){_vm.selectedRangeIndex=i}}}),_c('label',{staticClass:\"grd-row-col-5-6\",attrs:{\"for\":i}},[_vm._v(_vm._s(_vm.printRange(range)))])])}))],_c('p',[_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"rescan\")])])])]:_vm._e(),_c('p',{staticClass:\"txt--center\"},[_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.tab = \"manual\"}}},[_vm._v(\"Or manually set a daterange\")])])])]:_vm._e(),(_vm.tab === \"manual\")?[_c('div',[_c('label',{attrs:{\"for\":\"from\"}},[_vm._v(\"From:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.from),expression:\"from\"}],domProps:{\"value\":(_vm.from)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.from=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"to\"}},[_vm._v(\"To:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.to),expression:\"to\"}],domProps:{\"value\":(_vm.to)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.to=$event.target.value}}})]),_c('p',{staticClass:\"txt--center\"}),_c('em',[_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.tab = \"scan\"}}},[_vm._v(\"Or scan for a daterange\")])])]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rangepicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./rangepicker.vue?vue&type=template&id=5037047f&lang=pug\"\nimport script from \"./rangepicker.vue?vue&type=script&lang=js\"\nexport * from \"./rangepicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./rangepicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./apiConfigBuilder.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h2',{staticClass:\"contain\"},[_vm._v(\"Backtest\")]),_c('div',{staticClass:\"hr\"}),_c('config-builder',{on:{\"config\":_vm.check}}),(_vm.backtestable)?_c('div',[_c('div',{staticClass:\"txt--center\"},[(_vm.backtestState !== \"fetching\")?_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.run($event)}}},[_vm._v(\"Backtest\")]):_vm._e(),(_vm.backtestState === \"fetching\")?_c('div',{staticClass:\"scan-btn\"},[_c('p',[_vm._v(\"Running backtest..\")]),_c('spinner')],1):_vm._e()])]):_vm._e(),(_vm.backtestResult && _vm.backtestState === \"fetched\")?_c('result',{attrs:{\"result\":_vm.backtestResult}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('dataset-picker',{staticClass:\"my2 contain\",on:{\"dataset\":_vm.updateDataset}}),_c('div',{staticClass:\"hr\"}),_c('strat-picker',{staticClass:\"my2 contain\",on:{\"stratConfig\":_vm.updateStrat}}),_c('div',{staticClass:\"hr\"}),_c('paper-trader',{staticClass:\"contain\",on:{\"settings\":_vm.updatePaperTrader}}),_c('div',{staticClass:\"hr\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"Select a dataset\")]),(_vm.datasetScanstate === \"idle\")?_c('div',{staticClass:\"txt--center my2\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.datasetScanstate === \"scanning\")?_c('div',{staticClass:\"txt--center my2\"},[_c('spinner')],1):_vm._e(),(_vm.datasetScanstate === \"scanned\")?_c('div',{staticClass:\"my2\"},[(_vm.datasets.length != 0)?_c('div',[_c('table',{staticClass:\"full\"},[_vm._m(0),_c('tbody',_vm._l((_vm.datasets),function(set,i){return _c('tr',[_c('td',{staticClass:\"radio\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.setIndex),expression:\"setIndex\"}],attrs:{\"type\":\"radio\",\"name\":\"dataset\",\"id\":set.id},domProps:{\"value\":i,\"checked\":_vm._q(_vm.setIndex,i)},on:{\"change\":function($event){_vm.setIndex=i}}})]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.exchange))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.currency))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(set.asset))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.fmt(set.from)))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.fmt(set.to)))])]),_c('td',[_c('label',{attrs:{\"for\":set.id}},[_vm._v(_vm._s(_vm.humanizeDuration(set.to.diff(set.from))))])])])}))]),(!_vm.rangeVisible)?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.openRange($event)}}},[_vm._v(\"Adjust range\")]):_vm._e(),(_vm.rangeVisible)?[_c('div',[_c('label',{attrs:{\"for\":\"customFrom\"}},[_vm._v(\"From:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.customFrom),expression:\"customFrom\"}],domProps:{\"value\":(_vm.customFrom)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.customFrom=$event.target.value}}})]),_c('div',[_c('label',{attrs:{\"for\":\"customTo\"}},[_vm._v(\"To:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.customTo),expression:\"customTo\"}],domProps:{\"value\":(_vm.customTo)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.customTo=$event.target.value}}})])]:_vm._e()],2):_c('em',[_vm._v(\"No Data found \"),_c('a',{attrs:{\"href\":\"#/data/importer\"}},[_vm._v(\"Lets add some\")])])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th'),_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"from\")]),_c('th',[_vm._v(\"to\")]),_c('th',[_vm._v(\"duration\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./datasetpicker.vue?vue&type=template&id=689b8a00&lang=pug\"\nimport script from \"./datasetpicker.vue?vue&type=script&lang=js\"\nexport * from \"./datasetpicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./datasetpicker.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtestConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./backtestConfigBuilder.vue?vue&type=template&id=0b74d9a3&lang=pug\"\nimport script from \"./backtestConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./backtestConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./backtestConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"hr contain\"}),_vm._m(0),_c('result-summary',{attrs:{\"report\":_vm.result.performanceReport}}),_c('div',{staticClass:\"hr contain\"}),_c('chart',{attrs:{\"data\":_vm.candles,\"height\":\"500\"}}),_c('div',{staticClass:\"hr contain\"}),_c('roundtripTable',{attrs:{\"roundtrips\":_vm.result.roundtrips}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('h3',[_vm._v(\"Backtest result\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('div',{staticClass:\"grd-row summary\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('table',{staticClass:\"p1\"},[_c('tr',[_c('th',[_vm._v(\"start time\")]),_c('td',[_vm._v(_vm._s(_vm.report.startTime))])]),_c('tr',[_c('th',[_vm._v(\"end time\")]),_c('td',[_vm._v(_vm._s(_vm.report.endTime))])]),_c('tr',[_c('th',[_vm._v(\"timespan\")]),_c('td',[_vm._v(_vm._s(_vm.report.timespan))])]),_c('tr',[_c('th',[_vm._v(\"start price\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.startPrice))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"end price\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.endPrice))+\" \"+_vm._s(_vm.report.currency))])]),_c('tr',[_c('th',[_vm._v(\"market\")]),_c('td',[_vm._v(_vm._s(_vm.round(_vm.report.market))+\"%\")])])])]),_c('paperTradeSummary',{attrs:{\"report\":_vm.report}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./summary.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./summary.vue?vue&type=template&id=5bfc891d&lang=pug\"\nimport script from \"./summary.vue?vue&type=script&lang=js\"\nexport * from \"./summary.vue?vue&type=script&lang=js\"\nimport style0 from \"./summary.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./result.vue?vue&type=template&id=72b63acc&lang=pug\"\nimport script from \"./result.vue?vue&type=script&lang=js\"\nexport * from \"./result.vue?vue&type=script&lang=js\"\nimport style0 from \"./result.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtester.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./backtester.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./backtester.vue?vue&type=template&id=da4202e8&lang=pug\"\nimport script from \"./backtester.vue?vue&type=script&lang=js\"\nexport * from \"./backtester.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Redux/vuex inspired reducer, reduces an event into a gekko state.\n// NOTE: this is used by the backend as well as the frontend.\n\nconst skipInitialEvents = ['marketUpdate'];\nconst skipLatestEvents = ['marketStart', 'stratWarmupCompleted'];\nconst trackAllEvents = ['tradeCompleted', 'advice', 'roundtrip'];\n\nconst reduce = (state, event) => {\n const type = event.type;\n const payload = event.payload;\n\n state = {\n ...state,\n latestUpdate: new Date()\n }\n\n if(trackAllEvents.includes(type)) {\n if(!state.events[type]) {\n state = {\n ...state,\n events: {\n ...state.events,\n [type]: [ payload ]\n }\n }\n } else {\n state = {\n ...state,\n events: {\n ...state.events,\n [type]: [ ...state.events[type], payload ]\n }\n }\n }\n }\n\n if(!state.events.initial[type] && !skipInitialEvents.includes(type)) {\n state = {\n ...state,\n events: {\n ...state.events,\n initial: {\n ...state.events.initial,\n [type]: payload\n }\n }\n }\n }\n\n if(!skipLatestEvents.includes(type)) {\n state = {\n ...state,\n events: {\n ...state.events,\n latest: {\n ...state.events.latest,\n [type]: payload\n }\n }\n }\n }\n\n return state;\n}\n\n// export default reduce;\nmodule.exports = reduce;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain\"},[_c('div',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.intro)}}),_c('div',{staticClass:\"hr\"}),_c('h2',[_vm._v(\"Available datasets\")]),(_vm.datasetScanstate === \"idle\")?_c('div',{staticClass:\"txt--center my2\"},[_c('a',{staticClass:\"w100--s btn--primary scan-btn\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.scan($event)}}},[_vm._v(\"Scan available data\")])]):_vm._e(),(_vm.datasetScanstate === \"scanning\")?_c('div',{staticClass:\"txt--center my2\"},[_c('spinner')],1):_vm._e(),(_vm.datasetScanstate === \"scanned\")?_c('div',{staticClass:\"my2\"},[(_vm.unscannableMakets.length)?_c('div',{staticClass:\"bg--orange p1 warning my1\"},[(!_vm.viewUnscannable)?_c('p',{staticClass:\"clickable\",on:{\"click\":function($event){$event.preventDefault();return _vm.toggleUnscannable($event)}}},[_vm._v(\"Some markets were unscannable, click here for details.\")]):_vm._e(),(_vm.viewUnscannable)?[_c('p',[_vm._v(\"Unable to find datasets in the following markets:\")]),_vm._l((_vm.unscannableMakets),function(market){return _c('div',{staticClass:\"mx2\"},[_vm._v(\"- \"+_vm._s(market.exchange)+\":\"+_vm._s(market.currency)+\":\"+_vm._s(market.asset))])})]:_vm._e()],2):_vm._e(),(_vm.datasets.length)?[_c('table',{staticClass:\"full data\"},[_vm._m(0),_c('tbody',_vm._l((_vm.datasets),function(set){return _c('tr',[_c('td',[_vm._v(_vm._s(set.exchange))]),_c('td',[_vm._v(_vm._s(set.currency))]),_c('td',[_vm._v(_vm._s(set.asset))]),_c('td',[_vm._v(_vm._s(_vm.fmt(set.from)))]),_c('td',[_vm._v(_vm._s(_vm.fmt(set.to)))]),_c('td',[_vm._v(_vm._s(_vm.humanizeDuration(set.to.diff(set.from))))])])}))])]:_vm._e(),(!_vm.datasets.length)?[_c('p',[_vm._v(\"It looks like you don't have any local data yet.\")])]:_vm._e()],2):_vm._e(),_c('div',{staticClass:\"my2\"},[_c('h2',[_vm._v(\"Import more data\")]),_c('p',{staticClass:\"text\"},[_vm._v(\"You can easily import more market data directly from exchanges using the importer.\")]),_c('router-link',{staticClass:\"btn--primary\",attrs:{\"to\":\"/data/importer\"}},[_vm._v(\"Go to the importer!\")])],1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"from\")]),_c('th',[_vm._v(\"to\")]),_c('th',[_vm._v(\"duration\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./data.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./data.vue?vue&type=template&id=6009d44c&lang=pug\"\nimport script from \"./data.vue?vue&type=script&lang=js\"\nexport * from \"./data.vue?vue&type=script&lang=js\"\nimport style0 from \"./data.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[(_vm.data && !_vm.data.done)?_c('div',[_c('h2',[_vm._v(\"Importing data..\")]),_c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_vm._m(0),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.data.watch.exchange))])]),_c('div',{staticClass:\"grd-row\"},[_vm._m(1),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.data.watch.currency)+\"/\"+_vm._s(_vm.data.watch.asset))])])]),_c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"grd-row\"},[_vm._m(2),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.from)))])]),_c('div',{staticClass:\"grd-row\"},[_vm._m(3),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.to)))])]),(_vm.initialized)?_c('div',{staticClass:\"grd-row\"},[_vm._m(4),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.latest)))])]):_vm._e(),(_vm.initialized)?_c('div',{staticClass:\"grd-row\"},[_vm._m(5),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fromEnd))])]):_vm._e()]),(!_vm.initialized)?_c('spinner'):_vm._e(),(_vm.initialized)?_c('div',{staticClass:\"contain\"},[_c('progressBar',{attrs:{\"progress\":_vm.progress}})],1):_vm._e(),_c('p',[_c('em',[_vm._v(\"(you don't have to wait until the import is done,you can already start \"),_c('router-link',{attrs:{\"to\":\"/backtest\"}},[_vm._v(\"backtesting\")]),_vm._v(\").\")],1)])],1):_vm._e(),(_vm.data && _vm.data.done)?_c('div',{staticClass:\"txt--center\"},[_c('h2',[_vm._v(\"Import done\")]),_c('p',[_vm._v(\" Go and \"),_c('router-link',{attrs:{\"to\":\"/backtest\"}},[_vm._v(\"backtest\")]),_vm._v(\" with your new data!\")],1)]):_vm._e(),(!_vm.data)?_c('div',{staticClass:\"txt--center\"},[_c('h2',[_vm._v(\"ERROR: Unknown import\")]),_c('p',[_c('I',[_vm._v(\"don't know this import..\")])],1)]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Market:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Currency/Asset:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"From:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"To:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Imported data until:\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-2-6\"},[_c('strong',[_vm._v(\"Remaining:\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.progress)?_c('div',{staticClass:\"progressbarWrapper\"},[_c('p',[_c('strong',[_vm._v(_vm._s(_vm.round(_vm.progress))+\"%\")])]),_c('div',{staticClass:\"progressbar\"},[_c('div',{style:({width: _vm.progress + \"%\"})})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// http://stackoverflow.com/questions/7190898/progress-bar-with-html-and-css\n\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./progressBar.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./progressBar.vue?vue&type=template&id=2b42ff94&lang=pug\"\nimport script from \"./progressBar.vue?vue&type=script&lang=js\"\nexport * from \"./progressBar.vue?vue&type=script&lang=js\"\nimport style0 from \"./progressBar.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./single.vue?vue&type=template&id=b930fa5e&lang=pug\"\nimport script from \"./single.vue?vue&type=script&lang=js\"\nexport * from \"./single.vue?vue&type=script&lang=js\"\nimport style0 from \"./single.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst init = () => {\n get('imports', (err, resp) => {\n store.commit('syncImports', resp);\n });\n}\n\nconst sync = () => {\n bus.$on('import_update', data => {\n store.commit('updateImport', data);\n });\n}\n\nexport default function() {\n init();\n sync();\n}","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\nimport _ from 'lodash'\n\nconst init = () => {\n get('gekkos', (err, resp) => {\n const gekkos = resp;\n store.commit('syncGekkos', gekkos);\n });\n}\n\nconst sync = () => {\n bus.$on('gekko_new', data => store.commit('addGekko', data.state));\n bus.$on('gekko_event', data => store.commit('updateGekko', data));\n bus.$on('gekko_archived', data => store.commit('archiveGekko', data.id));\n bus.$on('gekko_error', data => store.commit('errorGekko', data));\n bus.$on('gekko_deleted', data => store.commit('deleteGekko', data.id));\n\n // unused:\n // bus.$on('gekko_stopped', data => store.commit('x', data.id));\n // bus.$on('gekko_deleted', data => store.commit('x', data.id));\n}\n\nexport default function() {\n init();\n sync();\n}","import store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst init = () => {}\n\nconst sync = () => {\n bus.$on('WS_STATUS_CHANGE', ws => {\n return store.commit('setGlobalWarning', {key: 'connected', value: ws.connected});\n });\n}\n\nexport default function() {\n init();\n sync();\n}","import { get } from '../../../tools/ajax'\nimport store from '../../'\nimport { bus } from '../../../components/global/ws'\n\nconst transformMarkets = backendData => {\n if(!backendData) {\n return {};\n }\n\n var exchangesRaw = backendData;\n var exchangesTemp = {};\n\n exchangesRaw.forEach(e => {\n exchangesTemp[e.slug] = exchangesTemp[e.slug] || {markets: {}};\n\n e.markets.forEach( pair => {\n let [ currency, asset ] = pair['pair'];\n exchangesTemp[e.slug].markets[currency] = exchangesTemp[e.slug].markets[currency] || [];\n exchangesTemp[e.slug].markets[currency].push( asset );\n });\n\n if (\"exchangeMaxHistoryAge\" in e) {\n exchangesTemp[e.slug].exchangeMaxHistoryAge = e.exchangeMaxHistoryAge;\n }\n\n exchangesTemp[e.slug].importable = e.providesFullHistory ? true : false;\n exchangesTemp[e.slug].tradable = e.tradable ? true : false;\n exchangesTemp[e.slug].requires = e.requires;\n });\n\n return exchangesTemp;\n}\n\n\nconst init = () => {\n get('apiKeys', (err, resp) => {\n store.commit('syncApiKeys', resp);\n });\n\n get('exchanges', (err, resp) => {\n store.commit('syncExchanges', transformMarkets(resp));\n })\n}\n\nconst sync = () => {\n bus.$on('apiKeys', data => {\n store.commit('syncApiKeys', data.exchanges);\n });\n}\n\nexport default function() {\n init();\n sync();\n}\n","import Vue from 'vue'\nimport Vuex from 'vuex'\n\nimport syncImports from './modules/imports/sync'\nimport syncGekkos from './modules/gekkos/sync'\nimport syncNotifications from './modules/notifications/sync'\nimport syncConfig from './modules/config/sync'\n\nexport default function() {\n syncImports();\n syncGekkos();\n syncNotifications();\n syncConfig();\n}","import _ from 'lodash'\nimport Vue from 'vue'\n\nimport { wsPath } from '../../tools/api'\nimport initializeState from '../../store/init'\n\nvar socket = null;\n\nexport const bus = new Vue();\n\nbus.$on('gekko_update', data => console.log(data))\n\nbus.$on('import_update', data => console.log(data))\nbus.$on('import_error', data => {\n alert('IMPORT ERROR: ' + data.error);\n});\n\nconst info = {\n connected: false\n}\n\nexport const connect = () => {\n socket = new ReconnectingWebSocket(wsPath, null, { maxReconnectInterval: 4000 });\n\n setTimeout(() => {\n // in case we cannot connect\n if(!info.connected) {\n initializeState();\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n }, 500);\n\n socket.onopen = () => {\n if(info.connected)\n return;\n\n info.connected = true;\n bus.$emit('WS_STATUS_CHANGE', info);\n initializeState();\n }\n socket.onclose = () => {\n if(!info.connected)\n return;\n\n info.connected = false;\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n socket.onerror = () => {\n if(!info.connected)\n return;\n\n info.connected = false;\n bus.$emit('WS_STATUS_CHANGE', info);\n }\n socket.onmessage = function(message) {\n const payload = JSON.parse(message.data);\n // console.log('ws message:', payload);\n bus.$emit(payload.type, payload);\n };\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain py2\"},[_c('h3',[_vm._v(\"Market watchers\")]),(!_vm.watchers.length)?_c('div',{staticClass:\"text\"},[_c('p',[_vm._v(\"You don't have any market watchers.\")])]):_vm._e(),(_vm.watchers.length)?_c('table',{staticClass:\"full clickable\"},[_vm._m(0),_c('tbody',_vm._l((_vm.watchers),function(gekko){return _c('tr',{staticClass:\"clickable\",on:{\"click\":function($event){_vm.$router.push({path: (\"/live-gekkos/\" + (gekko.id))})}}},[_c('td',[_vm._v(_vm._s(gekko.config.watch.exchange))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.currency))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.asset))]),_c('td',[_vm._v(_vm._s(_vm.status(gekko)))]),_c('td',[(gekko.events.initial.candle)?[_vm._v(_vm._s(_vm.fmt(gekko.events.initial.candle.start)))]:_vm._e()],2),_c('td',[(gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.fmt(gekko.events.latest.candle.start)))]:_vm._e()],2),_c('td',[(gekko.events.initial.candle && gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.timespan(gekko.events.latest.candle.start, gekko.events.initial.candle.start)))]:_vm._e()],2)])}))]):_vm._e(),_c('h3',[_vm._v(\"Strat runners\")]),(!_vm.stratrunners.length)?_c('div',{staticClass:\"text\"},[_c('p',[_vm._v(\"You don't have any stratrunners.\")])]):_vm._e(),(_vm.stratrunners.length)?_c('table',{staticClass:\"full\"},[_vm._m(1),_c('tbody',_vm._l((_vm.stratrunners),function(gekko){return _c('tr',{staticClass:\"clickable\",on:{\"click\":function($event){_vm.$router.push({path: (\"/live-gekkos/\" + (gekko.id))})}}},[_c('td',[_vm._v(_vm._s(gekko.config.watch.exchange))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.currency))]),_c('td',[_vm._v(_vm._s(gekko.config.watch.asset))]),_c('td',[_vm._v(_vm._s(_vm.status(gekko)))]),_c('td',[(gekko.events.initial.candle && gekko.events.latest.candle)?[_vm._v(_vm._s(_vm.timespan(gekko.events.latest.candle.start, gekko.events.initial.candle.start)))]:_vm._e()],2),_c('td',[_vm._v(_vm._s(gekko.config.tradingAdvisor.method))]),_c('td',[(!_vm.report(gekko))?[_vm._v(\"0\")]:_vm._e(),(_vm.report(gekko))?[_vm._v(_vm._s(_vm.round(_vm.report(gekko).profit))+\" \"+_vm._s(_vm.report(gekko).currency))]:_vm._e()],2),_c('td',[_vm._v(_vm._s(gekko.logType))]),_c('td',[(!gekko.events.tradeCompleted)?[_vm._v(\"0\")]:_vm._e(),(gekko.events.tradeCompleted)?[_vm._v(_vm._s(gekko.events.tradeCompleted.length))]:_vm._e()],2)])}))]):_vm._e(),_c('div',{staticClass:\"hr\"}),_c('h2',[_vm._v(\"Start a new live Gekko\")]),_c('router-link',{staticClass:\"btn--primary\",attrs:{\"to\":\"/live-gekkos/new\"}},[_vm._v(\"Start a new live Gekko!\")])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"status\")]),_c('th',[_vm._v(\"started at\")]),_c('th',[_vm._v(\"last update\")]),_c('th',[_vm._v(\"duration\")])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('thead',[_c('tr',[_c('th',[_vm._v(\"exchange\")]),_c('th',[_vm._v(\"currency\")]),_c('th',[_vm._v(\"asset\")]),_c('th',[_vm._v(\"status\")]),_c('th',[_vm._v(\"duration\")]),_c('th',[_vm._v(\"strategy\")]),_c('th',[_vm._v(\"PnL\")]),_c('th',[_vm._v(\"type\")]),_c('th',[_vm._v(\"trades\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./list.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./list.vue?vue&type=template&id=55dd2514&lang=pug\"\nimport script from \"./list.vue?vue&type=script&lang=js\"\nexport * from \"./list.vue?vue&type=script&lang=js\"\nimport style0 from \"./list.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain my2\"},[_c('div',{staticClass:\"text\",domProps:{\"innerHTML\":_vm._s(_vm.intro)}}),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Currently running imports\")]),(_vm.imports.length === 0)?_c('p',[_vm._v(\"You currently don't have any imports running.\")]):_vm._e(),(_vm.imports.length)?_c('ul',_vm._l((_vm.imports),function(_import){return _c('li',[_c('router-link',{attrs:{\"to\":\"/data/importer/import/\" + _import.id}},[_vm._v(_vm._s(_import.watch.exchange)+\":\"+_vm._s(_import.watch.currency)+\"/\"+_vm._s(_import.watch.asset))])],1)})):_vm._e(),_c('div',{staticClass:\"hr\"}),_c('h3',[_vm._v(\"Start a new import\")]),_c('import-config-builder',{on:{\"config\":_vm.updateConfig}}),_c('div',{staticClass:\"hr\"}),_c('div',{staticClass:\"txt--center\"},[_c('a',{staticClass:\"w100--s my1 btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.run($event)}}},[_vm._v(\"Import\")])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('h3',[_vm._v(\"Market\")]),_c('market-picker',{attrs:{\"only-importable\":\"true\"},on:{\"market\":_vm.updateMarketConfig}})],1),_c('div',{staticClass:\"grd-row-col-3-6 mx1\"},[_c('range-creator',{on:{\"range\":_vm.updateRange}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importConfigBuilder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./importConfigBuilder.vue?vue&type=template&id=a8c578c6&lang=pug\"\nimport script from \"./importConfigBuilder.vue?vue&type=script&lang=js\"\nexport * from \"./importConfigBuilder.vue?vue&type=script&lang=js\"\nimport style0 from \"./importConfigBuilder.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./importer.vue?vue&type=template&id=3e819299&lang=pug\"\nimport script from \"./importer.vue?vue&type=script&lang=js\"\nexport * from \"./importer.vue?vue&type=script&lang=js\"\nimport style0 from \"./importer.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"contain grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\",domProps:{\"innerHTML\":_vm._s(_vm.left)}}),_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd-row-col-3-6 txt--center\"},[_c('img',{attrs:{\"src\":\"static/gekko.jpg\"}}),_c('p',[_c('em',[_vm._v(\"The most valuable commodity I know of is information.\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./home.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./home.vue?vue&type=template&id=2758f780&lang=pug\"\nimport script from \"./home.vue?vue&type=script&lang=js\"\nexport * from \"./home.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"my2\"},[(!_vm.data)?_c('div',{staticClass:\"contain\"},[_c('h1',[_vm._v(\"Unknown Gekko instance\")]),_c('p',[_vm._v(\"Gekko doesn't know what gekko this is...\")])]):_vm._e(),(_vm.data)?_c('div',[_c('h2',{staticClass:\"contain\"},[_vm._v(\"Gekko \"+_vm._s(_vm.type))]),(_vm.isArchived)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This is an archived Gekko, it is currently not running anymore.\")]):_vm._e(),(_vm.data.errorMessage)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This is Gekko crashed with the following error: \"+_vm._s(_vm.data.errorMessage))]):_vm._e(),_c('div',{staticClass:\"grd contain\"},[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Market\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Exchange\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.exchange))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Currency\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.currency))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Asset\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.config.watch.asset))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Type\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.type))])])]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Runtime\")]),(_vm.isLoading)?_c('spinner'):_vm._e(),(!_vm.isLoading)?[(_vm.initialEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Watching since\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.initialEvents.candle.start)))])]):_vm._e(),(_vm.latestEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Received data until\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.fmt(_vm.latestEvents.candle.start)))])]):_vm._e(),(_vm.latestEvents.candle)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Data spanning\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.humanizeDuration(_vm.moment(_vm.latestEvents.candle.start).diff(_vm.moment(_vm.initialEvents.candle.start)))))])]):_vm._e(),(_vm.isStratrunner)?[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Amount of trades\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.trades.length))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"Candle size\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.config.tradingAdvisor.candleSize))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-2-6\"},[_vm._v(\"History size\")]),_c('div',{staticClass:\"grd-row-col-4-6\"},[_vm._v(_vm._s(_vm.config.tradingAdvisor.historySize))])])]:_vm._e()]:_vm._e()],2)]),(_vm.warmupRemaining)?_c('div',{staticClass:\"contain brdr--mid-gray p1 bg--orange\"},[_vm._v(\"This stratrunner is still warming up for the next \"),_c('i',[_vm._v(_vm._s(_vm.warmupRemaining.replace(',', ' and ')))]),_vm._v(\", it will not trade until it is warmed up.\")]):_vm._e(),(_vm.isStratrunner)?_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Strategy\")]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Name\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('strong',[_vm._v(_vm._s(_vm.stratName))])])]),_vm._v(\"Parameters\"),_c('pre',[_vm._v(_vm._s(_vm.stratParams))])]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_c('h3',[_vm._v(\"Profit report\")]),(!_vm.report)?[_c('p',[(_vm.isArchived)?_c('em',[_vm._v(\"This Gekko never executed a trade..\")]):_vm._e(),(!_vm.isArchived)?_c('em',[_vm._v(\"Waiting for at least one trade..\")]):_vm._e()])]:_vm._e(),(_vm.report)?[_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Start balance\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.startBalance)))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Current balance\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.balance)))])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Market\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.market / 100 * _vm.report.startPrice))+\" \"+_vm._s(_vm.config.watch.currency)+\" (\"+_vm._s(_vm.round(_vm.report.market))+\" %)\")])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Profit\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.profit))+\" \"+_vm._s(_vm.config.watch.currency)+\" (\"+_vm._s(_vm.round(_vm.report.relativeProfit))+\" %)\")])]),_c('div',{staticClass:\"grd-row\"},[_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(\"Alpha\")]),_c('div',{staticClass:\"grd-row-col-3-6\"},[_vm._v(_vm._s(_vm.round(_vm.report.alpha))+\" \"+_vm._s(_vm.config.watch.currency))])])]:_vm._e()],2)]):_vm._e(),(_vm.isStratrunner && !_vm.watcher && !_vm.isArchived)?_c('p',[_vm._v(\"WARNING: stale gekko, not attached to a watcher, please report \"),_c('a',{attrs:{\"href\":\"https://github.com/askmike/gekko/issues\"}},[_vm._v(\"here\")]),_vm._v(\".\")]):_vm._e(),(!_vm.isArchived)?_c('p',[_c('a',{staticClass:\"w100--s my1 btn--red\",on:{\"click\":_vm.stopGekko}},[_vm._v(\"Stop Gekko\")])]):_vm._e(),(_vm.isArchived)?_c('p',[_c('a',{staticClass:\"w100--s my1 btn--red\",on:{\"click\":_vm.deleteGekko}},[_vm._v(\"Delete Gekko\")])]):_vm._e(),(_vm.isStratrunner && _vm.watcher && !_vm.isArchived)?_c('p',[_c('em',[_vm._v(\"This gekko gets market data from \"),_c('router-link',{attrs:{\"to\":\"/live-gekkos/\" + _vm.watcher.id}},[_vm._v(\"this market watcher\")])],1),_vm._v(\".\")]):_vm._e()]),(!_vm.isLoading)?[_c('h3',{staticClass:\"contain\"},[_vm._v(\"Market graph\")]),(_vm.candleFetch === \"fetching\")?_c('spinner'):_vm._e(),(_vm.candleFetch === \"fetched\")?[_c('chart',{attrs:{\"data\":_vm.chartData,\"height\":300}})]:_vm._e(),(_vm.isStratrunner)?_c('roundtrips',{attrs:{\"roundtrips\":_vm.roundtrips}}):_vm._e()]:_vm._e()],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./singleGekko.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./singleGekko.vue?vue&type=template&id=5ce0f611&lang=pug\"\nimport script from \"./singleGekko.vue?vue&type=script&lang=js\"\nexport * from \"./singleGekko.vue?vue&type=script&lang=js\"\nimport style0 from \"./singleGekko.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./datasetpicker.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./blockSpinner.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./single.vue?vue&type=style&index=0&lang=css\"","// global window.CONFIG\n\nconst config = window.CONFIG.ui;\nconst endpoint = `${config.host}${config.port === 80 ? '' : `:${config.port}`}${config.path}`;\n\nlet basePath, restPath, wsPath;\n\n// rest API path\nif(config.ssl) {\n basePath = `https://${endpoint}`;\n} else {\n basePath = `http://${endpoint}`;\n}\n\nrestPath = basePath + 'api/';\n\n// ws API path\nif(config.ssl) {\n wsPath = `wss://${endpoint}api`;\n} else {\n wsPath = `ws://${endpoint}api`;\n}\n\nexport {\n wsPath,\n restPath,\n basePath\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"grd\"},[_c('div',{staticClass:\"px1\"},[_c('h3',[_vm._v(\"Paper trader\")]),(_vm.toggle === \"closed\")?_c('a',{staticClass:\"btn--primary\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.switchToggle($event)}}},[_vm._v(\"Change paper trader settings\")]):_vm._e(),(_vm.toggle === \"open\")?[_c('p',[_vm._v(\"Settings:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rawPaperTraderParams),expression:\"rawPaperTraderParams\"}],staticClass:\"params\",domProps:{\"value\":(_vm.rawPaperTraderParams)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.rawPaperTraderParams=$event.target.value}}}),(_vm.rawPaperTraderParamsError)?_c('p',{staticClass:\"bg--red p1\"},[_vm._v(_vm._s(_vm.rawPaperTraderParamsError.message))]):_vm._e()]:_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./papertrader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./papertrader.vue?vue&type=template&id=6a733e04&lang=pug\"\nimport script from \"./papertrader.vue?vue&type=script&lang=js\"\nexport * from \"./papertrader.vue?vue&type=script&lang=js\"\nimport style0 from \"./papertrader.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import { post } from '../../../tools/ajax'\n\nvar mixin = {\n data: () => {\n return {\n datasets: [],\n datasetScanstate: 'idle',\n unscannableMakets: []\n } \n },\n methods: {\n scan: function() {\n this.datasetScanstate = 'scanning';\n\n post('scansets', {}, (error, response) => {\n this.datasetScanstate = 'scanned';\n\n this.unscannableMakets = response.errors;\n\n let sets = [];\n\n response.datasets.forEach(market => {\n market.ranges.forEach((range, i) => {\n sets.push({\n exchange: market.exchange,\n currency: market.currency,\n asset: market.asset,\n from: moment.unix(range.from).utc(),\n to: moment.unix(range.to).utc(),\n id: market.exchange + market.asset + market.currency + i\n });\n });\n });\n\n // for now, filter out sets smaller than 3 hours..\n sets = sets.filter(set => {\n if(set.to.diff(set.from, 'hours') > 2)\n return true;\n });\n\n sets = sets.sort((a, b) => {\n let adiff = a.to.diff(a.from);\n let bdiff = b.to.diff(b.from);\n\n if(adiff < bdiff)\n return -1;\n\n if(adiff > bdiff)\n return 1;\n\n return 0;\n }).reverse();\n\n this.datasets = sets;\n })\n }\n }\n}\n\nexport default mixin;","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stratpicker.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./paperTradeSummary.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"contain roundtrips\"},[_c('h2',[_vm._v(\"Roundtrips\")]),(_vm.roundtrips.length)?_c('table',[_c('thead',[_vm._m(0),_vm._l((_vm.roundtrips),function(rt){return _c('tr',[_c('td',[_vm._v(_vm._s(_vm.fmt(rt.entryAt)))]),_c('td',[_vm._v(_vm._s(_vm.fmt(rt.exitAt)))]),_c('td',[_vm._v(_vm._s(_vm.diff(rt.duration)))]),_c('td',[_vm._v(_vm._s(_vm.round(rt.entryBalance)))]),_c('td',[_vm._v(_vm._s(_vm.round(rt.exitBalance)))]),(Math.sign(rt.pnl)===-1)?[_c('td',{staticClass:\"loss\"},[_vm._v(_vm._s(Math.sign(rt.pnl)*rt.pnl.toFixed(2)))]),_c('td',{staticClass:\"loss\"},[_vm._v(_vm._s(rt.profit.toFixed(2))+\"%\")])]:[_c('td',{staticClass:\"profit\"},[_vm._v(_vm._s(rt.pnl.toFixed(2)))]),_c('td',{staticClass:\"profit\"},[_vm._v(_vm._s(rt.profit.toFixed(2))+\"%\")])]],2)})],2)]):_vm._e(),(!_vm.roundtrips.length)?_c('div',[_c('p',[_vm._v(\"Not enough data to display\")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('th',[_vm._v(\"Entry at (UTC)\")]),_c('th',[_vm._v(\"Exit at (UTC)\")]),_c('th',[_vm._v(\"Exposure\")]),_c('th',[_vm._v(\"Entry balance\")]),_c('th',[_vm._v(\"Exit balance\")]),_c('th',[_vm._v(\"P&L\")]),_c('th',[_vm._v(\"Profit\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roundtripTable.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./roundtripTable.vue?vue&type=template&id=3c32021a&lang=pug\"\nimport script from \"./roundtripTable.vue?vue&type=script&lang=js\"\nexport * from \"./roundtripTable.vue?vue&type=script&lang=js\"\nimport style0 from \"./roundtripTable.vue?vue&type=style&index=0&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./result.vue?vue&type=style&index=0&lang=css\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./typepicker.vue?vue&type=style&index=0&lang=css\"","import superagent from 'superagent'\nimport noCache from 'superagent-no-cache'\nimport { restPath } from './api.js'\n\nconst processResponse = next => (err, res) => {\n if(err)\n return next(err);\n\n if(!res.text)\n return next('no data');\n\n let data = JSON.parse(res.text);\n\n next(false, data);\n}\n\nexport const post = (to, data, next) => {\n superagent\n .post(restPath + to)\n .use(noCache)\n .send(data)\n .end(processResponse(next));\n}\n\nexport const get = (to, next) => {\n superagent\n .get(restPath + to)\n .use(noCache)\n .end(processResponse(next));\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=style&index=0&lang=css\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/lib/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./importer.vue?vue&type=style&index=0&lang=css\""],"sourceRoot":""} \ No newline at end of file diff --git a/web/vue/dist/index.html b/web/vue/dist/index.html index 084585781..8995a732b 100644 --- a/web/vue/dist/index.html +++ b/web/vue/dist/index.html @@ -1 +1 @@ -Gekko
\ No newline at end of file +Gekko
\ No newline at end of file