Exemplo n.º 1
0
 public IResponse <MarketOrderResponseModel> PostOrdersMarket(PlaceMarketOrderModel request, string apiKey)
 {
     return(Request.Post($"/Orders/v2/market")
            .AddJsonBody(request)
            .WithHeaders("api-key", apiKey)
            .Build().Execute <MarketOrderResponseModel>());
 }
Exemplo n.º 2
0
            public void GetHistoryTradeByIdTest()
            {
                var skip = "0";
                var take = "500";

                var responseBefore = hft.History.GetHistory(FirstAssetId, skip, take, ApiKey);

                responseBefore.Validate.StatusCode(HttpStatusCode.OK);

                var request = new PlaceMarketOrderModel()
                {
                    Asset = SecondAssetId, AssetPairId = AssetPair, OrderAction = OrderAction.Sell, Volume = 0.2
                };

                var response = hft.Orders.PostOrdersMarket(request, ApiKey);

                response.Validate.StatusCode(HttpStatusCode.OK);

                var amount = 0.01;
                //buy
                var requestBuy = new PlaceMarketOrderModel()
                {
                    Asset = FirstAssetId, AssetPairId = AssetPair, OrderAction = OrderAction.Buy, Volume = amount
                };

                var responseBuy = hft.Orders.PostOrdersMarket(requestBuy, ApiKey);

                responseBuy.Validate.StatusCode(HttpStatusCode.OK);
                var summ = responseBuy.GetResponseObject().Price;

                var responseAfter = hft.History.GetHistory(FirstAssetId, skip, take, ApiKey);

                responseAfter.Validate.StatusCode(HttpStatusCode.OK);

                Stopwatch sw = new Stopwatch();

                sw.Start();
                while (sw.Elapsed < TimeSpan.FromMinutes(5))
                {
                    var currentHistory = hft.History.GetHistory(FirstAssetId, skip, take, ApiKey);
                    if (currentHistory.StatusCode == HttpStatusCode.OK)
                    {
                        if (responseBefore.GetResponseObject().First().Id != hft.History.GetHistory(FirstAssetId, skip, take, ApiKey).GetResponseObject().First().Id)
                        {
                            break;
                        }
                    }
                    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(3));
                }
                sw.Stop();

                var last = hft.History.GetHistory(FirstAssetId, skip, take, ApiKey);

                Assert.That(responseBefore.GetResponseObject().First().Id, Does.Not.EqualTo(last.GetResponseObject().First().Id), "Orders are not present in response(they havnt been finished in 5 minutes?)");

                Assert.That(() => hft.History.GetHistory(FirstAssetId, skip, take, ApiKey).GetResponseObject().Find(t => t.Amount == amount).Price, Is.EqualTo(summ).After(5 * 60 * 1000, 2 * 1000));
            }
            public void PostOrdersMarketWrongVolumeTest(double volume)
            {
                var request = new PlaceMarketOrderModel()
                {
                    Asset = SecondAssetId, AssetPairId = AssetPair, OrderAction = OrderAction.Sell, Volume = volume
                };

                var response = hft.Orders.PostOrdersMarket(request, ApiKey);

                response.Validate.StatusCode(HttpStatusCode.BadRequest);
            }
            public void PostOrdersMarketWrongAssetPairTest(string assetPair)
            {
                var request = new PlaceMarketOrderModel()
                {
                    Asset = SecondAssetId, AssetPairId = assetPair, OrderAction = OrderAction.Sell, Volume = 0.5
                };

                var response = hft.Orders.PostOrdersMarket(request, ApiKey);

                Assert.That(response.StatusCode, Is.AnyOf(HttpStatusCode.NotFound, HttpStatusCode.BadRequest));
            }
            public void PostOrdersMarketWrongAssetTest(string asset)
            {
                var request = new PlaceMarketOrderModel()
                {
                    Asset = asset, AssetPairId = AssetPair, OrderAction = OrderAction.Sell, Volume = 0.5
                };

                var response = hft.Orders.PostOrdersMarket(request, ApiKey);

                response.Validate.StatusCode(HttpStatusCode.BadRequest);
            }
Exemplo n.º 6
0
            public void MOSellInvertedTest()
            {
                (var newMinSellPrice, var newMaxBuyPrice) = newMinMaxPrices();
                (var marketSell, var marketBuy)           = currentMinMaxPrices();

                //
                var candlesAsk1 = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Ask, CandleTimeInterval.Sec, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                var candlesBid1 = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Bid, CandleTimeInterval.Sec, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();
                //

                var requestSell1user = new PlaceLimitOrderModel()
                {
                    Price = newMinSellPrice, AssetPairId = AssetPairId, OrderAction = OrderAction.Sell, Volume = 0.1
                };

                var responseSell1user = hft.Orders.PostOrdersLimitOrder(requestSell1user, ApiKey);

                responseSell1user.Validate.StatusCode(HttpStatusCode.OK);

                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(7));

                var requestSell = new PlaceMarketOrderModel()
                {
                    AssetPairId = AssetPairId, OrderAction = OrderAction.Sell, Volume = tradingVolume / 2, Asset = SecondAssetId
                };

                var responseSell = hft.Orders.PostOrdersMarket(requestSell, SecondWalletApiKey);

                responseSell.Validate.StatusCode(HttpStatusCode.OK);

                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(7));

                var candlesTrades = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Trades, CandleTimeInterval.Sec, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                var candlesAsk = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Ask, CandleTimeInterval.Sec, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                var candlesBid = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Bid, CandleTimeInterval.Sec, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                var prices = new List <decimal>();

                candlesTrades.History.ForEach(p => {
                    prices.Add(Decimal(p.Close));
                    prices.Add(Decimal(p.Open));
                    prices.Add(Decimal(p.High));
                    prices.Add(Decimal(p.Low));
                });

                Assert.Multiple(() =>
                {
                    Assert.That(prices, Does.Contain(Decimal(newMinSellPrice)), "Close price does not contain new min sell price");
                    Assert.That(candlesTrades.History.Select(c => Decimal(c.TradingOppositeVolume)), Does.Contain(Decimal(tradingVolume / 2)), "does not contain trading volume");
                });
            }
        public async Task <IActionResult> PlaceMarketOrderOld(PlaceMarketOrderModel order)
        {
            var result = await PlaceMarketOrder(order);

            if (!(result is OkObjectResult okResult))
            {
                return(result);
            }

            var response = (MarketOrderResponseModel)okResult.Value;

            return(Ok(response.Price));
        }
        public async Task <IActionResult> PlaceMarketOrder(PlaceMarketOrderModel order)
        {
            var assetPair = _assetPairsReadModel.TryGetIfEnabled(order.AssetPairId);

            if (assetPair == null)
            {
                return(NotFound($"Asset-pair {order.AssetPairId} could not be found or is disabled."));
            }

            if (!_requestValidator.ValidateAssetPair(order.AssetPairId, assetPair, out var badRequestModel))
            {
                return(BadRequest(badRequestModel));
            }

            var baseAsset    = _assetsReadModel.TryGetIfEnabled(assetPair.BaseAssetId);
            var quotingAsset = _assetsReadModel.TryGetIfEnabled(assetPair.QuotingAssetId);

            if (!_requestValidator.ValidateAsset(assetPair, order.Asset, baseAsset, quotingAsset, out badRequestModel))
            {
                return(BadRequest(badRequestModel));
            }

            var straight  = order.Asset == baseAsset.Id || order.Asset == baseAsset.DisplayId;
            var asset     = straight ? baseAsset : quotingAsset;
            var volume    = order.Volume;
            var minVolume = straight ? assetPair.MinVolume : assetPair.MinInvertedVolume;

            if (!_requestValidator.ValidateVolume(volume, minVolume, asset.DisplayId, out badRequestModel))
            {
                return(BadRequest(badRequestModel));
            }

            var walletId = User.GetUserId();
            var response = await _matchingEngineAdapter.PlaceMarketOrderAsync(
                clientId : walletId,
                assetPair : assetPair,
                orderAction : order.OrderAction,
                volume : volume,
                straight : straight,
                reservedLimitVolume : null);

            if (response.Error != null)
            {
                return(BadRequest(response));
            }

            return(Ok(response.Result));
        }
Exemplo n.º 9
0
            public void MONumerousTradesCandleTest()
            {
                (var newMinSellPrice, var newMaxBuyPrice) = newMinMaxPrices();

                for (var i = 0; i < partialCount; i++)
                {
                    var requestSell = new PlaceLimitOrderModel()
                    {
                        Price = newMinSellPrice + i / Math.Pow(10, 5), AssetPairId = AssetPairId, OrderAction = OrderAction.Sell, Volume = tradingVolume
                    };
                    var responseSell = hft.Orders.PostOrdersLimitOrder(requestSell, ApiKey);
                    responseSell.Validate.StatusCode(HttpStatusCode.OK);
                }

                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(7));

                hft.OrderBooks.GetOrderBooks(AssetPairId);

                var requestBuy = new PlaceMarketOrderModel()
                {
                    AssetPairId = AssetPairId, OrderAction = OrderAction.Buy, Volume = tradingVolume * partialCount, Asset = FirstAssetId
                };

                var responseBuy = hft.Orders.PostOrdersMarket(requestBuy, SecondWalletApiKey);

                responseBuy.Validate.StatusCode(HttpStatusCode.OK);

                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(7));

                var candlesTrades = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Trades, CandleTimeInterval.Minute, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                var candlesAsk = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Ask, CandleTimeInterval.Sec, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                var candlesBid = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Bid, CandleTimeInterval.Sec, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                Assert.Multiple(() =>
                {
                    Assert.That(candlesTrades.History.Select(c => Decimal(c.High)), Does.Contain(Decimal(newMinSellPrice) + Decimal((partialCount - 1) / Math.Pow(10, 5))), "Unexpected max price");
                    Assert.That(candlesTrades.History.Select(c => Decimal(c.Low)), Does.Contain(Decimal(newMinSellPrice)), "Unexpected low price");
                    Assert.That(candlesTrades.History.Select(c => Decimal(c.TradingVolume)), Does.Contain(Decimal(tradingVolume) * Decimal(partialCount)), "does not contain trading volume");
                });
            }
            public void PostOrdersMarketBuyTest()
            {
                var request = new PlaceLimitOrderModel()
                {
                    Price = 100, AssetPairId = AssetPair, OrderAction = OrderAction.Sell, Volume = 3.2
                };

                var response = hft.Orders.PostOrdersLimitOrder(request, SecondWalletApiKey);

                response.Validate.StatusCode(HttpStatusCode.OK);

                var requestBuy = new PlaceMarketOrderModel()
                {
                    Asset = FirstAssetId, AssetPairId = AssetPair, OrderAction = OrderAction.Buy, Volume = 3.1
                };

                var responseBuy = hft.Orders.PostOrdersMarket(requestBuy, ApiKey);

                Assert.That(responseBuy.GetResponseObject().Price, Is.Not.Null);
            }
            public void PostOrdersMarketTest()
            {
                var request = new PlaceLimitOrderModel()
                {
                    Price = 10, AssetPairId = AssetPair, OrderAction = OrderAction.Sell, Volume = 3.2
                };

                var response = hft.Orders.PostOrdersLimitOrder(request, SecondWalletApiKey);

                response.Validate.StatusCode(HttpStatusCode.OK);

                var requestSell = new PlaceMarketOrderModel()
                {
                    Asset = FirstAssetId, AssetPairId = AssetPair, OrderAction = OrderAction.Buy, Volume = 2.3
                };

                var responseSell = hft.Orders.PostOrdersMarket(requestSell, ApiKey);

                responseSell.Validate.StatusCode(HttpStatusCode.OK);
            }
Exemplo n.º 12
0
        // Market order
        protected IResponse <MarketOrderResponseModel> CreateAndValidateMarketOrder(
            string assetId,
            string assetPairId,
            OrderAction orderAction,
            double volume,
            string apiKey,
            HttpStatusCode statusCode = HttpStatusCode.OK)
        {
            var request = new PlaceMarketOrderModel()
            {
                Asset       = assetId,
                AssetPairId = assetPairId,
                OrderAction = orderAction,
                Volume      = volume
            };

            return(hft.Orders.PostOrdersMarket(request, apiKey)
                   .Validate
                   .StatusCode(statusCode));
        }
Exemplo n.º 13
0
            public void LOSellPartiallyMarketOrderExecutionCandleTest()
            {
                (var newMinSellPrice, var newMaxBuyPrice) = newMinMaxPrices();
                var requestSell = new PlaceLimitOrderModel()
                {
                    Price = newMinSellPrice, AssetPairId = AssetPairId, OrderAction = OrderAction.Sell, Volume = tradingVolume * partialCount
                };

                var responseSell = hft.Orders.PostOrdersLimitOrder(requestSell, ApiKey);

                responseSell.Validate.StatusCode(HttpStatusCode.OK);

                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(7));

                var requestBuy = new PlaceMarketOrderModel()
                {
                    AssetPairId = AssetPairId, OrderAction = OrderAction.Buy, Volume = tradingVolume, Asset = FirstAssetId
                };

                for (var i = 0; i < partialCount; i++)
                {
                    var responseBuy = hft.Orders.PostOrdersMarket(requestBuy, SecondWalletApiKey);
                    responseBuy.Validate.StatusCode(HttpStatusCode.OK);
                }
                System.Threading.Thread.Sleep(TimeSpan.FromSeconds(7));

                var candlesTrades = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Trades, CandleTimeInterval.Minute, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                var candlesAsk = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Ask, CandleTimeInterval.Sec, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                var candlesBid = lykkeApi.CandleHistory.GetCandleHistory(AssetPairId, CandlePriceType.Bid, CandleTimeInterval.Sec, fromMoment, DateTime.Now.ToUniversalTime()).GetResponseObject();

                Assert.Multiple(() =>
                {
                    Assert.That(candlesTrades.History.Select(c => Decimal(c.Close)), Does.Contain(Decimal(newMinSellPrice)), "Close price does not contain new min sell price");
                    Assert.That(candlesTrades.History.Select(c => Decimal(c.TradingVolume)), Does.Contain(Decimal(tradingVolume) * Decimal(partialCount)), "does not contain trading volume");
                    Assert.That(candlesTrades.History.Select(c => Decimal(c.TradingOppositeVolume)), Does.Contain((Decimal(tradingVolume) * Decimal(newMinSellPrice) * partialCount)), "does not contain trading volume * sell price");
                });
            }
Exemplo n.º 14
0
        public async Task PlaceMarketOrder()
        {
            var client = GetClient <IOrdersApi>();
            var order  = new PlaceMarketOrderModel
            {
                Asset       = "BTC",
                AssetPairId = "BTCUSD",
                OrderAction = GetRandomItem(_actions),
                Volume      = 0.001m
            };

            var result = await client.PlaceMarketOrder(order).TryExecute();

            if (result.Success)
            {
                result.Result.Price.Should().BeGreaterThan(0d);
            }
            else
            {
                result.Error.Should().NotBeNull();
            }
        }