Ejemplo n.º 1
0
        public static TimeFrameUnit MoreGranular(this TimeFrameUnit unit)
        {
            switch (unit)
            {
            case TimeFrameUnit.Unspecified:
                return(TimeFrameUnit.Unspecified);

            case TimeFrameUnit.Tick:
                return(TimeFrameUnit.Unspecified);

            case TimeFrameUnit.Second:
                return(TimeFrameUnit.Tick);

            case TimeFrameUnit.Minute:
                return(TimeFrameUnit.Second);

            case TimeFrameUnit.Hour:
                return(TimeFrameUnit.Minute);

            case TimeFrameUnit.Day:
                return(TimeFrameUnit.Hour);

            case TimeFrameUnit.Week:
                return(TimeFrameUnit.Day);

            case TimeFrameUnit.Month:
                return(TimeFrameUnit.Week);

            case TimeFrameUnit.Year:
                return(TimeFrameUnit.Month);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Ejemplo n.º 2
0
        public static string ToLetterCode(this TimeFrameUnit unit)
        {
            switch (unit)
            {
            //case TimeFrameUnit.Unspecified:
            //    break;
            case TimeFrameUnit.Tick:
                return("t");

            case TimeFrameUnit.Second:
                return("s");

            case TimeFrameUnit.Minute:
                return("m");

            case TimeFrameUnit.Hour:
                return("h");

            case TimeFrameUnit.Day:
                return("d");

            case TimeFrameUnit.Week:
                return("w");

            case TimeFrameUnit.Month:
                return("M");

            case TimeFrameUnit.Year:
                return("y");

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Ejemplo n.º 3
0
        // FUTURE: Get factors of a timeframe
        public TimeFrame MoreGranular(bool factorOfTwo = true)
        {
            var val = TimeFrameValue - 1;

            for (TimeFrameUnit unit = TimeFrameUnit; unit != TimeFrameUnit.Unspecified; unit = unit.MoreGranular())
            {
                for (; val >= 1;)
                {
                    var tf = TimeFrame.TryGet(unit, val);
                    if (tf != null)
                    {
                        return(tf);
                    }
                    if (factorOfTwo)
                    {
                        val /= 2;
                    }
                    else
                    {
                        val--;
                    }
                }
                val = Math.Max(1, val);
            }
            return(null);
        }
Ejemplo n.º 4
0
        protected override ITradeStatisticsWithKind InternalExecute(ISecurity security)
        {
            var           timeFrame = TimeFrameFactory.Create(TimeFrame, TimeFrameUnit);
            int           topTimeFrameNumber;
            TimeFrameUnit topTimeFrameUnit;
            TimeSpan      topTimeFrame;

            if (UseTopTimeFrame)
            {
                topTimeFrameNumber = TopTimeFrame;
                topTimeFrameUnit   = TopTimeFrameUnit;
                topTimeFrame       = TimeFrameFactory.Create(topTimeFrameNumber, topTimeFrameUnit);

                if (topTimeFrame.Ticks % timeFrame.Ticks != 0)
                {
                    throw new InvalidOperationException(string.Format(RM.GetString("TopTimeFrameMustBeDivisableByTimeFrame"), ToString(TopTimeFrame, topTimeFrameUnit), ToString(TimeFrame, TimeFrameUnit)));
                }
            }
            else
            {
                var maxTimeSpan = TimeSpan.FromSeconds(int.MaxValue);
                switch (TimeFrameUnit)
                {
                case TimeFrameUnit.Second:
                    topTimeFrameNumber = (int)maxTimeSpan.TotalSeconds;
                    break;

                case TimeFrameUnit.Minute:
                    topTimeFrameNumber = (int)maxTimeSpan.TotalMinutes;
                    break;

                case TimeFrameUnit.Hour:
                    topTimeFrameNumber = (int)maxTimeSpan.TotalHours;
                    break;

                case TimeFrameUnit.Day:
                    topTimeFrameNumber = (int)maxTimeSpan.TotalDays;
                    break;

                default:
                    throw new InvalidEnumArgumentException(nameof(TimeFrameUnit), (int)TimeFrameUnit, TimeFrameUnit.GetType());
                }
                topTimeFrameNumber = topTimeFrameNumber / TimeFrame * TimeFrame;
                topTimeFrameUnit   = TimeFrameUnit;
                topTimeFrame       = TimeFrameFactory.Create(topTimeFrameNumber, topTimeFrameUnit);
            }
            var runTime = Context.Runtime;
            var id      = runTime != null?string.Join(".", runTime.TradeName, runTime.IsAgentMode, VariableId) : VariableId;

            var stateId         = string.Join(".", security.Symbol, security.Interval, security.IsAligned, CombinePricesCount, TimeFrameKind, TimeFrame, TimeFrameUnit, topTimeFrameNumber, topTimeFrameUnit);
            var tradeStatistics = Context.GetTradeStatistics(stateId, () => new TradeStatistics(id, stateId, GetTradeHistogramsCache(security), TimeFrameKind, timeFrame, TimeFrameUnit, topTimeFrame));

            return(new TradeStatisticsWithKind(tradeStatistics, Kind, WidthPercent));
        }
Ejemplo n.º 5
0
 private static string ToString(int timeFrame, TimeFrameUnit timeFrameUnit)
 {
     return(timeFrame + ":" + timeFrameUnit.GetDescription());
 }
Ejemplo n.º 6
0
 public static TimeFrame TryGet(TimeFrameUnit unit, int val)
 {
     return(TryParse(unit.ToLetterCode() + val.ToString()));
 }