예제 #1
0
        public async Task <IActionResult> CancelLimitOrder([FromBody] CancelLimitOrderRequest request)
        {
            try
            {
                if (!long.TryParse(request.OrderId, out var orderId))
                {
                    return(BadRequest("OrderId should be long"));
                }

                var result = await GetAuthenticatedExchange().CancelOrder(orderId, TimeSpan.FromSeconds(DefaultTimeOutSeconds));

                return(Ok(new CancelLimitOrderResponse {
                    OrderId = result.ToString(CultureInfo.InvariantCulture)
                }));
            }
            catch (ApiException e)
            {
                if (e.ErrorCode == ApiErrorCode.OrderNotFound || e.ApiStatusCode == HttpStatusCode.NotFound)
                {
                    return(NotFound(new ErrorModel(e.Message, e.ErrorCode)));
                }

                if (e.ApiStatusCode == HttpStatusCode.BadRequest)
                {
                    return(BadRequest(new ErrorModel(e.Message, e.ErrorCode)));
                }
                return(StatusCode((int)HttpStatusCode.InternalServerError, new ErrorModel(e.Message, e.ErrorCode)));
            }
        }
예제 #2
0
        public override async Task <CancelLimitOrderResponse> CancelLimitOrderAsync([FromBody] CancelLimitOrderRequest request)
        {
            if (Guid.TryParse(request.OrderId, out Guid orderId))
            {
                await Api.CancelLimitOrderAsync(orderId);
            }

            return(new CancelLimitOrderResponse
            {
                OrderId = request.OrderId
            });
        }
예제 #3
0
        public override async Task <CancelLimitOrderResponse> CancelLimitOrderAsync([FromBody] CancelLimitOrderRequest request)
        {
            var cancelled = await Api.CancelOrder(request.OrderId);

            if (!cancelled)
            {
                _log.Warning($"The order with id = {request.OrderId} has not been cancelled");
            }

            return(new CancelLimitOrderResponse {
                OrderId = request.OrderId
            });
        }
예제 #4
0
        public override async Task <CancelLimitOrderResponse> CancelLimitOrderAsync(
            [FromBody] CancelLimitOrderRequest request)
        {
            OrdersCanceled response = await Api.CancelOpenOrder(request.OrderId);

            if (response.Count != 1)
            {
                _log.Warning($"Expected single order canceled, but count = {response.Count}");
            }

            return(new CancelLimitOrderResponse {
                OrderId = request.OrderId
            });
        }
        public async Task <IActionResult> CancelOrder([FromBody] CancelLimitOrderRequest request)
        {
            if (request?.OrderId == null)
            {
                return(BadRequest("Incorect parameters - null"));
            }
            await _meclient.CancelLimitOrderAsync(request.OrderId);

            var resp = new CancelLimitOrderResponse()
            {
                OrderId = request?.OrderId
            };

            return(Ok(resp));
        }
예제 #6
0
        public void CancelLimitOrder(OsEngine.Entity.Order order)
        {
            var cancelOrders = new CancelLimitOrderRequest
            {
                ExpireControl = new RequestExpired
                {
                    Now = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds,
                    Ttl = ttl
                },
                CurrencyPair = order.SecurityNameCode.Replace("_", "/"),
                Id           = Convert.ToInt64(order.NumberMarket)
            };

            string token = "CancelOrder_" + order.NumberUser;

            SendAuthMessage(_secKey, token, WsRequestMetaData.WsRequestMsgType.CancelLimitOrder, cancelOrders);
        }
예제 #7
0
        public async Task <CancelLimitOrderResponse> CancelLimitOrderAsync([FromBody] CancelLimitOrderRequest request)
        {
            InternalOrder internalOrder = await _internalOrderService.GetByIdAsync(request.OrderId);

            if (internalOrder == null)
            {
                throw new ValidationApiException(HttpStatusCode.NotFound, "Order not found");
            }

            if (internalOrder.Status != InternalOrderStatus.Cancelled &&
                internalOrder.Status != InternalOrderStatus.Rejected &&
                internalOrder.Status != InternalOrderStatus.Completed)
            {
                throw new ValidationApiException(HttpStatusCode.BadRequest, "Can not cancel order");
            }

            return(new CancelLimitOrderResponse
            {
                OrderId = request.OrderId
            });
        }
        public override async Task <CancelLimitOrderResponse> CancelLimitOrderAsync(
            [FromBody] CancelLimitOrderRequest request)
        {
            CancelOrderResponse response;

            try
            {
                response = await Api.CancelOrderAsync(request.OrderId);
            }
            catch (OrderNotFoundException)
            {
                return(new CancelLimitOrderResponse {
                    OrderId = request.OrderId
                });
            }

            await _limitOrderRepository.UpdateStatusAsync(response.Id, OrderStatus.Canceled);

            return(new CancelLimitOrderResponse {
                OrderId = response.Id
            });
        }
예제 #9
0
 public virtual Task <CancelLimitOrderResponse> CancelLimitOrderAsync([FromBody] CancelLimitOrderRequest request)
 {
     throw new System.NotImplementedException();
 }
예제 #10
0
        //[Fact]
        public async Task CanPlaceAndCancelLimitOrder()
        {
            var client = _factory.CreateClient();

            var createOrderRequest = new LimitOrderRequest
            {
                TradeType = TradeType.Buy, Instrument = "BTCUSD", Price = 1500m, Volume = 0.01m
            };

            // Place new order
            var createResponse = await client.PostAsync(
                "/spot/createLimitOrder",
                new StringContent(
                    JsonConvert.SerializeObject(createOrderRequest),
                    Encoding.UTF8,
                    "application/json"));

            Assert.True(createResponse.StatusCode == HttpStatusCode.OK);

            var orderIdResponse = await createResponse.Content.ReadAsAsync <OrderIdResponse>();

            var cancelOrderRequest = new CancelLimitOrderRequest {
                OrderId = orderIdResponse.OrderId
            };

            // Cancel order
            var cancelResponse = await client.PostAsync(
                "/spot/cancelOrder",
                new StringContent(
                    JsonConvert.SerializeObject(cancelOrderRequest),
                    Encoding.UTF8,
                    "application/json"));

            Assert.True(cancelResponse.StatusCode == HttpStatusCode.OK);

            var cancelOrderResponse = await cancelResponse.Content.ReadAsAsync <CancelLimitOrderResponse>();

            Assert.Equal(cancelOrderResponse.OrderId, orderIdResponse.OrderId);

            // Cancel same order again, should return 200 OK
            var cancelSubsequentResponse = await client.PostAsync(
                "/spot/cancelOrder",
                new StringContent(
                    JsonConvert.SerializeObject(cancelOrderRequest),
                    Encoding.UTF8,
                    "application/json"));

            Assert.True(cancelSubsequentResponse.StatusCode == HttpStatusCode.OK);

            var cancelOrderSubsequentResponse =
                await cancelSubsequentResponse.Content.ReadAsAsync <CancelLimitOrderResponse>();

            Assert.Equal(cancelOrderSubsequentResponse.OrderId, orderIdResponse.OrderId);

            // Get previously created and cancelled order status
            var statusResponse = await client.GetAsync($"/spot/limitOrderStatus?orderId={orderIdResponse.OrderId}");

            Assert.True(statusResponse.StatusCode == HttpStatusCode.OK);

            var statusOrderResponse = await statusResponse.Content.ReadAsAsync <OrderModel>();

            Assert.Equal(statusOrderResponse.Id, orderIdResponse.OrderId);
            Assert.Equal(OrderStatus.Canceled, statusOrderResponse.ExecutionStatus);
        }