コード例 #1
0
def test_format_order_requests_applies_correct_precision_to_price_price_bound_distance(instrument):
    order_request = OrderRequest(instrument='AUD_USD', price=50.1234567891234, price_bound=1234.123456789,
                                 distance=20.123456789)
    result = _format_order_request(order_request, instrument)
    for attr in (result.price, result.price_bound, result.distance):
        if instrument.display_precision == 0:
            assert re.findall(r'(?<=\.)\d+', str(attr))[0] == '0'
        else:
            assert len(re.findall(r'(?<=\.)\d+', str(attr))[0]) == instrument.display_precision
コード例 #2
0
def test_format_order_requests_applies_correct_precision_to_take_profit_on_fill_stop_loss_on_fill(instrument):
    order_request = OrderRequest(instrument=instrument.name, take_profit_on_fill=50.123456789,
                                 stop_loss_on_fill=50.123456789)
    result = _format_order_request(order_request, instrument)
    for attr in (result.stop_loss_on_fill.price, result.take_profit_on_fill):
        if instrument.display_precision == 0:
            assert re.findall(r'(?<=\.)\d+', str(attr))[0] == '0'
        else:
            assert len(re.findall(r'(?<=\.)\d+', str(attr))[0]) == instrument.display_precision
コード例 #3
0
def test_format_order_requests_applies_correct_precision_to_units(instrument):
    order_request = OrderRequest(instrument=instrument.name, units=50.1234567891234)
    result = _format_order_request(order_request, instrument)


    if instrument.trade_units_precision == 0:
        assert re.findall(r'(?<=\.)\d+', str(result.units))[0] == '0'
    else:
        assert len(re.findall(r'(?<=\.)\d+', str(result.units))[0]) == instrument.trade_units_precision

    order_request = OrderRequest(instrument=instrument.name, units=0.1234567891234)
    result = _format_order_request(order_request, instrument, clip=True)


    if instrument.trade_units_precision == 0:
        assert re.findall(r'(?<=\.)\d+', str(result.units))[0] == '0'
    else:
        assert len(re.findall(r'(?<=\.)\d+', str(result.units))[0]) == instrument.trade_units_precision
コード例 #4
0
def test_ins_context_does_not_add_parameters_to_order_requests(instrument):
    order_request = OrderRequest(
        instrument=instrument.name,
        units=instrument.minimum_trade_size
    )
    result = _format_order_request(order_request, instrument, clip=True)
    assert not hasattr(result, 'price_bound')
    assert not hasattr(result, 'trailing_stop_loss_on_fill')
    assert not hasattr(result, 'stop_loss_on_fill')
    assert not hasattr(result, 'take_profit_on_fill')
コード例 #5
0
def test_format_order_requests_applies_correct_precision_to_trailing_stop_loss_on_fill(instrument):
    order_request = OrderRequest(
        instrument=instrument.name,
        trailing_stop_loss_on_fill=instrument.minimum_trailing_stop_distance + 0.123456789
    )
    result = _format_order_request(order_request, instrument)
    attr = result.trailing_stop_loss_on_fill.distance
    if instrument.display_precision == 0:
        assert re.findall(r'(?<=\.)\d+', str(attr))[0] == '0'
    else:
        assert len(re.findall(r'(?<=\.)\d+', str(attr))[0]) == instrument.display_precision
コード例 #6
0
def test_format_order_requests_accepts_negative_values_for_units(instrument):
    order_request = OrderRequest(
        instrument=instrument.name,
        units=-instrument.minimum_trade_size
    )

    result = _format_order_request(order_request, instrument, clip=False)

    assert result.units == -instrument.minimum_trade_size

    result = _format_order_request(order_request, instrument, clip=True)

    assert result.units == -instrument.minimum_trade_size
コード例 #7
0
def test_format_order_requests_limits_trailing_stop_loss_on_fill_to_valid_range(instrument):
    order_request = OrderRequest(
        instrument=instrument.name,
        trailing_stop_loss_on_fill=0
    )
    if instrument.minimum_trailing_stop_distance > 0:
        with pytest.raises(InvalidOrderRequest):
            _format_order_request(order_request, instrument)

    result = _format_order_request(order_request, instrument, clip=True)
    assert result.trailing_stop_loss_on_fill.distance == instrument.minimum_trailing_stop_distance

    order_request = OrderRequest(
        instrument=instrument.name,
        trailing_stop_loss_on_fill=instrument.maximum_trailing_stop_distance + 10
    )

    with pytest.raises(InvalidOrderRequest):
        _format_order_request(order_request, instrument)

    result = _format_order_request(order_request, instrument, clip=True)
    assert result.trailing_stop_loss_on_fill.distance == instrument.maximum_trailing_stop_distance
コード例 #8
0
def test_format_order_requests_limits_units_to_valid_range(instrument):
    order_request = OrderRequest(
        instrument=instrument.name,
        units=0
    )

    if instrument.minimum_trade_size > 0:
        with pytest.raises(InvalidOrderRequest):
            _format_order_request(order_request, instrument)

    result = _format_order_request(order_request, instrument, clip=True)

    assert result.units == instrument.minimum_trade_size

    order_request = OrderRequest(
        instrument=instrument.name,
        units=instrument.maximum_order_units + 10
    )

    with pytest.raises(InvalidOrderRequest):
        _format_order_request(order_request, instrument)

    result = _format_order_request(order_request, instrument, clip=True)
    assert result.units == instrument.maximum_order_units
コード例 #9
0
async def test_create_request_kwargs(client, server, method, signature, kwargs):

    await client.initialize()
    client.format_order_requests = True
    args = construct_arguments(client, signature, **kwargs)
    if OrderRequest in args:
        args.update({OrderRequest: OrderRequest(instrument='AUD_USD', units=1)})

    request_kwargs = create_request_kwargs(client, method.endpoint, args)

    # Make sure args are not empty
    assert request_kwargs.get('method', 1)
    assert request_kwargs.get('url', 1)
    assert request_kwargs.get('headers', 1)
    assert request_kwargs.get('params', 1)
    assert request_kwargs.get('json', 1)

    assert [request_kwargs['method']] in [['POST'], ['GET'], ['PUT'], ['PATCH'], ['DELETE']]

    auth_in_header = 'Authorization' in request_kwargs.get('headers', '')
    if Authorization in method.endpoint.parameters:
        assert auth_in_header
    else:
        assert not auth_in_header
コード例 #10
0
def test_format_order_requests_raises_error_when_units_less_than_minimum(instrument):
    order_request = OrderRequest(instrument='XPT_USD', units=0.123456)
    with pytest.raises(InvalidOrderRequest):
        _format_order_request(order_request, instrument)
コード例 #11
0
def test_format_order_requests_updates_units(instrument):
    order_request = OrderRequest(instrument='AUD_JPY', units=0.123456)


    result = _format_order_request(order_request, instrument, clip=True)
    assert result.units >= instrument.minimum_trade_size
コード例 #12
0
async def test_request_body_does_not_raise_error_when_an_invalid_order_request_is_passed(client, server):
    await client.initialize()
    client.format_order_requests = True
    body = create_body(client, POSTOrders.request_schema,
                       {OrderRequest: OrderRequest(instrument='AUD_USD', units=0)})
    assert body['order']['units'] == '1.0'