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