Example #1
0
 protected override bool doJob()
 {
     Console.WriteLine("正在下载Daily数据...");
     try
     {
         GMRealTimeProvider provider = (GMRealTimeProvider)ProviderManager.MarketDataProviders["GMRealTimeProvider"];
         provider.Connect(10000);
         if (provider.IsConnected)
         {
             string endString = this.curDate.ToString("yyyy-MM-dd");
             foreach (Instrument inst in InstrumentManager.Instruments)
             {
                 string symbol = inst.Symbol;
                 List <GMSDK.DailyBar> gmsdkDailys = provider.MdApi.GetDailyBars(symbol, endString, endString);
                 List <ISeriesObject>  gmDailys    = GSKToGM.ConvertDailys(gmsdkDailys);
                 Console.WriteLine("证券:{0}有{1}笔新日线.", symbol, gmDailys.Count);
                 if (gmDailys.Count > 0)
                 {
                     inst.Add((Daily)(gmDailys[0]));
                 }
             }
             return(true);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
     return(false);
 }
    public List <Bar> GetBars(string symbol, int barSize, string beginTimeString, string endTimeString)
    {
        List <GMSDK.Bar> gskBars;

        lock (this._md)
        {
            gskBars = this._md.GetBars(symbol, barSize, beginTimeString, endTimeString);
        }
        List <Bar> bars = new List <Bar>();

        foreach (GMSDK.Bar gskBar in gskBars)
        {
            bars.Add(GSKToGM.ConvertBar(gskBar));
        }
        return(bars);
    }
    public List <Daily> GetLastNDaily(string symbol, int n, string lastDateString)
    {
        List <GMSDK.DailyBar> gskDailys;

        lock (this._md)
        {
            gskDailys = this._md.GetLastNDailyBars(symbol, n, lastDateString);
        }
        gskDailys.Reverse();
        List <Daily> dailys = new List <Daily>();

        foreach (GMSDK.DailyBar gskDaily in gskDailys)
        {
            dailys.Add(GSKToGM.ConvertDaily(gskDaily));
        }
        return(dailys);
    }
    public Dictionary <string, Trade> GetLastTrades(string symbolList)
    {
        List <GMSDK.Tick> gskTicks = new List <GMSDK.Tick>();

        lock (this._md)
        {
            gskTicks = this._md.GetLastTicks(symbolList);
        }
        Dictionary <string, Trade> tradeDict = new Dictionary <string, Trade>();

        foreach (GMSDK.Tick gskTick in gskTicks)
        {
            string symbol = gskTick.exchange + "." + gskTick.sec_id;
            tradeDict.Add(symbol, GSKToGM.ConvertTrade(gskTick));
        }
        return(tradeDict);
    }
Example #5
0
        protected override bool doJob()
        {
            Console.WriteLine("正在读取Tick数据生成涨停板数据分析表...");

            /*Console.WriteLine("测试作业.........");
             * return true;*/
            try
            {
                GMRealTimeProvider provider = (GMRealTimeProvider)ProviderManager.MarketDataProviders["GMRealTimeProvider"];
                provider.Connect(10000);
                if (!provider.IsConnected)
                {
                    return(false);
                }

                string   dateString = this.curDate.ToString("yyyy-MM-dd");
                DateTime endTime    = this.curDate.Add(new TimeSpan(24, 0, 0));
                string   endString  = endTime.ToString("yyyy-MM-dd HH:mm:ss");

                List <AnalysisItem> analysisList = new List <AnalysisItem>();

                foreach (Instrument inst in InstrumentManager.Instruments)
                {
                    if (inst.SecurityDesc.IndexOf("B") >= 0)
                    {
                        continue;                                     //除去B股
                    }
                    if (inst.SecurityType == "IDX")
                    {
                        continue;                            //除去指数
                    }
                    FileSeries dailySeries = (FileSeries)inst.GetDataSeries(DataManager.EDataSeries.Daily);
                    if (dailySeries == null || dailySeries.Count <= 0)
                    {
                        continue;
                    }
                    int i = dailySeries.IndexOf(this.curDate);
                    if (i < 0)
                    {
                        continue;                //没有日线,当日不开盘
                    }
                    i = i - 10 > 0 ? i - 10 : 0; //往前推10个交易日
                    DateTime        firstDate = dailySeries[i].DateTime;
                    ISeriesObject[] dailys    = dailySeries.GetArray(firstDate, this.curDate);
                    int             k         = dailys.Length - 1;
                    GMDaily         gmDaily   = (GMDaily)dailys[k];

                    if (gmDaily.Close / gmDaily.LastClose > 1.095)
                    {//今日涨停
                        AnalysisItem ai = new AnalysisItem();
                        ai.Date   = gmDaily.DateTime;
                        ai.Symbol = inst.Symbol;
                        GMSDK.ShareIndex si = null;
                        //先读取当日股本,如果没有,则读取最近股本。一般情况下当日股本与最近股本相同,除非当天正好是除权日
                        List <GMSDK.ShareIndex> shareIndexList = provider.MdApi.GetShareIndex(ai.Symbol, dateString, dateString);
                        if (shareIndexList.Count <= 0)
                        {
                            shareIndexList = provider.MdApi.GetLastShareIndex(ai.Symbol);
                        }
                        if (shareIndexList.Count > 0)
                        {
                            si = shareIndexList[0];
                        }
                        if (si != null)
                        {
                            ai.FlowAShare = si.flow_a_share;
                        }
                        else
                        {
                            ai.FlowAShare = 0.0;
                        }

                        ai.LastClose = gmDaily.LastClose;
                        ai.Open      = gmDaily.Open;
                        ai.High      = gmDaily.High;
                        ai.Low       = gmDaily.Low;
                        ai.Close     = gmDaily.Close;
                        //换手率
                        if (ai.FlowAShare > 0)
                        {
                            ai.TurnoverRate = gmDaily.Volume / ai.FlowAShare * 100;
                        }
                        else
                        {
                            ai.TurnoverRate = 0.0;
                        }
                        //当日量与前5日均量比
                        int    m      = k - 1;
                        double sumVol = 0.0;
                        while (m >= 0 && m >= k - 5)
                        {
                            sumVol += ((Daily)dailys[m]).Volume;
                            m--;
                        }
                        double last5AvgVol = sumVol / (k - m - 1);
                        ai.VolDivLast5AvgVol = gmDaily.Volume / last5AvgVol;
                        //最后一笔判断是否是涨停
                        List <GMSDK.Tick> lastTicks = provider.MdApi.GetLastNTicks(inst.Symbol, 1, endString);
                        if (lastTicks.Count <= 0)
                        {
                            continue;
                        }
                        GMTrade gmLastTrade = (GMTrade)GSKToGM.ConvertTrade(lastTicks[0]);//最后一笔交易数据
                        if (gmLastTrade.Price < gmLastTrade.UpperLimit)
                        {
                            continue;
                        }

                        //封成比

                        GMQuote gmLastQuote = (GMQuote)GSKToGM.ConvertQuote(lastTicks[0]);//最后一刻报价数据
                        ai.BidSizeDivVol = (double)gmLastQuote.BidSize / gmDaily.Volume;

                        if (k > 0)
                        {
                            GMDaily lastGMDaily = (GMDaily)dailys[k - 1];
                            if (lastGMDaily.Close / lastGMDaily.LastClose >= 1.099)
                            {
                                ai.LastUpLimited = true;
                            }
                        }
                        analysisList.Add(ai);
                    }
                }

                Console.WriteLine("今日共有{0}只涨停。", analysisList.Count);
                foreach (AnalysisItem ai in analysisList)
                {
                    Console.WriteLine(@"Date:{0},Symbol:{1},昨收价:{2},昨日是否涨停:{3},开盘价:{4},
					最高价:{5},最低价:{6},收盘价:{7},涨停时间:{8},是否开板:{9},涨停时长:{10},
					成交量与昨日5日均量比:{11},收盘买一量与成交量比:{12},流通A股:{13},换手率:{14}"                    ,
                                      ai.Date, ai.Symbol, ai.LastClose, ai.LastUpLimited, ai.Open, ai.High, ai.Low, ai.Close,
                                      ai.WhenUpLimit, ai.UpLimitBreaked, ai.HowLongUpLimit, ai.VolDivLast5AvgVol, ai.BidSizeDivVol,
                                      ai.FlowAShare, ai.TurnoverRate);
                }

                MongoClient   client   = new MongoClient("mongodb://localhost:27017");
                MongoServer   server   = client.GetServer();
                MongoDatabase database = server.GetDatabase("finance");

                MongoCollection <BsonDocument> collection = database.GetCollection <BsonDocument>("UpLimitAnalysis");
                foreach (AnalysisItem ai in analysisList)
                {
                    BsonElement[] eleArray = new BsonElement[2];
                    eleArray[0] = new BsonElement("date", ai.Date.ToString("yyyy-MM-dd"));
                    eleArray[1] = new BsonElement("symbol", ai.Symbol);
                    QueryDocument query = new QueryDocument(eleArray);
                    collection.Remove(query);
                    BsonElement[] eleArray1 = new BsonElement[19];
                    eleArray1[0]  = new BsonElement("date", ai.Date.ToString("yyyy-MM-dd"));
                    eleArray1[1]  = new BsonElement("symbol", ai.Symbol);
                    eleArray1[2]  = new BsonElement("flowashare", ai.FlowAShare);
                    eleArray1[3]  = new BsonElement("lastclose", ai.LastClose);
                    eleArray1[4]  = new BsonElement("lastuplimited", ai.LastUpLimited);
                    eleArray1[5]  = new BsonElement("open", ai.Open);
                    eleArray1[6]  = new BsonElement("high", ai.High);
                    eleArray1[7]  = new BsonElement("low", ai.Low);
                    eleArray1[8]  = new BsonElement("close", ai.Close);
                    eleArray1[9]  = new BsonElement("whenuplimit", ai.WhenUpLimit.ToString());
                    eleArray1[10] = new BsonElement("uplimitbreaked", ai.UpLimitBreaked);
                    eleArray1[11] = new BsonElement("howlonguplimit", ai.HowLongUpLimit.ToString());
                    eleArray1[12] = new BsonElement("turnoverrate", ai.TurnoverRate);
                    eleArray1[13] = new BsonElement("voldivlast5avgvol", ai.VolDivLast5AvgVol);
                    eleArray1[14] = new BsonElement("bidsizedivvol", ai.BidSizeDivVol);
                    BsonDocument insert = new BsonDocument(eleArray1);
                    collection.Insert(insert);
                }
                return(true);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return(false);
        }
    static void Main(string[] args)
    {
        // TO DO: Add your code here

        string   dataPath  = "e:/QDData";
        bool     overwrite = false;
        DateTime beginDate = new System.DateTime(2017, 1, 1);
        DateTime endDate   = new System.DateTime(2017, 4, 1);

        string username = "******";
        string password = "******";

        int ret = _md.Init(username, password, MDMode.MD_MODE_NULL, "", "", "");

        if (ret != 0)
        {
            string msg = _md.StrError(ret);
            Console.WriteLine(msg);
            return;
        }
        DateTime curDate = beginDate;
        //获取交易日历,以确定是否开市日
        string dateString1 = "";

        if (endDate.AddMonths(-1) > beginDate)
        {
            dateString1 = beginDate.ToString("yyyy-MM-dd");
        }
        else
        {
            dateString1 = endDate.AddMonths(-1).ToString("yyyy-MM-dd");
        }
        string          dateString2 = endDate.AddDays(1).ToString("yyyy-MM-dd");
        List <DateTime> tradeDates  = GetTradeDates("SHSE", dateString1, dateString2);

        while (curDate < endDate)
        {
            Console.WriteLine("日期:" + curDate.ToString("yyyy-MM-dd"));
            if ((tradeDates.Count <= 0) || (!tradeDates.Contains(curDate)))
            {
                Console.WriteLine("今天不是交易日");
                curDate = curDate.AddDays(1);
                continue;
            }
            string path = dataPath + "/" + curDate.Year.ToString() + "/" + curDate.Month.ToString();
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            DateTime beginTime   = curDate.Add(new TimeSpan(9, 0, 0));
            DateTime endTime     = curDate.Add(new TimeSpan(24, 0, 0));
            string   beginString = beginTime.ToString("yyyy-MM-dd HH:mm:ss");
            string   endString   = endTime.ToString("yyyy-MM-dd HH:mm:ss");
            Console.WriteLine("时间段:" + beginString + "----" + endString);
            try {
                DataFile file = DataFile.Open(path);
                try {
                    //获取股票代码列表
                    List <string> symbols = new List <string>();
                    symbols.Add("SHSE.000001");
                    symbols.Add("SHSE.000002");
                    symbols.Add("SZSE.399001");
                    symbols.Add("SZSE.399006");
                    //symbols=GetSymbols("SHSE",1);
                    //symbols.AddRange(GetSymbols("SZSE",1));
                    foreach (string symbol in symbols)
                    {
                        Console.WriteLine("正在处理证券" + symbol + "的Tick数据...");
                        List <GMSDK.Tick> gskTicksCache = _md.GetTicks(symbol, beginString, endString);
                        Console.WriteLine(symbol + "有" + gskTicksCache.Count.ToString() + "笔数据。");
                        if (gskTicksCache.Count > 0)
                        {
                            //添加trades
                            Console.WriteLine("存储Trade数据...");
                            List <ISeriesObject> trades = GSKToGM.ConvertTrades(gskTicksCache);
                            string name1 = symbol + ".Trade";
                            if (!file.Series.Contains(name1))
                            {
                                file.Series.Add(name1);
                            }
                            FileSeries      series1   = file.Series[name1];
                            ISeriesObject[] hasTrades = series1.GetArray(beginTime, endTime);
                            if (overwrite || hasTrades.Length != trades.Count)
                            {
                                foreach (ISeriesObject aTrade in hasTrades)
                                {
                                    series1.Remove(aTrade.DateTime);
                                }
                                foreach (ISeriesObject trade in trades)
                                {
                                    series1.Add(trade);
                                }
                            }

                            series1.Reindex(Indexer.Daily);
                            //添加quotes
                            Console.WriteLine("存储Quote数据...");
                            List <ISeriesObject> quotes = GSKToGM.ConvertQuotes(gskTicksCache);
                            string name2 = symbol + ".Quote";
                            if (!file.Series.Contains(name2))
                            {
                                file.Series.Add(name2);
                            }
                            FileSeries      series2   = file.Series[name2];
                            ISeriesObject[] hasQuotes = series2.GetArray(beginTime, endTime);
                            if (overwrite || hasQuotes.Length != quotes.Count)
                            {
                                foreach (ISeriesObject aQuote in hasQuotes)
                                {
                                    series2.Remove(aQuote.DateTime);
                                }
                                foreach (ISeriesObject quote in quotes)
                                {
                                    series2.Add(quote);
                                }
                            }
                            series2.Reindex(Indexer.Daily);
                        }
                    }
                }
                catch (Exception ex) {
                    throw ex;
                }
                finally {
                    file.Close();
                }
            }catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
            curDate = curDate.AddDays(1);
        }
    }
        protected override bool doJob()
        {
            Console.WriteLine("正在下载Tick数据...");
            try
            {
                GMRealTimeProvider provider = (GMRealTimeProvider)ProviderManager.MarketDataProviders["GMRealTimeProvider"];
                provider.Connect(10000);
                if (!provider.IsConnected)
                {
                    return(false);
                }
                bool   overwrite = false;
                string path      = this.dataPath + "/" + this.curDate.Year.ToString() + "/" + this.curDate.Month.ToString();
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                DateTime beginTime   = this.curDate.Add(new TimeSpan(9, 0, 0));
                DateTime endTime     = this.curDate.Add(new TimeSpan(24, 0, 0));
                string   beginString = beginTime.ToString("yyyy-MM-dd HH:mm:ss");
                string   endString   = endTime.ToString("yyyy-MM-dd HH:mm:ss");
                Console.WriteLine("时间段:" + beginString + "----" + endString);

                DataFile file = DataFile.Open(path);
                try
                {
                    //获取股票代码列表
                    foreach (Instrument inst in InstrumentManager.Instruments)
                    {
                        string symbol = inst.Symbol;
                        Console.WriteLine("正在处理证券" + symbol + "的Tick数据...");
                        List <GMSDK.Tick> gskTicksCache = provider.MdApi.GetTicks(symbol, beginString, endString);
                        Console.WriteLine(symbol + "有" + gskTicksCache.Count.ToString() + "笔数据。");
                        if (gskTicksCache.Count > 0)
                        {
                            //添加trades
                            Console.WriteLine("存储Trade数据...");
                            List <ISeriesObject> trades = GSKToGM.ConvertTrades(gskTicksCache);
                            string name1 = symbol + ".Trade";
                            if (!file.Series.Contains(name1))
                            {
                                file.Series.Add(name1);
                            }
                            FileSeries      series1   = file.Series[name1];
                            ISeriesObject[] hasTrades = series1.GetArray(beginTime, endTime);
                            if (overwrite || hasTrades.Length != trades.Count)
                            {
                                foreach (ISeriesObject aTrade in hasTrades)
                                {
                                    series1.Remove(aTrade.DateTime);
                                }
                                foreach (ISeriesObject trade in trades)
                                {
                                    series1.Add(trade);
                                }
                            }
                            series1.Reindex(Indexer.Daily);
                            //添加quotes
                            if (inst.SecurityType == "IDX")
                            {
                                continue;                            //指数没有报价数据
                            }
                            Console.WriteLine("存储Quote数据...");
                            List <ISeriesObject> quotes = GSKToGM.ConvertQuotes(gskTicksCache);
                            string name2 = symbol + ".Quote";
                            if (!file.Series.Contains(name2))
                            {
                                file.Series.Add(name2);
                            }
                            FileSeries      series2   = file.Series[name2];
                            ISeriesObject[] hasQuotes = series2.GetArray(beginTime, endTime);
                            if (overwrite || hasQuotes.Length != quotes.Count)
                            {
                                foreach (ISeriesObject aQuote in hasQuotes)
                                {
                                    series2.Remove(aQuote.DateTime);
                                }
                                foreach (ISeriesObject quote in quotes)
                                {
                                    series2.Add(quote);
                                }
                            }
                            series2.Reindex(Indexer.Daily);
                            Console.WriteLine("证券:{0}的Tick数据存储完毕.", symbol);
                        }
                    }
                    return(true);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    file.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return(false);
        }
Example #8
0
    static void Main(string[] args)
    {
        // TO DO: Add your code here
        string   dataPath  = "e:/QDData";
        bool     overwrite = false;
        DateTime beginDate = new System.DateTime(2017, 4, 5);
        DateTime endDate   = new System.DateTime(2017, 4, 7);

        string username = "******";
        string password = "******";

        int ret = _md.Init(username, password, MDMode.MD_MODE_NULL, "", "", "");

        if (ret != 0)
        {
            string msg = _md.StrError(ret);
            Console.WriteLine(msg);
            return;
        }
        DateTime curDate = beginDate;
        //获取交易日历,以确定是否开市日
        string dateString1 = "";

        if (endDate.AddMonths(-1) > beginDate)
        {
            dateString1 = beginDate.ToString("yyyy-MM-dd");
        }
        else
        {
            dateString1 = endDate.AddMonths(-1).ToString("yyyy-MM-dd");
        }
        string          dateString2 = endDate.AddDays(1).ToString("yyyy-MM-dd");
        List <DateTime> tradeDates  = GetTradeDates("SHSE", dateString1, dateString2);

        while (curDate < endDate)
        {
            Console.WriteLine("日期:" + curDate.ToString("yyyy-MM-dd"));
            if ((tradeDates.Count <= 0) || (!tradeDates.Contains(curDate)))
            {
                Console.WriteLine("今天不是交易日");
                curDate = curDate.AddDays(1);
                continue;
            }
            string path = dataPath + "/" + curDate.Year.ToString() + "/" + curDate.Month.ToString();
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            DateTime beginTime   = curDate.Add(new TimeSpan(9, 0, 0));
            DateTime endTime     = curDate.Add(new TimeSpan(24, 0, 0));
            string   beginString = beginTime.ToString("yyyy-MM-dd HH:mm:ss");
            string   endString   = endTime.ToString("yyyy-MM-dd HH:mm:ss");
            Console.WriteLine("时间段:" + beginString + "----" + endString);
            try {
                DataFile file = DataFile.Open(path);
                Random   ra   = new Random();
                try {
                    //获取股票代码列表
                    List <string> symbols = new List <string>();
                    symbols = GetSymbols("SHSE", 1);
                    symbols.AddRange(GetSymbols("SZSE", 1));
                    foreach (string symbol in symbols)
                    {
                        //Console.WriteLine("正在检查证券"+symbol+"的Tick数据...");
                        string name = symbol + ".Trade";
                        if (!file.Series.Contains(name))
                        {
                            file.Series.Add(name);
                        }
                        FileSeries      series = file.Series[name];
                        ISeriesObject[] has    = series.GetArray(beginTime, endTime);
                        SmartQuant.Instruments.Instrument inst = InstrumentManager.Instruments[symbol];
                        //获取当天的日线数据
                        Daily dailyBar = null;
                        if (inst == null)
                        {
                            List <GMSDK.DailyBar> gskDailyBars = _md.GetDailyBars(symbol, curDate.ToString("yyyy-MM-dd"),
                                                                                  curDate.ToString("yyyy-MM-dd"));
                            if (gskDailyBars.Count > 0)
                            {
                                List <ISeriesObject> dailys = GSKToGM.ConvertDailys(gskDailyBars);
                                dailyBar = (Daily)dailys[0];
                            }
                        }
                        else
                        {
                            DailySeries dailySeries = inst.GetDailySeries(curDate, curDate);
                            if (dailySeries.Count > 0)
                            {
                                dailyBar = dailySeries[0];
                            }
                        }

                        bool needRebuild = false;
                        //检查是否丢失
                        if (has.Length <= 0)
                        {
                            if (dailyBar != null)
                            {
                                Console.WriteLine("证券:{0},在日期:{1}时丢失Tick数据", symbol, curDate);
                                needRebuild = true;
                            }
                        }
                        else
                        {
                            //检查是否有重复,一般情形下不会重复,所以这里注释掉

                            /*int r1=ra.Next(0,has.Length-1);
                             * int r2=ra.Next(0,has.Length-1);
                             *
                             * ISeriesObject randTrade1=has[r1];
                             * ISeriesObject randTrade2=has[r2];
                             *
                             * ISeriesObject[] repeat1=series.GetArray(randTrade1.DateTime,randTrade1.DateTime);
                             * ISeriesObject[] repeat2=series.GetArray(randTrade2.DateTime,randTrade2.DateTime);
                             * if (repeat1.Length>1&&repeat2.Length>1) {
                             *      Console.WriteLine("r1={0},r2={1}",r1,r2);
                             *      Console.WriteLine("证券:{0},在日期:{1}时有重复的Tick数据",symbol,curDate);
                             *      needRebuild=true;
                             * }*/
                            //检查是否不完整
                            GMTrade lastTrade = (GMTrade)has[has.Length - 1];
                            if ((dailyBar != null) && (lastTrade.TotalSize < dailyBar.Volume))
                            {
                                Console.WriteLine("证券:{0},在日期:{1}时Tick数据不全", symbol, curDate);
                                needRebuild = true;
                            }
                        }

                        if (needRebuild)
                        {
                            List <GMSDK.Tick> gskTicksCache = _md.GetTicks(symbol, beginString, endString);
                            Console.WriteLine(symbol + "有" + gskTicksCache.Count.ToString() + "笔数据。");
                            if (gskTicksCache.Count > 0)
                            {
                                //添加trades
                                Console.WriteLine("存储Trade数据...");
                                List <ISeriesObject> trades = GSKToGM.ConvertTrades(gskTicksCache);
                                string name1 = symbol + ".Trade";
                                if (!file.Series.Contains(name1))
                                {
                                    file.Series.Add(name1);
                                }
                                FileSeries      series1   = file.Series[name1];
                                ISeriesObject[] hasTrades = series1.GetArray(beginTime, endTime);
                                if (overwrite || hasTrades.Length != trades.Count)
                                {
                                    foreach (ISeriesObject aTrade in hasTrades)
                                    {
                                        series1.Remove(aTrade.DateTime);
                                    }
                                    foreach (ISeriesObject trade in trades)
                                    {
                                        series1.Add(trade);
                                    }
                                }
                                series1.Reindex(Indexer.Daily);
                                //添加quotes
                                Console.WriteLine("存储Quote数据...");
                                List <ISeriesObject> quotes = GSKToGM.ConvertQuotes(gskTicksCache);
                                string name2 = symbol + ".Quote";
                                if (!file.Series.Contains(name2))
                                {
                                    file.Series.Add(name2);
                                }
                                FileSeries      series2   = file.Series[name2];
                                ISeriesObject[] hasQuotes = series2.GetArray(beginTime, endTime);
                                if (overwrite || hasQuotes.Length != quotes.Count)
                                {
                                    foreach (ISeriesObject aQuote in hasQuotes)
                                    {
                                        series2.Remove(aQuote.DateTime);
                                    }
                                    foreach (ISeriesObject quote in quotes)
                                    {
                                        series2.Add(quote);
                                    }
                                }
                                series2.Reindex(Indexer.Daily);
                            }
                        }
                    }
                }catch (Exception ex) {
                    throw ex;
                }
                finally {
                    file.Close();
                }
            }catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }

            curDate = curDate.AddDays(1);
        }
    }
Example #9
0
    protected override bool doJob()
    {
        Console.WriteLine("正在检查Tick数据的完整性...");

        /*Console.WriteLine("测试作业.........");
         * for(int i=0;i<1000;i++) Console.WriteLine("tick{0}",i);
         * return false;*/
        try {
            GMRealTimeProvider provider = (GMRealTimeProvider)ProviderManager.MarketDataProviders["GMRealTimeProvider"];
            provider.Connect(10000);
            if (!provider.IsConnected)
            {
                return(false);
            }
            bool   overwrite = false;
            string path      = this.dataPath + "/" + this.curDate.Year.ToString() + "/" + this.curDate.Month.ToString();
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            DateTime beginTime   = this.curDate.Add(new TimeSpan(9, 0, 0));
            DateTime endTime     = this.curDate.Add(new TimeSpan(24, 0, 0));
            string   beginString = beginTime.ToString("yyyy-MM-dd HH:mm:ss");
            string   endString   = endTime.ToString("yyyy-MM-dd HH:mm:ss");
            Console.WriteLine("时间段:" + beginString + "----" + endString);

            DataFile file = DataFile.Open(path);
            try {
                //获取股票代码列表
                foreach (Instrument inst in InstrumentManager.Instruments)
                {
                    //获取当天的日线数据
                    Daily       dailyBar    = null;
                    DailySeries dailySeries = inst.GetDailySeries(this.curDate, this.curDate);
                    if (dailySeries.Count > 0)
                    {
                        dailyBar = dailySeries[0];
                    }
                    else
                    {
                        continue;
                    }

                    string name = inst.Symbol + ".Trade";
                    if (!file.Series.Contains(name))
                    {
                        file.Series.Add(name);
                    }
                    FileSeries      series      = file.Series[name];
                    ISeriesObject[] has         = series.GetArray(beginTime, endTime);
                    bool            needRebuild = false;
                    //检查是否丢失
                    if (has.Length <= 0)
                    {
                        Console.WriteLine("证券:{0},在日期:{1}时丢失Tick数据", inst.Symbol, this.curDate);
                        needRebuild = true;
                    }
                    else
                    {
                        //检查是否不完整
                        GMTrade lastTrade = (GMTrade)has[has.Length - 1];
                        if (lastTrade.TotalSize < dailyBar.Volume)
                        {
                            Console.WriteLine("证券:{0},在日期:{1}时Tick数据不全", inst.Symbol, this.curDate);
                            needRebuild = true;
                        }
                    }
                    if (needRebuild)
                    {
                        List <GMSDK.Tick> gskTicksCache = provider.MdApi.GetTicks(inst.Symbol, beginString, endString);
                        Console.WriteLine(inst.Symbol + "有" + gskTicksCache.Count.ToString() + "笔数据。");
                        if (gskTicksCache.Count > 0)
                        {
                            //添加trades
                            Console.WriteLine("存储Trade数据...");
                            List <ISeriesObject> trades = GSKToGM.ConvertTrades(gskTicksCache);
                            string name1 = inst.Symbol + ".Trade";
                            if (!file.Series.Contains(name1))
                            {
                                file.Series.Add(name1);
                            }
                            FileSeries      series1   = file.Series[name1];
                            ISeriesObject[] hasTrades = series1.GetArray(beginTime, endTime);
                            if (overwrite || hasTrades.Length != trades.Count)
                            {
                                foreach (ISeriesObject aTrade in hasTrades)
                                {
                                    series1.Remove(aTrade.DateTime);
                                }
                                foreach (ISeriesObject trade in trades)
                                {
                                    series1.Add(trade);
                                }
                            }
                            series1.Reindex(Indexer.Daily);
                            //添加quotes
                            if (inst.SecurityType == "IDX")
                            {
                                continue;                                                      //指数没有报价数据
                            }
                            Console.WriteLine("存储Quote数据...");
                            List <ISeriesObject> quotes = GSKToGM.ConvertQuotes(gskTicksCache);
                            string name2 = inst.Symbol + ".Quote";
                            if (!file.Series.Contains(name2))
                            {
                                file.Series.Add(name2);
                            }
                            FileSeries      series2   = file.Series[name2];
                            ISeriesObject[] hasQuotes = series2.GetArray(beginTime, endTime);
                            if (overwrite || hasQuotes.Length != quotes.Count)
                            {
                                foreach (ISeriesObject aQuote in hasQuotes)
                                {
                                    series2.Remove(aQuote.DateTime);
                                }
                                foreach (ISeriesObject quote in quotes)
                                {
                                    series2.Add(quote);
                                }
                            }
                            series2.Reindex(Indexer.Daily);
                        }
                    }
                }
                return(true);
            }catch (Exception ex) {
                throw ex;
            }finally {
                file.Close();
            }
        }catch (Exception ex) {
            Console.WriteLine(ex.Message);
        }
        return(false);
    }