public void should_receive_position_change_notification() { // arrange var connected = Sut.Connect(); var @params = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Buy); // act IList <PositionDto> dtos = null; var dataReceived = new ManualResetEvent(false); Sut.Subscribe(BitmexApiSubscriptionInfo <IEnumerable <PositionDto> > .Create(SubscriptionType.position, a => { dtos = a.ToList(); dataReceived.Set(); })); var result = _bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, @params).Result; result.Should().NotBeNull(); result.OrdType.Should().Be("Market"); result.OrdStatus.Should().Be("Filled"); result.OrderId.Should().NotBeNull(); var received = dataReceived.WaitOne(TimeSpan.FromSeconds(20)); // assert // no exception raised connected.Should().BeTrue(); received.Should().BeTrue("data hasn't received"); dtos.Should().NotBeNull(); dtos.Count().Should().BeGreaterThan(0); }
public void should_close_short_martket_position_by_limit() { // arrange DeleteAllOrders(); var @params = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Sell); var result = Sut.Execute(BitmexApiUrls.Order.PostOrder, @params).Result; result.Should().NotBeNull(); result.OrdStatus.Should().Be("Filled"); result.OrderId.Should().NotBeNull(); // act var @paramsClosePosition = new OrderClosePositionPOSTRequestParams { Symbol = "XBTUSD", Price = _xbtAvgPrice - 500 }; var resultClosePostion = Sut.Execute(BitmexApiUrls.Order.PostOrderClosePosition, @paramsClosePosition).Result; Thread.Sleep(1000); // assert resultClosePostion.Should().NotBeNull(); resultClosePostion.OrderId.Should().NotBeNull(); }
public void should_throw_bitmex_exception_with_deserialized_data_when_post() { // arrange var @params = OrderPOSTRequestParams.CreateSimpleMarket("SymbolWhichDoesNotExist", 3, OrderSide.Buy); // act Action action = () => { var result = Sut.Execute(BitmexApiUrls.Order.PostOrder, @params).Result.Result; }; // assert action.Should().Throw <BitmexApiException>().Which.Error?.Error.Should().NotBeNull(); }
public void should_place_sell_market_order() { // arrange var @params = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Sell); // act var result = Sut.Execute(BitmexApiUrls.Order.PostOrder, @params).Result.Result; // assert result.Should().NotBeNull(); result.OrdStatus.Should().Be("Filled"); result.OrderId.Should().NotBeNull(); }
public void should_close_long_market_position_by_limit() { // arrange var @params = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Buy); var result = Sut.Execute(BitmexApiUrls.Order.PostOrder, @params).Result.Result; result.Should().NotBeNull(); result.OrdStatus.Should().Be("Filled"); result.OrderId.Should().NotBeNull(); // act var resultClosePostion = Sut.Execute(BitmexApiUrls.Order.PostOrder, OrderPOSTRequestParams.ClosePositionByLimit("XBTUSD", _xbtAvgPrice + LimitPriceSubtractor)).Result.Result; // assert resultClosePostion.Should().NotBeNull(); resultClosePostion.OrderId.Should().NotBeNull(); }
public void should_close_short_martket_position_by_market() { // arrange var @params = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Sell); var result = Sut.Execute(BitmexApiUrls.Order.PostOrder, @params).Result.Result; result.Should().NotBeNull(); result.OrdStatus.Should().Be("Filled"); result.OrderId.Should().NotBeNull(); // act var resultClosePostion = Sut.Execute(BitmexApiUrls.Order.PostOrder, OrderPOSTRequestParams.ClosePositionByMarket("XBTUSD")).Result.Result; // assert resultClosePostion.Should().NotBeNull(); resultClosePostion.OrderId.Should().NotBeNull(); }
public void should_receive_market_buy_order_notification() { try { // arrange var connected = Sut.Connect(); var @params = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Buy); // act IList <OrderDto> dtos = null; var dataReceived = new ManualResetEvent(false); Sut.OrderResponseReceived += (sender, args) => { if (args.Response.Data.Any(b => b.Symbol == "XBTUSD") && args.Response.Action == BitmexActions.Insert) { dtos = args.Response.Data.ToList(); dataReceived.Set(); } }; var subscription = new SubscriptionRequest(SubscriptionType.order); Subscription = subscription; Sut.Subscribe(subscription); var result = _bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, @params).Result.Result; result.Should().NotBeNull(); result.OrdType.Should().Be("Market"); result.OrdStatus.Should().Be("Filled"); result.OrderId.Should().NotBeNull(); var received = dataReceived.WaitOne(TimeSpan.FromSeconds(20)); // assert // no exception raised connected.Should().BeTrue(); received.Should().BeTrue(); dtos.Should().NotBeNull(); dtos.Count().Should().BeGreaterThan(0); dtos[0].OrderId.Should().Be(result.OrderId); } catch (BitmexWebSocketLimitReachedException) { Assert.Fail("connection limit reached"); } }
public void should_place_sell_market_orders_bulk() { // arrange var @params = new OrderBulkPOSTRequestParams { Orders = new[] { OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Sell), OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Sell) } }; // act var result = Sut.Execute(BitmexApiUrls.Order.PostOrderBulk, @params).Result; // assert result.Should().NotBeNull(); result.All(a => a.OrdStatus == "Filled").Should().BeTrue(); result.All(a => !string.IsNullOrWhiteSpace(a.OrderId)).Should().BeTrue(); }
public void should_receive_position_change_notification() { try { // arrange var connected = Sut.Connect(); var @params = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Buy); IList <PositionDto> dtos = null; var dataReceived = new ManualResetEvent(false); var subscription = BitmetSocketSubscriptions.CreatePositionSubsription(a => { dtos = a.Data.ToList(); dataReceived.Set(); }); Subscription = subscription; // act Sut.Subscribe(subscription); var result = _bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, @params).Result.Result; result.Should().NotBeNull(); result.OrdType.Should().Be("Market"); result.OrdStatus.Should().Be("Filled"); result.OrderId.Should().NotBeNull(); var received = dataReceived.WaitOne(TimeSpan.FromSeconds(20)); // assert // no exception raised connected.Should().BeTrue(); received.Should().BeTrue("data hasn't received"); dtos.Should().NotBeNull(); dtos.Count().Should().BeGreaterThan(0); } catch (BitmexWebSocketLimitReachedException) { Assert.Inconclusive("connection limit reached"); } }
public void should_subscribe_on_executions() { try { // arrange var connected = Sut.Connect(); IEnumerable <ExecutionDto> dtos = null; var dataReceived = new ManualResetEvent(false); Sut.ExecutionResponseReceived += (sender, args) => { if (args.Response.Data.Any()) { dtos = args.Response.Data; dataReceived.Set(); } }; var subscription = new SubscriptionRequest(SubscriptionType.execution); Subscription = subscription; // act Sut.Subscribe(subscription); _bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 10, OrderSide.Buy)).Wait(); var received = dataReceived.WaitOne(TimeSpan.FromSeconds(30)); // assert // no exception raised connected.Should().BeTrue(); received.Should().BeTrue(); dtos.Should().NotBeNull(); dtos.Count().Should().BeGreaterThan(0); } catch (BitmexWebSocketLimitReachedException) { Assert.Fail("connection limit reached"); } }
public void should_close_long_market_position_by_market() { // arrange var @params = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", 3, OrderSide.Buy); var result = Sut.Execute(BitmexApiUrls.Order.PostOrder, @params).Result; result.Should().NotBeNull(); result.OrdStatus.Should().Be("Filled"); result.OrderId.Should().NotBeNull(); // act var @paramsClosePosition = new OrderClosePositionPOSTRequestParams { Symbol = "XBTUSD" }; var resultClosePostion = Sut.Execute(BitmexApiUrls.Order.PostOrderClosePosition, @paramsClosePosition).Result; // assert resultClosePostion.Should().NotBeNull(); resultClosePostion.OrderId.Should().NotBeNull(); }
private async void Buy() { var posOrderParams = OrderPOSTRequestParams.CreateSimpleMarket(_pair, Size, OrderSide.Buy); var bitmexApiService = BitmexApiService.CreateDefaultApi(_bitmexAuthorization); await bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, posOrderParams).ContinueWith(ProcessPostOrderResult); }
private async void Buy() { var posOrderParams = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", Size, OrderSide.Buy); await _bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, posOrderParams).ContinueWith(ProcessPostOrderResult); }
private async Task <OrderDto> ExecuteMarketOrder(TradeInfo tradeInfo) { var orderParams = OrderPOSTRequestParams.CreateSimpleMarket(tradeInfo.Symbol, tradeInfo.Quantity / 4, tradeInfo.EntryOrder.ToBitmexOrder()); return(await _bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, orderParams)); }
private async Task <BitmexApiResult <OrderDto> > SellByMarketInternal(string symbol, int amount) { var posOrderParams = OrderPOSTRequestParams.CreateSimpleMarket(symbol, amount, OrderSide.Sell); return(await _client.Execute(BitmexApiUrls.Order.PostOrder, posOrderParams)); }