Skip to content
This repository has been archived by the owner on Feb 15, 2022. It is now read-only.

v4.1.0: release to master #1069

Merged
merged 17 commits into from
Jan 7, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
language: node_js
node_js:
- "8"
- "9"
before_install:
- rm -rf package-lock.json
- npm install https://github.com/floatdrop/pinkie-promise.git
- npm install -g node-gyp
44 changes: 44 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
## Changelog

- [v4.1.0](https://github.com/carlos8f/zenbot/releases/tag/v4.1.0) (Latest)
- more indicators
- more strategies
- more exchanges
- too many bug fixes to list here
- web UI
- Travis
- Docker automated builds
- Automated tests
- [v4.0.5](https://github.com/carlos8f/zenbot/releases/tag/v4.0.5)
- handle insufficient funds errors from gdax
- new trend_ema defaults adjusted for latest btc movements: 20m period, neutral_rate=0
- include more data in sim output
- remove rarely useful trend_ema options
- avoid abort in trader on failed getTrades()
- v4.0.4
- debugging for polo odd results
- sim: simplify and correct makerFee assessment
- fix conf path in API credentials errors
- fix order total under 0.0001 error on polo
- Docker: extend README slightly (thanks [@DeviaVir](https://github.com/deviavir) and [@egorbenko](https://github.com/egorbenko))
- docker-compose: do not expose mongodb by default! (thanks [@DeviaVir](https://github.com/deviavir))
- v4.0.3
- fix for docker mongo host error
- link for new Discord chat!
- fix polo crash on getOrder weird result
- fix oversold_rsi trigger while in preroll
- fix polo "not enough..." errors
- fancy colors for price report
- display product id in report
- fix poloniex backfill batches too big, mongo timeouts
- fix cursorTo() crash on some node installs
- memDump for debugging order failures
- fix column spacing on progress report
- v4.0.2
- minor overhaul to trend_ema strat - added whipsaw filtering via std. deviation (`--neutral_rate=auto`)
- trim preroll of sim result graph
- v4.0.1
- Added .dockerignore (thanks [@sulphur](https://github.com/sulphur))
- fix crashing on mongo timeout during backfill
- fix gaps in poloniex backfill
- default backfill days 90 -> 14
6 changes: 5 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ RUN mkdir -p /app
WORKDIR /app

COPY package.json /app/
RUN npm install -g node-gyp && npm install --unsafe-perm
COPY webpack.config.js /app/
COPY webpack-src /app/webpack-src
COPY templates /app/templates
RUN npm install -g node-gyp
RUN npm install --unsafe-perm

COPY . /app
RUN ln -s /app/zenbot.sh /usr/local/bin/zenbot
Expand Down
188 changes: 112 additions & 76 deletions README.md

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions commands/trade.js
Original file line number Diff line number Diff line change
Expand Up @@ -387,9 +387,11 @@ module.exports = function container (get, set, clear) {
get('db.trades').select(opts, function (err, trades) {
if (err) throw err
if (!trades.length) {
console.log('------------------------------------------ INITIALIZE OUTPUT ------------------------------------------')
var head = '------------------------------------------ INITIALIZE OUTPUT ------------------------------------------';
console.log(head)
get('lib.output').initializeOutput(s)
console.log('---------------------------- STARTING ' + so.mode.toUpperCase() + ' TRADING ----------------------------')
var minuses = Math.floor((head.length - so.mode.length - 19) / 2)
console.log('-'.repeat(minuses) + ' STARTING ' + so.mode.toUpperCase() + ' TRADING ' + '-'.repeat(minuses + (minuses % 2 == 0 ? 0 : 1)))
if (so.mode === 'paper') {
console.log('!!! Paper mode enabled. No real trades are performed until you remove --paper from the startup command.')
}
Expand Down
4 changes: 2 additions & 2 deletions docker-compose-windows.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
server:
build: .
image: deviavir/zenbot:unstable
volumes:
- ./conf.js:/app/conf.js
- ./extensions:/app/extensions
Expand All @@ -12,7 +12,7 @@ mongodb:
image: mongo:latest
volumes_from:
- mongodb-data
command: mongod --smallfiles
command: mongod --smallfiles --bind_ip=0.0.0.0 --logpath=/dev/null

mongodb-data:
image: mongo:latest
Expand Down
4 changes: 2 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version: '3.1'
services:

server:
build: .
image: deviavir/zenbot:unstable
volumes:
- ./conf.js:/app/conf.js
- ./extensions:/app/extensions
Expand All @@ -22,7 +22,7 @@ services:
image: mongo:latest
volumes:
- ./data/db:/data/db
command: mongod --smallfiles --logpath=/dev/null
command: mongod --smallfiles --bind_ip=0.0.0.0 --logpath=/dev/null
ports:
- 27017:27017

Expand Down
2 changes: 1 addition & 1 deletion extensions/exchanges/bittrex/exchange.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ module.exports = function container(get, set, clear) {
var timeout = 2500
}

console.error(('\Bittrex API error - unable to call ' + method + ' (' + error.message + '), retrying in ' + timeout / 1000 + 's').red)
console.error(('\nBittrex API error - unable to call ' + method + ' (' + error.message + '), retrying in ' + timeout / 1000 + 's').red)
setTimeout(function () {
exchange[method].apply(exchange, args)
}, timeout)
Expand Down
6 changes: 3 additions & 3 deletions extensions/exchanges/poloniex/exchange.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ module.exports = function container (get, set, clear) {
return retry('getTrades', func_args)
}
if (!body.map) {
console.error('\getTrades odd result:')
console.error('\ngetTrades odd result:')
console.error(body)
return retry('getTrades', func_args)
}
Expand All @@ -100,7 +100,7 @@ module.exports = function container (get, set, clear) {
return retry('getBalance', args)
}
if (body.error) {
console.error('\ggetBalance error:')
console.error('\ngetBalance error:')
console.error(body)
return retry('getBalance', args)
}
Expand All @@ -126,7 +126,7 @@ module.exports = function container (get, set, clear) {
return retry('getQuote', args)
}
if (body.error) {
console.error('\ggetQuote error:')
console.error('\ngetQuote error:')
console.error(body)
return retry('getQuote', args)
}
Expand Down
6 changes: 0 additions & 6 deletions extensions/strategies/dema-lessnoise/_codemap.js

This file was deleted.

83 changes: 0 additions & 83 deletions extensions/strategies/dema-lessnoise/strategy.js

This file was deleted.

5 changes: 4 additions & 1 deletion extensions/strategies/dema/strategy.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ module.exports = function container (get, set, clear) {
this.option('down_trend_threshold', 'threshold to trigger a sold signal', Number, 0)
this.option('overbought_rsi_periods', 'number of periods for overbought RSI', Number, 9)
this.option('overbought_rsi', 'sold when RSI exceeds this value', Number, 80)
this.option('noise_level_pct', 'do not trade when short ema is with this % of last short ema', Number, 0)
},

calculate: function (s) {
Expand Down Expand Up @@ -47,7 +48,9 @@ module.exports = function container (get, set, clear) {
}

if (typeof s.period.dema_histogram === 'number' && typeof s.lookback[0].dema_histogram === 'number') {
if ((s.period.dema_histogram - s.options.up_trend_threshold) > 0 && (s.lookback[0].dema_histogram - s.options.up_trend_threshold) <= 0) {
if (s.options.noise_level_pct != 0 && (s.period.ema_short / s.lookback[0].ema_short * 100 < s.options.noise_level_pct)) {
s.signal = 'null';
} else if ((s.period.dema_histogram - s.options.up_trend_threshold) > 0 && (s.lookback[0].dema_histogram - s.options.up_trend_threshold) <= 0) {
s.signal = 'buy';
} else if ((s.period.dema_histogram + s.options.down_trend_threshold) < 0 && (s.lookback[0].dema_histogram + s.options.down_trend_threshold) >= 0) {
s.signal = 'sell';
Expand Down
5 changes: 3 additions & 2 deletions extensions/strategies/noop/_codemap.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module.exports = {
_ns: 'zenbot',

'strategies.noop': require('./strategy')
}
'strategies.noop': require('./strategy'),
'strategies.list[]': '#strategies.noop'
}
4 changes: 2 additions & 2 deletions extensions/strategies/trendline/strategy.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ module.exports = function container (get, set, clear) {
s.signal = 'buy'
}
else if (
s.growth === false |
s.growth2 === false |
s.growth === false ||
s.growth2 === false ||
s.accel === false
)
{
Expand Down
6 changes: 3 additions & 3 deletions lib/engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,7 @@ module.exports = function container (get, set, clear) {
process.stdout.write(z(8, pct(diff), ' ')[diff >= 0 ? 'green' : 'red'])
}
else {
process.stdout.write(z(8, '', ' '))
process.stdout.write(z(9, '', ' '))
}
var volume_display = s.period.volume > 99999 ? abbreviate(s.period.volume, 2) : n(s.period.volume).format('0')
volume_display = z(8, volume_display, ' ')
Expand Down Expand Up @@ -789,8 +789,8 @@ module.exports = function container (get, set, clear) {
z(19, 'DATE', ' ').grey,
z(17, 'PRICE', ' ').grey,
z(9, 'DIFF', ' ').grey,
z(15, 'VOL', ' ').grey,
z(12, 'RSI', ' ').grey,
z(10, 'VOL', ' ').grey,
z(8, 'RSI', ' ').grey,
z(32, 'ACTIONS', ' ').grey,
z(25, 'BAL', ' ').grey,
z(22, 'PROFIT', ' ').grey
Expand Down
Loading