Fractals Multi Timeframe free

by aksbenz in category Other at 29/12/2021
Description

Draw Fractal Lines/Icons of Higher Timeframes.

Calculates fractal pattern for Higher TF and shows on the current chart as Lines/Icon/Both.

Pattern is calculated as: (For 3 Bar Pattern)
For HIGH: <Previous Bar Has Lower High> _ Bar High _ <Next Bar Has Lower High>
For LOW: <Previous Bar Has Higher Low> _ Bar Low _ <Next Bar Has Higher Low>

Add comments for any fixes or improvements. Thanks.

Settings:

Timeframe: Select Higher Timeframe than Current Chart Timeframe
Fractal Count: Number of Bars to Check on Left/Right for Fractal (Eg. 1: Total 3 Bar Pattern)
Line Length: Number of Bars to draw the Fractal Line
Draw Type: Line / Icon / Both

Below Shows Fractal Lines on 4 Hour Chart with:
Current 4H TF: (Green/Red)
Daily TF: (Yellow/Orange)

Notification Publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section you may use the Copyright Infringement Notification form to submit a claim.
Formula / Source Code
Language: C#
Trading Platform: cAlgocTrader
´╗┐using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class FractalsMultiTimeframe : Indicator
    {
        #region Common Parameters
        [Parameter("Time Frame")]
        public TimeFrame timeFrame { get; set; }

        [Parameter("Fractal Count", DefaultValue = 1)]
        public int Count { get; set; }

        [Parameter("Line Length (Bars)", DefaultValue = 10)]
        public int LineBars { get; set; }

        [Parameter("Draw Type", DefaultValue = DrawType.Both)]
        public DrawType Type { get; set; }
        #endregion

        #region High Parameters
        [Parameter("Color", Group = "High", DefaultValue = "Green")]
        public String HighColor { get; set; }

        [Parameter("Icon Type", Group = "High", DefaultValue = ChartIconType.Circle)]
        public ChartIconType HighIconType { get; set; }

        [Parameter("Line Style (for Line)", Group = "High", DefaultValue = LineStyle.Dots)]
        public LineStyle HighLineStyle { get; set; }
        #endregion

        #region Low Parameters
        [Parameter("Color", Group = "Low", DefaultValue = "Red")]
        public String LowColor { get; set; }

        [Parameter("Icon Type", Group = "Low", DefaultValue = ChartIconType.Circle)]
        public ChartIconType LowIconType { get; set; }

        [Parameter("Line Style (for Line)", Group = "Low", DefaultValue = LineStyle.Dots)]
        public LineStyle LowLineStyle { get; set; }
        #endregion

        public enum DrawType
        {
            Line,
            Icon,
            Both
        }

        int lastIndex = 0;
        Bars TFBars;
        Color _highColor, _lowColor;
        readonly Color _invalidColor = Color.FromHex("#00000000");

        protected override void Initialize()
        {
            if (timeFrame < Chart.TimeFrame)
            {
                Chart.DrawStaticText("FC_ERROR", "*** ERROR **** \n TimeFrame must be Equal OR Greater than Chart Timeframe", VerticalAlignment.Bottom, HorizontalAlignment.Center, Color.Red);
                return;
            }

            if (timeFrame > Chart.TimeFrame)
                TFBars = MarketData.GetBars(timeFrame);
            else
                TFBars = Bars;

            _highColor = HighColor.StartsWith("#") ? Color.FromHex(HighColor) : Color.FromName(HighColor);
            _lowColor = LowColor.StartsWith("#") ? Color.FromHex(LowColor) : Color.FromName(LowColor);

            if (_lowColor == _invalidColor || _highColor == _invalidColor)
            {
                string errorMsg = _lowColor == _invalidColor ? "\nLow Color (" + LowColor + ") - INVALID" : "";
                errorMsg += _highColor == _invalidColor ? "\nHigh Color (" + HighColor + ") - INVALID" : "";
                Chart.DrawStaticText("FC_ERROR", "*** ERROR ****" + errorMsg, VerticalAlignment.Bottom, HorizontalAlignment.Center, Color.Red);
            }
        }

        public override void Calculate(int index)
        {
            if (timeFrame < Chart.TimeFrame)
                return;

            // Get the index for Higher Timeframe
            index = timeFrame != Chart.TimeFrame ? TFBars.OpenTimes.GetIndexByTime(Bars[index].OpenTime) : index;

            // <Count> Bars on LEFT + Bar + <Count> Bars on RIGHT
            int minBarsRequired = 2 * Count + 1;

            // Check ONLY on New Bar
            if (index >= minBarsRequired && IsNewBar(index))
            {
                int barIndex = index - 1 - Count;
                Bar CheckBar = TFBars[barIndex];

                // Higher TF Fractal will be RECOGNIZED only when the WHOLE Pattern Completes
                // which will be (2 * Count + 1) Bars
                // Hence, the Fractal should be SHOWN in Lower TF at OpenTime of (BarIndex + Count + 1)
                int chartBarIndex = timeFrame != Chart.TimeFrame ? Bars.OpenTimes.GetIndexByTime(TFBars[barIndex + Count + 1].OpenTime) : barIndex;

                // Get Minimum Bars Required for calculation, without the Main Bar
                var CheckBars = TFBars.Skip(index - minBarsRequired).Take(minBarsRequired).ToList();
                CheckBars.RemoveAt(Count);

                // If All Others Bars have LOWER HIGH than Main Bar
                if (CheckBars.All(B => CheckBar.High > B.High))
                {
                    if (Type == DrawType.Line || Type == DrawType.Both)
                        Chart.DrawTrendLine("FTF_HIGHLINE_" + chartBarIndex, chartBarIndex, CheckBar.High, chartBarIndex + LineBars, CheckBar.High, _highColor, 1, HighLineStyle);
                    if (Type == DrawType.Icon || Type == DrawType.Both)
                        Chart.DrawIcon("FTF_HIGHICON_" + chartBarIndex, HighIconType, chartBarIndex, CheckBar.High, _highColor);
                }

                // If All Others Bars have HIGHER LOW than Main Bar
                if (CheckBars.All(B => CheckBar.Low < B.Low))
                {
                    if (Type == DrawType.Line || Type == DrawType.Both)
                        Chart.DrawTrendLine("FTF_LOWLINE_" + chartBarIndex, chartBarIndex, CheckBar.Low, chartBarIndex + LineBars, CheckBar.Low, _lowColor, 1, LowLineStyle);
                    if (Type == DrawType.Icon || Type == DrawType.Both)
                        Chart.DrawIcon("FTF_LOW_ICON_" + chartBarIndex, LowIconType, chartBarIndex, CheckBar.Low, _lowColor);
                }
            }
        }

        bool IsNewBar(int index)
        {
            bool isNewBar = index > lastIndex;
            lastIndex = isNewBar ? index : lastIndex;
            return isNewBar;
        }
    }
}
Comments

muneerahmed400 - July 07, 2022 @ 13:04

Waow this is quite pleasant article, my sister love to read such type of post, eating places near me I am going to tell her and bookmarking this webpage. Thanks 

rickywong19922005@gmail.com - January 06, 2023 @ 14:35

It really look like buy/sell liquidty

0