Category Trend  Published on 06/10/2021

Gold Scalper

Description

hi


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 ScalperSignal : Indicator
    {
        [Parameter("Sensitivity", DefaultValue = 2, MinValue = 1, MaxValue = 3, Step = 1)]
        public int Sensitivity { get; set; }

        [Parameter("Signal Bar Color", DefaultValue = "Gold")]
        public string SignalBarColor { get; set; }

        [Output("Buy", Color = Colors.LimeGreen, Thickness = 7, PlotType = PlotType.Points)]
        public IndicatorDataSeries BuyIndicator { get; set; }

        [Output("Sell", Color = Colors.Red, Thickness = 7, PlotType = PlotType.Points)]
        public IndicatorDataSeries SellIndicator { get; set; }

        [Output("SignalBarHigh", Color = Colors.Gold, Thickness = 1, PlotType = PlotType.Points)]
        public IndicatorDataSeries SignalBarHigh { get; set; }

        [Output("SignalBarLow", Color = Colors.Gold, Thickness = 1, PlotType = PlotType.Points)]
        public IndicatorDataSeries SignalBarLow { get; set; }

        enum Signals
        {
            None,
            Buy,
            Sell
        }

        private Colors signalBarColor;
        private Signals lastSignal;
        private DateTime lastTime;
        private AverageTrueRange ATR;

        protected override void Initialize()
        {
            if (!Enum.TryParse<Colors>(SignalBarColor, out signalBarColor))
                signalBarColor = Colors.Gold;

            lastSignal = Signals.None;
            lastTime = new DateTime();
            lastTime = MarketSeries.OpenTime[MarketSeries.Close.Count - 1];
        }

        public override void Calculate(int index)
        {
            if (!NewBar(index) || (index < 6))
                return;

            ATR = Indicators.AverageTrueRange(14, MovingAverageType.Exponential);

            double bs = BuySignal(index);
            double ss = SellSignal(index);

            if (bs > 0)
            {
                BuyIndicator[index] = bs;
                SignalBarHigh[index - 3] = MarketSeries.High[index - 3];
                SignalBarLow[index - 3] = MarketSeries.Low[index - 3];
                ChartObjects.DrawLine("SignalBar" + (index - 3), index - 3, SignalBarHigh[index - 3], index - 3, SignalBarLow[index - 3], Colors.Gold, 3, LineStyle.Solid);
            }
            else if (ss > 0)
            {
                SellIndicator[index] = ss;
                SignalBarHigh[index - 3] = MarketSeries.High[index - 3];
                SignalBarLow[index - 3] = MarketSeries.Low[index - 3];
                ChartObjects.DrawLine("SignalBar" + (index - 3), index - 3, SignalBarHigh[index - 3], index - 3, SignalBarLow[index - 3], Colors.Gold, 3, LineStyle.Solid);

            }
        }

        private double SellSignal(int index)
        {
            bool ok = true;

            if (Sensitivity > 2)
                if (MarketSeries.High[index - 6] >= MarketSeries.High[index - 5])
                    ok = false;

            if (Sensitivity > 1)
                if (MarketSeries.High[index - 5] >= MarketSeries.High[index - 4])
                    ok = false;

            if (Sensitivity > 0)
                if (MarketSeries.High[index - 4] >= MarketSeries.High[index - 3])
                    ok = false;

            if (ok)
                if (MarketSeries.Close[index - 2] < MarketSeries.High[index - 3])
                    if (MarketSeries.Close[index - 1] < MarketSeries.Low[index - 3])
                    {
                        lastSignal = Signals.Sell;
                        return (MarketSeries.High[index] + ATR.Result[index]);
                    }

            return (double.NaN);
        }

        private double BuySignal(int index)
        {
            bool ok = true;

            if (Sensitivity > 2)
                if (MarketSeries.Low[index - 6] <= MarketSeries.Low[index - 5])
                    ok = false;

            if (Sensitivity > 1)
                if (MarketSeries.Low[index - 5] <= MarketSeries.Low[index - 4])
                    ok = false;

            if (Sensitivity > 0)
                if (MarketSeries.Low[index - 4] <= MarketSeries.Low[index - 3])
                    ok = false;

            if (ok)
                if (MarketSeries.Close[index - 2] > MarketSeries.Low[index - 3])
                    if (MarketSeries.Close[index - 1] > MarketSeries.High[index - 3])
                    {
                        lastSignal = Signals.Buy;
                        return (MarketSeries.Low[index] - ATR.Result[index]);
                    }

            return (double.NaN);
        }

        private bool NewBar(int index)
        {
            if (lastTime != MarketSeries.OpenTime[index])
            {
                lastTime = MarketSeries.OpenTime[index];
                return true;
            }

            return false;
        }
    }
}


VM
vmalan95

Joined on 06.10.2021

  • Distribution: Free
  • Language: C#
  • Trading platform: cTrader Automate
  • File name: ScalperSignal.algo
  • Rating: 0
  • Installs: 2400
Comments
Log in to add a comment.
No comments found.