Пример #1
0
        private void button2_Click(object sender, EventArgs e)
        {
            propertyGrid1.SelectedObject = null;
            string code = textBox1.Text;

            if (code.Length == 0)
            {
                MessageBox.Show("股票代码不能为空");
                return;
            }
            IRealtimeMarketService service = RealtimeMarketServiceFactory.GetService();
            var vtHkStock = service.GetHKStockData(code);

            if (vtHkStock == null)
            {
                return;
            }

            var hkStock = vtHkStock;

            //if (hkStock == null)
            //    return;


            propertyGrid1.SelectedObject = hkStock;
        }
        /// <summary>
        /// 1.昨日收盘价的上下百分比
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private bool CheckType1(StockOrderRequest request, HighLowRange highLowRange)
        {
            decimal highRange = highLowRange.HighRange;
            decimal lowRange  = highLowRange.LowRange;

            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
            HqExData data   = service.GetStockHqData(request.Code);
            HqExData exData = data;


            float   yClose    = exData.YClose;
            decimal yestPrice = (decimal)yClose;

            decimal high = yestPrice * (1 + highRange);
            decimal low  = yestPrice * (1 - lowRange);

            decimal orderPrice = (decimal)request.OrderPrice;

            if (orderPrice >= low && orderPrice <= high)
            {
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// 3.买一卖一百分比
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private bool CheckType3(StockOrderRequest request, HighLowRange highLowRange)
        {
            decimal highRange = highLowRange.HighRange;
            decimal lowRange  = highLowRange.LowRange;

            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
            HqExData data   = service.GetStockHqData(request.Code);
            HqExData exData = data;
            HqData   hqData = exData.HqData;

            float   b1   = hqData.Buyprice1;
            decimal buy1 = (decimal)b1;

            float   s1    = hqData.Sellprice1;
            decimal sell1 = (decimal)s1;

            decimal high = sell1 * highRange;
            decimal low  = buy1 * lowRange;


            decimal orderPrice = (decimal)request.OrderPrice;

            if (orderPrice >= low && orderPrice <= high)
            {
                return(true);
            }

            return(false);
        }
Пример #4
0
        /// <summary>
        /// 开始初始化行情接收事件
        /// </summary>
        public static void InitRealTimeStart()
        {
            //ShowMessage.Instanse.ShowFormTitleMessage("正在初始化行情事件");
            //获取配置的撮合类型
            string matchTypeStr = AppConfig.GetConfigMatchBreedClassType();

            if (matchTypeStr.Substring(3, 1) == "1")
            {
                //现货
                if (_stockRealtimeService != null)
                {
                    _stockRealtimeService.StockRealtimeMarketChangeEvent -= StockRealtimeMarketChangeEvent;
                    _stockRealtimeService = null;
                }

                _stockRealtimeService = RealtimeMarketService.GetRealtimeMark();
                _stockRealtimeService.StockRealtimeMarketChangeEvent += StockRealtimeMarketChangeEvent;
            }

            if (matchTypeStr.Substring(2, 1) == "1")
            {
                //期货
                if (_funtureRealtimeService != null)
                {
                    _funtureRealtimeService.FutRealtimeMarketChangeEvent -= FutRealtimeMarketChangeEvent;
                    _funtureRealtimeService = null;
                }
                _funtureRealtimeService = RealtimeMarketService.GetRealtimeMark();
                _funtureRealtimeService.FutRealtimeMarketChangeEvent += FutRealtimeMarketChangeEvent;
            }

            if (matchTypeStr.Substring(1, 1) == "1")
            {
                //港股
                if (_hkStockRealtimeService != null)
                {
                    _hkStockRealtimeService.HKStockRealtimeMarketChangeEvent -= HKStockRealtimeMarketChangeEvent;
                    _hkStockRealtimeService = null;
                }

                _hkStockRealtimeService = RealtimeMarketService.GetRealtimeMark();
                _hkStockRealtimeService.HKStockRealtimeMarketChangeEvent += HKStockRealtimeMarketChangeEvent;
            }

            if (matchTypeStr.Substring(0, 1) == "1")
            {
                //商品期货 add by 董鹏 2010-01-25
                if (_commditiesRealtimeService != null)
                {
                    _commditiesRealtimeService.MercantileFutRealtimeMarketChangeEvent -= CommditiesRealtimeMarketChangeEvent;
                    _commditiesRealtimeService = null;
                }

                _commditiesRealtimeService = RealtimeMarketService.GetRealtimeMark();
                _commditiesRealtimeService.MercantileFutRealtimeMarketChangeEvent += CommditiesRealtimeMarketChangeEvent;
            }
            //  ShowMessage.Instanse.ShowFormTitleMessage("初始化行情事件(完)");
        }
 /// <summary>
 /// 初始化行情组件
 /// </summary>
 void InitRealtimeMarketComponent()
 {
     //登陆处理
     GTASocketSingletonForRealTime.StartLogin("rtuser", "11", ShowConnectMessage);
     //数据接受注册事件
     this.FEvent  += Event;
     SocketService = GTASocketSingletonForRealTime.SocketService;
     GTASocketSingletonForRealTime.SocketStateChanged += GTASocketSingleton_SocketStateChanged;
     //  SocketService.AddEventDelegate(this.FEvent);
     GTASocketSingletonForRealTime.SocketStatusHandle(SocketStatusChange);
     IRealtimeMarketService rms = RealtimeMarketServiceFactory.GetService();
 }
Пример #6
0
        private void button1_Click(object sender, EventArgs e)
        {
            propertyGrid1.SelectedObject = null;
            string code = textBox1.Text;

            if (code.Length == 0)
            {
                MessageBox.Show("股票代码不能为空");
                return;
            }
            IRealtimeMarketService service = RealtimeMarketServiceFactory.GetService();

            if (code.ToUpper().IndexOf("IF") >= 0)
            {
                var vifFutdata = service.GetFutData(code);
                if (vifFutdata == null)
                {
                    return;
                }

                var hutExData = vifFutdata;
                if (hutExData == null)
                {
                    return;
                }


                propertyGrid1.SelectedObject = hutExData;
            }
            else
            {
                var hqdata = service.GetStockHqData(code);
                if (hqdata == null)
                {
                    return;
                }

                var hqExData = hqdata;
                if (hqExData == null)
                {
                    return;
                }

                var hqData = hqExData.HqData;
                if (hqData == null)
                {
                    return;
                }

                propertyGrid1.SelectedObject = hqData;
            }
        }
Пример #7
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>
        /// 5.港股买卖价位
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private bool CheckType5(StockOrderRequest request, HighLowRange highLowRange)
        {
            HKRange hkRange = highLowRange.HongKongRange;

            decimal buyHighRange  = hkRange.BuyHighRange;
            decimal buyLowRange   = hkRange.BuyLowRange;
            decimal sellHighRange = hkRange.SellHighRange;
            decimal sellLowRange  = hkRange.SellLowRange;

            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
            HqExData data   = service.GetStockHqData(request.Code);
            HqExData exData = data;
            HqData   hqData = exData.HqData;

            float   b1   = hqData.Buyprice1;
            decimal buy1 = (decimal)b1;

            float   s1    = hqData.Sellprice1;
            decimal sell1 = (decimal)s1;

            decimal buyH = sell1;
            decimal buyL = MCService.HLRangeProcessor.GetHKRangeValue(request.Code, (decimal)request.OrderPrice, buy1,
                                                                      -buyLowRange);

            decimal sellH = MCService.HLRangeProcessor.GetHKRangeValue(request.Code, (decimal)request.OrderPrice, sell1,
                                                                       sellHighRange);
            decimal sellL = buy1;

            decimal high = 0;
            decimal low  = 0;

            if (request.BuySell == Types.TransactionDirection.Buying)
            {
                low  = buyL;
                high = buyH;
            }
            else
            {
                low  = sellL;
                high = sellH;
            }

            decimal orderPrice = (decimal)request.OrderPrice;

            if (orderPrice >= low && orderPrice <= high)
            {
                return(true);
            }
            throw new NotImplementedException();
        }
Пример #9
0
        /// <summary>
        /// 检测是否停牌,如果没有停牌,代表校验通过
        /// 当获取不到行情盘前数据表示停牌,当行情盘前数据标识时为停牌则为停牌
        /// </summary>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        private bool CheckStopTrading(ref string errMsg)
        {
            errMsg = "当前交易股票" + request.Code + "可能停牌,委托无效。";
            string errCode = "GT-1206";

            errMsg = errCode + ":" + errMsg;

            #region 旧逻辑,港股要以静态数据来判断
            //IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
            //VTHKStockData hqdata = service.GetHKStockData(request.Code);
            //if (hqdata == null)
            //    return false;

            //HKStock hqExData = hqdata.OriginalData;
            //if (hqExData == null)
            //    return false;


            //if (hqExData.Buyprice1 == 0 && hqExData.Sellprice1 == 0 && hqExData.Buyvol1 == 0 && hqExData.Sellvol1 == 0)
            //    return false;
            #endregion

            #region 新逻辑

            //读行情组件静态信息列表
            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService();
            HKStaticData           hqdata  = service.GetHKPreMarketData(request.Code);
            if (hqdata == null)
            {
                hqdata = service.GetHKPreMarketData(request.Code);
            }
            if (hqdata == null)
            {
                hqdata = service.GetHKPreMarketData(request.Code);
            }
            if (hqdata == null)
            {
                errMsg = errCode + ":" + "当前交易股票" + request.Code + "获取不到行情可能停牌,委托无效。";
                return(false);
            }
            //如果停牌验证不通过
            if (hqdata.SuspensionFlag == true)
            {
                return(false);
            }
            #endregion
            errMsg = "";
            return(true);
        }
Пример #10
0
        public static IRealtimeMarketService GetRealMarketService()
        {
            int mode = Utils.GetRealTimeMode();

            IRealtimeMarketService service = null;

            //if (mode == 1)
            service = RealtimeMarketServiceFactory.GetService();
            //else if (mode == 2)
            //{
            //    service = RealtimeMarketServiceFactory2.GetService();
            //}

            return(service);
        }
Пример #11
0
        /// <summary>
        /// 初始化行情组件1
        /// </summary>
        private void InitRealtimeMarketComponent1()
        {
            //登陆处理
            //string username = "******";
            //string password = "******";
            string username = Utils.GetRealTimeUserName();
            string password = Utils.GetRealTimePassword();

            GTASocketSingletonForRealTime.StartLogin(username, password, ShowConnectMessage);
            //数据接受注册事件
            this.FEvent  += Event;
            SocketService = GTASocketSingletonForRealTime.SocketService;
            GTASocketSingletonForRealTime.SocketStateChanged += GTASocketSingleton_SocketStateChanged;
            SocketService.AddEventDelegate(this.FEvent);
            GTASocketSingletonForRealTime.SocketStatusHandle(SocketStatusChange);
            IRealtimeMarketService rms = RealtimeMarketServiceFactory.GetService();
        }
Пример #12
0
        /// <summary>
        /// 处理交割月合约保证金
        /// </summary>
        /// <param name="code">合约代码</param>
        /// <param name="compareDate">要比较的日期</param>
        /// <param name="breedClassID">合约代码所属品种类型</param>
        /// <returns>保证金比例</returns>
        private static decimal ProcessDeliveryMonth(string code, DateTime compareDate, int breedClassID)
        {
            string errCode = "GT-8482";
            string errMsg  = "无法根据期货商品代码获取其对应的保证金比例。";


            IList <QH_CFBailScaleValue> values = GetBailScaleValues(code, breedClassID);

            if (values == null)
            {
                throw new VTException(errCode, errMsg);
            }



            //如果是过期合约不用获取行情的持仓量,这是为了盘前检查,因为交割月的比例计算没有用到行情持仓量
            //持仓量----这里为了不用修改后面的代码设置如果合约是过期时直接给予市场持仓量为最大值,这是为了盘前检查时要计算一些强制平仓过期合约而设置
            //因为过期后的合约直接取交割月的其中一个比例,而这里设置这个持仓量是为了不知道此代码所设置的保证金比例计算方式是以天计算还是双边、单边计算
            decimal openInterest = int.MaxValue;

            if (!FutureService.CheckQHContractIsExpired(code))
            {
                IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
                //FutData futData = service.GetFutData(code);
                MerFutData merFutData = service.GetMercantileFutData(code);
                if (merFutData == null)
                {
                    errMsg = "处理交割月合约保证金时无法获取行情。";
                    throw new VTException(errCode, errMsg);
                }
                //持仓量
                openInterest = (decimal)merFutData.OpenInterest;
            }


            Types.QHCFPositionMonthType monthType   = Types.QHCFPositionMonthType.OnDelivery;
            IList <QH_CFBailScaleValue> scaleValues = FindScaleValuesByMonthType(values, monthType);

            if (scaleValues.Count != 0)
            {
                return(GetScaleByBailType(scaleValues, openInterest, compareDate, breedClassID));
            }

            return(-1);
        }
Пример #13
0
        /// <summary>
        /// Desc: 根据商品期货合约代码获取当前代码行情
        /// Create by: 董鹏
        /// Create Date: 2010-01-25
        /// </summary>
        /// <param name="contractCode">合约代码</param>
        /// <returns></returns>
        public static MerFutData GetRealTimeCommditiesDataByContractCode(string contractCode)
        {
            //撮合中心代码不能为空
            if (string.IsNullOrEmpty(contractCode))
            {
                return(null);
            }
            IRealtimeMarketService realTimeService = GetRealtimeMark();

            //撮合中心实体不能为空
            if (realTimeService == null)
            {
                return(null);
            }
            MerFutData vtFutData = realTimeService.GetMercantileFutData(contractCode);

            return(vtFutData);
        }
Пример #14
0
        /// <summary>
        ///根据港股代码获取当前代码行情
        /// </summary>
        /// <param name="commdityCode">代码</param>
        /// <returns></returns>
        public static HKStock GetRealTimeHKStockDataByCommdityCode(string commdityCode)
        {
            //撮合中心代码不能为空
            if (string.IsNullOrEmpty(commdityCode))
            {
                return(null);
            }
            IRealtimeMarketService realTimeService = GetRealtimeMark();

            //撮合中心实体不能为空
            if (realTimeService == null)
            {
                return(null);
            }
            HKStock vtHqExData = realTimeService.GetHKStockData(commdityCode);

            return(vtHqExData);
        }
        /// <summary>
        /// 处理交割月合约持仓限制
        /// </summary>
        /// <param name="code">合约代码</param>
        /// <param name="positionValueType">持仓限制类型</param>
        /// <returns>持仓限制</returns>
        private static PositionLimitValueInfo ProcessDeliveryMonth(string code, out Types.QHPositionValueType positionValueType)
        {
            string errCode = "GT-8492";
            string errMsg  = "无法根据商品期货商品代码获取其对应的持仓限制。";


            //根据合约代码获取其持仓限制列表
            IList <QH_PositionLimitValue> values = GetPositionLimitValues(code);

            if (values == null)
            {
                throw new VTException(errCode, errMsg);
            }

            #region 获取行情持仓量
            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
            //FutData futData = service.GetFutData(code);
            MerFutData merFutData = service.GetMercantileFutData(code);
            if (merFutData == null)
            {
                errMsg = "处理交割月合约保证金时无法获取行情-持仓限制。";
                throw new VTException(errCode, errMsg);
            }

            //持仓量
            decimal openInterest = (decimal)merFutData.OpenInterest;
            LogHelper.WriteDebug("交割月份的合约当前获取到" + code + "行情持仓量:" + openInterest);
            #endregion

            #region 过滤所属持仓限制类型记录
            Types.QHCFPositionMonthType   monthType   = Types.QHCFPositionMonthType.OnDelivery;
            IList <QH_PositionLimitValue> limitValues = FindLimitValuesByMonthType(values, monthType);
            #endregion

            positionValueType = Types.QHPositionValueType.Scales;
            if (limitValues.Count != 0)
            {
                return(GetLimitByBailType(limitValues, openInterest, out positionValueType));
            }

            throw new VTException(errCode, errMsg);
            // return -1;
        }
Пример #16
0
        public static IRealtimeMarketService GetRealMarketService()
        {
            int mode = Utils.GetRealTimeMode();

            IRealtimeMarketService service = null;

            try
            {
                //if (mode == 1)
                //{
                service = RealtimeMarketServiceFactory.GetService();
                //}
                //else if (mode == 2)
                //{
                //    service = RealtimeMarket.factory.RealtimeMarketServiceFactory2.GetService();
                //}
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(ex.Message, ex);
            }
            return(service);
        }
        /// <summary>
        /// 检测是否停牌,如果没有停牌,代表校验通过
        /// 当获取不到行情表示停牌,当买一价、量,卖一价、量都为0时也表示停牌
        /// </summary>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        private bool CheckStopTrading(ref string errMsg)
        {
            errMsg = "当前交易股票" + request.Code + "可能停牌,委托无效。";
            string errCode = "GT-1206";

            errMsg = errCode + ":" + errMsg;

            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
            var hqdata = service.GetStockHqData(request.Code);

            if (hqdata == null)
            {
                return(false);
            }

            var hqExData = hqdata;

            if (hqExData == null)
            {
                return(false);
            }

            var hqData = hqExData.HqData;

            if (hqData == null)
            {
                return(false);
            }

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

            errMsg = "";
            return(true);
        }
        /// <summary>
        /// 6.最近成交价上下各多少元
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private bool CheckType6(StockOrderRequest request, HighLowRange highLowRange)
        {
            decimal highRange = highLowRange.HighRange;
            decimal lowRange  = highLowRange.LowRange;

            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
            HqExData data   = service.GetStockHqData(request.Code);
            HqExData exData = data;

            float   rPrice      = exData.LastVolume;
            decimal recentPrice = (decimal)rPrice;

            decimal high = recentPrice + highRange;
            decimal low  = recentPrice - lowRange;

            decimal orderPrice = (decimal)request.OrderPrice;

            if (orderPrice >= low && orderPrice <= high)
            {
                return(true);
            }

            return(false);
        }
Пример #19
0
 private RealTimeMarketUtil()
 {
     service = GetRealMarketService();
 }
        /// <summary>
        /// 处理非交割月份的合约
        /// </summary>
        /// <param name="code">合约代码</param>
        /// <param name="year">合约年</param>
        /// <param name="month">合约月</param>
        /// <param name="positionValueType">持仓限制类型</param>
        /// <returns>保证金比例</returns>
        private static PositionLimitValueInfo ProcessNonDeliveryMonth(string code, int year, int month, out Types.QHPositionValueType positionValueType)
        {
            string errCode = "GT-8492";
            string errMsg  = "无法根据期货商品代码获取其对应的持仓限制。";


            IList <QH_PositionLimitValue> values = GetPositionLimitValues(code);

            if (values == null)
            {
                throw new VTException(errCode, errMsg);
            }

            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
            //FutData futData = service.GetFutData(code);
            MerFutData merFutData = service.GetMercantileFutData(code);

            if (merFutData == null)
            {
                errMsg = "处理交割月合约保证金时无法获取行情-持仓限制。";
                throw new VTException(errCode, errMsg);
            }

            //持仓量
            decimal openInterest = (decimal)merFutData.OpenInterest;

            LogHelper.WriteDebug("非交割月份的合约当前获取到" + code + "行情持仓量:" + openInterest);

            //判断当前月份是那种交割月份类型
            Types.QHCFPositionMonthType monthType = FutureService.CheckMonthType(year, month, DateTime.Now);

            IList <QH_PositionLimitValue> limitValues;

            positionValueType = Types.QHPositionValueType.Scales;

            #region 交割月份前三个月
            //如果是前三
            if (monthType == Types.QHCFPositionMonthType.OnDeliAgoThreeMonth)
            {
                limitValues = FindLimitValuesByMonthType(values, monthType);

                //是前三
                if (limitValues.Count > 0)
                {
                    return(GetLimitByBailType(limitValues, openInterest, out positionValueType));
                }
                errMsg = "代码" + code + " 无法获取交割前三个月的对应的持仓限制列表参数正在以一般月份查询。";
                LogHelper.WriteDebug(errCode + errMsg);

                //否则就是一般月份
                limitValues = FindLimitValuesByMonthType(values, Types.QHCFPositionMonthType.GeneralMonth);
                if (limitValues.Count > 0)
                {
                    PositionLimitValueInfo generOnThree = GetLimitByBailType(limitValues, openInterest, out positionValueType);
                    if (generOnThree.PositionValue == -1)
                    {
                        generOnThree.IsNoComputer = true;
                    }
                    return(generOnThree);
                }
                errMsg = "代码" + code + " 无法获取交割月份前三个月的一般月份的对应的持仓限制列表参数。";
                LogHelper.WriteDebug(errCode + errMsg);
            }
            #endregion

            #region 交割月份前二个月
            //如果是前二
            if (monthType == Types.QHCFPositionMonthType.OnDeliAgoTwoMonth)
            {
                limitValues = FindLimitValuesByMonthType(values, monthType);

                //是前二
                if (limitValues.Count > 0)
                {
                    return(GetLimitByBailType(limitValues, openInterest, out positionValueType));
                }
                errMsg = "代码" + code + " 无法获取交割前两个月的对应的持仓限制列表参数。";
                LogHelper.WriteDebug(errCode + errMsg);
                //否则就是一般月份
                limitValues = FindLimitValuesByMonthType(values, Types.QHCFPositionMonthType.GeneralMonth);
                if (limitValues.Count > 0)
                {
                    PositionLimitValueInfo generOnDeliAgo = GetLimitByBailType(limitValues, openInterest, out positionValueType);
                    if (generOnDeliAgo.PositionValue == -1)
                    {
                        generOnDeliAgo.IsNoComputer = true;
                    }
                    return(generOnDeliAgo);
                }
                errMsg = "代码" + code + " 无法获取交割月份前两个月的一般月份的对应的持仓限制列表参数。";
                LogHelper.WriteDebug(errCode + errMsg);
            }
            #endregion

            #region 交割月份前一个月
            //如果是前一
            if (monthType == Types.QHCFPositionMonthType.OnDeliAgoMonth)
            {
                limitValues = FindLimitValuesByMonthType(values, monthType);

                //是前一
                if (limitValues.Count > 0)
                {
                    return(GetLimitByBailType(limitValues, openInterest, out positionValueType));
                }
                errMsg = "代码" + code + " 无法获取交割前一个月的对应的持仓限制列表参数正在以一般月份查询。";
                LogHelper.WriteDebug(errCode + errMsg);



                //否则就是一般月份
                limitValues = FindLimitValuesByMonthType(values, Types.QHCFPositionMonthType.GeneralMonth);
                if (limitValues.Count > 0)
                {
                    PositionLimitValueInfo generOnDeli = GetLimitByBailType(limitValues, openInterest, out positionValueType);
                    if (generOnDeli.PositionValue == -1)
                    {
                        generOnDeli.IsNoComputer = true;
                    }
                    return(generOnDeli);
                }
                errMsg = "代码" + code + " 无法获取交割月份前一个月的一般月份的对应的持仓限制列表参数。";
                LogHelper.WriteDebug(errCode + errMsg);
            }
            #endregion

            #region 交割月份一般月份
            //如果是一般月份
            if (monthType == Types.QHCFPositionMonthType.GeneralMonth)
            {
                limitValues = FindLimitValuesByMonthType(values, monthType);

                //是一般月份
                if (limitValues.Count > 0)
                {
                    PositionLimitValueInfo gener = GetLimitByBailType(limitValues, openInterest, out positionValueType);
                    if (gener.PositionValue == -1)
                    {
                        gener.IsNoComputer = true;
                    }
                    return(gener);
                }
                errMsg = "代码" + code + " 无法获取一般月份的对应的持仓限制列表参数。";
                LogHelper.WriteDebug(errCode + errMsg);
            }
            #endregion

            PositionLimitValueInfo info = new PositionLimitValueInfo();
            info.PositionValue    = -1;
            info.IsMinMultiple    = false;
            info.MinMultipleValue = 0;
            //return -1;
            return(info);
        }
Пример #21
0
        /// <summary>
        /// 处理费交割月份的合约
        /// </summary>
        /// <param name="code">合约代码</param>
        /// <param name="year">合约年</param>
        /// <param name="month">合约月</param>
        /// <param name="compareDate">要比较的日期</param>
        /// <param name="breedClassID">合约代码所属品种类型</param>
        /// <returns>保证金比例</returns>
        private static decimal ProcessNonDeliveryMonth(string code, int year, int month, DateTime compareDate, int breedClassID)
        {
            string errCode = "GT-8482";
            string errMsg  = "无法根据期货商品代码获取其对应的保证金比例。";


            IList <QH_CFBailScaleValue> values = GetBailScaleValues(code, breedClassID);

            if (values == null || values.Count <= 0)
            {
                throw new VTException(errCode, errMsg);
            }

            IRealtimeMarketService service = RealTimeMarketUtil.GetRealMarketService(); //RealtimeMarketServiceFactory.GetService();
            //FutData futData = service.GetFutData(code);
            MerFutData merFutData = service.GetMercantileFutData(code);

            if (merFutData == null)
            {
                errMsg = "处理交割月合约保证金时无法获取行情。";
                throw new VTException(errCode, errMsg);
            }

            //持仓量
            decimal openInterest = (decimal)merFutData.OpenInterest;

            //判断当前月份是那种交割月份类型
            Types.QHCFPositionMonthType monthType = FutureService.CheckMonthType(year, month, compareDate);

            IList <QH_CFBailScaleValue> scaleValues;

            #region  前三个月交割月份
            //如果是前三
            if (monthType == Types.QHCFPositionMonthType.OnDeliAgoThreeMonth)
            {
                scaleValues = FindScaleValuesByMonthType(values, monthType);

                //是前三
                if (scaleValues.Count > 0)
                {
                    return(GetScaleByBailType(scaleValues, openInterest, compareDate, breedClassID));
                }

                //否则就是一般月份
                scaleValues = FindScaleValuesByMonthType(values, Types.QHCFPositionMonthType.GeneralMonth);
                if (scaleValues.Count > 0)
                {
                    return(GetScaleByBailType(scaleValues, openInterest, compareDate, breedClassID));
                }
            }
            #endregion

            #region 前二
            //如果是前二
            if (monthType == Types.QHCFPositionMonthType.OnDeliAgoTwoMonth)
            {
                scaleValues = FindScaleValuesByMonthType(values, monthType);

                //是前二
                if (scaleValues.Count > 0)
                {
                    return(GetScaleByBailType(scaleValues, openInterest, compareDate, breedClassID));
                }

                //否则就是一般月份
                scaleValues = FindScaleValuesByMonthType(values, Types.QHCFPositionMonthType.GeneralMonth);
                if (scaleValues.Count > 0)
                {
                    return(GetScaleByBailType(scaleValues, openInterest, compareDate, breedClassID));
                }
            }
            #endregion

            #region 前一

            //如果是前一
            if (monthType == Types.QHCFPositionMonthType.OnDeliAgoMonth)
            {
                scaleValues = FindScaleValuesByMonthType(values, monthType);

                //是前一
                if (scaleValues.Count > 0)
                {
                    return(GetScaleByBailType(scaleValues, openInterest, compareDate, breedClassID));
                }

                //否则就是一般月份
                scaleValues = FindScaleValuesByMonthType(values, Types.QHCFPositionMonthType.GeneralMonth);
                if (scaleValues.Count > 0)
                {
                    return(GetScaleByBailType(scaleValues, openInterest, compareDate, breedClassID));
                }
            }
            #endregion

            #region 一般月份
            //如果是一般月份
            if (monthType == Types.QHCFPositionMonthType.GeneralMonth)
            {
                scaleValues = FindScaleValuesByMonthType(values, monthType);

                //是一般月份
                if (scaleValues.Count > 0)
                {
                    return(GetScaleByBailType(scaleValues, openInterest, compareDate, breedClassID));
                }
            }
            #endregion

            #region 最低保证金
            QH_SIFBail sifBail = MCService.FuturesTradeRules.GetSIFBailByBreedClassID(breedClassID);
            if (sifBail == null)
            {
                LogHelper.WriteError("Debug_Test_Bail_ProcessNonDeliveryMonth_01:无法获取最低交易保证金比例", new Exception(""));
                return(-1);
            }
            else
            {
                LogHelper.WriteDebug("Debug_Test_Bail_ProcessNonDeliveryMonth_02:无对应的保证金比例区间范围值获取最低交易保证金比例" + sifBail.BailScale);

                return(sifBail.BailScale);
            }
            #endregion

            //return -1;
        }