Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums



(Advanced Search)

Forum Statistics
» Members: 20,736
» Latest member: ab77run
» Forum threads: 1,541
» Forum posts: 7,732

Full Statistics

Online Users
There are currently 242 online users.
» 0 Member(s) | 242 Guest(s)

Latest Threads
New Gekko UI in the works
Forum: Announcements
Last Post: dejaoffice
04-25-2024, 10:44 AM
» Replies: 137
» Views: 156,545
Gekko development status ...
Forum: Announcements
Last Post: zerzamilmu
04-20-2024, 11:39 AM
» Replies: 806
» Views: 536,943
An official Gekko service...
Forum: Announcements
Last Post: CaroleDennis
04-20-2024, 04:03 AM
» Replies: 85
» Views: 140,719
Gekko with malware spotte...
Forum: Announcements
Last Post: alisonagron
04-18-2024, 08:05 AM
» Replies: 130
» Views: 92,182
Gekko 0.6 released
Forum: Announcements
Last Post: sabinaholt
03-27-2024, 12:10 PM
» Replies: 104
» Views: 216,201
How to Soft Reset or Hard...
Forum: General Discussion
Last Post: lucifar
10-07-2021, 07:18 PM
» Replies: 22
» Views: 39,487
How to add Binance Future...
Forum: Technical Support
Last Post: Xavier32
10-07-2021, 02:20 PM
» Replies: 47
» Views: 81,907
Bittrex Configuration hel...
Forum: Bittrex
Last Post: yirzolusto
10-07-2021, 07:39 AM
» Replies: 6
» Views: 15,197
[Question] Why does gekko...
Forum: General Discussion
Last Post: cryptocurrency0
10-06-2021, 01:16 PM
» Replies: 16
» Views: 34,644
a couple of technical Que...
Forum: Technical Support
Last Post: mtom78632
10-06-2021, 11:08 AM
» Replies: 25
» Views: 45,788

 
  Running gekko in the background with PM2
Posted by: SirTificate - 02-13-2018, 04:30 PM - Forum: Guides - Replies (20)

Hello,

I noticed that quite a lot of users run gekko in a screen process to keep it running while they are logged off. But there's a better way, use PM2!

The installation is quite simple:

Code:
npm install pm2 -g
Ubuntu/Debian users might want to run it with: sudo

Now that you have pm2 installed, there's just one more step to start gekko:

For CLI bots use:

Code:
pm2 start gekko.js -n "yourNameHere" -- -c my_config.js

To run the UI use:
Code:
pm2 start gekko.js -n "ui" -- --ui

Everything after the doubledash is passed as an argument to the gekko.js process. The parameter -n names your process. You have to give every instance a name, otherwise pm2 will refuse to start more than one instance of gekko.

To list all running processes use:
Code:
pm2 list

To stop a process use:
Code:
pm2 stop [id|name]
for instance:
pm2 stop 0
or
pm2 stop ui

Once a process is stopped you can remove it from the list using:

Code:
pm2 delete [id|name]

for instance:
pm2 delete 0
or
pm2 delete ui


PM2 stores the output of each process in your users homedir in ~/.pm2/logs. You can watch the logs with:
Code:
pm2 logs
or
pm2 logs [id|name]
to watch a specific process


I hope this helps anyone who's stuck in a hell of running a bunch of screen processes in parallel.

Tips are welcome:
ETH 0x40ddba96695bc040ccbe34b4cfa3a7ae8f225583
 


  Faster imports via shared CDN service
Posted by: tommiehansen - 02-13-2018, 10:28 AM - Forum: Feature Requests - Replies (8)

The current way of doing imports is less ideal. For very small datasets it isn't a problem, but 1+ years worth of data
quickly becomes somewhat of a problem.

So...

1. Route all 'imports' via a cache (a cdn or other server/service such as github)
2. If server has data available for date X get that period from the cache (else get from exchange api)
3. Have option to upload the data on completion (thus making the data available for others)
--
4. Don't store the data as pure db's but rather store it as e.g. csv files so that these can get gzipped.
5. After import convert the gzipped files to db's.

So the problem...
Most exchanges got a TOS that prevent data from being shared or make it easily available.
Thus the data would need to be obfuscated so that it only works (easily) via Gekko.


  Blackbird
Posted by: ManuManu - 02-13-2018, 12:35 AM - Forum: Alternative Software - Replies (13)

Anyone ever tried or have any info on Blackbird ?
https://github.com/butor/blackbird

It looks like a bot that is using the price difference between two exchanges to get some revenues...


  SQLITE_CORRUPT error
Posted by: chad.mercer - 02-12-2018, 08:40 PM - Forum: Technical Support - Replies (3)

Installed gekko on Bash for Windows per the instructions.  UI is working fine.  (Still can't get tulind to install, but that's not the purpose of this post.)

I'm doing a number of imports, and I keep getting errors like this in between "Child process has died." popups:

Quote:{ Error: SQLITE_CORRUPT: database disk image is malformed errno: 11, code: 'SQLITE_CORRUPT' }

The import process seems just a bit flaky.

Any thoughts?


  Exchange blinktrade
Posted by: mauroprojetos - 02-12-2018, 01:58 PM - Forum: Feature Requests - Replies (1)

[color=rgba(0, 0, 0, 0.87)]Friends need to deploy exchange blinktrade
If you have someone interested I give a reward of 0.003 BTC


Follow the API
https://www.npmjs.com/package/blinktrade
[/color]


  Telegram timeout
Posted by: gibba - 02-12-2018, 01:22 PM - Forum: Technical Support - Replies (4)

Hello

i'm using commandline with Telegram alerts setup in the config.js, after some hours i received this error:

Code:
Unhandled rejection TimeoutError: operation timed out
   at afterTimeout (~/bin/gekko/node_modules/node-telegram-bot-api/node_modules/request-promise/node_modules/bluebird/js/main/timers.js:16:15)
   at Timeout.timeoutTimeout [as _onTimeout] (~/bin/gekko/node_modules/node-telegram-bot-api/node_modules/request-promise/node_modules/bluebird/js/main/timers.js:59:9)
   at ontimeout (timers.js:458:11)
   at tryOnTimeout (timers.js:296:5)
   at Timer.listOnTimeout (timers.js:259:5)
Unhandled rejection Error: 502 <html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>

   at ~/bin/gekko/node_modules/node-telegram-bot-api/lib/telegramPolling.js:133:17
   at tryCatcher (~/bin/gekko/node_modules/node-telegram-bot-api/node_modules/request-promise/node_modules/bluebird/js/main/util.js:26:23)
   at Promise._settlePromiseFromHandler (~/bin/gekko/node_modules/node-telegram-bot-api/node_modules/request-promise/node_modules/bluebird/js/main/promise.js:510:31)
   at Promise._settlePromiseAt (~/bin/gekko/node_modules/node-telegram-bot-api/node_modules/request-promise/node_modules/bluebird/js/main/promise.js:584:18)
   at Promise._settlePromises (~/bin/gekko/node_modules/node-telegram-bot-api/node_modules/request-promise/node_modules/bluebird/js/main/promise.js:700:14)
   at Async._drainQueue (~/bin/gekko/node_modules/node-telegram-bot-api/node_modules/request-promise/node_modules/bluebird/js/main/async.js:123:16)
   at Async._drainQueues (~/bin/gekko/node_modules/node-telegram-bot-api/node_modules/request-promise/node_modules/bluebird/js/main/async.js:133:10)
   at Immediate.Async.drainQueues [as _onImmediate] (~/bin/gekko/node_modules/node-telegram-bot-api/node_modules/request-promise/node_modules/bluebird/js/main/async.js:15:14)
   at runCallback (timers.js:756:18)
   at tryOnImmediate (timers.js:717:5)
   at processImmediate [as _immediateCallback] (timers.js:697:5)
Unhandled rejection Error: 502 <html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>

Now Telegram alerts stopped to work.
Searching on the web it seems that the timeout limit need to be increased. I don't know if in the plugin library or in the node-telegram-bot-api.

I hope this can help devs solving the problem


  Cannot install Tulip Indicators
Posted by: Sylvesta - 02-12-2018, 01:14 PM - Forum: Technical Discussion - Replies (4)

Hi All, hoping someone can help me here.

So trying to stall the tulip indicator using:

Code:
npm install tulind

I get the following error and not too sure what it means besides it cant get the download from the server:

> tulind@0.8.9 install /home/Sylvesta/gekko/node_modules/tulind
> node-pre-gyp install --fallback-to-build

node-pre-gyp ERR! Tried to download(404): https://tulipnode.s3.amazonaws.com/tulin...x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for tulind@0.8.9 and node@8.9.4 (node-v57 ABI, glibc) (falling back to source compile with node-gyp)
make: Entering directory '/home/Sylvesta/gekko/node_modules/tulind/build'
  CXX(target) Release/obj.target/tulind/tulind.o
../tulind.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE startbyindex(Nan::NAN_METHOD_ARGS_TYPE)’:
../tulind.cpp:72:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (ind->options != options->Length()) {
                      ^
../tulind.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE callbyindex(Nan::NAN_METHOD_ARGS_TYPE)’:
../tulind.cpp:127:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (ind->inputs != inputs->Length()) {
                     ^
../tulind.cpp:134:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (ind->options != options->Length()) {
                      ^
  CC(target) Release/obj.target/tulind/external/tiamalgamation.o
  SOLINK_MODULE(target) /home/Sylvesta/gekko/node_modules/tulind/lib/binding/Release/node-v57-linux-x64/tulind.node
  COPY Release/tulind.node
make: Leaving directory '/home/Sylvesta/gekko/node_modules/tulind/build'
+ tulind@0.8.9
updated 1 package in 10.175s

Anyone have an idea or a workaround for me please?

Cheers!


  Add Kucoin support
Posted by: Wekende - 02-12-2018, 02:04 AM - Forum: Feature Requests - Replies (1)

Hello everyone,

I really would love to test out this bot on the exchange i'm normally trading on, Kucoin. If somebody would take the time and effort to write it i would greatly appreciate it. As far as i know there is already an API for this exchange for node/javascript so only a few adjustments would have to be made i think.


  Strategies repositories
Posted by: xFFFFF - 02-11-2018, 10:51 PM - Forum: Strategy Development - Replies (11)

I uploaded various strategies which I found at Git, Google and here. Repository is in progress - I must do backtests for all what I have. Tomorrow will add more strategies and backtests Smile

https://github.com/xFFFFF/Gekko-Strategies


Question Accuracy of tulip indicators?
Posted by: tommiehansen - 02-11-2018, 10:48 PM - Forum: Technical Discussion - No Replies

I know the accuracy of the indicators (all indicators) has come into question before, but when i ran a really long backtest now it just seems the return performance is too good?

Dataset
Pair: USDT-ETH
Exchange: poloniex
From: 2015-08-08 06:15
To: 2017-11-07 14:37
Duration: 2 years, 3 months, 12 hours, 52 minutes

Params
Candle Size: 15 minutes
Warmup period: 10

Paper trader
All on default

Strategy params

None, since they are defined within the js (see source @ tinit())

Strategy
RSI_BULL_BEAR_ADX

Results (screen)
https://i.imgur.com/L2iPfHV.png
Over 4.4 million percent (!) vs market @ 17 950%
Note: Output chart is cut since i resized the window after completion (it doesn't auto-resize)

Results 2 (screen); 5 minute candles instead of 15
+83 573 824% (yes, over 83 million percent return) which seems implausible
Screen: https://i.imgur.com/bB33jX4.jpg

Other
Running Gekko stable branch

Strategy source

Code:
/*
    RSI Bull and Bear + ADX modifier
    1. Use different RSI-strategies depending on a longer trend
    2. But modify this slighly if shorter BULL/BEAR is detected
    -
    8 feb 2017
    -
    (CC-BY-SA 4.0) Tommie Hansen
    https://creativecommons.org/licenses/by-sa/4.0/
*/

// req's
var log = require ('../core/log.js');
var config = require ('../core/util.js').getConfig();

// strategy
var strat = {
    
    /* INIT */
    init: function()
    {
        this.name = 'RSI Bull and Bear + ADX';
        this.requiredHistory = config.tradingAdvisor.historySize;
        this.resetTrend();        
        
        // debug? set to flase to disable all logging/messages/stats (improves performance)
        this.debug = false;
        
        // performance
        config.backtest.batchSize = 1000; // increase performance
        config.silent = true;
        config.debug = false;
        
        /* TEMP: set params */
        this.settings.SMA_long = 1000; // default 1000
        this.settings.SMA_short = 50; // default 50
        
        this.settings.BULL_RSI = 10; // timeperiod
        this.settings.BULL_RSI_high = 80; // default 80
        this.settings.BULL_RSI_low = 60; // default 60
        
        this.settings.BEAR_RSI = 15; // timeperiod
        this.settings.BEAR_RSI_high = 50; // default 50
        this.settings.BEAR_RSI_low = 20; // default 20
        
        this.settings.ADX = 3; // timeperiod
        this.settings.ADX_high = 70;
        this.settings.ADX_low = 50;
        
        // SMA
        this.addTulipIndicator('maSlow', 'sma', { optInTimePeriod: this.settings.SMA_long });
        this.addTulipIndicator('maFast', 'sma', { optInTimePeriod: this.settings.SMA_short });
        
        // RSI
        this.addTulipIndicator('BULL_RSI', 'rsi', { optInTimePeriod: this.settings.BULL_RSI });
        this.addTulipIndicator('BEAR_RSI', 'rsi', { optInTimePeriod: this.settings.BEAR_RSI });
        
        // ADX
        this.addTulipIndicator('ADX', 'adx', { optInTimePeriod: this.settings.ADX })
        this.adx = { max: 0, min: 0 };
        
        // debug stuff
        this.startTime = new Date();
        this.stat = {
            bear: { min: 100, max: 0 },
            bull: { min: 100, max: 0 }
        };
        
    }, // init()
    
    
    /* RESET TREND */
    resetTrend: function()
    {
        var trend = {
            duration: 0,
            direction: 'none',
            longPos: false,
        };
    
        this.trend = trend;
    },
    
    
    /* get low/high for backtest-period */
    lowHigh: function( rsi, type )
    {
        let cur;
        if( type == 'bear' ) {
            cur = this.stat.bear;
            if( rsi < cur.min ) this.stat.bear.min = rsi; // set new
            if( rsi > cur.max ) this.stat.bear.max = rsi;
        }
        else {
            cur = this.stat.bull;
            if( rsi < cur.min ) this.stat.bull.min = rsi; // set new
            if( rsi > cur.max ) this.stat.bull.max = rsi;
        }
    },
    
    
    /* CHECK */
    check: function()
    {
        
        // get all indicators
        let ind = this.tulipIndicators,
            maSlow = ind.maSlow.result.result,
            maFast = ind.maFast.result.result,
            rsi,
            adx = ind.ADX.result.result;
        
        if( this.debug ){
            if( adx < this.adx.min ) this.adx.min = adx;
            else if( adx > this.adx.max ) this.adx.max = adx;
        }
            
        // BEAR TREND
        if( maFast < maSlow )
        {
            rsi = ind.BEAR_RSI.result.result;
            let rsi_hi = this.settings.BEAR_RSI_high,
                rsi_low = this.settings.BEAR_RSI_low;
            
            // ADX trend strength?
            if( adx > this.settings.ADX_high ) rsi_hi = rsi_hi + 15;
            else if( adx < this.settings.ADX_low ) rsi_low = rsi_low -5;
                
            if( rsi > rsi_hi ) this.short();
            else if( rsi < rsi_low ) this.long();
            
            if(this.debug) this.lowHigh( rsi, 'bear' );
            //log.debug('BEAR-trend');
        }

        // BULL TREND
        else
        {
            rsi = ind.BULL_RSI.result.result;
            let rsi_hi = this.settings.BULL_RSI_high,
                rsi_low = this.settings.BULL_RSI_low;
            
            // ADX trend strength?
            if( adx > this.settings.ADX_high ) rsi_hi = rsi_hi + 5;        
            else if( adx < this.settings.ADX_low ) rsi_low = rsi_low -5;
                
            if( rsi > rsi_hi ) this.short();
            else if( rsi < rsi_low )  this.long();
            if(this.debug) this.lowHigh( rsi, 'bull' );
            //log.debug('BULL-trend');
        }
    
    }, // check()
    
    
    /* LONG */
    long: function()
    {
        if( this.trend.direction !== 'up' ) // new trend? (only act on new trends)
        {
            this.resetTrend();
            this.trend.direction = 'up';
            this.advice('long');
            if( this.debug ) log.info('Going long');
        }
        
        if( this.debug )
        {
            this.trend.duration++;
            log.info('Long since', this.trend.duration, 'candle(s)');
        }
    },
    
    
    /* SHORT */
    short: function()
    {
        // new trend? (else do things)
        if( this.trend.direction !== 'down' )
        {
            this.resetTrend();
            this.trend.direction = 'down';
            this.advice('short');
            if( this.debug ) log.info('Going short');
        }
        
        if( this.debug )
        {
            this.trend.duration++;
            log.info('Short since', this.trend.duration, 'candle(s)');
        }
    },
    
    
    /* END backtest */
    end: function()
    {
        let seconds = ((new Date()- this.startTime)/1000),
            minutes = seconds/60,
            str;
            
        minutes < 1 ? str = seconds + ' seconds' : str = minutes + ' minutes';
        
        log.info('====================================');
        log.info('Finished in ' + str);
        log.info('====================================');
    
        // print stats and messages if debug
        if(this.debug)
        {
            let stat = this.stat;
            log.info('BEAR RSI low/high: ' + stat.bear.min + ' / ' + stat.bear.max);
            log.info('BULL RSI low/high: ' + stat.bull.min + ' / ' + stat.bull.max);
            log.info('ADX min/max: ' + this.adx.min + ' / ' + this.adx.max);
        }
        
    }
    
};

module.exports = strat;


...so what's the status on how good the indicators work?