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_receive_limit_order_notification() { // arrange var connected = Sut.Connect(); var @params = OrderPOSTRequestParams.CreateSimpleLimit("XBTUSD", 3, _xbtAvgPrice - 500, OrderSide.Buy); // act IList <OrderDto> dtos = null; var dataReceived = new ManualResetEvent(false); Sut.Subscribe(BitmexApiSubscriptionInfo <IEnumerable <OrderDto> > .Create(SubscriptionType.order, a => { dtos = a.ToList(); dataReceived.Set(); })); var result = _bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, @params).Result; result.Should().NotBeNull(); result.OrdType.Should().Be("Limit"); result.OrdStatus.Should().Be("New"); result.OrderId.Should().NotBeNull(); Thread.Sleep(2000); 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].OrdType.Should().Be("Limit"); dtos[0].OrdStatus.Should().Be("New"); dtos[0].OrderId.Should().Be(result.OrderId); }
private void StartLoad() { try { IsConnected = _bitmexApiSocketService.Connect(); } catch (Exception e) { MessageBox.Show(e.Message); } if (IsConnected) { _bitmexApiSocketService.Subscribe(BitmexApiSubscriptionInfo <IEnumerable <InstrumentDto> > .Create(SubscriptionType.instrument, dtos => { foreach (var instrumentDto in dtos) { lock (_syncObj) { var existing = Instruments.FirstOrDefault(a => a.Symbol == instrumentDto.Symbol); if (existing != null) { Mapper.Map <InstrumentDto, InstrumentModel>(instrumentDto, existing); } else { Instruments.Add(Mapper.Map <InstrumentDto, InstrumentModel>(instrumentDto)); } } } })); _bitmexApiSocketService.Subscribe(BitmexApiSubscriptionInfo <IEnumerable <OrderDto> > .Create(SubscriptionType.order, dtos => { foreach (var order in dtos) { lock (_syncObjOrders) { var existing = OrderUpdates.FirstOrDefault(a => a.OrderId == order.OrderId); if (existing != null) { Mapper.Map <OrderDto, OrderUpdateModel>(order, existing); } else { OrderUpdates.Add(Mapper.Map <OrderDto, OrderUpdateModel>(order)); } } OnPropertyChanged(nameof(OrderUpdates)); } })); } }
public void should_receive_limit_order_notification() { try { // arrange var connected = Sut.Connect(); var @params = OrderPOSTRequestParams.CreateSimpleHidenLimit("XBTUSD", 3, _xbtAvgPrice - 500, OrderSide.Buy); // act IList <OrderDto> dtos = null; var dataReceived = new ManualResetEvent(false); var subscription = BitmexApiSubscriptionInfo <IEnumerable <OrderDto> > .Create(SubscriptionType.order, a => { if (a.Data.Any(b => b.Symbol == "XBTUSD") && a.Action == BitmexActions.Insert) { dtos = a.Data.ToList(); dataReceived.Set(); } }); Subscription = subscription; Sut.Subscribe(subscription); var result = _bitmexApiService.Execute(BitmexApiUrls.Order.PostOrder, @params).Result; result.Should().NotBeNull(); //result.OrdType.Should().Be("Limit"); result.OrdStatus.Should().Be("New"); result.OrderId.Should().NotBeNull(); Thread.Sleep(2000); 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].OrdType.Should().Be("Limit"); dtos[0].OrdStatus.Should().Be("New"); dtos[0].OrderId.Should().Be(result.OrderId); } catch (BitmexWebSocketLimitReachedException) { Assert.Inconclusive("connection limit reached"); } }
public void should_subscribe_on_orders_book_L2() { // arrange var connected = Sut.Connect(); // act IEnumerable <OrderBookDto> dtos = null; var dataReceived = new ManualResetEvent(false); Sut.Subscribe(BitmexApiSubscriptionInfo <IEnumerable <OrderBookDto> > .Create(SubscriptionType.orderBookL2, a => { dtos = a; dataReceived.Set(); })); 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); }
public void should_subscribe_on_all_instruments_with_args() { // arrange var connected = Sut.Connect(); // act IEnumerable <InstrumentDto> dtos = null; var dataReceived = new ManualResetEvent(false); Sut.Subscribe(BitmexApiSubscriptionInfo <IEnumerable <InstrumentDto> > .Create(SubscriptionType.instrument, a => { dtos = a; dataReceived.Set(); }).WithArgs("XBTJPY")); 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); dtos.All(a => a.Symbol == "XBTJPY").Should().BeTrue(); }
public static BitmexApiSubscriptionInfo <IEnumerable <TradeBucketedDto> > CreateTradeBucket1DSubsription(Action <BitmexSocketDataMessage <IEnumerable <TradeBucketedDto> > > act) { return(BitmexApiSubscriptionInfo <IEnumerable <TradeBucketedDto> > .Create(SubscriptionType.tradeBin1d, act)); }
public static BitmexApiSubscriptionInfo <IEnumerable <PositionDto> > CreatePositionSubsription(Action <BitmexSocketDataMessage <IEnumerable <PositionDto> > > act) { return(BitmexApiSubscriptionInfo <IEnumerable <PositionDto> > .Create(SubscriptionType.position, act)); }
public static BitmexApiSubscriptionInfo <IEnumerable <OrderDto> > CreateOrderSubsription(Action <BitmexSocketDataMessage <IEnumerable <OrderDto> > > act) { return(BitmexApiSubscriptionInfo <IEnumerable <OrderDto> > .Create(SubscriptionType.order, act)); }
public static BitmexApiSubscriptionInfo <IEnumerable <InstrumentDto> > CreateInstrumentSubsription(Action <BitmexSocketDataMessage <IEnumerable <InstrumentDto> > > act) { return(BitmexApiSubscriptionInfo <IEnumerable <InstrumentDto> > .Create(SubscriptionType.instrument, act)); }
public static BitmexApiSubscriptionInfo <IEnumerable <TradeBucketedDto> > CreateTradeBucket5MSubsription(Action <BitmexSocketDataMessage <IEnumerable <TradeBucketedDto> > > act, string pair) { return(BitmexApiSubscriptionInfo <IEnumerable <TradeBucketedDto> > .Create(SubscriptionType.tradeBin5m, act, pair)); }
/// <summary> /// Subscript for top 25 of Order book level 2 /// </summary> /// <param name="pair">null means call data of all pairs</param> public static BitmexApiSubscriptionInfo <IEnumerable <OrderBookDto> > CreateOrderBookL2_25Subsription(Action <BitmexSocketDataMessage <IEnumerable <OrderBookDto> > > act, string pair) { return(BitmexApiSubscriptionInfo <IEnumerable <OrderBookDto> > .Create(SubscriptionType.orderBookL2_25, act, ":" + pair)); }
/// <summary> /// Trollbox chat /// </summary> /// <param name="act">Your Action when socket get data</param> /// <returns>Chat Subscription info</returns> public static BitmexApiSubscriptionInfo <IEnumerable <ChatDto> > CreateChatSubscription(Action <BitmexSocketDataMessage <IEnumerable <ChatDto> > > act, string pair) { return(BitmexApiSubscriptionInfo <IEnumerable <ChatDto> > .Create(SubscriptionType.chat, act, pair)); }
/// <summary> /// Bitcoin address balance data, including total deposits & withdrawals /// </summary> /// <param name="act">Your Action when socket get data</param> /// <returns>Funding Subscription info</returns> public static BitmexApiSubscriptionInfo <IEnumerable <FundingDto> > CreateFundingSubscription(Action <BitmexSocketDataMessage <IEnumerable <FundingDto> > > act, string pair) { return(BitmexApiSubscriptionInfo <IEnumerable <FundingDto> > .Create(SubscriptionType.funding, act, pair)); }
/// <summary> /// Bitcoin address balance data, including total deposits & withdrawals /// </summary> /// <param name="act">Your Action when socket get data</param> /// <returns>Wallet Subscription info</returns> public static BitmexApiSubscriptionInfo <IEnumerable <WalletDto> > CreateWalletSubscription(Action <BitmexSocketDataMessage <IEnumerable <WalletDto> > > act) { return(BitmexApiSubscriptionInfo <IEnumerable <WalletDto> > .Create(SubscriptionType.wallet, act)); }
/// <summary> /// Updates on your current account balance and margin requirements /// </summary> /// <param name="act">Your Action when socket get data</param> /// <returns>Margin Subscription info</returns> public static BitmexApiSubscriptionInfo <IEnumerable <MarginDto> > CreateMarginSubscription(Action <BitmexSocketDataMessage <IEnumerable <MarginDto> > > act, string pair) { return(BitmexApiSubscriptionInfo <IEnumerable <MarginDto> > .Create(SubscriptionType.margin, act, pair)); }
public static BitmexApiSubscriptionInfo <IEnumerable <OrderBook10Dto> > CreateOrderBook10Subsription(Action <BitmexSocketDataMessage <IEnumerable <OrderBook10Dto> > > act) { return(BitmexApiSubscriptionInfo <IEnumerable <OrderBook10Dto> > .Create(SubscriptionType.orderBook10, act).WithArgs("XBTUSD")); }