Exemplo n.º 1
0
        /// <summary>
        /// 现货行情转换成自定义行情实体
        /// </summary>
        /// <param name="data">自定义实体</param>
        /// <returns></returns>
        public MarketDataLevel HqExDataConvertMarketDataLevel(HqExData data)
        {
            MarketDataLevel level = new MarketDataLevel();

            level.Code = data.CodeKey;
            level.Name = data.Name;
            HqData hqData = data.HqData;

            #region 买价
            level.BuyFirstPrice  = (decimal)hqData.Buyprice1;
            level.BuySecondPrice = (decimal)hqData.Buyprice2;
            level.BuyThirdPrice  = (decimal)hqData.Buyprice3;
            level.BuyFourthPrice = (decimal)hqData.Buyprice4;
            level.BuyFivePrice   = (decimal)hqData.Buyprice5;
            #endregion

            #region 买量
            level.BuyFirstVolume  = (decimal)hqData.Buyvol1;
            level.BuySecondVolume = (decimal)hqData.Buyvol2;
            level.BuyThirdVolume  = (decimal)hqData.Buyvol3;
            level.BuyFourthVolume = (decimal)hqData.Buyvol4;
            level.BuyFiveVolume   = (decimal)hqData.Buyvol5;
            #endregion

            #region 卖价
            level.SellFirstPrice  = (decimal)hqData.Sellprice1;
            level.SellSecondPrice = (decimal)hqData.Sellprice2;
            level.SellThirdPrice  = (decimal)hqData.Sellprice3;
            level.SellFourthPrice = (decimal)hqData.Sellprice4;
            level.SellFivePrice   = (decimal)hqData.Sellprice5;
            #endregion

            #region 卖量
            level.SellFirstVolume  = (decimal)hqData.Sellvol1;
            level.SellSecondVolume = (decimal)hqData.Sellvol2;
            level.SellThirdVolume  = (decimal)hqData.Sellvol3;
            level.SellFourthVolume = (decimal)hqData.Sellvol4;
            level.SellFiveVolume   = (decimal)hqData.Sellvol5;
            #endregion

            level.LastPrice         = decimal.Parse(hqData.Lasttrade.ToString());
            level.LastVolume        = decimal.Parse(data.LastVolume.ToString());
            level.LowerPrice        = decimal.Parse(data.LowB.ToString());
            level.UpPrice           = decimal.Parse(data.UpB.ToString());
            level.YesterPrice       = decimal.Parse(data.YClose.ToString());
            level.MarketRefreshTime = data.HqData.Time;
            return(level);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 港股行情转换成自定义行情实体
        /// </summary>
        /// <param name="hqData">自定义实体</param>
        /// <returns></returns>
        public MarketDataLevel HKStockDataConvertMarketDataLevel(HKStock hqData)
        {
            MarketDataLevel level = new MarketDataLevel();

            level.Code = hqData.CodeKey;
            level.Name = hqData.StrName;

            #region 买价
            level.BuyFirstPrice  = (decimal)hqData.Buyprice1;
            level.BuySecondPrice = (decimal)hqData.Buyprice2;
            level.BuyThirdPrice  = (decimal)hqData.Buyprice3;
            level.BuyFourthPrice = (decimal)hqData.Buyprice4;
            level.BuyFivePrice   = (decimal)hqData.Buyprice5;
            #endregion

            #region 买量
            level.BuyFirstVolume  = (decimal)hqData.Buyvol1;
            level.BuySecondVolume = (decimal)hqData.Buyvol2;
            level.BuyThirdVolume  = (decimal)hqData.Buyvol3;
            level.BuyFourthVolume = (decimal)hqData.Buyvol4;
            level.BuyFiveVolume   = (decimal)hqData.Buyvol5;
            #endregion

            #region 卖价
            level.SellFirstPrice  = (decimal)hqData.Sellprice1;
            level.SellSecondPrice = (decimal)hqData.Sellprice2;
            level.SellThirdPrice  = (decimal)hqData.Sellprice3;
            level.SellFourthPrice = (decimal)hqData.Sellprice4;
            level.SellFivePrice   = (decimal)hqData.Sellprice5;
            #endregion

            #region 卖量
            level.SellFirstVolume  = (decimal)hqData.Sellvol1;
            level.SellSecondVolume = (decimal)hqData.Sellvol2;
            level.SellThirdVolume  = (decimal)hqData.Sellvol3;
            level.SellFourthVolume = (decimal)hqData.Sellvol4;
            level.SellFiveVolume   = (decimal)hqData.Sellvol5;
            #endregion

            level.LastPrice         = decimal.Parse(hqData.Lasttrade.ToString());
            level.LastVolume        = decimal.Parse(hqData.PTrans.ToString());
            level.LowerPrice        = decimal.Parse(hqData.Low.ToString());
            level.UpPrice           = decimal.Parse(hqData.High.ToString());
            level.YesterPrice       = decimal.Parse(hqData.ClosePrice.ToString());
            level.MarketRefreshTime = DateTime.Parse(hqData.Time);
            return(level);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Title:根据代码和代码所属类型获取最后成交价(最新成交价)
        /// Create by:李健华
        /// Create Date:2009-11-08
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public MarketDataLevel GetLastPriceByCode(string code, int breedClassType, out string errMsg)
        {
            MarketDataLevel result = null;

            errMsg = "";
            try
            {
                switch ((Types.BreedClassTypeEnum)breedClassType)
                {
                case Types.BreedClassTypeEnum.Stock:
                    HqExData data = GetRealMarketService().GetStockHqData(code);
                    if (data == null || data.HqData == null)
                    {
                        errMsg = "GT-0023:无法获取当前现货代码相关行情";
                        return(result);
                    }
                    // HqExData exData = data;
                    //float lastPrice = exData.HqData.Lasttrade;
                    //result = (decimal)lastPrice;
                    result = HqExDataConvertMarketDataLevel(data);
                    break;

                case Types.BreedClassTypeEnum.CommodityFuture:
                    //add by 董鹏 2010-01-26
                    MerFutData cfdata = GetRealMarketService().GetMercantileFutData(code);
                    if (cfdata == null)
                    {
                        errMsg = "GT-0023:无法获取当前商品期货代码相关行情";
                        return(result);
                    }
                    //MerFutData cforgData = cfdata;
                    //double cflastPrice = cforgData.Lasttrade;
                    //result = (decimal)cflastPrice;
                    result = MerFutDataConvertMarketDataLevel(cfdata);
                    break;

                case Types.BreedClassTypeEnum.StockIndexFuture:
                    FutData qhdata = GetRealMarketService().GetFutData(code);
                    if (qhdata == null)
                    {
                        errMsg = "GT-0023:无法获取当前股指期货代码相关行情";
                        return(result);
                    }
                    //FutData orgData = qhdata;
                    //double qhlastPrice = orgData.Lasttrade;
                    //result = (decimal)qhlastPrice;
                    result = FutDataDataConvertMarketDataLevel(qhdata);
                    break;

                case Types.BreedClassTypeEnum.HKStock:
                    HKStock hkdata = GetRealMarketService().GetHKStockData(code);
                    if (hkdata == null)
                    {
                        errMsg = "GT-0023:无法获取当前港股代码相关行情";
                        return(result);
                    }
                    //double hkLastPrice = hkdata.Lasttrade;
                    //result = (decimal)hkLastPrice;
                    result = HKStockDataConvertMarketDataLevel(hkdata);
                    break;

                default:
                    errMsg = "GT-0023:无此代码所属类型的行情";
                    break;
                }
            }
            catch (Exception ex)
            {
                errMsg = ex.Message;
                LogHelper.WriteError("GT-0023:根据代码和代码所属类型获取最后成交价(最新成交价)异常", ex);
            }

            return(result);
        }
        /// <summary>
        /// 商品期货强行平仓
        /// Create by:董鹏
        /// Create Date:2010-02-04
        /// </summary>
        /// <param name="orderAccepter">委托接收对象</param>
        /// <param name="holdTable">持仓实体</param>
        /// <param name="price">委托价格</param>
        /// <param name="amount">委托数量</param>
        /// <param name="isExpiredContract">是否是过期的合约需要平仓</param>
        private void CloseCommoditiesContract(OrderAccepter orderAccepter, QH_HoldAccountTableInfo holdTable, float price, float amount, Types.QHForcedCloseType closeType, Entity.Contants.Types.FutureOpenCloseType closeType2)
        {
            if (holdTable == null)
            {
                return;
            }
            if (holdTable.HistoryHoldAmount == 0 && closeType2 == ReckoningCounter.Entity.Contants.Types.FutureOpenCloseType.ClosePosition)
            {
                return;
            }
            if (holdTable.TodayHoldAmount == 0 && closeType2 == ReckoningCounter.Entity.Contants.Types.FutureOpenCloseType.CloseTodayPosition)
            {
                return;
            }

            MercantileFuturesOrderRequest2 request = null;

            request = new MercantileFuturesOrderRequest2();
            string type = "";

            switch (closeType)
            {
            case Types.QHForcedCloseType.Expired:
                // request.IsExpiredContract = true;
                type = "过期合约持仓检查平仓";
                break;

            case Types.QHForcedCloseType.CapitalCheck:
                //request.IsCapitalCheckContract = true;
                type = "资金检查平仓";
                break;

            case Types.QHForcedCloseType.OverHoldLimit:
                //request.IsOverHoldLimitContract = true;
                type = "持仓限制检查平仓";
                break;

            case Types.QHForcedCloseType.NotModMinUnit:
                //request.IsNotModMinUnitContract = true;
                type = "最小交割单位整数倍持仓检查平仓";
                break;
            }

            request.QHForcedCloseType  = closeType; //盘前检查强行平仓类型
            request.IsForcedCloseOrder = true;      //是否盘前检查强行平仓

            //{
            //    request = new MercantileFuturesOrderRequest2 { IsExpiredContract = true, IsCapitalCheckContract = false };
            //}
            //else
            //{
            //    request = new MercantileFuturesOrderRequest2 { IsExpiredContract = false, IsCapitalCheckContract = true };
            //}

            var buySellType = holdTable.BuySellTypeId == (int)Types.TransactionDirection.Buying
                                  ? Types.TransactionDirection.Selling
                                  : Types.TransactionDirection.Buying;

            request.BuySell       = buySellType;
            request.Code          = holdTable.Contract;
            request.FundAccountId = capitalAccount.UserAccountDistributeLogo;
            request.OpenCloseType = closeType2;

            request.OrderAmount = amount;//(float)holdTable.HistoryHoldAmount;

            //和刘丹确认过,不是过期合约平仓或者价格为0时,取当日的涨停价或跌停价报盘,买平用涨停价,卖平用跌停价,add by 董鹏 2010-02-23
            //2010-04-02 和刘丹、苏婷再次讨论,定为先取行情最新价,若取不到在使用涨跌停价 update by 董鹏 2010-04-02
            if (closeType != Types.QHForcedCloseType.Expired || price == 0)
            {
                string errMsg;
                int    errcount = 0;

                //获取行情最新成交价
                MarketDataLevel marketData = null;
                while (marketData == null)
                {
                    marketData = RealTimeMarketUtil.GetInstance().GetLastPriceByCode(holdTable.Contract, (int)Types.BreedClassTypeEnum.CommodityFuture, out errMsg);
                    errcount++;
                    if (errcount > 10)
                    {
                        LogHelper.WriteDebug("期货强行平仓,无法获取到行情最新成交价。CloseCommoditiesContract");
                        break;
                    }
                    if (marketData == null)
                    {
                        Thread.Sleep(10000);
                    }
                }
                if (marketData != null && marketData.LastPrice != 0)
                {
                    price = (float)marketData.LastPrice;
                }
                else
                {
                    //取不到行情成交价,取涨跌停板价
                    HighLowRangeValue hlValue = null;

                    while (hlValue == null)
                    {
                        hlValue = MCService.HLRangeProcessor.GetHighLowRangeValueByCommodityCode(holdTable.Contract, 0);
                        errcount++;
                        if (errcount > 10)
                        {
                            LogHelper.WriteDebug("期货强行平仓,无法获取到涨跌停板价格。CloseCommoditiesContract");
                            return;
                        }
                        if (hlValue == null)
                        {
                            Thread.Sleep(10000);
                        }
                    }
                    price = holdTable.BuySellTypeId == (int)Types.TransactionDirection.Buying
                                      ? (float)hlValue.HighRangeValue
                                      : (float)hlValue.LowRangeValue;
                }
            }
            request.OrderPrice    = price;
            request.OrderUnitType = Types.UnitType.Hand;
            request.OrderWay      = Entity.Contants.Types.OrderPriceType.OPTLimited;

            string format = "FutureDayChecker开盘持仓检查强制平仓[UserAccountDistributeLogo={0},AccountHoldLogoId={1},Code={2}, Price={3}, 平仓类型={4}]-委托信息:" + request;
            string msg    = string.Format(format, holdTable.UserAccountDistributeLogo, holdTable.AccountHoldLogoId, holdTable.Contract, price, type);

            LogHelper.WriteDebug(msg + holdTable);

            UA_UserAccountAllocationTableDal ua_UserAccountAllocationTableDal = new UA_UserAccountAllocationTableDal();
            //设置为其所属的交易员
            var userAccountAllocationTable = ua_UserAccountAllocationTableDal.GetModel(capitalAccount.UserAccountDistributeLogo);

            if (userAccountAllocationTable == null)
            {
                string msg2 = "开盘检查强行平仓失败!无法获取资金账户信息,ID=" + capitalAccount.UserAccountDistributeLogo;
                LogHelper.WriteInfo(msg2);
                return;
            }
            UA_UserBasicInformationTableDal ua_UserBasicInformationTableDal = new UA_UserBasicInformationTableDal();
            var user = ua_UserBasicInformationTableDal.GetModel(userAccountAllocationTable.UserID);

            if (user == null)
            {
                string msg3 = "开盘检查强行平仓失败!无法获取交易员信息,UserID=" + userAccountAllocationTable.UserID;
                LogHelper.WriteInfo(msg3);
                return;
            }

            request.TraderId       = user.UserID;
            request.TraderPassword = user.Password;

            orderAccepter.DoMercantileFuturesOrder(request);
        }