예제 #1
0
        public void Prefix_WithExtendedClientId_ShouldFilterAsExpected(int?prefix, int expectedCount)
        {
            var           source = GetSourceMock();
            ICryptoOrders orders = new CryptoOrders(source, prefix);

            var updatedAll  = new List <CryptoOrder>();
            var updatedOurs = new List <CryptoOrder>();

            orders.OrderChangedStream.Subscribe(x => updatedAll.Add(x));
            orders.OurOrderChangedStream.Subscribe(x => updatedOurs.Add(x));

            for (int i = 0; i < 10; i++)
            {
                var clientId = orders.GenerateClientId().ToString() + "::test_" + i;
                var side     = i % 2 == 0 ? CryptoOrderSide.Bid : CryptoOrderSide.Ask;

                source.StreamOrder(GetOrderMock(clientId, "btcusd", side));
                source.StreamOrder(GetOrderMock(null, "btcusd", side));
            }

            var currentAll    = orders.GetAllOrders();
            var currentOurs   = orders.GetOrders();
            var currentActive = orders.GetActiveOrders();

            Assert.Equal(expectedCount, updatedOurs.Count);
            Assert.Equal(expectedCount, currentOurs.Count);

            Assert.Equal(20, updatedAll.Count);
            Assert.Equal(20, currentAll.Count);
            Assert.Empty(currentActive);

            Assert.Equal(prefix * orders.ClientIdPrefixExponent, orders.ClientIdPrefix);
            Assert.Equal(prefix?.ToString() ?? string.Empty, orders.ClientIdPrefixString);
        }
예제 #2
0
        public void TargetPair_ShouldFilterAsExpected(string pair, int expectedCount)
        {
            var           source = GetSourceMock();
            ICryptoOrders orders = new CryptoOrders(source, null, pair);

            var updatedAll  = new List <CryptoOrder>();
            var updatedOurs = new List <CryptoOrder>();

            orders.OrderChangedStream.Subscribe(x => updatedAll.Add(x));
            orders.OurOrderChangedStream.Subscribe(x => updatedOurs.Add(x));
            var currentActive = orders.GetActiveOrders();

            for (int i = 0; i < 10; i++)
            {
                var clientId1 = orders.GenerateClientId().ToString();
                var clientId2 = orders.GenerateClientId().ToString();
                var side      = i % 2 == 0 ? CryptoOrderSide.Bid : CryptoOrderSide.Ask;

                source.StreamOrder(GetOrderMock(clientId1, "btcusd", side));
                source.StreamOrder(GetOrderMock(clientId2, "neobtc", side));
            }

            var currentAll  = orders.GetAllOrders();
            var currentOurs = orders.GetOrders();

            Assert.Equal(expectedCount, updatedOurs.Count);
            Assert.Equal(expectedCount, currentOurs.Count);

            Assert.Equal(expectedCount, updatedAll.Count);
            Assert.Equal(expectedCount, currentAll.Count);
            Assert.Empty(currentActive);

            Assert.Equal(orders.TargetPairOriginal, pair);
            Assert.Equal(orders.TargetPair, CryptoPairsHelper.Clean(pair));
        }
예제 #3
0
        public void GenerateClientId_ShouldBeCorrectlyBasedOnSelectedPrefix(int?orderPrefix)
        {
            ICryptoOrders orders = new CryptoOrders(GetSourceMock(), orderPrefix);

            for (int i = 0; i < 10; i++)
            {
                var  clientId = orders.GenerateClientId();
                long expected = !orderPrefix.HasValue
                    ? i + 1
                    : (orderPrefix.Value * orders.ClientIdPrefixExponent) + i + 1;
                Assert.Equal(expected, clientId);
            }
        }
        private static async Task <ICryptoOrders> StartBitmex(bool isTestnet, Action <CryptoOrder> handler,
                                                              Action <CryptoWallet[]> walletHandler, Action <CryptoPosition[]> positionHandler)
        {
            var url          = isTestnet ? BitmexValues.ApiWebsocketTestnetUrl : BitmexValues.ApiWebsocketUrl;
            var communicator = new BitmexWebsocketCommunicator(url)
            {
                Name = "Bitmex"
            };
            var client = new BitmexWebsocketClient(communicator);

            var source = new BitmexOrderSource(client);
            var orders = new CryptoOrders(source);

            orders.OrderChangedStream.Subscribe(handler);

            var walletSource = new BitmexWalletSource(client);

            walletSource.WalletChangedStream.Subscribe(walletHandler);

            var positionSource = new BitmexPositionSource(client);

            positionSource.PositionsStream.Subscribe(positionHandler);

            client.Streams.AuthenticationStream.Subscribe(x =>
            {
                Log.Information($"[Bitmex] Authenticated '{x.Success}'");
                client.Send(new Bitmex.Client.Websocket.Requests.WalletSubscribeRequest());
                client.Send(new Bitmex.Client.Websocket.Requests.MarginSubscribeRequest());
                client.Send(new Bitmex.Client.Websocket.Requests.PositionSubscribeRequest());
                client.Send(new Bitmex.Client.Websocket.Requests.OrderSubscribeRequest());
            });

            communicator.ReconnectionHappened.Subscribe(x =>
            {
                client.Authenticate(API_KEY, API_SECRET);
            });

            await communicator.Start();


            return(orders);
        }