示例#1
0
    def __init__(self, *args, **kwargs):
        self.cli_args = self._parse_arguments()

        if self.cli_args["init"]:
            ConfigBuilder().init()
            sys.exit()

        self.configbuilder = False

        self.granularity = Granularity.ONE_HOUR
        self.base_currency = "BTC"
        self.quote_currency = "GBP"
        self.is_live = 0
        self.is_verbose = 0
        self.save_graphs = 0
        self.is_sim = 0
        self.simstartdate = None
        self.simenddate = None
        self.sim_speed = "fast"
        self.sell_upper_pcnt = None
        self.sell_lower_pcnt = None
        self.nosellminpcnt = None
        self.nosellmaxpcnt = None
        self.trailing_stop_loss = None
        self.trailing_stop_loss_trigger = 0
        self.sell_at_loss = 1
        self.smart_switch = 1
        self.sell_smart_switch = 0
        self.preventloss = False
        self.preventlosstrigger = None
        self.preventlossmargin = None

        self.telegram = False

        self.logbuysellinjson = False
        self.telegramdatafolder = "."

        self.buypercent = 100
        self.sellpercent = 100
        self.last_action = None
        self._chat_client = None
        self.buymaxsize = None
        self.buyminsize = 0
        self.sellfullbaseamount = True

        self.buylastsellsize = False
        self.trailingbuypcnt = 0
        self.trailingimmediatebuy = False
        self.marketmultibuycheck = False

        self.sellatresistance = False
        self.autorestart = False
        self.stats = False
        self.statgroup = None
        self.statstartdate = None
        self.statdetail = False
        self.nobuynearhighpcnt = 3
        self.simresultonly = False

        self.disablebullonly = False
        self.disablebuynearhigh = False
        self.disablebuymacd = False
        self.disablebuyema = False
        self.disablebuyobv = False
        self.disablebuyelderray = False
        self.disablefailsafefibonaccilow = False
        self.disablefailsafelowerpcnt = False
        self.disableprofitbankupperpcnt = False
        self.disableprofitbankreversal = False
        self.disabletelegram = False
        self.disablelog = False
        self.disabletracker = False
        self.enableml = False
        self.websocket = False
        self.enableexitaftersell = False
        self.use_sell_fee = True

        self.enableinsufficientfundslogging = False
        self.insufficientfunds = False
        self.enabletelegrambotcontrol = False
        self.enableimmediatebuy = False

        self.telegramtradesonly = False
        self.disabletelegramerrormsgs = False

        self.filelog = True
        self.logfile = (self.cli_args["logfile"]
                        if self.cli_args["logfile"] else "pycryptobot.log")
        self.fileloglevel = "DEBUG"
        self.consolelog = True
        self.consoleloglevel = "INFO"

        self.ema1226_5m_cache = None
        self.ema1226_15m_cache = None
        self.ema1226_1h_cache = None
        self.ema1226_6h_cache = None
        self.sma50200_1h_cache = None

        self.sim_smartswitch = False

        self.recv_window = self._set_recv_window()

        self.config_file = kwargs.get("config_file", "config.json")

        self.tradesfile = (self.cli_args["tradesfile"]
                           if self.cli_args["tradesfile"] else "trades.csv")

        self.config_provided = False
        self.config = {}

        if self.cli_args["config"] is not None:
            self.config_file = self.cli_args["config"]
            self.config_provided = True

        self.exchange = self._set_exchange(kwargs["exchange"])

        self.startmethod = self.cli_args["startmethod"] if self.cli_args[
            "startmethod"] else "standard"
        self.enable_atr72_pcnt = True
        self.enable_buy_next = True
        self.enable_volume = False
        self.usekucoincache = True
        # print(self.startmethod)

        # set defaults
        (
            self.api_url,
            self.api_key,
            self.api_secret,
            self.api_passphrase,
            self.market,
        ) = self._set_default_api_info(self.exchange)

        self.read_config(kwargs["exchange"])

        Logger.configure(
            filelog=self.filelog,
            logfile=self.logfile,
            fileloglevel=self.fileloglevel,
            consolelog=self.consolelog,
            consoleloglevel=self.consoleloglevel,
        )
示例#2
0
    def __init__(self, exchange='coinbasepro', filename='config.json'):
        self.api_key = ''
        self.api_secret = ''
        self.api_passphrase = ''
        self.api_url = ''

        self.telegram_token = ''
        self.telegram_client_id = ''

        if args['config'] is not None:
            filename = args['config']
        if args['exchange'] is not None:
            if args['exchange'] not in ['coinbasepro', 'binance', 'dummy']:
                raise TypeError('Invalid exchange: coinbasepro, binance')
            else:
                self.exchange = args['exchange']
        else:
            self.exchange = exchange

        self.market = 'BTC-GBP'
        self.base_currency = 'BTC'
        self.quote_currency = 'GBP'
        self.granularity = None
        self.is_live = 0
        self.is_verbose = 0
        self.save_graphs = 0
        self.is_sim = 0
        self.simstartdate = None
        self.sim_speed = 'fast'
        self.sell_upper_pcnt = None
        self.sell_lower_pcnt = None
        self.trailing_stop_loss = None
        self.sell_at_loss = 1
        self.smart_switch = 1
        self.telegram = False
        self.buypercent = 100
        self.sellpercent = 100
        self.last_action = None
        self._chat_client = None
        self.buymaxsize = None

        self.configbuilder = False

        self.sellatresistance = False
        self.autorestart = False

        self.disablebullonly = False
        self.disablebuynearhigh = False
        self.disablebuymacd = False
        self.disablebuyobv = False
        self.disablebuyelderray = False
        self.disablefailsafefibonaccilow = False
        self.disablefailsafelowerpcnt = False
        self.disableprofitbankupperpcnt = False
        self.disableprofitbankreversal = False
        self.disabletelegram = False
        self.disablelog = False
        self.disabletracker = False

        self.logfile = args['logfile'] if args['logfile'] else "pycryptobot.log"

        if args['init']:
            # config builder
            cb = ConfigBuilder()
            cb.init()
            sys.exit()

        try:
            with open(filename) as config_file:
                config = json.load(config_file)

                if exchange not in config and 'binance' in config:
                    self.exchange = 'binance'

                if self.exchange == 'coinbasepro' and 'coinbasepro' in config:
                    coinbaseProConfigParser(self, config['coinbasepro'], args)

                elif self.exchange == 'binance' and 'binance' in config:
                    binanceConfigParser(self, config['binance'], args)

                if not self.disabletelegram and 'telegram' in config and 'token' in config[
                        'telegram'] and 'client_id' in config['telegram']:
                    telegram = config['telegram']

                    self.telegram_token = telegram['token']
                    self.telegram_client_id = telegram['client_id']
                    self._chat_client = Telegram(self.telegram_token,
                                                 self.telegram_client_id)
                    self.telegram = True

        except json.decoder.JSONDecodeError as err:
            sys.tracebacklimit = 0
            print('Invalid config.json: ' + str(err) + "\n")
            sys.exit()

        except IOError as err:
            sys.tracebacklimit = 0
            print('Invalid config.json: ' + str(err) + "\n")
            sys.exit()

        except ValueError as err:
            sys.tracebacklimit = 0
            print('Invalid config.json: ' + str(err) + "\n")
            sys.exit()
示例#3
0
    def __init__(self, exchange='', filename='config.json'):
        args = parse_arguments()

        self.api_key = ''
        self.api_secret = ''
        self.api_passphrase = ''
        self.api_url = ''

        if args['config'] is not None:
            filename = args['config']
        if args['exchange'] is not None:
            if args['exchange'] not in ['coinbasepro', 'binance', 'dummy']:
                raise TypeError('Invalid exchange: coinbasepro, binance')
            else:
                self.exchange = args['exchange']
        else:
            try:
                with open(filename) as config_file:
                    config = json.load(config_file)
                    if exchange == '' and ('coinbasepro' in config
                                           or 'api_pass' in config):
                        self.exchange = 'coinbasepro'
                    elif exchange == '' and 'binance' in config:
                        self.exchange = 'binance'
                    elif exchange != '' and exchange in [
                            'coinbasepro', 'binance', 'dummy'
                    ]:
                        self.exchange = exchange
                    else:
                        self.exchange = 'dummy'
            except:
                self.exchange = 'dummy'
                pass

        self.market = 'BTC-GBP'
        self.base_currency = 'BTC'
        self.quote_currency = 'GBP'
        self.granularity = 3600
        self.is_live = 0
        self.is_verbose = 0
        self.save_graphs = 0
        self.is_sim = 0
        self.simstartdate = None
        self.simenddate = None
        self.sim_speed = 'fast'
        self.sell_upper_pcnt = None
        self.sell_lower_pcnt = None
        self.trailing_stop_loss = None
        self.sell_at_loss = 1
        self.smart_switch = 1
        self.telegram = False
        self.buypercent = 100
        self.sellpercent = 100
        self.last_action = None
        self._chat_client = None
        self.buymaxsize = None

        self.configbuilder = False

        self.sellatresistance = False
        self.autorestart = False
        self.stats = False
        self.statgroup = None
        self.statstartdate = None
        self.statdetail = False

        self.disablebullonly = False
        self.disablebuynearhigh = False
        self.disablebuymacd = False
        self.disablebuyema = False
        self.disablebuyobv = False
        self.disablebuyelderray = False
        self.disablefailsafefibonaccilow = False
        self.disablefailsafelowerpcnt = False
        self.disableprofitbankupperpcnt = False
        self.disableprofitbankreversal = False
        self.disabletelegram = False
        self.disablelog = False
        self.disabletracker = False

        self.filelog = True
        self.logfile = args['logfile'] if args['logfile'] else 'pycryptobot.log'
        self.fileloglevel = 'DEBUG'
        self.consolelog = True
        self.consoleloglevel = 'INFO'

        self.ema1226_1h_cache = None
        self.ema1226_6h_cache = None
        self.sma50200_1h_cache = None

        self.sim_smartswitch = False

        if args['init'] or (filename == 'config.json'
                            and not os.path.isfile(filename)):
            # config builder
            cb = ConfigBuilder()
            cb.init()
            sys.exit()

        try:
            with open(filename) as config_file:
                config = json.load(config_file)

                # if no exchange specified then dummy
                #if self.exchange not in config:
                #    self.exchange = 'dummy'

                if self.exchange == 'coinbasepro' and 'coinbasepro' in config:
                    coinbaseProConfigParser(self, config['coinbasepro'], args)

                elif self.exchange == 'binance' and 'binance' in config:
                    binanceConfigParser(self, config['binance'], args)

                elif self.exchange == 'dummy' and 'dummy' in config:
                    dummyConfigParser(self, config['dummy'], args)

                if not self.disabletelegram and 'telegram' in config and 'token' in config[
                        'telegram'] and 'client_id' in config['telegram']:
                    telegram = config['telegram']
                    self._chat_client = Telegram(telegram['token'],
                                                 telegram['client_id'])
                    self.telegram = True

                if 'logger' in config:
                    loggerConfigParser(self, config['logger'])

                if self.disablelog:
                    self.filelog = 0
                    self.fileloglevel = 'NOTSET'
                    self.logfile == "pycryptobot.log"

                Logger.configure(filelog=self.filelog,
                                 logfile=self.logfile,
                                 fileloglevel=self.fileloglevel,
                                 consolelog=self.consolelog,
                                 consoleloglevel=self.consoleloglevel)

        except json.decoder.JSONDecodeError as err:
            sys.tracebacklimit = 0
            raise ValueError('Invalid config.json: ' + str(err))

        except IOError as err:
            sys.tracebacklimit = 0
            raise ValueError('Invalid config.json: ' + str(err))

        except ValueError as err:
            sys.tracebacklimit = 0
            raise ValueError('Invalid config.json: ' + str(err))