コード例 #1
0
        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);
        }
コード例 #2
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();
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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();
        }
コード例 #5
0
        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();
        }
コード例 #6
0
        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();
        }
コード例 #7
0
        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");
            }
        }
コード例 #8
0
        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();
        }
コード例 #9
0
        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");
            }
        }
コード例 #10
0
        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");
            }
        }
コード例 #11
0
        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();
        }
コード例 #12
0
 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);
 }
コード例 #13
0
 private async void Buy()
 {
     var posOrderParams = OrderPOSTRequestParams.CreateSimpleMarket("XBTUSD", Size, OrderSide.Buy);
     await _bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, posOrderParams).ContinueWith(ProcessPostOrderResult);
 }
コード例 #14
0
        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));
        }
コード例 #15
0
ファイル: BitmexManager.cs プロジェクト: elscript/TradingBot
        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));
        }