Category Other  Published on 13/12/2023

A1T2

Description

EDIT Updated better filtering. Based on the Nightmare , This is more sensible version with some change of trend indication 

the defaults I have set are for AUD/USD 5 min 

See end of code for sound file mod , Build with net6 


using cAlgo.API;
using cAlgo.API.Indicators;
using System;
namespace cAlgo
 {

    [Indicator(IsOverlay = true, AutoRescale = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    [Cloud ("Macd", "Signal", Opacity = 1, FirstColor = "66FFFF00", SecondColor = "77AA00FF")]
    [Cloud ("CX1", "CX2", Opacity = 1, FirstColor = "2200FF00", SecondColor = "33FF0000")]
    public class A1T2 : Indicator
    {
        public DataSeries Source { get; set; }
        [Parameter ("X Signal" , DefaultValue = XA.MACD, Group = "X Signal" ) ] 
        public XA XAX {get;set;}
        public enum XA {MACD,MACDCX,CX,OFF}
        
        [Parameter ("Bars" , DefaultValue = BS.ON, Group = "X Signal") ]
        public BS BARS {get;set;}
        public enum BS {ON,OFF}
        
        [Parameter ("Dots" , DefaultValue = DO.ON, Group = "X Signal") ]
        public DO DOTS {get;set;}
        public enum DO {ON,OFF}
        
        [Parameter ("Tone" , DefaultValue = TO.ON, Group = "X Signal") ]
        public TO TONE {get;set;}
        public enum TO {ON,OFF}
        
        [Parameter ("Color Bars" , DefaultValue = CBS.ON, Group = "X Signal") ]
        public CBS CBARS {get;set;}
        public enum CBS {ON,Filtered,OFF}

        [Parameter("P 1",Group = "Moving Average", DefaultValue = 8)]
        public int P1 { get; set; }

        [Parameter("P 2",Group = "Moving Average", DefaultValue = 32)]
        public int P2 { get; set; }

        [Parameter("P 3",Group = "Moving Average", DefaultValue = 96)]
        public int P3 { get; set; }

        [Parameter("CX 1",Group = "Moving Average", DefaultValue = 8)]
        public int CX11 { get; set; }

        [Parameter("CX 2",Group = "Moving Average", DefaultValue = 32)]
        public int CX12 { get; set; }

        [Parameter("ATR P 14",Group = "ATR Bands", DefaultValue = 8)]
        public int ATRP { get; set; }

        [Parameter("Band Width",Group = "ATR Bands", DefaultValue = 30)]
        public int BW { get; set; }

        [Parameter("ATR Noise 20 / Filtered",Group = "ATR Bands", DefaultValue = 30)]
        public int ABX { get; set; }
        
        [Parameter("RSI Periods 14",Group = "RSI", DefaultValue = 8)]
        public int RSIP { get; set; }

        [Parameter("RSI React 30 = 50 + 30 and 50 - 30, 0 = 50 ",Group = "RSI", DefaultValue = 5)]
        public int RR { get; set; }

        [Parameter("MACD Long 26" , DefaultValue = 32, Group = "MACD Cloud" )]
        public int MDL { get; set; }

        [Parameter("MACD Short 12" , DefaultValue = 8, Group = "MACD Cloud" )]
        public int MDS { get; set; }

        [Parameter("MACD Signal 9" , DefaultValue = 8, Group = "MACD Cloud" )]
        public int MDP { get; set; }

        [Parameter("MACD Scale" , DefaultValue = 3, Group = "MACD Cloud" )]
        public int MD1 { get; set; } 

        [Parameter("MACD Cloud" , DefaultValue = MACDCloud.Yes, Group = "MACD Cloud" )]
        public MACDCloud MACC { get; set; }
        public enum MACDCloud {Yes,No}

        [Output("MA1U", LineColor = "EE00CC77", PlotType = PlotType.DiscontinuousLine, Thickness = 1)]
        public IndicatorDataSeries M1U { get; set; }

        [Output("MA1D", LineColor = "EEFF7700", PlotType = PlotType.DiscontinuousLine, Thickness = 1)]
        public IndicatorDataSeries M1D { get; set; }

        [Output("MA2", LineColor = "99AA00FF", PlotType = PlotType.Line, Thickness = 1)]
        public IndicatorDataSeries MA1 { get; set; }

        [Output("MA3", LineColor = "66FFFF00", PlotType = PlotType.Line, Thickness = 1)]
        public IndicatorDataSeries MA3 { get; set; }

        [Output("CX1", LineColor = "01111111", PlotType = PlotType.Line, Thickness = 1)]
        public IndicatorDataSeries Cx1 { get; set; }

        [Output("CX2", LineColor = "01111111", PlotType = PlotType.Line, Thickness = 1)]
        public IndicatorDataSeries Cx2 { get; set; }

        [Output("Up ATR cc" , LineColor = "6600FFBB" , PlotType = PlotType.DiscontinuousLine, Thickness = 1 )]
        public IndicatorDataSeries UpATR1 { get; set; }

        [Output("Dn ATR ff" , LineColor = "77FF7700" , PlotType = PlotType.DiscontinuousLine, Thickness = 1 )]
        public IndicatorDataSeries DnATR1 { get; set; }

        [Output("Up ATR 2 ee" , LineColor = "6600FFBB" , PlotType = PlotType.DiscontinuousLine, Thickness = 1 )]
        public IndicatorDataSeries UpATR2 { get; set; }

        [Output("Dn ATR 2 cc" , LineColor = "77FF7700" , PlotType = PlotType.DiscontinuousLine, Thickness = 1 )]
        public IndicatorDataSeries DnATR2 { get; set; }

        [Output("Macd"  ,LineColor ="11111111")]
        public IndicatorDataSeries Macd {get;set;}

        [Output("Signal",LineColor ="11111111")]
        public IndicatorDataSeries Signal {get;set;}

        private MacdCrossOver MACDC; 
        MovingAverage MA;
        MovingAverage X1;
        MovingAverage X2;
        MovingAverage X3;
        MovingAverage CC1;
        MovingAverage CC2;
        AverageTrueRange ATR;
        RelativeStrengthIndex RSI;

        protected override void Initialize()
        {
            MA = Indicators.WellesWilderSmoothing(Bars.ClosePrices,14);
            MACDC = Indicators.MacdCrossOver(MDL,MDS,MDP);
            X1 = Indicators.MovingAverage(Source, P1, MovingAverageType.WilderSmoothing);
            X2 = Indicators.MovingAverage(Source, P2, MovingAverageType.WilderSmoothing);
            X3 = Indicators.MovingAverage(Source, P3, MovingAverageType.WilderSmoothing);
            CC1 = Indicators.MovingAverage(Source, CX11, MovingAverageType.WilderSmoothing);
            CC2 = Indicators.MovingAverage(Source, CX12, MovingAverageType.WilderSmoothing);
            ATR = Indicators.AverageTrueRange (ATRP,MovingAverageType.Triangular);
            RSI = Indicators.RelativeStrengthIndex (Source,RSIP);
        }


        public override void Calculate(int index)
        {
          if (index != Bars.Count - 1)
          return;
            {
              var M1  = X1.Result.Last (1);
              var M2  = X2.Result.Last (1);
              var M3  = X1.Result.Last (2);

              var C1 = CC1.Result.Last (1);
              var C2 = CC2.Result.Last (1);
              var C3 = CC1.Result.Last (2);
              var C4 = CC2.Result.Last (2);
              var EE = (Bars.HighPrices.Last(1) - Bars.LowPrices.Last(1)) ;
              var EU = Bars.HighPrices[index] + EE*2;
              var ED = Bars.LowPrices[index] - EE*2;

              var B1  = Bars.ClosePrices.Last(1);
              var A10 = ATR.Result.Last(1);
              var AU1 = M2 + ((A10/10)*BW);
              var AD1 = M2 - ((A10/10)*BW);
              var AU2 = M2 + (((A10/10)*BW)*2);
              var AD2 = M2 - (((A10/10)*BW)*2);
              var A11 = ATR.Result.Last(0)*100000;
              var A12 = ATR.Result.Last(1)*100000;
              var R11 = RSI.Result.Last(0);
              var R12 = RSI.Result.Last(1);
              var R1U = 50 + RR;
              var R1D = 50 - RR;

              var X = MA.Result.Last(1);
              var M = MACDC.MACD[index-1] * ((X*MD1)/X)+X;
              var S = MACDC.Signal[index-1] * ((X*MD1)/X)+X;
              var MACDL1 = MACDC.MACD.Last(0);
              var MACDL2 = MACDC.MACD.Last(1);
              var Signl1 = MACDC.Signal.Last(0);
              var Signl2 = MACDC.Signal.Last(1);
              Macd[index-1] = M;
              Signal[index-1] = S;
              MA1 [index-1] = X2  .Result[index-1];
              MA3 [index-1] = X3  .Result[index-1];
              Cx1 [index-1] = CC1 .Result[index];
              Cx2 [index] = CC2 .Result[index];
              DnATR1[index-1] = AD1;
              UpATR1[index-1] = AU1;
              UpATR2[index-1] = AU2;
              DnATR2[index-1] = AD2;

               {

               if ( M1 > M3 )
                  M1U[index-1] = X1.Result[index];

               if ( M1 < M3 )
                  M1D[index-1] = X1.Result[index];
                  
           if (CBARS==CBS.ON)
               {
               if ( B1 > M1 )
               {
                  Chart.SetBarFillColor ( index-1 , "0100CC77" );
                  Chart.SetBarOutlineColor ( index-1 , "CC00CC77" );
               }

               if ( B1 < M1 )
               {
                  Chart.SetBarFillColor ( index-1 , "01FF7700" );
                  Chart.SetBarOutlineColor ( index-1 , "DDFF7700" );
               }
               }
               
           if (CBARS==CBS.Filtered)
               {
               if ( (B1 > M1) && ( A11 > ABX) )
               {
                  Chart.SetBarFillColor ( index-1 , "0100CC77" );
                  Chart.SetBarOutlineColor ( index-1 , "CC00CC77" );
               }

               if ( (B1 < M1) && ( A11 > ABX) )
               {
                  Chart.SetBarFillColor ( index-1 , "01FF7700" );
                  Chart.SetBarOutlineColor ( index-1 , "DDFF7700" );
               }
               }
               }
           if ( (XAX == XA.CX) && (A11>=ABX) && (A11 > A12) )
                 {
                 if ( (C1 > C2) && (C3 < C4) && (R11 > R1U) && (R11 > R12) )
                    {
                    if (BARS==BS.ON)
                    {
                    Chart.SetBarColor ( index-1 , "FF00FF00" );
                    }
                    if (DOTS==DO.ON)
                    {
                    Chart.DrawIcon ( "  Up  " + index , ChartIconType.Circle , index-1 , ED , "FF00FF00" );
                    }
                    if (TONE==TO.ON)
                    {
                    BeginInvokeOnMainThread(() =>
                    {Notifications.PlaySound(@"‪C:\Users\maxed\cAlgo Ding\DnDing.mp3");});
                    }
                    }

            else if ( (C1 < C2) && (C3 > C4) && (R11 < R1D) && (R11 < R12) )
                    {
                    if (BARS==BS.ON)
                    {
                    Chart.SetBarColor ( index-1 , "FFFF3300" );
                    }
                    if (DOTS==DO.ON)
                    {
                    Chart.DrawIcon ( " Down " + index , ChartIconType.Circle , index-1 , EU , "FFFF3300" );
                    }
                    if (TONE==TO.ON)
                    {
                    BeginInvokeOnMainThread(() =>
                    {Notifications.PlaySound(@"C:\Users\maxed\cAlgo Ding\DnDing.mp3");});
                    }
                    }
                 }
                 
           if ( (XAX == XA.MACD) && (A11>=ABX) && (A11 > A12) )
                 {
                 if ( (MACDL2 < Signl2) && (MACDL1 > Signl1) && (R11 > R1U) && (R11 > R12) )
                    {
                    if (BARS==BS.ON)
                    {
                    Chart.SetBarColor ( index-1 , "FF00FF00" );
                    }
                    if (DOTS==DO.ON)
                    {
                    Chart.DrawIcon ( "  Up  " + index , ChartIconType.Circle , index-1 , ED , "FF00FF00" );
                    }
                    if (TONE==TO.ON)
                    {
                    BeginInvokeOnMainThread(() =>
                    {Notifications.PlaySound(@"‪C:\Users\maxed\cAlgo Ding\DnDing.mp3");});
                    }
                    }

            else if ( (MACDL2 > Signl2) && (MACDL1 < Signl1) && (R11 < R1D) && (R11 < R12) )
                    {
                    if (BARS==BS.ON)
                    {
                    Chart.SetBarColor ( index-1 , "FFFF3300" );
                    }
                    if (DOTS==DO.ON)
                    {
                    Chart.DrawIcon ( " Down " + index , ChartIconType.Circle , index-1 , EU , "FFFF3300" );
                    }
                    if (TONE==TO.ON)
                    {
                    BeginInvokeOnMainThread(() =>
                    {Notifications.PlaySound(@"C:\Users\maxed\cAlgo Ding\DnDing.mp3");});
                    }
                    }
                 }
           if ( (XAX == XA.MACDCX) && (A11>=ABX) && (A11 > A12) )
                 {
                 if ( (C1 > C2) && (MACDL2 < Signl2) && (MACDL1 > Signl1) && (R11 > R1U) )
                    {
                    if (BARS==BS.ON)
                    {
                    Chart.SetBarColor ( index-1 , "FF00FF00" );
                    }
                    if (DOTS==DO.ON)
                    {
                    Chart.DrawIcon ( "  Up  " + index , ChartIconType.Circle , index-1 , ED , "FF00FF00" );
                    }
                    if (TONE==TO.ON)
                    {
                    BeginInvokeOnMainThread(() =>
                    {Notifications.PlaySound(@"‪C:\Users\maxed\cAlgo Ding\DnDing.mp3");});
                    }
                    }

            else if ( (C1 < C2) && (MACDL2 > Signl2) && (MACDL1 < Signl1) && (R11 < R1D) )
                    {
                    if (BARS==BS.ON)
                    {
                    Chart.SetBarColor ( index-1 , "FFFF3300" );
                    }
                    if (DOTS==DO.ON)
                    {
                    Chart.DrawIcon ( " Down " + index , ChartIconType.Circle , index-1 , EU , "FFFF3300" );
                    }
                    if (TONE==TO.ON)
                    {
                    BeginInvokeOnMainThread(() =>
                    {Notifications.PlaySound(@"C:\Users\maxed\cAlgo Ding\DnDing.mp3");});
                    }
                    }
                 }   // Use for standard MS tone or make your own sound file eg; Audacity / Generate sine wave....
             }      //  @"C:\Windows\Media\Windows Information Bar.wav"
         }
     }
 }

VE
VEI5S6C4OUNT0

Joined on 06.12.2022

  • Distribution: Free
  • Language: C#
  • Trading platform: cTrader Automate
  • File name: A1T2.algo
  • Rating: 5
  • Installs: 523
  • Modified: 13/12/2023 22:23
Comments
Log in to add a comment.
No comments found.