def test_get_btcusdt_when_loaded_returns_expected_instrument(self):
        # Arrange
        mock_client = MagicMock()
        mock_client.name = "Binance"

        with open(TEST_PATH + "res_instruments.json") as response:
            instruments = json.load(response)

        mock_client.markets = instruments

        provider = CCXTInstrumentProvider(client=mock_client)
        provider.load_all()

        symbol = Symbol("BTC/USDT", Venue("BINANCE"))

        # Act
        instrument = provider.get(symbol)

        # Assert
        self.assertEqual(Instrument, type(instrument))
        self.assertEqual(AssetClass.CRYPTO, instrument.asset_class)
        self.assertEqual(AssetType.SPOT, instrument.asset_type)
        self.assertEqual(BTC, instrument.base_currency)
        self.assertEqual(USDT, instrument.quote_currency)
        self.assertEqual(USDT, instrument.settlement_currency)
예제 #2
0
    def test_get_btcusdt_when_loaded_returns_expected_instrument(self):
        # Arrange
        with open(TEST_PATH + "markets.json") as response:
            markets = json.load(response)

        with open(TEST_PATH + "currencies.json") as response:
            currencies = json.load(response)

        mock_client = MagicMock()
        mock_client.name = "Binance"
        mock_client.precisionMode = 2
        mock_client.markets = markets
        mock_client.currencies = currencies

        provider = CCXTInstrumentProvider(client=mock_client)
        provider.load_all()

        instrument_id = InstrumentId(Symbol("BTC/USDT"), Venue("BINANCE"))

        # Act
        instrument = provider.find(instrument_id)

        # Assert
        self.assertEqual(Instrument, type(instrument))
        self.assertEqual(AssetClass.CRYPTO, instrument.asset_class)
        self.assertEqual(AssetType.SPOT, instrument.asset_type)
        self.assertEqual(BTC, instrument.base_currency)
        self.assertEqual(USDT, instrument.quote_currency)
        self.assertEqual(USDT, instrument.settlement_currency)
예제 #3
0
    def test_real_api(self):
        import ccxt

        client = ccxt.binance()
        provider = CCXTInstrumentProvider(client=client)

        # Act
        provider.load_all()

        # Assert
        self.assertTrue(provider.count > 0)  # No exceptions raised
    def test_get_all_when_not_loaded_returns_empty_dict(self):
        # Arrange
        mock_client = MagicMock()
        mock_client.name = "Binance"

        provider = CCXTInstrumentProvider(client=mock_client)

        # Act
        instruments = provider.get_all()

        # Assert
        self.assertTrue(len(instruments) == 0)
    def test_get_btcusdt_when_not_loaded_returns_none(self):
        # Arrange
        mock_client = MagicMock()
        mock_client.name = "Binance"

        provider = CCXTInstrumentProvider(client=mock_client)

        symbol = Symbol("BTC/USDT", Venue("BINANCE"))

        # Act
        instrument = provider.get(symbol)

        # Assert
        self.assertIsNone(instrument)
예제 #6
0
    def test_get_btc_currency_when_not_loaded_returns_none(self):
        # Arrange
        mock_client = MagicMock()
        mock_client.name = "Binance"
        mock_client.precisionMode = 2

        provider = CCXTInstrumentProvider(client=mock_client)
        provider.load_all()

        # Act
        currency = provider.currency("BTC")

        # Assert
        self.assertIsNone(currency)
    def test_load_all(self):
        # Arrange
        mock_client = MagicMock()
        mock_client.name = "Binance"

        with open(TEST_PATH + "res_instruments.json") as response:
            instruments = json.load(response)

        mock_client.markets = instruments

        provider = CCXTInstrumentProvider(client=mock_client)

        # Act
        provider.load_all()

        # Assert
        self.assertTrue(provider.count > 0)  # No exceptions raised
    def test_get_all_when_loaded_returns_instruments(self):
        # Arrange
        mock_client = MagicMock()
        mock_client.name = "Binance"

        with open(TEST_PATH + "res_instruments.json") as response:
            instruments = json.load(response)

        mock_client.markets = instruments

        provider = CCXTInstrumentProvider(client=mock_client)
        provider.load_all()

        # Act
        instruments = provider.get_all()

        # Assert
        self.assertTrue(len(instruments) > 0)
        self.assertEqual(dict, type(instruments))
        self.assertEqual(Symbol, type(next(iter(instruments))))
예제 #9
0
    def test_load_all_when_tick_size_precision_mode_exchange(self):
        # Arrange
        with open(TEST_PATH + "markets2.json") as response:
            markets = json.load(response)

        with open(TEST_PATH + "currencies2.json") as response:
            currencies = json.load(response)

        mock_client = MagicMock()
        mock_client.name = "BitMEX"
        mock_client.precisionMode = 4
        mock_client.markets = markets
        mock_client.currencies = currencies

        provider = CCXTInstrumentProvider(client=mock_client)

        # Act
        provider.load_all()

        # Assert
        self.assertEqual(120, provider.count)  # No exceptions raised
예제 #10
0
    def test_get_all_when_load_all_is_true_returns_expected_instruments(self):
        # Arrange
        with open(TEST_PATH + "markets.json") as response:
            markets = json.load(response)

        with open(TEST_PATH + "currencies.json") as response:
            currencies = json.load(response)

        mock_client = MagicMock()
        mock_client.name = "Binance"
        mock_client.precisionMode = 2
        mock_client.markets = markets
        mock_client.currencies = currencies

        provider = CCXTInstrumentProvider(client=mock_client, load_all=True)

        # Act
        instruments = provider.get_all()

        # Assert
        self.assertTrue(len(instruments) > 0)
        self.assertEqual(dict, type(instruments))
        self.assertEqual(InstrumentId, type(next(iter(instruments))))
예제 #11
0
    def test_get_btc_currency_when_loaded_returns_expected_currency(self):
        # Arrange
        with open(TEST_PATH + "markets.json") as response:
            markets = json.load(response)

        with open(TEST_PATH + "currencies.json") as response:
            currencies = json.load(response)

        mock_client = MagicMock()
        mock_client.name = "Binance"
        mock_client.precisionMode = 2
        mock_client.markets = markets
        mock_client.currencies = currencies

        provider = CCXTInstrumentProvider(client=mock_client)
        provider.load_all()

        # Act
        currency = provider.currency("BTC")

        # Assert
        self.assertEqual(Currency, type(currency))
        self.assertEqual("BTC", currency.code)
        self.assertEqual(8, currency.precision)
        async def run_test():
            # Arrange
            with open(TEST_PATH + "res_instruments.json") as response:
                instruments = json.load(response)

            mock_client = MagicMock()
            mock_client.name = "Binance"
            mock_client.markets = instruments

            provider = CCXTInstrumentProvider(client=mock_client)

            # Act
            await provider.load_all_async()
            await asyncio.sleep(0.5)

            # Assert
            self.assertTrue(provider.count > 0)  # No exceptions raised
예제 #13
0
from nautilus_trader.model.currencies import USDT
from nautilus_trader.model.enums import BarAggregation
from nautilus_trader.model.enums import OMSType
from nautilus_trader.model.enums import PriceType
from nautilus_trader.model.identifiers import InstrumentId
from nautilus_trader.model.identifiers import Symbol
from nautilus_trader.model.identifiers import Venue
from nautilus_trader.model.objects import Money
from tests.test_kit.providers import TestDataProvider

if __name__ == "__main__":
    # Setup trading instruments
    # Requires an internet connection for the instrument loader
    # Alternatively use the TestInstrumentProvider in the test kit
    print("Loading instruments...")
    instruments = CCXTInstrumentProvider(client=ccxt.binance(), load_all=True)

    BINANCE = Venue("BINANCE")
    instrument_id = InstrumentId(symbol=Symbol("ETH/USDT"), venue=BINANCE)
    ETHUSDT_BINANCE = instruments.find(instrument_id)

    # Setup data container
    data = BacktestDataContainer()
    data.add_instrument(ETHUSDT_BINANCE)
    data.add_trade_ticks(ETHUSDT_BINANCE.id, TestDataProvider.ethusdt_trades())

    # Instantiate your strategy
    strategy = EMACross(
        instrument_id=ETHUSDT_BINANCE.id,
        bar_spec=BarSpecification(250, BarAggregation.TICK, PriceType.LAST),
        fast_ema_period=10,
예제 #14
0
from nautilus_trader.model.currencies import BTC
from nautilus_trader.model.currencies import USDT
from nautilus_trader.model.enums import BarAggregation
from nautilus_trader.model.enums import OMSType
from nautilus_trader.model.enums import PriceType
from nautilus_trader.model.identifiers import Symbol
from nautilus_trader.model.identifiers import Venue
from nautilus_trader.model.objects import Money
from tests.test_kit.providers import TestDataProvider

if __name__ == "__main__":
    # Setup trading instruments
    # Requires an internet connection for the instrument loader
    # Alternatively use the TestInstrumentProvider in the test kit
    print("Loading instruments...")
    instruments = CCXTInstrumentProvider(client=ccxt.binance(), load_all=True)

    BINANCE = Venue("BINANCE")
    ETHUSDT_BINANCE = instruments.get(Symbol("ETH/USDT", BINANCE))

    # Setup data container
    data = BacktestDataContainer()
    data.add_instrument(ETHUSDT_BINANCE)
    data.add_trade_ticks(ETHUSDT_BINANCE.symbol,
                         TestDataProvider.ethusdt_trades())

    # Instantiate your strategy
    strategy = EMACross(
        symbol=ETHUSDT_BINANCE.symbol,
        bar_spec=BarSpecification(250, BarAggregation.TICK, PriceType.LAST),
        fast_ema_period=10,