Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)