Exemplo n.º 1
0
        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);
        }