Beispiel #1
0
        public List <Daily> GetLastNDailys(string symbol, int n, DateTime lastDate)
        {
            Instrument   inst   = InstrumentManager.Instruments[symbol];
            List <Daily> dailys = new List <Daily>();

            if (inst != null)
            {
                FileSeries series = (FileSeries)inst.GetDataSeries("Daily");
                if (series != null)
                {
                    int last = series.IndexOf(lastDate, SearchOption.Prev);
                    if (last >= 0)
                    {
                        int first = last - n + 1;
                        first = first < 0 ? 0 : first;
                        ISeriesObject[] seriesObjects = series.GetArray(first, last);
                        foreach (ISeriesObject seriesObject in seriesObjects)
                        {
                            dailys.Add((Daily)seriesObject);
                        }
                    }
                }
            }
            return(dailys);
        }
Beispiel #2
0
        public List <Bar> GetLastNBars(string symbol, int barSize, int n, DateTime lastTime)
        {
            Instrument inst = InstrumentManager.Instruments[symbol];
            List <Bar> bars = new List <Bar>();

            if (inst != null)
            {
                string     seriesName = "Bar.Time." + barSize.ToString();
                FileSeries series     = (FileSeries)inst.GetDataSeries(seriesName);
                if (series != null)
                {
                    int last = series.IndexOf(lastTime, SearchOption.Prev);
                    if (last >= 0)
                    {
                        int first = last - n + 1;
                        first = first < 0 ? 0 : first;
                        ISeriesObject[] seriesObjects = series.GetArray(first, last);
                        foreach (ISeriesObject seriesObject in seriesObjects)
                        {
                            bars.Add((Bar)seriesObject);
                        }
                    }
                }
            }
            return(bars);
        }
Beispiel #3
0
        //当前时间的最后一笔交易,交易的时间可以是当前时间
        public Trade GetLastTrade(string symbol, DateTime lastTime)
        {
            Trade trade = null;

            if (this.seriesNamesToPartitionStore.Contains("Trade"))
            {
                this.changeStoreFileForTime(lastTime);
                if ((this.lastFile != null))
                {
                    string seriesName = symbol + ".Trade";
                    if (this.lastFile.Series.Contains(seriesName))
                    {
                        FileSeries    series    = this.lastFile.Series[seriesName];
                        ISeriesObject seriesObj = series[lastTime, SearchOption.Prev];
                        trade = (Trade)seriesObj;
                    }
                }
            }
            else
            {
                Instrument inst = InstrumentManager.Instruments[symbol];
                if (inst != null)
                {
                    FileSeries series = (FileSeries)inst.GetDataSeries("Trade");
                    if (series != null)
                    {
                        ISeriesObject seriesObj = series[lastTime, SearchOption.Prev];
                        trade = (Trade)seriesObj;
                    }
                }
            }
            return(trade);
        }
Beispiel #4
0
 public ReindexForm(DataFile file, FileSeries series)
 {
   eX4XcIhHpDXt70u2x3N.k8isAcYzkUOGF();
   // ISSUE: explicit constructor call
   base.\u002Ector();
   this.RwqhYw1ax();
   this.eNxl3I1Gv = file;
   this.imLuYujEd = series;
   if (series == null)
     this.mmigbHbRS.Text = RNaihRhYEl0wUmAftnB.aYu7exFQKN(0);
   else
     this.mmigbHbRS.Text = series.Name;
   this.EErRQuytI.Items.Add((object) new UCyttABvG4oj9bO5jJ(SmartQuant.File.Indexing.Indexer.None));
   this.EErRQuytI.Items.Add((object) new UCyttABvG4oj9bO5jJ(SmartQuant.File.Indexing.Indexer.Daily));
   this.EErRQuytI.Items.Add((object) new UCyttABvG4oj9bO5jJ(SmartQuant.File.Indexing.Indexer.Monthly));
   if (series == null)
   {
     this.EErRQuytI.SelectedIndex = 0;
   }
   else
   {
     bool flag = false;
     for (int index = 0; index < this.EErRQuytI.Items.Count; ++index)
     {
       if ((this.EErRQuytI.Items[index] as UCyttABvG4oj9bO5jJ).Indexer == series.Indexer)
       {
         this.EErRQuytI.SelectedIndex = index;
         flag = true;
         break;
       }
     }
     if (!flag)
       throw new ArgumentException(RNaihRhYEl0wUmAftnB.aYu7exFQKN(24) + series.Name, RNaihRhYEl0wUmAftnB.aYu7exFQKN(82));
   }
 }
Beispiel #5
0
    //获取某个证券某天以前的N条日线数据
    public static ISeriesObject[] GetNDailysBeforeDate(Instrument inst, DateTime date, int n)
    {
        FileSeries dailySeries = (FileSeries)inst.GetDataSeries(DataManager.EDataSeries.Daily);

        if (dailySeries == null || dailySeries.Count <= 0)
        {
            return new ISeriesObject[] {}
        }
        ;
        DateTime lastDate = date;
        int      i;

        do
        {
            lastDate = lastDate.AddDays(-1);

            i = dailySeries.IndexOf(lastDate);
        }while(i < 0 && lastDate > dailySeries.FirstDateTime);
        if (i < 0)
        {
            return new ISeriesObject[] {}
        }
        ;
        int j = i - n + 1 > 0?i - n + 1:0;

        return(dailySeries.GetArray(j, i));
    }
Beispiel #6
0
    /*获取某个证券日线的个数*/
    public static int GetDailyCountBeforeDate(Instrument inst, DateTime date)
    {
        FileSeries dailySeries = (FileSeries)inst.GetDataSeries(DataManager.EDataSeries.Daily);

        if (dailySeries == null || dailySeries.Count <= 0)
        {
            return(0);
        }
        DateTime lastDate = date;
        int      i;

        do
        {
            lastDate = lastDate.AddDays(-1);
            i        = dailySeries.IndexOf(lastDate);
        }while(i < 0 && lastDate > dailySeries.FirstDateTime);
        if (i < 0)
        {
            return(0);
        }
        else
        {
            return(i - 0 + 1);
        }
    }
Beispiel #7
0
 public ObjectViewer(FileSeries series)
 {
   eX4XcIhHpDXt70u2x3N.k8isAcYzkUOGF();
   // ISSUE: explicit constructor call
   base.\u002Ector();
   this.agshrsium3();
   this.Tkgh8MqvJP.DataSeries = (IDataSeries) series;
   this.Text = series.Name;
 }
Beispiel #8
0
		public FileSeries Add(string name)
		{
//			FileSeries fs = new FileSeries(this.dataFile.kBox0k2EsS(), name, "", this.dataFile.DefaultZipLevel, this.dataFile.DefaultBlockSize, this.dataFile.DefaultIndexer);
			FileSeries fs = new FileSeries(name, "", this.dataFile.DefaultZipLevel, this.dataFile.DefaultBlockSize, this.dataFile.DefaultIndexer);

			this.list.Add(fs.Name, fs);
//			this.dataFile.kBox0k2EsS().Add(fs);
			return fs;
		}
Beispiel #9
0
 public ObjectViewer(FileSeries series)
 {
     eX4XcIhHpDXt70u2x3N.k8isAcYzkUOGF();
     // ISSUE: explicit constructor call
     base.\u002Ector();
     this.agshrsium3();
     this.Tkgh8MqvJP.DataSeries = (IDataSeries)series;
     this.Text = series.Name;
 }
Beispiel #10
0
        private void SHgDEQmHW7([In] object obj0, [In] EventArgs obj1)
        {
            FileSeries             series           = (this.rBs1yJ9gPQ.SelectedItems[0] as SeriesViewItem).Series;
            ExportSingleSeriesForm singleSeriesForm = new ExportSingleSeriesForm();

            singleSeriesForm.SetDataSeries((IDataSeries)series);
            int num = (int)singleSeriesForm.ShowDialog((IWin32Window)this);

            singleSeriesForm.Dispose();
        }
Beispiel #11
0
    public override void OnInit()
    {
        DateTime curDate = Clock.Now.Date;

        ISeriesObject[] dailyBars = Util.GetNDailiesBeforeDate(this.instrument, curDate, 60);
        foreach (Daily dBar in dailyBars)
        {
            this.Bar.Add(dBar);
        }
        bool       overWrite = false;
        FileSeries series    = (FileSeries)this.instrument.GetDataSeries("RiskLevel");

        if (series == null)
        {
            series = (FileSeries)this.instrument.AddDataSeries("RiskLevel");
        }
        float prevRiskLevel = 1.0F;

        if (series.Count > 0)
        {
            DateTime lastDate = curDate;
            int      i;
            do
            {
                lastDate = lastDate.AddDays(-1);
                i        = series.IndexOf(lastDate);
            }while(i < 0 && lastDate > series.FirstDateTime);
            if (i >= 0)
            {
                ISeriesObject[] riskArray = series.GetArray(i, i);
                GMData          gmData    = (GMData)riskArray[0];
                prevRiskLevel = gmData.DataValue;
            }
        }
        GMDaily gmLastDaily = (GMDaily)this.DailyBar.Last;
        double  inc         = (gmLastDaily.Close / gmLastDaily.LastClose - 1) * 100;
        double  abs         = Math.Abs(inc);
        double  riskLevel   = prevRiskLevel + inc / abs * (int)(abs / 0.5) * 0.1;

        riskLevel = riskLevel < 0.5?0.5:(riskLevel > 1.2?1.2:riskLevel);
        GMData gmData1 = new GMData(curDate, (float)riskLevel);

        if (overWrite)
        {
            series.Remove(curDate);
            series.Add(gmData1);
        }
        else if (!series.Contains(curDate))
        {
            series.Add(gmData1);
        }
        //this.PositionLevel=(float)riskLevel;
        Console.WriteLine("昨日涨跌幅:{0},今日风险水平为:{1}", inc, riskLevel);
    }
Beispiel #12
0
 private void pMcDXLNckH([In] FileSeries obj0)
 {
     if (obj0.Count > 0)
     {
         ObjectViewer objectViewer = new ObjectViewer(obj0);
         int          num          = (int)objectViewer.ShowDialog((IWin32Window)this);
         objectViewer.Dispose();
     }
     else
     {
         int num1 = (int)MessageBox.Show(RNaihRhYEl0wUmAftnB.aYu7exFQKN(9048));
     }
 }
Beispiel #13
0
        public MarketDepthArray GetMarketDepthArray(string seriesName, DateTime datetime1, DateTime datetime2)
        {
            MarketDepthArray array = new MarketDepthArray();
            FileSeries       fs    = this.file.Series[seriesName];

            if (fs != null)
            {
                foreach (MarketDepth marketDepth in fs.GetArray(datetime1, datetime2))
                {
                    array.Add(marketDepth);
                }
            }
            return(array);
        }
Beispiel #14
0
        public DailySeries GetDailySeries(string seriesName, DateTime datetime1, DateTime datetime2)
        {
            DailySeries dailies = new DailySeries();
            FileSeries  fs      = this.file.Series[seriesName];

            if (fs != null)
            {
                foreach (Daily daily in fs.GetArray(datetime1, datetime2))
                {
                    dailies.Add(daily);
                }
            }
            return(dailies);
        }
Beispiel #15
0
        //当前时间的下一笔交易,交易时间必须是当前时间之后
        public Trade GetNextTrade(string symbol, DateTime lastTime)
        {
            Trade trade = null;

            if (this.seriesNamesToPartitionStore.Contains("Trade"))
            {
                this.ChangeStoreFileForTime(lastTime);
                if (this.lastFile != null)
                {
                    string seriesName = symbol + ".Trade";
                    if (this.lastFile.Series.Contains(seriesName))
                    {
                        FileSeries series = this.lastFile.Series[seriesName];
                        int        index  = series.IndexOf(lastTime, SearchOption.Next);
                        if (index >= 0)
                        {
                            ISeriesObject seriesObj = series[index];
                            if (seriesObj.DateTime == lastTime)
                            {
                                seriesObj = series[index + 1];
                            }
                            trade = (Trade)seriesObj;
                        }
                    }
                }
            }
            else
            {
                Instrument inst = InstrumentManager.Instruments[symbol];
                if (inst != null)
                {
                    FileSeries series = (FileSeries)inst.GetDataSeries("Trade");
                    if (series != null)
                    {
                        int index = series.IndexOf(lastTime, SearchOption.Next);
                        if (index >= 0)
                        {
                            ISeriesObject seriesObj = series[index];
                            if (seriesObj.DateTime == lastTime)
                            {
                                seriesObj = series[index + 1];
                            }
                            trade = (Trade)seriesObj;
                        }
                    }
                }
            }
            return(trade);
        }
Beispiel #16
0
 public BarMakerForm(DataFile file, FileSeries tradeSeries)
 {
   eX4XcIhHpDXt70u2x3N.k8isAcYzkUOGF();
   // ISSUE: explicit constructor call
   base.\u002Ector();
   this.v2huqKah7Q();
   this.N9jutll7YX = file;
   this.NkcuEat6q3 = tradeSeries;
   foreach (BarType barType in Enum.GetValues(typeof (BarType)))
   {
     int num = this.wbYg1gUF09.Items.Add((object) barType);
     if (barType == DataManager.DefaultBarType)
       this.wbYg1gUF09.SelectedIndex = num;
   }
   this.yllghcYE0S.Value = (Decimal) DataManager.DefaultBarSize;
   this.crIuKCOCsn();
 }
Beispiel #17
0
 public BarMakerForm(DataFile file, FileSeries tradeSeries)
 {
     eX4XcIhHpDXt70u2x3N.k8isAcYzkUOGF();
     // ISSUE: explicit constructor call
     base.\u002Ector();
     this.v2huqKah7Q();
     this.N9jutll7YX = file;
     this.NkcuEat6q3 = tradeSeries;
     foreach (BarType barType in Enum.GetValues(typeof(BarType)))
     {
         int num = this.wbYg1gUF09.Items.Add((object)barType);
         if (barType == DataManager.DefaultBarType)
         {
             this.wbYg1gUF09.SelectedIndex = num;
         }
     }
     this.yllghcYE0S.Value = (Decimal)DataManager.DefaultBarSize;
     this.crIuKCOCsn();
 }
Beispiel #18
0
        private void WDXDQkgNqS([In] object obj0, [In] EventArgs obj1)
        {
            FileSeries series     = (this.rBs1yJ9gPQ.SelectedItems[0] as SeriesViewItem).Series;
            RenameForm renameForm = new RenameForm();

            renameForm.SeriesName = series.Name;
            if (renameForm.ShowDialog((IWin32Window)this) == DialogResult.OK && renameForm.SeriesName != series.Name)
            {
                if (this.kvT1dEnNxu.Series.Contains(renameForm.SeriesName))
                {
                    int num = (int)MessageBox.Show((IWin32Window)this, RNaihRhYEl0wUmAftnB.aYu7exFQKN(9288) + renameForm.SeriesName + RNaihRhYEl0wUmAftnB.aYu7exFQKN(9314), RNaihRhYEl0wUmAftnB.aYu7exFQKN(9350), MessageBoxButtons.OK, MessageBoxIcon.Hand);
                }
                else
                {
                    this.kvT1dEnNxu.Series.Rename(series.Name, renameForm.SeriesName);
                    this.x3xD9PDaqW();
                }
            }
            renameForm.Dispose();
        }
Beispiel #19
0
 public SeriesViewItem(FileSeries series, int iconIndex)
 {
     eX4XcIhHpDXt70u2x3N.k8isAcYzkUOGF();
     // ISSUE: explicit constructor call
     base.\u002Ector(series.Name, iconIndex);
     this.ndVlC7diZN = series;
     this.SubItems.Add(series.Count.ToString());
     if (series.Count == 0)
     {
         this.SubItems.Add(RNaihRhYEl0wUmAftnB.aYu7exFQKN(22050));
         this.SubItems.Add(RNaihRhYEl0wUmAftnB.aYu7exFQKN(22056));
     }
     else
     {
         this.SubItems.Add(series.FirstDateTime.ToShortDateString() + RNaihRhYEl0wUmAftnB.aYu7exFQKN(22062) + series.FirstDateTime.ToLongTimeString());
         this.SubItems.Add(series.LastDateTime.ToShortDateString() + RNaihRhYEl0wUmAftnB.aYu7exFQKN(22068) + series.LastDateTime.ToLongTimeString());
     }
     this.SubItems.Add(((object)series.Indexer).ToString());
     this.SubItems.Add(((object)series.IndexStatus).ToString());
 }
Beispiel #20
0
 public SeriesViewItem(FileSeries series, int iconIndex)
 {
   eX4XcIhHpDXt70u2x3N.k8isAcYzkUOGF();
   // ISSUE: explicit constructor call
   base.\u002Ector(series.Name, iconIndex);
   this.ndVlC7diZN = series;
   this.SubItems.Add(series.Count.ToString());
   if (series.Count == 0)
   {
     this.SubItems.Add(RNaihRhYEl0wUmAftnB.aYu7exFQKN(22050));
     this.SubItems.Add(RNaihRhYEl0wUmAftnB.aYu7exFQKN(22056));
   }
   else
   {
     this.SubItems.Add(series.FirstDateTime.ToShortDateString() + RNaihRhYEl0wUmAftnB.aYu7exFQKN(22062) + series.FirstDateTime.ToLongTimeString());
     this.SubItems.Add(series.LastDateTime.ToShortDateString() + RNaihRhYEl0wUmAftnB.aYu7exFQKN(22068) + series.LastDateTime.ToLongTimeString());
   }
   this.SubItems.Add(((object) series.Indexer).ToString());
   this.SubItems.Add(((object) series.IndexStatus).ToString());
 }
Beispiel #21
0
 private void auBuNyxC5G()
 {
     try
     {
         string     name       = this.InDuzorDTN.Text.Trim();
         FileSeries fileSeries = this.N9jutll7YX.Series[name] ?? this.N9jutll7YX.Series.Add(name);
         this.tb1umaM8wV(new object[1]
         {
             (object)(this.NkcuEat6q3.Name + RNaihRhYEl0wUmAftnB.aYu7exFQKN(29308) + fileSeries.Name)
         });
         this.or3uwmNsMC(new object[1]
         {
             (object)50
         });
         BarMaker.MakeBars((IDataSeries)this.NkcuEat6q3, (IDataSeries)fileSeries, this.AuauQBi8MV, (long)this.yllghcYE0S.Value);
         this.or3uwmNsMC(new object[1]
         {
             (object)100
         });
         fileSeries.Flush();
     }
     catch (Exception ex)
     {
         if (Trace.IsLevelEnabled(TraceLevel.Error))
         {
             Trace.WriteLine(((object)ex).ToString());
         }
         this.Dhsu0b1ZWm(new object[1]
         {
             (object)(RNaihRhYEl0wUmAftnB.aYu7exFQKN(29322) + Environment.NewLine + Environment.NewLine + ex.Message + Environment.NewLine + Environment.NewLine + RNaihRhYEl0wUmAftnB.aYu7exFQKN(29396))
         });
     }
     finally
     {
         this.tb1umaM8wV(new object[1]
         {
             (object)RNaihRhYEl0wUmAftnB.aYu7exFQKN(29450)
         });
         this.KpSupXOOeG();
     }
 }
Beispiel #22
0
 public ReindexForm(DataFile file, FileSeries series)
 {
     eX4XcIhHpDXt70u2x3N.k8isAcYzkUOGF();
     // ISSUE: explicit constructor call
     base.\u002Ector();
     this.RwqhYw1ax();
     this.eNxl3I1Gv = file;
     this.imLuYujEd = series;
     if (series == null)
     {
         this.mmigbHbRS.Text = RNaihRhYEl0wUmAftnB.aYu7exFQKN(0);
     }
     else
     {
         this.mmigbHbRS.Text = series.Name;
     }
     this.EErRQuytI.Items.Add((object)new UCyttABvG4oj9bO5jJ(SmartQuant.File.Indexing.Indexer.None));
     this.EErRQuytI.Items.Add((object)new UCyttABvG4oj9bO5jJ(SmartQuant.File.Indexing.Indexer.Daily));
     this.EErRQuytI.Items.Add((object)new UCyttABvG4oj9bO5jJ(SmartQuant.File.Indexing.Indexer.Monthly));
     if (series == null)
     {
         this.EErRQuytI.SelectedIndex = 0;
     }
     else
     {
         bool flag = false;
         for (int index = 0; index < this.EErRQuytI.Items.Count; ++index)
         {
             if ((this.EErRQuytI.Items[index] as UCyttABvG4oj9bO5jJ).Indexer == series.Indexer)
             {
                 this.EErRQuytI.SelectedIndex = index;
                 flag = true;
                 break;
             }
         }
         if (!flag)
         {
             throw new ArgumentException(RNaihRhYEl0wUmAftnB.aYu7exFQKN(24) + series.Name, RNaihRhYEl0wUmAftnB.aYu7exFQKN(82));
         }
     }
 }
Beispiel #23
0
        public Dictionary <string, Trade> GetLastTrades(string[] symbols, DateTime lastTime)
        {
            Dictionary <string, Trade> tradeDict = new Dictionary <string, Trade>();

            if (this.seriesNamesToPartitionStore.Contains("Trade"))
            {
                this.changeStoreFileForTime(lastTime);
                if ((this.lastFile != null))
                {
                    foreach (string symbol in symbols)
                    {
                        string seriesName = symbol + ".Trade";
                        if (this.lastFile.Series.Contains(seriesName))
                        {
                            FileSeries    series = this.lastFile.Series[seriesName];
                            ISeriesObject trade  = series[lastTime, SearchOption.Prev];
                            tradeDict.Add(symbol, (Trade)trade);
                        }
                    }
                }
            }
            else
            {
                foreach (string symbol in symbols)
                {
                    Instrument inst = InstrumentManager.Instruments[symbol];
                    if (inst != null)
                    {
                        FileSeries series = (FileSeries)inst.GetDataSeries("Trade");
                        if (series != null)
                        {
                            ISeriesObject trade = series[lastTime, SearchOption.Prev];
                            tradeDict.Add(symbol, (Trade)trade);
                        }
                    }
                }
            }
            return(tradeDict);
        }
Beispiel #24
0
        public List <Trade> GetTrades(string symbol, DateTime beginTime, DateTime endTime)
        {
            List <Trade> trades = new List <Trade>();

            if (this.seriesNamesToPartitionStore.Contains("Trade"))
            {
                this.ChangeStoreFileForTime(beginTime);
                if (this.lastFile != null)
                {
                    string seriesName = symbol + ".Trade";
                    if (this.lastFile.Series.Contains(seriesName))
                    {
                        FileSeries      series     = this.lastFile.Series[seriesName];
                        ISeriesObject[] seriesObjs = series.GetArray(beginTime, endTime);
                        foreach (ISeriesObject seriesObj in seriesObjs)
                        {
                            trades.Add((Trade)seriesObj);
                        }
                    }
                }
            }
            else
            {
                Instrument inst = InstrumentManager.Instruments[symbol];
                if (inst != null)
                {
                    FileSeries series = (FileSeries)inst.GetDataSeries("Trade");
                    if (series != null)
                    {
                        ISeriesObject[] seriesObjs = series.GetArray(beginTime, endTime);
                        foreach (ISeriesObject seriesObj in seriesObjs)
                        {
                            trades.Add((Trade)seriesObj);
                        }
                    }
                }
            }
            return(trades);
        }
Beispiel #25
0
    public static List <Daily> GetLastNDailys(Instrument inst, DateTime lastDate, int n)
    {
        List <Daily> ret         = new List <Daily>();
        FileSeries   dailySeries = (FileSeries)inst.GetDataSeries(DataManager.EDataSeries.Daily);

        if (dailySeries == null || dailySeries.Count <= 0)
        {
            return(ret);
        }
        int i = dailySeries.IndexOf(lastDate, SearchOption.Prev);

        if (i < 0)
        {
            return(ret);
        }
        int j = i - n + 1 > 0?i - n + 1:0;

        foreach (ISeriesObject isObj in dailySeries.GetArray(j, i))
        {
            ret.Add((Daily)isObj);
        }
        return(ret);
    }
Beispiel #26
0
		internal void qoHxS5EmLT(FileSeries obj0)
		{
//			if (this.KEEdbs3yRr == null)
//				return;
//			this.KEEdbs3yRr(new SeriesEventArgs(obj0));
		}
Beispiel #27
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);
        }
    }
Beispiel #28
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);
    }
Beispiel #29
0
		internal FileSeries zL2xM8qdRl(string obj0, string obj1, int obj2, int obj3, Indexer obj4)
		{
//			FileSeries fs = new FileSeries(this.dataFile.kBox0k2EsS(), obj0, obj1, obj2, obj3, obj4);
			FileSeries fs = new FileSeries(obj0, obj1, obj2, obj3, obj4);
			this.list.Add(fs.Name, fs);
			return fs;
		}
    static void Main(string[] args)
    {
        // TO DO: Add your code here
        string username = "******";
        string password = "******";
        int    ret      = _md.Init(username, password, GMSDK.MDMode.MD_MODE_NULL, "", "", "");

        if (ret != 0)
        {
            string msg = _md.StrError(ret);
            Console.WriteLine(msg);
            return;
        }
        string   dataPath        = "e:/QDData";
        DateTime beginDate       = new System.DateTime(2017, 4, 10);
        DateTime endDate         = new System.DateTime(2017, 4, 17);
        string   beginDateString = beginDate.ToString("yyyy-MM-dd");
        string   endDateString   = endDate.ToString("yyyy-MM-dd");
        Dictionary <string, Dictionary <string, double> > shareDict = new Dictionary <string, Dictionary <string, double> >();//存放股本
        List <AnalysisItem> analysisList = new List <AnalysisItem>();

        foreach (Instrument inst in InstrumentManager.Instruments)
        {
            if (inst.SecurityDesc.IndexOf("B") >= 0)
            {
                continue;                                               //除去B股
            }
            FileSeries dailySeries = (FileSeries)inst.GetDataSeries(DataManager.EDataSeries.Daily);
            if (dailySeries == null || dailySeries.Count <= 0)
            {
                continue;
            }
            int      i;
            DateTime firstDate = beginDate;
            do
            {
                i         = dailySeries.IndexOf(firstDate);
                firstDate = firstDate.AddDays(1);
            }while(i < 0 && firstDate < endDate);
            if (i < 0)
            {
                continue;
            }
            i         = i - 5 > 0?i - 5:0;
            firstDate = dailySeries[i].DateTime;
            ISeriesObject[] dailys = dailySeries.GetArray(firstDate, endDate);

            for (int k = 0; k < dailys.Length; k++)
            {
                GMDaily gmDaily = (GMDaily)dailys[k];
                if (gmDaily.DateTime >= beginDate && gmDaily.DateTime < endDate)
                {
                    if (gmDaily.Close / gmDaily.LastClose > 1.095)                  //今日涨停
                    {
                        AnalysisItem ai = new AnalysisItem();
                        ai.Date   = gmDaily.DateTime;
                        ai.Symbol = inst.Symbol;
                        Dictionary <string, double> sd = null;
                        if (!shareDict.TryGetValue(inst.Symbol, out sd))
                        {
                            sd = new Dictionary <string, double>();
                            List <GMSDK.ShareIndex> shareIndexList = _md.GetShareIndex(inst.Symbol, beginDateString, endDateString);
                            foreach (GMSDK.ShareIndex si in shareIndexList)
                            {
                                sd.Add(si.pub_date, si.flow_a_share);
                            }
                            shareDict.Add(inst.Symbol, sd);
                        }
                        sd.TryGetValue(ai.Date.ToString("yyyy-MM-dd"), out ai.FlowAShare);
                        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;
                        }
                        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;
                        string path = dataPath + "/" + gmDaily.DateTime.Year.ToString() + "/" + gmDaily.DateTime.Month.ToString();
                        if (!Directory.Exists(path))
                        {
                            Console.WriteLine("Trade数据目录不存在!");
                            return;
                        }
                        DataFile file = null;
                        bool     flag = false;
                        try {
                            file = DataFile.Open(path);
                            string name = inst.Symbol + ".Trade";
                            if (!file.Series.Contains(name))
                            {
                                continue;
                            }
                            FileSeries      series = file.Series[name];
                            ISeriesObject[] trades = series.GetArray(gmDaily.DateTime, gmDaily.DateTime.AddDays(1));
                            if (trades.Length <= 0)
                            {
                                continue;
                            }
                            GMTrade gmLastTrade = (GMTrade)trades[trades.Length - 1];                        //最后一笔交易数据
                            if (gmLastTrade.Price < gmLastTrade.UpperLimit)
                            {
                                continue;
                            }
                            GMTrade  lastGMTrade = null;
                            DateTime openTimeAM  = gmDaily.Date.Add(new TimeSpan(9, 25, 0));
                            DateTime openTimePM  = gmDaily.Date.Add(new TimeSpan(13, 0, 0));
                            foreach (ISeriesObject aTrade in trades)
                            {
                                GMTrade gmTrade = (GMTrade)aTrade;
                                if (!flag && gmTrade.Price == gmTrade.UpperLimit && gmTrade.DateTime >= openTimeAM)
                                {
                                    ai.WhenUpLimit = gmTrade.DateTime - ai.Date;
                                    flag           = true;
                                }
                                if (flag && gmTrade.Price < gmTrade.UpperLimit)
                                {
                                    ai.UpLimitBreaked = true;
                                }
                                //将下午13:00之后的每笔时间减去90分钟,这样便于计算封涨停的时长
                                if (gmTrade.DateTime >= openTimePM)
                                {
                                    gmTrade.DateTime = gmTrade.DateTime.AddMinutes(-90);
                                }
                                if (flag && lastGMTrade != null && gmTrade.Price == gmTrade.UpperLimit && lastGMTrade.Price == gmTrade.UpperLimit)
                                {
                                    ai.HowLongUpLimit += gmTrade.DateTime - lastGMTrade.DateTime;
                                }
                                if (flag)
                                {
                                    lastGMTrade = gmTrade;
                                }
                            }
                            //封成比
                            name = inst.Symbol + ".Quote";
                            if (!file.Series.Contains(name))
                            {
                                continue;
                            }
                            series = file.Series[name];
                            ISeriesObject[] quotes = series.GetArray(gmDaily.DateTime, gmDaily.DateTime.AddDays(1));
                            if (quotes.Length <= 0)
                            {
                                continue;
                            }
                            GMQuote gmLastQuote = (GMQuote)quotes[quotes.Length - 1];                        //最后一笔报价数据
                            ai.BidSizeDivVol = (double)gmLastQuote.BidSize / gmDaily.Volume;
                        }catch (Exception ex) {
                            Console.WriteLine(ex.Message);
                        }finally{
                            file.Close();
                        }
                        if (k > 0)
                        {
                            GMDaily lastGMDaily = (GMDaily)dailys[k - 1];
                            if (lastGMDaily.Close / lastGMDaily.LastClose > 1.098)
                            {
                                ai.LastUpLimited = true;
                            }
                        }
                        if (k < dailys.Length - 1)
                        {
                            GMDaily nextGMDaily = (GMDaily)dailys[k + 1];
                            ai.NextOpen  = nextGMDaily.Open;
                            ai.NextHigh  = nextGMDaily.High;
                            ai.NextLow   = nextGMDaily.Low;
                            ai.NextClose = nextGMDaily.Close;
                        }
                        if (flag)
                        {
                            analysisList.Add(ai);
                        }
                    }
                }
            }
        }
        Console.WriteLine(analysisList.Count);
        analysisList.Sort(delegate(AnalysisItem ai1, AnalysisItem ai2){
            return(ai1.Date.CompareTo(ai2.Date));
        });
        foreach (AnalysisItem ai in analysisList)
        {
            Console.WriteLine(@"Date:{0},Symbol:{1},昨收价:{2},昨日是否涨停:{3},开盘价:{4},
			最高价:{5},最低价:{6},收盘价:{7},涨停时间:{8},是否开板:{9},涨停时长:{10},
			成交量与昨日5日均量比:{11},收盘买一量与成交量比:{12},
				明日开盘价:{13},明日最高价:{14},明日最低价:{15},明日收盘价:{16},流通A股:{17},换手率:{18}"                ,
                              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.NextOpen, ai.NextHigh, ai.NextLow, ai.NextClose, 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);
            eleArray1[15] = new BsonElement("nextopen", ai.NextOpen);
            eleArray1[16] = new BsonElement("nexthigh", ai.NextHigh);
            eleArray1[17] = new BsonElement("nextlow", ai.NextLow);
            eleArray1[18] = new BsonElement("nextclose", ai.NextClose);
            BsonDocument insert = new BsonDocument(eleArray1);
            collection.Insert(insert);
        }
    }
Beispiel #31
0
//		internal FRJ1FMOwU8CAwJuZZf kBox0k2EsS()
//		{
//			return this.TGQdFvfQ8H;
//		}

		
		internal void PwExuFCdRV(FileSeries obj0)
		{
//			if (this.lIEdXL2Qo2 == null)
//				return;
//			this.lIEdXL2Qo2(new SeriesEventArgs(obj0));
		}
    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);
        }
    }
Beispiel #33
0
    static void Main(string[] args)
    {
        // TO DO: Add your code here
        DateTime beginDate = new DateTime(2017, 3, 24);
        DateTime endDate   = new DateTime(2017, 3, 25);

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

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

        int ret = _md.Init(username, password, GMSDK.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 monthString = curDate.ToString("yyyy-MM");
            //区域统计数据准备
            MongoCollection <BsonDocument>      collection = database.GetCollection <BsonDocument>("Areas." + monthString);
            Dictionary <string, List <string> > areaDict   = new Dictionary <string, List <string> >();
            foreach (BsonDocument document in collection.FindAll())
            {
                List <string> ls = null;
                if (!areaDict.TryGetValue((string)document["code"], out ls))
                {
                    ls = new List <string>();
                    areaDict.Add((string)document["code"], ls);
                }
                if (!(document["area"] is BsonNull))
                {
                    ls.Add((string)document["area"]);
                }
            }
            Dictionary <string, StatisItem> areaUpLimitStatis = new Dictionary <string, StatisItem>();

            //行业统计数据准备
            collection = database.GetCollection <BsonDocument>("Industries." + monthString);
            Dictionary <string, List <string> > industryDict = new Dictionary <string, List <string> >();
            foreach (BsonDocument document in collection.FindAll())
            {
                List <string> ls = null;
                if (!industryDict.TryGetValue((string)document["code"], out ls))
                {
                    ls = new List <string>();
                    industryDict.Add((string)document["code"], ls);
                }
                if (!(document["c_name"] is BsonNull))
                {
                    ls.Add((string)document["c_name"]);
                }
            }
            Dictionary <string, StatisItem> industryUpLimitStatis = new Dictionary <string, StatisItem>();

            //概念统计数据准备
            collection = database.GetCollection <BsonDocument>("Concepts." + monthString);
            Dictionary <string, List <string> > conceptDict = new Dictionary <string, List <string> >();
            foreach (BsonDocument document in collection.FindAll())
            {
                List <string> ls = null;
                if (!conceptDict.TryGetValue((string)document["code"], out ls))
                {
                    ls = new List <string>();
                    conceptDict.Add((string)document["code"], ls);
                }
                if (!(document["c_name"] is BsonNull))
                {
                    ls.Add((string)document["c_name"]);
                }
            }
            Dictionary <string, StatisItem> conceptUpLimitStatis = new Dictionary <string, StatisItem>();

            //找出日线当天接近涨停股
            List <Instrument> toUpLimit = new List <Instrument>();
            foreach (Instrument instrument in InstrumentManager.Instruments)
            {
                if (instrument.SecurityType == "CS" && instrument.SecurityDesc.IndexOf('B') < 0)
                {
                    DailySeries series = instrument.GetDailySeries(curDate.AddMonths(-3), curDate);
                    //下面这里要求日线数大于20,是为了排除新股
                    if (series.Count > 20)
                    {
                        GMDaily gmDaily = (GMDaily)series[series.Count - 1];                    //最近一天的日线
                        if (gmDaily.Date != curDate)
                        {
                            continue;
                        }
                        //下面是对于st,*st的,因为名字判断不准确,故去掉
                        //if ((instrument.SecurityDesc.IndexOf("ST")>=0||instrument.SecurityDesc.IndexOf('S')>=0)
                        //&&(gmDaily.Close/gmDaily.LastClose>1.044)){
                        //	toUpLimit.Add(instrument);
                        //}
                        //下面是对于普通股
                        if (gmDaily.Close / gmDaily.LastClose > 1.094)
                        {
                            toUpLimit.Add(instrument);
                        }
                    }
                }
            }
            //读出Trade数据,确定是否真的涨停及涨停时间,交统计数据
            string dataPath = "e:/QDData";
            string path     = dataPath + "/" + curDate.Year.ToString() + "/" + curDate.Month.ToString();
            if (!Directory.Exists(path))
            {
                Console.WriteLine("Trade数据目录不存在!");
                return;
            }
            try {
                DataFile file = DataFile.Open(path);
                try {
                    foreach (Instrument instrument in toUpLimit)
                    {
                        string name = instrument.Symbol + ".Trade";
                        if (!file.Series.Contains(name))
                        {
                            throw new Exception(instrument.Symbol + "的Trade数据不存在,请补充完整。");
                        }
                        FileSeries      series = file.Series[name];
                        ISeriesObject[] trades = series.GetArray(curDate, curDate.AddDays(1));
                        if (trades.Length <= 0)
                        {
                            continue;
                        }
                        GMTrade gmLastTrade = (GMTrade)trades[trades.Length - 1];                    //最后一笔交易数据
                        if (gmLastTrade.Price < gmLastTrade.UpperLimit)
                        {
                            continue;
                        }
                        foreach (ISeriesObject aTrade in trades)
                        {
                            GMTrade gmTrade = (GMTrade)aTrade;
                            if (gmTrade.Price == gmTrade.UpperLimit && gmTrade.DateTime >= curDate.Add(new TimeSpan(9, 25, 0)))
                            {
                                Console.WriteLine(instrument.Symbol + instrument.SecurityDesc + "在" + gmTrade.DateTime + "时涨停");
                                //区域统计
                                if (areaDict.ContainsKey(instrument.SecurityID))
                                {
                                    List <string> areaList = areaDict[instrument.SecurityID];
                                    foreach (string area in areaList)
                                    {
                                        StatisItem si = null;
                                        if (!areaUpLimitStatis.TryGetValue(area, out si))
                                        {
                                            si = new StatisItem();
                                            areaUpLimitStatis.Add(area, si);
                                        }
                                        si.AddSymbol(instrument.Symbol, gmTrade.DateTime);
                                    }
                                }
                                //行业统计
                                if (industryDict.ContainsKey(instrument.SecurityID))
                                {
                                    List <string> industryList = industryDict[instrument.SecurityID];
                                    foreach (string industry in industryList)
                                    {
                                        StatisItem si = null;
                                        if (!industryUpLimitStatis.TryGetValue(industry, out si))
                                        {
                                            si = new StatisItem();
                                            industryUpLimitStatis.Add(industry, si);
                                        }
                                        si.AddSymbol(instrument.Symbol, gmTrade.DateTime);
                                    }
                                }
                                //概念统计
                                if (conceptDict.ContainsKey(instrument.SecurityID))
                                {
                                    List <string> conceptList = conceptDict[instrument.SecurityID];
                                    foreach (string concept in conceptList)
                                    {
                                        StatisItem si = null;
                                        if (!conceptUpLimitStatis.TryGetValue(concept, out si))
                                        {
                                            si = new StatisItem();
                                            conceptUpLimitStatis.Add(concept, si);
                                        }
                                        si.AddSymbol(instrument.Symbol, gmTrade.DateTime);
                                    }
                                }
                                break;
                            }
                        }
                    }
                }catch (Exception ex) {
                    throw ex;
                }
                finally{
                    file.Close();
                }
                //区域统计写入数据库
                MongoCollection <BsonDocument> collection1 = database.GetCollection <BsonDocument>("AreasUpLimitStatis");
                BsonElement[] eleArray = new BsonElement[1];
                eleArray[0] = new BsonElement("date", curDate.ToString("yyyy-MM-dd"));
                QueryDocument query = new QueryDocument(eleArray);
                collection1.Remove(query);
                foreach (KeyValuePair <string, StatisItem> kvp in areaUpLimitStatis)
                {
                    BsonElement[] eleArray1 = new BsonElement[4];
                    eleArray1[0] = new BsonElement("date", curDate.ToString("yyyy-MM-dd"));
                    eleArray1[1] = new BsonElement("area", kvp.Key);
                    eleArray1[2] = new BsonElement("count", kvp.Value.Count);

                    BsonArray bsonArray = new BsonArray(kvp.Value.Count);
                    foreach (KeyValuePair <string, DateTime> kvp1 in kvp.Value.Securities)
                    {
                        bsonArray.Add(new BsonDocument(new BsonElement[2] {
                            new BsonElement("symbol", kvp1.Key),
                            new BsonElement("time", kvp1.Value.ToString("yyyy-MM-dd HH:mm:ss"))
                        }));
                    }
                    eleArray1[3] = new BsonElement("securities", bsonArray);
                    BsonDocument insert = new BsonDocument(eleArray1);
                    collection1.Insert(insert);
                }

                //行业统计写入数据库
                MongoCollection <BsonDocument> collection2 = database.GetCollection <BsonDocument>("IndustriesUpLimitStatis");
                collection2.Remove(query);
                foreach (KeyValuePair <string, StatisItem> kvp in industryUpLimitStatis)
                {
                    BsonElement[] eleArray1 = new BsonElement[4];
                    eleArray1[0] = new BsonElement("date", curDate.ToString("yyyy-MM-dd"));
                    eleArray1[1] = new BsonElement("industry", kvp.Key);
                    eleArray1[2] = new BsonElement("count", kvp.Value.Count);

                    BsonArray bsonArray = new BsonArray(kvp.Value.Count);
                    foreach (KeyValuePair <string, DateTime> kvp1 in kvp.Value.Securities)
                    {
                        bsonArray.Add(new BsonDocument(new BsonElement[2] {
                            new BsonElement("symbol", kvp1.Key),
                            new BsonElement("time", kvp1.Value.ToString("yyyy-MM-dd HH:mm:ss"))
                        }));
                    }
                    eleArray1[3] = new BsonElement("securities", bsonArray);
                    BsonDocument insert = new BsonDocument(eleArray1);
                    collection2.Insert(insert);
                }
                //概念统计写入数据库
                MongoCollection <BsonDocument> collection3 = database.GetCollection <BsonDocument>("ConceptsUpLimitStatis");
                collection3.Remove(query);
                foreach (KeyValuePair <string, StatisItem> kvp in conceptUpLimitStatis)
                {
                    BsonElement[] eleArray1 = new BsonElement[4];
                    eleArray1[0] = new BsonElement("date", curDate.ToString("yyyy-MM-dd"));
                    eleArray1[1] = new BsonElement("concept", kvp.Key);
                    eleArray1[2] = new BsonElement("count", kvp.Value.Count);

                    BsonArray bsonArray = new BsonArray(kvp.Value.Count);
                    foreach (KeyValuePair <string, DateTime> kvp1 in kvp.Value.Securities)
                    {
                        bsonArray.Add(new BsonDocument(new BsonElement[2] {
                            new BsonElement("symbol", kvp1.Key),
                            new BsonElement("time", kvp1.Value.ToString("yyyy-MM-dd HH:mm:ss"))
                        }));
                    }
                    eleArray1[3] = new BsonElement("securities", bsonArray);
                    BsonDocument insert = new BsonDocument(eleArray1);
                    collection3.Insert(insert);
                }
            }catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
            curDate = curDate.AddDays(1);
        }
    }
Beispiel #34
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 path = this.dataPath + "/" + this.curDate.Year.ToString() + "/" + this.curDate.Month.ToString();
            if (!Directory.Exists(path))
            {
                Console.WriteLine("Trade数据目录不存在!");
                return(false);
            }
            string dateString = this.curDate.ToString("yyyy-MM-dd");
            List <AnalysisItem> analysisList = new List <AnalysisItem>();
            DataFile            file         = null;
            try {
                file = DataFile.Open(path);
                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;
                        //计算封板时间、时长等
                        bool   flag = false;
                        string name = inst.Symbol + ".Trade";
                        if (!file.Series.Contains(name))
                        {
                            continue;
                        }
                        FileSeries      series = file.Series[name];
                        ISeriesObject[] trades = series.GetArray(gmDaily.DateTime, gmDaily.DateTime.AddDays(1));
                        if (trades.Length <= 0)
                        {
                            continue;
                        }
                        GMTrade gmLastTrade = (GMTrade)trades[trades.Length - 1];                    //最后一笔交易数据
                        if (gmLastTrade.Price < gmLastTrade.UpperLimit)
                        {
                            continue;
                        }
                        GMTrade  lastGMTrade = null;
                        DateTime openTimeAM  = gmDaily.Date.Add(new TimeSpan(9, 25, 0));
                        DateTime openTimePM  = gmDaily.Date.Add(new TimeSpan(13, 0, 0));
                        foreach (ISeriesObject aTrade in trades)
                        {
                            GMTrade gmTrade = (GMTrade)aTrade;
                            if (!flag && gmTrade.Price == gmTrade.UpperLimit && gmTrade.DateTime >= openTimeAM)
                            {
                                ai.WhenUpLimit = gmTrade.DateTime - ai.Date;
                                flag           = true;
                            }
                            if (flag && gmTrade.Price < gmTrade.UpperLimit)
                            {
                                ai.UpLimitBreaked = true;
                            }
                            //将下午13:00之后的每笔时间减去90分钟,这样便于计算封涨停的时长
                            if (gmTrade.DateTime >= openTimePM)
                            {
                                gmTrade.DateTime = gmTrade.DateTime.AddMinutes(-90);
                            }
                            if (flag && lastGMTrade != null && gmTrade.Price == gmTrade.UpperLimit && lastGMTrade.Price == gmTrade.UpperLimit)
                            {
                                ai.HowLongUpLimit += gmTrade.DateTime - lastGMTrade.DateTime;
                            }
                            if (flag)
                            {
                                lastGMTrade = gmTrade;
                            }
                        }
                        //封成比
                        name = inst.Symbol + ".Quote";
                        if (!file.Series.Contains(name))
                        {
                            continue;
                        }
                        series = file.Series[name];
                        ISeriesObject[] quotes = series.GetArray(gmDaily.DateTime, gmDaily.DateTime.AddDays(1));
                        if (quotes.Length <= 0)
                        {
                            continue;
                        }
                        GMQuote gmLastQuote = (GMQuote)quotes[quotes.Length - 1];                    //最后一刻报价数据
                        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;
                            }
                        }
                        if (flag)
                        {
                            analysisList.Add(ai);
                        }
                    }
                }
            }catch (Exception ex) {
                throw ex;
            }finally{
                file.Close();
            }
            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);
    }
Beispiel #35
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);
        }
        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);
        }