def stop_order(self, symbol, qty, price, side, role, flags): """ :param symbol: :param qty: :param price: :param side: :param role: :param flags: :return: """ order = Order({ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': self.name, 'side': side, 'type': order_types.STOP, 'flag': self.get_exec_inst(flags), 'qty': jh.prepare_qty(qty, side), 'price': price, 'role': role }) store.orders.add_order(order) return order
def _check_for_liquidations(candle: np.ndarray, exchange: str, symbol: str) -> None: p: Position = selectors.get_position(exchange, symbol) if not p: return # for now, we only support the isolated mode: if p.mode != 'isolated': return if candle_includes_price(candle, p.liquidation_price): closing_order_side = jh.closing_side(p.type) # create the market order that is used as the liquidation order order = Order({ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': exchange, 'side': closing_order_side, 'type': order_types.MARKET, 'flag': order_flags.REDUCE_ONLY, 'qty': jh.prepare_qty(p.qty, closing_order_side), 'price': p.bankruptcy_price, 'role': order_roles.CLOSE_POSITION }) store.orders.add_order(order) store.app.total_liquidations += 1 logger.info(f'{p.symbol} liquidated at {p.liquidation_price}') order.execute()
def market_order(self, symbol, qty, current_price, side, role, flags): """ :param symbol: :param qty: :param current_price: :param side: :param role: :param flags: :return: """ order = Order({ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': self.name, 'side': side, 'type': order_types.MARKET, 'flag': self.get_exec_inst(flags), 'qty': jh.prepare_qty(qty, side), 'price': current_price, 'role': role }) store.orders.add_order(order) store.orders.to_execute.append(order) return order
def limit_order(self, symbol, qty, price, side, role, flags): order = Order({ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': self.name, 'side': side, 'type': order_types.LIMIT, 'flag': self.get_exec_inst(flags), 'qty': jh.prepare_qty(qty, side), 'price': price, 'role': role }) store.orders.add_order(order) return order
def stop_order(self, symbol: str, qty: float, price: float, side: str, role: str, flags: list) -> Order: order = Order({ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': self.name, 'side': side, 'type': order_types.STOP, 'flag': self.get_exec_inst(flags), 'qty': jh.prepare_qty(qty, side), 'price': price, 'role': role }) store.orders.add_order(order) return order
def market_order(self, symbol: str, qty: float, current_price: float, side: str, role: str, flags: list) -> Order: order = Order({ 'id': jh.generate_unique_id(), 'symbol': symbol, 'exchange': self.name, 'side': side, 'type': order_types.MARKET, 'flag': self.get_exec_inst(flags), 'qty': jh.prepare_qty(qty, side), 'price': current_price, 'role': role }) store.orders.add_order(order) store.orders.to_execute.append(order) return order
def test_prepare_qty(): assert jh.prepare_qty(10, 'sell') == -10 assert jh.prepare_qty(-10, 'buy') == 10 with pytest.raises(ValueError): jh.prepare_qty(-10, 'invalid_input')