Example #1
0
        public void UpdateOrderBook_SecondUpdate()
        {
            // Arrange
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);

            var preferences = new Model.Preferences();

            preferences.OrderBookChartDisplayCount = 8;
            preferences.OrderBookDisplayCount      = 5;

            var symbolViewModel = new SymbolViewModel(exchangeService, chartHelper, preferences, new DebugLogger());

            var trx = TestHelper.Trx.GetViewSymbol();

            symbolViewModel.Symbol = trx;

            var firstOrderBook  = OrderBookUpdateHelper.OrderBook_Trx_GetFirstUpdate();
            var secondOrderBook = OrderBookUpdateHelper.OrderBook_Trx_GetSecondUpdate();

            // Act
            symbolViewModel.UpdateOrderBook(firstOrderBook);

            symbolViewModel.UpdateOrderBook(secondOrderBook);

            // Assert
            AssertOrderBookUpdate(symbolViewModel, secondOrderBook, preferences);
        }
        public async Task BuyQuantity_SufficientFunds()
        {
            // Arrange
            var cxlToken        = new CancellationToken();
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var tradeViewModel  = new TradeViewModel(exchangeService, new DebugLogger());

            var symbols = await exchangeService.GetSymbols24HourStatisticsAsync(Exchange.Test, cxlToken);

            var trx = symbols.Single(s => s.Name.Equals("TRXBTC"));

            var account = new Account(new Interface.Model.AccountInfo {
                User = new Interface.Model.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            account = await exchangeService.GetAccountInfoAsync(Exchange.Test, account.AccountInfo.User, cxlToken);

            var selectedAsset = account.Balances.Single(ab => ab.Asset.Equals("TRX"));

            tradeViewModel.SetSymbols(symbols.ToList());
            tradeViewModel.SetAccount(account);
            tradeViewModel.SetSymbol(selectedAsset);
            tradeViewModel.QuoteAccountBalance.Free = 0.00012693M;

            // Act
            tradeViewModel.BuyQuantityCommand.Execute(75);

            // Assert
            Assert.IsTrue(tradeViewModel.Quantity.Equals(10));
        }
        public async Task GetMultipleBalancesUDTValue_BTC_BNB()
        {
            // Arrange
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.Standard);
            var exchangeService = new WpfExchangeService(exchangeApi);
            var symbolsCache    = SymbolsCacheHelper.GetSymbolsCache(exchangeService);
            var symbols         = await symbolsCache.GetSymbols(new[] { "BNBBTC" });

            var balances = new List <Interface.Model.AccountBalance>();

            balances.Add(new Interface.Model.AccountBalance {
                Asset = "BTC", Free = 0.00396715m
            });
            balances.Add(new Interface.Model.AccountBalance {
                Asset = "BNB", Free = 0.94444141m
            });

            var accountInfo = new Interface.Model.AccountInfo
            {
                Balances = balances
            };

            var account = new Account(accountInfo);

            // Act
            symbolsCache.ValueAccount(account);

            // Assert
            Assert.AreEqual(account.USDTValue, 50.51m);
            Assert.AreEqual(account.BTCValue, 0.00534226m);
        }
        public async Task AccountPreferences()
        {
            // Arrange
            var exchangeApi         = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.SymbolsViewModel);
            var exchangeService     = new WpfExchangeService(exchangeApi);
            var symbolsCacheFactory = SymbolsCacheFactoryHelper.GetSymbolsCachefactory(exchangeService);
            var symbolsViewModel    = new SymbolsViewModel(exchangeService, symbolsCacheFactory, new DebugLogger());

            var userData = File.ReadAllText("UserAccounts.txt");
            var accounts = JsonConvert.DeserializeObject <UserAccounts>(userData);

            var account = accounts.Accounts.First();

            // Act
            await symbolsViewModel.SetAccount(account);

            await Task.Delay(1000);

            // Assert
            var favourites = from s in symbolsViewModel.Symbols
                             join f in account.Preferences.FavouriteSymbols on s.Name equals f
                             select s;

            foreach (var favourite in favourites)
            {
                Assert.IsNotNull(symbolsViewModel.Symbols.First(s => s.Name.Equals(favourite.Name)));
            }

            Assert.AreEqual(symbolsViewModel.SelectedSymbol.Name, account.Preferences.SelectedSymbol);
        }
        public async Task GetSingleBalanceUDTValue_BNB()
        {
            // Arrange
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.Standard);
            var exchangeService = new WpfExchangeService(exchangeApi);
            var symbolsCache    = SymbolsCacheHelper.GetSymbolsCache(exchangeService);
            var symbols         = await symbolsCache.GetSymbols(new[] { "BNBBTC" });

            var balances = new List <Interface.Model.AccountBalance>();

            balances.Add(new Interface.Model.AccountBalance {
                Asset = "BNB", Free = 1.88373641m
            });

            var accountInfo = new Interface.Model.AccountInfo
            {
                Balances = balances
            };

            var account = new Account(accountInfo);

            // Act
            symbolsCache.ValueAccount(account);

            // Assert
            Assert.AreEqual(account.USDTValue, 25.93m);
            Assert.AreEqual(account.BTCValue, 0.00274272m);
        }
Example #6
0
        public async Task SetSymbol()
        {
            // Arrange
            var preferences = new Model.Preferences();

            preferences.OrderBookChartDisplayCount = 8;
            preferences.OrderBookDisplayCount      = 5;
            preferences.TradesDisplayCount         = 5;
            preferences.TradesChartDisplayCount    = 8;

            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var symbolViewModel = new SymbolViewModel(Exchange.Test, exchangeService, chartHelper,
                                                      new BinanceOrderBookHelper(),
                                                      new TradeHelper(),
                                                      preferences, new DebugLogger());

            var trx = TestHelper.Trx.GetViewSymbol();

            // Act
            await symbolViewModel.SetSymbol(trx);

            // Assert
            Assert.AreEqual(symbolViewModel.Symbol, trx);
            Assert.IsNotNull(symbolViewModel.OrderBook);
            Assert.AreEqual(symbolViewModel.OrderBook.LastUpdateId, TestHelper.OrderBook.LastUpdateId);
            Assert.IsTrue(symbolViewModel.OrderBook.TopAsks.Count > 0);
            Assert.IsTrue(symbolViewModel.OrderBook.TopBids.Count > 0);
            Assert.IsTrue(symbolViewModel.Trades.Count > 0);
        }
Example #7
0
        public void UpdateOrderBook_FirstUpdate()
        {
            // Arrange
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);

            var preferences = new Model.Preferences();

            preferences.OrderBookChartDisplayCount = 8;
            preferences.OrderBookDisplayCount      = 5;

            var symbolViewModel = new SymbolViewModel(Exchange.Test, exchangeService, chartHelper,
                                                      new BinanceOrderBookHelper(),
                                                      new TradeHelper(),
                                                      preferences, new DebugLogger());

            var trx = TestHelper.Trx.GetViewSymbol();

            symbolViewModel.Symbol = trx;

            var orderBook1 = new OrderBookUpdateHelper();
            var orderBook  = orderBook1.OrderBook_Trx_GetFirstUpdate();

            // Act
            symbolViewModel.UpdateOrderBook(orderBook);

            // Assert
            AssertOrderBookUpdate(symbolViewModel, orderBook, preferences);
        }
Example #8
0
        public void UpdateTrades_Second_Update_3_New_Trades()
        {
            // Arrange
            var preferences = new Model.Preferences();

            preferences.OrderBookChartDisplayCount = 8;
            preferences.OrderBookDisplayCount      = 5;
            preferences.TradesDisplayCount         = 5;
            preferences.TradesChartDisplayCount    = 8;

            var exchangeApi     = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.SubscribeOrderBookAggregateTrades);
            var exchangeService = new WpfExchangeService(exchangeApi);
            var symbolViewModel = new SymbolViewModel(Exchange.Test, exchangeService, chartHelper,
                                                      new BinanceOrderBookHelper(),
                                                      new TradeHelper(),
                                                      preferences, new DebugLogger());

            var trx = TestHelper.BNB.GetViewSymbol();

            symbolViewModel.Symbol = trx;

            var firstTrades = TradesUpdateHelper.Trades_BNB_InitialTradeUpdate_10_Trades();

            var secondTrades = TradesUpdateHelper.Trades_BNB_NextTradeUpdate(firstTrades, 3, 3);

            // Act
            symbolViewModel.UpdateTrades(firstTrades);

            symbolViewModel.UpdateTrades(secondTrades);

            // Assert
            AssertTradeUpdate(symbolViewModel, preferences, secondTrades);
        }
        public async Task GetSingleBalanceUDTValue_BTC()
        {
            // Arrange
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.Standard);
            var exchangeService = new WpfExchangeService(exchangeApi);
            var symbolsCache    = SymbolsCacheHelper.GetSymbolsCache(exchangeService);
            var symbols         = await symbolsCache.GetSymbols();

            var balances = new List <Interface.AccountBalance>();

            balances.Add(new Interface.AccountBalance {
                Asset = "BTC", Free = 0.00794722m
            });

            var accountInfo = new Interface.AccountInfo
            {
                Balances = balances
            };

            var account = new Account(accountInfo);

            // Act
            symbolsCache.ValueAccount(account);

            // Assert
            Assert.AreEqual(account.USDTValue, 64.84m);
            Assert.AreEqual(account.BTCValue, 0.00794722m);
        }
Example #10
0
        public async Task GetSingleBalanceUDTValue_BTC()
        {
            // Arrange
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.Standard);
            var exchangeService = new WpfExchangeService(exchangeApi);
            var symbolsCache    = SymbolsCacheHelper.GetSymbolsCache(exchangeService);
            await symbolsCache.GetSymbols(new[] { "BNBBTC" });

            var balances = new List <Core.Model.AccountBalance>
            {
                new Core.Model.AccountBalance {
                    Asset = "BTC", Free = 0.00794722m
                }
            };

            var accountInfo = new Core.Model.AccountInfo();

            accountInfo.Balances.AddRange(balances);

            var account = new Account(accountInfo);

            // Act
            symbolsCache.ValueAccount(account);

            // Assert
            Assert.AreEqual(account.USDTValue, 75.14m);
            Assert.AreEqual(account.BTCValue, 0.00794722m);
        }
Example #11
0
        public async Task Quantity_and_Price_and_StopPrice_NoTrim()
        {
            // Arrange
            var cxlToken        = new CancellationToken();
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var tradeViewModel  = new TradeViewModel(exchangeService);

            var symbols = await exchangeService.GetSymbols24HourStatisticsAsync(cxlToken);

            tradeViewModel.SetSymbols(symbols.ToList());
            var trx = tradeViewModel.Symbols.Single(s => s.Name.Equals("TRXBTC"));

            tradeViewModel.SelectedSymbol = trx;

            var quantity = 294m;
            var price    = 1.12345678m;

            // Act
            tradeViewModel.Quantity  = quantity;
            tradeViewModel.Price     = price;
            tradeViewModel.StopPrice = price;

            // Assert
            Assert.AreEqual(tradeViewModel.Quantity, quantity.Trim(trx.QuantityPrecision));
            Assert.AreEqual(tradeViewModel.Price, price.Trim(trx.PricePrecision));
            Assert.AreEqual(tradeViewModel.StopPrice, price.Trim(trx.PricePrecision));
        }
Example #12
0
        public async Task SetAccount()
        {
            // Arrange
            var cxlToken        = new CancellationToken();
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var tradeViewModel  = new TradeViewModel(exchangeService);

            var symbols = await exchangeService.GetSymbols24HourStatisticsAsync(cxlToken);

            var trx = symbols.Single(s => s.Name.Equals("TRXBTC"));

            tradeViewModel.SetSymbols(symbols.ToList());

            var account = new Account(new Interface.AccountInfo {
                User = new Interface.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            account = await exchangeService.GetAccountInfoAsync(account.AccountInfo.User.ApiKey, account.AccountInfo.User.ApiSecret, cxlToken);

            // Act
            tradeViewModel.SetAccount(account);

            // Assert
            Assert.AreEqual(tradeViewModel.Account, account);
            Assert.AreEqual(tradeViewModel.SelectedOrderType, null);
            Assert.IsNull(tradeViewModel.SelectedSymbol);
        }
        public async Task UpdateOrders()
        {
            // Arrange
            var exchangeApi      = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.UpdateOrders);
            var exchangeService  = new WpfExchangeService(exchangeApi);
            var accountViewModel = new OrdersViewModel(exchangeService, new DebugLogger());

            var account = new Account(new Interface.Model.AccountInfo {
                User = new Interface.Model.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            accountViewModel.Account = account;
            foreach (var order in TestHelper.Orders)
            {
                accountViewModel.Orders.Add(order.GetViewOrder());
            }

            //Act
            await accountViewModel.UpdateOrders(account);

            // Assert
            foreach (var order in accountViewModel.Orders)
            {
                Assert.AreEqual(order.ExecutedQuantity, Math.Round(order.OriginalQuantity * 0.5m, 0));
                Assert.AreEqual(order.FilledPercent, (int)((order.ExecutedQuantity / order.OriginalQuantity) * 100));
            }
        }
Example #14
0
        public async Task OrderTypes_SelectedSymbol()
        {
            // Arrange
            var cxlToken        = new CancellationToken();
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var tradeViewModel  = new TradeViewModel(exchangeService);

            var symbols = await exchangeService.GetSymbols24HourStatisticsAsync(cxlToken);

            var trx = symbols.Single(s => s.Name.Equals("TRXBTC"));

            tradeViewModel.SetSymbols(symbols.ToList());
            tradeViewModel.SelectedSymbol = trx;

            // Act
            var orderTypes = tradeViewModel.OrderTypes;

            // Assert
            Assert.AreEqual(tradeViewModel.SelectedSymbol, trx);

            var missing = InterfaceExtensions.OrderExtensions.OrderTypes().Except(tradeViewModel.OrderTypes).ToList();

            foreach (var orderType in missing)
            {
                if (orderType != InterfaceExtensions.OrderExtensions.GetOrderTypeName(Interface.OrderType.StopLoss) &&
                    orderType != InterfaceExtensions.OrderExtensions.GetOrderTypeName(Interface.OrderType.TakeProfit))
                {
                    Assert.Fail();
                }
            }
        }
        public async Task SetAccount_NullAccount()
        {
            // Arrange
            var exchangeApi      = ExchangeServiceHelper.GetExchangeService();
            var exchangeService  = new WpfExchangeService(exchangeApi);
            var accountViewModel = new OrdersViewModel(exchangeService, new DebugLogger());

            var account = new Account(new Interface.Model.AccountInfo {
                User = new Interface.Model.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            accountViewModel.Account = account;
            foreach (var order in TestHelper.Orders)
            {
                accountViewModel.Orders.Add(order.GetViewOrder());
            }

            //Act
            await accountViewModel.SetAccount(null);

            // Assert
            Assert.IsNull(accountViewModel.Account);
            Assert.IsTrue(accountViewModel.Orders.Count().Equals(0));
        }
Example #16
0
        public async Task SellQuantity()
        {
            // Arrange
            var cxlToken        = new CancellationToken();
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var tradeViewModel  = new TradeViewModel(exchangeService);

            var symbols = await exchangeService.GetSymbols24HourStatisticsAsync(cxlToken);

            var trx = symbols.Single(s => s.Name.Equals("TRXBTC"));

            var account = new Account(new Interface.AccountInfo {
                User = new Interface.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            account = await exchangeService.GetAccountInfoAsync(account.AccountInfo.User.ApiKey, account.AccountInfo.User.ApiSecret, cxlToken);

            var selectedAsset = account.Balances.Single(ab => ab.Asset.Equals("TRX"));

            tradeViewModel.SetSymbols(symbols.ToList());
            tradeViewModel.SetAccount(account);
            tradeViewModel.SetSymbol(selectedAsset);

            // Act
            tradeViewModel.SellQuantityCommand.Execute(75);

            // Assert
            Assert.IsTrue(tradeViewModel.Quantity.Equals((selectedAsset.Free * 0.75m).Trim(trx.QuantityPrecision)));
        }
        public async Task SetAccount_NewAccount()
        {
            // Arrange
            var exchangeApi      = ExchangeServiceHelper.GetExchangeService();
            var exchangeService  = new WpfExchangeService(exchangeApi);
            var accountViewModel = new OrdersViewModel(exchangeService, new DebugLogger());

            var account = new Account(new Interface.Model.AccountInfo {
                User = new Interface.Model.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            //Act
            await accountViewModel.SetAccount(account);

            // Assert
            Assert.AreEqual(accountViewModel.Account, account);
            foreach (var order in TestHelper.Orders)
            {
                Assert.IsNotNull(accountViewModel.Orders.SingleOrDefault(o => o.ClientOrderId.Equals(order.ClientOrderId)));
            }
        }
Example #18
0
        public async Task SymbolsViewModel_Initialise()
        {
            // Arrange
            var fail            = false;
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.SymbolsViewModel);
            var exchangeService = new WpfExchangeService(exchangeApi);

            // Act
            var symbolsViewModel = new SymbolsViewModel(exchangeService);

            var symbolsObservable = Observable.FromEventPattern <SymbolsEventArgs>(
                eventHandler => symbolsViewModel.OnSymbolsNotification += eventHandler,
                eventHandler => symbolsViewModel.OnSymbolsNotification -= eventHandler)
                                    .Select(eventPattern => eventPattern.EventArgs);

            symbolsObservable.Subscribe((args) =>
            {
                if (args.Symbols != null)
                {
                    // expected
                }
                else
                {
                    fail = true;
                }
            });

            await Task.Delay(1000);

            // Assert
            Assert.AreEqual(symbolsViewModel.Symbols.Count, TestHelper.Symbols.Count);
            Assert.IsNull(symbolsViewModel.AccountPreferences);
            Assert.IsNull(symbolsViewModel.SelectedSymbol);
            Assert.IsFalse(fail);
        }
Example #19
0
        public async Task SubscribeStatistics()
        {
            // Arrange
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var cxlToken        = new CancellationToken();

            var symbols = await exchangeService.GetSymbols24HourStatisticsAsync(Exchange.Test, cxlToken).ConfigureAwait(false);
Example #20
0
        public async Task Login_AccountInfo_Update()
        {
            // Arrange
            var    fail                = false;
            var    hasUpdated          = false;
            string errorMessage        = string.Empty;
            var    exchangeApi         = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.SubscribeAccountInfo);
            var    exchangeService     = new WpfExchangeService(exchangeApi);
            var    symbolsCacheFactory = SymbolsCacheFactoryHelper.GetSymbolsCachefactory(exchangeService);
            var    accountViewModel    = new AccountBalancesViewModel(exchangeService, symbolsCacheFactory, new DebugLogger());

            var account = new Account(new Core.Model.AccountInfo {
                User = new Core.Model.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            accountViewModel.Account = account;

            var accountObservable = Observable.FromEventPattern <AccountEventArgs>(
                eventHandler => accountViewModel.OnAccountNotification += eventHandler,
                eventHandler => accountViewModel.OnAccountNotification -= eventHandler)
                                    .Select(eventPattern => eventPattern.EventArgs);

            accountObservable.Subscribe(args =>
            {
                if (args.AccountEventType.Equals(AccountEventType.LoggedIn))
                {
                    // expected
                }
                else if (args.AccountEventType.Equals(AccountEventType.UpdateOrders))
                {
                    hasUpdated = true;
                }
                else
                {
                    fail = true;
                }
            });

            // Act
            await accountViewModel.Login(account);

            // Assert
            var btc  = accountViewModel.Account.Balances.SingleOrDefault(ab => ab.Asset.Equals("BTC"));
            var bcpt = accountViewModel.Account.Balances.SingleOrDefault(ab => ab.Asset.Equals("BCPT"));
            var test = accountViewModel.Account.Balances.SingleOrDefault(ab => ab.Asset.Equals("TEST"));

            Assert.IsTrue(hasUpdated);
            Assert.IsNull(btc);
            Assert.IsNull(bcpt);
            Assert.IsNotNull(test);
            Assert.IsTrue(accountViewModel.Account.Balances.Count().Equals(5));
            Assert.IsFalse(fail);
        }
Example #21
0
        public async Task Buy_Fails_PlaceOrder()
        {
            // Arrange
            var cxlToken        = new CancellationToken();
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.PlaceOrderException);
            var exchangeService = new WpfExchangeService(exchangeApi);
            var tradeViewModel  = new TradeViewModel(exchangeService);

            var symbols = await exchangeService.GetSymbols24HourStatisticsAsync(cxlToken);

            var trx = symbols.Single(s => s.Name.Equals("TRXBTC"));

            var account = new Account(new Interface.AccountInfo {
                User = new Interface.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            account = await exchangeService.GetAccountInfoAsync(account.AccountInfo.User.ApiKey, account.AccountInfo.User.ApiSecret, cxlToken);

            var selectedAsset = account.Balances.Single(ab => ab.Asset.Equals("TRX"));

            tradeViewModel.SetSymbols(symbols.ToList());
            tradeViewModel.SetAccount(account);
            tradeViewModel.SetSymbol(selectedAsset);

            tradeViewModel.QuoteAccountBalance.Free = 0.00012693M;

            tradeViewModel.SelectedOrderType        = "Limit";
            tradeViewModel.Quantity                 = 200m;
            tradeViewModel.Price                    = 0.00000900M;
            tradeViewModel.QuoteAccountBalance.Free = 200m * 0.00000900M;

            var tradeObservable = Observable.FromEventPattern <TradeEventArgs>(
                eventHandler => tradeViewModel.OnTradeNotification += eventHandler,
                eventHandler => tradeViewModel.OnTradeNotification -= eventHandler)
                                  .Select(eventPattern => eventPattern.EventArgs);

            Exception ex = null;

            tradeObservable.Subscribe(args =>
            {
                if (args.HasException)
                {
                    ex = args.Exception;
                }
            });

            // Act
            tradeViewModel.BuyCommand.Execute(null);

            // Assert
            Assert.IsNotNull(ex);
            Assert.IsTrue(ex.Message.Contains("failed to place order"));
        }
        public async Task Sell_Pass()
        {
            // Arrange
            var cxlToken        = new CancellationToken();
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var tradeViewModel  = new TradeViewModel(exchangeService, new DebugLogger());

            var symbols = await exchangeService.GetSymbols24HourStatisticsAsync(Exchange.Test, cxlToken);

            var trx = symbols.Single(s => s.Name.Equals("TRXBTC"));

            var account = new Account(new Core.Model.AccountInfo {
                User = new Core.Model.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            account = await exchangeService.GetAccountInfoAsync(Exchange.Test, account.AccountInfo.User, cxlToken);

            var selectedAsset = account.Balances.Single(ab => ab.Asset.Equals("TRX"));

            tradeViewModel.SetSymbols(symbols.ToList());
            tradeViewModel.SetAccount(account);
            tradeViewModel.SetSymbol(selectedAsset);

            tradeViewModel.QuoteAccountBalance.Free = 0.00012693M;

            tradeViewModel.SelectedOrderType = "Limit";
            tradeViewModel.Quantity          = tradeViewModel.BaseAccountBalance.Free;
            tradeViewModel.Price             = 0.00000850M;

            var tradeObservable = Observable.FromEventPattern <TradeEventArgs>(
                eventHandler => tradeViewModel.OnTradeNotification += eventHandler,
                eventHandler => tradeViewModel.OnTradeNotification -= eventHandler)
                                  .Select(eventPattern => eventPattern.EventArgs);

            Exception ex = null;

            tradeObservable.Subscribe(args =>
            {
                if (args.HasException)
                {
                    ex = args.Exception;
                }
            });

            // Act
            tradeViewModel.SellCommand.Execute(null);

            // Assert
            Assert.IsNull(ex);
        }
Example #23
0
        public void UpdateTrades_Second_Update_3_New_Trades_Less_Than_Limit()
        {
            // Arrange
            var preferences = new Model.Preferences
            {
                OrderBookChartDisplayCount = 8,
                OrderBookDisplayCount      = 5,
                TradesDisplayCount         = 15,
                TradesChartDisplayCount    = 18
            };

            var exchangeApi     = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.SubscribeOrderBookAggregateTrades);
            var exchangeService = new WpfExchangeService(exchangeApi);
            var symbolViewModel = new SymbolViewModel(Exchange.Test, exchangeService, chartHelper,
                                                      new BinanceOrderBookHelper(),
                                                      new TradeHelper(),
                                                      preferences, new DebugLogger());

            var trx = TestHelper.BNB.GetViewSymbol();

            symbolViewModel.Symbol = trx;

            var firstTrades = TradesUpdateHelper.Trades_BNB_InitialTradeUpdate_10_Trades();

            var secondTrades = TradesUpdateHelper.Trades_BNB_NextTradeUpdate(firstTrades, 3, 3);

            // Act
            symbolViewModel.UpdateTrades(firstTrades);

            symbolViewModel.UpdateTrades(secondTrades);

            // Assert
            Assert.AreEqual(symbolViewModel.Trades.Count, 13);
            Assert.AreEqual(symbolViewModel.TradesChart.Count, 13);

            var chart = firstTrades.Take(3).ToList();

            chart.AddRange(secondTrades);

            // Assert - chart trades
            for (int i = 0; i < 13; i++)
            {
                Assert.AreEqual(symbolViewModel.TradesChart[i].Id, chart[i].Id);
                Assert.AreEqual(symbolViewModel.TradesChart[i].Time, chart[i].Time);
            }

            // Assert - trades
            var trades = chart.Reverse <ITrade>().ToList();

            for (int i = 0; i < 13; i++)
            {
                Assert.AreEqual(symbolViewModel.Trades[i].Id, trades[i].Id);
                Assert.AreEqual(symbolViewModel.Trades[i].Time, trades[i].Time);
            }
        }
Example #24
0
        public async Task SelectedSymbol()
        {
            // Arrange
            var    fail                = false;
            Symbol selectedSymbol      = null;
            var    exchangeApi         = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.SymbolsViewModel);
            var    exchangeService     = new WpfExchangeService(exchangeApi);
            var    symbolsCacheFactory = SymbolsCacheFactoryHelper.GetSymbolsCachefactory(exchangeService);
            var    symbolsViewModel    = new SymbolsViewModel(exchangeService, symbolsCacheFactory, new DebugLogger());

            var symbolsObservable = Observable.FromEventPattern <SymbolsEventArgs>(
                eventHandler => symbolsViewModel.OnSymbolsNotification += eventHandler,
                eventHandler => symbolsViewModel.OnSymbolsNotification -= eventHandler)
                                    .Select(eventPattern => eventPattern.EventArgs);

            symbolsObservable.Subscribe((args) =>
            {
                if (args.Value != null)
                {
                    selectedSymbol = args.Value;
                }
                else if (args.Symbols.Any())
                {
                    // expected
                }
                else
                {
                    fail = true;
                }
            });

            var userAccount = new UserAccount
            {
                Preferences = new Preferences {
                    SelectedSymbol = "BNBBTC",
                }
            };

            userAccount.Preferences.FavouriteSymbols.Add("BNBBTC");
            userAccount.Preferences.FavouriteSymbols.Add("TRXBTC");

            await symbolsViewModel.SetAccount(userAccount);

            await Task.Delay(1000);

            // Act
            var trx = symbolsViewModel.Symbols.Single(s => s.Name.Equals("TRXBTC"));

            symbolsViewModel.SelectedSymbol = trx;

            // Assert
            Assert.AreEqual(symbolsViewModel.SelectedSymbol, selectedSymbol);
            Assert.IsFalse(fail);
        }
        public void SelectedAsset()
        {
            // Arrange
            var            fail = false;
            AccountBalance selectedAccountBalance = null;
            var            exchangeApi            = ExchangeServiceHelper.GetExchangeService();
            var            exchangeService        = new WpfExchangeService(exchangeApi);
            var            symbolsCache           = SymbolsCacheHelper.GetSymbolsCache(exchangeService);
            var            accountViewModel       = new AccountViewModel(exchangeService, symbolsCache, new DebugLogger());

            var account = new Account(new Interface.AccountInfo {
                User = new Interface.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            accountViewModel.Account = account;

            var accountObservable = Observable.FromEventPattern <AccountEventArgs>(
                eventHandler => accountViewModel.OnAccountNotification += eventHandler,
                eventHandler => accountViewModel.OnAccountNotification -= eventHandler)
                                    .Select(eventPattern => eventPattern.EventArgs);

            accountObservable.Subscribe(args =>
            {
                if (args.AccountEventType.Equals(AccountEventType.LoggedOut) ||
                    args.AccountEventType.Equals(AccountEventType.LoggedIn))
                {
                    // expected
                }
                else if (args.AccountEventType.Equals(AccountEventType.SelectedAsset))
                {
                    selectedAccountBalance = args.SelectedAsset;
                }
                else
                {
                    fail = true;
                }
            });

            // Act
            accountViewModel.SetAccount(account);
            accountViewModel.LoginCommand.Execute(null);
            var trx = accountViewModel.Account.Balances.Single(ab => ab.Asset.Equals("TRX"));

            accountViewModel.SelectedAsset = trx;

            // Assert
            Assert.AreEqual(selectedAccountBalance, trx);
            Assert.IsFalse(fail);
        }
        public void HasQuoteBaseBalance_Null()
        {
            // Arrange
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var tradeViewModel  = new TradeViewModel(exchangeService, new DebugLogger());

            // Act

            // Assert
            Assert.IsFalse(tradeViewModel.HasBaseBalance);
            Assert.IsFalse(tradeViewModel.HasQuoteBalance);
        }
        public void Login()
        {
            // Arrange
            var    fail             = false;
            var    loggedInAccount  = string.Empty;
            string errorMessage     = string.Empty;
            var    exchangeApi      = ExchangeServiceHelper.GetExchangeService();
            var    exchangeService  = new WpfExchangeService(exchangeApi);
            var    symbolsCache     = SymbolsCacheHelper.GetSymbolsCache(exchangeService);
            var    accountViewModel = new AccountViewModel(exchangeService, symbolsCache, new DebugLogger());

            var account = new Account(new Interface.AccountInfo {
                User = new Interface.User()
            })
            {
                ApiKey    = "apikey",
                ApiSecret = "apisecret"
            };

            accountViewModel.Account = account;

            var accountObservable = Observable.FromEventPattern <AccountEventArgs>(
                eventHandler => accountViewModel.OnAccountNotification += eventHandler,
                eventHandler => accountViewModel.OnAccountNotification -= eventHandler)
                                    .Select(eventPattern => eventPattern.EventArgs);

            accountObservable.Subscribe(args =>
            {
                if (args.AccountEventType.Equals(AccountEventType.LoggedIn))
                {
                    loggedInAccount = JsonConvert.SerializeObject(args.Value);
                }
                else
                {
                    fail = true;
                }
            });

            // Act
            accountViewModel.LoginCommand.Execute(null);

            // Assert
            var accountViewModelAccount = JsonConvert.SerializeObject(accountViewModel.Account);
            var accountInfo             = JsonConvert.SerializeObject(accountViewModel.Account.AccountInfo);
            var testAccountInfo         = JsonConvert.SerializeObject(TestHelper.AccountInfo);

            Assert.AreEqual(accountViewModelAccount, loggedInAccount);
            Assert.AreEqual(accountInfo, testAccountInfo);
            Assert.IsFalse(fail);
        }
Example #28
0
        public void HasQuoteBaseBalance_Null()
        {
            // Arrange
            var cxlToken        = new CancellationToken();
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var tradeViewModel  = new TradeViewModel(exchangeService);

            // Act

            // Assert
            Assert.IsFalse(tradeViewModel.HasBaseBalance);
            Assert.IsFalse(tradeViewModel.HasQuoteBalance);
        }
Example #29
0
        public async Task GetSymbols24HourStatisticsAsync()
        {
            // Arrange
            var exchangeApi     = ExchangeServiceHelper.GetExchangeService();
            var exchangeService = new WpfExchangeService(exchangeApi);
            var cxlToken        = new CancellationToken();

            // Act
            var symbols = await exchangeService.GetSymbols24HourStatisticsAsync(Exchange.Test, cxlToken).ConfigureAwait(false);

            // Assert
            var testResults = symbols.Where(s => s.SymbolStatistics.LastPrice.Equals(0.0M)).ToList();

            Assert.IsFalse(testResults.Any());
        }
Example #30
0
        public async Task SymbolsViewModel_SetAccount()
        {
            // Arrange
            var fail                = false;
            var exchangeApi         = ExchangeServiceHelper.GetExchangeService(ExchangeServiceType.SymbolsViewModel);
            var exchangeService     = new WpfExchangeService(exchangeApi);
            var symbolsCacheFactory = SymbolsCacheFactoryHelper.GetSymbolsCachefactory(exchangeService);

            // Act
            var symbolsViewModel = new SymbolsViewModel(exchangeService, symbolsCacheFactory, new DebugLogger());

            var symbolsObservable = Observable.FromEventPattern <SymbolsEventArgs>(
                eventHandler => symbolsViewModel.OnSymbolsNotification += eventHandler,
                eventHandler => symbolsViewModel.OnSymbolsNotification -= eventHandler)
                                    .Select(eventPattern => eventPattern.EventArgs);

            symbolsObservable.Subscribe((args) =>
            {
                if (args.Symbols != null || // OnLoadedSymbols
                    args.Value.Name.Equals("BNBBTC"))    // OnSelectedSymbol
                {
                    // expected
                }
                else
                {
                    fail = true;
                }
            });

            await symbolsViewModel.SetAccount(
                new UserAccount
            {
                Preferences = new Preferences
                {
                    SelectedSymbol   = "BNBBTC",
                    FavouriteSymbols = new ObservableCollection <string>(new[] { "BNBBTC", "TRXBTC" })
                }
            });

            await Task.Delay(1000);

            // Assert
            Assert.AreEqual(symbolsViewModel.Symbols.Count, 2);
            Assert.IsNotNull(symbolsViewModel.AccountPreferences);
            Assert.IsNotNull(symbolsViewModel.SelectedSymbol);
            Assert.AreEqual(symbolsViewModel.SelectedSymbol.Name, "BNBBTC");
            Assert.IsFalse(fail);
        }