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)); }