public static bool CheckBalance() { i++; if (usdt == null) { var accountId = AccountConfig.mainAccountId; var accountInfo = new AccountOrder().AccountBalance(accountId); usdt = accountInfo.data.list.Find(it => it.currency == "usdt"); } if (usdt.balance < 10 && i % 100 == 0) { Console.WriteLine($"--------------------- 余额{usdt.balance}----------------------------"); } if (usdt.balance < 6) { Console.WriteLine("---------------------余额小于6,无法交易----------------------------"); return(false); } return(true); }
public static decimal GetRecommendBuyAmount() { if (noSellCount < 0) { noSellCount = new CoinDao().GetAllNoSellRecordCount(); } if (usdt == null) { var accountId = AccountConfig.mainAccountId; var accountInfo = new AccountOrder().AccountBalance(accountId); usdt = accountInfo.data.list.Find(it => it.currency == "usdt"); } if (noSellCount > 180) { return(usdt.balance / 60); } // 让每个承受8轮 return(usdt.balance / (240 - noSellCount)); }
void Query() { var lstAso = DataFactory.Instance.GetAccountSubjectExecuter().List(); var package = DataFactory.Instance.GetAccountBalanceExecuter().Query( CommonUtils.TryParseInt(m_filter["beginYear"].ToString()), CommonUtils.TryParseInt(m_filter["beginPeriod"].ToString()), CommonUtils.TryParseInt(m_filter["endYear"].ToString()), CommonUtils.TryParseInt(m_filter["endPeriod"].ToString()) ); var lstBegin = package.ListBeginBalnace; var lstOccurs = package.ListCurrentOccurs; List <AccountBalanceItem> lstItemSource = new List <AccountBalanceItem>(); lstAso.ForEach(aso => { var item = new AccountBalanceItem(); item.Id = aso.id; item.No = aso.no; item.Name = aso.name; if (lstBegin != null) { item.begin = lstBegin.FirstOrDefault(b => b.accountSubjectId == aso.id); } if (lstOccurs != null) { item.current = lstOccurs.FirstOrDefault(b => b.accountSubjectId == aso.id); } if (item.begin == null) { item.begin = new AccountAmountItem(); } if (item.current == null) { item.current = new AccountAmountItem(); } item.end = new AccountAmountItem { accountSubjectId = aso.id, debitsAmount = item.begin.debitsAmount + item.current.debitsAmount, creditAmount = item.begin.creditAmount + item.current.creditAmount }; if (aso.rootId > 0) { var rootItem = lstItemSource.FirstOrDefault(a => a.Id == aso.rootId); if (rootItem != null) { rootItem.begin.creditAmount += item.begin.creditAmount; rootItem.begin.debitsAmount += item.begin.debitsAmount; rootItem.current.creditAmount += item.current.creditAmount; rootItem.current.debitsAmount += item.current.debitsAmount; rootItem.end.creditAmount += item.end.creditAmount; rootItem.end.debitsAmount += item.end.debitsAmount; } } else { lstItemSource.Add(item); } }); datagrid.ItemsSource = lstItemSource; CalcTotal(); comment.Text = string.Format("{0} 年度 {1} 期间 到 {2} 年度 {3} 期间", m_filter["beginYear"], m_filter["beginPeriod"], m_filter["endYear"], m_filter["endPeriod"]); }
public static void ClearData() { usdt = null; noSellCount = -1; }
public static void BusinessRun(string coin) { var accountId = AccountConfig.mainAccountId; // 获取最近行情 decimal lastLow; decimal nowOpen; var flexPointList = new CoinAnalyze().Analyze(coin, "usdt", out lastLow, out nowOpen); if (flexPointList.Count == 0) { logger.Error($"--------------> 分析结果数量为0 {coin}"); return; } // 分析是否下跌, 下跌超过一定数据,可以考虑 var list = new CoinDao().ListNoSellRecord(coin); Console.WriteLine($"未售出{list.Count}"); decimal recommendAmount = GetRecommendBuyAmount(); Console.Write($"------------>{recommendAmount}"); if (false && !flexPointList[0].isHigh && CheckBalance() && recommendAmount > 2) { // 最后一次是高位 if (list.Count <= 0 && CheckCanBuy(nowOpen, flexPointList[0].open)) { // 可以考虑 decimal buyQuantity = recommendAmount / nowOpen; buyQuantity = decimal.Round(buyQuantity, GetBuyQuantityPrecisionNumber(coin)); decimal buyPrice = decimal.Round(nowOpen * (decimal)1.005, getPrecisionNumber(coin)); ResponseOrder order = new AccountOrder().NewOrderBuy(accountId, buyQuantity, buyPrice, null, coin, "usdt"); if (order.status != "error") { new CoinDao().InsertLog(new BuyRecord() { BuyCoin = coin, BuyPrice = buyPrice, BuyDate = DateTime.Now, HasSell = false, BuyOrderResult = JsonConvert.SerializeObject(order), BuyAnalyze = JsonConvert.SerializeObject(flexPointList), BuyAmount = buyQuantity, UserName = AccountConfig.userName }); ClearData(); } else { logger.Error($"下单结果 coin{coin} accountId:{accountId} 购买数量{buyQuantity} nowOpen{nowOpen} {JsonConvert.SerializeObject(order)}"); logger.Error($"下单结果 分析 {JsonConvert.SerializeObject(flexPointList)}"); } } if (list.Count > 0) { // 获取最小的那个, 如果有, decimal minBuyPrice = 9999; foreach (var item in list) { if (item.BuyPrice < minBuyPrice) { minBuyPrice = item.BuyPrice; } } // 再少于5%, decimal pecent = list.Count >= 15 ? (decimal)1.03 : (decimal)1.025; if (nowOpen * pecent < minBuyPrice) { decimal buyQuantity = recommendAmount / nowOpen; buyQuantity = decimal.Round(buyQuantity, GetBuyQuantityPrecisionNumber(coin)); decimal buyPrice = decimal.Round(nowOpen * (decimal)1.005, getPrecisionNumber(coin)); ResponseOrder order = new AccountOrder().NewOrderBuy(accountId, buyQuantity, buyPrice, null, coin, "usdt"); if (order.status != "error") { new CoinDao().InsertLog(new BuyRecord() { BuyCoin = coin, BuyPrice = buyPrice, BuyDate = DateTime.Now, HasSell = false, BuyOrderResult = JsonConvert.SerializeObject(order), BuyAnalyze = JsonConvert.SerializeObject(flexPointList), UserName = AccountConfig.userName, BuyAmount = buyQuantity }); usdt = null; noSellCount = -1; } else { logger.Error($"下单结果 coin{coin} accountId:{accountId} 购买数量{buyQuantity} nowOpen{nowOpen} {JsonConvert.SerializeObject(order)}"); logger.Error($"下单结果 分析 {JsonConvert.SerializeObject(flexPointList)}"); } } } } // 查询数据库中已经下单数据,如果有,则比较之后的最高值,如果有,则出售 if (list.Count > 0) { foreach (var item in list) { // 分析是否 大于 decimal itemNowOpen = 0; decimal higher = new CoinAnalyze().AnalyzeNeedSell(item.BuyPrice, item.BuyDate, coin, "usdt", out itemNowOpen); if (CheckCanSell(item.BuyPrice, higher, itemNowOpen)) { decimal sellAmount = item.BuyAmount * (decimal)0.99; sellAmount = decimal.Round(sellAmount, getSellPrecisionNumber(coin)); // 出售 decimal sellPrice = decimal.Round(itemNowOpen * (decimal)0.985, getPrecisionNumber(coin)); ResponseOrder order = new AccountOrder().NewOrderSell(accountId, sellAmount, sellPrice, null, coin, "usdt"); if (order.status != "error") { new CoinDao().SetHasSell(item.Id, sellAmount, JsonConvert.SerializeObject(order), JsonConvert.SerializeObject(flexPointList)); } else { logger.Error($"出售结果 coin{coin} accountId:{accountId} 出售数量{sellAmount} itemNowOpen{itemNowOpen} higher{higher} {JsonConvert.SerializeObject(order)}"); logger.Error($"出售结果 分析 {JsonConvert.SerializeObject(flexPointList)}"); } usdt = null; noSellCount = -1; } } } }