public async Task <ExternalLimitOrder> CreateLimitOrderAsync(string exchangeName, string assetPair, decimal price, decimal volume, OrderType orderType) { IExchange exchange = GetExchange(exchangeName); AssetPairModel assetPairModel = _marketInstrumentService.GetAssetPair(assetPair, exchange.Name); if (assetPairModel == null) { throw new FailedOperationException("Asset pair settings does not exist"); } price = price.TruncateDecimalPlaces(assetPairModel.PriceAccuracy, orderType == OrderType.Sell); volume = Math.Round(volume, assetPairModel.VolumeAccuracy); if (volume < assetPairModel.MinVolume) { throw new FailedOperationException("The volume is too small"); } string orderId = await exchange.CreateLimitOrderAsync(assetPair, price, volume, orderType); var externalLimitOrder = new ExternalLimitOrder(orderId, exchange.Name, assetPair, price, volume, orderType); return(externalLimitOrder); }