Ejemplo n.º 1
0
        //将单元的下单数量分配到主账户
        public static Dictionary <int, int> GetOrderAccount(Order order)
        {
            Dictionary <int, int> order_items = new Dictionary <int, int>();
            Unit unit = UnitRA.Get("U_" + order.unit_id);
            List <AccountGroupItem> items = AccountGroupRA.List4Unit(order.unit_id);
            int total = 0;

            if (order.type_enum == OrderTypeEnum.Buy)
            {
                if (unit.priority_strategy_enum == PriorityStrategyEnum.Natural)
                {
                    items = items.OrderBy(i => i.sort_buy).ToList();
                }
                else
                {
                    items = items.OrderByDescending(i => i.capital_available).ToList();
                }
                foreach (AccountGroupItem item in items)
                {
                    int buyable = (item.capital_available == decimal.MaxValue) ? (order.count - total) : (int)(item.capital_available / 100 / order.price) * 100;
                    int ct      = Math.Min(buyable, (order.count - total));
                    order_items.Add(item.account_id, ct);
                    total += ct;
                    if (ct == order.count)
                    {
                        break;
                    }
                }
            }
            else
            {
                items = items.OrderBy(i => i.sort_sell).ToList();
                foreach (AccountGroupItem item in items)
                {
                    int sellable = PositionRA.GetSellable(order.unit_id, order.code, item.account_id);
                    int ct       = Math.Min(sellable, (order.count - total));
                    order_items.Add(item.account_id, ct);
                    total += ct;
                    if (ct == order.count)
                    {
                        break;
                    }
                }
            }
            return(order_items);
        }
Ejemplo n.º 2
0
        public Result <int> Count(Order model)
        {
            model.user_id = user_id;
            ApiResultEnum result = LimitBiz.CheckStatus(model);

            if (result != ApiResultEnum.Success && result != ApiResultEnum.Order_Count_Error && (result != ApiResultEnum.Order_Price_Error || model.type_enum == OrderTypeEnum.Buy))
            {
                return(Result(ApiResultEnum.Success, 0));
            }

            int unit_count = LimitBiz.GetUnitCount(model);

            if (unit_count == 0)
            {
                return(Result(ApiResultEnum.Success, 0));
            }

            List <int> order_items;
            int        account_count = 0;

            if (model.account_id == 0)
            {
                order_items = AccountGroupRA.List4Unit(model.unit_id).Select(g => g.account_id).ToList();
            }
            else
            {
                order_items = new List <int> {
                    model.account_id
                }
            };
            foreach (int account_id in order_items)
            {
                model.account_id = account_id;
                account_count   += LimitBiz.GetAccountCount(model);
            }
            return(Result(ApiResultEnum.Success, Math.Min(unit_count, account_count)));
        }