Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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"]);
        }
Esempio n. 4
0
 public static void ClearData()
 {
     usdt        = null;
     noSellCount = -1;
 }
Esempio n. 5
0
        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;
                    }
                }
            }
        }