public async Task <BalanceInformation> GetBalance() { List <WalletBalance> poloniexToWalletBalances; try { var balances = await _poloniexClient.Wallet.GetBalancesAsync(); poloniexToWalletBalances = TradeConverter.PoloniexToWalletBalances(balances); } catch (Exception e) { _log.LogError("Error in getting balances from poloniex: " + e.Message); throw; } var totalBtcBalance = 0m; foreach (var balance in poloniexToWalletBalances) { if (balance.BtcAmount == 0) { continue; } var price = await GetPrice("BTC", balance.Currency); var boughtPrice = 0m; var lastTradeForPair1 = _databaseService.GetLastTradeForPair(balance.Currency, Constants.Poloniex, TradeSide.Buy); if (lastTradeForPair1 != null) { boughtPrice = lastTradeForPair1.Limit; } try { balance.PercentageChange = ProfitCalculator.PriceDifference(price, boughtPrice); } catch { // There maybe a divide by 0 issue if we couldn't find the last trade. Its fine. Just print zero balance.PercentageChange = 0; } balance.Price = price; totalBtcBalance = totalBtcBalance + balance.BtcAmount; } var lastBalance = _databaseService.GetBalance24HoursAgo(Constants.Poloniex); var dollarAmount = await _priceService.GetDollarAmount(totalBtcBalance); var currentBalance = await _databaseService.AddBalance(totalBtcBalance, dollarAmount, Constants.Poloniex); await _databaseService.AddWalletBalances(poloniexToWalletBalances); return(new BalanceInformation(currentBalance, lastBalance, Constants.Poloniex, poloniexToWalletBalances)); }
public async Task <BalanceInformation> GetAccountBalance(int accountId) { var accounts = await _coinigyApiService.GetAccounts(); var selectedAccount = accounts[accountId]; var hour24Balance = await _databaseService.GetBalance24HoursAgo(selectedAccount.AuthId); var balanceCurrent = await _coinigyApiService.GetBtcBalance(selectedAccount.AuthId); var dollarAmount = await _priceService.GetDollarAmount(Constants.BTC, balanceCurrent, Constants.Bittrex); // Add to database. Should move these "Add to database" as an event which is called whenever a balance is queried var currentBalance = await _databaseService.AddBalance(balanceCurrent, dollarAmount, selectedAccount.AuthId); return(new BalanceInformation(currentBalance, hour24Balance, selectedAccount.Name));; }
public async Task <TradesProfitResponse> Handle(TradeProfitQuery query) { var averagePrice = await _databaseService.GetBuyAveragePrice(query.BaseCcy, query.Terms, query.Exchange, query.Quantity); if (averagePrice == 0m) { return(new TradesProfitResponse(null, null, null, null)); } var totalCost = averagePrice * query.Quantity; var profit = ProfitCalculator.GetProfitForSell(query.SellReturns, query.Quantity, averagePrice, totalCost); var lastBought = await _databaseService.GetLastBoughtAsync(query.BaseCcy, query.Terms, query.Exchange); decimal?btcProfit = query.SellReturns - totalCost; decimal?dollarProfit = await _priceService.GetDollarAmount(query.BaseCcy, btcProfit.Value, query.Exchange); return(new TradesProfitResponse(profit, btcProfit, dollarProfit, lastBought)); }
public async Task <TradesProfitResponse> Handle(TradeProfitQuery query) { var tradesForPairAndQuantity = _databaseService.GetBuysForPairAndQuantity(query.SellReturns, query.Quantity, query.BaseCcy, query.Terms); if (tradesForPairAndQuantity.Count == 0) { return(new TradesProfitResponse(null, null, null, null)); } ProfitCalculator.GetProfitForTrade(tradesForPairAndQuantity, query.SellReturns, query.Quantity, out decimal? totalCost, out decimal? profit, out DateTime lastBought); if (profit.HasValue && totalCost.HasValue) { decimal?btcProfit = query.SellReturns - totalCost.Value; decimal?dollarProfit = await _priceService.GetDollarAmount(btcProfit.Value); return(new TradesProfitResponse(profit, btcProfit, dollarProfit, lastBought)); } return(new TradesProfitResponse(null, null, null, null)); }
public async Task <BalanceInformation> GetBalance() { List <WalletBalance> bittrexBalances; try { var response = await _exchange.GetBalances(); bittrexBalances = TradeConverter.BittrexToWalletBalances(response); } catch (Exception e) { _log.LogError("Error in getting balances from bittrex: " + e.Message); throw; } var totalBtcBalance = 0m; foreach (var balance in bittrexBalances) { if (balance.Balance == 0) { continue; } var marketPrice = await GetPrice("BTC", balance.Currency); decimal price; decimal btcAmount; decimal boughtPrice = 0m; switch (balance.Currency) { case "BTC": btcAmount = balance.Balance; price = 1; boughtPrice = 1; break; case "USDT": price = marketPrice; btcAmount = (balance.Balance / price); var lastTradeForPair = _databaseService.GetLastTradeForPair(balance.Currency, Constants.Bittrex, TradeSide.Buy); if (lastTradeForPair != null) { boughtPrice = lastTradeForPair.Limit; } break; default: price = marketPrice; btcAmount = (price * balance.Balance); var lastTradeForPair1 = _databaseService.GetLastTradeForPair(balance.Currency, Constants.Bittrex, TradeSide.Buy); if (lastTradeForPair1 != null) { boughtPrice = lastTradeForPair1.Limit; } break; } try { balance.PercentageChange = ProfitCalculator.PriceDifference(price, boughtPrice); } catch { // There maybe a divide by 0 issue if we couldn't find the last trade. Its fine. Just print zero balance.PercentageChange = 0; } balance.BtcAmount = btcAmount; balance.Price = price; totalBtcBalance = totalBtcBalance + balance.BtcAmount; } var lastBalance = _databaseService.GetBalance24HoursAgo(Constants.Bittrex); var dollarAmount = await _priceService.GetDollarAmount(totalBtcBalance); var currentBalance = await _databaseService.AddBalance(totalBtcBalance, dollarAmount, Constants.Bittrex); await _databaseService.AddWalletBalances(bittrexBalances); return(new BalanceInformation(currentBalance, lastBalance, Constants.Bittrex, bittrexBalances)); }
public async Task <BalanceInformation> GetBalance() { List <WalletBalance> poloniexToWalletBalances; try { var balances = await _poloniexClient.Wallet.GetBalancesAsync(); poloniexToWalletBalances = TradeConverter.PoloniexToWalletBalances(balances); } catch (Exception e) { _log.LogError("Error in getting balances from poloniex: " + e.Message); throw; } var totalBtcBalance = 0m; foreach (var balance in poloniexToWalletBalances) { if (balance.Balance == 0) { continue; } decimal price; decimal btcAmount; decimal averagePrice = 0m; if (balance.Currency == _generalConfig.TradingCurrency) { btcAmount = balance.Balance; price = 0m; } else if (balance.Currency == "USDT") { var marketPrice = await _priceService.GetPrice("USDT", _generalConfig.TradingCurrency); btcAmount = balance.Balance * marketPrice; price = 0m; } else { var marketPrice = await _priceService.GetPrice(_generalConfig.TradingCurrency, balance.Currency); price = marketPrice; btcAmount = (price * balance.Balance); averagePrice = await _databaseService.GetBuyAveragePrice(_generalConfig.TradingCurrency, balance.Currency, Constants.Poloniex, balance.Balance); } try { balance.PercentageChange = ProfitCalculator.PriceDifference(price, averagePrice); } catch { // There maybe a divide by 0 issue if we couldn't find the last trade. Its fine. Just print zero balance.PercentageChange = 0; } balance.BtcAmount = btcAmount; balance.Price = price; totalBtcBalance = totalBtcBalance + balance.BtcAmount; } var lastBalance = await _databaseService.GetBalance24HoursAgo(Constants.Poloniex); var dollarAmount = await _priceService.GetDollarAmount(_generalConfig.TradingCurrency, totalBtcBalance); var currentBalance = await _databaseService.AddBalance(totalBtcBalance, dollarAmount, Constants.Poloniex); await _databaseService.AddWalletBalances(poloniexToWalletBalances); return(new BalanceInformation(currentBalance, lastBalance, Constants.Poloniex, poloniexToWalletBalances)); }