def test_injects_instruments_into_discrete_scheme(): with TradingContext(**c1): action_scheme = DiscreteActions(n_actions=25) assert action_scheme._instrument == 'BTC' with TradingContext(**c2): action_scheme = DiscreteActions(n_actions=25) assert action_scheme._instrument == 'ETH'
def test_injects_instruments_into_continuous_scheme(): with TradingContext(**c1): action_scheme = ContinuousActions() assert action_scheme._instrument == 'BTC' with TradingContext(**c2): action_scheme = ContinuousActions() assert action_scheme._instrument == 'ETH'
def test_injects_products_into_continuous_strategy(): with TradingContext(**c1): action_strategy = ContinuousActionStrategy() assert action_strategy._product == 'BTC' with TradingContext(**c2): action_strategy = ContinuousActionStrategy() assert action_strategy._product == 'ETH'
def test_injects_products_into_discrete_strategy(): with TradingContext(**c1): action_strategy = DiscreteActionStrategy(n_actions=25) assert action_strategy._product == 'BTC' with TradingContext(**c2): action_strategy = DiscreteActionStrategy(n_actions=25) assert action_strategy._product == 'ETH'
def test_simulated_from_config(): class NoSlippage(SlippageModel): def adjust_trade(self, trade: Trade, **kwargs) -> Trade: pass config = { 'base_instrument': 'EURO', 'instruments': ['BTC', 'ETH'], 'exchanges': { 'commission': 0.5, 'base_precision': 0.3, 'instrument_precision': 10, 'min_trade_price': 1e-7, 'max_trade_price': 1e7, 'min_trade_size': 1e-4, 'max_trade_size': 1e4, 'initial_balance': 1e5, 'window_size': 5, 'should_pretransform_obs': True, 'max_allowed_slippage_percent': 3.0, 'slippage_model': NoSlippage } } with TradingContext(**config): df = pd.Source([[900, 849, 9023, 94039, 943]], columns=["open", "high", "low", "close", "volume"]) exchange_ds = DataFrameSource('prices', df) data_feed = DataFeed([exchange_ds]) exchange = Exchange('Exchange', lambda x: {EUR / ETH: x['close']}) assert exchange._base_instrument == 'EURO' assert exchange._commission == 0.5
def test_simlulated_from_config(): class NoSlippage(SlippageModel): def fill_order(self, trade: Trade, **kwargs) -> Trade: return trade config = { 'base_instrument': 'EURO', 'instruments': ['BTC', 'ETH'], 'exchanges': { 'commission_percent': 0.5, 'base_precision': 0.3, 'instrument_precision': 10, 'min_trade_price': 1e-7, 'max_trade_price': 1e7, 'min_trade_amount': 1e-4, 'max_trade_amount': 1e4, 'initial_balance': 1e5, 'window_size': 5, 'should_pretransform_obs': True, 'max_allowed_slippage_percent': 3.0, 'slippage_model': NoSlippage } } with TradingContext(**config): exchange = SimulatedExchange() exchange.base_instrument == 'EURO' exchange._commission_percent == 0.5
def test_injects_simulated_discrete_simple_environment(): env = make_env('simulated', 'dynamic', 'simple') assert env.action_scheme.pairs == [USD/BTC] with TradingContext(**config): env = make_env('simulated', 'dynamic', 'simple') assert env.action_scheme.pairs == [USD/BTC, USD/ETH]
def test_injects_strategy(): with TradingContext(**config): action_scheme = ConcreteActionScheme() assert hasattr(action_scheme.context, 'n_actions') assert action_scheme.context.n_actions == 50 assert action_scheme.context['n_actions'] == 50
def test_injects_simulated_discrete_simple_environment(): env = make_env('simulated', 'discrete', 'simple') assert env.action_strategy.n_actions == 20 with TradingContext(**config): env = make_env('simulated', 'discrete', 'simple') assert env.action_strategy.n_actions == 50
def test_injects_products_into_multi_discrete_strategy(): with TradingContext(**config) as tc: action_strategy = MultiDiscreteActionStrategy( actions_per_instrument=25) assert action_strategy._products == tc.shared['products']
def test_injects_base_instrument(): with TradingContext(**config): df = pd.Source([[900, 849, 9023, 94039, 943]], columns=["open", "high", "low", "close", "volume"]) exchange = SimulatedExchange(data_frame=df) assert exchange._base_instrument == EUR
def test_injects_string_initialized_action_scheme(): with TradingContext(**config): action_scheme = get('discrete') assert hasattr(action_scheme.context, 'n_actions') assert action_scheme.context.n_actions == 50 assert action_scheme.context['n_actions'] == 50
def test_injects_reward_scheme_with_context(): with TradingContext(**config): reward_scheme = ConcreteRewardScheme() assert hasattr(reward_scheme.context, 'size') assert reward_scheme.context.size == 0 assert reward_scheme.context['size'] == 0
def test_injects_reward_strategy_with_context(): with TradingContext(**config) as tc: reward_strategy = ConcreteRewardStrategy() assert hasattr(reward_strategy.context, 'amount') assert reward_strategy.context.amount == 0 assert reward_strategy.context['amount'] == 0
def test_injects_string_intialized_reward_strategy(): with TradingContext(**config) as tc: reward_strategy = get('simple') assert reward_strategy.registered_name == "rewards" assert hasattr(reward_strategy.context, 'amount') assert reward_strategy.context.amount == 0 assert reward_strategy.context['amount'] == 0
def test_injects_feature_pipeline_with_context(): config = {'features': {'shape': (90, 70)}} with TradingContext(**config): steps = list(repeat(Identity(), 5)) pipeline = FeaturePipeline(steps) assert hasattr(pipeline.context, 'shape') assert pipeline.context.shape == (90, 70)
def test_injects_feature_transformation_with_context(): config = {'features': {'shape': (90, 70)}} with TradingContext(**config): transformer = Identity() assert hasattr(transformer.context, 'shape') assert transformer.context.shape == (90, 70)
def test_injects_string_intialized_reward_scheme(): with TradingContext(**config): reward_scheme = get('simple') assert reward_scheme.registered_name == "rewards" assert hasattr(reward_scheme.context, 'size') assert reward_scheme.context.size == 0 assert reward_scheme.context['size'] == 0
def test_injects_context_into_slippage_model(): with TradingContext(**config) as tc: model = ConcreteSlippageModel() assert hasattr(model.context, 'minimum') assert hasattr(model.context, 'maximum') assert model.context.minimum == 0 assert model.context.maximum == 100 assert model.context['minimum'] == 0 assert model.context['maximum'] == 100
def test_injects_string_initialized_action_scheme(): with TradingContext(**config): exchange = get('simulated') assert hasattr(exchange.context, 'credentials') assert exchange.context.credentials == config['exchanges'][ 'credentials'] assert exchange.context['credentials'] == config['exchanges'][ 'credentials']
def test_injects_exchange_with_credentials(): with TradingContext(**config): exchange = ConcreteExchange() assert hasattr(exchange.context, 'credentials') assert exchange.context.credentials == { 'api_key': '48hg34wydghi7ef', 'api_secret_key': '0984hgoe8d7htg' } assert exchange.context['credentials'] == { 'api_key': '48hg34wydghi7ef', 'api_secret_key': '0984hgoe8d7htg' }
def test_injects_continuous_initialization(): c = { 'base_instrument': 'USD', 'instruments': ['BTC', 'ETH'], 'actions': { 'max_allowed_slippage_percent': 2.0 } } with TradingContext(**c): action_scheme = ContinuousActions() assert action_scheme.max_allowed_slippage_percent == 2.0
def test_injects_multi_discrete_initialization(): c = { 'base_instrument': 'USD', 'instruments': ['BTC', 'ETH'], 'actions': { 'actions_per_instrument': 50, 'max_allowed_slippage_percent': 2.0, } } with TradingContext(**c): action_scheme = MultiDiscreteActions() assert action_scheme._actions_per_instrument == 50 assert action_scheme._max_allowed_slippage_percent == 2.0
def test_injects_discrete_initialization(): c = { 'base_instrument': 'USD', 'instruments': ['BTC', 'ETH'], 'actions': { 'n_actions': 25, 'max_allowed_slippage_percent': 2.0 } } with TradingContext(**c): action_scheme = DiscreteActions() assert action_scheme.n_actions == 25 assert action_scheme.max_allowed_slippage_percent == 2.0
def test_initialize_ccxt_from_config(): config = { 'base_instrument': 'USD', 'exchanges': { 'exchange': 'binance', 'credentials': { 'api_key': '48hg34wydghi7ef', 'api_secret_key': '0984hgoe8d7htg' } } } with TradingContext(**config): exchange = CCXTExchange() assert str(exchange._exchange) == 'Binance' assert exchange._credentials == config['exchanges']['credentials']
def test_injects_trading_strategy_with_context(): with TradingContext(**config): env = TradingEnvironment(exchange='simulated', action_scheme='discrete', reward_scheme='simple') strategy = ConcreteTradingStrategy(environment=env) assert hasattr(strategy.environment.exchange.context, 'credentials') assert strategy.environment.exchange.context.credentials == config[ 'exchanges']['credentials'] assert hasattr(strategy.environment.action_scheme.context, 'n_actions') assert strategy.environment.action_scheme.context.n_actions == 24 print(strategy.environment.reward_scheme.context.data) assert hasattr(strategy.environment.reward_scheme.context, 'amount') assert strategy.environment.reward_scheme.context.amount == 100
def context(): return TradingContext.get_context()
def test_injects_instruments_into_multi_discrete_scheme(): with TradingContext(**config) as tc: action_scheme = MultiDiscreteActions(actions_per_instrument=25) assert action_scheme._instruments == tc.shared['instruments']
def test_injects_base_instrument(): with TradingContext(**config): exchange = SimulatedExchange() assert exchange.base_instrument == 'EURO'
def trade_context(): return TradingContext(**config)