public override void HandleCore(PrivateMessageReceivedContext context)
        {
            MahuaApi.SendPrivateMessage(context.FromQq)
            .Text("Begin Get User Orders")
            .Done();

            var userAssets = _assetService.GetUserAssets();

            if (userAssets.Any())
            {
                var orderApi = _okexApiFactory.Create <IOrderApi>();
                var orders   = new List <Order>();
                var assets   = userAssets.OrderByDescending(x => x.Value.AsUsdt).ToArray();
                foreach (var kv in assets)
                {
                    if (kv.Key == "usdt")
                    {
                        continue;
                    }
                    var market         = $"{kv.Key}_usdt";
                    var getOrdersInput = new GetOrdersInput
                    {
                        Order_Id = "-1",
                        Symbol   = market,
                    }.WithSign();
                    var output = orderApi.GetOrders(getOrdersInput).GetAwaiter().GetResult();
                    if (output.Result)
                    {
                        orders.AddRange(output.Orders);
                    }
                    else
                    {
                        MahuaApi.SendPrivateMessage(context.FromQq)
                        .Text($"{market} No Orders")
                        .Done();
                    }
                }

                foreach (var order in orders.Where(x => x.Status == Order.OrderStatus.Doing || x.Status == Order.OrderStatus.Some))
                {
                    var dealPercetion = order.DealAmount / order.Amount * 100M;
                    var ticker        = _tickerProvider.GetTikcer(order.Symbol);
                    MahuaApi.SendPrivateMessage(context.FromQq)
                    .Text($"{order.Symbol} {order.Type:G}")
                    .Newline()
                    .Text($"Price:{order.Price:E6}")
                    .Newline()
                    .Text($"Amount:({dealPercetion:###.00}){order.DealAmount:e2}/{order.Amount:e2} ")
                    .Newline()
                    .Text($"USD:{order.DealAmount * ticker.Last:0000000.00}/{order.Amount * ticker.Last:0000000.00}")
                    .Done();
                }
            }
            else
            {
                MahuaApi.SendPrivateMessage(context.FromQq)
                .Text("No Orders")
                .Done();
            }
        }
        public override void HandleCore(PrivateMessageReceivedContext context)
        {
            MahuaApi.SendPrivateMessage(context.FromQq)
            .Text("Begin Get User Asset")
            .Done();

            var userAssets = _userAssetService.GetUserAssets();

            if (userAssets.Any())
            {
                var assets = userAssets.Where(x => x.Value.AsUsdt > 1).OrderByDescending(x => x.Value.AsUsdt).ToArray();
                foreach (var kv in assets)
                {
                    MahuaApi.SendPrivateMessage(context.FromQq)
                    .Text(kv.Key.ToUpperInvariant())
                    .Newline()
                    .Text((kv.Value.Balance + kv.Value.Locked).ToString("e2"))
                    .Newline()
                    .Text(kv.Value.AsUsdt.ToString("'$' 0000000.000"))
                    .Done();
                }

                var totalusd  = assets.Sum(x => x.Value.AsUsdt);
                var totalyuan = totalusd * 6.5M;
                MahuaApi.SendPrivateMessage(context.FromQq)
                .Text("Total:")
                .Text(totalusd.ToString("'$' 0000000.00"))
                .Text(totalyuan.ToString("'¥' 0000000.00"))
                .Done();
            }
            else
            {
                MahuaApi.SendPrivateMessage(context.FromQq, "获取失败或没有任何资产");
            }
        }
        public void Recode()
        {
            var userAssets = _userAssetService.GetUserAssets();

            _userAssetDao.Insert(new UserAssetEntity
            {
                UserAssets = userAssets,
                CreateTime = DateTime.Now,
            });
        }
Esempio n. 4
0
        public void ReportFinishedOrders()
        {
            var userAssets    = _userAssetService.GetUserAssets();
            var systemOptions = SystemOptions.Instance;
            var list          = new List <Order>();

            using (var session = MahuaRobotManager.Instance.CreateSession())
            {
                var api = session.MahuaApi;
                foreach (var kv in userAssets)
                {
                    if (kv.Key == "usdt")
                    {
                        continue;
                    }
                    var market = $"{kv.Key}_usdt";
                    var input  = new GetOrderHistoryInput
                    {
                        CurrentPage = 1,
                        PageLength  = 100,
                        Status      = (int)GetOrderHistoryInput.GetOrderHistoryInputStatus.Finished,
                        Symbol      = market
                    }.WithSign();
                    var orderHistory = _okexApiFactory.Create <IOrderApi>().GetOrderHistory(input).GetAwaiter().GetResult();
                    if (orderHistory.Result)
                    {
                        list.AddRange(orderHistory.Orders);
                    }
                    else
                    {
                        api.SendPrivateMessage(systemOptions.MasterQq, $"get {market} orders failed");
                    }
                }

                lock (Locker)
                {
                    if (!FinishedOrders.Any())
                    {
                        FinishedOrders.AddRange(list.Select(x => x.OrderId));
                    }
                    else
                    {
                        var newOrders = list.Where(x => !FinishedOrders.Contains(x.OrderId)).ToArray();
                        foreach (var order in newOrders)
                        {
                            var ticker = _tickerProvider.GetTikcer(order.Symbol);
                            switch (order.Status)
                            {
                            case Order.OrderStatus.Canceled:
                                var step = api.SendPrivateMessage(systemOptions.MasterQq)
                                           .Text($"{order.Symbol} {order.Type:G} CANCELED")
                                           .Newline()
                                           .Text($"Price:{order.Price:E6}")
                                           .Newline();
                                if (order.DealAmount != 0)
                                {
                                    step
                                    .Text($"Amount:{order.DealAmount:e2}/{order.Amount:e2} ")
                                    .Newline()
                                    .Text($"USD:{order.Amount * ticker.Last:0000000.00}")
                                    .Done();
                                }
                                else
                                {
                                    step.Done();
                                }
                                break;

                            case Order.OrderStatus.Finished:
                                api.SendPrivateMessage(systemOptions.MasterQq)
                                .Text($"{order.Symbol} {order.Type:G} FINISHED")
                                .Newline()
                                .Text($"Price:{order.Price:E6}")
                                .Newline()
                                .Text($"Amount:{order.DealAmount:e2}/{order.Amount:e2} ")
                                .Newline()
                                .Text($"USD:{order.Amount * ticker.Last:0000000.00}")
                                .Done();
                                break;

                            case Order.OrderStatus.Doing:
                            case Order.OrderStatus.Some:
                            case Order.OrderStatus.Canceling:
                                api.SendPrivateMessage(systemOptions.MasterQq)
                                .Text($"{order.Symbol} {order.Type:G} {order.Status:D}")
                                .Newline()
                                .Text($"Price:{order.Price:E6}")
                                .Newline()
                                .Text($"Amount:{order.DealAmount:e2}/{order.Amount:e2} ")
                                .Newline()
                                .Text($"USD:{order.DealAmount * ticker.Last:0000000.00}")
                                .Done();
                                break;

                            default:
                                throw new ArgumentOutOfRangeException();
                            }
                        }
                        FinishedOrders.AddRange(newOrders.Select(x => x.OrderId).ToArray());
                    }
                }
            }
        }