public QuotationManager( QuotV5.Binary.RealTimeQuotConnection[] quotConnections, QuotationRepository quotRepository, QuotationMQPublisher quotPublisher, SecurityInfoProvider securityInfoProvider, IndexInfoProvider indexInfoProvider, CashAuctionParamsProvider cashAuctionParamsProvider, DerivativeAuctionParamsProvider derivativeAuctionParamsProvider, NegotiationParamsProvider negotiationParamsProvider, SecurityCloseMDProvider securityCloseMDProvider, Log4cb.ILog4cbHelper logHelper ) { this.quotConnections = quotConnections; this.quotRepository = quotRepository; this.quotPublisher = quotPublisher; this.securityInfoProvider = securityInfoProvider; this.indexInfoProvider = indexInfoProvider; this.cashAuctionParamsProvider = cashAuctionParamsProvider; this.derivativeAuctionParamsProvider = derivativeAuctionParamsProvider; this.negotiationParamsProvider = negotiationParamsProvider; this.securityCloseMDProvider = securityCloseMDProvider; this.logHelper = logHelper; foreach (var conn in this.quotConnections) conn.OnMarketDataReceived += new Action<QuotV5.Binary.MarketDataEx>(QuotConn_OnMarketDataReceived); this.securityInfoProvider.OnStaticInfoRead += new Action<List<QuotV5.StaticInfo.SecurityInfoBase>>(SecurityInfoProvider_OnStaticInfoRead); this.indexInfoProvider.OnStaticInfoRead += new Action<List<QuotV5.StaticInfo.IndexInfo>>(IndexInfoProvider_OnStaticInfoRead); this.cashAuctionParamsProvider.OnStaticInfoRead += new Action<List<QuotV5.StaticInfo.CashAuctionParams>>(CashAuctionParamsProvider_OnStaticInfoRead); this.derivativeAuctionParamsProvider.OnStaticInfoRead += new Action<List<QuotV5.StaticInfo.DerivativeAuctionParams>>(DerivativeAuctionParamsProvider_OnStaticInfoRead); this.negotiationParamsProvider.OnStaticInfoRead += new Action<List<QuotV5.StaticInfo.NegotiationParams>>(NegotiationParamsProvider_OnStaticInfoRead); //this.securityCloseMDProvider.OnStaticInfoRead += new Action<List<QuotV5.StaticInfo.SecurityCloseMD>>(SecurityCloseMDProvider_OnStaticInfoRead); }
public void Record(QuotV5.Binary.MessagePackEx msgPack) { MessagePack mp = new MessagePack() { ReciveTime = msgPack.ReceiveTime, Data = QuotV5.DataHelper.UnionByteArrays(msgPack.MessagePack.HeaderData, msgPack.MessagePack.BodyData, msgPack.MessagePack.TrailerData) }; try { this.dataCollection.Insert(mp); } catch (Exception ex) { this.logHelper.LogErrMsg(ex, "保存MessagePack到Mongo异常"); } }
private void SetFutureQuotationProperty(FutureQuotation quotInfo, QuotV5.Binary.RealtimeStatus status) { quotInfo.stkId = status.Status.SecurityID; }
private void SetFutureQuotationProperty(FutureQuotation quotInfo, QuotV5.Binary.QuotSnapCommonInfo quotSnapCommonInfo) { quotInfo.stkId = quotSnapCommonInfo.SecurityID; quotInfo.stkStatus = null; if (!string.IsNullOrEmpty(quotSnapCommonInfo.TradingPhaseCode) && quotSnapCommonInfo.TradingPhaseCode.Length > 1) { string flag = quotSnapCommonInfo.TradingPhaseCode.Substring(1, 1); if (flag == "0") quotInfo.stkStatus = "LIST"; else if (flag == "1") quotInfo.stkStatus = "PAUSE"; } quotInfo.exchTotalKnockAmt = quotSnapCommonInfo.TotalValueTrade / 10000; quotInfo.exchTotalKnockQty = quotSnapCommonInfo.TotalVolumeTrade / 100; // quotInfo.preClosePrice = quotSnapCommonInfo.PrevClosePx; quotInfo.lastModifyTime = quotSnapCommonInfo.OrigTime; }
private void SetStockQuotationProperty(StockQuotation quotInfo, QuotV5.Binary.QuotSnap300111 quotSnap) { SetStockQuotationProperty(quotInfo, quotSnap.CommonInfo); if (quotSnap.ExtInfo != null && quotSnap.ExtInfo.MDEntries != null && quotSnap.ExtInfo.MDEntries.Length > 0) { foreach (var mdEntry in quotSnap.ExtInfo.MDEntries) { if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.BuyPrice) { if (mdEntry.Entry.MDPriceLevel == 1) { quotInfo.buyPrice1 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyQty1 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 2) { quotInfo.buyPrice2 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyQty2 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 3) { quotInfo.buyPrice3 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyQty3 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 4) { quotInfo.buyPrice4 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyQty4 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 5) { quotInfo.buyPrice5 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyQty5 = mdEntry.Entry.MDEntrySize / qtyTimes; } } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.SellPrice) { if (mdEntry.Entry.MDPriceLevel == 1) { quotInfo.sellPrice1 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellQty1 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 2) { quotInfo.sellPrice2 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellQty2 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 3) { quotInfo.sellPrice3 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellQty3 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 4) { quotInfo.sellPrice4 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellQty4 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 5) { quotInfo.sellPrice5 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellQty5 = mdEntry.Entry.MDEntrySize / qtyTimes; } } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.HighPrice) { quotInfo.highPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.KnockPrice) { quotInfo.newPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.LowPrice) { quotInfo.lowPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.OpenPrice) { quotInfo.openPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.MaxOrderPrice) { quotInfo.maxOrderPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.MinOrderPrice) { quotInfo.minOrderPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.IOPV) { quotInfo.IOPV = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.BuySummary) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.SellSummary) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.SettlePrice) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.PriceEarningRatio1) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.PriceEarningRatio2) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.Diff1) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.Diff2) //{ //} } } quotInfo.change = quotInfo.newPrice - quotInfo.closePrice; if (quotInfo.closePrice != 0.0m) quotInfo.changePercent = quotInfo.change / quotInfo.closePrice; }
private void SetStockQuotationProperty(StockQuotation quotInfo, QuotV5.Binary.QuotSnap300611 quotSnap) { SetStockQuotationProperty(quotInfo, quotSnap.CommonInfo); quotInfo.buyQty1 = 0; quotInfo.buyQty2 = 0; quotInfo.buyQty3 = 0; quotInfo.buyQty4 = 0; quotInfo.buyQty5 = 0; quotInfo.sellQty1 = 0; quotInfo.sellQty2 = 0; quotInfo.sellQty3 = 0; quotInfo.sellQty4 = 0; quotInfo.sellQty5 = 0; quotInfo.buyPrice1 = 0; quotInfo.buyPrice2 = 0; quotInfo.buyPrice3 = 0; quotInfo.buyPrice4 = 0; quotInfo.buyPrice5 = 0; quotInfo.sellPrice1 = 0; quotInfo.sellPrice2 = 0; quotInfo.sellPrice3 = 0; quotInfo.sellPrice4 = 0; quotInfo.sellPrice5 = 0; if (quotSnap.ExtInfo != null && quotSnap.ExtInfo.MDEntries != null && quotSnap.ExtInfo.MDEntries.Length > 0) { foreach (var mdEntry in quotSnap.ExtInfo.MDEntries) { if (mdEntry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300611.MDEntryType.Buy) { quotInfo.buyPrice1 = (decimal)mdEntry.MDEntryPx / mdEntryPxTimes; quotInfo.buyQty1 = mdEntry.MDEntrySize/qtyTimes; } else if (mdEntry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300611.MDEntryType.Sell) { quotInfo.sellPrice1 = (decimal)mdEntry.MDEntryPx / mdEntryPxTimes; quotInfo.sellQty1 = mdEntry.MDEntrySize / qtyTimes; } } } }
private void SetStockQuotationProperty(StockQuotation quotInfo, QuotV5.Binary.RealtimeStatus status) { quotInfo.stkId = status.Status.SecurityID; quotInfo.stkIdPrefix = status.Status.SecurityPreName; if (!string.IsNullOrEmpty(status.Status.SecurityPreName)) { quotInfo.closeFlag = status.Status.SecurityPreName.Substring(0, 1); if (status.Status.SecurityPreName.Length > 1) { quotInfo.passCreditCashStk = status.Status.SecurityPreName.Substring(1, 1); quotInfo.passCreditShareStk = quotInfo.passCreditCashStk; } } }
private void SetStockInfoProperty(StockInfo stockInfo, QuotV5.StaticInfo.SecurityCloseMD securityCloseMD) { stockInfo.stkId = securityCloseMD.SecurityID; stockInfo.exchTotalKnockAmt = securityCloseMD.TotalValueTrade; stockInfo.exchTotalKnockQty = (Int64)securityCloseMD.TotalVolumeTrade; }
private void SetStockInfoProperty(StockInfo stockInfo, QuotV5.StaticInfo.CashAuctionParams cashAuctionParams) { stockInfo.stkId = cashAuctionParams.SecurityID; stockInfo.buyQtyUpperLimit = (int)cashAuctionParams.BuyQtyUpperLimit; stockInfo.sellQtyUpperLimit = (int)cashAuctionParams.SellQtyUpperLimit; stockInfo.orderPriceUnit = cashAuctionParams.PriceTick; stockInfo.marketMarkerFlag = cashAuctionParams.MarketMakerFlag; }
private void ProcessStaticInfo(QuotV5.StaticInfo.SecurityCloseMD securityInfo) { RawStaticInfoSnap.SecurityCloseMD[securityInfo.SecurityID] = securityInfo; StockInfo preStockInfo = null; StockInfo newStockInfo = null; if (ProcessedDataSnap.StockInfo.TryGetValue(securityInfo.SecurityID, out preStockInfo)) { newStockInfo = preStockInfo.Clone(); SetStockInfoProperty(newStockInfo, securityInfo); } else { newStockInfo = new StockInfo(); SetStockInfoProperty(newStockInfo, securityInfo); } if (newStockInfo != null) { ProcessedDataSnap.StockInfo[newStockInfo.stkId] = newStockInfo; quotRepository.UpdateBasicInfo(newStockInfo); } }
private void ProcessStaticInfo(QuotV5.StaticInfo.DerivativeAuctionParams securityInfo) { RawStaticInfoSnap.DerivativeAuctionParams[securityInfo.SecurityID] = securityInfo; FutureQuotation preQuotInfo = null; FutureQuotation newQuotInfo = null; if (ProcessedDataSnap.FutureQuotation.TryGetValue(securityInfo.SecurityID, out preQuotInfo)) { newQuotInfo = preQuotInfo.Clone(); SetFutureQuotationProperty(newQuotInfo, securityInfo); } else { newQuotInfo = new FutureQuotation(); SetFutureQuotationProperty(newQuotInfo, securityInfo); } if (newQuotInfo != null) { ProcessedDataSnap.FutureQuotation[newQuotInfo.stkId] = newQuotInfo; quotRepository.UpdateFutureQuotation(newQuotInfo); } }
private void ProcessStaticInfo(QuotV5.StaticInfo.SecurityInfoBase securityInfo) { RawStaticInfoSnap.SecurityInfo[securityInfo.CommonInfo.SecurityID] = securityInfo; if (securityInfo is QuotV5.StaticInfo.OptionSecuirtyInfo) { QuotV5.StaticInfo.OptionSecuirtyInfo optionSecurityInfo = securityInfo as QuotV5.StaticInfo.OptionSecuirtyInfo; FutureQuotation preFutureQuotation = null; FutureQuotation newFutureQuotation = null; if (ProcessedDataSnap.FutureQuotation.TryGetValue(securityInfo.CommonInfo.SecurityID, out preFutureQuotation)) { newFutureQuotation = preFutureQuotation.Clone(); SetFutureQuotationProperty(newFutureQuotation, optionSecurityInfo); } else { newFutureQuotation = new FutureQuotation(); SetFutureQuotationProperty(newFutureQuotation, optionSecurityInfo); } if (newFutureQuotation != null) { ProcessedDataSnap.FutureQuotation[newFutureQuotation.stkId] = newFutureQuotation; quotRepository.UpdateFutureQuotation(newFutureQuotation); } } else { StockInfo preStockInfo = null; StockInfo newStockInfo = null; if (ProcessedDataSnap.StockInfo.TryGetValue(securityInfo.CommonInfo.SecurityID, out preStockInfo)) { newStockInfo = preStockInfo.Clone(); SetStockInfoProperty(newStockInfo, securityInfo); } else { newStockInfo = new StockInfo(); SetStockInfoProperty(newStockInfo, securityInfo); } if (newStockInfo != null) { ProcessedDataSnap.StockInfo[newStockInfo.stkId] = newStockInfo; quotRepository.UpdateBasicInfo(newStockInfo); } } }
private void ProcessMarketData(QuotV5.Binary.RealtimeStatus status, DateTime receiveTime) { RawQuotationInfoSnap.RealtimeStatus[status.Status.SecurityID] = status; StockQuotation preQuotInfo = null; StockQuotation newQuotInfo = null; if (ProcessedDataSnap.StockQuotation.TryGetValue(status.Status.SecurityID, out preQuotInfo)) { newQuotInfo = preQuotInfo.Clone(); SetStockQuotationProperty(newQuotInfo, status); } else { newQuotInfo = new StockQuotation(); QuotV5.StaticInfo.SecurityInfoBase securityInfo = null; if (RawStaticInfoSnap.SecurityInfo.TryGetValue(status.Status.SecurityID, out securityInfo)) SetStockQuotationProperty(newQuotInfo, securityInfo); SetStockQuotationProperty(newQuotInfo, status); QuotV5.Binary.QuotSnap300111 quotSnap = null; if (RawQuotationInfoSnap.QuotSnap300111.TryGetValue(status.Status.SecurityID, out quotSnap)) SetStockQuotationProperty(newQuotInfo, quotSnap); QuotV5.Binary.QuotSnap300611 quotSnap2 = null; if (RawQuotationInfoSnap.QuotSnap300611.TryGetValue(status.Status.SecurityID, out quotSnap2)) SetStockQuotationProperty(newQuotInfo, quotSnap2); } if (newQuotInfo != null) { newQuotInfo.receiveTime = DatetimeToLong(receiveTime); ProcessedDataSnap.StockQuotation[newQuotInfo.stkId] = newQuotInfo; quotRepository.UpdateStockQuotation(newQuotInfo); if (quotPublisher != null) quotPublisher.Enqueue(newQuotInfo, true); } }
private void ProcessMarketData(QuotV5.Binary.QuotSnap300111 quotSnap, DateTime receiveTime) { RawQuotationInfoSnap.QuotSnap300111[quotSnap.CommonInfo.SecurityID] = quotSnap; if (quotSnap.CommonInfo.MDStreamID == QuotV5.Binary.QuotSnap300111.MDStreamID.Option) { FutureQuotation preQuotInfo = null; FutureQuotation newQuotInfo = null; if (ProcessedDataSnap.FutureQuotation.TryGetValue(quotSnap.CommonInfo.SecurityID, out preQuotInfo)) { newQuotInfo = preQuotInfo.Clone(); QuotV5.StaticInfo.SecurityInfoBase securityInfo = null; if (RawStaticInfoSnap.SecurityInfo.TryGetValue(quotSnap.CommonInfo.SecurityID, out securityInfo)) SetFutureQuotationProperty(newQuotInfo, securityInfo as QuotV5.StaticInfo.OptionSecuirtyInfo); SetFutureQuotationProperty(newQuotInfo, quotSnap); } else { newQuotInfo = new FutureQuotation(); QuotV5.StaticInfo.SecurityInfoBase securityInfo = null; if (RawStaticInfoSnap.SecurityInfo.TryGetValue(quotSnap.CommonInfo.SecurityID, out securityInfo)) SetFutureQuotationProperty(newQuotInfo, securityInfo as QuotV5.StaticInfo.OptionSecuirtyInfo); QuotV5.Binary.RealtimeStatus status = null; if (RawQuotationInfoSnap.RealtimeStatus.TryGetValue(quotSnap.CommonInfo.SecurityID, out status)) SetFutureQuotationProperty(newQuotInfo, status); SetFutureQuotationProperty(newQuotInfo, quotSnap); } if (newQuotInfo != null) { ProcessedDataSnap.FutureQuotation[newQuotInfo.stkId] = newQuotInfo; quotRepository.UpdateFutureQuotation(newQuotInfo); if (quotPublisher != null) quotPublisher.Enqueue(newQuotInfo, true); } } else { StockQuotation preQuotInfo = null; StockQuotation newQuotInfo = null; if (ProcessedDataSnap.StockQuotation.TryGetValue(quotSnap.CommonInfo.SecurityID, out preQuotInfo)) { newQuotInfo = preQuotInfo.Clone(); QuotV5.StaticInfo.SecurityInfoBase securityInfo = null; if (RawStaticInfoSnap.SecurityInfo.TryGetValue(quotSnap.CommonInfo.SecurityID, out securityInfo)) SetStockQuotationProperty(newQuotInfo, securityInfo); SetStockQuotationProperty(newQuotInfo, quotSnap); } else { newQuotInfo = new StockQuotation(); QuotV5.StaticInfo.SecurityInfoBase securityInfo = null; if (RawStaticInfoSnap.SecurityInfo.TryGetValue(quotSnap.CommonInfo.SecurityID, out securityInfo)) SetStockQuotationProperty(newQuotInfo, securityInfo); QuotV5.Binary.RealtimeStatus status = null; if (RawQuotationInfoSnap.RealtimeStatus.TryGetValue(quotSnap.CommonInfo.SecurityID, out status)) SetStockQuotationProperty(newQuotInfo, status); SetStockQuotationProperty(newQuotInfo, quotSnap); } if (newQuotInfo != null) { newQuotInfo.receiveTime = DatetimeToLong(receiveTime); ProcessedDataSnap.StockQuotation[newQuotInfo.stkId] = newQuotInfo; quotRepository.UpdateStockQuotation(newQuotInfo); if (quotPublisher != null) quotPublisher.Enqueue(newQuotInfo, true); } } }
private void SetStockQuotationProperty(StockQuotation quotInfo, QuotV5.Binary.QuotSnapCommonInfo quotSnapCommonInfo) { quotInfo.stkId = quotSnapCommonInfo.SecurityID; quotInfo.knockQty = quotSnapCommonInfo.TotalVolumeTrade / qtyTimes; quotInfo.knockMoney = (decimal)quotSnapCommonInfo.TotalValueTrade / amtTimes; quotInfo.tradeTimeFlag = quotSnapCommonInfo.TradingPhaseCode; quotInfo.closePrice = (decimal)quotSnapCommonInfo.PrevClosePx / pxTimes; quotInfo.changeTime = quotSnapCommonInfo.OrigTime; }
private void SetStockInfoProperty(StockInfo stockInfo, QuotV5.StaticInfo.SecurityInfoBase securityInfo) { stockInfo.stkId = securityInfo.CommonInfo.SecurityID; stockInfo.stkName = securityInfo.CommonInfo.Symbol; stockInfo.stkEnglishtAbbr = securityInfo.CommonInfo.EnglishName; stockInfo.stkParValue = securityInfo.CommonInfo.ParValue; stockInfo.totalCurrentStkQty = (Int64)securityInfo.CommonInfo.PublicFloatShareQuantity; stockInfo.listedDate = securityInfo.CommonInfo.ListDate; stockInfo.standardConvertRate = securityInfo.CommonInfo.ContractMultiplier; stockInfo.closePrice = securityInfo.CommonInfo.PrevClosePx; stockInfo.basicStkId = securityInfo.CommonInfo.UnderlyingSecurityID; stockInfo.ISINCode = securityInfo.CommonInfo.ISIN; stockInfo.CMOStandardRate = securityInfo.CommonInfo.GageRatio; stockInfo.totalStkQty = (Int64)securityInfo.CommonInfo.OutstandingShare; stockInfo.isCreditCashStk = securityInfo.CommonInfo.CrdBuyUnderlying; stockInfo.isCreditShareStk = securityInfo.CommonInfo.CrdSellUnderlying; if (securityInfo is QuotV5.StaticInfo.StockSecurityInfo) { QuotV5.StaticInfo.StockParams para = (securityInfo as QuotV5.StaticInfo.StockSecurityInfo).Params; stockInfo.stkIndustryType = para.IndustryClassification; stockInfo.lastYearProfit = para.PreviousYearProfitPerShare; stockInfo.thisYearProfit = para.CurrentYearProfitPerShare; } else if (securityInfo is QuotV5.StaticInfo.BondSecurityInfo) { QuotV5.StaticInfo.BondParams para = (securityInfo as QuotV5.StaticInfo.BondSecurityInfo).Params; stockInfo.endingDate = para.MaturityDate; stockInfo.accuredInterest = para.Interest; stockInfo.beginInterestDate = para.InterestAccrualDate; } else if (securityInfo is QuotV5.StaticInfo.FundSecurityInfo) { QuotV5.StaticInfo.FundParams para = (securityInfo as QuotV5.StaticInfo.FundSecurityInfo).Params; stockInfo.NAV = para.NAV; } }
private void SetStockInfoProperty(StockInfo stockInfo, QuotV5.StaticInfo.IndexInfo securityInfo) { stockInfo.stkId = securityInfo.SecurityID; stockInfo.stkName = securityInfo.Symbol; stockInfo.stkEnglishtAbbr = securityInfo.EnglishName; stockInfo.closePrice = securityInfo.PrevCloseIdx; }
/// <summary> /// 收到行情数据 /// </summary> /// <param name="marketData"></param> private void QuotConn_OnMarketDataReceived(QuotV5.Binary.MarketDataEx marketData) { if (marketData.MarketData is QuotV5.Binary.QuotSnap300111) { ProcessMarketData(marketData.MarketData as QuotV5.Binary.QuotSnap300111, marketData.ReceiveTime); } else if (marketData.MarketData is QuotV5.Binary.QuotSnap300611) { ProcessMarketData(marketData.MarketData as QuotV5.Binary.QuotSnap300611, marketData.ReceiveTime); } else if (marketData.MarketData is QuotV5.Binary.QuotSnap309011) { ProcessMarketData(marketData.MarketData as QuotV5.Binary.QuotSnap309011, marketData.ReceiveTime); } else if (marketData.MarketData is QuotV5.Binary.RealtimeStatus) { ProcessMarketData(marketData.MarketData as QuotV5.Binary.RealtimeStatus, marketData.ReceiveTime); } }
private void SetStockInfoProperty(StockInfo stockInfo, QuotV5.StaticInfo.NegotiationParams negotiationParams) { stockInfo.stkId = negotiationParams.SecurityID; }
private void SetFutureQuotationProperty(FutureQuotation quotInfo, QuotV5.StaticInfo.OptionSecuirtyInfo securityInfo) { quotInfo.stkId = securityInfo.CommonInfo.SecurityID; quotInfo.stkName = securityInfo.CommonInfo.Symbol; quotInfo.preClosePrice = securityInfo.CommonInfo.PrevClosePx; quotInfo.basicExchId = null; quotInfo.basicStkId = securityInfo.CommonInfo.UnderlyingSecurityID; quotInfo.contractTimes = (int)securityInfo.Params.ContractUnit; Date lastTradeDay = Date.FromYMMDD(securityInfo.Params.LastTradeDay); DateTime lastTradeDate = lastTradeDay.ToDateTime(); quotInfo.deliveryYear = lastTradeDay.Year; quotInfo.deliveryMonth = lastTradeDay.Month; quotInfo.listDate = securityInfo.CommonInfo.ListDate; quotInfo.firstTrdDate = quotInfo.listDate; quotInfo.lastTrdDate = securityInfo.Params.LastTradeDay; quotInfo.matureDate = securityInfo.Params.LastTradeDay; quotInfo.lastSettleDate = securityInfo.Params.LastTradeDay; quotInfo.preSettlementPrice = securityInfo.Params.PrevClearingPrice; quotInfo.preClosePrice = securityInfo.CommonInfo.PrevClosePx; quotInfo.strikePrice = securityInfo.Params.ExercisePrice; quotInfo.optionType = securityInfo.Params.CallOrPut; quotInfo.exerciseDate = securityInfo.Params.ExerciseBeginDate; quotInfo.adjustedFlag = securityInfo.Params.Adjusted; quotInfo.adjustNum = securityInfo.Params.AdjuestTimes; quotInfo.isinCode = securityInfo.CommonInfo.ISIN; if (securityInfo.CommonInfo.SecurityType == QuotV5.StaticInfo.SecurityType.股票期权) { quotInfo.F_productId= "SO"; } else { quotInfo.F_productId = "EO"; } }
private void SetStockQuotationProperty(StockQuotation quotInfo, QuotV5.StaticInfo.SecurityInfoBase securityInfo) { quotInfo.stkId = securityInfo.CommonInfo.SecurityID; quotInfo.stkName = securityInfo.CommonInfo.Symbol; }
private void SetFutureQuotationProperty(FutureQuotation quotInfo, QuotV5.StaticInfo.DerivativeAuctionParams derivativeAuctionParams) { quotInfo.stkId = derivativeAuctionParams.SecurityID; quotInfo.buyMaxLimitOrderQty = (int)derivativeAuctionParams.BuyQtyUpperLimit; quotInfo.sellMaxLimitOrderQty = (int)derivativeAuctionParams.SellQtyUpperLimit; quotInfo.buyMaxMarketOrderQty = quotInfo.buyMaxLimitOrderQty; quotInfo.sellMaxMarketOrderQty = quotInfo.sellMaxMarketOrderQty; quotInfo.orderPriceUnit = derivativeAuctionParams.PriceTick; quotInfo.maxOrderPrice = derivativeAuctionParams.RisePrice; quotInfo.minOrderPrice = derivativeAuctionParams.FallPrice; quotInfo.marketMakerFlag = derivativeAuctionParams.MarketMakerFlag; quotInfo.currMargin = derivativeAuctionParams.SellMargin; quotInfo.minBuyQtyTimes = (int)derivativeAuctionParams.BuyQtyUnit; quotInfo.minSellQtyTimes = (int)derivativeAuctionParams.SellQtyUnit; quotInfo.preCurrMargin = derivativeAuctionParams.LastSellMargin; quotInfo.marketMakerFlag = derivativeAuctionParams.MarketMakerFlag; }
private void SetStockQuotationProperty(StockQuotation quotInfo, QuotV5.Binary.QuotSnap309011 quotSnap) { SetStockQuotationProperty(quotInfo, quotSnap.CommonInfo); if (quotSnap.ExtInfo != null && quotSnap.ExtInfo.MDEntries != null && quotSnap.ExtInfo.MDEntries.Length > 0) { foreach (var mdEntry in quotSnap.ExtInfo.MDEntries) { if (mdEntry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo309011.MDEntryType.NewIndex) { quotInfo.newIndex = (decimal)mdEntry.MDEntryPx / mdEntryPxTimes ; } else if (mdEntry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo309011.MDEntryType.OpenIndex) { quotInfo.openIndex = (decimal)mdEntry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo309011.MDEntryType.CloseIndex) { quotInfo.closeIndex = (decimal)mdEntry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo309011.MDEntryType.HighIndex) { quotInfo.highIndex = (decimal)mdEntry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo309011.MDEntryType.LowIndex) { quotInfo.lowIndex = (decimal)mdEntry.MDEntryPx / mdEntryPxTimes; } } } quotInfo.change = quotInfo.newIndex - quotInfo.closeIndex; if (quotInfo.closeIndex != 0.0m) quotInfo.changePercent = quotInfo.change / quotInfo.closeIndex; }
private void SetFutureQuotationProperty(FutureQuotation quotInfo, QuotV5.StaticInfo.SecurityCloseMD securityCloseMD) { quotInfo.stkId = securityCloseMD.SecurityID; quotInfo.exchTotalKnockAmt = securityCloseMD.TotalValueTrade; quotInfo.exchTotalKnockQty = (Int64)securityCloseMD.TotalVolumeTrade; quotInfo.closePrice = securityCloseMD.ClosePx; }
private QuotV5.Binary.RealTimeQuotConnection ConstructRealTimeQuotConnection(string connConfigkey,QuotV5.Binary.IMessagePackRecorder recorder=null) { var connConfig = PluginContext.Configuration.BinaryConnections.Connections.FirstOrDefault(c => c.Key == connConfigkey); if (connConfig == null) throw new Exception(); QuotV5.Binary.ConnectionConfig realtimeConnConfig = new QuotV5.Binary.ConnectionConfig() { IP = System.Net.IPAddress.Parse(connConfig.IP), TargetCompID = connConfig.TargetCompID, Port = connConfig.Port, HeartbeatIntervalS = connConfig.HeartbeatIntervalS, ConnectionTimeoutMS = connConfig.ConnectionTimeoutMS, ReconnectIntervalMS = connConfig.ReconnectIntervalMS, SenderCompID = connConfig.SenderCompID, Password = connConfig.Password }; QuotV5.Binary.RealTimeQuotConnection realtimeQuotConn = new QuotV5.Binary.RealTimeQuotConnection(realtimeConnConfig, this.logHelper, recorder); return realtimeQuotConn; }
private void SetFutureQuotationProperty(FutureQuotation quotInfo, QuotV5.Binary.QuotSnap300111 quotSnap) { SetFutureQuotationProperty(quotInfo, quotSnap.CommonInfo); if (quotSnap.ExtInfo != null && quotSnap.ExtInfo.MDEntries != null && quotSnap.ExtInfo.MDEntries.Length > 0) { foreach (var mdEntry in quotSnap.ExtInfo.MDEntries) { if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.BuyPrice) { if (mdEntry.Entry.MDPriceLevel == 1) { quotInfo.buy1 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyAmt1 = mdEntry.Entry.MDEntrySize/qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 2) { quotInfo.buy2 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyAmt2 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 3) { quotInfo.buy3 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyAmt3 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 4) { quotInfo.buy4 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyAmt4 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 5) { quotInfo.buy5 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.buyAmt5 = mdEntry.Entry.MDEntrySize / qtyTimes; } } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.SellPrice) { if (mdEntry.Entry.MDPriceLevel == 1) { quotInfo.sell1 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellAmt1 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 2) { quotInfo.sell2 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellAmt2 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 3) { quotInfo.sell3 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellAmt3 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 4) { quotInfo.sell4 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellAmt4 = mdEntry.Entry.MDEntrySize / qtyTimes; } else if (mdEntry.Entry.MDPriceLevel == 5) { quotInfo.sell5 = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; quotInfo.sellAmt5 = mdEntry.Entry.MDEntrySize / qtyTimes; } } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.HighPrice) { quotInfo.highestPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.KnockPrice) { quotInfo.newPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.LowPrice) { quotInfo.lowestPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.OpenPrice) { quotInfo.openPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.MaxOrderPrice) { quotInfo.maxOrderPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.MinOrderPrice) { quotInfo.minOrderPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.SettlePrice) { quotInfo.settlementPrice = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.OpenPosition) { quotInfo.openPosition = (decimal)mdEntry.Entry.MDEntryPx / mdEntryPxTimes; } //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.IOPV) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.BuySummary) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.SellSummary) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.PriceEarningRatio1) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.PriceEarningRatio2) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.Diff1) //{ //} //else if (mdEntry.Entry.MDEntryType == QuotV5.Binary.QuotSnapExtInfo300111.MDEntryType.Diff2) //{ //} } } }