Пример #1
0
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'
Пример #2
0
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'
Пример #3
0
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'
Пример #4
0
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'
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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]
Пример #8
0
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
Пример #9
0
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
Пример #10
0
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']
Пример #11
0
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
Пример #12
0
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
Пример #13
0
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
Пример #14
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
Пример #15
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
Пример #16
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)
Пример #17
0
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)
Пример #18
0
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
Пример #19
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
Пример #20
0
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']
Пример #21
0
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'
        }
Пример #22
0
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
Пример #23
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
Пример #24
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
Пример #25
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']
Пример #26
0
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()
Пример #28
0
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']
Пример #29
0
def test_injects_base_instrument():

    with TradingContext(**config):
        exchange = SimulatedExchange()

        assert exchange.base_instrument == 'EURO'
Пример #30
0
def trade_context():
    return TradingContext(**config)