public void Should_return_valid_volume_ratio_time_range_for_three_months() { // Given var start = DateTime.UtcNow.ToEstTime().Date.AddMonths(-3 * 6); if (!start.IsTradingDay()) { start = start.GetPreviousTradingDay(); } var yesterday = DateTime.UtcNow.ToEstTime().Date.AddMonths(-3); if (!yesterday.IsTradingDay()) { yesterday = yesterday.GetPreviousTradingDay(); } var expectedTimeRange = new TimeRange(start, yesterday); // When var timeRange = MarketCalendar.CalculateDateRangeForVolumeRatio(DateRange.ThreeMonths); // Then timeRange.ShouldBe(expectedTimeRange); }
public void SingleStock_should_return_same_number_news_table_and_summary_info(DataTableDateRangeOptions dataTableDateRangeOptions) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); var repository = new Repository(); var summaryDataProvider = new SummaryDataProvider(repository); DataTableOptions stockTableOptions = new DataTableOptions { Filter = dataTableDateRangeOptions.Filter, Symbol = dataTableDateRangeOptions.Symbol, Take = dataTableDateRangeOptions.Take, Skip = dataTableDateRangeOptions.Skip, SortDescription = dataTableDateRangeOptions.SortDescription, StartTonDate = dataTableDateRangeOptions.StartTonDate, Providers = dataTableDateRangeOptions.Providers }; var range = DateRange.Today; var trr = MarketCalendar.CalculateTradingTimeRange(range, DateTime.Now, DateTime.Now); if (dataTableDateRangeOptions.StartDate != null && dataTableDateRangeOptions.EndDate != null) { trr = MarketCalendar.CalculateTradingTimeRange(range, dataTableDateRangeOptions.StartDate.Value, dataTableDateRangeOptions.EndDate.Value); } var stockPageSymbolFunc = new StockPageSymbolFunc(repository); var tableResult = stockPageSymbolFunc.GetNewsStreamingDataSource(stockTableOptions); var symbolSummaryData = summaryDataProvider.BuildCompanySection(stockTableOptions.Symbol, range, trr, dataTableDateRangeOptions.StartTonDate, dataTableDateRangeOptions.Providers); Assert.AreEqual(tableResult.Total, 10003); }
public void Should_return_valid_volume_ratio_time_range_for_week() { // Given var yesterday = DateTime.UtcNow.ToEstTime().Date.GetTradingDayBeforeDaysCount(5); if (!yesterday.IsTradingDay()) { yesterday = yesterday.GetPreviousTradingDay(); } var start = yesterday.GetTradingDayBeforeDaysCount(5 * 5); // 5 weeks if (!start.IsTradingDay()) { start = start.GetPreviousTradingDay(); } var expectedTimeRange = new TimeRange(start, yesterday); // When var timeRange = MarketCalendar.CalculateDateRangeForVolumeRatio(DateRange.Week); // Then timeRange.ShouldBe(expectedTimeRange); }
public void SingleStock_should_not_epty_data_in_summary_info(DataTableDateRangeOptions dataTableDateRangeOptions) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); var repository = new Repository(); var summaryDataProvider = new SummaryDataProvider(repository); const DateRange range = DateRange.Today; var trr = MarketCalendar.CalculateTradingTimeRange(range, DateTime.Now, DateTime.Now); if (dataTableDateRangeOptions.StartDate != null && dataTableDateRangeOptions.EndDate != null) { trr = MarketCalendar.CalculateTradingTimeRange(range, dataTableDateRangeOptions.StartDate.Value, dataTableDateRangeOptions.EndDate.Value); } var symbolSummaryData = summaryDataProvider.BuildCompanySection(dataTableDateRangeOptions.Symbol, range, trr, dataTableDateRangeOptions.StartTonDate, dataTableDateRangeOptions.Providers); Assert.That(symbolSummaryData.AllNewsCount, Is.Not.Null); Assert.That(symbolSummaryData.AskShares, Is.Not.Null); Assert.That(symbolSummaryData.AskSharesStr, Is.Not.Empty); Assert.That(symbolSummaryData.AskSize, Is.Not.Null); Assert.That(symbolSummaryData.AvgBidAskSize, Is.Not.Empty); Assert.That(symbolSummaryData.BidAskSpread, Is.Not.Null); Assert.That(symbolSummaryData.BidShares, Is.Not.Null); Assert.That(symbolSummaryData.BidSharesStr, Is.Not.Empty); Assert.That(symbolSummaryData.BidSize, Is.Not.Null); Assert.That(symbolSummaryData.BlockShares, Is.Not.Null); Assert.That(symbolSummaryData.BlockSharesStr, Is.Not.Empty); Assert.That(symbolSummaryData.Change, Is.Not.Null); Assert.That(symbolSummaryData.ChangeStr, Is.Not.Empty); Assert.That(symbolSummaryData.DowngradesCount, Is.Not.Null); Assert.That(symbolSummaryData.InitiatesCount, Is.Not.Null); Assert.That(symbolSummaryData.LastEarnings, Is.Not.Empty); Assert.That(symbolSummaryData.LastEarningsDate, Is.Not.Null); Assert.That(symbolSummaryData.LastEps, Is.Not.Null); Assert.That(symbolSummaryData.LastTod, Is.Not.Empty); Assert.That(symbolSummaryData.MoreOverCount, Is.Not.Null); Assert.That(symbolSummaryData.NewsWiresCount, Is.Not.Null); Assert.That(symbolSummaryData.NextEarnings, Is.Not.Empty); Assert.That(symbolSummaryData.NextEarningsDate, Is.Not.Null); Assert.That(symbolSummaryData.NextTod, Is.Not.Empty); Assert.That(symbolSummaryData.OddLot, Is.Not.Null); Assert.That(symbolSummaryData.OddLotStr, Is.Not.Empty); Assert.That(symbolSummaryData.OffExchange, Is.Not.Empty); Assert.That(symbolSummaryData.ReiteratesCount, Is.Not.Null); Assert.That(symbolSummaryData.SecEdgarFilingsCount, Is.Not.Null); Assert.That(symbolSummaryData.SectionType, Is.Not.Empty); Assert.That(symbolSummaryData.SharesAtAskBid, Is.Not.Empty); Assert.That(symbolSummaryData.SubPenny, Is.Not.Null); Assert.That(symbolSummaryData.SubPennyStr, Is.Not.Empty); Assert.That(symbolSummaryData.TotalShares, Is.Not.Null); Assert.That(symbolSummaryData.TotalSharesStr, Is.Not.Empty); Assert.That(symbolSummaryData.TotalTrades, Is.Not.Null); Assert.That(symbolSummaryData.TotalTradesStr, Is.Not.Empty); Assert.That(symbolSummaryData.UpgradesCount, Is.Not.Null); Assert.That(symbolSummaryData.Volatility, Is.Not.Null); Assert.That(symbolSummaryData.Volatility20, Is.Not.Null); Assert.That(symbolSummaryData.Volatility20Str, Is.Not.Empty); Assert.That(symbolSummaryData.VolatilityStr, Is.Not.Empty); Assert.That(symbolSummaryData.VolumeRatio, Is.Not.Null); Assert.That(symbolSummaryData.VolumeRatioStr, Is.Not.Empty); }
public void Should_return_valid_volume_ratio_time_range_for_custom_range_one_day_on_holiday() { // Given var start = DateTime.Parse("1/19/2015"); var end = DateTime.Parse("1/19/2015"); var expectedTimeRange = new TimeRange(DateTime.Parse("1/9/2015"), DateTime.Parse("1/15/2015")); // When var timeRange = MarketCalendar.CalculateVolumeRatioDateRange(DateRange.Range, start, end); // Then timeRange.ShouldBe(expectedTimeRange); }
public void Should_return_valid_volume_ratio_time_range_for_one_year() { // Given var start = DateTime.UtcNow.ToEstTime().Date.AddYears(-1 * 6); var yesterday = DateTime.UtcNow.ToEstTime().Date.AddYears(-1); var expectedTimeRange = new TimeRange(start, yesterday); // When var timeRange = MarketCalendar.CalculateDateRangeForVolumeRatio(DateRange.Year); // Then timeRange.ShouldBe(expectedTimeRange); }
public void Should_return_range_for_yesterday() { // Given var startDate = DateTime.UtcNow.ToEstTime().GetPreviousTradingDay().ChangeTime(16, 0, 0, 0); var endDate = DateTime.UtcNow.ToEstTime().GetPreviousTradingDay().EndOfDay(); var mainDateRange = new TimeRange(startDate.StartOfDay(), endDate); var alignedDateRange = new TimeRange(startDate.GetPreviousTradingDay(), endDate.EndOfDay()); var extendedDateRnage = new TimeRange(startDate.GetPreviousTradingDay().StartOfDay(), endDate); // When var dateRange = MarketCalendar.CalculateTradingTimeRange(DateRange.Yesterday); // Then dateRange.TimeRange.ShouldBe(mainDateRange); dateRange.AlignedTimeRange.ShouldBe(alignedDateRange); dateRange.ExtendedTimeRange.ShouldBe(extendedDateRnage); }
public void Should_return_range_for_today() { // Given var startDate = DateTime.UtcNow.ToEstTime().ChangeTime(16, 0, 0, 0); var endDate = startDate.EndOfDay(); TimeRange mainDateRange = new TimeRange(startDate.StartOfDay(), endDate); TimeRange alignedDateRange = new TimeRange(startDate.GetPreviousTradingDay(), endDate.EndOfDay()); TimeRange extendedDateRnage = new TimeRange(startDate.GetPreviousTradingDay().StartOfDay(), endDate); // When var dateRange = MarketCalendar.CalculateTradingTimeRange(DateRange.Today); TimeRange arketCalendarMainDateRange = dateRange.TimeRange as TimeRange; TimeRange arketCalendarAlignedDateRange = dateRange.AlignedTimeRange as TimeRange; TimeRange arketCalendarExtendedDateRnage = dateRange.ExtendedTimeRange as TimeRange; // Then Assert.IsTrue(arketCalendarMainDateRange != null && arketCalendarMainDateRange.CompareTo(mainDateRange) == 0); Assert.IsTrue(arketCalendarAlignedDateRange != null && arketCalendarAlignedDateRange.CompareTo(arketCalendarAlignedDateRange) == 0); Assert.IsTrue(arketCalendarExtendedDateRnage != null && arketCalendarExtendedDateRnage.CompareTo(arketCalendarExtendedDateRnage) == 0); }
public async Task <SummaryDataSection> BuildCompanySection( string symbol, DateRange dateRange, TradingTimeRange timeRange) { var timeRangeVolumeRatio = MarketCalendar.CalculateVolumeRatioDateRange(dateRange, timeRange.TimeRange.Start, timeRange.TimeRange.End); using (var conn = connectionProvider.GetConnection()) { var dateFromParam = timeRange.TimeRange.Start; var dateToParam = timeRange.TimeRange.End; var companySummaryDataTask = await conn.QueryAsync <SummaryDataSection>( "dbo.usp_CompanyGeneralData", commandType : CommandType.StoredProcedure, param : new { symbol, dateFrom = dateFromParam, dateTo = dateToParam, datePreviousTradingDay = timeRange.AlignedTimeRange.Start }); var companySummaryData = companySummaryDataTask.FirstOrDefault(); if (companySummaryData == null) { return(null); } companySummaryData.VolumeRatio = GetVolumeRatioBySymbol(symbol, dateRange, timeRange, timeRangeVolumeRatio); companySummaryData.SectionType = "company"; return(companySummaryData); } }
public async Task <SummaryDataSection> BuildIndustrySection( int sicCode, DateRange dateRange, TradingTimeRange timeRange) { var timeRangeVolumeRatio = MarketCalendar.CalculateVolumeRatioDateRange(dateRange, timeRange.TimeRange.Start, timeRange.TimeRange.End); using (var conn = connectionProvider.GetConnection()) { var dateFromParam = timeRange.TimeRange.Start; var dateToParam = timeRange.AlignedTimeRange.End; var industrySummaryDataTask = await conn.QueryAsync <SummaryDataSection>( "dbo.usp_IndustryGeneralData", commandType : CommandType.StoredProcedure, param : new { sicCode, dateFrom = dateFromParam, dateTo = dateToParam, datePreviousTradingDay = timeRange.AlignedTimeRange.Start }); var industrySummaryData = industrySummaryDataTask.FirstOrDefault(); if (industrySummaryData == null) { return(null); } if (dateRange == DateRange.All) { industrySummaryData.VolumeRatio = null; } else if (dateRange == DateRange.Today || dateRange == DateRange.Range && timeRange.TimeRange.Start.Date == DateTime.UtcNow.Date) { var volumeRatio = conn.Query <double?>(@" SELECT AVG(vr.VolumeRatio) FROM VolumeRatio vr WITH(NOLOCK) INNER JOIN Fundamental4 f WITH(NOLOCK) ON vr.Symbol = f.Symbol WHERE f.SICCode = @sicCode ", new { sicCode }).FirstOrDefault(); industrySummaryData.VolumeRatio = volumeRatio; } else { var mainPeriodVolumeRatio = conn.Query <double>(@" SELECT AVG(CAST(ip.Volume AS FLOAT)) FROM IndustryPrice ip WITH(NOLOCK) WHERE ip.SICCode = @sicCode AND ip.JDate >= CONVERT(CHAR(8), @dateFrom, 112) AND ip.JDate <= CONVERT(CHAR(8), @dateTo, 112) ", new { sicCode, dateFrom = timeRange.TimeRange.Start, dateTo = timeRange.TimeRange.End }).FirstOrDefault(); var periodsToCompare = conn.Query <double>(@" SELECT AVG(CAST(ip.Volume AS FLOAT)) FROM IndustryPrice ip WITH(NOLOCK) WHERE ip.SICCode = @sicCode AND ip.JDate >= CONVERT(CHAR(8), @dateFrom, 112) AND ip.JDate <= CONVERT(CHAR(8), @dateTo, 112) ", new { sicCode, dateFrom = timeRangeVolumeRatio.Start, dateTo = timeRangeVolumeRatio.End, }).FirstOrDefault(); industrySummaryData.VolumeRatio = mainPeriodVolumeRatio / periodsToCompare; } industrySummaryData.SectionType = "industry"; return(industrySummaryData); } }