コード例 #1
0
        public static void Open()
        {
            HQService.SubscribeStart();
            var accounts = AccountDA.List <Account>();

            foreach (Account account in accounts)
            {
                LoadAccount(account);
            }

            var units = UnitDA.List <Unit>();

            foreach (Unit unit in units)
            {
                LoadUnit(unit);
            }

            var positions = PositionDA.List();

            foreach (Position position in positions)
            {
                LoadPosition(position);
            }

            var items = AccountGroupDA.ListItems();

            foreach (AccountGroupItem item in items)
            {
                LoadAccountGroupItem(item);
            }

            HQService.Get(positions.Select(p => p.code));
            TradeBiz.Start();
        }
コード例 #2
0
        public Result <List <Base> > List4Undirected()
        {
            UserRoleEnum             role = (UserRoleEnum)int.Parse(UserRA.Get(user_id.ToString(), "role"));
            List <Model.Common.Base> lst  = UnitDA.List4Undirected(role == UserRoleEnum.Administrator ? 0 : user_id);

            return(Result(lst));
        }
コード例 #3
0
        public Result UpdateUnits(UserUnits model)
        {
            ApiResultEnum result = UnitDA.UpdateUserID(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                string[] keys = TradeRA.KeySearch("U_*");
                foreach (string key in keys)
                {
                    string _user_id = TradeRA.Get(key, "user_id");
                    if (model.unit_ids.Contains(int.Parse(key.Substring(2))))
                    {
                        if (model.id != _user_id)
                        {
                            UnitRA.UpdateUserID(model.id, key);
                        }
                    }
                    else
                    {
                        if (model.id == _user_id)
                        {
                            UnitRA.UpdateUserID("0", key);
                        }
                    }
                }
            }
            return(Result(result));
        }
コード例 #4
0
        public Result <List <Base> > List4Filter()
        {
            UserRoleEnum role = (UserRoleEnum)int.Parse(UserRA.Get(user_id.ToString(), "role"));
            List <Base>  lst  = UnitDA.List <Base>(role == UserRoleEnum.Administrator ? 0 : user_id);

            return(Result(lst));
        }
コード例 #5
0
        public Result <List <Model.DB.Unit> > List()
        {
            UserRoleEnum         role = (UserRoleEnum)int.Parse(UserRA.Get(user_id.ToString(), "role"));
            List <Model.DB.Unit> lst  = UnitDA.List <Model.DB.Unit>(role == UserRoleEnum.Administrator ? 0 : user_id);

            return(Result(lst));
        }
コード例 #6
0
        public Result UpdateRatioFreezing(Model.DB.Unit model)
        {
            ApiResultEnum result = UnitDA.UpdateRatioFreezing(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                UnitRA.UpdateRatioFreezing(model.ratio_freezing, "U_" + model.id);
            }
            return(Result(result));
        }
コード例 #7
0
        public Result UpdateStatus(Status model)
        {
            ApiResultEnum result = UnitDA.UpdateStatus(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                UnitRA.UpdateStatus(model.status, "U_" + model.id);
            }
            return(Result(result));
        }
コード例 #8
0
        public Result Update(Model.DB.Unit model)
        {
            ApiResultEnum result = UnitDA.Update(model);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                OpenCloseBiz.LoadUnit(model, false);
            }
            return(Result(result));
        }
コード例 #9
0
 public static void RunUnitCapitalMonitor()
 {
     string[] keys = TradeRA.KeySearch("U_*");
     foreach (string key in keys)
     {
         Unit unit = UnitRA.Get(key);
         if (unit.user_id > 0 && unit.ratio_warning > 0)
         {
             if (unit.capital_total < unit.ratio_warning * unit.capital_scale && unit.status_order_enum == StatusOrderEnum.Allowed)
             {
                 StatusOrder model = new StatusOrder(unit.id, StatusOrderEnum.NoBuying);
                 UnitDA.UpdateStatusOrder(model);
                 UnitRA.UpdateStatusOrder(model.status, "U_" + model.id);
                 UserDA.ListParents(unit.user_id).ForEach(user_id =>
                 {
                     MessageBiz.Send(user_id.ToString(), MessageTypeEnum.Unit_Warning, "单元[" + unit.code + "]资产已低于预警线,被禁止买入");
                 });
                 NLog.Info(string.Format("单元[{0}]资产已低于预警线,被禁止买入。总资产:{1}", unit.code, unit.capital_total));
             }
             else if (unit.capital_total > unit.ratio_warning * unit.capital_scale && unit.status_order_enum == StatusOrderEnum.NoBuying)
             {
                 StatusOrder model = new StatusOrder(unit.id, StatusOrderEnum.Allowed);
                 UnitDA.UpdateStatusOrder(model);
                 UnitRA.UpdateStatusOrder(model.status, "U_" + model.id);
                 MessageBiz.Send(unit.user_id.ToString(), MessageTypeEnum.Unit_Recovery, "单元[" + unit.code + "]资产已高于预警线,恢复交易");
             }
         }
         if (unit.user_id > 0 && unit.ratio_close_position > 0 && unit.capital_total < unit.ratio_close_position * unit.capital_scale)
         {
             List <Position> list = PositionRA.List4Unit(unit.id).Where(p => p.count_sellable > 0).ToList();
             if (list.Count > 0)
             {
                 list.ForEach(p =>
                 {
                     Order order = new Order()
                     {
                         code      = p.code,
                         count     = p.count_sellable,
                         type_enum = OrderTypeEnum.Sell,
                         unit_id   = unit.id,
                         price     = DataBiz.GetPriceByPriceType(p.code, OrderPriceEnum.Buy5),
                         user_id   = 1,
                         platform  = 1
                     };
                     Order(order);
                 });
                 UserDA.ListParents(unit.user_id).ForEach(user_id =>
                 {
                     MessageBiz.Send(unit.id.ToString(), MessageTypeEnum.Unit_Close_Position, "单元[" + unit.code + "]资产已低于平仓线,被强制平仓");
                 });
                 NLog.Info(string.Format("单元[{0}]资产已低于平仓线,被强制平仓。总资产:{1}", unit.code, unit.capital_total));
             }
         }
     }
 }
コード例 #10
0
        public Result <int> Add(Model.DB.Unit model)
        {
            int id = 0;

            model.created_by        = user_id;
            model.status_order_enum = StatusOrderEnum.Allowed;
            ApiResultEnum result = UnitDA.Add(model, ref id);

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                model.id = id;
                OpenCloseBiz.LoadUnit(model);
            }
            return(Result(result, id));
        }
コード例 #11
0
        public Result Delete(Model.DB.AccountGroup model)
        {
            var units = UnitDA.List4AccountGroup(model.id);

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

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

            if (result == ApiResultEnum.Success && MonitorRA.GetStatusTrade() != 0)
            {
                AccountGroupRA.Delete4AccountGroup(model.id);
            }
            return(Result(result, string.Empty));
        }
コード例 #12
0
 public static void SaveUnitCapital(Dictionary <int, decimal[]> dic)
 {
     string[] keys = TradeRA.KeySearch("U_*");
     foreach (string key in keys)
     {
         Unit unit = UnitRA.Get(key);
         UnitDA.UpdateCapital(unit);
         Statement statement = new Statement()
         {
             unit_id             = unit.id,
             capital_total       = unit.capital_total,
             capital_stock_value = unit.capital_stock_value,
             capital_inout       = unit.capital_inout,
             fee    = dic.ContainsKey(unit.id) ? dic[unit.id][0] : 0,
             profit = dic.ContainsKey(unit.id) ? dic[unit.id][1] : 0,
         };
         StatementDA.Add(statement);
     }
 }
コード例 #13
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));
        }
コード例 #14
0
        public Result <List <Base> > List4Account(int account_id)
        {
            List <Base> lst = UnitDA.List4Account(account_id);

            return(Result(lst));
        }
コード例 #15
0
        public Result <List <Base> > List4User(int _user_id)
        {
            List <Base> lst = UnitDA.List4User(_user_id > 0 ? _user_id : user_id);

            return(Result(lst));
        }
コード例 #16
0
 public Result Delete(Model.DB.Unit model)
 {
     return(Result(UnitDA.Delete(model, user_id)));
 }