Beispiel #1
0
 public Schedule(string interval)
 {
     interval = interval.Trim();
     DailySchedule = GetDailySchedule(interval);
     if (DailySchedule != null) {
         DailySchedule.Disarm();
         Timer = new System.Timers.Timer(DailyChecksEveryMs);
         Timer.Elapsed += OnceADay;
     } else {
         Timer = new System.Timers.Timer(GetMillisecondInterval(interval));
         Timer.Elapsed += Recurring;
     }
 }
        private void aKtda5a4rp()
        {
            bool flag = false;

            try
            {
                StreamWriter streamWriter = new StreamWriter(this.OmBd2L0KIX);
                switch (this.FF1dXhZrIu)
                {
                case (qct4K92XRXgWAtpVGR)1:
                    streamWriter.WriteLine(RNaihRhYEl0wUmAftnB.aYu7exFQKN(10614));
                    break;

                case (qct4K92XRXgWAtpVGR)2:
                    streamWriter.WriteLine(RNaihRhYEl0wUmAftnB.aYu7exFQKN(10656));
                    break;

                case (qct4K92XRXgWAtpVGR)3:
                    streamWriter.WriteLine(RNaihRhYEl0wUmAftnB.aYu7exFQKN(10724));
                    break;

                case (qct4K92XRXgWAtpVGR)4:
                    streamWriter.WriteLine(RNaihRhYEl0wUmAftnB.aYu7exFQKN(10830));
                    break;
                }
                int num1 = 0;
                for (int index = 0; index < this.WF0dC3KCxx.Count && this.S3wdKqqOTC; ++index)
                {
                    switch (this.FF1dXhZrIu)
                    {
                    case (qct4K92XRXgWAtpVGR)1:
                        Trade trade = (Trade)this.WF0dC3KCxx[index];
                        streamWriter.WriteLine(Dhgssiwum3QkgMqvJP.rKougwdICJ(3), (object)Dhgssiwum3QkgMqvJP.dOfult8pci(trade.DateTime, true, true), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(trade.Price), (object)trade.Size);
                        break;

                    case (qct4K92XRXgWAtpVGR)2:
                        Quote quote = (Quote)this.WF0dC3KCxx[index];
                        streamWriter.WriteLine(Dhgssiwum3QkgMqvJP.rKougwdICJ(5), (object)Dhgssiwum3QkgMqvJP.dOfult8pci(quote.DateTime, true, true), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(quote.Bid), (object)quote.BidSize, (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(quote.Ask), (object)quote.AskSize);
                        break;

                    case (qct4K92XRXgWAtpVGR)3:
                        Bar bar = (Bar)this.WF0dC3KCxx[index];
                        if (bar.BarType != BarType.Time)
                        {
                            throw new Exception(RNaihRhYEl0wUmAftnB.aYu7exFQKN(10912));
                        }
                        streamWriter.WriteLine(Dhgssiwum3QkgMqvJP.rKougwdICJ(8), (object)Dhgssiwum3QkgMqvJP.dOfult8pci(bar.DateTime, true, false), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(bar.Open), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(bar.High), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(bar.Low), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(bar.Close), (object)bar.Volume, (object)bar.OpenInt, (object)bar.Size);
                        break;

                    case (qct4K92XRXgWAtpVGR)4:
                        Daily daily = (Daily)this.WF0dC3KCxx[index];
                        streamWriter.WriteLine(Dhgssiwum3QkgMqvJP.rKougwdICJ(7), (object)Dhgssiwum3QkgMqvJP.dOfult8pci(daily.DateTime, false, false), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(daily.Open), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(daily.High), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(daily.Low), (object)Dhgssiwum3QkgMqvJP.UecuugvaPO(daily.Close), (object)daily.Volume, (object)daily.OpenInt);
                        break;
                    }
                    int num2 = (int)((double)index / (double)this.WF0dC3KCxx.Count * 100.0);
                    if (num2 > num1)
                    {
                        num1 = num2;
                        this.aOSdOr0cLL(new object[1]
                        {
                            (object)num2
                        });
                    }
                }
                streamWriter.Close();
            }
            catch (Exception ex)
            {
                flag = true;
                this.n0ndyRA15v((object)(RNaihRhYEl0wUmAftnB.aYu7exFQKN(10980) + Environment.NewLine + ex.Message), (object)MessageBoxIcon.Hand);
            }
            finally
            {
                if (!flag)
                {
                    if (this.S3wdKqqOTC)
                    {
                        this.n0ndyRA15v((object)RNaihRhYEl0wUmAftnB.aYu7exFQKN(11070), (object)MessageBoxIcon.Asterisk);
                    }
                    else
                    {
                        this.n0ndyRA15v((object)RNaihRhYEl0wUmAftnB.aYu7exFQKN(11138), (object)MessageBoxIcon.Exclamation);
                    }
                }
            }
        }
Beispiel #3
0
        /*定时器执行更新报价*/
        private void tickTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            /*如果只在开市时读数据,在非开市时间直接退出*/
            if (onlyReadInMarket && (DateTime.Now < DateTime.Today.Add(beginTime) || DateTime.Now > DateTime.Today.Add(endTime)))
            {
                return;
            }
            /*当运行到第二天时,清空报价缓存*/
            if (lastDateOfQuote < DateTime.Today)
            {
                lastDateOfQuote = DateTime.Today;
                lastQuotes.Clear();
            }

            if (quoteReader == null)
            {
                quoteReader = new DZHQuoteReader(dzhDataPath);
            }
            try
            {
                foreach (string symbol in subscribedSymbols.ToArray())
                {
                    if (!subscribedSymbols.Contains(symbol))
                    {
                        continue;
                    }
                    Instrument curInstrument = InstrumentManager.Instruments[symbol];
                    if (curInstrument == null)
                    {
                        this.EmitError(-1, -1, "Symbol " + symbol + " was not found in list of requested symbols.");
                    }
                    else
                    {
                        DZHSymbol dzhSymbol = new DZHSymbol(curInstrument.SecurityExchange, curInstrument.SecurityID);
                        DZHQuote  newQuote  = quoteReader.RequestQuote(dzhSymbol);
                        bool      flag1     = false;
                        bool      flag2     = false;
                        bool      first     = false;//是否是请求的第一笔数据
                        if (this.lastQuotes.ContainsKey(symbol))
                        {
                            DZHQuote oldQuote = this.lastQuotes[symbol];

                            /*这里注释掉和下面一样,大智慧发送来的数据存在同一时刻多笔交易的现象
                             * 所以不能用时间来排除
                             */
                            //if (newQuote.Time != oldQuote.Time)
                            //{
                            if ((newQuote.Bid1 != oldQuote.Bid1) || (newQuote.Bid1Vol != oldQuote.Bid1Vol) ||

                                (newQuote.Ask1 != oldQuote.Ask1) || (newQuote.Ask1Vol != oldQuote.Ask1Vol))
                            {
                                flag1 = true;
                            }
                            if ((newQuote.TotalVolume != oldQuote.TotalVolume) || (newQuote.Price != oldQuote.Price))
                            {
                                flag2 = true;
                            }
                            // }
                            this.lastQuotes[symbol] = newQuote;
                        }
                        else
                        {
                            first = true;
                            if ((newQuote.Ask1 > 0.0) || (newQuote.Bid1 > 0.0))
                            {
                                flag1 = true;
                            }
                            if ((newQuote.Price > 0.0) || (newQuote.Volume > 0.0))
                            {
                                flag2 = true;
                            }
                            this.lastQuotes.Add(symbol, newQuote);
                        }

                        /*这里注释掉是,不做时间检查,因为不使用市场数据提供者存储数据,市场数据提供者只用于实时交易
                         *而要获取过去的数据存储起来,使用历史数据提供者
                         */
                        //if ((flag1) && ((curInstrument.GetQuoteArray(newQuote.Time, newQuote.Time)).Count == 0))
                        if (flag1)
                        {
                            this.EmitNewQuote(new Quote(newQuote.Time, newQuote.Bid1, (int)newQuote.Bid1Vol, newQuote.Ask1, (int)newQuote.Ask1Vol), curInstrument);
                        }

                        /*大智慧有可能在同一时刻有多笔交易,QD不允许这样,所以有可能丢失某些笔交易
                         * 如果不作同一时刻的检查,则有可能在数据中保存重复的交易
                         * 这里注释掉是,不做时间检查,因为不使用市场数据提供者存储数据,市场数据提供者只用于实时交易
                         *而要获取过去的数据存储起来,使用历史数据提供者
                         */
                        //if ((flag2) && ((curInstrument.GetTradeArray(newQuote.Time, newQuote.Time)).Count == 0))
                        if (flag2)
                        {
                            this.EmitNewTrade(new Trade(newQuote.Time, newQuote.Price, (int)newQuote.Volume), curInstrument);
                            /*以下代码是为了产生日线*/
                            if (first && buildDailyBar)
                            {
                                lock (this)
                                {
                                    DateTime barDateTime = newQuote.Time.Date;
                                    if (!dailyBars.ContainsKey(curInstrument))
                                    {
                                        dailyBars.Add(curInstrument, new Dictionary <DateTime, Daily>());
                                    }
                                    Dictionary <DateTime, Daily> dailyBox = dailyBars[curInstrument];
                                    if (!dailyBox.ContainsKey(barDateTime))
                                    {
                                        Daily daily = new Daily(barDateTime, newQuote.Open, newQuote.High, newQuote.Low, newQuote.Price, (long)newQuote.TotalVolume);
                                        dailyBox.Add(barDateTime, daily);
                                        ((DZHBarFactory)this.factory).EmitNewBarOpen(daily, curInstrument);
                                    }
                                    DateTime realyEndTime = Clock.Now.Add(this.endTime - newQuote.Time.TimeOfDay);
                                    Clock.AddReminder(new ReminderEventHandler(OnReminder), realyEndTime, null);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                this.EmitError(-1, -1, exception.ToString());
            }
        }
Beispiel #4
0
        public void ReadXml(XmlReader reader)
        {
            reader.ReadStartElement();
            gold = long.Parse(reader.ReadInnerXml());
            xp   = long.Parse(reader.ReadInnerXml());

            // Read habits
            bool isEmpty = reader.IsEmptyElement;

            reader.ReadStartElement();
            if (!isEmpty)
            {
                while (reader.NodeType != XmlNodeType.EndElement)
                {
                    Habit habit = new Habit();
                    habit.ReadXml(reader);
                    habits.Add(habit);
                }
            }

            // Read dailies
            isEmpty = reader.IsEmptyElement;
            reader.ReadStartElement();
            if (!isEmpty)
            {
                while (reader.NodeType != XmlNodeType.EndElement)
                {
                    Daily daily = new Daily();
                    daily.ReadXml(reader);
                    dailies.Add(daily);
                }
            }

            // Read tasks
            isEmpty = reader.IsEmptyElement;
            reader.ReadStartElement();
            if (!isEmpty)
            {
                while (reader.NodeType != XmlNodeType.EndElement)
                {
                    Task task = new Task();
                    task.ReadXml(reader);
                    tasks.Add(task);
                }
            }

            // Read rewards
            isEmpty = reader.IsEmptyElement;
            reader.ReadStartElement();
            if (!isEmpty)
            {
                while (reader.NodeType != XmlNodeType.EndElement)
                {
                    Reward reward = new Reward();
                    reward.ReadXml(reader);
                    rewards.Add(reward);
                }
            }

            reader.ReadEndElement();
            reader.ReadEndElement();
        }
Beispiel #5
0
        private void loadings(string station)
        {
            metList  = new List <Daily>();
            metLists = new List <Daily>();
            try
            {
                string   total = "";
                string[] lines = System.IO.File.ReadAllLines(Sending.directoryUrl + station + "-" + "daily" + ".json");
                foreach (string line in lines)
                {
                    total += line;
                }

                List <DailyOnline> model = JsonConvert.DeserializeObject <List <DailyOnline> >(total);

                for (int d = 0; d < model.Count; d++)
                {
                    u               = new Daily(null);
                    u.Station       = model.ElementAt(d).Station;
                    u.Id            = model.ElementAt(d).Id;
                    u.Maxs          = model.ElementAt(d).Max;
                    u.Mins          = model.ElementAt(d).Min;
                    u.Actual        = model.ElementAt(d).Actual;
                    u.Anemometer    = model.ElementAt(d).Anemometer;
                    u.Wind          = model.ElementAt(d).Wind;
                    u.Maxi          = model.ElementAt(d).Maxi;
                    u.Rain          = model.ElementAt(d).Rain;
                    u.Thunder       = model.ElementAt(d).Thunder;
                    u.Fog           = model.ElementAt(d).Fog;
                    u.Haze          = model.ElementAt(d).Haze;
                    u.Storm         = model.ElementAt(d).Storm;
                    u.Quake         = model.ElementAt(d).Quake;
                    u.Height        = model.ElementAt(d).Height;
                    u.Duration      = model.ElementAt(d).Duration;
                    u.Sunshine      = model.ElementAt(d).Sunshine;
                    u.Radiationtype = model.ElementAt(d).Radiationtype;
                    u.Radiation     = model.ElementAt(d).Radiation;
                    u.Evaptype1     = model.ElementAt(d).Evaptype1;
                    u.Evap1         = model.ElementAt(d).Evap1;
                    u.Evaptype2     = model.ElementAt(d).Evaptype2;
                    u.Evap2         = model.ElementAt(d).Evap2;
                    u.Users         = model.ElementAt(d).User;
                    u.Dates         = model.ElementAt(d).Date;
                    metList.Add(u);
                }


                metLists = new List <Daily>(metList.Where(c => Convert.ToDateTime(c.Dates).Month.ToString() == (monthTxtCbx.SelectedIndex + 1).ToString() && Convert.ToDateTime(c.Dates).Year.ToString() == yearTxtBx.Text));
                double totals = 0;
                foreach (var val in metLists)
                {
                    totals += Convert.ToDouble(val.Actual);
                }



                totalsTxtBx.Text = totals.ToString();

                twentyeightTxtBx.Text = filltext("21");



                threeTxtBx.Text       = filltext("3");
                twoTxtBx.Text         = filltext("2");
                seventTxtBx.Text      = filltext("17");
                sevenTxtBx.Text       = filltext("7");
                eightTxtBx.Text       = filltext("8");
                eighteenTxtBx.Text    = filltext("18");
                tenTxtBx.Text         = filltext("10");
                elevenTxtBx.Text      = filltext("11");
                thirtTxtBx.Text       = filltext("13");
                fiftTxtBx.Text        = filltext("15");
                sixtTxtBx.Text        = filltext("16");
                twentyTxtBx.Text      = filltext("20");
                twentyoneTxtBx.Text   = filltext("21");
                twentytwoTxtBx.Text   = filltext("22");
                twentythreeTxtBx.Text = filltext("23");
                twentyFourTxtBx.Text  = filltext("24");
                twentyfiveTxtBx.Text  = filltext("25");
                twentysixTxtBx.Text   = filltext("26");
                twentysevenTxtBx.Text = filltext("27");
                twentyeightTxtBx.Text = filltext("28");
                twentynineTxtBx.Text  = filltext("29");
                thirtyTxtBx.Text      = filltext("30");
                thirtyoneTxtBx.Text   = filltext("31");
                fourTxtBx.Text        = filltext("4");
                fiveTxtBx.Text        = filltext("5");
                nineTxtBx.Text        = filltext("9");
                sixTxtBx.Text         = filltext("6");
                ninetTxtBx.Text       = filltext("19");
                tweleveTxtBx.Text     = filltext("12");
                twentyoneTxtBx.Text   = filltext("21");
                twentythreeTxtBx.Text = filltext("23");
                fourtTxtBx.Text       = filltext("14");
                thirtyoneTxtBx.Text   = filltext("31");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
                return;
            }
        }
Beispiel #6
0
        private void LEn1aOXgs([In] IAsyncResult obj0)
        {
            HistoricalDataRequest historicalDataRequest = (HistoricalDataRequest)obj0.AsyncState;
            WebRequest            webRequest            = (WebRequest)null;

            if (!this.EjDBtJJBo.TryGetValue(historicalDataRequest.RequestId, out webRequest))
            {
                return;
            }
            this.EjDBtJJBo.Remove(historicalDataRequest.RequestId);
            try
            {
                StreamReader  streamReader = new StreamReader(webRequest.EndGetResponse(obj0).GetResponseStream());
                List <string> list1        = new List <string>();
                string        str;
                while ((str = streamReader.ReadLine()) != null)
                {
                    list1.Add(str);
                }
                list1.RemoveAt(0);
                list1.Reverse();
                List <Daily> list2 = new List <Daily>();
                for (int index1 = 0; index1 < list1.Count; ++index1)
                {
                    string[] strArray = list1[index1].Split(new char[1]
                    {
                        ','
                    });
                    if (strArray.Length >= 7)
                    {
                        for (int index2 = 0; index2 < strArray.Length; ++index2)
                        {
                            strArray[index2] = strArray[index2].Trim(new char[1]
                            {
                                '"'
                            });
                            if (strArray[index2] == RbFKKlTxInQUoAZCSj.q6GyF96n8(274))
                            {
                                strArray[index2] = RbFKKlTxInQUoAZCSj.q6GyF96n8(284);
                            }
                        }
                        Daily daily1 = new Daily(DateTime.Parse(strArray[0], (IFormatProvider)CultureInfo.InvariantCulture), double.Parse(strArray[1], (IFormatProvider)CultureInfo.InvariantCulture), double.Parse(strArray[2], (IFormatProvider)CultureInfo.InvariantCulture), double.Parse(strArray[3], (IFormatProvider)CultureInfo.InvariantCulture), double.Parse(strArray[4], (IFormatProvider)CultureInfo.InvariantCulture), long.Parse(strArray[5], (IFormatProvider)CultureInfo.InvariantCulture));
                        if (this.YGOxAtD62)
                        {
                            double num1   = double.Parse(strArray[6], (IFormatProvider)CultureInfo.InvariantCulture);
                            double num2   = num1 / daily1.Close;
                            Daily  daily2 = daily1;
                            double num3   = daily2.Open * num2;
                            daily2.Open = num3;
                            Daily  daily3 = daily1;
                            double num4   = daily3.High * num2;
                            daily3.High = num4;
                            Daily  daily4 = daily1;
                            double num5   = daily4.Low * num2;
                            daily4.Low   = num5;
                            daily1.Close = num1;
                        }
                        list2.Add(daily1);
                    }
                }
                foreach (Daily daily in list2)
                {
                    if (this.FexSQYEw9.Contains((object)historicalDataRequest.RequestId))
                    {
                        this.FexSQYEw9.Remove((object)historicalDataRequest.RequestId);
                        this.J9LThvcYS(historicalDataRequest, list2.Count);
                        return;
                    }
                    else if (this.c6Jl2nfcs != null)
                    {
                        this.c6Jl2nfcs((object)this, new HistoricalBarEventArgs((Bar)daily, historicalDataRequest.RequestId, historicalDataRequest.Instrument, (IHistoricalDataProvider)this, list2.Count));
                    }
                }
                this.xmlocsjtF(historicalDataRequest, list2.Count);
            }
            catch (Exception ex)
            {
                if (this.FexSQYEw9.Contains((object)historicalDataRequest.RequestId))
                {
                    this.FexSQYEw9.Remove((object)historicalDataRequest.RequestId);
                    this.J9LThvcYS(historicalDataRequest, 0);
                }
                else
                {
                    this.iC2ZqQH0T(historicalDataRequest, ex.Message);
                }
            }
        }
 public NewRecordView(Daily daily)
 {
     InitializeComponent();
     this.AddRecordWindowDC.DailyRecord         = daily;
     this.AddRecordWindowDC.WindowTitleRecordID = "Record: " + daily.Id.ToString();
 }
Beispiel #8
0
 public void Add(Daily daily)
 {
     DataManager.Add(this, daily);
 }
 public DailyWeatherSummaryViewModel(Daily daily)
 {
     _dailyWeatherInformation = daily;
 }
Beispiel #10
0
 public bool DeleteDailyWeather(Daily daily)
 {
     _db.Remove(daily);
     return(Save());
 }
Beispiel #11
0
 public IHttpActionResult Post([FromBody] Daily value)
 {
     return(Json(new DailyDataAccessController().Select(value)));
 }
Beispiel #12
0
		public void EmitHistoricalBar(global::OpenQuant.API.HistoricalDataRequest request, DateTime datetime, double open, double high, double low, double close, long volume)
		{
			if (this.NewHistoricalBar != null)
			{
				SmartQuant.Data.Bar bar;
				if (request.request.DataType == HistoricalDataType.Daily)
				{
					bar = new Daily(datetime, open, high, low, close, volume, 0L);
				}
				else
				{
					bar = new SmartQuant.Data.Bar(datetime, open, high, low, close, volume, request.request.BarSize);
				}
				HistoricalBarEventArgs args = new HistoricalBarEventArgs(bar, request.request.RequestId, request.request.Instrument, this, 0);
				this.NewHistoricalBar(this, args);
			}
		}
Beispiel #13
0
        private void tm9qNM8Cd([In] IAsyncResult obj0)
        {
            HistoricalDataRequest historicalDataRequest = (HistoricalDataRequest)obj0.AsyncState;
            WebRequest            webRequest;

            if (!this.K4r2jjlJs.TryGetValue(historicalDataRequest.RequestId, out webRequest))
            {
                return;
            }
            this.K4r2jjlJs.Remove(historicalDataRequest.RequestId);
            try
            {
                StreamReader  streamReader = new StreamReader(webRequest.EndGetResponse(obj0).GetResponseStream());
                List <string> list1        = new List <string>();
                string        str;
                while ((str = streamReader.ReadLine()) != null)
                {
                    list1.Add(str);
                }
                if (list1.Count > 0)
                {
                    list1.RemoveAt(0);
                }
                list1.Reverse();
                List <Daily> list2 = new List <Daily>();
                for (int index = 0; index < list1.Count; ++index)
                {
                    string[] strArray = list1[index].Split(new char[1]
                    {
                        ','
                    });
                    Daily daily = new Daily(DateTime.Parse(strArray[0], (IFormatProvider)CultureInfo.InvariantCulture), double.Parse(strArray[1], (IFormatProvider)CultureInfo.InvariantCulture), double.Parse(strArray[2], (IFormatProvider)CultureInfo.InvariantCulture), double.Parse(strArray[3], (IFormatProvider)CultureInfo.InvariantCulture), double.Parse(strArray[4], (IFormatProvider)CultureInfo.InvariantCulture), long.Parse(strArray[5], (IFormatProvider)CultureInfo.InvariantCulture));
                    list2.Add(daily);
                }
                foreach (Daily daily in list2)
                {
                    if (this.YZKOeBcIM.Contains((object)historicalDataRequest.RequestId))
                    {
                        this.YZKOeBcIM.Remove((object)historicalDataRequest.RequestId);
                        this.FAwwpUwD2(historicalDataRequest, list2.Count);
                        return;
                    }
                    else
                    {
                        this.viIgpbj1M(historicalDataRequest, (Bar)daily, list2.Count);
                    }
                }
                this.iAYkpjLCs(historicalDataRequest, list2.Count);
            }
            catch (Exception ex)
            {
                if (this.YZKOeBcIM.Contains((object)historicalDataRequest.RequestId))
                {
                    this.YZKOeBcIM.Remove((object)historicalDataRequest.RequestId);
                    this.FAwwpUwD2(historicalDataRequest, 0);
                }
                else
                {
                    this.NxZTw30av(historicalDataRequest, ex.Message);
                }
            }
        }
Beispiel #14
0
 public SeniverseControl(Daily model)
 {
     InitializeComponent();
     this.Daily = model;
     Refresh(model);
 }
        private void OnRspHistoryQuot(IntPtr pQuotApi, IntPtr pBuffer, ref STKHISDATA pHisData)
        {
            string key = GetKeyFromSTKHISDATA(ref pHisData);
            string requestId;
            if (historicalDataRecords.TryGetValue(key, out requestId))
            {
                HistoricalDataRequest request;
                if (historicalDataIds.TryGetValue(requestId, out request))
                {
                    IntPtr ptrHead = (IntPtr)(pBuffer + Marshal.SizeOf(typeof(STKHISDATA)));
                    for (int i = 0; i < pHisData.nCount; ++i)
                    {
                        IntPtr ptr = (IntPtr)(ptrHead + Marshal.SizeOf(typeof(HISTORYDATA)) * i);
                        HISTORYDATA hd = (HISTORYDATA)Marshal.PtrToStructure(ptr, typeof(HISTORYDATA));

                        if (request.DataType == HistoricalDataType.Daily)
                        {
                            DateTime datetime = Convert.ToDateTime(hd.time.Substring(0, 10));

                            if (datetime >= request.BeginDate && datetime < request.EndDate)
                            {
                                Daily daily = new Daily(datetime,
                                                                hd.fOpen, hd.fHigh, hd.fLow, hd.fClose, (long)hd.fVolume, (long)hd.fAmount);
                                NewHistoricalBar(this,
                                    new HistoricalBarEventArgs(daily, request.RequestId, request.Instrument, this, -1));
                            }
                        }
                        else
                        {
                            DateTime datetime = Convert.ToDateTime(hd.time);
                            if (datetime >= request.BeginDate && datetime < request.EndDate)
                            {
                                Bar bar = new Bar(BarType.Time, request.BarSize, datetime.AddSeconds(-request.BarSize),
                                    datetime,
                                    hd.fOpen, hd.fHigh, hd.fLow, hd.fClose, (long)hd.fVolume, (long)hd.fAmount);
                                NewHistoricalBar(this,
                                    new HistoricalBarEventArgs(bar, request.RequestId, request.Instrument, this, -1));
                            }
                        }
                    }

                    historicalDataIds.Remove(request.RequestId);
                    EmitHistoricalDataCompleted(request);
                }
                historicalDataRecords.Remove(key);
            }
        }
Beispiel #16
0
 /// <inheritdoc />
 public ValueTask UpdateDailyAsync(Daily daily)
 => dailyRepository.EditAsync(daily);
Beispiel #17
0
        private void ParseLine(BufferArgs e, HistoryState hs)
        {
            DateTime dt;

            string[] r;
            Bar      bar;
            Daily    daily;           //daily = new Daily(

            //Console.WriteLine( "9100: {0} {1} {2}", hs.smLine, hs.sSymbol, e.Line );

            /*
             * if (DateTime.Now.Second == hs.gh.intSec) {
             * hs.gh.cntLps++;
             * }
             * else {
             * Console.WriteLine("  lps = {0}", hs.gh.cntLps);
             * hs.gh.cntLps = 0;
             * hs.gh.intSec = DateTime.Now.Second;
             * }*/

            e.items = e.Line.Split(chDelimComma);

            switch (hs.smLine)
            {
            case stateLine.lineN:
                if (0 == e.Line.Length)
                {
                    // ignore the blank line and prepare for end game
                    hs.smLine = stateLine.lineLast;
                }
                else
                {
                    //process the line content here
                    hs.cntLines++;
                    r = e.items[0].Split(chDelimTime);
                    try {
                        switch (hs.sSeries)
                        {
                        case "Trade":
                            dt = new DateTime(
                                System.Convert.ToInt32(r[0]), //yyyy
                                System.Convert.ToInt32(r[1]), //mm
                                System.Convert.ToInt32(r[2]), //dd
                                System.Convert.ToInt32(r[3]), //hh
                                System.Convert.ToInt32(r[4]), //mm
                                0
                                );
                            if (hs.dtstk != dt)
                            {
                                DeStackTrades(hs);
                            }
                            hs.dtstk = dt;
                            hs.stkTrades.Push(new TradeQuoteInfo(
                                                  dt,
                                                  ( float )System.Convert.ToSingle(e.items[1]), // trade,
                                                  System.Convert.ToInt32(e.items[2]),           // size
                                                  ( float )System.Convert.ToSingle(e.items[4]), // bid
                                                  System.Convert.ToInt32(e.items[7]),           // bid size
                                                  ( float )System.Convert.ToSingle(e.items[5]), // ask
                                                  System.Convert.ToInt32(e.items[8])            // ask size
                                                  )
                                              );
                            break;

                        case "Bar":
                            dt = new DateTime(
                                System.Convert.ToInt32(r[0]),                           //yyyy
                                System.Convert.ToInt32(r[1]),                           //mm
                                System.Convert.ToInt32(r[2]),                           //dd
                                System.Convert.ToInt32(r[3]),                           //hh
                                System.Convert.ToInt32(r[4]),                           //mm
                                0);                                                     //ss
                            bar = new Bar(dt,
                                          ( float )System.Convert.ToSingle(e.items[3]), // open
                                          ( float )System.Convert.ToSingle(e.items[1]), // high
                                          ( float )System.Convert.ToSingle(e.items[2]), // low
                                          ( float )System.Convert.ToSingle(e.items[4]), // close
                                          System.Convert.ToInt32(e.items[6]),           // period volume
                                          hs.size);
                            int i = hs.bs.GetIndex(dt);
                            if (0 >= i)
                            {
                                //hs.instrument.Add(bar);
                                hs.bars.Add(bar);
                            }
                            hs.cntValues++;
                            break;

                        case "Daily":
                            dt = new DateTime(
                                System.Convert.ToInt32(r[0]), //yyyy
                                System.Convert.ToInt32(r[1]), //mm
                                System.Convert.ToInt32(r[2]), //dd
                                23,                           //hh
                                59,                           //mm
                                59);                          //ss
                            daily = new Daily(dt,
                                              System.Convert.ToSingle(e.items[3]),
                                              System.Convert.ToSingle(e.items[1]),
                                              System.Convert.ToSingle(e.items[2]),
                                              System.Convert.ToSingle(e.items[4]),
                                              System.Convert.ToInt32(e.items[5])
                                              );
                            //hs.instrument.Add( daily );
                            hs.bars.Add(daily);
                            hs.cntValues++;
                            break;
                        }
                    }
                    catch {
                        Console.WriteLine("***** Error: '{0}' '{1}' '{2}' '{3}'", hs.smLine, hs.sSymbol, hs.sSeries, e.Line);
                        if (Regex.IsMatch(e.Line, "!ERROR! !NONE!", RegexOptions.None))
                        {
                            //Console.WriteLine("caught !NONE!");
                            hs.smLine = stateLine.lineRecover1;
                        }
                        else
                        {
                            if (Regex.IsMatch(e.Line, "!ERROR! Invalid symbol.", RegexOptions.None))
                            {
                                //Console.WriteLine("caught !NONE!");
                                hs.smLine = stateLine.lineRecover1;
                            }
                            else
                            {
                                // need to catch and process this erro sometime
                                //***** Error: 'lineN' 'FCH' 'Bar' '!ERROR! Could not connect to History socket.'
                                throw (new Exception("Don't know what we caught"));
                            }
                        }
                    }
                }
                break;

            case stateLine.lineLast:
                if ("!ENDMSG!" == e.Line)
                {
                    // signal routines that no more data is available
                    // prepare for next command if there is one
                    // //Console.WriteLine( "*** endmsg for {0} {1} {2} {3} {4}", hs.sSymbol, hs.sSeries, hs.size, hs.cntValues, hs.ids.Count );
                    //Console.WriteLine( "*** endmsg for {0} {1} {2} {3}", hs.sSymbol, hs.sSeries, hs.size, hs.cntValues );
                    //hs.ids.Flush();
                    Console.Write("Writing {0}", hs.sSymbol);
                    switch (hs.sSeries)
                    {
                    case "Trade":
                        if (0 != hs.stkTrades.Count)
                        {
                            DeStackTrades(hs);
                        }
                        foreach (Trade atrade in hs.trades)
                        {
                            hs.instrument.Add(atrade as Trade);
                        }
                        hs.trades.Clear();
                        foreach (Quote aquote in hs.quotes)
                        {
                            hs.instrument.Add(aquote as Quote);
                        }
                        hs.quotes.Clear();
                        break;

                    case "Bar":
                        foreach (Bar abar in hs.bars)
                        {
                            hs.instrument.Add(abar as Bar);
                        }
                        hs.bars.Clear();
                        break;

                    case "Daily":
                        foreach (Bar abar in hs.bars)
                        {
                            hs.instrument.Add(abar as Daily);
                        }
                        hs.bars.Clear();
                        break;
                    }
                    Console.Write(".");
                    hs.instrument.Save();
                    Console.Write(".");
                    Console.WriteLine(".");
                    hs.smLine  = stateLine.lineN;
                    hs.bActive = false;
                    q9100Slots.Enqueue(hs);
                    //Monitor.Enter( this );
                    if (q9100Slots.Count >= cntTypes)
                    {
                        startSymbol();
                    }
                    //Monitor.Exit( this );
                    if (q9100Slots.Count > cntTypes)
                    {
                        Console.WriteLine("Slots:  {0}", q9100Slots.Count);
                        ///*
                        foreach (HistoryState ihs in hs.gh.hsAcquiring)
                        {
                            if (ihs.bActive)
                            {
                                Console.WriteLine("  {0} {1} {2} {3} {4}",
                                                  ihs.sSymbol, ihs.size, ihs.cntLines, ihs.intPlaceInQ, ihs.intUseCount);
                            }
                        }
                        //*/
                    }
                    if (intQSize == q9100Slots.Count)
                    {
                        Monitor.Enter(this);
                        Monitor.Pulse(this);
                        Monitor.Exit(this);
                    }
                }
                else
                {
                    if (Regex.IsMatch(e.Line, "!ERROR!", RegexOptions.None))
                    {
                        // skip a blank line and prepare for finish
                        Console.WriteLine("errline");
                        hs.smLine = stateLine.lineResync;
                    }
                    else
                    {
                        Console.WriteLine("** lineLast = '{0}'", e.Line);
                        throw new ApplicationException("lineLast doesn't have some thing quite correct");
                    }
                }
                break;

            case stateLine.lineResync:
                // two blank lines on error before endmsg
                Console.WriteLine("We are in resync");
                hs.smLine = stateLine.lineN;
                break;

            case stateLine.lineRecover1:
                //Console.WriteLine("recover1");
                if (0 != e.Line.Length)
                {
                    Console.WriteLine("** lineRecover1 = '{0}'", e.Line);
                    throw new ApplicationException("lineRecover1 does not have an empty line");
                }
                //hs.smLine = stateLine.lineRecover2;
                hs.smLine = stateLine.lineLast; // 2006/09/04  ** what else does this break
                break;

            case stateLine.lineRecover2:
                Console.WriteLine("recover2");
                if (!Regex.IsMatch(e.Line, "!ENDMSG!", RegexOptions.None))
                {
                    Console.WriteLine("** lineRecover2 = '{0}'", e.Line);
                    throw new ApplicationException("lineRecover2 does not have !ENDMSG!");
                }
                hs.smLine = stateLine.lineRecover4; // 2006/09/04 changed from 3 to 4;
                break;

            case stateLine.lineRecover3:
                //Console.WriteLine("recover3");
                if (Regex.IsMatch(e.Line, "!ERROR! Unknown Error.", RegexOptions.None) ||
                    Regex.IsMatch(e.Line, "!ERROR! Invalid symbol.", RegexOptions.None))
                {
                }
                else
                {
                    Console.WriteLine("** lineRecover3 = '{0}'", e.Line);
                    throw new ApplicationException("lineRecover3 not !ERROR! Unknown Error|InvalidSymbol.");
                }
                hs.smLine = stateLine.lineRecover4;
                break;

            case stateLine.lineRecover4:
                Console.WriteLine("recover4");
                if (0 != e.Line.Length)
                {
                    Console.WriteLine("** lineRecover4 = '{0}'", e.Line);
                    throw new ApplicationException("lineRecover4 does not have an empty line");
                }
                hs.smLine = stateLine.lineLast;
                break;
            }
            ;
        }
Beispiel #18
0
 public Economy(Daily Daily, MoneyTransfer MoneyTransfer, UserAccounts UserAccounts)
 {
     _DailyReward = Daily;
     _MoneyTransfer = MoneyTransfer;
     _UserAccounts = UserAccounts;
 }
Beispiel #19
0
 public void Auto_Create_JobCost()
 {
     C2.Daily d = new Daily();
     d.auto_insert_job_cost();
 }
Beispiel #20
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);
        }
    }
    protected override bool doJob()
    {
        bool ret = false;
        List <TradeStateRecord> tradeStateRecords = new List <TradeStateRecord>();
        List <string>           recordedSymbols   = new List <string>();

        DateTime dealTime        = this.dealDate.AddMinutes(Const.DealTimeMins);
        DateTime closeTime       = this.dealDate.AddMinutes(Const.CloseTimeMins);
        string   dealTimeString  = Utils.FormatTime(dealTime);
        string   closeTimeString = Utils.FormatTime(closeTime);
        string   dealDateString  = Utils.FormatDate(dealDate);

        //处理已记录的随机交易
        foreach (BsonDocument record in RandomTradeDBAccess.GetRecordsByNextTradeDate(dealDateString))
        {
            TradeStateRecord aTradeRecord = new TradeStateRecord();
            aTradeRecord._id           = record["_id"].ToString();
            aTradeRecord.Symbol        = record["Symbol"].ToString();
            aTradeRecord.HoldingPeriod = (int)record["HoldingPeriod"] + 1;
            tradeStateRecords.Add(aTradeRecord);
            recordedSymbols.Add(aTradeRecord.Symbol);
        }
        //获取指定时间的最新价格,然后随机选择入场
        List <string> activeSymbols = new List <String>();

        activeSymbols.AddRange(this.provider.GetSymbols("SHSE", 1, 1));
        activeSymbols.AddRange(this.provider.GetSymbols("SZSE", 1, 1));

        Dictionary <String, Trade> lastTradeDict = new Dictionary <String, Trade>();

        foreach (string symbol in activeSymbols)
        {
            List <Trade> trades = this.provider.GetLastNTrades(symbol, dealTimeString, 1);
            if (trades.Count > 0 && trades[0].DateTime.Date == this.dealDate)
            {
                lastTradeDict[symbol] = trades[0];
            }
            else
            {
                lastTradeDict[symbol] = null;
            }
        }
        Console.WriteLine("今日共有 {0} 只活跃证券", lastTradeDict.Count);
        List <string> symbols = new List <string>();

        foreach (KeyValuePair <String, Trade> kvp in lastTradeDict)
        {
            if (kvp.Value == null)
            {
                continue;
            }
            GMTrade gmTrade = (GMTrade)kvp.Value;
            if (gmTrade.Price <= 0)
            {
                continue;
            }
            if (gmTrade.Price == gmTrade.UpperLimit)
            {
                continue;
            }
            if (gmTrade.Price / gmTrade.LastClose - 1 <= 0)
            {
                continue;
            }
            if (recordedSymbols.Contains(kvp.Key))
            {
                continue;
            }
            if (!symbols.Contains(kvp.Key))
            {
                symbols.Add(kvp.Key);
            }
        }
        int    total    = symbols.Count;
        Random randomer = new Random((int)DateTime.Now.Ticks);

        int[] randomNumbers = new int[100];
        for (int k = 0; k < 100; k++)
        {
            randomNumbers[k] = randomer.Next(total);
        }
        foreach (int r in randomNumbers)
        {
            string           symbol       = symbols[r];
            TradeStateRecord aTradeRecord = new TradeStateRecord();
            aTradeRecord.Symbol        = symbol;
            aTradeRecord.HoldingPeriod = 1;
            tradeStateRecords.Add(aTradeRecord);
        }
        Console.WriteLine("今日共需保存 {0} 条交易记录", tradeStateRecords.Count);
        //如果当天已写入记录,先删除
        RandomTradeDBAccess.RemoveRecordsByDate(dealDateString);
        BarFeeder.Init(this.provider, dealTime);
        //开始记录每一条交易
        string nextTradeDateString = (string)this.strategy.Global["NextTradeDate"];

        foreach (TradeStateRecord aTradeRecord in tradeStateRecords)
        {
            //读取当天日线
            List <Daily> dailys   = BarFeeder.GetLastNDailys(aTradeRecord.Symbol, 1);
            Daily        curDaily = null;
            if (dailys.Count > 0)
            {
                curDaily = dailys[0];
            }
            //没有当天日线则认为是停盘,有则确定收盘价格
            if (curDaily == null || curDaily.DateTime < this.dealDate)
            {
                aTradeRecord.PriceWhenClose = 0.0;
                Console.WriteLine("证券{0}:今日没有交易", aTradeRecord.Symbol);
                if (aTradeRecord.HoldingPeriod > 1)
                {
                    RandomTradeDBAccess.UpdateNextTradeDate(aTradeRecord._id, nextTradeDateString);
                }
                continue;
            }
            else
            {
                aTradeRecord.PriceWhenClose      = curDaily.Close;
                aTradeRecord.LowerPriceWhenClose = curDaily.Low;
            }
            //读取决断时的价格
            Trade lastTrade = lastTradeDict[aTradeRecord.Symbol];
            if (lastTrade == null || lastTrade.Price <= 0)
            {
                Console.WriteLine(" {0} 在决断时未能获取价格", aTradeRecord.Symbol);
                continue;
            }
            //读取交易价格,这里使用了下1分钟内的第一笔交易,如果没有则继续找下一分钟
            List <Trade> trades;
            Trade        nextTrade = null;
            DateTime     curTime   = dealTime;
            DateTime     nextTime;
            do
            {
                nextTime = curTime.AddMinutes(1);
                string curTimeString  = Utils.FormatTime(curTime);
                string nextTimeString = Utils.FormatTime(nextTime);
                trades = this.provider.GetTrades(aTradeRecord.Symbol, curTimeString, nextTimeString);
                int i = 0;
                int m = trades.Count;
                if (m > 0)
                {
                    while (i < m && (trades[i].DateTime <= lastTrade.DateTime || trades[i].Price >= curDaily.High))          //防止以涨停价成交,因为这是买不到的
                    {
                        i++;
                    }
                    if (i < m)
                    {
                        nextTrade = trades[i];
                    }
                }
                curTime = nextTime;
            }while((nextTrade == null || nextTrade.Price <= 0) && curTime < closeTime);
            //如果没有可交易的价格
            if (nextTrade == null)
            {
                Console.WriteLine("Symbol {0} 在 {1} 时无法在今天内成交", aTradeRecord.Symbol, dealTime);
                aTradeRecord.PriceWhenDeal = 0.0;
                if (aTradeRecord.HoldingPeriod > 1)
                {
                    RandomTradeDBAccess.UpdateNextTradeDate(aTradeRecord._id, nextTradeDateString);
                }
                continue;
            }
            else
            {
                aTradeRecord.PriceWhenDeal      = nextTrade.Price;
                aTradeRecord.LowerPriceWhenDeal = ((GMTrade)nextTrade).Low;
                //修正周期为1时,成交后经历的最低价
                if (aTradeRecord.HoldingPeriod <= 1)
                {
                    trades = this.provider.GetTrades(aTradeRecord.Symbol, Utils.FormatTime(nextTrade.DateTime), Utils.FormatTime(closeTime));
                    aTradeRecord.LowerPriceWhenClose = nextTrade.Price;
                    foreach (Trade trade in trades)
                    {
                        if (trade.Price < aTradeRecord.LowerPriceWhenClose)
                        {
                            aTradeRecord.LowerPriceWhenClose = trade.Price;
                        }
                    }
                }
            }

            //读取应指数的日线和5分线,证券的日线和分线
            string indexSymbol = "";
            if (aTradeRecord.Symbol.IndexOf("SHSE.") >= 0)
            {
                indexSymbol = "SHSE.000001";
            }
            else if (aTradeRecord.Symbol.IndexOf("SZSE.3") >= 0)
            {
                indexSymbol = "SZSE.399006";
            }
            else
            {
                indexSymbol = "SZSE.399001";
            }

            List <Daily> indexDailys = BarFeeder.GetDailys(indexSymbol, Const.IndexDailyPeriod);
            List <Bar>   indexMin5s  = BarFeeder.GetBar5s(indexSymbol, Const.IndexMin5Period);
            //***这里多加了当天日线,便于向前复权,以修正价格
            List <Daily> stockDailys = BarFeeder.GetDailys(aTradeRecord.Symbol, Const.StockDailyPeriod, true, lastTrade);
            //日线不足周期数的忽略
            if (stockDailys.Count < Const.StockDailyPeriod)
            {
                continue;
            }
            List <Bar> stockMin5s = BarFeeder.GetBar5s(aTradeRecord.Symbol, Const.StockMin5Period);
            //昨天的收盘价
            double lastClose = stockDailys[stockDailys.Count - 2].Close;

            //计算当天的奖赏
            double rewardForInside  = 0.0;         //在场内的奖赏
            double rewardForOutside = 0.0;         //在场外的奖赏
            double riskForInside    = 0.0;
            double riskForOutside   = 0.0;

            if (aTradeRecord.HoldingPeriod == 1)
            {
                rewardForInside = Math.Log(aTradeRecord.PriceWhenClose / aTradeRecord.PriceWhenDeal);
                riskForInside   = Math.Log(aTradeRecord.LowerPriceWhenClose / aTradeRecord.PriceWhenDeal);
            }
            else if (aTradeRecord.HoldingPeriod > 1)
            {
                rewardForInside  = Math.Log(aTradeRecord.PriceWhenClose / lastClose);
                rewardForOutside = Math.Log(aTradeRecord.PriceWhenDeal / lastClose);
                riskForInside    = Math.Log(aTradeRecord.LowerPriceWhenClose / lastClose);
                riskForOutside   = Math.Log(aTradeRecord.LowerPriceWhenDeal / lastClose);
            }

            //正规化数据
            List <NormalBar> indexNormalDailys = BarUtils.NormalBars(indexDailys);
            List <NormalBar> indexNormalMin5s  = BarUtils.NormalBars(indexMin5s);
            List <NormalBar> stockNormalDailys = BarUtils.NormalBars(stockDailys);
            List <NormalBar> stockNormalMin5s  = BarUtils.NormalBars(stockMin5s);
            //封装reward
            BsonArray rewards = new BsonArray(2);
            rewards.Add(rewardForInside);
            rewards.Add(rewardForOutside);
            //封装risk
            BsonArray risks = new BsonArray(2);
            risks.Add(riskForInside);
            risks.Add(riskForOutside);
            //确定nextTradeDate
            string dateString = nextTradeDateString;
            if (aTradeRecord.HoldingPeriod >= Const.HoldingPeriodLimit)
            {
                dateString = "";
            }
            //写入数据库
            RandomTradeDBAccess.SaveRocord(dealDateString, aTradeRecord.Symbol, aTradeRecord.HoldingPeriod,
                                           BarUtils.BarsToBsonArray(indexNormalDailys), BarUtils.BarsToBsonArray(indexNormalMin5s),
                                           BarUtils.BarsToBsonArray(stockNormalDailys), BarUtils.BarsToBsonArray(stockNormalMin5s),
                                           rewards, risks, dateString);
        }
        Console.WriteLine("统计完毕。");
        ret = true;
        return(ret);
    }
Beispiel #22
0
 /// <summary>
 /// 作用:保存
 /// 作者:汪建龙
 /// 编写时间:2017年3月7日10:08:31
 /// </summary>
 /// <param name="daily"></param>
 /// <returns></returns>
 public int Save(Daily daily)
 {
     Db.Dailys.Add(daily);
     Db.SaveChanges();
     return daily.ID;
 }
Beispiel #23
0
 public static void Add(Instrument instrument, Daily daily)
 {
     DataManager.Add(instrument, SUFFIX_DAILY, daily);
 }
Beispiel #24
0
        /// <summary>
        /// 每日数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void uiButton_daily_Click(object sender, EventArgs e)
        {
            //添加数据
            int   MaxCount = int.MinValue;
            int   MinCount = int.MaxValue;
            Daily daily    = null;

            List <string> items = new List <string>()
            {
                "7日", "15日", "30日"
            };
            int index = 0;
            int day   = 0;

            if (this.ShowSelectDialog(ref index, items))
            {
                //根据index,确定day变量大小
                switch (index)
                {
                case 0:
                    day = 7;
                    break;

                case 1:
                    day = 15;
                    break;

                case 2:
                    day = 30;
                    break;
                }

                //初始化Option
                UIBarOption option = new UIBarOption();
                option.Title         = new UITitle();
                option.Title.Text    = "每日数据";
                option.Title.SubText = "BarChart";

                //添加数据
                var series = new UIBarSeries();
                series.Name = "Total";

                int x = -1;
                for (int i = -day; i <= -1; i++)
                {
                    x = KeyData_DailyData.FindByRange(DateTime.Now.AddDays(i).Date.ToString("yyyy-MM-dd"), day);
                    if (x != -1)
                    {
                        daily = KeyData_DailyData.dailyData.dailies[x];
                        //获取常规数据
                        series.AddData(daily.Total);
                        option.XAxis.Data.Add(daily.Date);
                        //获取最大最小数据
                        MaxCount = MaxCount > daily.Total ? MaxCount : daily.Total;
                        MinCount = MinCount < daily.Total ? MinCount : daily.Total;
                    }
                    else
                    {
                        //自动补完
                        series.AddData(0);
                        option.XAxis.Data.Add(DateTime.Now.AddDays(i).Date.ToString("yyyy-MM-dd"));
                    }
                }

                //更新数据面板
                uiLabel_total.Text = "总数:不做计算";
                uiLabel_date.Text  = "日期:" + DateTime.Now.AddDays(-day).Date.ToString("yyyy-MM-dd") + "至" + KeyData_DailyData.dailyData.EndDate;
                option.Series.Add(series);

                //添加最大最小数据线
                if (MaxCount != int.MinValue)
                {
                    option.YAxisScaleLines.Add(new UIScaleLine()
                    {
                        Color = Color.Red, Name = "最大为" + MaxCount, Value = MaxCount
                    });
                }
                if (MinCount != int.MaxValue)
                {
                    option.YAxisScaleLines.Add(new UIScaleLine()
                    {
                        Color = Color.Blue, Name = "最小为" + MinCount, Value = MinCount, Left = UILeftAlignment.Right
                    });
                }


                //x轴上不显示标签
                option.XAxis.AxisLabel.Show = false;
                //显示tip
                option.ToolTip = new UIBarToolTip();
                //其他设置
                option.YAxis.Scale = true;
                option.XAxis.Name  = "日期";
                option.YAxis.Name  = "数值";

                uiBarChart1.SetOption(option);
            }
        }
Beispiel #25
0
        public DailyAll Select(Daily value)
        {
            List <Met> tmpMet = new List <Met>();
            double     weight = 0;
            double     height = 0;
            int        goal   = 0;
            int        age    = 0;
            string     male   = "male";

            try
            {
                this.cmd.Parameters.AddWithValue("@id", value.ID);
                this.cmd.Parameters.AddWithValue("@date", value.Date);
                this.cmd.CommandText = @"select Exercise.id, Mets.MET, Mets.Detailed, Exercise.Duration, Exercise.[Date] " +
                                       @"from Exercise inner join Mets on Mets.ID = Exercise.Mets_ID " +
                                       @"where Exercise.Person_ID = @id and cast(Exercise.[Date] as date) = convert(date, @date)";
                this.conn.Open();
                if (this.conn.State.Equals(ConnectionState.Open))
                {
                    this.read = this.cmd.ExecuteReader();
                    while (this.read.Read())
                    {
                        tmpMet.Add(new Met(
                                       this.read.GetInt32(0),              // ["ID"]
                                       this.read.GetDouble(1),             // ["MET"]
                                       this.Check(this.read.GetString(2)), // ["Detailed"]
                                       this.read.GetDouble(3),             // ["Duration"]
                                       this.read.GetDateTime(4)            // ["Date"]
                                       ));
                    }
                }
                else
                {
                    throw new Exception("Cannot open connection.");
                }

                this.conn.Close();

                this.cmd.CommandText = @"select top 1 Height, Weight, Male, Goal, DATEDIFF(YEAR, BirthDate, GETDATE()) as Age from Person where ID = @id";
                this.conn.Open();
                if (this.conn.State.Equals(ConnectionState.Open))
                {
                    this.read = this.cmd.ExecuteReader();
                    if (this.read.Read())
                    {
                        height = this.read.GetDouble(0); // Height
                        weight = this.read.GetDouble(1); // Weight
                        male   = this.read.GetString(2); // Male
                        goal   = this.read.GetInt32(3);  // Goal
                        age    = this.read.GetInt32(4);  // Age
                    }
                }
                else
                {
                    throw new Exception("Cannot open connection.");
                }

                this.conn.Close();

                this.cmd.CommandText = @"select Meal.id, Meal.Quantity, FoodNutritions.name, FoodNutritions.calories, FoodNutritions.carbs, FoodNutritions.fat, FoodNutritions.protein, Meal.[Date] " +
                                       @"from Meal inner join FoodNutritions on Meal.FoodNutritions_ID = FoodNutritions.id " +
                                       @"where Meal.Person_ID = @id and cast(Meal.[Date] as date) = convert(date, @date)";
                List <Food> tmpFood = new List <Food>();
                this.conn.Open();
                if (this.conn.State.Equals(ConnectionState.Open))
                {
                    this.read = this.cmd.ExecuteReader();
                    while (this.read.Read())
                    {
                        tmpFood.Add(new Food(
                                        this.read.GetInt32(0),
                                        this.read.GetDouble(1),
                                        this.read.GetString(2),
                                        this.read.GetDouble(3),
                                        this.read.GetDouble(4),
                                        this.read.GetDouble(5),
                                        this.read.GetDouble(6),
                                        this.read.GetDateTime(7)));
                    }
                }
                else
                {
                    throw new Exception("Cannot open connection.");
                }

                tmpMet.TrimExcess();
                tmpFood.TrimExcess();
                return(new DailyAll(tmpMet, tmpFood, new GpsExerciseDataAccessController().SelectAll(value.ID), height, weight, male, goal, age));
            }
            catch (Exception e) { System.Diagnostics.Debug.WriteLine("\n\n{0}\n\n", e.Message); return(null); }
            finally { this.EndQuery(); }
        }
Beispiel #26
0
 public void addDaily(Daily daily)
 {
     dailies.Add(daily);
 }
Beispiel #27
0
        public IEnumerable <DataPoint> SetDataPointsFromStation(DataPoint[] dataSet)
        {
            try
            {
                // Check if dataSet is empty
                if (dataSet.Length <= 0)
                {
                    return(null);
                }

                // Get the station for the dataSet
                string  stationId      = dataSet[0].Station.Id;
                Station dataSetStation = db.Stations.Find(stationId);

                if (dataSetStation == null)
                {
                    Console.Out.WriteLine("SetDataPointsFromStation - station does not exist");
                    return(null);
                }

                // Gets Max and Min Times
                DateTime  minTime  = dataSet.Min(x => x.Time);
                DateTime  maxTime  = dataSet.Max(x => x.Time);
                DataPoint maxPoint = (from d in dataSet
                                      where d.Time == maxTime
                                      select d).First();

                DateTime startTime   = minTime;
                DateTime today       = startTime.Date;
                DateTime nextDay     = startTime.AddDays(1);
                DateTime endTime     = maxTime;
                DateTime sixHoursAgo = DateTime.UtcNow.AddHours(-6);

                // Recursively call this to separate days
                if (startTime.Date != endTime.Date)
                {
                    IEnumerable <DataPoint> newTailSet = from d in dataSet
                                                         where d.Time >= endTime.Date
                                                         select d;
                    IEnumerable <DataPoint> newHeadSet = from d in dataSet
                                                         where d.Time < endTime.Date
                                                         select d;

                    return(SetDataPointsFromStation(newHeadSet.ToArray()).Concat(SetDataPointsFromStation(newTailSet.ToArray())));
                }

                db.Configuration.AutoDetectChangesEnabled = false;

                // Get values currently in database.
                DataPointComparer   comparer            = new DataPointComparer();
                HashSet <DataPoint> exisitingDataPoints = new HashSet <DataPoint>(comparer);

                HashSet <DataPoint> temp = GetDataPointsFromStationBetweenTimes(stationId, startTime, nextDay);

                if (temp != null)
                {
                    exisitingDataPoints.UnionWith(temp);
                }

                // Latest DataPoints for each Parameter
                List <DataPoint> addingDataPoints = new List <DataPoint>();

                // Find the existing parameters in station
                Dictionary <string, Parameter> existingParameters = new Dictionary <string, Parameter>();
                foreach (Parameter p in db.Parameters.ToList())
                {
                    existingParameters.Add(p.Name, p);
                }

                Parameter tempParameter = null;
                DataPoint latestPoint   = maxPoint;

                //DataPoint outPoint;
                foreach (DataPoint point in dataSet)
                {
                    // Best - Negligible slow down
                    existingParameters.TryGetValue(point.Parameter.Name, out tempParameter);
                    point.Parameter      = tempParameter;
                    point.Parameter_Name = tempParameter.Name;

                    point.Station    = dataSetStation;
                    point.Station_Id = dataSetStation.Id;

                    point.Indoor = dataSetStation.Indoor;

                    if (!exisitingDataPoints.Contains(point))
                    {
                        addingDataPoints.Add(point);
                        exisitingDataPoints.Add(point);
                    }
                }

                db.Configuration.AutoDetectChangesEnabled = true;
                db.DataPoints.AddRange(addingDataPoints);
                db.SaveChanges();

                //dataSetStation = db.Stations.Find(stationId);

                dataSetStation.Indoor   = latestPoint.Indoor;
                dataSetStation.Location = latestPoint.Location;



                //sDaily = db.Dailies.Find(today, stationId);


                Daily sDaily = GetDailyValues(dataSetStation, today, nextDay);

                Daily sDailyToDB = db.Dailies.Find(today, stationId);

                if (sDaily.MaxParameter != null && sDaily.MinParameter != null)
                {
                    if (sDailyToDB == null)
                    {
                        // if count of values for this station with values greater than or equal to zero > 0
                        // is this necessary???
                        //int number = (from d in db.DataPoints
                        //              where d.Station_Id == dataSetStation.Id && d.Time >= today && d.Time < nextDay
                        //              select d).Count();

                        //if (number > 0)
                        //{
                        sDailyToDB         = sDaily;
                        sDailyToDB.Station = dataSetStation;
                        sDailyToDB.Date    = today;
                        db.Dailies.Add(sDailyToDB);
                        //}
                    }
                    else
                    {
                        sDailyToDB.AvgAQI       = sDaily.AvgAQI;
                        sDailyToDB.MaxAQI       = sDaily.MaxAQI;
                        sDailyToDB.MaxCategory  = sDaily.MaxCategory;
                        sDailyToDB.MaxParameter = sDaily.MaxParameter;
                        sDailyToDB.MinAQI       = sDaily.MinAQI;
                        sDailyToDB.MinCategory  = sDaily.MinCategory;
                        sDailyToDB.MinParameter = sDaily.MinParameter;
                    }
                    db.SaveChanges();
                }



                var latestPoints = (from points in db.DataPoints
                                    where points.Station.Id == stationId
                                    where points.Time > sixHoursAgo
                                    group points by points.Parameter.Name into paramPoints
                                    select new
                {
                    dataPoints = paramPoints.OrderByDescending(a => a.Time).FirstOrDefault()
                }).Select(c => c.dataPoints);

                int       latestMaxAQI = -1;
                DataPoint maxLatest    = null;

                foreach (DataPoint d in latestPoints)
                {
                    if (d.AQI > latestMaxAQI)
                    {
                        latestMaxAQI = d.AQI;
                        maxLatest    = d;
                    }
                }

                if (maxLatest != null)
                {
                    dataSetStation.AQI       = maxLatest.AQI;
                    dataSetStation.Location  = maxLatest.Location;
                    dataSetStation.Parameter = maxLatest.Parameter;
                }


                db.SaveChanges();
                return(addingDataPoints);
            }
            catch (Exception e)
            {
                Console.Out.WriteLine("An Exception occurred while setting Datapoints:\n" + e.Message);
                return(null);
            }
        }
Beispiel #28
0
        /// <summary>
        /// Parses dailies from json data
        /// </summary>
        /// <param name="json">Dailies json data</param>
        /// <param name="output">Output for the parsed dailies</param>
        /// <returns>A set of achievement IDs from the parsed dailies</returns>
        private HashSet <ItemID> ParseDailies(string json, Dailies output)
        {
            var data = Api.Json.Decode(json) as Dictionary <string, object>;

            if (data == null)
            {
                throw new IOException();
            }

            output.Categories = new Category[data.Count];

            var ids = new HashSet <ItemID>();
            var ci  = 0;

            foreach (var key in data.Keys)
            {
                var cdata = (List <object>)data[key];

                Category c;
                Daily[]  dailies;

                output.Categories[ci++] = c = new Category()
                {
                    Name    = GetCategoryName(key),
                    Dailies = dailies = new Daily[cdata.Count]
                };

                for (int di = 0, dl = cdata.Count; di < dl; di++)
                {
                    var   ddata = (Dictionary <string, object>)cdata[di];
                    var   ldata = (Dictionary <string, object>)ddata["level"];
                    Daily d;

                    dailies[di] = d = new Daily()
                    {
                        ID       = (uint)(int)ddata["id"],
                        MinLevel = (int)ldata["min"],
                        MaxLevel = (int)ldata["max"],
                    };

                    try
                    {
                        object o;
                        if (ddata.TryGetValue("required_access", out o))
                        {
                            var rdata   = (Dictionary <string, object>)o;
                            var product = (string)rdata["product"];

                            d.Access = ParseAccessCondition(product, (string)rdata["condition"]);

                            if ((d.Access & Daily.AccessCondition.Unknown) != 0)
                            {
                                d.UnknownName = CreateUnknownName(product);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Util.Logging.Log(ex);
                    }

                    ids.Add(new ItemID(CacheType.Achievement, d.ID));
                }
            }

            return(ids);
        }
Beispiel #29
0
 private void Awake()
 {
     manage = this;
 }
Beispiel #30
0
		public static void Add(Instrument instrument, Bar bar)
		{
			SmartQuant.Instruments.Instrument instrument2 = Map.OQ_SQ_Instrument[instrument] as SmartQuant.Instruments.Instrument;
			if (bar.bar.BarType == SmartQuant.Data.BarType.Time && bar.bar.Size == 86400L)
			{
				Daily daily = new Daily(bar.bar.DateTime, bar.bar.Open, bar.bar.High, bar.bar.Low, bar.bar.Close, bar.bar.Volume, bar.bar.OpenInt);
				SmartQuant.Instruments.DataManager.Add(instrument2, daily);
				return;
			}
			SmartQuant.Instruments.DataManager.Add(instrument2, bar.bar);
		}
        public string Get(string adress)
        {
            AdressInfoWsResponce adressInfoWsResponce = new AdressInfoWsResponce();
            DateTime             startTime            = DateTime.Now;

            try
            {
                SummaryData summaryDataCache = new SummaryData();


                bool isExist    = false;
                var  field      = typeof(MemoryCache).GetProperty("EntriesCollection", BindingFlags.NonPublic | BindingFlags.Instance);
                var  collection = field.GetValue(memoryCache) as ICollection;
                if (collection.Count <= 50)
                {
                    isExist = memoryCache.TryGetValue(adress, out summaryDataCache);
                }

                if (isExist)
                {
                    adressInfoWsResponce.SummaryData  = summaryDataCache;
                    adressInfoWsResponce.BaseResponse = new BaseResponse {
                        ErorInfo = ErorCode.Success, MessageInfo = "Succes Process"
                    };
                    return(JsonConvert.SerializeObject(adressInfoWsResponce));
                }

                using (var db = new SQLiteDBContext())
                {
                    var process = db.WsProcessInfo
                                  .Where(t => t.ProcessDate > DateTime.Now.AddHours(-DateTime.Now.Hour))
                                  .Where(t => t.ProcessDate <= DateTime.Now.AddHours(24 - DateTime.Now.Hour))
                                  .Where(t => t.AdressName == adress).OrderByDescending(t => t.Id);

                    if (process.Count() > 0)
                    {
                        WsProcessInfo wsProcessInfoDb = process.FirstOrDefault();

                        var query = db.SummaryData
                                    .Where(t => t.ProcessId == wsProcessInfoDb.Id);

                        if (query.Count() > 0)
                        {
                            adressInfoWsResponce.SummaryData  = query.FirstOrDefault();
                            adressInfoWsResponce.BaseResponse = new BaseResponse {
                                ErorInfo = ErorCode.Success, MessageInfo = "Succes Process"
                            };
                            return(JsonConvert.SerializeObject(adressInfoWsResponce));
                        }
                    }
                }


                List <AdressInfo> adressInfos;
                string            locationIqToken = _configuration.GetSection("WheaderRequestConfig").GetSection("LocationIqToken").Value;
                string            darkSkyKey      = _configuration.GetSection("WheaderRequestConfig").GetSection("DarkSkyKey").Value;

                WsProcessInfo wsProcessInfo = new WsProcessInfo
                {
                    ProcessDate = DateTime.Now,
                    ProcessName = "GetAdressInfoTempruter",
                    AdressName  = adress
                };
                using (var db = new SQLiteDBContext())
                {
                    db.WsProcessInfo.Add(
                        wsProcessInfo
                        );
                    db.SaveChanges();
                }

                var url           = "https://eu1.locationiq.com/v1/search.php?key=" + locationIqToken + "&q= " + adress + " &format=json";
                var currencyRates = Common.DownloadSerializedJsonData <List <AdressInfo> >(url);


                adressInfos = currencyRates;

                if (adressInfos.Count == 0)
                {
                    adressInfoWsResponce.BaseResponse = new BaseResponse {
                        ErorInfo = ErorCode.Error, MessageInfo = "Error Process!. Detail : " + "Location Data Not Found!"
                    };
                    return(JsonConvert.SerializeObject(adressInfoWsResponce));
                }
                AdressInfo adressInfo = adressInfos[0];
                adressInfo.RequestInfoId = wsProcessInfo.Id;

                var urlSky        = "https://api.darksky.net/forecast/" + darkSkyKey + "/" + adressInfo.Lat + "," + adressInfo.Lon;
                var wheaderWsInfo = Common.DownloadSerializedJsonData <WheaderWsInfo>(urlSky);

                if (wheaderWsInfo == null)
                {
                    adressInfoWsResponce.BaseResponse = new BaseResponse {
                        ErorInfo = ErorCode.Error, MessageInfo = "Error Process!. Detail : " + "Temperature Data Not Found!"
                    };
                    return(JsonConvert.SerializeObject(adressInfoWsResponce));
                }

                Datum datum = wheaderWsInfo.Daily.Data[0]; //currentDate
                Daily daily = wheaderWsInfo.Daily;         //weekly


                SummaryData summaryData = new SummaryData();
                summaryData.DayDate              = DateTime.Now;
                summaryData.ProcessId            = wsProcessInfo.Id;
                summaryData.PlaceName            = adressInfo.DisplayName;
                summaryData.PlaceId              = adressInfo.PlaceId;
                summaryData.DailyMinTemperature  = datum.TemperatureMin.ToString();
                summaryData.DailyMaxTemperature  = datum.TemperatureMax.ToString();
                summaryData.WeeklyMinTemperature = Common.WeeklyMinTempruter(daily.Data).ToString();
                summaryData.WeeklyMaxTemperature = Common.WeeklyMaxTempruter(daily.Data).ToString();
                summaryData.Lat         = wheaderWsInfo.Latitude.ToString();
                summaryData.Lon         = wheaderWsInfo.Longitude.ToString();
                summaryData.Temperature = wheaderWsInfo.Currently.Temperature.ToString();
                using (var db = new SQLiteDBContext())
                {
                    db.SummaryData.Add(summaryData);
                    db.SaveChanges();
                }

                if (!isExist && collection.Count < 50)
                {
                    var cacheEntryOptions = new MemoryCacheEntryOptions()
                                            .SetSlidingExpiration(TimeSpan.FromSeconds(30));
                    memoryCache.Set(adress, summaryData, cacheEntryOptions);


                    DateTime finishTime = DateTime.Now;
                    TimeSpan resultSpan = finishTime - startTime;

                    NewRequestData newRequestData = new NewRequestData();

                    newRequestData.SummaryData = summaryData;
                    newRequestData.PastTime    = resultSpan.TotalSeconds;
                    newRequestData.Input       = adress;
                    _eventHub.Clients.All.SendAsync("SendNoticeEventToClient",
                                                    JsonConvert.SerializeObject(newRequestData));
                }
                adressInfoWsResponce.SummaryData  = summaryData;
                adressInfoWsResponce.BaseResponse = new BaseResponse {
                    ErorInfo = ErorCode.Success, MessageInfo = "Succes Process"
                };
            }
            catch (Exception ex)
            {
                adressInfoWsResponce.BaseResponse = new BaseResponse {
                    ErorInfo = ErorCode.Error, MessageInfo = "Error Process!. Detail " + ex.Message
                };
            }

            return(JsonConvert.SerializeObject(adressInfoWsResponce));
        }
 protected void ButtonSearch_Click(object sender, EventArgs e)
 {
     GridViewResult.DataSource = Daily.GetDailyListByFilter("%" + TextBoxSearch.Text + "%");
     GridViewResult.DataBind();
 }
        public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {
            if (type == typeof(Demographic <Gender>))
            {
                var obj = new Demographic <Gender>();
                if (dictionary.ContainsKey("data"))
                {
                    obj.Data = serializer.ConvertToType <List <DemographicData <Gender> > >(dictionary["data"]);
                }

                return(obj);
            }
            else if (type == typeof(Demographic <Country>))
            {
                var obj = new Demographic <Country>();
                if (dictionary.ContainsKey("data"))
                {
                    obj.Data = serializer.ConvertToType <List <DemographicData <Country> > >(dictionary["data"]);
                }

                return(obj);
            }
            else if (type == typeof(Demographic <Locale>))
            {
                var obj = new Demographic <Locale>();
                if (dictionary.ContainsKey("data"))
                {
                    obj.Data = serializer.ConvertToType <List <DemographicData <Locale> > >(dictionary["data"]);
                }

                return(obj);
            }
            else if (type == typeof(DemographicData <Gender>))
            {
                var obj = new DemographicData <Gender>();
                if (dictionary.ContainsKey("id"))
                {
                    obj.id = serializer.ConvertToType <string>(dictionary["id"]);
                }

                if (dictionary.ContainsKey("name"))
                {
                    obj.Name = serializer.ConvertToType <string>(dictionary["name"]);
                }

                if (dictionary.ContainsKey("values"))
                {
                    obj.Days = serializer.ConvertToType <List <Daily <Gender> > >(dictionary["values"]);
                }

                return(obj);
            }
            else if (type == typeof(DemographicData <Country>))
            {
                var obj = new DemographicData <Country>();
                if (dictionary.ContainsKey("id"))
                {
                    obj.id = serializer.ConvertToType <string>(dictionary["id"]);
                }

                if (dictionary.ContainsKey("name"))
                {
                    obj.Name = serializer.ConvertToType <string>(dictionary["name"]);
                }

                if (dictionary.ContainsKey("values"))
                {
                    obj.Days = serializer.ConvertToType <List <Daily <Country> > >(dictionary["values"]);
                }

                return(obj);
            }
            else if (type == typeof(DemographicData <Locale>))
            {
                var obj = new DemographicData <Locale>();
                if (dictionary.ContainsKey("id"))
                {
                    obj.id = serializer.ConvertToType <string>(dictionary["id"]);
                }

                if (dictionary.ContainsKey("name"))
                {
                    obj.Name = serializer.ConvertToType <string>(dictionary["name"]);
                }

                if (dictionary.ContainsKey("values"))
                {
                    obj.Days = serializer.ConvertToType <List <Daily <Locale> > >(dictionary["values"]);
                }

                return(obj);
            }
            else if (type == typeof(Daily <Gender>))
            {
                var obj = new Daily <Gender>();
                if (dictionary.ContainsKey("end_time"))
                {
                    obj.End_Time = serializer.ConvertToType <string>(dictionary["end_time"]);
                }

                if (dictionary.ContainsKey("value"))
                {
                    obj.Gender = serializer.ConvertToType <Gender>(dictionary["value"]);
                }

                return(obj);
            }
            else if (type == typeof(Daily <Country>))
            {
                var obj = new Daily <Country>();
                if (dictionary.ContainsKey("end_time"))
                {
                    obj.End_Time = serializer.ConvertToType <string>(dictionary["end_time"]);
                }

                if (dictionary.ContainsKey("value"))
                {
                    obj.Country = serializer.ConvertToType <Country>(dictionary["value"]);
                }

                return(obj);
            }
            else if (type == typeof(Daily <Locale>))
            {
                var obj = new Daily <Locale>();
                if (dictionary.ContainsKey("end_time"))
                {
                    obj.End_Time = serializer.ConvertToType <string>(dictionary["end_time"]);
                }

                if (dictionary.ContainsKey("value"))
                {
                    obj.Locale = serializer.ConvertToType <Locale>(dictionary["value"]);
                }

                return(obj);
            }
            else if (type == typeof(Gender))
            {
                var obj = new Gender();

                obj.M_25to34 = SetValue(serializer, dictionary, "M.25-34");
                obj.M_18to24 = SetValue(serializer, dictionary, "M.18-24");
                obj.M_45to54 = SetValue(serializer, dictionary, "M.45-54");
                obj.F_25to34 = SetValue(serializer, dictionary, "F.25-34");
                obj.F_35to44 = SetValue(serializer, dictionary, "F.35-44");
                obj.F_45to54 = SetValue(serializer, dictionary, "F.45-54");
                obj.F_18to24 = SetValue(serializer, dictionary, "F.18-24");
                obj.M_55to64 = SetValue(serializer, dictionary, "M.55-64");
                obj.M_13to17 = SetValue(serializer, dictionary, "M.13-17");
                obj.F_55to64 = SetValue(serializer, dictionary, "F.55-64");
                obj.M_65to   = SetValue(serializer, dictionary, "M.65+");
                obj.F_13to17 = SetValue(serializer, dictionary, "F.13-17");
                obj.F_65to   = SetValue(serializer, dictionary, "F.65+");
                obj.U_25to34 = SetValue(serializer, dictionary, "U.25-34");
                obj.U_35to44 = SetValue(serializer, dictionary, "U.35-44");
                obj.U_45to54 = SetValue(serializer, dictionary, "U.45-54");
                obj.U_18to24 = SetValue(serializer, dictionary, "U.18-24");
                obj.U_55to64 = SetValue(serializer, dictionary, "U.55-64");
                obj.U_65to   = SetValue(serializer, dictionary, "U.65to+");

                return(obj);
            }

            return(null);
        }
Beispiel #34
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);
    }
        private void OnRspHistoryQuot(IntPtr pQuotApi, IntPtr pBuffer, ref STKHISDATA pHisData)
        {
            ehlog.Info("<--OnRspHistoryQuot:{0},{1},{2},{3}条", pHisData.Market, pHisData.Code, (PeriodType)pHisData.nPeriod, pHisData.nCount);
            string key = GetKeyFromSTKHISDATA(ref pHisData);
            DataRecord dr;
            if (historicalDataRecords_key.TryGetValue(key, out dr))
            {
                HistoricalDataRequest request = dr.request;

                IntPtr ptrHead = (IntPtr)(pBuffer + Marshal.SizeOf(typeof(STKHISDATA)));
                for (int i = 0; i < pHisData.nCount; ++i)
                {
                    IntPtr ptr = (IntPtr)(ptrHead + Marshal.SizeOf(typeof(HISTORYDATA)) * i);
                    HISTORYDATA hd = (HISTORYDATA)Marshal.PtrToStructure(ptr, typeof(HISTORYDATA));

                    if (request.DataType == HistoricalDataType.Daily)
                    {
                        DateTime datetime = Convert.ToDateTime(hd.time.Substring(0, 10));

                        if (!EnableDateFilter||(datetime >= request.BeginDate && datetime < request.EndDate))
                        {
                            Daily daily = new Daily(datetime,
                                                            hd.fOpen, hd.fHigh, hd.fLow, hd.fClose, (long)hd.fVolume, (long)hd.fAmount);
                            NewHistoricalBar(this,
                                new HistoricalBarEventArgs(daily, request.RequestId, request.Instrument, this, -1));
                        }
                    }
                    else
                    {
                        DateTime datetime = Convert.ToDateTime(hd.time);
                        if (!EnableDateFilter || (datetime >= request.BeginDate && datetime < request.EndDate))
                        {
                            Bar bar = new Bar(BarType.Time, request.BarSize, datetime.AddSeconds(-request.BarSize), datetime,
                                hd.fOpen, hd.fHigh, hd.fLow, hd.fClose, (long)hd.fVolume, (long)hd.fAmount);
                            NewHistoricalBar(this,
                                new HistoricalBarEventArgs(bar, request.RequestId, request.Instrument, this, -1));
                        }
                    }
                }

                RemoveRequest(key);
            }
        }