/// <summary>
 /// Проверяет - заполненны ли все необходимые поля (это больше от регрессионных ошибок)
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 private static void FieldValidation(AccountGroupItem item)
 {
     if (item == null)
     {
         throw new ArgumentNullException("item");
     }
     Assert.IsNotNull(item);
     Assert.IsNotNull(item.Code);
     Assert.IsNotNull(item.Name);
     Assert.IsNotNull(item.IsReal);
     Assert.IsNotNull(item.BrokerLeverage);
     Assert.IsNotNull(item.MarginCallPercentLevel);
     Assert.IsNotNull(item.StopoutPercentLevel);
     Assert.IsNotNull(item.AccountsCount);
     Assert.IsNotNull(item.Dealer);
     Assert.IsNotNull(item.MessageQueue);
     Assert.IsNotNull(item.SessionName);
     Assert.IsNotNull(item.HedgingAccount);
     Assert.IsNotNull(item.SenderCompId);
     Assert.IsNotNull(item.SwapFree);
     Assert.IsNotNull(item.Markup);
     Assert.IsNotNull(item.DefaultMarkupPoints);
     Assert.IsNotNull(item.DefaultVirtualDepo);
     Assert.IsNotNull(item.Dealers);
 }
Example #2
0
        //获取主账户最大可下单数量
        public static int GetAccountCount(Order order)
        {
            Account account = AccountRA.Get("A_" + order.account_id);

            if (order.type_enum == OrderTypeEnum.Buy && !string.IsNullOrWhiteSpace(account.limit_no_buying) && account.limit_no_buying.Contains(order.code))
            {
                return(0);
            }

            if (account.status_enum == StatusEnum.Forbidden)
            {
                return(0);
            }
            if (account.status_order_enum == StatusOrderEnum.Forbidden)
            {
                return(0);
            }
            if (order.type_enum == OrderTypeEnum.Buy && account.status_order_enum == StatusOrderEnum.NoBuying)
            {
                return(0);
            }

            if (order.type_enum == OrderTypeEnum.Buy)
            {
                decimal count = account.capital_initial / order.price;
                if (account.limit_ratio_single > 0)
                {
                    count = Math.Min(count, account.capital_initial * account.limit_ratio_single / order.price);
                }

                BlockInfo block = StockInfoBiz.GetBlock(order.code);
                if (block.block_type_enum == BlockEnum.gem)
                {
                    if (account.limit_ratio_gem_single > 0)
                    {
                        count = Math.Min(count, account.capital_initial * account.limit_ratio_gem_single / order.price);
                    }
                    if (account.limit_ratio_gem_total > 0)
                    {
                        count = Math.Min(count, (account.capital_initial * account.limit_ratio_gem_total - account.capital_stock_value_gem) / order.price);
                    }
                }

                string[]         keys = TradeRA.KeySearch("G_*_U_" + order.unit_id + "_A_" + order.account_id);
                AccountGroupItem item = AccountGroupRA.Get(keys[0]);
                if (item.capital_available > 0)
                {
                    count = Math.Min(count, (item.capital_available - item.capital_stock_value) / order.price);
                }
                return((int)Math.Ceiling(count / 100) * 100);
            }
            else
            {
                return(PositionRA.GetSellable(order.unit_id, order.code, order.account_id));
            }
        }
        public ActionResult EditDealerAccountGroups(AccountGroupItem model)
        {
            var result = dealerRepository.SaveChangesDealerFealdInAccountGroup(model) ?
                         string.Format("{0} {1} {2} {3}",
                                       Resource.MessageAccountGroupSaveDealerInfo, model.Dealer, Resource.MessageAccountGroupFor, model.Code) :
                         string.Format("{0} {1} {2}.",
                                       Resource.ErrorMessageSaveDeallerInfo, Resource.MessageAccountGroupFor, model.Code);

            return(RedirectToAction("AccountGroups", new { message = result }));
        }
Example #4
0
        public static void LoadAccountGroupItem(AccountGroupItem item)
        {
            string key = "G_" + item.account_group_id + "_U_" + item.unit_id + "_A_" + item.account_id;

            if (TradeRA.KeyExists(key))
            {
                return;
            }

            AccountGroupRA.Add(item, key);
        }
Example #5
0
        public static void Add(AccountGroupItem item, string key)
        {
            Dictionary <string, string> items = new Dictionary <string, string>();

            items.Add("account_group_id", item.account_group_id.ToString());
            items.Add("account_id", item.account_id.ToString());
            items.Add("capital_allow", item.capital_allow.ToString());
            items.Add("sort_buy", item.sort_buy.ToString());
            items.Add("sort_sell", item.sort_sell.ToString());
            items.Add("unit_id", item.unit_id.ToString());
            items.Add("capital_stock_value", item.capital_stock_value.ToString());
            TradeRA.SetFields(key, items);
            TradeRA.SetExpire(key);
        }
Example #6
0
        public ActionResult EditAccountGroupsDetails(string code)
        {
            AccountGroupItem result = null;

            try
            {
                result = accountGroupsRepository.GetAccountGroups(code).First();
            }
            catch (InvalidOperationException ex)
            {
                Logger.Error(String.Format("EditAccountGroupsDetails - на сервере отсутствует группа счетов с кодом {0}", code), ex);
            }
            catch (Exception ex)
            {
                Logger.Error(String.Format("EditAccountGroupsDetails - ошибка полуения с сервера группы счетов по её коду {0}", code), ex);
            }
            return(View(result));
        }
Example #7
0
 /// <summary>
 /// Добавление новой группы счетов
 /// </summary>
 /// <param name="newAccountGroup">Добавляемая группа счётов</param>
 /// <returns>Сообщение о результате выполнения запроса</returns>
 /// <remarks>Не тестируется</remarks>
 public string AddAccountGroup(AccountGroupItem newAccountGroup)
 {
     Logger.Info(string.Format("Попытка добавить новую группу четов {0} в БД.", newAccountGroup.Code));
     try
     {
         var undecorateAccountGroup = LinqToEntity.UndecorateAccountGroup(newAccountGroup);
         using (var ctx = DatabaseContext.Instance.Make())
         {
             ctx.ACCOUNT_GROUP.Add(undecorateAccountGroup);
             ctx.SaveChanges();
             return(string.Format("{1} (# {0}).", newAccountGroup.Code, Resource.MessageAccountGroupAdd));
         }
     }
     catch (Exception ex)
     {
         Logger.Error("AddAccountGroup()", ex);
     }
     return(string.Format("{1} {0}.", newAccountGroup.Code, Resource.ErrorMessageAccountGroupAdd));
 }
Example #8
0
        //检查主账户是否满足下单条件
        public static ApiResultEnum CheckAccount(Order order)
        {
            Account account = AccountRA.Get("A_" + order.account_id);

            if (order.type_enum == OrderTypeEnum.Buy && !string.IsNullOrWhiteSpace(account.limit_no_buying) && account.limit_no_buying.Contains(order.code))
            {
                return(ApiResultEnum.Order_Account_NoBuying_Code);
            }

            if (account.status_enum == StatusEnum.Forbidden)
            {
                return(ApiResultEnum.Order_Account_Forbidden);
            }
            if (account.status_order_enum == StatusOrderEnum.Forbidden)
            {
                return(ApiResultEnum.Order_Account_Forbidden_Order);
            }
            if (order.type_enum == OrderTypeEnum.Buy && account.status_order_enum == StatusOrderEnum.NoBuying)
            {
                return(ApiResultEnum.Order_Account_NoBuying_Order);
            }

            if (order.type_enum == OrderTypeEnum.Buy)
            {
                if (account.limit_ratio_single > 0 && order.price * order.count > account.capital_initial * account.limit_ratio_single)
                {
                    return(ApiResultEnum.Order_Account_Limit_Single);
                }

                BlockInfo block = StockInfoBiz.GetBlock(order.code);
                if (block.block_type_enum == BlockEnum.gem)
                {
                    if (account.limit_ratio_gem_single > 0 && order.price * order.count > account.capital_initial * account.limit_ratio_gem_single)
                    {
                        return(ApiResultEnum.Order_Account_Limit_GEM_Single);
                    }
                    if (account.limit_ratio_gem_total > 0 && order.price * order.count + account.capital_stock_value_gem > account.capital_initial * account.limit_ratio_gem_total)
                    {
                        return(ApiResultEnum.Order_Account_Limit_GEM_Total);
                    }
                }

                string[]         keys = TradeRA.KeySearch("G_*_U_" + order.unit_id + "_A_" + order.account_id);
                AccountGroupItem item = AccountGroupRA.Get(keys[0]);
                if (item.capital_available > 0 && item.capital_available < order.price * order.count + item.capital_stock_value)
                {
                    return(ApiResultEnum.Order_Account_Negative_Amount);
                }
            }
            else
            {
                if (PositionRA.GetSellable(order.unit_id, order.code, order.account_id) < order.count)
                {
                    return(ApiResultEnum.Order_Account_Negative_Position);
                }
            }

            //风控通过进行冻结
            if (order.type_enum == OrderTypeEnum.Buy)
            {
                string key_unit = "U_" + order.unit_id;
                UnitRA.UpdateCapitalOrderBuy(order.price * order.count, key_unit);
            }
            else if (order.type_enum == OrderTypeEnum.Sell)
            {
                string key_position = "P_" + order.code + "_A_" + order.account_id + "_U_" + order.unit_id;
                PositionRA.UpdateSellableOrderSell(-order.count, key_position);
            }
            return(ApiResultEnum.Success);
        }
Example #9
0
        public ActionResult AccountGroupAdd(AccountGroupItem newAccountGroup)
        {
            var result = accountGroupsRepository.AddAccountGroup(newAccountGroup);

            return(RedirectToAction("AccountGroups", new { message = result }));
        }
Example #10
0
        public ActionResult EditAccountGroupsDetails(AccountGroupItem model)
        {
            var result = accountGroupsRepository.SaveAccountGroupChanges(model);

            return(RedirectToAction("AccountGroups", new { message = result }));
        }