/// <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); } }