/// <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); }
/// <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; }
/// <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); } } }
/// <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); }
/// <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);
protected override void DetailProcess(ScheduleEventArgs args, CM_Commodity commodity, Types.BreedClassTypeEnum breedClassTypeEnum) { }