/// <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); }
/// <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); }
/// <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); }