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); } } } }
/*定时器执行更新报价*/ 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()); } }
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(); }
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; } }
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(); }
public void Add(Daily daily) { DataManager.Add(this, daily); }
public DailyWeatherSummaryViewModel(Daily daily) { _dailyWeatherInformation = daily; }
public bool DeleteDailyWeather(Daily daily) { _db.Remove(daily); return(Save()); }
public IHttpActionResult Post([FromBody] Daily value) { return(Json(new DailyDataAccessController().Select(value))); }
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); } }
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); } } }
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); } }
/// <inheritdoc /> public ValueTask UpdateDailyAsync(Daily daily) => dailyRepository.EditAsync(daily);
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; } ; }
public Economy(Daily Daily, MoneyTransfer MoneyTransfer, UserAccounts UserAccounts) { _DailyReward = Daily; _MoneyTransfer = MoneyTransfer; _UserAccounts = UserAccounts; }
public void Auto_Create_JobCost() { C2.Daily d = new Daily(); d.auto_insert_job_cost(); }
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); }
/// <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; }
public static void Add(Instrument instrument, Daily daily) { DataManager.Add(instrument, SUFFIX_DAILY, daily); }
/// <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); } }
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(); } }
public void addDaily(Daily daily) { dailies.Add(daily); }
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); } }
/// <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); }
private void Awake() { manage = this; }
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); }
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); } }