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 +} 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/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 => { diff --git a/docs/internals/events.md b/docs/internals/events.md index e5686f791..fe627e2ee 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. @@ -123,7 +126,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], + trigger: { + type: [type of trigger, currently always "trailingStop"], + // optional parameters per type of trigger + } } ### tradeInitiated event @@ -297,6 +304,44 @@ and will start signaling advice. profit: -0.2320439659276161, } +### 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], + date: Moment<'2017-03-25 19:41:00'>, + type: type: "trailingStop", + properties: { + initialPrice: 100, + 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], + date: 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], + date: Moment<'2017-03-25 19:41:00'> + } + ### marketStart event - What: A moment object describing the first date of the market data. diff --git a/docs/strategies/creating_a_strategy.md b/docs/strategies/creating_a_strategy.md index 285107d18..635bfbeba 100644 --- a/docs/strategies/creating_a_strategy.md +++ b/docs/strategies/creating_a_strategy.md @@ -77,13 +77,21 @@ 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 + trigger: { // ignored when direction is not "long" + type: 'trailingStop', + trailPercentage: 5 + // or: + // trailValue: 100 + } + }); + +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/exchange/gekkoBroker.js b/exchange/gekkoBroker.js index 12749fe67..8efbb66dc 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, + onTrigger, + props + }); + } } 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..2e72a7644 --- /dev/null +++ b/exchange/trigger.js @@ -0,0 +1,80 @@ +// 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.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.trigger = new triggers[type]({ + onTrigger: this.propogateTrigger, + ...props + }) + + this.scheduleFetch(); + } + + scheduleFetch() { + this.timout = 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(); + } + + cancel() { + this.isLive = false; + clearTimeout(this.timout); + } + + propogateTrigger(payload) { + if(!this.isLive) { + return; + } + this.isLive = false; + this.onTrigger(payload); + } +} + +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/exchange/triggers/trailingStop.js b/exchange/triggers/trailingStop.js new file mode 100644 index 000000000..89057d968 --- /dev/null +++ b/exchange/triggers/trailingStop.js @@ -0,0 +1,62 @@ +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 +// @param onTrigger: fn to call when the stop triggers +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.trailingPoint + this.trail) { + 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 diff --git a/exchange/wrappers/binance.js b/exchange/wrappers/binance.js index 07fbfa04c..a995c67fb 100644 --- a/exchange/wrappers/binance.js +++ b/exchange/wrappers/binance.js @@ -307,6 +307,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/package-lock.json b/package-lock.json index c59fe1f87..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": { @@ -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..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", @@ -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", 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', }, { 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/paperTrader/paperTrader.js b/plugins/paperTrader/paperTrader.js index 14a05dbf6..5998417ef 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.broker + 'triggers/trailingStop'); const PaperTrader = function() { _.bindAll(this); @@ -33,6 +37,7 @@ const PaperTrader = function() { } this.propogatedTrades = 0; + this.propogatedTriggers = 0; } PaperTrader.prototype.relayPortfolioChange = function() { @@ -63,8 +68,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; @@ -102,14 +106,47 @@ 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') + if(advice.recommendation === 'short') { action = 'sell'; - else if(advice.recommendation === 'long') + + // clean up potential old stop trigger + if(this.activeStopTrigger) { + this.deferredEmit('triggerAborted', { + id: this.activeStopTrigger.id, + date: advice.date + }); + + delete this.activeStopTrigger; + } + + } else if(advice.recommendation === 'long') { action = 'buy'; - else - return; + + 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( + `[Papertrader] ignoring unknown advice recommendation: ${advice.recommendation}` + ); + } this.tradeId = 'trade-' + (++this.propogatedTrades); @@ -122,7 +159,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,8 +179,75 @@ PaperTrader.prototype.processAdvice = function(advice) { }); } +PaperTrader.prototype.createTrigger = function(advice) { + const trigger = advice.trigger; + + if(trigger && trigger.type === 'trailingStop') { + + if(!trigger.trailValue) { + return log.warn(`[Papertrader] ignoring trailing stop without trail value`); + } + + const triggerId = 'trigger-' + (++this.propogatedTriggers); + + this.deferredEmit('triggerCreated', { + id: triggerId, + at: advice.date, + type: 'trialingStop', + proprties: { + trail: trigger.trailValue, + initialPrice: this.price, + } + }); + + this.activeStopTrigger = { + id: triggerId, + adviceId: advice.id, + instance: new TrailingStop({ + initialPrice: this.price, + trail: trigger.trailValue, + onTrigger: this.onStopTrigger + }) + } + } else { + log.warn(`[Papertrader] Gekko does not know trigger with type "${trigger.type}".. Ignoring stop.`); + } +} + +PaperTrader.prototype.onStopTrigger = function() { + + const date = this.now(); + + this.deferredEmit('triggerFired', { + id: this.activeStopTrigger.id, + 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 + }); + + delete this.activeStopTrigger; +} + PaperTrader.prototype.processCandle = function(candle, done) { this.price = candle.close; + this.candle = candle; if(!this.balance) { this.setStartBalance(); @@ -155,6 +259,10 @@ PaperTrader.prototype.processCandle = function(candle, done) { this.relayPortfolioValueChange(); } + if(this.activeStopTrigger) { + this.activeStopTrigger.instance.updatePrice(this.price); + } + done(); } diff --git a/plugins/trader/trader.js b/plugins/trader/trader.js index 7d1b6ba67..2e21443da 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); @@ -32,7 +33,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 +65,7 @@ Trader.prototype.sync = function(next) { const oldPortfolio = this.portfolio; this.setPortfolio(); + this.setBalance(); if(this.sendInitialPortfolio && !_.isEqual(oldPortfolio, this.portfolio)) { this.relayPortfolioChange(); @@ -202,6 +203,18 @@ Trader.prototype.processAdvice = function(advice) { }); } + // clean up potential old stop trigger + if(this.activeStopTrigger) { + this.deferredEmit('triggerAborted', { + id: this.activeStopTrigger.id, + date: advice.date + }); + + this.activeStopTrigger.instance.cancel(); + + delete this.activeStopTrigger; + } + amount = this.portfolio.asset; log.info( @@ -315,11 +328,65 @@ 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, + type: 'trialingStop', + properties: { + 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, + instance: this.broker.createTrigger({ + type: 'trailingStop', + onTrigger: this.onStopTrigger, + props: { + trail: trigger.trailValue, + initialPrice: summary.price, + } + }) + } + } }); }) }); } +Trader.prototype.onStopTrigger = function(price) { + log.info(`TrailingStop trigger "${this.activeStopTrigger.id}" fired! Observed price was ${price}`); + + 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 b4c13a584..96efa4097 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,60 @@ 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 trigger; + if(_.isObject(newDirection)) { + if(!_.isString(newDirection.direction)) { + log.error('Strategy emitted unparsable advice:', newDirection); + return; + } + + 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 trigger is implemented in a trader + trigger = newDirection.trigger; + + if(trigger.trailPercentage && !trigger.trailValue) { + trigger.trailValue = trigger.trailPercentage / 100 * this.candle.close; + log.info('[StratRunner] Trailing stop trail value specified as percentage, setting to:', trigger.trailValue); + } + } + } + + 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(trigger) { + advice.trigger = trigger; + } + + this.emit('advice', advice); + + return this.propogatedAdvices; } Base.prototype.notify = function(content) { @@ -236,7 +275,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) { diff --git a/strategies/DEBUG_single-advice.js b/strategies/DEBUG_single-advice.js index b76fe5700..fbc6eb230 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: 0.5 + } + }); } i++ 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', diff --git a/test/triggers/trailingStop.js b/test/triggers/trailingStop.js new file mode 100644 index 000000000..f195061ea --- /dev/null +++ b/test/triggers/trailingStop.js @@ -0,0 +1,181 @@ +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.broker + 'triggers/trailingStop'); + +describe('exchange/triggers/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); + + expect(spy.called).to.be.false; + + 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); + + expect(spy.called).to.be.false; + + ts.updatePrice(95); + + 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; + }); + + 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 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.f8381cdf.js.map b/web/vue/dist/app.f8381cdf.js.map new file mode 100644 index 000000000..37bc7e6e5 --- /dev/null +++ b/web/vue/dist/app.f8381cdf.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.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