public static bool IsMarketOpen(int marketId) { bool result = true; DateTime time = MarketService.GetMarketCurrentLocalTime(marketId); if (time.DayOfWeek == DayOfWeek.Saturday || time.DayOfWeek == DayOfWeek.Sunday) { return(false); } using (ctaDBEntities entities = new ctaDBEntities()) { entities.Database.Connection.Open(); var isHoliday = entities.Holidays.Where(h => h.market_id == marketId && h.date.Year == time.Year && h.date.Month == time.Month && h.date.Day == time.Day); if (isHoliday.Count() > 0) { result = false; } else { string workHours = entities.Markets.Where(m => m.Id == marketId).Select(m => m.work_hours).FirstOrDefault(); if (workHours != null) { int startHour = int.Parse(workHours.Split(';')[0].Split(':')[0]); int startMinutes = int.Parse(workHours.Split(';')[0].Split(':')[1]); int closeHour = int.Parse(workHours.Split(';')[1].Split(':')[0]); int closeMinutes = int.Parse(workHours.Split(';')[1].Split(':')[1]); if (time.Hour < startHour) { result = false; } else if (time.Hour == startHour && time.Minute < startMinutes) { result = false; } else if (time.Hour > closeHour) { result = false; } else if (time.Hour == closeHour && time.Minute > closeMinutes) { result = false; } } } entities.Database.Connection.Close(); } return(result); }
public static List <MarketSyncInfo> GetMarketsSyncTimeInfo() { List <MarketSyncInfo> result = new List <MarketSyncInfo>(); List <string> markets = MarketService.GetMarkets().Select(m => m.name).ToList(); using (ctaDBEntities entities = new ctaDBEntities()) { Config cfg; string lastSync = ""; string nextSync = ""; foreach (string marketName in markets) { cfg = entities.Configs.Where(c => c.ConfigName == marketName + "_LastSync").FirstOrDefault(); if (cfg != null) { lastSync = cfg.ConfigValue; } cfg = entities.Configs.Where(c => c.ConfigName == marketName + "_NextSync").FirstOrDefault(); if (cfg != null) { nextSync = cfg.ConfigValue; } result.Add(new MarketSyncInfo() { Market = marketName, LastSync = lastSync, NextSync = nextSync }); } //adding the report sync var reportConfig_LastSync = entities.Configs.Where(c => c.ConfigName == "ReportDATA_LastSync").FirstOrDefault(); var reportConfig_NextSync = entities.Configs.Where(c => c.ConfigName == "ReportDATA_NextSync").FirstOrDefault(); result.Add(new MarketSyncInfo() { Market = "ReportDATA", LastSync = reportConfig_LastSync.ConfigValue, NextSync = reportConfig_NextSync.ConfigValue }); } return(result); }
public static string ReadMarketIntradiaryData(string market_name, int market_id, int utc_time_offset, out bool error, params string[] otherParams) { error = false; DateTime date = DateTime.UtcNow.AddHours(utc_time_offset); string status = "O"; bool marketOpen = MarketService.IsMarketOpen(market_id, date, out status); if (marketOpen) { try { //switch (market_name) //{ // case "NYSE": // QuotesFromEOD quotesFromEODny = new QuotesFromEOD(); // quotesFromEODny.SaveQuotesToDB(market_name, market_id, utc_time_offset); // break; // case "NASDAQ": // QuotesFromEOD quotesFromEODna = new QuotesFromEOD(); // quotesFromEODna.SaveQuotesToDB(market_name, market_id, utc_time_offset); // break; // case "BCBA": // QuotesFromBOLSAR quotesFromBolsar = new QuotesFromBOLSAR(); // quotesFromBolsar.SaveQuotesToDB(market_name, market_id, utc_time_offset); // break; // default: // return "Quotes for other markets than NYSE, NASDAQ or BCBA are not implemented"; //} return("Quotes Updated"); } catch (Exception ex) { error = true; EmailSender.SendErrorUpdatingIntradiary("Message: " + ex.Message + Environment.NewLine + "Source: " + ex.Source + Environment.NewLine + "StackTrace: " + ex.StackTrace + Environment.NewLine + ((ex.InnerException != null) ? "Inner Message: " + ex.InnerException.Message + Environment.NewLine + "Inner Source: " + ex.InnerException.Source + Environment.NewLine + "Inner StackTrace: " + ex.InnerException.StackTrace : ""), market_name, date); return("Error Updating Intradiry: " + ex.Message); } } else { error = true; if (date.Hour == 5 && status == "C") { try { QuotesService.ClearIntradiaryDataByMarketID(market_name); //EmailSender.DeletingIntradiaryData("Intradiry Deleted", market_name, date); return("Market Close --> Intradiry Deleted"); } catch (Exception ex) { EmailSender.SendErrorClearIntradiaryData("Message: " + ex.Message + Environment.NewLine + "Source: " + ex.Source + Environment.NewLine + "StackTrace: " + ex.StackTrace + Environment.NewLine + ((ex.InnerException != null) ? "Inner Message: " + ex.InnerException.Message + Environment.NewLine + "Inner Source: " + ex.InnerException.Source + Environment.NewLine + "Inner StackTrace: " + ex.InnerException.StackTrace : ""), market_name, date); return("Error deleting Intradiry: " + ex.Message); } } else { //EmailSender.SendMarketCloseEmail(market_name, date, status); return("Market Close"); } } }
public static DateTime GetMarketCurrentLocalTime(string marketName) { int utcoffset = MarketService.GetMarkets().Where(m => m.name == marketName).First().utc_offset; return(DateTime.UtcNow.AddHours(utcoffset)); }