Beispiel #1
0
        public static DateTime GetOpenTime(this Bars bars, double barIndex, Symbol symbol)
        {
            var currentIndex = bars.Count - 1;

            var timeDiff = bars.GetTimeDiff();

            var indexDiff = barIndex - currentIndex;

            var result = indexDiff <= 0 ? bars.OpenTimes[(int)barIndex] : bars.OpenTimes[currentIndex];

            if (indexDiff > 0)
            {
                var isDiffLessThanDay = timeDiff < TimeSpan.FromDays(1);

                for (var i = 1; i <= indexDiff; i++)
                {
                    result = result.Add(timeDiff);

                    if (isDiffLessThanDay)
                    {
                        while (!symbol.IsInTradingTime(result))
                        {
                            result = result.Add(timeDiff);
                        }
                    }
                }
            }

            return(result);
        }
        /// <summary>
        /// Returns a bar open time by giving its index, it supports both past and future bars but the future bars provided
        /// open time is an approximation based on previous bars time differences not exact open time
        /// </summary>
        /// <param name="bars">The market series</param>
        /// <param name="barIndex">The bar index</param>
        /// <returns>DateTime</returns>
        public static DateTime GetOpenTime(this Bars bars, double barIndex)
        {
            var currentIndex = bars.GetIndex();

            TimeSpan timeDiff = bars.GetTimeDiff();

            var indexDiff = barIndex - currentIndex;

            var indexDiffAbs = Math.Abs(indexDiff);

            var result = indexDiff <= 0 ? bars.OpenTimes[(int)barIndex] : bars.OpenTimes[currentIndex];

            if (indexDiff > 0)
            {
                for (var i = 1; i <= indexDiffAbs; i++)
                {
                    do
                    {
                        result = result.Add(timeDiff);
                    }while (result.DayOfWeek == DayOfWeek.Saturday || result.DayOfWeek == DayOfWeek.Sunday);
                }
            }

            var barIndexFraction = barIndex % 1;

            var barIndexFractionInMinutes = timeDiff.TotalMinutes * barIndexFraction;

            result = result.AddMinutes(barIndexFractionInMinutes);

            return(result);
        }
Beispiel #3
0
        public static double GetBarIndex(this Bars bars, DateTime time, Symbol symbol)
        {
            if (time <= bars.OpenTimes.LastValue)
            {
                return(bars.OpenTimes.GetIndexByTime(time));
            }

            var timeDiff = bars.GetTimeDiff();

            var timeDiffWithLastTime = (time - bars.OpenTimes.LastValue);

            if (bars.TimeFrame < TimeFrame.Daily)
            {
                var outsideTradingTime = symbol.GetOutsideTradingTimeAmount(bars.OpenTimes.LastValue, time, timeDiff);

                timeDiffWithLastTime = timeDiffWithLastTime.Add(-outsideTradingTime);
            }

            var futureIndex = (bars.Count - 1) + timeDiffWithLastTime.TotalHours / timeDiff.TotalHours;

            return(futureIndex);
        }