public IResponse <MarketOrderResponseModel> PostOrdersMarket(PlaceMarketOrderModel request, string apiKey) { return(Request.Post($"/Orders/v2/market") .AddJsonBody(request) .WithHeaders("api-key", apiKey) .Build().Execute <MarketOrderResponseModel>()); }
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); }
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)); }
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); }
// 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)); }
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"); }); }
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(); } }