Example #1
0
 def update_account(self, account: Account):
     funds = self.bitmex.funds()
     last = self.get_ticker().last
     account.open_position = self.get_position()
     account.open_position.walletBalance = convert_to_XBT(
         funds['walletBalance'], funds['currency'])
     account.equity = convert_to_XBT(funds['marginBalance'],
                                     funds['currency'])
     account.usd_equity = account.equity * last
Example #2
0
    def __init__(self, settings, trading_bot: TradingBot):
        self.settings = settings
        self.id = self.settings.id
        self.last_tick = 0

        self.logger = log.setup_custom_logger(
            name=settings.id,
            log_level=settings.LOG_LEVEL,
            logToConsole=settings.LOG_TO_CONSOLE,
            logToFile=settings.LOG_TO_FILE)
        self.logger.info("#############################")
        self.logger.info("############ Start LiveTrading " + settings.id +
                         " on " + settings.EXCHANGE + " #################")
        self.exchange: ExchangeInterface = None
        if settings.EXCHANGE == 'bitmex':
            self.exchange = BitmexInterface(settings=settings,
                                            logger=self.logger,
                                            on_tick_callback=self.on_tick)
        elif settings.EXCHANGE == 'bybit':
            self.exchange = ByBitInterface(settings=settings,
                                           logger=self.logger,
                                           on_tick_callback=self.on_tick)
        elif settings.EXCHANGE == 'binance':
            self.exchange = BinanceInterface(settings=settings,
                                             logger=self.logger,
                                             on_tick_callback=self.on_tick)
        else:
            self.logger.error("unkown exchange: " + settings.EXCHANGE)
            self.alive = False
            return

        self.alive = True

        if self.exchange.is_open():
            self.logger.info(" Starting Live Trading Engine for %s " %
                             self.exchange.symbol)
            self.symbolInfo: Symbol = self.exchange.get_instrument()
            self.bot: TradingBot = trading_bot
            self.bot.prepare(self.logger, self)
            # init market data dict to be filled later
            self.bars: List[Bar] = []
            self.update_bars()
            self.account: Account = Account()
            self.update_account()
            self.bot.reset()
        else:
            self.alive = False
Example #3
0
    def reset(self):
        self.account = Account()
        self.account.open_position.walletBalance = self.initialEquity
        self.account.open_position.quantity = 0
        self.account.equity = self.account.open_position.walletBalance
        self.account.usd_equity = self.initialEquity * self.bars[-1].open
        self.hh = self.initialEquity
        self.maxDD = 0
        self.max_underwater = 0
        self.lastHHPosition = 0
        self.underwater = 0
        self.maxExposure= 0
        self.bot.reset()

        self.current_bars = []
        for b in self.bars:
            b.did_change = True
        self.bot.init(self.bars[-self.bot.min_bars_needed():], self.account, self.symbol, None)
Example #4
0
    def __init__(self, settings, telegram: TelegramBot,
                 trading_bot: TradingBot):
        self.settings = settings
        self.id = self.settings.id
        self.last_tick = 0

        self.logger = log.setup_custom_logger(
            name=settings.id,
            log_level=settings.LOG_LEVEL,
            logToConsole=settings.LOG_TO_CONSOLE,
            logToFile=settings.LOG_TO_FILE)

        self.telegram_bot = telegram

        self.logger.info("#############################")
        self.logger.info("############ Start LiveTrading " + settings.id +
                         " on " + settings.EXCHANGE + " #################")
        self.exchange: ExchangeInterface = None
        if settings.EXCHANGE == 'bitmex':
            self.exchange = BitmexInterface(settings=settings,
                                            logger=self.logger,
                                            on_tick_callback=self.on_tick)
        elif settings.EXCHANGE == 'bybit':
            self.exchange = ByBitInterface(settings=settings,
                                           logger=self.logger,
                                           on_tick_callback=self.on_tick)
        elif settings.EXCHANGE == 'binance':
            self.exchange = BinanceInterface(settings=settings,
                                             logger=self.logger,
                                             on_tick_callback=self.on_tick)
        elif settings.EXCHANGE == 'phemex':
            self.exchange = PhemexInterface(settings=settings,
                                            logger=self.logger,
                                            on_tick_callback=self.on_tick)
        else:
            self.logger.error("unkown exchange: " + settings.EXCHANGE)
            self.alive = False
            return

        self.alive = True

        if self.exchange.is_open():
            self.logger.info(" Starting Live Trading Engine for %s " %
                             self.exchange.symbol)
            self.symbolInfo: Symbol = self.exchange.get_instrument()
            self.bot: TradingBot = trading_bot
            self.bot.prepare(self.logger, self)
            # init market data dict to be filled later
            self.bars: List[Bar] = []
            self.update_bars()
            self.account: Account = Account()
            self.update_account()
            self.bot.reset()
            if self.telegram_bot is not None:
                pos = "no pos"
                if self.account.open_position is not None and self.account.open_position.avgEntryPrice is not None:
                    pos = "%.2f @ %.2f" % (
                        self.account.open_position.quantity,
                        self.account.open_position.avgEntryPrice)
                self.telegram_bot.send_log(
                    "%s loaded, ready to go with %.2f in wallet and pos %s" %
                    (self.id, self.account.equity, pos))
        else:
            self.alive = False
Example #5
0
 def update_account(self, account: Account):
     pos = self.positions[self.symbol]
     account.open_position = pos
     account.equity = pos.walletBalance
     account.usd_equity = account.equity * self.last