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)
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)
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)
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))))
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
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))))
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
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,
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,