public async Task <ResponseModel <LimitOrderResponseModel> > PlaceStopLimitOrderAsync( string clientId, AssetPair assetPair, OrderAction orderAction, decimal volume, decimal?lowerPrice, decimal?lowerLimitPrice, decimal?upperPrice, decimal?upperLimitPrice, bool cancelPreviousOrders = false) { var requestId = GetNextRequestId(); var fees = _calculateOrderFees ? await _feeCalculator.GetLimitOrderFees(clientId, assetPair, orderAction) : Array.Empty <LimitOrderFeeModel>(); var order = new StopLimitOrderModel { Id = requestId.ToString(), AssetPairId = assetPair.Id, ClientId = clientId, LowerPrice = (double?)lowerPrice, LowerLimitPrice = (double?)lowerLimitPrice, UpperPrice = (double?)upperPrice, UpperLimitPrice = (double?)upperLimitPrice, CancelPreviousOrders = cancelPreviousOrders, Volume = (double)Math.Abs(volume), OrderAction = orderAction.ToMeOrderAction(), Fees = fees }; var response = await _matchingEngineClient.PlaceStopLimitOrderAsync(order); CheckResponseAndThrowIfNull(response); var result = new LimitOrderResponseModel { Id = requestId }; return(ConvertToApiModel(response.Status, result)); }
public async Task <ResponseModel <MarketOrderResponseModel> > PlaceMarketOrderAsync(string clientId, AssetPair assetPair, OrderAction orderAction, decimal volume, bool straight, double?reservedLimitVolume = null) { var fees = _calculateOrderFees ? await _feeCalculator.GetMarketOrderFees(clientId, assetPair, orderAction) : Array.Empty <MarketOrderFeeModel>(); var order = new MarketOrderModel { Id = GetNextRequestId().ToString(), AssetPairId = assetPair.Id, ClientId = clientId, ReservedLimitVolume = reservedLimitVolume, Straight = straight, Volume = (double)Math.Abs(volume), OrderAction = orderAction.ToMeOrderAction(), Fees = fees }; var response = await _matchingEngineClient.HandleMarketOrderAsync(order); CheckResponseAndThrowIfNull(response); var result = new MarketOrderResponseModel { Price = response.Price }; return(ConvertToApiModel(response.Status, result)); }