示例#1
0
        public void RecievesTradeMarginMessagesForMoreThanTwoAllOpenPositions()
        {
            var gate = new ManualResetEvent(false);
            var rpcClient = BuildRpcClient();
            var accounts = rpcClient.AccountInformation.GetClientAndTradingAccount();
            var openPositions = rpcClient.TradesAndOrders.ListOpenPositions(accounts.TradingAccounts[0].TradingAccountId);

            Assert.That(openPositions.OpenPositions.Length, Is.GreaterThanOrEqualTo(3), "This test must be run using an account that has 3 or more open positions");
            
            Console.WriteLine(string.Format(
                        "There are {0} open positions on markets: {1}",
                        openPositions.OpenPositions.Length,
                        openPositions.OpenPositions.Select(p => p.MarketId).ToList().ToStringWithValues()));

            var streamingClient = rpcClient.CreateStreamingClient();
            var tradeMarginListener = streamingClient.BuildTradeMarginListener();

            var marketsThatTradeMarginHasBeenRecievedFor = new ArrayList();

            tradeMarginListener.MessageReceived += (s, e) =>
            {
                Console.WriteLine(
                        string.Format(
                            "TradeMarginDTO recieved for market {0}",
                            e.Data.MarketId));

                if (marketsThatTradeMarginHasBeenRecievedFor.Contains(e.Data.MarketId)) return;

                marketsThatTradeMarginHasBeenRecievedFor.Add(e.Data.MarketId);
                if (openPositions.OpenPositions.Length == marketsThatTradeMarginHasBeenRecievedFor.Count)
                {
                    gate.Set();
                }
            };

            try
            {
                if (!gate.WaitOne(TimeSpan.FromMinutes(1)))
                {
                    Assert.Fail("TradeMarginDTO message not recieved for all open positions. OpenPositions on markets: {0} but only recieved TradeMarginDTOs for markets {1}",
                        openPositions.OpenPositions.Select(p => p.MarketId).ToStringWithValues(),
                        marketsThatTradeMarginHasBeenRecievedFor.ToStringWithValues());
                }
            } 
            finally
            {
                Console.WriteLine(string.Format(
                        "OpenPositions on markets: {0}, Recieved TradeMarginDTOs for markets {1}",
                        openPositions.OpenPositions.Select(p => p.MarketId).ToStringWithValues(),
                        marketsThatTradeMarginHasBeenRecievedFor.ToStringWithValues()));
                streamingClient.TearDownListener(tradeMarginListener);
                streamingClient.Dispose();
            }
        }