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, )
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()
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))