Exemple #1
0
        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);
        }