Example #1
0
        public OrderMarginSetting Clone()
        {
            OrderMarginSetting setting = new OrderMarginSetting();

            setting.MaxUseRate = this.MaxUseRate;

            return(setting);
        }
 // <summary>
 /// 获取保证金设定。
 /// </summary>
 /// <returns></returns>
 public OrderMarginSetting GetOrderMarginSetting()
 {
     Debug.Assert(m_systemSetting != null);
     lock (m_syncObj)
     {
         OrderMarginSetting setting = m_systemSetting.OrderMargin.Clone();
         return(setting);
     }
 }
        /// <summary>
        /// 校验保证金。
        /// </summary>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        private bool VerifyMargin(ArbitrageOpenArgument openArg, out string errorMessage)
        {
            errorMessage = string.Empty;
            USeOrderDriver orderDriver = USeManager.Instance.OrderDriver;

            try
            {
                OrderMarginSetting marginSetting = USeManager.Instance.SystemConfigManager.GetOrderMarginSetting();
                USeFundDetail      fundDetail    = orderDriver.QueryFundDetailInfo();
                if (fundDetail == null)
                {
                    errorMessage = "查询资金信息失败";
                    return(false);
                }

                decimal evaluateMargin = EvaluateMargin(openArg);                                   // 评估当前开仓参数可能占用保证金

                decimal investorMaxUse = fundDetail.DynamicBenefit * marginSetting.MaxUseRate;      // 账户最大占用保证金
                decimal usedMargin     = USeManager.Instance.AutoTraderManager.CalculatUseMargin(); // 当前套利单占用保证金

                if (investorMaxUse < usedMargin + evaluateMargin)
                {
                    errorMessage = string.Format("套利单预计占用{0}保证金,当前账户占用保证金超出设定预警阀值", evaluateMargin.ToString("#,0"));
                    return(false);
                }

                if (fundDetail.Available < evaluateMargin)
                {
                    errorMessage = string.Format("套利单预计占用{0}保证金,当前账户可用余额不足", evaluateMargin.ToString("#,0"));
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                Debug.Assert(false, ex.Message);
                errorMessage = "校验保证金失败";
                return(false);
            }
        }