public static void Record(string coin, HistoryKline line) { var dao = new KlineDao(); dao.CheckTable(coin); dao.Record(coin, line); }
public async Task <object> kline(string userName, string name, DateTime date) { try { var begin = date.AddMinutes(-60 * 24); var end = date.AddMinutes(10); var buyList = await new PigMoreStatisticsDao().ListBuy(userName, name, begin, end); var sellList = await new PigMoreStatisticsDao().ListSell(userName, name, begin, end); var klineList = new KlineDao().ListKline(name, begin, end); return(new { buyList = buyList.Select(it => new { it.BDate, it.BTradeP }), sellList = sellList.Select(it => new { it.SDate, it.STradeP }), klineList = klineList.Select(it => new { it.Close, it.Id, it.High }) }); } catch (Exception ex) { logger.Error(ex.Message, ex); return(null); } }
public async Task <object> symbolKline(string userName, string symbolName, string quoteCurrency, int day) { try { var begin = DateTime.Now.AddDays(-60 * 24 * day); var end = DateTime.Now; var buyList = await new DogMoreStatisticsDao().ListBuy(userName, symbolName, quoteCurrency, begin, end); var sellList = await new DogMoreStatisticsDao().ListSell(userName, symbolName, quoteCurrency, begin, end); var klineList = new KlineDao().ListTodayKline(symbolName, quoteCurrency, begin, end); return(new { buyList = buyList.Select(it => new { it.BuyDate, it.BuyTradePrice }), sellList = sellList.Select(it => new { it.SellDate, it.SellTradePrice }), klineList = klineList.Select(it => new { it.Close, it.Id, it.High }) }); } catch (Exception ex) { logger.Error(ex.Message, ex); throw ex; } }
public static void InitKlineInToPool(CommonSymbol symbol) { try { var period = "1min"; var key = HistoryKlinePools.GetKey(symbol, period); var dao = new KlineDao(); var lastKlines = dao.List24HourKline(symbol.QuoteCurrency, symbol.BaseCurrency); if (lastKlines.Count < 900) { logger.Error($"{symbol.BaseCurrency},{symbol.QuoteCurrency}数据量太少{lastKlines.Count},无法分析啊:"); } if (lastKlines.Count > 600) { HistoryKlinePools.Init(key, lastKlines); } } catch (Exception ex) { logger.Error("InitOneKine --> " + ex.Message, ex); } }
public async Task <object> DoEmpty(string userName, string symbolName, string quoteCurrency) { // 立马空单 var symbols = CoinUtils.GetAllCommonSymbols("usdt"); var symbol = symbols.Find(it => it.BaseCurrency == symbolName); var dao = new KlineDao(); var lastKlines = dao.List24HourKline(symbol.QuoteCurrency, symbol.BaseCurrency); if (Utils.GetDateById(lastKlines[0].Id) < DateTime.Now.AddMinutes(-3)) { // 数据是3分钟前的数据, 不合理. return("没有拿到最近3分钟的数据"); } // 大于今天最小值30%才行 or 大于24小时60% 并且大于历史最小的15% var control = new DogControlDao().GetDogControl(symbolName, quoteCurrency); if (control == null) { return("没有管控"); } var nowPrice = lastKlines[0].Close; if (nowPrice < control.HistoryMin && nowPrice < control.HistoryMin + (control.HistoryMax - control.HistoryMin) * (decimal)0.12) { return("要大于区间12%"); } var min24 = lastKlines.Min(it => it.Close); var minToday = lastKlines.Where(it => Utils.GetDateById(it.Id) >= DateTime.Now.Date).Min(it => it.Close); if (nowPrice > min24 * (decimal)1.60 || nowPrice > minToday * (decimal)1.30) { CoinTrade.DoEmpty(symbol, userName, AccountConfigUtils.GetAccountConfig(userName).MainAccountId); return(new { nowPrice, min24, minToday, DoEmpty = true }); } return(new { nowPrice, min24, minToday }); }
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; } }
/// <summary> /// 获取行情数据 /// </summary> /// <param name="symbol"></param> public static void InitOneKine(CommonSymbol symbol) { try { var begin = DateTime.Now; PlatformApi api = PlatformApi.GetInstance("xx"); // 下面api和角色无关. 随便指定一个xx var period = "1min"; var klines = api.GetHistoryKline(symbol.BaseCurrency + symbol.QuoteCurrency, period, 10); var key = HistoryKlinePools.GetKey(symbol, period); //HistoryKlinePools.Init(key, klines); var totalMilliseconds = (DateTime.Now - begin).TotalMilliseconds; if ((DateTime.Now - begin).TotalSeconds > 5) { logger.Error("一次请求时间太长,达到:" + totalMilliseconds); } // 记录到数据库, 记录最近得数据。 Record(symbol.BaseCurrency, klines[0]); var dao = new KlineDao(); var lastKlines = dao.List24HourKline(symbol.QuoteCurrency, symbol.BaseCurrency); var findList = lastKlines.FindAll(it => klines.Find(item => item.Id == it.Id) != null).ToList(); foreach (var kline in klines) { var finds = findList.FindAll(it => it.Id == kline.Id); if (finds.Count > 1) { // 删除,新增 new KlineDao().DeleteAndRecordKlines(symbol.BaseCurrency, kline); } else if (finds.Count == 1) { if (finds[0].Low != kline.Low || finds[0].High != kline.High || finds[0].Open != kline.Open || finds[0].Close != kline.Close) { // 删除新增 new KlineDao().DeleteAndRecordKlines(symbol.BaseCurrency, kline); } } else { // 直接新增 Record(symbol.BaseCurrency, kline); } } if (lastKlines.Count < 900) { logger.Error($"{symbol.BaseCurrency}数据量太少{lastKlines.Count},无法分析啊:" + totalMilliseconds); } if (lastKlines.Count > 600) { HistoryKlinePools.Init(key, lastKlines); } totalMilliseconds = (DateTime.Now - begin).TotalMilliseconds; if ((DateTime.Now - begin).TotalSeconds > 9) { logger.Error("一次请求时间太长 含插入数据库,达到:" + totalMilliseconds); } } catch (Exception ex) { logger.Error("InitOneKine --> " + ex.Message, ex); } }
public static void InitMarketInDBFromOut(CommonSymbol symbol, List <HistoryKline> klines) { try { var dogControl = DogControlUtils.GetDogControl(symbol.BaseCurrency, symbol.QuoteCurrency); if (dogControl == null) { Console.WriteLine("InitMarketInDBFromOut dogControl is null"); return; } var dao = new KlineDao(); var dogMoreBuyDao = new DogMoreBuyDao(); var dogEmptySellDao = new DogEmptySellDao(); // 去数据库中拉取数据, 判断是否超过5分钟, 或者是否离目标差4%, var lastKlines = dao.ListKlines(symbol.QuoteCurrency, symbol.BaseCurrency, 20); var findList = lastKlines.FindAll(it => klines.Find(item => item.Id == it.Id) != null).ToList(); klines.Sort((a, b) => (int)(a.Id - b.Id)); foreach (var kline in klines) { var finds = findList.FindAll(it => it.Id == kline.Id); if (finds.Count > 1) { //Console.WriteLine("新增数据 finds.Count > 1"); // 删除,新增 dao.DeleteAndRecordKlines(symbol.QuoteCurrency, symbol.BaseCurrency, kline); } else if (finds.Count == 1) { if (finds[0].Low != kline.Low || finds[0].High != kline.High || finds[0].Open != kline.Open || finds[0].Close != kline.Close) { // 删除新增 从外面来的数据, 如果不一致, 不插入 dao.DeleteAndRecordKlines(symbol.QuoteCurrency, symbol.BaseCurrency, kline); } } else { // 新增 //Console.WriteLine($"新增数据 {symbol.BaseCurrency} {symbol.QuoteCurrency}"); dao.DeleteAndRecordKlines(symbol.QuoteCurrency, symbol.BaseCurrency, kline); } } { var last24Klines = dao.List24HourKline(symbol.QuoteCurrency, symbol.BaseCurrency); var todayKlines = last24Klines.FindAll(it => Utils.GetDateById(it.Id) > DateTime.Now.Date).ToList(); var minutesKlines = last24Klines.FindAll(it => Utils.GetDateById(it.Id) > DateTime.Now.Date.AddMinutes(-30)).ToList(); var nearMaxPrice = (decimal)0; var todayMinPrice = (decimal)0; var todayMaxPrice = (decimal)0; if (todayKlines.Count > 0) { todayMaxPrice = todayKlines.Max(it => it.Close); todayMinPrice = todayKlines.Min(it => it.Close); } if (minutesKlines.Count > 0) { nearMaxPrice = minutesKlines.Max(it => it.Close); } var lastKline = klines[klines.Count - 1]; new DogNowPriceDao().CreateDogNowPrice(new DogNowPrice { NowPrice = lastKline.Close, NowTime = lastKline.Id, QuoteCurrency = symbol.QuoteCurrency, SymbolName = symbol.BaseCurrency, TodayMaxPrice = todayMaxPrice, TodayMinPrice = todayMinPrice, NearMaxPrice = nearMaxPrice }); } } catch (Exception ex) { logger.Error("InitMarketInDB --> " + ex.Message, ex); } }