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; } }
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; } }