예제 #1
0
class TestMarketData(object):
    def setup(self):
        self.exchange = test_exchange
        self.market_data = MarketData(exchange_code=self.exchange)

    def test_set_exchange(self):
        # import ipdb; ipdb.set_trace()
        new_market_data = self.market_data.set_exchange('bitfinex')
        assert new_market_data.exchange_code == 'bitfinex'
        self.market_data = self.market_data.set_exchange(test_exchange)

    def test_get_all_exchanges(self):
        exchanges = self.market_data.get_all_exchanges()
        time.sleep(1)
        assert len(exchanges) > 0

    def test_get_markets(self):
        markets = self.market_data.get_markets()
        time.sleep(1)
        assert len(markets) > 0

    def test_get_trend(self):
        ohlcv = self.market_data.get_trend('BTC/USD', '1d')
        time.sleep(1)
        assert len(ohlcv) > 0
        assert ohlcv.index.dtype == 'datetime64[ns]'

    def test_get_trades(self):

        trades = self.market_data.get_trades(symbol)

        ts_client = TimeSeriesClient()
        ts_client.write_dataframe(
            trades[['symbol', 'side', 'id', 'price', 'amount', 'timestamp']],
            'test_trade_data',
            tags={'exchange': test_exchange},
            tag_columns=['symbol', 'side'])
        time.sleep(2)

        last_saved_trade = self.market_data.latest_trades(
            self.exchange, 'BTC/USD')
        ipdb.set_trace()
        # assert len(trades.index) > len(new_trades.index)
        print(len(trades.index), len(new_trades.index))


# def test_config():
#     print(config)

# def test_gdax_response():
#     assert len(products(api_base)) > 0

# def test_gdax_request_string():
#     auth = GDAXRequestAuth()

# def test_order():
#     auth = GDAXRequestAuth()
#     order_url = api_base + '/orders'
#     order_data = {
#         'type': 'market',
#         'side': 'sell',
#         'product_id': 'BTC-USD',
#         'size': '0.1'
#     }

#     order_placed_response = requests.post(order_url, data=json.dumps(order_data), auth=auth)
#     order_data = order_placed_response.json()
#     order_id = order_data['id']
#     order_url = api_base + '/orders/' + order_id

#     order_status_response = requests.get(order_url, auth=auth)

#     import ipdb;ipdb.set_trace()
#     print(response.json())
예제 #2
0
class TestMarketData(object):
    def setup(self):
        self.exchange = test_exchange
        self.market_data = MarketData(exchange_code=self.exchange)

    def test_set_exchange(self):
        new_market_data = self.market_data.set_exchange('bitfinex')
        assert new_market_data.exchange_code == 'bitfinex'
        self.market_data = self.market_data.set_exchange(test_exchange)

    def test_get_all_exchanges(self):
        exchanges = self.market_data.get_all_exchanges()
        time.sleep(1)
        assert len(exchanges) > 0

    def test_get_markets(self):
        markets = self.market_data.get_markets()
        time.sleep(1)
        assert len(markets) > 0

    # @pytest.mark.usefixtures("mock_exchange")
    def test_get_trend(self):
        self.market_data = self.market_data.get_trend('BTC/USD',
                                                      freq='5m',
                                                      wait=False)
        assert len(self.market_data.result['trend_data'].index) == 10

    @pytest.mark.usefixtures("mock_exchange")
    def test_get_trades(self):
        self.market_data = self.market_data.get_trades('BTC/USD', wait=False)
        assert len(self.market_data.result['trade_data'].index) == 3

    def test_global_lock(self):
        # TODO: this test depends on redis... mock?
        md1 = MarketData('gdax')
        md2 = MarketData('gdax')

        # Check they have different id's
        assert md1._id != md2._id

        # Test manually locking
        md1.lock()
        with pytest.raises(Exception) as e_info:
            md2.lock()

        md1.release()
        # Ensure I can release the lock
        assert md1._check_lock() is None

        # Test locking via context handler
        with md1 as _md1:
            with pytest.raises(Exception) as e_info:
                md2.lock()

        # Ensure context handler released cleanly
        assert md1._check_lock() is None

    @pytest.mark.usefixtures("mock_exchange")
    def test_save(self):
        self.market_data.result.clear()

        self.market_data = self.market_data.get_trend('BTC/USD',
                                                      freq='1d',
                                                      wait=False)
        self.market_data = self.market_data.get_trades('BTC/USD', wait=False)

        self.market_data.save()

        assert self.market_data.result == {}