public static IMarketData Compose(List <IMarketData> source, MarketDataGrade grade) { if (source.Count == 0) { return(null); } var m = new MarketData(); var s = source.OrderBy(v => v.Time); m.Open = s.FirstOrDefault().Open; m.High = s.FirstOrDefault().High; m.Low = s.FirstOrDefault().Low; m.Close = s.LastOrDefault().Close; m.Time = s.LastOrDefault().Time; foreach (var v in s) { if (m.High < v.High) { m.High = v.High; } if (m.Low > v.Low) { m.Low = v.Low; } m.Shares += v.Shares; m.Volume += v.Volume; } m.InstrumentTicker = source.FirstOrDefault().InstrumentTicker; m.Grade = grade; return(m); }
ISignal IsLongArrange(IInstrument instrument, DateTime start, DateTime end, MarketDataGrade grade) { var ml = GetMarketData(instrument, start, end, grade); if (ml.Count < 10) { return(null); } if (ml.Count < 20) { return(IsLongArrange(ml, 5, 10)); } if (ml.Count < 30) { var t1 = IsLongArrange(ml, 5, 10); var t2 = IsLongArrange(ml, 10, 20); if (t1 != null && t2 != null) { if (t1.Value > t2.Value) { return(t1); } } return(null); } { var t1 = IsLongArrange(ml, 5, 10); var t2 = IsLongArrange(ml, 10, 20); var t3 = IsLongArrange(ml, 20, 30); if (t1 != null && t2 != null && t3 != null)//return max distance { if (t1.Value > t2.Value) { if (t1.Value > t3.Value) { return(t1); } else { return(t3); } } else { if (t2.Value > t3.Value) { return(t2); } else { return(t3); } } //var t = new List<TimeValueObject>() { t1, t2, t3 }.OrderBy(v=>v.DoubleValue); //return t.LastOrDefault(); } return(null); } }
ISignal IsCross(IInstrument instrument, DateTime start, DateTime end, MarketDataGrade grade) { var ml = GetMarketData(instrument, start, end, grade); if (ml.Count > BaseUnit) { return(IsCross(ml)); } return(null); }
public static List <DateTime> FindTimeStep(List <IMarketData> source, MarketDataGrade grade) { var tl = new List <DateTime>(); var st = source.Min(v => v.Time); var et = source.Max(v => v.Time); tl.Add(st - TimeSpan.FromDays(1)); if (grade == MarketDataGrade.Year) { for (int i = st.Year; i <= et.Year; i++) { tl.Add(new DateTime(i, 1, 1)); } } if (grade == MarketDataGrade.HalfYear) { for (int i = st.Year; i <= et.Year; i++) { tl.Add(new DateTime(i, 1, 1)); tl.Add(new DateTime(i, 7, 1)); } } if (grade == MarketDataGrade.Season) { for (int i = st.Year; i <= et.Year; i++) { tl.Add(new DateTime(i, 1, 1)); tl.Add(new DateTime(i, 4, 1)); tl.Add(new DateTime(i, 7, 1)); tl.Add(new DateTime(i, 10, 1)); } } if (grade == MarketDataGrade.Month) { for (int i = st.Year; i <= et.Year; i++) { tl.Add(new DateTime(i, 1, 1)); tl.Add(new DateTime(i, 2, 1)); tl.Add(new DateTime(i, 3, 1)); tl.Add(new DateTime(i, 4, 1)); tl.Add(new DateTime(i, 5, 1)); tl.Add(new DateTime(i, 6, 1)); tl.Add(new DateTime(i, 7, 1)); tl.Add(new DateTime(i, 8, 1)); tl.Add(new DateTime(i, 9, 1)); tl.Add(new DateTime(i, 10, 1)); tl.Add(new DateTime(i, 11, 1)); tl.Add(new DateTime(i, 12, 1)); } } if (grade == MarketDataGrade.HalfMonth) { var start = CommonLib.CommonProc.GetWeekMonday(st); for (var i = start; i <= et + TimeSpan.FromDays(20); i = i + TimeSpan.FromDays(14)) { tl.Add(new DateTime(i.Value.Year, i.Value.Month, i.Value.Day)); } } if (grade == MarketDataGrade.Week) { var start = CommonLib.CommonProc.GetWeekMonday(st); for (var i = start; i <= et + TimeSpan.FromDays(8); i = i + TimeSpan.FromDays(7)) { tl.Add(new DateTime(i.Value.Year, i.Value.Month, i.Value.Day)); } } if (grade == MarketDataGrade.ThreeDays) { for (var i = st.Date; i <= et + TimeSpan.FromDays(3); i = i + TimeSpan.FromDays(3)) { tl.Add(new DateTime(i.Year, i.Month, i.Day)); } } if (grade == MarketDataGrade.Day) { for (var i = st.Date; i <= et + TimeSpan.FromDays(1); i = i + TimeSpan.FromDays(1)) { tl.Add(new DateTime(i.Year, i.Month, i.Day)); } } if (grade == MarketDataGrade.HalfDay) { for (var i = st.Date; i <= et + TimeSpan.FromDays(1); i = i + TimeSpan.FromDays(1)) { tl.Add(new DateTime(i.Year, i.Month, i.Day)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 12, 0, 0)); } } if (grade == MarketDataGrade.Hour) { for (var i = st.Date; i <= et + TimeSpan.FromDays(1); i = i + TimeSpan.FromDays(1)) { //tl.Add(new DateTime(i.Year, i.Month, i.Day)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 10, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 11, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 14, 0, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 15, 0, 0)); } } if (grade == MarketDataGrade.HalfHour) { for (var i = st.Date; i <= et + TimeSpan.FromDays(1); i = i + TimeSpan.FromDays(1)) { //tl.Add(new DateTime(i.Year, i.Month, i.Day)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 10, 0, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 10, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 11, 0, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 11, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 13, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 14, 0, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 14, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 15, 0, 0)); } } if (grade == MarketDataGrade.FifteenMinutes) { for (var i = st.Date; i <= et + TimeSpan.FromDays(1); i = i + TimeSpan.FromDays(1)) { //tl.Add(new DateTime(i.Year, i.Month, i.Day)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 9, 45, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 10, 0, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 10, 15, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 10, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 10, 45, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 11, 0, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 11, 15, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 11, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 13, 15, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 13, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 13, 45, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 14, 0, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 14, 15, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 14, 30, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 14, 45, 0)); tl.Add(new DateTime(i.Year, i.Month, i.Day, 15, 0, 0)); } } return(tl); }
public static List <IMarketData> SummaryMarketDataList(List <IMarketData> source, MarketDataGrade grade) { if (source.Count == 0) { return(source); } var fm = source.FirstOrDefault(); if (grade == fm.Grade) { return(source); } if (grade < fm.Grade) { throw new Exception("Con not summary market data from " + fm.Grade.ToString() + " to " + grade.ToString()); } var tl = FindTimeStep(source, grade); var l = new List <IMarketData>(); for (int i = 0; i < tl.Count - 1; i++) { if (source.Any(v => v.Time > tl[i] && v.Time <= tl[i + 1])) { var m = Compose(source.Where(v => v.Time > tl[i] && v.Time <= tl[i + 1]).ToList(), grade); l.Add(m); } } return(l); }
public static DateTime GetNextTime(DateTime time, MarketDataGrade grade) { if (grade == MarketDataGrade.Year) { return(new DateTime(time.Year + 1, 1, 1)); } if (grade == MarketDataGrade.HalfYear) { if (time.Month < 7) { return(new DateTime(time.Year, 7, 1)); } return(new DateTime(time.Year + 1, 1, 1)); } if (grade == MarketDataGrade.Season) { if (time.Month < 4) { return(new DateTime(time.Year, 4, 1)); } if (time.Month < 7) { return(new DateTime(time.Year, 7, 1)); } if (time.Month < 10) { return(new DateTime(time.Year, 10, 1)); } return(new DateTime(time.Year + 1, 1, 1)); } if (grade == MarketDataGrade.Month) { if (time.Month < 12) { return(new DateTime(time.Year, time.Month + 1, 1)); } return(new DateTime(time.Year + 1, 1, 1)); } if (grade == MarketDataGrade.HalfMonth) { if (time.Day < 16) { return(new DateTime(time.Year, time.Month, 16)); } if (time.Month < 12) { return(new DateTime(time.Year, time.Month + 1, 1)); } return(new DateTime(time.Year + 1, 1, 1)); } if (grade == MarketDataGrade.Week) { if (time.DayOfWeek == DayOfWeek.Monday) { return(new DateTime(time.Year, time.Month, time.Day) + TimeSpan.FromDays(7)); } if (time.DayOfWeek == DayOfWeek.Tuesday) { return(new DateTime(time.Year, time.Month, time.Day) + TimeSpan.FromDays(6)); } if (time.DayOfWeek == DayOfWeek.Wednesday) { return(new DateTime(time.Year, time.Month, time.Day) + TimeSpan.FromDays(5)); } if (time.DayOfWeek == DayOfWeek.Thursday) { return(new DateTime(time.Year, time.Month, time.Day) + TimeSpan.FromDays(4)); } if (time.DayOfWeek == DayOfWeek.Friday) { return(new DateTime(time.Year, time.Month, time.Day) + TimeSpan.FromDays(3)); } if (time.DayOfWeek == DayOfWeek.Saturday) { return(new DateTime(time.Year, time.Month, time.Day) + TimeSpan.FromDays(2)); } if (time.DayOfWeek == DayOfWeek.Sunday) { return(new DateTime(time.Year, time.Month, time.Day) + TimeSpan.FromDays(1)); } } if (grade == MarketDataGrade.ThreeDays) { return(new DateTime(time.Year, time.Month, time.Day) + TimeSpan.FromDays(3)); } if (grade == MarketDataGrade.Day) { return(new DateTime(time.Year, time.Month, time.Day) + TimeSpan.FromDays(1)); } if (grade == MarketDataGrade.HalfDay) { if (time.Hour < 12) { return(new DateTime(time.Year, time.Month, time.Day, 12, 0, 0)); } var temp = time + TimeSpan.FromDays(1); return(new DateTime(temp.Year, temp.Month, temp.Day)); } if (grade == MarketDataGrade.Hour) { if (time.Hour <= 10 && time.Minute <= 30) { return(new DateTime(time.Year, time.Month, time.Day, 10, 31, 0)); } if (time.Hour < 12) { return(new DateTime(time.Year, time.Month, time.Day, 12, 0, 0)); } if (time.Hour < 14) { return(new DateTime(time.Year, time.Month, time.Day, 14, 1, 0)); } var temp = time + TimeSpan.FromDays(1); return(new DateTime(temp.Year, temp.Month, temp.Day)); } if (grade == MarketDataGrade.HalfHour) { if (time.Hour < 10 || (time.Hour == 10 && time.Minute == 0)) { return(new DateTime(time.Year, time.Month, time.Day, 10, 1, 0)); } if (time.Hour == 10 && time.Minute <= 30) { return(new DateTime(time.Year, time.Month, time.Day, 10, 31, 0)); } if (time.Hour < 11 || (time.Hour == 11 && time.Minute == 0)) { return(new DateTime(time.Year, time.Month, time.Day, 11, 1, 0)); } if (time.Hour == 11 && time.Minute <= 30) { return(new DateTime(time.Year, time.Month, time.Day, 11, 31, 0)); } if (time.Hour == 13 && time.Minute <= 30) { return(new DateTime(time.Year, time.Month, time.Day, 13, 31, 0)); } if (time.Hour < 14 || (time.Hour == 14 && time.Minute == 0)) { return(new DateTime(time.Year, time.Month, time.Day, 14, 1, 0)); } if (time.Hour == 14 && time.Minute <= 30) { return(new DateTime(time.Year, time.Month, time.Day, 14, 31, 0)); } var temp = time + TimeSpan.FromDays(1); return(new DateTime(temp.Year, temp.Month, temp.Day)); } if (grade == MarketDataGrade.FifteenMinutes) { if (time.Hour == 9 && time.Minute <= 45) { return(new DateTime(time.Year, time.Month, time.Day, 9, 46, 0)); } if (time.Hour < 10 || (time.Hour == 10 && time.Minute == 0)) { return(new DateTime(time.Year, time.Month, time.Day, 10, 1, 0)); } if (time.Hour == 10 && time.Minute <= 15) { return(new DateTime(time.Year, time.Month, time.Day, 10, 16, 0)); } if (time.Hour == 10 && time.Minute <= 30) { return(new DateTime(time.Year, time.Month, time.Day, 10, 31, 0)); } if (time.Hour == 10 && time.Minute <= 45) { return(new DateTime(time.Year, time.Month, time.Day, 10, 46, 0)); } if (time.Hour < 11 || (time.Hour == 11 && time.Minute == 0)) { return(new DateTime(time.Year, time.Month, time.Day, 11, 1, 0)); } if (time.Hour == 11 && time.Minute <= 15) { return(new DateTime(time.Year, time.Month, time.Day, 11, 16, 0)); } if (time.Hour == 11 && time.Minute <= 30) { return(new DateTime(time.Year, time.Month, time.Day, 11, 31, 0)); } if (time.Hour == 13 && time.Minute <= 15) { return(new DateTime(time.Year, time.Month, time.Day, 13, 16, 0)); } if (time.Hour == 13 && time.Minute <= 30) { return(new DateTime(time.Year, time.Month, time.Day, 13, 31, 0)); } if (time.Hour == 13 && time.Minute <= 45) { return(new DateTime(time.Year, time.Month, time.Day, 13, 46, 0)); } if (time.Hour < 14 || (time.Hour == 14 && time.Minute == 0)) { return(new DateTime(time.Year, time.Month, time.Day, 14, 1, 0)); } if (time.Hour == 14 && time.Minute <= 15) { return(new DateTime(time.Year, time.Month, time.Day, 14, 16, 0)); } if (time.Hour == 14 && time.Minute <= 30) { return(new DateTime(time.Year, time.Month, time.Day, 14, 31, 0)); } if (time.Hour == 14 && time.Minute <= 45) { return(new DateTime(time.Year, time.Month, time.Day, 14, 46, 0)); } var temp = time + TimeSpan.FromDays(1); return(new DateTime(temp.Year, temp.Month, temp.Day)); } var minmode = time.Minute % 5; var t = time + TimeSpan.FromMinutes(5) - TimeSpan.FromMinutes(minmode); return(new DateTime(t.Year, t.Month, t.Day, t.Hour, t.Minute, 0)); }
public virtual List <IMarketData> GetDataList(List <IInstrument> instrumentList, DateTime startTime, DateTime endTime, MarketDataGrade grade) { var ml = new List <IMarketData>(); try { instrumentList.ForEach(v => { ml.AddRange(GetDataList(v, startTime, endTime, grade)); }); } catch (Exception ex) { LogSupport.Error(ex); } return(ml); }
public virtual IMarketData GetFirstData(IInstrument instrument, DateTime startTime, DateTime endTime, MarketDataGrade grade) { var ml = GetDataList(instrument, startTime, endTime, grade); if (ml.Count == 0) { return(null); } return(ml.OrderBy(v => v.Time).FirstOrDefault()); }
public void PrepareCache(IInstrument instrument, DateTime startTime, DateTime endTime, MarketDataGrade grade) { var cl = Cache.FirstOrDefault(v => v.Ticker == instrument.Ticker && v.StartTime <= startTime && v.EndTime >= endTime); if (cl != null) { return; } else { if (Cache.Count >= CacheSize) { Cache.RemoveAt(0); } var start = startTime; var end = endTime; if (CacheStartTime != null) { start = CacheStartTime.Value; } if (CacheEndTime != null) { end = CacheEndTime.Value; } var l = GetSourceDataList(instrument, start, end); Cache.Add(new MarketDataCacke() { DataList = l, StartTime = start, EndTime = end, Ticker = instrument.Ticker }); } }
public List <IMarketData> GetDataList(IInstrument instrument, DateTime startTime, DateTime endTime, MarketDataGrade grade) { var cl = Cache.FirstOrDefault(v => v.Ticker == instrument.Ticker && v.StartTime <= startTime && v.EndTime >= endTime); if (cl != null) { return(MarketData.SummaryMarketDataList(cl.DataList.Where(v => v.Time > startTime && v.Time <= endTime).ToList(), grade)); } else { if (Cache.Count >= CacheSize) { Cache.RemoveAt(0); } var start = startTime; var end = endTime; if (CacheStartTime != null) { start = CacheStartTime.Value; } if (CacheEndTime != null) { end = CacheEndTime.Value; } var l = GetSourceDataList(instrument, start, end); Cache.Add(new MarketDataCacke() { DataList = l, StartTime = start, EndTime = end, Ticker = instrument.Ticker }); return(MarketData.SummaryMarketDataList(l.Where(v => v.Time > startTime && v.Time <= endTime).ToList(), grade)); } }
public List <IMarketData> GetMarketData(IInstrument instrument, DateTime start, DateTime end, MarketDataGrade grade) { if (AnalyseDataSource != null) { return(AnalyseDataSource.GetDataList(instrument, start, end, grade)); } return(null); }
public override IMarketData GetFirstData(IInstrument instrument, DateTime startTime, DateTime endTime, MarketDataGrade grade) { if (instrument == null || string.IsNullOrEmpty(instrument.Ticker)) { return(null); } if (grade == MarketDataGrade.FiveMinutes) { try { string sqlconnection = "Data Source=LYNX-NOTEBOOK\\SQLEXPRESS;Initial Catalog=MarketData;Integrated Security=True"; var connection = new SqlConnection(sqlconnection); var cs = ConfigurationManager.ConnectionStrings["MarketDataConnectionString"].ConnectionString; var sql = "select top 1 * from Table_TradePrice where Time >'" + startTime.ToString() + "' and Time<='" + endTime.ToString() + "' and Ticker='" + instrument.Ticker + "' order by Time"; connection.Open(); var t = connection.Query(sql); connection.Close(); var v = t.FirstOrDefault(); if (v != null) { var md = new MarketData(); md.Time = v.Time; md.InstrumentTicker = instrument.Ticker; md.Low = v.Low; md.Open = v.Open; md.High = v.High; md.Close = v.Close; md.Volume = v.Volume; md.Shares = v.Shares; md.Grade = MarketDataGrade.FiveMinutes; return(md); } return(null); } catch (Exception e) { LogSupport.Error(e); throw e; } } return(base.GetFirstData(instrument, startTime, endTime, grade)); }