TimeFrame operators

Created at 14 Jul 2015, 17:47
How’s your experience with the cTrader Platform?
Your feedback is crucial to cTrader's development. Please take a few seconds to share your opinion and help us improve your trading experience. Thanks!
AY

aysos75

Joined 28.09.2013

TimeFrame operators
14 Jul 2015, 17:47


The TimeFrame class is very poor, the class is :


namespace cAlgo.API
{
    // Summary:
    //     Contains supported timeframe values from Minute 1 to Monthly.
    public class TimeFrame
    {
        public static TimeFrame Daily;
        public static TimeFrame Day2;
        public static TimeFrame Day3;
        public static TimeFrame Hour;
        public static TimeFrame Hour12;
        public static TimeFrame Hour2;
        public static TimeFrame Hour3;
        public static TimeFrame Hour4;
        public static TimeFrame Hour6;
        public static TimeFrame Hour8;
        public static TimeFrame Minute;
        public static TimeFrame Minute10;
        public static TimeFrame Minute15;
        public static TimeFrame Minute2;
        public static TimeFrame Minute20;
        public static TimeFrame Minute3;
        public static TimeFrame Minute30;
        public static TimeFrame Minute4;
        public static TimeFrame Minute45;
        public static TimeFrame Minute5;
        public static TimeFrame Minute6;
        public static TimeFrame Minute7;
        public static TimeFrame Minute8;
        public static TimeFrame Minute9;
        public static TimeFrame Monthly;
        public static TimeFrame Weekly;

        public static bool operator <(TimeFrame x, TimeFrame y);
        public static bool operator <=(TimeFrame x, TimeFrame y);
        public static bool operator >(TimeFrame x, TimeFrame y);
        public static bool operator >=(TimeFrame x, TimeFrame y);

        public override string ToString();
    }
}

It will be more convenient if there is a method like

TimeSpan TimeFrame.ToTimeSpan() 

{

      TimeSpan timespan;

      // instruction to transform each TimeFrame.Time in TimeSpan.

       return timespan;

};

 

With TimeSpan the operators is very large and it will be more simple to operate on timeframe.


@aysos75
Replies

aysos75
14 Jul 2015, 18:52

The solution is simple, I use extensions method to TimeFrame :

 

#region Licence
//The MIT License (MIT)
//Copyright (c) 2014 abdallah HACID, https://www.facebook.com/ab.hacid

//Permission is hereby granted, free of charge, to any person obtaining a copy of this software
//and associated documentation files (the "Software"), to deal in the Software without restriction,
//including without limitation the rights to use, copy, modify, merge, publish, distribute,
//sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
//is furnished to do so, subject to the following conditions:

//The above copyright notice and this permission notice shall be included in all copies or
//substantial portions of the Software.

//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
//BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
//NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
//DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

// Project Hosting for Open Source Software on Github : https://github.com/abhacid/cAlgoBot
#endregion

using System;
using cAlgo.API;
using cAlgo.API.Internals;

namespace cAlgo.Lib
{
    /// <summary>
    /// Méthodes d'extensions du type cAlgo.API.TimeFrame
    /// </summary>
    public static class TimeFrameExtensions
    {
        public enum TimeFrameEnum
        {
            Minute,
            Minute2,
            Minute3,
            Minute4,
            Minute5,
            Minute6,
            Minute7,
            Minute8,
            Minute9,
            Minute10,
            Minute15,
            Minute20,
            Minute30,
            Minute45,
            Hour,
            Hour12,
            Hour2,
            Hour3,
            Hour4,
            Hour6,
            Hour8,
            Daily,
            Day2,
            Day3,
            Weekly,
            Monthly,
        }

        public static TimeFrameEnum ToTimeFrameEnum(this TimeFrame timeFrame)
        {
            TimeFrameEnum timeFrameEnum;

            Enum.TryParse<TimeFrameEnum>(timeFrame.ToString(), out timeFrameEnum);

            return timeFrameEnum; 
        }


        public static TimeSpan ToTimeSpan(this TimeFrame timeFrame)
        {
            TimeSpan timeSpan;
            long ticks=0;


            // instruction to transform each TimeFrame.Time in TimeSpan.

            switch(timeFrame.ToTimeFrameEnum())
            {
                case TimeFrameEnum.Minute:
                    ticks = TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute2:
                    ticks = 2 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute3:
                    ticks =3 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute4:
                    ticks = 4 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute5:
                    ticks = 5 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute6:
                    ticks = 6 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute7:
                    ticks = 7 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute8:
                    ticks = 8 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute9:
                    ticks = 9 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute10:
                    ticks = 10 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute15:
                    ticks = 15 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute20:
                    ticks = 20 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute30:
                    ticks = 30 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Minute45:
                    ticks = 45 * TimeSpan.TicksPerMinute;
                    break;

                case TimeFrameEnum.Hour:
                    ticks = TimeSpan.TicksPerHour;
                    break;

                case TimeFrameEnum.Hour2:
                    ticks = 2 * TimeSpan.TicksPerHour;
                    break;

                case TimeFrameEnum.Hour3:
                    ticks = 3 * TimeSpan.TicksPerHour;
                    break;

                case TimeFrameEnum.Hour4:
                    ticks = 4 * TimeSpan.TicksPerHour;
                    break;            
            
                case TimeFrameEnum.Hour6:
                    ticks = 6 * TimeSpan.TicksPerHour;
                    break;

                case TimeFrameEnum.Hour8:
                    ticks = 8 * TimeSpan.TicksPerHour;
                    break;

                case TimeFrameEnum.Hour12:
                    ticks = 12 * TimeSpan.TicksPerHour;
                    break;

                case TimeFrameEnum.Daily:
                    ticks = TimeSpan.TicksPerDay;
                    break;

                case TimeFrameEnum.Day2:
                    ticks = 2 * TimeSpan.TicksPerDay;
                    break;

                case TimeFrameEnum.Day3:
                    ticks = 3 * TimeSpan.TicksPerDay;
                    break;

                case TimeFrameEnum.Weekly:
                    ticks = 7 * TimeSpan.TicksPerDay;
                    break;

                case TimeFrameEnum.Monthly:
                    ticks = (long)(30.5 * TimeSpan.TicksPerDay);
                    break;
            }

            timeSpan = TimeSpan.FromTicks(ticks);

            return timeSpan;
        }
    }
}

And I can use in my indicator instructions like this :

        [Parameter()]
        public TimeFrame Global { get; set; }

        protected override void Initialize()
        {
            marketSerieGlobal = MarketData.GetSeries(Global);
            
            int period = (int) (Global.ToTimeSpan().Ticks / MarketSeries.TimeFrame.ToTimeSpan().Ticks);

            _localMA = Indicators.MovingAverage(LocalTrendSignal, period, MovingAverageType.Exponential);

        }


@aysos75