def test_fok_threshold_order_manager_canceled_on_threshold(self): ex = ccxtExchangeWrapper.load_from_id("binance") # type: ccxtExchangeWrapper ex.set_offline_mode("test_data/markets.json", "test_data/tickers.csv") ex._offline_tickers = { 0: {"ETH/BTC": {"ask": 1, "bid": 0.99}}, 1: {"ETH/BTC": {"ask": 1, "bid": 0.95}}, 2: {"ETH/BTC": {"ask": 1, "bid": 0.99}}, 3: {"ETH/BTC": {"ask": 1, "bid": 0.99}}, 4: {"ETH/BTC": {"ask": 1, "bid": 0.99}}, 5: {"ETH/BTC": {"ask": 1, "bid": 0.99}}, 6: {"ETH/BTC": {"ask": 1, "bid": 0.99}}, 7: {"ETH/BTC": {"ask": 1, "bid": 0.95}}, } tickers = ex.fetch_tickers("ETH/BTC") taker_price = core.get_symbol_order_price_from_tickers("ETH","BTC", tickers)["price"] order = FokThresholdTakerPriceOrder.create_from_start_amount("ETH/BTC", "ETH", 1, "BTC", taker_price, taker_price_threshold=-0.01, threshold_check_after_updates=5) om = ActionOrderManager(ex) om.request_trades = False om.add_order(order) while len(om.get_open_orders()) > 0: om.proceed_orders() closed_order = om.get_closed_orders()[0] # type: FokThresholdTakerPriceOrder trade_order = closed_order.orders_history[0] # type: TradeOrder self.assertEqual("closed", closed_order.status) self.assertEqual("canceled", trade_order.status) self.assertEqual(["#below_threshold"], order.tags) # updates of order: # 1 - order created # 2 .. 5 - order updated without requesting tickers # 6 - request ticker # 7 - receives ticker and send command to cancel. 2nd ticker is "bad" because first was used to get price # - check's if it was canceled # 8 - updates trades order with the canceled response self.assertEqual(8, trade_order.update_requests_count)
def test_fok_threshold_order_manager_canceled_on_updates_count(self): ex = ccxtExchangeWrapper.load_from_id("binance") # type: ccxtExchangeWrapper ex.set_offline_mode("test_data/markets.json", "test_data/tickers.csv") ex._offline_tickers = { 0: {"ETH/BTC": {"ask": 1, "bid": 0.99}}, 1: {"ETH/BTC": {"ask": 1, "bid": 0.96}}, 2: {"ETH/BTC": {"ask": 1, "bid": 0.96}}, 3: {"ETH/BTC": {"ask": 1, "bid": 0.96}}, 4: {"ETH/BTC": {"ask": 1, "bid": 0.96}}, 5: {"ETH/BTC": {"ask": 1, "bid": 0.96}}, 6: {"ETH/BTC": {"ask": 1, "bid": 0.96}}, 7: {"ETH/BTC": {"ask": 1, "bid": 0.96}}, } tickers = ex.fetch_tickers("ETH/BTC") taker_price = core.get_symbol_order_price_from_tickers("ETH", "BTC", tickers)["price"] order = FokThresholdTakerPriceOrder.create_from_start_amount("ETH/BTC", "ETH", 1, "BTC", taker_price, max_order_updates=10, taker_price_threshold=-0.05, threshold_check_after_updates=5) om = ActionOrderManager(ex) om.request_trades = False om.add_order(order) while len(om.get_open_orders()) > 0: om.proceed_orders() closed_order = om.get_closed_orders()[0] # type: FokThresholdTakerPriceOrder trade_order = closed_order.orders_history[0] # type: TradeOrder self.assertEqual("closed", closed_order.status) self.assertEqual("canceled", trade_order.status) self.assertEqual(list(), order.tags) self.assertEqual(11, trade_order.update_requests_count)
def test_cancel_by_time(self): fok_order_time = FokThresholdTakerPriceOrder("ADA/ETH", 1000, 0.32485131 / 1000, "sell", max_order_updates=10, time_to_cancel=0.1) order_command = fok_order_time.update_from_exchange({}) ex = ccxtExchangeWrapper.load_from_id("binance") # type: ccxtExchangeWrapper ex.set_offline_mode("test_data/markets.json", "test_data/tickers.csv") om = ActionOrderManager(ex) om.request_trades = False om.add_order(fok_order_time) om.proceed_orders() time.sleep(0.11) om.proceed_orders() om.proceed_orders() self.assertEqual(fok_order_time.status, "closed") self.assertIn("#timeout", fok_order_time.tags)