/// <summary>
        /// 验证是否在撮合中心接受委托时间内
        /// </summary>
        /// <param name="type">商品所属类别用来为了区分查询港股代码</param>
        /// <param name="code">具体的交易代码</param>
        /// <returns>是否在接受委托时间内</returns>
        public static bool IsMatchTradingTime(Types.BreedClassTypeEnum type, string code)
        {
            CM_BourseType bourseType = MCService.CommonPara.GetBourseTypeByCommodityCode(code, type);

            if (bourseType == null)
            {
                return(false);
            }
            // 撮合接收委托开始时间
            DateTime matchBeginTime = bourseType.ReceivingConsignStartTime.Value;

            matchBeginTime = SetNowDate(matchBeginTime);

            // 撮合接收委托结束时间
            DateTime matchEndTime = bourseType.ReceivingConsignEndTime.Value;

            matchEndTime = SetNowDate(matchEndTime);

            DateTime now = DateTime.Now;

            if (Utils.CompareTime(matchBeginTime, now) <= 0 && Utils.CompareTime(matchEndTime, now) >= 0)
            {
                return(true);
            }

            return(false);
        }
 /// <summary>
 /// 构造器
 /// </summary>
 /// <param name="args"></param>
 /// <param name="commodity"></param>
 /// <param name="breedClassType"></param>
 public OrderCacheMessageAccpetItem(ScheduleEventArgs args, CM_Commodity commodity,
                                    Types.BreedClassTypeEnum breedClassType)
 {
     Args           = args;
     Commodity      = commodity;
     BreedClassType = breedClassType;
 }
        /// <summary>
        /// Create Date:2009-10-26
        /// Create By:李健华
        /// Desc.:为了与港股应用重载方法
        /// </summary>
        /// <param name="code"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        private bool IsTimeDone(string code, Types.BreedClassTypeEnum type)
        {
            DateTime start = GetBourseBeginTime(code, type);

            DateTime now = DateTime.Now;

            if (now >= start)
            {
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// 验证是否在柜台接受委托时间内
        /// </summary>
        /// <param name="type">商品所属类别用来为了区分查询港股代码</param>
        /// <param name="code">具体的交易代码</param>
        /// <param name="errMsg">错误信息</param>
        /// <returns>是否在接受委托时间内</returns>
        public static bool IsCountTradingTime(Types.BreedClassTypeEnum type, string code, ref string errMsg)
        {
            CM_BourseType bourseType = MCService.CommonPara.GetBourseTypeByCommodityCode(code, type);

            if (bourseType == null)
            {
                errMsg = "无法获取相关交易所信息。";
                return(false);
            }

            if (!bourseType.CounterFromSubmitStartTime.HasValue || !bourseType.CounterFromSubmitEndTime.HasValue)
            {
                errMsg = "无法获取交易所开收市时间。";
                return(false);
            }

            // 柜台接收委托开始时间
            DateTime countBeginTime = bourseType.CounterFromSubmitStartTime.Value;

            // 柜台接收委托结束时间
            DateTime countEndTime = bourseType.CounterFromSubmitEndTime.Value;

            DateTime now = DateTime.Now;

            errMsg = "";

            //是否正在清算,在清算时不能接受委托
            bool isReckoning = ScheduleManagement.ScheduleManager.IsStockReckoning ||
                               ScheduleManagement.ScheduleManager.IsFutureReckoning ||
                               ScheduleManagement.ScheduleManager.IsHKReckoning;

            if (isReckoning)
            {
                errMsg = "当前柜台正在执行清算";
                return(false);
            }

            if (ScheduleManagement.ScheduleManager.IsFutureReckoningErrorStopTrade)
            {
                errMsg = "当前柜台上一日清算异常,暂停交易";
                return(false);
            }

            //然后判断是否在柜台的接受委托时间内
            if (Utils.CompareTime(countBeginTime, now) < 0 && Utils.CompareTime(countEndTime, now) > 0)
            {
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// Update Date:2009-10-26
        /// Update By:李健华
        /// Desc.:为了与港股应用多加代码所属于类别是标识
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        private DateTime GetBourseBeginTime(string code, Types.BreedClassTypeEnum type)
        {
            DateTime now = DateTime.Now;

            var bourseType = MCService.CommonPara.GetBourseTypeByCommodityCode(code, type);

            if (bourseType.ReceivingConsignStartTime.HasValue)
            {
                DateTime begin = bourseType.ReceivingConsignStartTime.Value;
                return(new DateTime(now.Year, now.Month, now.Day, begin.Hour, begin.Minute, begin.Second));
            }

            return(now);
        }
Пример #6
0
        /// <summary>
        /// 检测是否停牌
        /// 当获取不到行情表示停牌,当买一价、量,卖一价、量都为0时也表示停牌
        /// </summary>
        /// <param name="errMsg"></param>
        /// <param name="breedType">品种类型(这里是因为这里两种获取的行情实体方法有区别)</param>
        /// <returns></returns>
        private bool CheckStopTrading(ref string errMsg, Types.BreedClassTypeEnum breedType)
        {
            errMsg = "当前交易商品" + code + "可能停牌,委托无效。";
            string errCode = "GT-1206";

            errMsg = errCode + ":" + errMsg;

            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();

            switch (breedType)
            {
            case Types.BreedClassTypeEnum.Stock:
                break;

            case Types.BreedClassTypeEnum.CommodityFuture:
                var hqdata = service.GetMercantileFutData(code);
                if (hqdata == null)
                {
                    return(false);
                }
                if (hqdata.Buyprice1 == 0 && hqdata.Sellprice1 == 0 && hqdata.Buyvol1 == 0 && hqdata.Sellvol1 == 0)
                {
                    return(false);
                }
                break;

            case Types.BreedClassTypeEnum.StockIndexFuture:
                var futdata = service.GetFutData(code);
                if (futdata == null)
                {
                    return(false);
                }

                if (futdata.Buyprice1 == 0 && futdata.Sellprice1 == 0 && futdata.Buyvol1 == 0 && futdata.Sellvol1 == 0)
                {
                    return(false);
                }
                break;

            case Types.BreedClassTypeEnum.HKStock:
                break;

            default:
                break;
            }



            return(true);
        }
        /// <summary>
        /// 根据商品代码获取交易账户类型(对应BD_AccountType表中的内容AccountTypeID)
        /// </summary>
        /// <param name="type">商品所属类别用来为了区分查询港股代码</param>
        /// <param name="commodityCode"></param>
        /// <param name="breedClass"></param>
        /// <param name="accountTypeIDFunc">资金帐号类型</param>
        /// <param name="accountTypeIDHold">持仓帐号类型</param>
        protected static void GetAccountTypeID(Types.BreedClassTypeEnum type, string commodityCode, out CM_BreedClass breedClass,
                                               out int?accountTypeIDFunc, out int?accountTypeIDHold)
        {
            breedClass = GetBreedClass(type, commodityCode);

            if (breedClass == null)
            {
                throw new VTException("GT-1905", "交易商品品种不存在");
            }


            //通过产品获取交易账户类型

            accountTypeIDFunc = breedClass.AccountTypeIDFund;
            accountTypeIDHold = breedClass.AccountTypeIDHold;
        }
Пример #8
0
        /// <summary>
        /// 进行每一种交易品种下的所有商品的循环
        /// </summary>
        private void DoDetailLoopAction()
        {
            IList <CM_BreedClass> breedClasses = MCService.CommonPara.GetAllBreedClass();

            foreach (CM_BreedClass breedClass in breedClasses)
            {
                Types.BreedClassTypeEnum breedClassTypeEnum = (Types.BreedClassTypeEnum)breedClass.BreedClassTypeID;

                IList <CM_Commodity> commodities =
                    MCService.CommonPara.GetAllCommodityByBreedClass(breedClass.BreedClassID);

                foreach (CM_Commodity commodity in commodities)
                {
                    DetailProcess(this.processArgs, commodity, breedClassTypeEnum);
                }
            }
        }
Пример #9
0
        /// <summary>
        /// 校验入口
        /// </summary>
        /// <param name="errMsg">错误信息</param>
        /// <param name="breedType">品种类型(这里是因为这里两种获取的行情实体方法有区别)</param>
        /// <returns>是否成功</returns>
        public bool Check(out string errMsg, Types.BreedClassTypeEnum breedType)
        {
            bool result = Initialize(traderId, code, out errMsg);

            //基础验证,包括商品的基础验证,账户的基础验证
            if (result)
            {
                result = CheckTraderAvalible(out errMsg);
            }

            //检查资金
            //if (result)
            //{
            //    result = CheckFuncTable(ref errMsg);
            //}

            ////检查持仓
            //if (result)
            //{
            //    result = CheckHoldTable(ref errMsg);
            //}

            //如果是在交易时间内,那么检查停牌,连续3次,预下单不检查
            if (ValidateCenter.IsMatchTradingTime(code))
            {
                if (result)
                {
                    result = CheckStopTrading(ref errMsg, breedType);

                    if (!result)
                    {
                        result = CheckStopTrading(ref errMsg, breedType);
                    }

                    if (!result)
                    {
                        result = CheckStopTrading(ref errMsg, breedType);
                    }
                }
            }

            return(result);
        }
        /// <summary>
        /// 根据商品代码获取交易商品品种BreedClass
        /// </summary>
        /// <param name="type">商品所属类别用来为了区分查询港股代码</param>
        /// <param name="commodityCode"></param>
        /// <returns></returns>
        protected static CM_BreedClass GetBreedClass(Types.BreedClassTypeEnum type, string commodityCode)
        {
            #region  other
            //int breedClassID;
            //switch (type)
            //{
            //    case Types.BreedClassTypeEnum.Stock:
            //    case Types.BreedClassTypeEnum.CommodityFuture:
            //    case Types.BreedClassTypeEnum.StockIndexFuture:
            //        CM_Commodity commodity = MCService.CommonPara.GetCommodityByCommodityCode(commodityCode);
            //        if (commodity == null)
            //        {
            //            throw new VTException("GT-1904", "交易品种不存在");
            //        }
            //        else
            //        {
            //            breedClassID = commodity.BreedClassID.Value;
            //        }
            //        break;
            //    case Types.BreedClassTypeEnum.HKStock:
            //        //等待实现
            //        //CM_Commodity commodity = GetCommodityByCommodityCode(code);
            //        //if (commodity != null)
            //        //{
            //        //    breedClassID = commodity.BreedClassID.Value;
            //        //}
            //        break;
            //}

            //old code
            //CM_Commodity commodity = MCService.CommonPara.GetCommodityByCommodityCode(commodityCode);
            //if (commodity == null)
            //{
            //    throw new VTException("GT-1904", "交易品种不存在");
            //}
            //return MCService.CommonPara.GetBreedClassByBreedClassID(commodity.BreedClassID.Value);
            //===old code
            #endregion
            return(MCService.CommonPara.GetBreedClassByCommodityCode(commodityCode, type));
        }
 protected override void DetailProcess(ScheduleEventArgs args, CM_Commodity commodity,
                                       Types.BreedClassTypeEnum breedClassTypeEnum)
 {
     //ScheduleMessageBuffer.InsertQueueItem(new OrderCacheMessageAccpetItem(args, commodity, breedClassTypeEnum));
 }
 /// <summary>
 /// 构造器
 /// </summary>
 /// <param name="errorItem"></param>
 /// <param name="breedClassType"></param>
 public OrderErrorItem(ResultDataEntity errorItem, Types.BreedClassTypeEnum breedClassType)
 {
     ErrorItem      = errorItem;
     BreedClassType = breedClassType;
 }
 /// <summary>
 /// 构造器
 /// </summary>
 /// <param name="rptItem"></param>
 /// <param name="breedClassType"></param>
 public CancelOrderRptItem(CancelOrderEntity rptItem, Types.BreedClassTypeEnum breedClassType)
 {
     RptItem        = rptItem;
     BreedClassType = breedClassType;
 }
        /// <summary>
        /// 进行初始化,进行账户类型和账户类型分类的获取
        /// </summary>
        /// <param name="type">商品所属类别用来为了区分查询港股代码</param>
        /// <param name="_traderId">交易员账户id</param>
        /// <param name="_code">商品代码</param>
        /// <param name="errMsg">错误信息</param>
        /// <returns>是否成功</returns>
        protected bool Initialize(Types.BreedClassTypeEnum type, string _traderId, string _code, out string errMsg)
        {
            errMsg = "";
            string errCode = "";

            int?atidFund = null;
            int?atidHold = null;

            try
            {
                GetAccountTypeID(type, _code, out breedClass, out atidFund, out atidHold);
            }
            catch (VTException vt)
            {
                LogHelper.WriteDebug(vt.ToString());
                errCode = vt.Code;
                errMsg  = vt.ToString();

                return(false);
            }

            #region 资金

            if (!atidFund.HasValue)
            {
                errMsg  = "无法获取交易员资金账户类型。";
                errCode = "GT-1900";
                errMsg  = errCode + ":" + errMsg;

                LogHelper.WriteInfo(errMsg);
                return(false);
            }

            accountFundTypeId = atidFund.Value;

            int?atcFundid = GetATCID(accountFundTypeId);

            if (!atcFundid.HasValue)
            {
                errCode = "GT-1901";
                errMsg  = "无法获取交易员资金账户类型分类。";
                errMsg  = errCode + ":" + errMsg;
                LogHelper.WriteInfo(errMsg);

                return(false);
            }

            accountFundTypeClassId = atcFundid.Value;

            #endregion

            #region 持仓

            if (!atidHold.HasValue)
            {
                errMsg  = "无法获取交易员持仓账户类型。";
                errCode = "GT-1902";
                errMsg  = errCode + ":" + errMsg;

                LogHelper.WriteInfo(errMsg);
                return(false);
            }

            accountHoldTypeId = atidHold.Value;

            int?atcHoldid = GetATCID(accountHoldTypeId);

            if (!atcHoldid.HasValue)
            {
                errCode = "GT-1903";
                errMsg  = "无法获取交易员资金账户类型分类。";
                errMsg  = errCode + ":" + errMsg;
                LogHelper.WriteInfo(errMsg);

                return(false);
            }

            accountHoldTypeClassId = atidHold.Value;

            #endregion

            return(true);
        }
Пример #15
0
 /// <summary>
 /// 每一个商品代码处理入口
 /// </summary>
 /// <param name="args">任务参数</param>
 /// <param name="commodity">商品</param>
 /// <param name="breedClassTypeEnum">品种类型名称 1.股票现货 2.商品期货 3.股指期货</param>
 protected abstract void DetailProcess(ScheduleEventArgs args, CM_Commodity commodity,
                                       Types.BreedClassTypeEnum breedClassTypeEnum);
Пример #16
0
 protected override void DetailProcess(ScheduleEventArgs args, CM_Commodity commodity,
                                       Types.BreedClassTypeEnum breedClassTypeEnum)
 {
 }