/// <summary>
        /// Viene generato all'avvio dell'indicatore, si inizializza l'indicatore
        /// </summary>
        protected override void Initialize()
        {
            // --> Stampo nei log la versione corrente
            Print("{0} : {1}", NAME, VERSION);

            DeTrended = Indicators.DetrendedPriceOscillator(Bars.ClosePrices, Period, MAType);
            EMASmooth = Indicators.ExponentialMovingAverage(DeTrended.Result, Smooth);
            MA        = Indicators.MovingAverage(Bars.ClosePrices, Period, MAType);
            SAR       = Indicators.ParabolicSAR(0.02, 0.2);
            ATR       = Indicators.AverageTrueRange(Period, MAType);

            K = Symbol.PipsToDigits(K);

            // --> Inizializzo i parametri grafici
            _updateCandleSize();

            // --> Ridisegno tutte le candele ogni volta che cambia lo zoom
            Chart.ZoomChanged += _repaint;
        }
        public override void Calculate(int index)
        {
            // --> Abbiamo bisogno di 3 candele per essere sicuri
            if (index < 3)
            {
                return;
            }

            // --> Gli indicatori che ci indicano il trend e il suo movimento
            DetrendedPriceOscillator Faster = Indicators.DetrendedPriceOscillator(Source, Period, MAType);
            DetrendedPriceOscillator Slower = Indicators.DetrendedPriceOscillator(Source, Period * 2, MAType);
            AverageTrueRange         ATR    = Indicators.AverageTrueRange(ATRPeriod, ATRMAType);

            // --> Imposto la logica della strategia
            bool LongFilterSlow = Slower.Result.LastValue > K;
            bool LongFilterFast = Faster.Result.LastValue > K;
            bool LongCross      = Faster.Result.Last(1) > K && Faster.Result.Last(2) < -K && Faster.Result.Last(3) <= -K;

            bool ShortFilterSlow = Slower.Result.LastValue < -K;
            bool ShortFilterFast = Faster.Result.LastValue < -K;
            bool ShortCross      = Faster.Result.Last(1) < -K && Faster.Result.Last(2) > K && Faster.Result.Last(3) >= K;

            bool LongCrossSlower  = Slower.Result.Last(1) > K && Slower.Result.Last(2) < -K;
            bool ShortCrossSlower = Slower.Result.Last(1) < -K && Slower.Result.Last(2) > K;

            string SignalName = String.Format("{0}-{1}", NAME, index);

            // --> Se è attivato l'ATR con il periodo superiore a zero allora ne controllo la condizione
            if (ATRPeriod > 0 && ATR.Result.LastValue <= ATRK)
            {
                return;
            }

            if ((LongFilterFast && LongCrossSlower) || (LongFilterSlow && LongCross))
            {
                Chart.DrawIcon(SignalName, ChartIconType.UpArrow, index, Bars.LowPrices[index], ColorLong);
            }
            else if ((ShortFilterFast && ShortCrossSlower) || (ShortFilterSlow && ShortCross))
            {
                Chart.DrawIcon(SignalName, ChartIconType.DownArrow, index, Bars.HighPrices[index], ColorShort);
            }
        }