Heikin Ashi Candles (high performance) free

by aksbenz in category Other at 08/01/2022
Description

Heikin Ashi Candles
High performance and low memory usage, useful when scrolling backwards, works smoothly even with Tick Charts and 1m charts

*** IMPORTANT ***
Set Chart Type back to "Candlesticks" after REMOVING indicator.

Can, also turn off Heikin Ashi Candles without removing the indicator.
Press "HA" button or press "h" to toggle HA Candles on/off.

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 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 HeikinAshiCandles : Indicator
    {
        [Parameter("Candle width", DefaultValue = 7)]
        public int CandleWidth { get; set; }

        [Parameter("Transparency", DefaultValue = 180)]
        public int Alpha { get; set; }

        [Parameter("Up color", DefaultValue = "#FF00BF00")]
        public string UpColor { get; set; }

        [Parameter("Down color", DefaultValue = "Red")]
        public string DownColor { get; set; }

        [Parameter("Button Position (1,2,3,4,5,6)", DefaultValue = 1, MaxValue = 6)]
        public int BtnPosition { get; set; }

        IndicatorDataSeries HAOpen, HAHigh, HALow, HAClose, IsDrawn;
        Color _upColor, _downColor;
        Button BtnShowHide;
        bool haVisible = true;

        protected override void Initialize()
        {
            HAOpen = CreateDataSeries();
            HAHigh = CreateDataSeries();
            HALow = CreateDataSeries();
            HAClose = CreateDataSeries();
            IsDrawn = CreateDataSeries();

            _upColor = UpColor.StartsWith("#") ? Color.FromHex(UpColor.TrimStart('#')) : Color.FromName(UpColor);
            _downColor = DownColor.StartsWith("#") ? Color.FromHex(DownColor.TrimStart('#')) : Color.FromName(DownColor);

            Chart.ChartType = ChartType.Dots;
            Chart.ScrollChanged += Chart_ScrollChanged;
            Chart.AddHotkey(ToggleHA, "h");

            // Button Settings to HIDE/SHOW HA Candles
            StackPanel mainPanel = new StackPanel();
            BtnShowHide = new Button 
            {
                HorizontalAlignment = GetHorAlign(),
                VerticalAlignment = GetVertAlign(),
                Text = "HA",
                Width = 100,
                Height = 20,
                FontSize = 10,
                Margin = new Thickness(0, 5, 5, 5),
                BackgroundColor = Color.FromArgb(80, Color.Green)
            };

            BtnShowHide.Click += BtnShowHide_Click;

            Chart.AddControl(BtnShowHide);
            mainPanel.AddChild(BtnShowHide);
        }

        HorizontalAlignment GetHorAlign()
        {
            switch (BtnPosition)
            {
                case 1:
                case 4:
                default:
                    return HorizontalAlignment.Left;
                case 2:
                case 5:
                    return HorizontalAlignment.Center;
                case 3:
                case 6:
                    return HorizontalAlignment.Right;
            }
        }

        VerticalAlignment GetVertAlign()
        {
            switch (BtnPosition)
            {
                case 1:
                case 2:
                case 3:
                default:
                    return VerticalAlignment.Top;
                case 4:
                case 5:
                case 6:
                    return VerticalAlignment.Bottom;
            }
        }

        void ToggleHA()
        {
            haVisible = !haVisible;
            BtnShowHide.BackgroundColor = haVisible ? Color.FromArgb(80, Color.Green) : Color.FromArgb(80, Color.Red);

            if (!haVisible)
            {
                // Remove all HA Bars and Reset IsDrawn
                for (int i = 0; i < IsDrawn.Count; i++)
                {
                    IsDrawn[i] = 0;
                    Chart.RemoveObject("candle" + i);
                    Chart.RemoveObject("line" + i);
                }
                Chart.ChartType = ChartType.Candlesticks;
            }
            else
            {
                Chart.ChartType = ChartType.Dots;
                DrawHABars();
            }
        }

        void BtnShowHide_Click(ButtonClickEventArgs obj)
        {
            ToggleHA();
        }

        void Chart_ScrollChanged(ChartScrollEventArgs obj)
        {
            if (haVisible)
                DrawHABars();
        }

        public override void Calculate(int index)
        {
            HAClose[index] = (Bars.OpenPrices[index] + Bars.HighPrices[index] + Bars.LowPrices[index] + Bars.ClosePrices[index]) / 4;
            HAOpen[index] = index > 0 ? (HAOpen[index - 1] + HAClose[index - 1]) / 2 : (Bars.OpenPrices[index] + Bars.ClosePrices[index]) / 2;
            HAHigh[index] = Math.Max(Math.Max(Bars.HighPrices[index], HAOpen[index]), HAClose[index]);
            HALow[index] = Math.Min(Math.Min(Bars.LowPrices[index], HAOpen[index]), HAClose[index]);

            if (IsLastBar && haVisible)
                DrawHABars();
        }

        void DrawHABars()
        {
            for (int i = Chart.FirstVisibleBarIndex; i <= Chart.LastVisibleBarIndex; i++)
            {
                if (IsDrawn[i] != 1 || (i == Chart.LastVisibleBarIndex))
                {
                    IsDrawn[i] = 1;
                    var color = HAOpen[i] > HAClose[i] ? _downColor : _upColor;

                    // Make the Bar a little transparent, if the BAR CLOSE DOT will be hidden
                    color = (Bars[i].Close < HAOpen[i] && Bars[i].Close > HAClose[i]) || (Bars[i].Close > HAOpen[i] && Bars[i].Close < HAClose[i]) ? Color.FromArgb(Alpha, color) : color;

                    Chart.DrawTrendLine("candle" + i, i, HAOpen[i], i, HAClose[i], color, CandleWidth, LineStyle.Solid);
                    Chart.DrawTrendLine("line" + i, i, HAHigh[i], i, HALow[i], color, 1, LineStyle.Solid);
                }
            }
        }
    }
}
Comments

katebecker001 - May 23, 2022 @ 12:48

I work on HTML but this time I am using c+. However, I need help in the Capstone Project writing services website. I need some assistance regarding this language.

5