private double?GetVolumeRatioBySymbol( string symbol, DateRange dateRange, TradingTimeRange timeRange, ITimeRange timeRangeVolumeRatio) { using (var conn = connectionProvider.GetConnection()) { if (dateRange == DateRange.All) { return(null); } else if (dateRange == DateRange.Today || dateRange == DateRange.Range && timeRange.TimeRange.Start.Date == DateTime.UtcNow.Date) { var volumeRatio = conn.Query <double?>(@" SELECT vr.VolumeRatio FROM VolumeRatio vr WITH(NOLOCK) WHERE vr.Symbol = @symbol ", new { symbol }).FirstOrDefault(); return(volumeRatio); } else { var mainPeriodVolumeRatio = conn.Query <double?>(@" SELECT AVG(p.AllVolume) FROM Price p WITH(NOLOCK) WHERE CAST(p.[Date] AS DATE) >= @dateFrom AND CAST(p.[Date] AS DATE) <= @dateTo AND p.Symbol = @symbol ", new { symbol, dateFrom = timeRange.TimeRange.Start, dateTo = timeRange.TimeRange.End }).FirstOrDefault(); if (mainPeriodVolumeRatio == null) { return(null); } var periodsToCompare = conn.Query <double>(@" SELECT AVG(p.AllVolume) FROM Price p WITH(NOLOCK) WHERE CAST(p.[Date] AS DATE) >= @dateFrom AND CAST(p.[Date] AS DATE) <= @dateTo AND p.Symbol = @symbol ", new { symbol, dateFrom = timeRangeVolumeRatio.Start, dateTo = timeRangeVolumeRatio.End, }).FirstOrDefault(); return(mainPeriodVolumeRatio / periodsToCompare); } } }
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); } }
private DateTime GetBarBeginTime(DateTime datetime, TradingTimeRange timeRanges) { if (timeRanges.InFristMd(datetime.TimeOfDay)) { if (datetime.TimeOfDay > timeRanges.CloseTime) { datetime = datetime.Date.Add(timeRanges.NightOpenTime); } else { datetime = datetime.Date.Add(timeRanges.OpenTime); } } if (newBarSize > QuantBoxConst.DayBarSize) { var tradingDay = datetime.Date; if (datetime.TimeOfDay > timeRanges.CloseTime) { tradingDay = TradingCalendar.Instance.GetNextTradingDay(tradingDay); } if (newBarSize == QuantBoxConst.DayBarSize) { return(tradingDay); } if (newBarSize == QuantBoxConst.WeekBarSize) { int num = (int)((tradingDay.DayOfWeek == DayOfWeek.Sunday) ? DayOfWeek.Saturday : (tradingDay.DayOfWeek - 1)); return(tradingDay.AddDays(-num)); } if (newBarSize == QuantBoxConst.MonthBarSize) { return(tradingDay.AddDays(-tradingDay.Day + 1)); } } long seconds = (long)datetime.TimeOfDay.TotalSeconds / newBarSize * newBarSize; return(datetime.Date.AddSeconds(seconds)); }
private DateTime GetBarEndTime(DateTime begintime, TradingTimeRange timeRanges) { if (newBarSize > QuantBoxConst.DayBarSize) { if (newBarSize == QuantBoxConst.DayBarSize) { return(begintime.Add(timeRanges.CloseTime)); } if (newBarSize == QuantBoxConst.WeekBarSize) { var date = begintime.Date.AddDays(5); if (!TradingCalendar.Instance.IsTradingDay(date)) { date = TradingCalendar.Instance.GetPrevTradingDay(date); } return(date.Add(timeRanges.CloseTime)); } if (newBarSize == QuantBoxConst.MonthBarSize) { var date = begintime.Date.AddMonths(1).AddDays(-1); if (!TradingCalendar.Instance.IsTradingDay(date)) { date = TradingCalendar.Instance.GetPrevTradingDay(date); } return(date.Add(timeRanges.CloseTime)); } } var datetime = begintime.AddSeconds(newBarSize); if (datetime.TimeOfDay > timeRanges.CloseTime && (timeRanges.NightOpenTime == TimeSpan.Zero || datetime.TimeOfDay < timeRanges.NightOpenTime)) { datetime = datetime.Date.Add(timeRanges.CloseTime); } return(datetime); }
public DataEntry(DateTime datetime, TradingTimeRange timeRanges, PriceSizeItem[] items) { DateTime = datetime; TimeRanges = timeRanges; Items = items; }
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); } }