Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
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);
            }
        }
        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);
        }
Exemplo n.º 5
0
 public DataEntry(DateTime datetime, TradingTimeRange timeRanges, PriceSizeItem[] items)
 {
     DateTime   = datetime;
     TimeRanges = timeRanges;
     Items      = items;
 }
Exemplo n.º 6
0
        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);
            }
        }