Esempio n. 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,
        )
Esempio n. 2
0
    def __init__(self, exchange='coinbasepro', 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:
            self.exchange = exchange

        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.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.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

        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)

                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))
Esempio n. 3
0
import json, pandas, pytest, os, sys, urllib3
from datetime import datetime
# disable insecure ssl warning
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

sys.path.append('.')
# pylint: disable=import-error
from models.exchange.binance import AuthAPI, PublicAPI
from models.helper.LogHelper import Logger
Logger.configure()


# there is no dynamic way of retrieving a valid order market
VALID_ORDER_MARKET = 'DOGEUSDT'

def test_instantiate_authapi_without_error():
    api_key = "0000000000000000000000000000000000000000000000000000000000000000"
    api_secret = "0000000000000000000000000000000000000000000000000000000000000000"
    exchange = AuthAPI(api_key, api_secret)
    assert type(exchange) is AuthAPI

def test_instantiate_authapi_with_api_key_error():
    api_key = "ERROR"
    api_secret = "0000000000000000000000000000000000000000000000000000000000000000"

    with pytest.raises(SystemExit) as execinfo:
        AuthAPI(api_key, api_secret)
    assert str(execinfo.value) == 'Binance API key is invalid'

def test_instantiate_authapi_with_api_secret_error():
    api_key = "0000000000000000000000000000000000000000000000000000000000000000"