Пример #1
0
        /// <summary>
        /// 读取主力合约映射文件
        /// </summary>
        /// <param name="strFile">映射文件</param>
        /// <param name="fmgr">期货管理器</param>
        private static void ReadRefIndex(string strFile, FutureManager fmgr)
        {
            FileStream fs = null;

            try
            {
                #region

                fs = new FileStream(strFile, FileMode.Open, FileAccess.Read, FileShare.Read);
                StreamReader reader = new StreamReader(fs, Encoding.UTF8);
                while (!reader.EndOfStream)
                {
                    string strline = reader.ReadLine();
                    // = 分割
                    string[] linelist = strline.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                    if (linelist.Length == 2)
                    {
                        fmgr.AddRefFuture(linelist[0].Trim(), linelist[1].Trim());
                    }
                }
                #endregion
            }
            catch (Exception)
            {
                fmgr.Clear();
            }

            if (fs != null)
            {
                fs.Close();
            }
        }
        public void Merge(FutureManager fmgr)
        {
            foreach (Future stk in fmgr.AllInstruments)
            {
                if (!_allInstruments.ContainsKey(stk.ID))
                {
                    _allInstruments.Add(stk.ID, stk);
                }
            }

            foreach (Exchange exchange in fmgr.AllExchanges)
            {
                if (!_allExchanges.ContainsKey(exchange.ExchangeID))
                {
                    _allExchanges.Add(exchange.ExchangeID, exchange);
                }
            }

            foreach (FutureProduct product in fmgr.AllProducts)
            {
                if (!_allProducts.ContainsKey(product.ProductID))
                {
                    _allProducts.Add(product.ProductID, product);
                }
            }
        }
Пример #3
0
        /// <summary>
        /// 读取文件
        /// </summary>
        /// <param name="strDir">目录</param>
        /// <param name="mgr"></param>
        /// <param name="futurelist"></param>
        /// <param name="blive"></param>
        /// <returns></returns>
        public static bool Read(
            string strDir,
            FutureManager mgr,
            List <string> futurelist,
            bool blive)
        {
            try
            {
                mgr.Clear();

                string strIndexFile = strDir + "\\" + IndexFile;
                if (File.Exists(strIndexFile))
                {
                    ReadRefIndex(strIndexFile, mgr);
                }

                string strFile = strDir + "\\" + FileName;
                if (!File.Exists(strFile))
                {
                    return(false);
                }

                XmlDocument doc = new XmlDocument();
                doc.Load(strFile);

                foreach (XmlNode node in doc.DocumentElement.ChildNodes)
                {
                    XmlElement tagNode = node as XmlElement;
                    if (tagNode == null)
                    {
                        continue;
                    }

                    if (tagNode.Name != ExchangeTag)
                    {
                        continue;
                    }

                    Exchange exchange = new Exchange();
                    FutureExchangeXml.Get(tagNode, exchange, mgr, futurelist, blive);
                    if (exchange.ExchangeID != "")
                    {
                        mgr.AddExchange(exchange);
                    }
                }

                //Check(mgr);

                return(true);
            }
            catch (Exception ex)
            {
                ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
                logger.Error("读取期货品种失败", ex);
                mgr.Clear();
            }

            return(false);
        }
        /// <summary>
        /// 载入股票
        /// </summary>
        /// <param name="strDir">配置目录</param>
        /// <param name="instrIdlist">品种代码表</param>
        /// <param name="market">市场</param>
        /// <param name="isLive">是否实盘</param>
        /// <returns></returns>
        public bool Load(
            string strDir,
            List <string> instrIdlist,
            EnumMarket market,
            bool isLive)
        {
            _tfMgr.LoadData(strDir + "\\TradingFrame.xml");

            switch (market)
            {
            case EnumMarket.期货:
                #region

                FutureManager fmgr = new FutureManager();

                if (isLive)
                {
                    if (!FutureFile.Read(strDir, fmgr, instrIdlist, isLive))
                    {
                        Clear();
                        return(false);
                    }
                }
                else
                {
                    if (!FutureFile.Read(strDir, fmgr))
                    {
                        Clear();
                        return(false);
                    }
                }

                Merge(fmgr);
                return(true);

                #endregion
            }

            return(false);
        }
Пример #5
0
        static void BuildRef(FutureManager mgr, string exchangeid, string productid)
        {
            List <Future> lstfuture = mgr.GetFutures(exchangeid, productid);

            List <IndexFuture> lstidx = new List <IndexFuture>();

            foreach (Future future in lstfuture)
            {
                if (future.FutureType == EnumFutureType.Reference)
                {
                    string futureid = mgr.GetRealFuture(future.ID);
                    if (futureid.Length > 0 && mgr.HasFuture(futureid))
                    {
                        future.RealFuture = mgr[futureid];
                    }
                }
                else if (future.FutureType == EnumFutureType.Index)
                {
                    lstidx.Add(future as IndexFuture);
                }
            }

            foreach (IndexFuture idxfuture in lstidx)
            {
                foreach (Future future in lstfuture)
                {
                    if (future.FutureType == EnumFutureType.Normal)
                    {
                        idxfuture.Add(future);
                    }
                }

                if (mgr.HasFuture(productid + "9999"))
                {
                    idxfuture.RealFuture = mgr[productid + "9999"].RealFuture;
                }
            }
        }
Пример #6
0
        internal static void Get(
            XmlElement root,
            FutureProduct product,
            FutureManager mgr,
            List <string> futurelist,
            bool blive)
        {
            product.ProductID   = root.GetAttribute(IdAttr);
            product.ProductName = root.GetAttribute(NameAttr);

            if (root.HasAttribute(TradingTimeAttr))
            {
                #region tradingtime
                string   strtradingtime = root.GetAttribute(TradingTimeAttr);
                string[] strlist        = strtradingtime.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                int      icount         = strlist.Length / 2;

                TimeSpan tsvalue;
                for (int i = 0; i < icount; ++i)
                {
                    TimeSlice slice = new TimeSlice();
                    if (!TimeSpan.TryParse(strlist[i * 2], out tsvalue))
                    {
                        product.AllSlice.Clear();
                        throw new Exception("配置文件future.xml格式不对, Product/tradingtime解析出错");
                    }
                    slice.BeginTime = tsvalue;

                    if (!TimeSpan.TryParse(strlist[i * 2 + 1], out tsvalue))
                    {
                        product.AllSlice.Clear();
                        throw new Exception("配置文件future.xml格式不对, Product/tradingtime解析出错");
                    }
                    slice.EndTime = tsvalue;

                    product.AllSlice.Add(slice);
                }
                #endregion
            }

            Dictionary <string, Future> normalmap = new Dictionary <string, Future>();
            Dictionary <string, Future> refmap    = new Dictionary <string, Future>();
            Dictionary <string, Future> idxmap    = new Dictionary <string, Future>();

            foreach (XmlNode subNode in root.ChildNodes)
            {
                #region

                XmlElement subTagNode = subNode as XmlElement;
                if (subTagNode == null)
                {
                    continue;
                }

                if (subTagNode.Name != FutureTag)
                {
                    continue;
                }

                Future future;
                FutureXml.Get(subTagNode, out future, blive);

                if (future.ID != "")
                {
                    future.ExchangeID = product.ExchangeID;
                    future.ProductID  = product.ProductID;

                    if (future.FutureType == EnumFutureType.Index)
                    {
                        if (!idxmap.ContainsKey(future.ID))
                        {
                            idxmap.Add(future.ID, future);
                        }
                        else
                        {
                            throw new Exception("Future.xml出错,重复的合约ID: " + future.ID);
                        }
                    }
                    else if (future.FutureType == EnumFutureType.Reference)
                    {
                        if (!refmap.ContainsKey(future.ID))
                        {
                            refmap.Add(future.ID, future);
                        }
                        else
                        {
                            throw new Exception("Future.xml出错,重复的合约ID: " + future.ID);
                        }
                    }
                    else
                    {
                        if (!normalmap.ContainsKey(future.ID))
                        {
                            normalmap.Add(future.ID, future);
                        }
                        else
                        {
                            throw new Exception("Future.xml出错,重复的合约ID: " + future.ID);
                        }
                    }
                }

                #endregion
            }

            foreach (string futureid in normalmap.Keys)
            {
                if (futurelist == null || futurelist.Count == 0 || futurelist.Contains(futureid))
                {
                    mgr.AddFuture(normalmap[futureid]);
                }
            }

            foreach (string futureid in refmap.Keys)
            {
                Future future = refmap[futureid];
                string refid  = mgr.GetRealFuture(future.ID);
                if (refid != "" && normalmap.ContainsKey(refid))
                {
                    future.RealFuture = normalmap[refid];
                }

                if (futurelist == null || futurelist.Count == 0 || futurelist.Contains(futureid))
                {
                    mgr.AddFuture(future);
                    mgr.AddFuture(future.RealFuture);
                }
            }

            foreach (string futureid in idxmap.Keys)
            {
                if (futurelist == null || futurelist.Count == 0 || futurelist.Contains(futureid))
                {
                    Future future = idxmap[futureid];

                    future.RealFuture = refmap[future.ProductID + "9999"].RealFuture;

                    mgr.AddFuture(future);
                    mgr.AddFuture(future.RealFuture);

                    foreach (string normalid in normalmap.Keys)
                    {
                        mgr.AddFuture(normalmap[normalid]);
                    }
                }
            }

            BuildRef(mgr, product.ExchangeID, product.ProductID);
        }
Пример #7
0
        internal static void Get(XmlElement root, FutureProduct product, FutureManager mgr)
        {
            product.ProductID   = root.GetAttribute(IdAttr);
            product.ProductName = root.GetAttribute(NameAttr);
            if (root.HasAttribute(TradingTimeAttr))
            {
                #region tradingtime
                string   strtradingtime = root.GetAttribute(TradingTimeAttr);
                string[] strlist        = strtradingtime.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                int      icount         = strlist.Length / 2;

                TimeSpan tsvalue;
                for (int i = 0; i < icount; ++i)
                {
                    TimeSlice slice = new TimeSlice();
                    if (!TimeSpan.TryParse(strlist[i * 2], out tsvalue))
                    {
                        product.AllSlice.Clear();
                        throw new Exception("配置文件future.xml格式不对, Product/tradingtime解析出错");
                    }
                    slice.BeginTime = tsvalue;

                    if (!TimeSpan.TryParse(strlist[i * 2 + 1], out tsvalue))
                    {
                        product.AllSlice.Clear();
                        throw new Exception("配置文件future.xml格式不对, Product/tradingtime解析出错");
                    }
                    slice.EndTime = tsvalue;

                    product.AllSlice.Add(slice);
                }
                #endregion
            }

            foreach (XmlNode subNode in root.ChildNodes)
            {
                XmlElement subTagNode = subNode as XmlElement;
                if (subTagNode == null)
                {
                    continue;
                }

                if (subTagNode.Name != FutureTag)
                {
                    continue;
                }

                Future future;
                FutureXml.Get(subTagNode, out future, false);

                if (future.ID != "")
                {
                    future.ExchangeID = product.ExchangeID;
                    future.ProductID  = product.ProductID;

                    mgr.AddFuture(future);
                }
            }

            BuildRef(mgr, product.ExchangeID, product.ProductID);
        }
Пример #8
0
        internal static void Set(XmlDocument doc, XmlElement root, FutureProduct product, FutureManager mgr)
        {
            XmlAttribute attr = doc.CreateAttribute(IdAttr);

            attr.Value = product.ProductID;
            root.Attributes.Append(attr);

            attr       = doc.CreateAttribute(NameAttr);
            attr.Value = product.ProductName;
            root.Attributes.Append(attr);

            if (product.AllSlice != null && product.AllSlice.Count > 0)
            {
                StringBuilder builder = new StringBuilder();
                foreach (TimeSlice slice in product.AllSlice)
                {
                    builder.Append(slice.BeginTime.ToString()).Append(",")
                    .Append(slice.EndTime.ToString()).Append(",");
                }

                builder.Remove(builder.Length - 1, 1);

                attr       = doc.CreateAttribute(TradingTimeAttr);
                attr.Value = builder.ToString();
                root.Attributes.Append(attr);
            }

            List <Future> futurelist = mgr.GetFutures(product.ExchangeID, product.ProductID);

            foreach (Future future in futurelist)
            {
                XmlElement subTagNode = doc.CreateElement(FutureTag);
                root.AppendChild(subTagNode);

                FutureXml.Set(doc, subTagNode, future);
            }
        }
        internal static void Set(XmlDocument doc, XmlElement root, Exchange exchange, FutureManager mgr)
        {
            XmlAttribute attr = doc.CreateAttribute(IdAttr);
            attr.Value = exchange.ExchangeID;
            root.Attributes.Append(attr);

            attr = doc.CreateAttribute(NameAttr);
            attr.Value = exchange.ExchangeName;
            root.Attributes.Append(attr);

            StringBuilder builder = new StringBuilder();
            foreach (TimeSlice slice in exchange.AllSlice)
            {
                builder.Append(slice.BeginTime.ToString()).Append(",").Append(slice.EndTime.ToString()).Append(",");
            }

            if (exchange.AllSlice.Count > 0)
            {
                builder.Remove(builder.Length - 1, 1);
            }

            XmlElement subTagNode = doc.CreateElement(SliceTag);
            root.AppendChild(subTagNode);
            XmlText subValueNode = doc.CreateTextNode(builder.ToString());
            subTagNode.AppendChild(subValueNode);

            subTagNode = doc.CreateElement(OpenTimeTag);
            root.AppendChild(subTagNode);
            subValueNode = doc.CreateTextNode(exchange.OpenTime.ToShortTimeString());
            subTagNode.AppendChild(subValueNode);

            subTagNode = doc.CreateElement(CloseTimeTag);
            root.AppendChild(subTagNode);
            subValueNode = doc.CreateTextNode(exchange.CloseTime.ToShortTimeString());
            subTagNode.AppendChild(subValueNode);

            List<FutureProduct> productlist = mgr.GetProducts(exchange.ExchangeID);
            foreach (FutureProduct product in productlist)
            {
                subTagNode = doc.CreateElement(ProductTag);
                root.AppendChild(subTagNode);

                FutureProductXml.Set(doc, subTagNode, product, mgr);
            }
            
        }
        /// <summary>
        /// 解析内容
        /// </summary>
        /// <param name="root"></param>
        /// <param name="exchange"></param>
        /// <param name="mgr"></param>
        internal static void Get(XmlElement root, Exchange exchange, FutureManager mgr)
        {
            exchange.ExchangeID = root.GetAttribute(IdAttr);
            exchange.ExchangeName = root.GetAttribute(NameAttr);

            XmlText txtNode = null;
            DateTime dtime = default(DateTime);
            TimeSpan tsvalue;
            foreach (XmlNode subNode in root.ChildNodes)
            {
                XmlElement subTagNode = subNode as XmlElement;
                if (subTagNode == null) continue;

                switch (subTagNode.Name)
                {
                    case ProductTag:
                        FutureProduct product = new FutureProduct();
                        product.ExchangeID = exchange.ExchangeID;
                        FutureProductXml.Get(subTagNode, product, mgr);
                        if (product.ProductID != "")
                            mgr.AddProduct(product);
                        break;
                    case SliceTag:
                        txtNode = subTagNode.FirstChild as XmlText;
                        if (txtNode == null || txtNode.Value.Trim() == "") 
                            throw new Exception("配置文件格式不对");

                        string[] strlist = txtNode.Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        int icount = strlist.Length / 2;
                        for (int i = 0; i < icount; ++i)
                        {
                            TimeSlice slice = new TimeSlice();
                            if (!TimeSpan.TryParse(strlist[i * 2], out tsvalue))
                            {
                                exchange.AllSlice.Clear();
                                throw new Exception("配置文件格式不对");
                            }
                            slice.BeginTime = tsvalue;

                            if (!TimeSpan.TryParse(strlist[i * 2 + 1], out tsvalue))
                            {
                                exchange.AllSlice.Clear();
                                throw new Exception("配置文件格式不对");
                            }
                            slice.EndTime = tsvalue;

                            exchange.AllSlice.Add(slice);
                        }
                        break;
                    case OpenTimeTag:
                        txtNode = subTagNode.FirstChild as XmlText;
                        if (txtNode == null || txtNode.Value.Trim() == "")
                            throw new Exception("配置文件格式不对");
                        if (!DateTime.TryParse(txtNode.Value, out dtime))
                            throw new Exception("配置文件格式不对");
                        exchange.OpenTime = dtime;
                        break;
                    case CloseTimeTag:
                         txtNode = subTagNode.FirstChild as XmlText;
                        if (txtNode == null || txtNode.Value.Trim() == "")
                            throw new Exception("配置文件格式不对");
                        if (!DateTime.TryParse(txtNode.Value, out dtime))
                            throw new Exception("配置文件格式不对");
                        exchange.CloseTime = dtime;
                        break;
                }
            }
        }