// Everything is explained here: // @link https://gekko.wizb.it/docs/commandline/plugins.html var config = {}; // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // GENERAL SETTINGS // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ config.debug = true; // for additional logging / debugging // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // WATCHING A MARKET // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ config.watch = { // see https://gekko.wizb.it/docs/introduction/supported_exchanges.html exchange: 'binance', currency: 'USDT', asset: 'BTC', } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CONFIGURING TRADING ADVICE // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ config.tradingAdvisor = { enabled: true, method: 'MACD', candleSize: 60, historySize: 10, } // MACD settings: config.MACD = { // EMA weight (α) // the higher the weight, the more smooth (and delayed) the line short: 10, long: 21, signal: 9, // the difference between the EMAs (to act as triggers) thresholds: { down: -0.025, up: 0.025, // How many candle intervals should a trend persist // before we consider it real? persistence: 1 } }; // settings for other strategies can be found at the bottom, note that only // one strategy is active per gekko, the other settings are ignored. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CONFIGURING PLUGINS // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // do you want Gekko to simulate the profit of the strategy's own advice? config.paperTrader = { enabled: true, // report the profit in the currency or the asset? reportInCurrency: true, // start balance, on what the current balance is compared with simulationBalance: { // these are in the unit types configured in the watcher. asset: 1, currency: 100, }, // how much fee in % does each trade cost? feeMaker: 0.15, feeTaker: 0.25, feeUsing: 'maker', // how much slippage/spread should Gekko assume per trade? slippage: 0.05, } config.performanceAnalyzer = { enabled: true, riskFreeReturn: 5 } // Want Gekko to perform real trades on buy or sell advice? // Enabling this will activate trades for the market being // watched by `config.watch`. config.trader = { enabled: false, key: '', secret: '', username: '', // your username, only required for specific exchanges. passphrase: '', // GDAX, requires a passphrase. } config.eventLogger = { enabled: false, // optionally pass a whitelist of events to log, if not past // the eventLogger will log _all_ events. // whitelist: ['portfolioChange', 'portfolioValueChange'] } config.pushover = { enabled: false, sendPushoverOnStart: false, muteSoft: true, // disable advice printout if it's soft tag: '[GEKKO]', key: '', user: '' } config.blotter = { enabled: false, filename: 'blotter.csv', dateFormat: 'l LT', timezone: -300, // -300 minutes for EST(-5:00), only used if exchange doesn't provide correct timezone } // want Gekko to send a mail on buy or sell advice? config.mailer = { enabled: false, // Send Emails if true, false to turn off sendMailOnStart: true, // Send 'Gekko starting' message if true, not if false email: '', // Your Gmail address muteSoft: true, // disable advice printout if it's soft // You don't have to set your password here, if you leave it blank we will ask it // when Gekko's starts. // // NOTE: Gekko is an open source project < https://github.com/askmike/gekko >, // make sure you looked at the code or trust the maintainer of this bot when you // fill in your email and password. // // WARNING: If you have NOT downloaded Gekko from the github page above we CANNOT // guarantuee that your email address & password are safe! password: '', // Your Gmail Password - if not supplied Gekko will prompt on startup. tag: '[GEKKO] ', // Prefix all email subject lines with this // ADVANCED MAIL SETTINGS // you can leave those as is if you // just want to use Gmail server: 'smtp.gmail.com', // The name of YOUR outbound (SMTP) mail server. smtpauth: true, // Does SMTP server require authentication (true for Gmail) // The following 3 values default to the Email (above) if left blank user: '', // Your Email server user name - usually your full Email address 'me@mydomain.com' from: '', // 'me@mydomain.com' to: '', // 'me@somedomain.com, me@someotherdomain.com' ssl: true, // Use SSL (true for Gmail) port: '', // Set if you don't want to use the default port } config.pushbullet = { // sends pushbullets if true enabled: false, // Send 'Gekko starting' message if true sendMessageOnStart: true, // Send Message for advice? Recommend Flase for paper, true for live sendOnAdvice: true, // Send Message on Trade Completion? sendOnTrade: true, // For Overall P/L calc. Pass in old balance if desired, else leave '0' startingBalance: 0, // your pushbullet API key key: '', // your email email: 'jon_snow@westeros.com', // Messages will start with this tag tag: '[GEKKO]' }; config.kodi = { // if you have a username & pass, add it like below // http://user:pass@ip-or-hostname:8080/jsonrpc host: 'http://ip-or-hostname:8080/jsonrpc', enabled: false, sendMessageOnStart: true, } config.ircbot = { enabled: false, emitUpdates: false, muteSoft: true, channel: '#your-channel', server: 'irc.freenode.net', botName: 'gekkobot' } config.telegrambot = { enabled: false, // Receive notifications for trades and warnings/errors related to trading emitTrades: false, token: 'YOUR_TELEGRAM_BOT_TOKEN', }; config.twitter = { // sends pushbullets if true enabled: false, // Send 'Gekko starting' message if true sendMessageOnStart: false, // disable advice printout if it's soft muteSoft: false, tag: '[GEKKO]', // twitter consumer key consumer_key: '', // twitter consumer secret consumer_secret: '', // twitter access token key access_token_key: '', // twitter access token secret access_token_secret: '' }; config.xmppbot = { enabled: false, emitUpdates: false, client_id: 'jabber_id', client_pwd: 'jabber_pw', client_host: 'jabber_server', client_port: 5222, status_msg: 'I\'m online', receiver: 'jabber_id_for_updates' } config.campfire = { enabled: false, emitUpdates: false, nickname: 'Gordon', roomId: null, apiKey: '', account: '' } config.redisBeacon = { enabled: false, port: 6379, // redis default host: '127.0.0.1', // localhost // On default Gekko broadcasts // events in the channel with // the name of the event, set // an optional prefix to the // channel name. channelPrefix: '', broadcast: [ 'candle' ] } config.slack = { enabled: false, token: '', sendMessageOnStart: true, muteSoft: true, channel: '' // #tradebot } config.ifttt = { enabled: false, eventName: 'gekko', makerKey: '', muteSoft: true, sendMessageOnStart: true } config.candleWriter = { enabled: true } config.adviceWriter = { enabled: false, muteSoft: true, } config.backtestResultExporter = { enabled: false, writeToDisk: false, data: { stratUpdates: false, portfolioValues: true, stratCandles: true, roundtrips: true, trades: true } } config.candleUploader = { enabled: false, url: '', apiKey: '' } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CONFIGURING ADAPTER // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ config.adapter = 'sqlite'; config.sqlite = { path: 'plugins/sqlite', dataDirectory: 'history', version: 0.1, journalMode: require('./web/isWindows.js') ? 'DELETE' : 'WAL', dependencies: [] } // Postgres adapter example config (please note: requires postgres >= 9.5): config.postgresql = { path: 'plugins/postgresql', version: 0.1, connectionString: 'postgres://user:pass@localhost:5432', // if default port database: null, // if set, we'll put all tables into a single database. schema: 'public', dependencies: [{ module: 'pg', version: '7.4.3' }] } // Mongodb adapter, requires mongodb >= 3.3 (no version earlier tested) config.mongodb = { path: 'plugins/mongodb', version: 0.1, connectionString: 'mongodb://localhost/gekko', // connection to mongodb server dependencies: [{ module: 'mongojs', version: '2.4.0' }] } config.candleUploader = { enabled: false, url: '', apiKey: '' } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CONFIGURING BACKTESTING // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Note that these settings are only used in backtesting mode, see here: // @link: https://gekko.wizb.it/docs/commandline/backtesting.html config.backtest = { daterange: 'scan', // daterange: { // from: "2018-03-01", // to: "2018-04-28" //}, batchSize: 50 } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CONFIGURING IMPORTING // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ config.importer = { daterange: { // NOTE: these dates are in UTC from: "2017-11-01 00:00:00", to: "2017-11-20 00:00:00" } } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // OTHER STRATEGY SETTINGS // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Exponential Moving Averages settings: config.DEMA = { // EMA weight (α) // the higher the weight, the more smooth (and delayed) the line weight: 21, // amount of candles to remember and base initial EMAs on // the difference between the EMAs (to act as triggers) thresholds: { down: -0.025, up: 0.025 } }; // PPO settings: config.PPO = { // EMA weight (α) // the higher the weight, the more smooth (and delayed) the line short: 12, long: 26, signal: 9, // the difference between the EMAs (to act as triggers) thresholds: { down: -0.025, up: 0.025, // How many candle intervals should a trend persist // before we consider it real? persistence: 2 } }; // Uses one of the momentum indicators but adjusts the thresholds when PPO is bullish or bearish // Uses settings from the ppo and momentum indicator config block config.varPPO = { momentum: 'TSI', // RSI, TSI or UO thresholds: { // new threshold is default threshold + PPOhist * PPOweight weightLow: 120, weightHigh: -120, // How many candle intervals should a trend persist // before we consider it real? persistence: 0 } }; // RSI settings: config.RSI = { interval: 14, thresholds: { low: 30, high: 70, // How many candle intervals should a trend persist // before we consider it real? persistence: 1 } }; // TSI settings: config.TSI = { short: 13, long: 25, thresholds: { low: -25, high: 25, // How many candle intervals should a trend persist // before we consider it real? persistence: 1 } }; // Ultimate Oscillator Settings config.UO = { first: { weight: 4, period: 7 }, second: { weight: 2, period: 14 }, third: { weight: 1, period: 28 }, thresholds: { low: 30, high: 70, // How many candle intervals should a trend persist // before we consider it real? persistence: 1 } }; // CCI Settings config.CCI = { constant: 0.015, // constant multiplier. 0.015 gets to around 70% fit history: 90, // history size, make same or smaller than history thresholds: { up: 100, // fixed values for overbuy upward trajectory down: -100, // fixed value for downward trajectory persistence: 0 // filter spikes by adding extra filters candles } }; // StochRSI settings config.StochRSI = { interval: 3, thresholds: { low: 20, high: 80, // How many candle intervals should a trend persist // before we consider it real? persistence: 3 } }; // custom settings: config.custom = { my_custom_setting: 10, } config['talib-macd'] = { parameters: { optInFastPeriod: 10, optInSlowPeriod: 21, optInSignalPeriod: 9 }, thresholds: { down: -0.025, up: 0.025, } } config['talib-macd'] = { parameters: { optInFastPeriod: 10, optInSlowPeriod: 21, optInSignalPeriod: 9 }, thresholds: { down: -0.025, up: 0.025, } } config['tulip-adx'] = { optInTimePeriod: 10, thresholds: { down: -0.025, up: 0.025, } } // set this to true if you understand that Gekko will // invest according to how you configured the indicators. // None of the advice in the output is Gekko telling you // to take a certain position. Instead it is the result // of running the indicators you configured automatically. // // In other words: Gekko automates your trading strategies, // it doesn't advice on itself, only set to true if you truly // understand this. // // Not sure? Read this first: https://github.com/askmike/gekko/issues/201 config['I understand that Gekko only automates MY OWN trading strategies'] = false; module.exports = config;