Esempio n. 1
0
        public MarketData(TDFMarketData _mData)
        {
            ActionDay = _mData.ActionDay;

            AskPrice    = _mData.AskPrice;
            AskVol      = _mData.AskVol;
            BidPrice    = _mData.BidPrice;
            BidVol      = _mData.BidVol;
            Code        = _mData.Code;
            High        = _mData.High;
            HighLimited = _mData.HighLimited;
            IOPV        = _mData.IOPV;
            Low         = _mData.Low;
            LowLimited  = _mData.LowLimited;
            Match       = _mData.Match;
            NumTrades   = _mData.NumTrades;
            Open        = _mData.Open;
            PreClose    = _mData.PreClose;
            Prefix      = _mData.Prefix;
            SD2         = _mData.SD2;
            WindCode    = _mData.WindCode;
            Time        = _mData.Time;
            Status      = _mData.Status;
            IOPV        = 0;
        }
Esempio n. 2
0
        //获取股票市场信息
        public static TDFMarketData GetSimMarketDate()
        {
            if (_simulate_trade_table.Count == 0)
            {
                return(null);
            }
            Random        seed  = new Random();
            Sim_HQ_Struct unit  = _simulate_trade_table[seed.Next(_simulate_trade_table.Count - 1)];
            uint          price = Convert.ToUInt32(unit.PRICE * 10000);
            double        wave  = seed.NextDouble(); //涨幅/跌幅

            if (seed.Next(0, 1) == 0)
            {
                wave *= -1;
            }



            TDFMarketData data = new TDFMarketData()
            {
                AskPrice = new uint[5] {
                    price - 100, price - 200, price, price + 100, price + 200
                },
                AskVol = new uint[5] {
                    100, 100, 100, 100, 100
                },
                BidPrice = new uint[5] {
                    price - 100, price - 200, price, price + 100, price + 200
                },
                BidVol = new uint[5] {
                    100, 100, 100, 100, 100
                },
                Code        = unit.CODE,
                High        = price + 1,
                HighLimited = Convert.ToUInt32(price * 1.1),
                IOPV        = 0,
                Low         = price - 1,
                LowLimited  = Convert.ToUInt32(price * 0.9),
                Match       = price,
                Time        = Convert.ToInt32(DateTime.Now.ToString("HHmmss")) * 1000,
                WindCode    = "60000.SH"
            };

            return(data);
        }
Esempio n. 3
0
 /// <summary>
 /// 刷新行情集合
 /// </summary>
 private void UpdateMarkets()
 {
     while (ChinaMarketValue.isStartMarket)
     {
         try
         {
             object obj = ChinaMarketValue.blkMarketInfo.Take();
             if (obj is TDFMarketData)
             {
                 TDFMarketData data   = (TDFMarketData)obj;
                 MarketInfo    market = null;
                 if (ChinaMarketValue.dicMarketInfo.ContainsKey(data.WindCode))
                 {
                     market = ChinaMarketValue.dicMarketInfo[data.WindCode];
                 }
                 else
                 {
                     market = new MarketInfo();
                     ChinaMarketValue.dicMarketInfo.TryAdd(data.WindCode, market);
                 }
                 ConvertTDFMarketData(data, market);
                 if (market.type == "2")
                 {
                     MarketInfo market2 = new MarketInfo();
                     market2.exchangeCode = market.exchangeCode;
                     market2.code         = market.code;
                     market2.currNumber   = market.currNumber;
                     market2.currPrice    = market2.currPrice;
                     market2.time         = market2.time;
                     SendUDPPacket(market2.MyToString());
                     market.type = "Z";
                 }
                 SendUDPPacket(market.MyToString());
             }
         }
         catch (Exception ex)
         {
             ChinaMarketValue.exceptionLog.log(ChinaMarketValue.logLevel, ex.ToString());
         }
     }
 }
Esempio n. 4
0
        /// <summary>
        /// 更新停盘列表
        /// </summary>
        /// <param name="data"></param>
        public void updateStopList(TDFMarketData data)
        {
            if (data.Status != 68)
            {
                return;
            }

            if (stop_stocks.Count != 0)
            {
                var temp = (from item in stop_stocks where item.Code == data.Code select item);
                if (temp.Count() > 0)
                {
                    //已经添加
                    return;
                }
            }

            lock (stop_stocks)
            {
                data.Match = data.PreClose;
                stop_stocks.Add(data);
            }
        }
Esempio n. 5
0
 public MarketData(TDFMarketData _mData)
 {
     ActionDay = _mData.ActionDay;
     
     AskPrice = _mData.AskPrice;
     AskVol = _mData.AskVol;
     BidPrice = _mData.BidPrice;
     BidVol = _mData.BidVol;
     Code = _mData.Code;
     High = _mData.High;
     HighLimited = _mData.HighLimited;
     IOPV = _mData.IOPV;
     Low = _mData.Low;
     LowLimited = _mData.LowLimited;
     Match = _mData.Match;
     NumTrades = _mData.NumTrades;
     Open = _mData.Open;
     PreClose = _mData.PreClose;
     Prefix = _mData.Prefix;
     SD2 = _mData.SD2;
     WindCode = _mData.WindCode;
     Time = _mData.Time;
     Status = _mData.Status;
     IOPV = 0;
 }
Esempio n. 6
0
        /// <summary>
        /// TDFMarketData
        ///     public int ActionDay;       //业务发生日(自然日) YYMMDD
        ///     public uint[] AskPrice;     //申卖价
        ///     public uint[] AskVol;       //申卖量
        ///     public uint[] BidPrice;     //申买价
        ///     public uint[] BidVol;       //申买量
        ///     public string Code;         //原始代码
        ///     public uint High;           //最高价
        ///     public uint HighLimited;    //涨停价
        ///     public int IOPV;            //IOPV净值估值
        ///     public uint Low;            //最低价
        ///     public uint LowLimited;     //跌停价
        ///     public uint Match;          //最新价
        ///     public uint NumTrades;      //成交笔数
        ///     public uint Open;           //开盘价
        ///     public uint PreClose;       //前收盘价
        ///     public byte[] Prefix;       //证券信息前缀
        ///     public int SD2;             //升跌2(对比上一笔)
        ///     public int Status;          //状态
        ///     public int Syl1;            //市盈率1
        ///     public int Syl2;            //市盈率2
        ///     public int Time;            //时间(HHMMSSmmm)
        ///     public long TotalAskVol;    //委托卖出总量
        ///     public long TotalBidVol;    //委托买入总量
        ///     public int TradingDay;      //
        ///     public long Turnover;       //成交总金额
        ///     public long Volume;         //成交总量
        ///     public uint WeightedAvgAskPrice;    //加权平均委卖价格
        ///     public uint WeightedAvgBidPrice;    //加权平均委买价格
        ///     public string WindCode;             //万得代码,如:600001.SH
        ///     public int YieldToMaturity;         //到期收益率
        ///
        /// Status状态
        ///     //0 首日上市
        ///     //1 增发新股
        ///     //2 上网定价发行
        ///     //3 上网竞价发行
        ///     //A 交易节休市
        ///     //B 整体停牌
        ///     //C 全天收市
        ///     //D 暂停交易
        ///     //E Start - 启动交易盘
        ///     //F PRETR - 盘前处理
        ///     //H Holiday - 放假
        ///     //I OCALL - 开市集合竞价
        ///     //J ICALL - 盘中集合竞价
        ///     //K OPOBB - 开市订单簿平衡前期
        ///     //L IPOBB - 盘中订单簿平衡前期
        ///     //M OOBB - 开市订单簿平衡
        ///     //N IOBB - 盘中订单簿平衡
        ///     //O TRADE - 连续撮合
        ///     //P BREAK - 休市
        ///     //Q VOLA - 波动性中断
        ///     //R BETW - 交易间
        ///     //S NOTRD - 非交易服务支持
        ///     //T FCALL - 固定价格集合竞价
        ///     //U POSTR - 盘后处理
        ///     //V ENDTR - 结束交易
        ///     //W HALT - 暂停
        ///     //X SUSP - 停牌
        ///     //Y ADD - 新增产品
        ///     //Z DEL - 可删除的产品
        ///     //d 集合竞价阶段结束到连续竞价阶段开始之前的时段(如有)
        ///     //G DEL - 不可恢复交易的熔断阶段(上交所的N)
        ///     //Q VOLA - 波动性中断
        ///     //q 可恢复交易的熔断时段(上交所的M)
        ///
        /// TDFIndexData
        ///     public int ActionDay;   //业务发生日(自然日)(YYMMDD)
        ///     public string Code;     //原始代码
        ///     public int HighIndex;   //最高指数
        ///     public int LastIndex;   //最新指数
        ///     public int LowIndex;    //最低指数
        ///     public int OpenIndex;   //今开盘指数
        ///     public int PreCloseIndex;//前盘指数
        ///     public int Time;        //时间(HHMMSSmmm)
        ///     public long TotalVolume;//参与计算相应指数的交易数量
        ///     public int TradingDay;  //
        ///     public long Turnover;   //参与计算相应指数的成交金额
        ///     public string WindCode; //万得代码
        ///
        ///
        /// TDFFutureData
        ///     public int ActionDay;       //业务发生日(自然日)(YYMMDD)
        ///     public uint[] AskPrice;     //申卖价
        ///     public uint[] AskVol;       //申卖量
        ///     public uint[] BidPrice;     //申买价
        ///     public uint[] BidVol;       //申买量
        ///     public uint Close;          //今收盘
        ///     public string Code;         //原始代码
        ///     public int CurrDelta;       //今虚实度
        ///     public uint High;           //最高价
        ///     public uint HighLimited;    //涨停价
        ///     public uint Low;            //最低价
        ///     public uint LowLimited;     //跌停价
        ///     public uint Match;          //最新价
        ///     public uint Open;           //开盘价
        ///     public long OpenInterest;   //持仓总量
        ///     public uint PreClose;       //昨收盘价
        ///     public int PreDelta;        //昨虚实度
        ///     public long PreOpenInterest;//昨持仓
        ///     public uint PreSettlePrice; //昨结算
        ///     public uint SettlePrice;    //今结算
        ///     public int Status;          //状态
        ///     public int Time;            //时间(HHMMSSmmm)
        ///     public int TradingDay;      //交易日
        ///     public long Turnover;       //成交总金额
        ///     public long Volume;         //成交总量
        ///     public string WindCode;     //万得代码
        ///
        ///
        ///
        /// TDFOrderQueue
        ///     public int ABItems;         //明细个数
        ///     public int[] ABVolume;      //订单明细
        ///     public int ActionDay;       //自然日(YYMMDD)
        ///     public string Code;         //原始代码
        ///     public int Orders;          //订单数量
        ///     public int Price;           //委托价格
        ///     public int Side;            //买卖方向('B': Bid, 'A': Ask)
        ///     public int Time;            //时间(HHMMSSmmm)
        ///     public string WindCode;     //万得代码
        ///
        ///
        /// TDFTransaction
        ///     public int ActionDay;   //成交日期(YYMMDD)
        ///     public int AskOrder;    //叫卖方委托序号
        ///     public int BidOrder;    //叫买方委托序号
        ///     public int BSFlag;      //买卖方向(买:'B', 卖:'A',不明:' ')
        ///     public string Code;     //原始代码
        ///     public byte FunctionCode;//成交代码
        ///     public int Index;       //成交编号
        ///     public byte OrderKind;  //成交类别
        ///     public int Price;       //成交价格
        ///     public int Time;        //成交时间(HHMMSS)
        ///     public int Turnover;    //成交金额
        ///     public int Volume;      //成交数量
        ///     public string WindCode; //万得代码
        ///
        /// TDFOrder
        ///     public int ActionDay;       //委托日期(YYMMDD)
        ///     public string Code;         //原始代码
        ///     public byte FunctionCode;   //委托代码
        ///     public int Order;           //委托号
        ///     public byte OrderKind;      //委托类别
        ///     public int Price;           //委托价格
        ///     public int Time;            //委托时间(HHMMSSmmm)
        ///     public int Volume;          //委托数量
        ///     public string WindCode;     //万得代码
        /// </summary>
        /// <param name="msg"></param>
        private void OnRecvDataMsg(TDFMSG msg)
        {
            switch (msg.MsgID)
            {
            case TDFMSGID.MSG_DATA_MARKET:
            {
                //行情消息
                TDFMarketData[] marketOldDataArr = msg.Data as TDFMarketData[];
                for (int i = 0, length = marketOldDataArr.Length; i < length; i++)
                {
                    TDFMarketData data     = marketOldDataArr[i];
                    string        code     = data.Code;
                    string        windCode = data.WindCode;

                    MarketData marketData = new MarketData
                    {
                        InstrumentID    = windCode,
                        LimitUpDownFlag = LimitUpDownFlag.Normal,
                    };

                    char status = (char)data.Status;
                    switch (status)
                    {
                    case 'B':
                    {
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.Suspend1Day;
                    }
                    break;

                    case 'C':
                    {
                        marketData.TradingStatus = TradingStatus.Close;
                        marketData.SuspendFlag   = SuspendFlag.NoSuspension;
                    }
                    break;

                    case 'D':
                    {
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.SuspendTemp;
                    }
                    break;

                    case 'W':
                    {
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.SuspendTemp;
                    }
                    break;

                    case 'X':
                    {
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.Suspend1Day;
                    }
                    break;

                    default:
                    {
                        //正常交易
                        marketData.TradingStatus = TradingStatus.Normal;
                        marketData.SuspendFlag   = SuspendFlag.NoSuspension;
                    }
                    break;
                    }

                    if (data.Match == 0)
                    {
                        //TODO: fix the close period
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.Suspend1Day;
                    }
                    else if (data.Match >= data.HighLimited)
                    {
                        marketData.TradingStatus   = TradingStatus.Normal;
                        marketData.SuspendFlag     = SuspendFlag.NoSuspension;
                        marketData.LimitUpDownFlag = LimitUpDownFlag.LimitUp;
                    }
                    else if (data.Match <= data.LowLimited)
                    {
                        marketData.TradingStatus   = TradingStatus.Normal;
                        marketData.SuspendFlag     = SuspendFlag.NoSuspension;
                        marketData.LimitUpDownFlag = LimitUpDownFlag.LimitDown;
                    }

                    marketData.CurrentPrice = (double)data.Match / 10000;
                    marketData.PreClose     = data.PreClose / 10000;
                    if (data.AskPrice != null && data.AskPrice.Length >= 5)
                    {
                        marketData.SellPrice1 = (double)data.AskPrice[0] / 10000;
                        marketData.SellPrice2 = (double)data.AskPrice[1] / 10000;
                        marketData.SellPrice3 = (double)data.AskPrice[2] / 10000;
                        marketData.SellPrice4 = (double)data.AskPrice[3] / 10000;
                        marketData.SellPrice5 = (double)data.AskPrice[4] / 10000;
                    }

                    if (data.BidPrice != null && data.BidPrice.Length >= 5)
                    {
                        marketData.BuyPrice1 = (double)data.BidPrice[0] / 10000;
                        marketData.BuyPrice2 = (double)data.BidPrice[1] / 10000;
                        marketData.BuyPrice3 = (double)data.BidPrice[2] / 10000;
                        marketData.BuyPrice4 = (double)data.BidPrice[3] / 10000;
                        marketData.BuyPrice5 = (double)data.BidPrice[4] / 10000;
                    }

                    marketData.HighLimitPrice = (double)data.HighLimited / 10000;
                    marketData.LowLimitPrice  = (double)data.LowLimited / 10000;
                    marketData.BuyAmount      = data.TotalBidVol;
                    marketData.SellAmount     = data.TotalAskVol;

                    _quote.Add(windCode, marketData);
                }
            }
            break;

            case TDFMSGID.MSG_DATA_FUTURE:
            {
                //期货行情消息
                TDFFutureData[] futureDataArr = msg.Data as TDFFutureData[];
                foreach (TDFFutureData data in futureDataArr)
                {
                    string windCode = data.WindCode;
                    if (!windCode.EndsWith(".CF"))
                    {
                        continue;
                    }

                    MarketData marketData = new MarketData
                    {
                        InstrumentID = windCode
                    };

                    char status = (char)data.Status;
                    switch (status)
                    {
                    case 'B':
                    {
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.Suspend1Day;
                    }
                    break;

                    case 'C':
                    {
                        marketData.TradingStatus = TradingStatus.Close;
                        marketData.SuspendFlag   = SuspendFlag.NoSuspension;
                    }
                    break;

                    case 'D':
                    {
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.SuspendTemp;
                    }
                    break;

                    case 'W':
                    {
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.SuspendTemp;
                    }
                    break;

                    case 'X':
                    {
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.Suspend1Day;
                    }
                    break;

                    default:
                    {
                        //正常交易
                        marketData.TradingStatus = TradingStatus.Normal;
                        marketData.SuspendFlag   = SuspendFlag.NoSuspension;
                    }
                    break;
                    }

                    if (data.Match == 0)
                    {
                        //TODO: fix the close period
                        marketData.TradingStatus = TradingStatus.Suspend;
                        marketData.SuspendFlag   = SuspendFlag.Suspend1Day;
                    }
                    else if (data.Match >= data.HighLimited)
                    {
                        marketData.TradingStatus   = TradingStatus.Normal;
                        marketData.SuspendFlag     = SuspendFlag.Suspend1Day;
                        marketData.LimitUpDownFlag = LimitUpDownFlag.LimitUp;
                    }
                    else if (data.Match <= data.LowLimited)
                    {
                        marketData.TradingStatus   = TradingStatus.Normal;
                        marketData.SuspendFlag     = SuspendFlag.Suspend1Day;
                        marketData.LimitUpDownFlag = LimitUpDownFlag.LimitDown;
                    }

                    marketData.CurrentPrice = (double)data.Match / 10000;
                    marketData.PreClose     = (double)data.PreClose / 10000;
                    if (data.AskPrice != null && data.AskPrice.Length >= 5)
                    {
                        marketData.SellPrice1 = (double)data.AskPrice[0] / 10000;
                        marketData.SellPrice2 = (double)data.AskPrice[1] / 10000;
                        marketData.SellPrice3 = (double)data.AskPrice[2] / 10000;
                        marketData.SellPrice4 = (double)data.AskPrice[3] / 10000;
                        marketData.SellPrice5 = (double)data.AskPrice[4] / 10000;
                    }

                    if (data.BidPrice != null && data.BidPrice.Length >= 5)
                    {
                        marketData.BuyPrice1 = (double)data.BidPrice[0] / 10000;
                        marketData.BuyPrice2 = (double)data.BidPrice[1] / 10000;
                        marketData.BuyPrice3 = (double)data.BidPrice[2] / 10000;
                        marketData.BuyPrice4 = (double)data.BidPrice[3] / 10000;
                        marketData.BuyPrice5 = (double)data.BidPrice[4] / 10000;
                    }
                    marketData.HighLimitPrice = (double)data.HighLimited / 10000;
                    marketData.LowLimitPrice  = (double)data.LowLimited / 10000;
                    //BuyAmount, SellAmount

                    _quote.Add(windCode, marketData);
                }
            }
            break;

            case TDFMSGID.MSG_DATA_INDEX:
            {
                //指数消息
                TDFIndexData[] indexDataArr = msg.Data as TDFIndexData[];
                foreach (TDFIndexData data in indexDataArr)
                {
                    string windCode = data.WindCode;

                    MarketData marketData = new MarketData
                    {
                        InstrumentID = windCode
                    };

                    marketData.CurrentPrice = (double)data.LastIndex / 10000;
                    marketData.PreClose     = (double)data.PreCloseIndex / 10000;

                    _quote.Add(windCode, marketData);
                }
            }
            break;

            //case TDFMSGID.MSG_DATA_TRANSACTION:
            //    {
            //        TDFTransaction[] tranDataArr = msg.Data as TDFTransaction[];
            //    }
            //    break;
            //case TDFMSGID.MSG_DATA_ORDER:
            //    {
            //        TDFOrder[] orderDataArr = msg.Data as TDFOrder[];
            //    }
            //    break;
            //case TDFMSGID.MSG_DATA_ORDERQUEUE:
            //    {
            //        TDFOrderQueue[] orderQueueDataArr = msg.Data as TDFOrderQueue[];
            //    }
            //    break;
            default:
                break;
            }
        }
Esempio n. 7
0
        //获取股票市场信息
        public static TDFMarketData GetSimMarketDate()
        {
            if (_simulate_trade_table.Count == 0) return null;
            Random seed = new Random();
            Sim_HQ_Struct unit = _simulate_trade_table[seed.Next(_simulate_trade_table.Count - 1)];
            uint price = Convert.ToUInt32(unit.PRICE * 10000);
            double wave = seed.NextDouble(); //涨幅/跌幅

            if(seed.Next(0,1) == 0)
            {
                wave *= -1;
            }

            

            TDFMarketData data = new TDFMarketData()
            {
                AskPrice = new uint[5] { price - 100, price - 200, price, price + 100, price + 200 },
                AskVol = new uint[5] { 100, 100, 100, 100, 100 },
                BidPrice = new uint[5] { price - 100, price - 200, price, price + 100, price + 200 },
                BidVol = new uint[5] { 100, 100, 100, 100, 100 },
                Code = unit.CODE,
                High = price + 1,
                HighLimited = Convert.ToUInt32(price * 1.1),
                IOPV = 0,
                Low = price - 1,
                LowLimited = Convert.ToUInt32(price * 0.9),
                Match = price,
                Time = Convert.ToInt32(DateTime.Now.ToString("HHmmss")) * 1000,
                WindCode = "60000.SH"
            };
           
            return data;

        }
Esempio n. 8
0
        /// <summary>
        /// 更新停盘列表
        /// </summary>
        /// <param name="data"></param>
        public void updateStopList(TDFMarketData data)
        {
            if(data.Status != 68)
            {
                return;
            }

            if (stop_stocks.Count != 0)
            {
                var temp = (from item in stop_stocks where item.Code == data.Code select item);
                if (temp.Count() > 0)
                {
                    //已经添加 
                    return;
                }
            }

            lock (stop_stocks)
            {
                data.Match = data.PreClose;
                stop_stocks.Add(data);
            }
        }
Esempio n. 9
0
        private void ConvertTDFMarketData(TDFMarketData tdfdata, MarketInfo data)
        {
            if (ChinaMarketValue.dicTDFCode.ContainsKey(tdfdata.WindCode))
            {
                string day  = tdfdata.ActionDay.ToString().Substring(0, 4) + "-" + tdfdata.ActionDay.ToString().Substring(4, 2) + "-" + tdfdata.ActionDay.ToString().Substring(6, 2);
                string time = "";
                if (tdfdata.Time < 100000000)
                {
                    //10点以前
                    time = "0" + tdfdata.Time.ToString().Substring(0, 1) + ":" + tdfdata.Time.ToString().Substring(1, 2) + ":" + tdfdata.Time.ToString().Substring(3, 2);
                }
                else
                {
                    time = tdfdata.Time.ToString().Substring(0, 2) + ":" + tdfdata.Time.ToString().Substring(2, 2) + ":" + tdfdata.Time.ToString().Substring(4, 2);
                }

                data.time = day + " " + time;
                if (!string.IsNullOrEmpty(data.time))
                {
                    //换一天的时候把成交量清掉
                    if (day.CompareTo(data.time.Substring(0, 10)) > 0)
                    {
                        data.filledNum = "0";
                    }
                }

                data.exchangeCode = ChinaMarketValue.dicTDFCode[tdfdata.WindCode].Market;
                data.code         = tdfdata.WindCode;
                data.salePrice    = FormatFracPrx(tdfdata.AskPrice[0]);
                data.saleNumber   = (tdfdata.AskVol[0]).ToString();
                data.buyPrice     = FormatFracPrx(tdfdata.BidPrice[0]).ToString();
                data.buyNumber    = (tdfdata.BidVol[0]).ToString();
                data.currPrice    = FormatFracPrx(tdfdata.Match).ToString();

                if (tdfdata.Volume > CommonFunction.StringToDecimal(data.filledNum) && tdfdata.Volume > 0)
                {
                    //成交数据
                    data.currNumber = (tdfdata.Volume - (long)CommonFunction.StringToDecimal(data.filledNum)).ToString();
                    data.type       = "2";
                }
                else
                {
                    data.currNumber = "0";
                    data.type       = "Z";
                }
                data.filledNum = tdfdata.Volume.ToString();
                //data.currNumber = (Tdfdata.Match / 10000).ToString();
                data.high     = FormatFracPrx(tdfdata.High).ToString();
                data.low      = FormatFracPrx(tdfdata.Low).ToString();
                data.open     = FormatFracPrx(tdfdata.Open).ToString();
                data.oldClose = FormatFracPrx(tdfdata.PreClose).ToString();


                data.salePrice2  = FormatFracPrx(tdfdata.AskPrice[1]).ToString();
                data.salePrice3  = FormatFracPrx(tdfdata.AskPrice[2]).ToString();
                data.salePrice4  = FormatFracPrx(tdfdata.AskPrice[3]).ToString();
                data.salePrice5  = FormatFracPrx(tdfdata.AskPrice[4]).ToString();
                data.saleNumber2 = (tdfdata.AskVol[1]).ToString();
                data.saleNumber3 = (tdfdata.AskVol[2]).ToString();
                data.saleNumber4 = (tdfdata.AskVol[3]).ToString();
                data.saleNumber5 = (tdfdata.AskVol[4]).ToString();
                data.buyPrice2   = FormatFracPrx(tdfdata.BidPrice[1]).ToString();
                data.buyPrice3   = FormatFracPrx(tdfdata.BidPrice[2]).ToString();
                data.buyPrice4   = FormatFracPrx(tdfdata.BidPrice[3]).ToString();
                data.buyPrice5   = FormatFracPrx(tdfdata.BidPrice[4]).ToString();
                data.buyNumber2  = (tdfdata.BidVol[1]).ToString();
                data.buyNumber3  = (tdfdata.BidVol[2]).ToString();
                data.buyNumber4  = (tdfdata.BidVol[3]).ToString();
                data.buyNumber5  = (tdfdata.BidVol[4]).ToString();
            }
        }
Esempio n. 10
0
        //delegate String ToString(String[] args);
        /// <summary>
        /// 行情订阅主线程
        /// </summary>
        static void MainThread()
        {
            TDFServerInfo[] theServers = new TDFServerInfo[4];
            uint            iServerNum = 1;

            theServers[0] = new TDFServerInfo()
            {
                //Ip = CHangQingPARA.IP,
                //Port = CHangQingPARA.PORT,
                //Username = CHangQingPARA.USERNAME,
                //Password = CHangQingPARA.PASSWORD

                //Ip = "114.80.154.34",
                //Port = "6231",                              //服务器端口
                //Username = "******",                        //服务器用户名
                //Password = "******"

                Ip       = ip,
                Port     = port,
                Username = userName,
                Password = password
            };

            /******即使不用,也要初始化******/
            theServers[1] = new TDFServerInfo();
            theServers[2] = new TDFServerInfo();
            theServers[3] = new TDFServerInfo();


            //初始化行情模拟系统
            simulate_trade.InitSimTable(simulate_trade.SimMarketCode);

            /************订阅的类型需要再确认***********/
            var openSetting_ext = new TDFOpenSetting_EXT()
            {
                Servers       = theServers,
                ServerNum     = iServerNum,
                Markets       = "",
                Subscriptions = subscribeList.Replace('\n', ';'),
                ConnectionID  = 1,
                Time          = 0,
                TypeFlags     = 0
            };

            using (var dataSource = new TDFSourceImp(openSetting_ext))
            {
                dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_HEART_BEAT_INTERVAL, 0); //环境设置
                dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_MISSED_BEART_COUNT, 0);  //环境设置
                dataSource.SetEnv(EnvironSetting.TDF_ENVIRON_OPEN_TIME_OUT, 0);       //环境设置

                TDFERRNO nOpenRet = dataSource.Open();

                if (nOpenRet == TDFERRNO.TDF_ERR_SUCCESS)
                {
                    //连接成功
                    Queue_Data.Connected = true;
                }
                else
                {
                    Queue_Data.Connected = false;

                    MessageBox.Show(nOpenRet.ToString());
                    //连接失败,告警顶级日志
                    //GlobalErrorLog.LogInstance.LogEvent(String.Format("open returned:{0}, program quit", nOpenRet));
                }



                while (true)
                {
                    if (webservice.STOP)
                    {
                        break;
                    }
                    Thread.Sleep(1000);

                    //每隔10s发送一次停盘信息
                    if ((DateTime.Now - RunningTime.CurrentTime).TotalSeconds > 10)
                    {
                        foreach (TDFMarketData data in stop_plate_stocks.GetInstance().GetStopList())
                        {
                            EnQueueType obj = new EnQueueType()
                            {
                                Type = "S", value = (object)data
                            };



                            if (simulate_trade.MarketRecorder)
                            {
                                MarketInfoQueue.EnQueueNew(data);
                            }
                            else
                            {
                                Queue_Data.GetQueue().Enqueue((object)obj);
                            }
                        }
                        RunningTime.CurrentTime = DateTime.Now;
                    }



                    if ((simulate_trade.SimSwitch) && (Queue_Data.Suspend == false))
                    {
                        for (int i = 0; i < simulate_trade.SimMarketPerSecond; i++)
                        {
                            TDFMarketData objs = simulate_trade.GetSimMarketDate();
                            new EnQueueType()
                            {
                                Type = "S", value = (object)objs
                            };
                            if (Queue_Data.Suspend == false)
                            {
                                Queue_Data.GetQueue().Enqueue((object)(new EnQueueType()
                                {
                                    Type = "S", value = (object)objs
                                }));
                            }

                            TDFFutureData objf = simulate_trade.GetSimFutureData();
                            Queue_Data.GetQueue().Enqueue((object)(new EnQueueType()
                            {
                                Type = "F", value = (object)objf
                            }));
                        }
                    }
                    continue;
                }
            }
        }