Example #1
0
        public Result PositionMoveIn(PositionMoveIn model)
        {
            StockInfo stock = StockInfoBiz.GetStock(model.code);

            if (stock == null || model.unit_id == 0 || model.account_id == 0 || model.price_cost == 0 || model.count == 0)
            {
                return(Result(ApiResultEnum.Failed));
            }

            Position position = PositionRA.Get("P_" + model.code + "_A_" + model.account_id + "_U_" + model.unit_id);
            Deal     deal     = new Deal()
            {
                code       = model.code,
                name       = stock.name,
                count      = model.count,
                price      = model.price_cost,
                money      = model.count * model.price_cost,
                unit_id    = model.unit_id,
                account_id = model.account_id,
                type_enum  = OrderTypeEnum.Buy,
            };

            TradeBiz.AdjustPosition(position, deal, model.price_cost, 2);
            return(Result(ApiResultEnum.Success));
        }
Example #2
0
        public Result Cancel(Cancel model)
        {
            Dictionary <int, string> dic = new Dictionary <int, string>();

            model.trade_nos.ForEach(trade_no =>
            {
                List <Order> orders = OrderRA.List4Trade(trade_no);
                foreach (Order order in orders)
                {
                    if (model.unit_id == order.unit_id && !string.IsNullOrWhiteSpace(order.order_no) && order.cancel_count == 0 && order.deal_count < order.count)
                    {
                        if (dic.ContainsKey(order.account_id))
                        {
                            dic[order.account_id] += "," + order.order_no;
                        }
                        else
                        {
                            dic.Add(order.account_id, order.order_no);
                        }
                    }
                }
            });
            foreach (var kvp in dic)
            {
                TradeBiz.Cancel(kvp.Key, kvp.Value);
            }
            return(Result(ApiResultEnum.Success));
        }
Example #3
0
        public Result Order(Order model)
        {
            model.account_id = 0;
            model.user_id    = user_id;
            model.platform   = platform;

            return(Result(TradeBiz.Order(model)));
        }
Example #4
0
        public Result OrderLimit(Order model)
        {
            if (model.account_id == 0)
            {
                return(Result(ApiResultEnum.InvalidRequest));
            }
            model.user_id  = user_id;
            model.platform = platform;

            return(Result(TradeBiz.Order(model)));
        }
Example #5
0
        public Result Delete(Model.DB.Account model)
        {
            var account_groups = AccountGroupDA.List4Account(model.id);

            if (account_groups.Count > 0)
            {
                return(Result(ApiResultEnum.Cited, string.Join(",", account_groups.Select(u => u.code))));
            }

            model.created_by = user_id;
            ApiResultEnum result = AccountDA.Delete(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                TradeBiz.RemoveAccount(model.id);
                AccountRA.Delete("A_" + model.id);
            }
            return(Result(result));
        }
Example #6
0
        public Result UpdateItems(Model.DB.AccountGroup model)
        {
            model.items = model.items.OrderBy(i => i.sort_buy).AsEnumerable().DistinctBy(i => i.account_id).ToList();
            ApiResultEnum result = AccountGroupDA.UpdateItems(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                var units = UnitDA.List4AccountGroup(model.id);
                foreach (var kvp in units)
                {
                    UnitRA.UpdatePriorityStrategy(model.priority_strategy, "U_" + kvp.id);
                }
                AccountGroupRA.Delete4AccountGroup(model.id);
                List <Model.DB.AccountGroupItem> items = AccountGroupDA.ListItems4AccountGroup(model.id);
                foreach (Model.DB.AccountGroupItem item in items)
                {
                    OpenCloseBiz.LoadAccountGroupItem(item);
                }
                TradeBiz.RunCalculateValue();
            }
            return(Result(result));
        }
Example #7
0
        public Result Transfer(Transfer model)
        {
            string[] keys = TradeRA.KeySearch("D_" + model.deal_no + "_*_U_0");
            if (keys.Length > 0 && TradeRA.KeyExists("U_" + model.unit_id))
            {
                Deal deal = DealRA.Get(keys[0]);
                if (deal.type_enum == OrderTypeEnum.Sell)
                {
                    int sellable_count = PositionRA.GetSellable(model.unit_id, deal.code, deal.account_id);
                    if (deal.count > sellable_count)
                    {
                        return(Result(ApiResultEnum.Order_Account_Negative_Position));
                    }
                }

                deal.unit_id = model.unit_id;
                DealRA.UpdateUnit(model.unit_id, keys[0]);
                TradeRA.KeyRename(keys[0], keys[0].Substring(0, keys[0].Length - 1) + model.unit_id);
                TradeBiz.NewDeal(deal, deal.price, 1);
                return(Result(ApiResultEnum.Success));
            }
            return(Result(ApiResultEnum.Failed));
        }
Example #8
0
        public Result <List <AccountPosition> > ListAccountPosition(int account_id)
        {
            List <AccountPosition> list    = new List <AccountPosition>();
            List <Position>        list_in = (account_id == 0) ? PositionRA.List() : PositionRA.List4Account(account_id);

            list_in.ForEach(p =>
            {
                list.Add(new AccountPosition()
                {
                    account_id   = p.account_id,
                    account_name = p.account_name,
                    code         = p.code,
                    name         = p.name,
                    count        = 0,
                    count_in     = p.count
                });
            });
            List <Tuple <int, JY.PositionItem> > list_sys = new List <Tuple <int, JY.PositionItem> >();

            if (account_id > 0)
            {
                TradeBiz.QueryPosition(account_id).ForEach(p =>
                {
                    list_sys.Add(new Tuple <int, JY.PositionItem>(account_id, p));
                });
            }
            else
            {
                string[] keys = TradeRA.KeySearch("A_*");
                foreach (var key in keys)
                {
                    int id = int.Parse(key.Substring(2));
                    TradeBiz.QueryPosition(id).ForEach(p =>
                    {
                        list_sys.Add(new Tuple <int, JY.PositionItem>(id, p));
                    });
                }
            }
            foreach (var t in list_sys)
            {
                AccountPosition ap = list.Find(p => p.account_id == t.Item1 && p.code == t.Item2.code);
                if (ap == null)
                {
                    list.Add(new AccountPosition()
                    {
                        account_id   = t.Item1,
                        account_name = AccountRA.GetName(t.Item1),
                        code         = t.Item2.code,
                        name         = t.Item2.name,
                        count        = (int)decimal.Parse(t.Item2.count),
                        count_in     = 0
                    });
                }
                else
                {
                    ap.count = (int)decimal.Parse(t.Item2.count);
                }
            }

            return(Result(list));
        }