public async Task <TokenViewModel> Info(string market) { TokenViewModel viewModel = new TokenViewModel(); viewModel.BaseType = BaseType(market); viewModel.MinValue = MinTradeValue(viewModel.BaseType); string asset = market.Replace(viewModel.BaseType, ""); using (var client = new BinanceClient()) { var balances = await client.GetAccountInfoAsync(); if (balances.Success) { CalculateAmountDecimal amountDecimal = new CalculateAmountDecimal(); BinanceBalance balance = balances.Data.Balances.Where(b => b.Asset == asset).Single(); viewModel.BaseDecimalAmount = viewModel.BaseType == "USDT" || viewModel.BaseType == "TUSD" || viewModel.BaseType == "USDC" || viewModel.BaseType == "PAX" ? 2 : await amountDecimal.OrderBookDecimal(viewModel.BaseType + "USDT"); var currentPrice = await client.Get24HPriceAsync(market); if (currentPrice.Success) { viewModel.PriceDecimalAmount = await amountDecimal.PriceDecimal(market); viewModel.AssetDecimalAmount = await amountDecimal.OrderBookDecimal(market); viewModel.Name = market; viewModel.Amount = decimal.Round(balance.Free, viewModel.AssetDecimalAmount); viewModel.LastPrice = currentPrice.Data.LastPrice; return(viewModel); } } } return(viewModel); }
private void ParseCoinPosition(BinanceBalance balance, IList <ProxyCoinOrderData> orders) { var buys = orders.Where(x => x.OrderSide == ProxyEnum.CoinOrderSide.BUY).ToList(); var qty = 0m; var total = 0m; var loop = false; var remaining = balance.Balance; for (var i = buys.Count - 1; i >= 0; i--) { var buy = buys[i]; qty += buy.QuantityBalance; if (!loop) { if (qty == balance.Balance) { // all bought at the last order balance.AvgBuyPrice = buy.Price; balance.Balance = buy.QuantityBalance; break; } if (qty > balance.Balance) { balance.AvgBuyPrice = buy.Price; break; } } if (remaining <= 0) { break; } if (qty < balance.Balance) { loop = true; total += buy.QuantityBalance * buy.Price; balance.AvgBuyPrice = total / qty; remaining -= buy.QuantityBalance; } else { total += Math.Min(remaining, qty) * buy.Price; balance.AvgBuyPrice = total / balance.Balance; remaining -= buy.QuantityBalance; } } }
private BinanceStreamBalance Convert(BinanceBalance bb) { var bsb = new BinanceStreamBalance(); bsb.Asset = bb.Asset; bsb.Free = bb.Free; bsb.Locked = bb.Locked; return(bsb); }