539 lines
13 KiB
JavaScript
539 lines
13 KiB
JavaScript
// 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 '[email protected]'
|
||
from: '', // '[email protected]'
|
||
to: '', // '[email protected], [email protected]'
|
||
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: '[email protected]',
|
||
// 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; |