示例#1
0
        public async Task <ResponseModel <LimitOrderResponseModel> > PlaceLimitOrderAsync(string clientId, AssetPair assetPair, OrderAction orderAction, decimal volume,
                                                                                          decimal price, bool cancelPreviousOrders = false)
        {
            var requestId = GetNextRequestId();
            var fees      = _calculateOrderFees
                ? await _feeCalculator.GetLimitOrderFees(clientId, assetPair, orderAction)
                : Array.Empty <LimitOrderFeeModel>();

            var order = new LimitOrderModel
            {
                Id                   = requestId.ToString(),
                AssetPairId          = assetPair.Id,
                ClientId             = clientId,
                Price                = (double)price,
                CancelPreviousOrders = cancelPreviousOrders,
                Volume               = (double)Math.Abs(volume),
                OrderAction          = orderAction.ToMeOrderAction(),
                Fees                 = fees
            };

            var response = await _matchingEngineClient.PlaceLimitOrderAsync(order);

            CheckResponseAndThrowIfNull(response);

            var result = new LimitOrderResponseModel
            {
                Id = requestId
            };

            return(ConvertToApiModel(response.Status, result));
        }
        public async Task <IActionResult> CreateAsync([FromBody] LimitOrderCreateModel model)
        {
            var result = await _matchingEngineClient.Trading.CreateLimitOrderAsync(
                new MatchingEngine.Client.Models.Trading.LimitOrderRequestModel
            {
                Id          = Guid.NewGuid(),
                AssetPairId = model.AssetPairId,
                Price       = model.Price,
                Volume      = model.Type == LimitOrderType.Sell
                        ? -model.Volume
                        : model.Volume,
                WalletId = model.WalletId,
                CancelAllPreviousLimitOrders = model.CancelPrevious,
                Timestamp = DateTime.UtcNow
            });

            var response = new LimitOrderResponseModel {
                Id = result.Id, Status = result.Status, Reason = result.Reason
            };

            return(Ok(response));
        }