示例#1
0
        public void DeleteLimitOrderValidOrder()
        {
            var orderId = "wrongOrderId";

            Step("Make StopLimitOrderRequest and get valid orderId", () =>
            {
                var model = new StopLimitOrderRequest
                {
                    AssetPairId     = "BTCUSD",
                    LowerLimitPrice = 100,
                    LowerPrice      = 150,
                    OrderAction     = OrderAction.Sell,
                    UpperLimitPrice = 500,
                    UpperPrice      = 450,
                    Volume          = 0.1
                };

                var response = apiV2.Orders.PostOrdersStopLimit(model, token);
                Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Created));

                orderId = response.Content.Replace("\"", "");
            });

            Step($"Make DELETE /api/orders/limit/{orderId}", () =>
            {
                var response = apiV2.Orders.DeleteOrdersLimitOrder(orderId, token);
                Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
            });
        }
示例#2
0
        public void PostOrdersStopLimit()
        {
            Step("Make POST /api/orders/stoplimit and validate response", () =>
            {
                var model = new StopLimitOrderRequest
                {
                    AssetPairId     = "BTCUSD",
                    LowerLimitPrice = 100,
                    LowerPrice      = 150,
                    OrderAction     = OrderAction.Sell,
                    UpperLimitPrice = 500,
                    UpperPrice      = 450,
                    Volume          = 0.1
                };

                var response = apiV2.Orders.PostOrdersStopLimit(model, token);

                Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Created));
            });
        }
        public async Task <IActionResult> PlaceStopLimitOrder([FromBody] StopLimitOrderRequest request)
        {
            var id = Guid.NewGuid();

            var pair = _assetsServiceClient.AssetPairs.Get(request.AssetPairId);

            if (pair == null)
            {
                return(NotFound($"Asset pair '{request.AssetPairId}' not found."));
            }

            if (pair.IsDisabled)
            {
                return(BadRequest($"Asset pair '{request.AssetPairId}' disabled."));
            }

            var baseAsset    = _assetsServiceClient.Assets.Get(pair.BaseAssetId);
            var quotingAsset = _assetsServiceClient.Assets.Get(pair.QuotingAssetId);

            var tradingSession = await _clientSessionsClient.GetTradingSession(_requestContext.SessionId);

            var confirmationRequired = _baseSettings.EnableSessionValidation && !(tradingSession?.Confirmed ?? false);

            if (confirmationRequired)
            {
                return(BadRequest("Session confirmation is required"));
            }

            var command = new CreateStopLimitOrderCommand
            {
                AssetPair = new AssetPairModel
                {
                    Id                = request.AssetPairId,
                    BaseAsset         = ConvertAssetToAssetModel(baseAsset),
                    QuotingAsset      = ConvertAssetToAssetModel(quotingAsset),
                    MinVolume         = pair.MinVolume,
                    MinInvertedVolume = pair.MinInvertedVolume
                },
                Volume          = Math.Abs(request.Volume),
                LowerLimitPrice = request.LowerLimitPrice,
                LowerPrice      = request.LowerPrice,
                UpperLimitPrice = request.UpperLimitPrice,
                UpperPrice      = request.UpperPrice,
                OrderAction     = request.OrderAction == OrderAction.Buy ? Lykke.Service.Operations.Contracts.Orders.OrderAction.Buy : Lykke.Service.Operations.Contracts.Orders.OrderAction.Sell,
                Client          = await GetClientModel(),
                GlobalSettings  = GetGlobalSettings()
            };

            try
            {
                await _operationsClient.PlaceStopLimitOrder(id, command);
            }
            catch (HttpOperationException e)
            {
                if (e.Response.StatusCode == HttpStatusCode.BadRequest)
                {
                    return(BadRequest(JObject.Parse(e.Response.Content)));
                }

                throw;
            }

            return(Created(Url.Action("Get", "Operations", new { id }), id));
        }
 public IResponse PostOrdersStopLimit(StopLimitOrderRequest model, string token)
 {
     return(Request.Post("/orders/stoplimit").AddJsonBody(model).WithBearerToken(token).Build().Execute());
 }