Esempio n. 1
0
        /// <summary>
        /// 解析股票消息数据包
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static StockMessageNode ParseStockMessageNode(byte[] data)
        {
            var msg = new StockMessageNode();

            try
            {
                var marketInfoSize = YunLib.DataHelper.StructSize <MarketMessageNode>();
                msg.marketInfo = YunLib.DataHelper.BytesToStruct <MarketMessageNode>(data.Take(marketInfoSize).ToArray());

                var NoMDEntriesSize = YunLib.DataHelper.StructSize <BigEndianUInt32>();
                msg.NoMDEntries = YunLib.DataHelper.BytesToStruct <BigEndianUInt32>(data.Skip(marketInfoSize).Take(NoMDEntriesSize).ToArray());

                UInt32 dataCount = msg.NoMDEntries;

                var startIndex = marketInfoSize + NoMDEntriesSize;


                var MDEntrySize = YunLib.DataHelper.StructSize <StockMDEntry>();
                msg.MDEntry = new StockMDEntry[dataCount];
                for (int i = 0; i < dataCount; ++i)
                {
                    msg.MDEntry[i] = YunLib.DataHelper.BytesToStruct <StockMDEntry>(data.Skip(startIndex + i * MDEntrySize).Take(MDEntrySize).ToArray());
                }
            }
            catch (Exception ex)
            {
                YunLib.LogWriter.Log(ex.ToString());
            }

            return(msg);
        }
Esempio n. 2
0
 public void PubStockMessage(StockMessageNode data)
 {
     try
     {
         var xData   = this.StockMessageMarketTick(data);
         var dataBuf = YunLib.DataHelper.StructToBytes <MarketTickNode>(xData);
         this.pubData("stock", dataBuf);
     }
     catch (Exception ex)
     {
         YunLib.LogWriter.Log(ex.ToString());
     }
 }
Esempio n. 3
0
        /// <summary>
        /// 深交所股票消息转云财经统一数据格式
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public MarketTickNode StockMessageMarketTick(StockMessageNode data)
        {
            MarketTickNode nodeData = new MarketTickNode();

            nodeData.foxxcode = string.Format("{0}.SZ", MessageHelper.GetMessageString(data.marketInfo.SecurityID).Trim());
            nodeData.code     = string.Format("{0}", MessageHelper.GetMessageString(data.marketInfo.SecurityID).Trim());
            nodeData.date     = int.Parse(string.Format("{0}", data.marketInfo.OrigTime).Substring(0, 8));
            nodeData.time     = int.Parse(string.Format("{0}", data.marketInfo.OrigTime).Substring(8));
            nodeData.status   = MessageHelper.GetMessageString(data.marketInfo.TradingPhaseCode).Trim();
            nodeData.name     = string.Empty;

            nodeData.preclose = (int)((UInt64)data.marketInfo.PrevClosePx);
            nodeData.vol      = (long)((Int64)data.marketInfo.TotalVolumeTrade / 100);
            nodeData.money    = (long)((Int64)data.marketInfo.TotalValueTrade / 10000);
            nodeData.transnum = (long)((Int64)data.marketInfo.NumTrades);


            nodeData.buyorder           = 0;
            nodeData.sellorder          = 0;
            nodeData.buyorder_aveprice  = 0;
            nodeData.sellorder_aveprice = 0;

            nodeData.buy1        = 0;
            nodeData.buy1_count  = 0;
            nodeData.sell1       = 0;
            nodeData.sell1_count = 0;

            nodeData.buy2        = 0;
            nodeData.buy2_count  = 0;
            nodeData.sell2       = 0;
            nodeData.sell2_count = 0;

            nodeData.buy3        = 0;
            nodeData.buy3_count  = 0;
            nodeData.sell3       = 0;
            nodeData.sell3_count = 0;

            nodeData.buy4        = 0;
            nodeData.buy4_count  = 0;
            nodeData.sell4       = 0;
            nodeData.sell4_count = 0;

            nodeData.buy5        = 0;
            nodeData.buy5_count  = 0;
            nodeData.sell5       = 0;
            nodeData.sell5_count = 0;

            nodeData.buy6        = 0;
            nodeData.buy6_count  = 0;
            nodeData.sell6       = 0;
            nodeData.sell6_count = 0;

            nodeData.buy7        = 0;
            nodeData.buy7_count  = 0;
            nodeData.sell7       = 0;
            nodeData.sell7_count = 0;

            nodeData.buy8        = 0;
            nodeData.buy8_count  = 0;
            nodeData.sell8       = 0;
            nodeData.sell8_count = 0;

            nodeData.buy9        = 0;
            nodeData.buy9_count  = 0;
            nodeData.sell9       = 0;
            nodeData.sell9_count = 0;

            nodeData.buy10        = 0;
            nodeData.buy10_count  = 0;
            nodeData.sell10       = 0;
            nodeData.sell10_count = 0;



            foreach (var item in data.MDEntry)
            {
                var mdType = MessageHelper.GetMessageString(item.MDEntryType).Trim();

                //买五档
                if (mdType == "0")
                {
                    if (item.MDPriceLevel == 1)
                    {
                        nodeData.buy1       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.buy1_count = (long)((UInt64)item.MDEntrySize / 100);
                    }

                    if (item.MDPriceLevel == 2)
                    {
                        nodeData.buy2       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.buy2_count = (long)((UInt64)item.MDEntrySize / 100);
                    }

                    if (item.MDPriceLevel == 3)
                    {
                        nodeData.buy3       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.buy3_count = (long)((UInt64)item.MDEntrySize / 100);
                    }

                    if (item.MDPriceLevel == 4)
                    {
                        nodeData.buy4       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.buy4_count = (long)((UInt64)item.MDEntrySize / 100);
                    }

                    if (item.MDPriceLevel == 5)
                    {
                        nodeData.buy5       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.buy5_count = (long)((UInt64)item.MDEntrySize / 100);
                    }
                }

                //卖五档
                if (mdType == "1")
                {
                    if (item.MDPriceLevel == 1)
                    {
                        nodeData.sell1       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.sell1_count = (long)((UInt64)item.MDEntrySize / 100);
                    }

                    if (item.MDPriceLevel == 2)
                    {
                        nodeData.sell2       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.sell2_count = (long)((UInt64)item.MDEntrySize / 100);
                    }

                    if (item.MDPriceLevel == 3)
                    {
                        nodeData.sell3       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.sell3_count = (long)((UInt64)item.MDEntrySize / 100);
                    }

                    if (item.MDPriceLevel == 4)
                    {
                        nodeData.sell4       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.sell4_count = (long)((UInt64)item.MDEntrySize / 100);
                    }

                    if (item.MDPriceLevel == 5)
                    {
                        nodeData.sell5       = (long)((UInt64)item.MDEntryPx / 100);
                        nodeData.sell5_count = (long)((UInt64)item.MDEntrySize / 100);
                    }
                }

                //最新价格
                if (mdType == "2")
                {
                    nodeData.close = (int)((UInt64)item.MDEntryPx / 100);
                    continue;
                }

                //开盘价格
                if (mdType == "4")
                {
                    nodeData.dopen = (int)((UInt64)item.MDEntryPx / 100);
                    continue;
                }

                //最高价格
                if (mdType == "7")
                {
                    nodeData.dhigh = (int)((UInt64)item.MDEntryPx / 100);
                    continue;
                }

                //最低价格
                if (mdType == "8")
                {
                    nodeData.dlow = (int)((UInt64)item.MDEntryPx / 100);
                    continue;
                }

                //平均委托买,不知道level1有不有
                if (mdType == "x3")
                {
                    nodeData.buyorder          = (long)((UInt64)item.MDEntrySize / 100);
                    nodeData.buyorder_aveprice = (int)((UInt64)item.MDEntryPx / 100);
                    continue;
                }

                //平均委托卖,不知道level1有不有
                if (mdType == "x4")
                {
                    nodeData.sellorder          = (long)((UInt64)item.MDEntrySize / 100);
                    nodeData.sellorder_aveprice = (int)((UInt64)item.MDEntryPx / 100);
                    continue;
                }
            }

            nodeData.status = this.getStatus(nodeData);

            return(nodeData);
        }