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)
                    //{

                    //}

                }
            }
        }