public async Task <object> listEmptySellIsNotFinished(string symbolName, string quoteCurrency, string userName)
        {
            var list         = new List <DogEmptySell>();
            var symbols      = CoinUtils.GetAllCommonSymbols(quoteCurrency);
            var nowPriceList = new DogNowPriceDao().ListDogNowPrice(quoteCurrency);
            Dictionary <string, decimal> closeDic = new Dictionary <string, decimal>();

            foreach (var item in nowPriceList)
            {
                if (item.QuoteCurrency != quoteCurrency)
                {
                    continue;
                }
                closeDic.Add(item.SymbolName, item.NowPrice);
            }
            if (string.IsNullOrEmpty(symbolName))
            {
                list = new DogEmptySellDao().listEveryMaxPriceEmptySellIsNotFinished(userName, quoteCurrency);
            }
            else
            {
                list = new DogEmptySellDao().ListDogEmptySellNotFinished(symbolName, userName, quoteCurrency);
            }

            return(new { list, closeDic });
        }
        public async Task <object> List(string quoteCurrency)
        {
            try
            {
                var res = await new DogControlDao().ListDogControl(quoteCurrency);
                res = res.OrderBy(it => it.SymbolName).ToList();
                var nowPriceList = new DogNowPriceDao().ListDogNowPrice(quoteCurrency);
                Dictionary <string, decimal> closeDic = new Dictionary <string, decimal>();
                foreach (var item in nowPriceList)
                {
                    if (item.QuoteCurrency != quoteCurrency)
                    {
                        continue;
                    }
                    closeDic.Add(item.SymbolName, item.NowPrice);
                }

                //var outList = new List<string> { "mtl", "ncash", "phx", "sbtc", "adx", "mtl", "mtl", "mtl", "mtl", "mtl" };
                PlatformApi api     = PlatformApi.GetInstance("xx");
                var         tickers = api.GetTickers();

                var notInControl = new List <string>();
                foreach (var ticker in tickers)
                {
                    if (ticker.symbol.EndsWith(quoteCurrency))
                    {
                        var find = res.Find(it => ticker.symbol.StartsWith(it.SymbolName));
                        if (find == null)
                        {
                            notInControl.Add(ticker.symbol);
                        }
                    }
                }

                return(new
                {
                    list = res.Select(it => new
                    {
                        it.HistoryMin,
                        it.HistoryMax,
                        it.EmptyPrice,
                        it.MaxInputPrice,
                        it.QuoteCurrency,
                        it.SymbolName,
                        AvgPrice = decimal.Round(it.AvgPrice, 9).ToString() + (it.MaxInputPrice > it.AvgPrice ? " 大于加权平均 " : "") + " -- " + decimal.Round(it.Min8, 9).ToString() + (it.MaxInputPrice > it.Min8 ? " 大于8阶层" : ""),
                        it.WillDelist,
                    }).ToList(),
                    closeDic,
                    notInControl,
                    allItems = res.Select(it => it.SymbolName).ToList()
                });
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message, ex);
                throw ex;
            }
        }
        private async Task <Dictionary <string, decimal> > GetUsdtPrice()
        {
            // 获取btc价格
            var         btcPrice = new decimal(1000);
            PlatformApi api      = PlatformApi.GetInstance("xx"); // 下面api和角色无关. 随便指定一个xx
            var         period   = "1min";
            var         count    = 3;
            var         klines   = api.GetHistoryKline("btcusdt", period, count);

            btcPrice = klines[0].Close;

            Dictionary <string, decimal> closeDic = new Dictionary <string, decimal>();

            closeDic.Add("usdt", (decimal)1);

            {
                var nowPriceList = new DogNowPriceDao().ListDogNowPrice("usdt");
                foreach (var item in nowPriceList)
                {
                    if (item.QuoteCurrency != "usdt")
                    {
                        continue;
                    }

                    closeDic.Add(item.SymbolName, item.NowPrice);
                }
            }

            {
                var nowPriceList = new DogNowPriceDao().ListDogNowPrice("btc");
                foreach (var item in nowPriceList)
                {
                    if (item.QuoteCurrency != "btc")
                    {
                        continue;
                    }

                    if (closeDic.ContainsKey(item.SymbolName))
                    {
                        continue;
                    }

                    closeDic.Add(item.SymbolName, item.NowPrice * btcPrice);
                }
            }


            {
                var nowPriceList = new DogNowPriceDao().ListDogNowPrice("eth");
                foreach (var item in nowPriceList)
                {
                    if (item.QuoteCurrency != "eth")
                    {
                        continue;
                    }

                    if (closeDic.ContainsKey(item.SymbolName))
                    {
                        continue;
                    }

                    closeDic.Add(item.SymbolName, item.NowPrice * closeDic["eth"]);
                }
            }


            {
                var nowPriceList = new DogNowPriceDao().ListDogNowPrice("ht");
                foreach (var item in nowPriceList)
                {
                    if (item.QuoteCurrency != "ht")
                    {
                        continue;
                    }

                    if (closeDic.ContainsKey(item.SymbolName))
                    {
                        continue;
                    }

                    closeDic.Add(item.SymbolName, item.NowPrice * closeDic["ht"]);
                }
            }

            return(closeDic);
        }
        public async Task <object> InitAccountInfo(string userName, string quoteCurrency, string sort, bool stat)
        {
            try
            {
                PlatformApi api         = PlatformApi.GetInstance(userName);
                var         accountInfo = api.GetAccountBalance(AccountConfigUtils.GetAccountConfig(userName).MainAccountId);

                var nowPriceList = new DogNowPriceDao().ListDogNowPrice(quoteCurrency);

                var result = new List <Dictionary <string, object> >();

                foreach (var balanceItem in accountInfo.Data.list)
                {
                    try
                    {
                        if (balanceItem.balance < (decimal)0.00001 || balanceItem.type == "frozen")
                        {
                            continue;
                        }

                        var nowPriceItem = nowPriceList.Find(it => it.SymbolName == balanceItem.currency);

                        if (stat && balanceItem.currency == "usdt")
                        {
                            new DogStatSymbolDao().CreateDogStatSymbol(new DogStatSymbol
                            {
                                Amount     = balanceItem.balance,
                                CreateTime = DateTime.Now,
                                EarnAmount = balanceItem.balance,
                                StatDate   = DateTime.Now.ToString("yyyy-MM-dd"),
                                SymbolName = balanceItem.currency,
                                UserName   = userName
                            });
                        }

                        if (nowPriceItem == null)
                        {
                            continue;
                        }

                        var totalQuantity = new DogMoreBuyDao().GetBuyQuantityOfDogMoreBuyIsNotFinished(userName, balanceItem.currency);
                        var kongAmount    = new DogEmptySellDao().GetSellAmountOfDogEmptySellIsNotFinished(userName, balanceItem.currency);
                        kongAmount = Math.Round(kongAmount, 6);

                        Dictionary <string, object> item = new Dictionary <string, object>();
                        item.Add("currency", balanceItem.currency);
                        item.Add("buyQuantity", totalQuantity);
                        item.Add("balance", Math.Round(balanceItem.balance, 6));
                        item.Add("nowPrice", nowPriceItem.NowPrice);
                        item.Add("kongAmount", kongAmount);
                        if (kongAmount > 0)
                        {
                            item.Add("canEmptyQuantity", Math.Round((balanceItem.balance - totalQuantity), 6) + $"({kongAmount})");
                        }
                        else
                        {
                            item.Add("canEmptyQuantity", Math.Round((balanceItem.balance - totalQuantity), 6));
                        }
                        item.Add("canEmptyAmount", Math.Round((balanceItem.balance - totalQuantity - kongAmount) * nowPriceItem.NowPrice, 6));

                        result.Add(item);

                        if (stat)
                        {
                            new DogStatSymbolDao().CreateDogStatSymbol(new DogStatSymbol
                            {
                                Amount     = balanceItem.balance,
                                CreateTime = DateTime.Now,
                                EarnAmount = (decimal)Math.Round((balanceItem.balance - totalQuantity - kongAmount), 6),
                                StatDate   = DateTime.Now.ToString("yyyy-MM-dd"),
                                SymbolName = balanceItem.currency,
                                UserName   = userName
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex.Message, ex);
                        logger.Info(JsonConvert.SerializeObject(balanceItem));
                    }
                }

                if (sort == "canEmptyAmountasc")
                {
                    result.Sort((a, b) => decimal.Compare((decimal)a["canEmptyAmount"], (decimal)b["canEmptyAmount"]));
                }
                if (sort == "canEmptyAmountdesc")
                {
                    result.Sort((a, b) => decimal.Compare((decimal)b["canEmptyAmount"], (decimal)a["canEmptyAmount"]));
                }
                else if (sort == "currencydesc")
                {
                    result.Sort((a, b) => string.Compare(b["currency"].ToString(), a["currency"].ToString()));
                }
                else if (sort == "currencyasc")
                {
                    result.Sort((a, b) => string.Compare(a["currency"].ToString(), b["currency"].ToString()));
                }

                return(result);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message, ex);
                throw ex;
            }
        }
Beispiel #5
0
        public async Task <object> ListDogMoreBuyNotFinishedStatistics(string userName, string quoteCurrency, string sort)
        {
            try
            {
                var res = new DogMoreBuyDao().ListDogMoreBuyNotFinishedStatistics(userName, quoteCurrency);

                var symbols = CoinUtils.GetAllCommonSymbols("usdt");
                symbols = symbols.Where(it => it.BaseCurrency != "btc").ToList();
                var nowPriceList = new DogNowPriceDao().ListDogNowPrice(quoteCurrency);
                Dictionary <string, decimal> closeDic = new Dictionary <string, decimal>();
                foreach (var item in nowPriceList)
                {
                    if (item.QuoteCurrency != quoteCurrency)
                    {
                        continue;
                    }
                    closeDic.Add(item.SymbolName, item.NowPrice);
                }

                foreach (var item in res)
                {
                    if (closeDic.ContainsKey(item.SymbolName))
                    {
                        item.NowPrice       = closeDic[item.SymbolName];
                        item.NowTotalAmount = closeDic[item.SymbolName] * item.TotalQuantity;
                    }
                }
                if (sort == "maxmin")
                {
                    Console.WriteLine(res.Find(it => it.MinPrice <= 0 || it.MaxPrice <= 0) == null);

                    var rate = 1;
                    if (quoteCurrency == "btc")
                    {
                        rate = 1000000;
                    }
                    if (quoteCurrency == "eth")
                    {
                        rate = 100000;
                    }
                    res.Sort((b, a) =>
                    {
                        if (a.MinPrice == 0 || b.MinPrice == 0)
                        {
                            return(0);
                        }
                        var aMaxPrice = a.MaxPrice * rate;
                        var bMaxPrice = b.MaxPrice * rate;
                        var aMinPrice = a.MinPrice * rate;
                        var bMinPrice = b.MinPrice * rate;
                        var bb        = ((aMaxPrice * bMinPrice) - (bMaxPrice * aMinPrice));
                        if (bb == 0)
                        {
                            return(0);
                        }
                        return(bb > 0 ? 1 : -1);
                    });
                }
                if (sort == "amount")
                {
                    res.Sort((b, a) => (int)(a.TotalAmount - b.TotalAmount));
                }
                if (sort == "nowamount")
                {
                    res.Sort((b, a) => (int)(a.NowTotalAmount - b.NowTotalAmount));
                }
                if (sort == "diffamount")
                {
                    res.Sort((b, a) => (int)(a.TotalAmount - a.NowTotalAmount - (b.TotalAmount - b.NowTotalAmount)));
                }
                if (sort == "count")
                {
                    res.Sort((b, a) => a.Count - b.Count);
                }
                return(res);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message, ex);
                throw ex;
            }
        }
        public async Task <object> getNeedEmpty(string quoteCurrency)
        {
            try
            {
                var list = new List <string>();

                var nowPriceList = new DogNowPriceDao().ListDogNowPrice(quoteCurrency);

                foreach (var nowPriceItem in nowPriceList)
                {
                    if (nowPriceItem.SymbolName == "gxs" || nowPriceItem.SymbolName == "btc")
                    {
                        continue;
                    }
                    if (nowPriceItem.QuoteCurrency == "btc")
                    {
                        if (nowPriceItem.SymbolName == "btm" || nowPriceItem.SymbolName == "iost" || nowPriceItem.SymbolName == "icx")
                        {
                            continue;
                        }
                    }
                    if (nowPriceItem.QuoteCurrency == "eth")
                    {
                        if (nowPriceItem.SymbolName == "ela" || nowPriceItem.SymbolName == "smt" || nowPriceItem.SymbolName == "mana")
                        {
                            continue;
                        }
                    }

                    var nowPrice = nowPriceList.Find(it => it.SymbolName == nowPriceItem.SymbolName).NowPrice;

                    {
                        // 一个月内最上面
                        var maxPrice = new KlineDao().GetMaxPrice(quoteCurrency, nowPriceItem.SymbolName, DateTime.Now.AddDays(-30));
                        var minPrice = new KlineDao().GetMinPrice(quoteCurrency, nowPriceItem.SymbolName, DateTime.Now.AddDays(-30));
                        if (nowPrice >= maxPrice)
                        {
                            list.Add(nowPriceItem.SymbolName);
                            continue;
                        }
                        if (nowPrice <= minPrice)
                        {
                            continue;
                        }
                        if ((nowPrice - minPrice) > (maxPrice - nowPrice) * 2)
                        {
                            list.Add(nowPriceItem.SymbolName);
                        }
                    }

                    {
                        // 一周内最上面
                        var maxPrice = new KlineDao().GetMaxPrice(quoteCurrency, nowPriceItem.SymbolName, DateTime.Now.AddDays(-7));
                        var minPrice = new KlineDao().GetMinPrice(quoteCurrency, nowPriceItem.SymbolName, DateTime.Now.AddDays(-7));
                        if (nowPrice >= maxPrice)
                        {
                            list.Add(nowPriceItem.SymbolName);
                            continue;
                        }
                        if (nowPrice <= minPrice)
                        {
                            continue;
                        }
                        if ((nowPrice - minPrice) > (maxPrice - nowPrice) * 3)
                        {
                            list.Add(nowPriceItem.SymbolName);
                        }
                    }

                    {
                        // 一天内最上面
                        var maxPrice = new KlineDao().GetMaxPrice(quoteCurrency, nowPriceItem.SymbolName, DateTime.Now.AddDays(-1));
                        var minPrice = new KlineDao().GetMinPrice(quoteCurrency, nowPriceItem.SymbolName, DateTime.Now.AddDays(-1));
                        if (nowPrice >= maxPrice)
                        {
                            list.Add(nowPriceItem.SymbolName);
                            continue;
                        }
                        if (nowPrice <= minPrice)
                        {
                            continue;
                        }
                        if ((nowPrice - minPrice) > (maxPrice - nowPrice) * 4)
                        {
                            list.Add(nowPriceItem.SymbolName);
                        }
                    }
                }

                return(list);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message, ex);
                throw ex;
            }
        }