Category Other  Published on 24/11/2020

Day of Week Separator

Description

 

A simple indicator (built on request) that separates out the days of the week on timeframes below the daily chart.

At FXTS we can do dev work on request, just get in contact via: fxtradersystems.com/support/

 


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

namespace cAlgo
{
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class DayChanges : Indicator
    {

        [Parameter("Show Instructions?", DefaultValue = true)]
        public bool ShowInstructions { get; set; }

        protected override void Initialize()
        {

            if (Bars.TimeFrame >= TimeFrame.Daily)
            {
                Chart.DrawStaticText("Warning", "Indicator only suitable for below daily timeframe", VerticalAlignment.Bottom, HorizontalAlignment.Left, Color.Red);
            }


            string[] days = new string[] 
            {
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday",
                "Saturday",
                "Sunday"
            };

            if (ShowInstructions)
            {
                for (int i = 0; i < days.Length; i++)
                {
                    string day = days[i];
                    string msg = "";

                    for (int buffer = 0; buffer < i; buffer++)
                        msg += "\n";

                    msg += day;

                    Chart.DrawStaticText(day, msg, VerticalAlignment.Top, HorizontalAlignment.Left, GetColor(day));
                }
            }
        }

        public override void Calculate(int index)
        {
            if (Bars.TimeFrame < TimeFrame.Daily)
            {
                Chart.RemoveObject("Vertical " + index);

                DayOfWeek prevDay = GetDay(1);
                DayOfWeek today = GetDay(0);

                if (today != prevDay)
                    Chart.DrawVerticalLine("Vertical " + index, index, GetColor(today), 1, LineStyle.Dots);
            }

        }

        private DayOfWeek GetDay(int dayToGet)
        {
            if (dayToGet == 0)
                return Bars.OpenTimes.LastValue.DayOfWeek;
            else
                return Bars.OpenTimes.Last(dayToGet).DayOfWeek;
        }

        private Color GetColor(string day)
        {
            switch (day)
            {
                case "Monday":
                    return Color.ForestGreen;
                case "Tuesday":
                    return Color.Cyan;
                case "Wednesday":
                    return Color.Gold;
                case "Thursday":
                    return Color.Red;
                case "Friday":
                    return Color.Orange;
                case "Saturday":
                    return Color.Lavender;
                case "Sunday":
                    return Color.Lime;
                default:
                    throw new ArgumentException("Get Color does not have an option for: " + day.ToString() + " of type: " + day.GetType().ToString());
            }
        }

        private Color GetColor(DayOfWeek day)
        {
            switch (day)
            {
                case DayOfWeek.Monday:
                    return Color.ForestGreen;
                case DayOfWeek.Tuesday:
                    return Color.Cyan;
                case DayOfWeek.Wednesday:
                    return Color.Gold;
                case DayOfWeek.Thursday:
                    return Color.Red;
                case DayOfWeek.Friday:
                    return Color.Orange;
                case DayOfWeek.Saturday:
                    return Color.Lavender;
                case DayOfWeek.Sunday:
                    return Color.Lime;
                default:
                    throw new ArgumentException("Get Color does not have an option for: " + day.ToString() + " of type: " + day.GetType().ToString());
            }
        }


    }
}


fxtradersystems's avatar
fxtradersystems

Joined on 10.09.2020

  • Distribution: Free
  • Language: C#
  • Trading platform: cTrader Automate
  • File name: DayChanges.algo
  • Rating: 0
  • Installs: 1910
Comments
Log in to add a comment.
mirk0's avatar
mirk0 · 1 year ago

@fcarabat you can change the color from the source code

FC
fcarabat · 2 years ago

ohh nice! but poopy no options to change colors of days,  ok if you are using a black chart.