System built-in iGator() function is wrong !!!

 

look at the code,  please note that the parameters is "13,9,9,6,5,3".

//--- paramters is not "13,8,8,5,5,3", is "13,9,9,6,5,3".
   int handle = iGator(_Symbol, _Period, 13,9,9,6,5,3,MODE_SMMA,PRICE_MEDIAN);
   double gator[];
   ArraySetAsSeries(gator,true);
   CopyBuffer(handle, 0, 0, 10, gator);
   Print("System built-in gator:");
   ArrayPrint(gator);
   
   int handle1 = iCustom(_Symbol, _Period, "Examples\\Gator", 13,9,9,6,5,3,MODE_SMMA,PRICE_MEDIAN);
   double gator1[];
   ArraySetAsSeries(gator1,true);
   CopyBuffer(handle1, 0, 0, 10, gator1);
   Print("examples gator:");
   ArrayPrint(gator1);
   
   int handle2 = iCustom(_Symbol, _Period, "Examples\\Gator_2", 13,9,9,6,5,3,MODE_SMMA,PRICE_MEDIAN);
   double gator2[];
   ArraySetAsSeries(gator2,true);
   CopyBuffer(handle2, 0, 0, 10, gator2);
   Print("examples gator_2:");
   ArrayPrint(gator2);

Use it on EURUSD and the result is :

2021.08.10 14:11:24.442 test (EURUSD,D1)        System built-in gator:
2021.08.10 14:11:24.442 test (EURUSD,D1)        0.00098 0.00125 0.00209 0.00308 0.00413 0.00477 0.00519 0.00557 0.00572 0.00601
2021.08.10 14:11:24.552 test (EURUSD,D1)        examples gator:
2021.08.10 14:11:24.552 test (EURUSD,D1)        0.00125 0.00209 0.00308 0.00413 0.00477 0.00519 0.00557 0.00572 0.00601 0.00600
2021.08.10 14:11:24.662 test (EURUSD,D1)        examples gator_2:
2021.08.10 14:11:24.663 test (EURUSD,D1)        0.00125 0.00209 0.00308 0.00413 0.00477 0.00519 0.00557 0.00572 0.00601 0.00600

We can see the result of iGator() is  shifted. And if we try to add system built-in gator indicator  to EURUSD Chart. And see Data Window, the result is:

It also tell us system built-in iGator() function is wrong !!!


 
Yu Zhang:

look at the code,  please note that the parameters is "13,9,9,6,5,3".

Use it on EURUSD and the result is :

We can see the result of iGator() is  shifted. And if we try to add system built-in gator indicator  to EURUSD Chart. And see Data Window, the result is:

It also tell us system built-in iGator() function is wrong !!!


You compare the parameters you use 13,9,9 with 13,9,5. Who is wrong?

 

Perhaps you should read the manual, especially the examples.
   How To Ask Questions The Smart Way. (2004
      How To Interpret Answers.
         RTFM and STFW: How To Tell You've Seriously Screwed Up.

They all (including iCustom) return a handle (an int). You get that in OnInit. In OnTick/OnCalculate (after the indicator has updated its buffers), you use the handle, shift and count to get the data.
          Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
          Timeseries and Indicators Access / CopyBuffer - Reference on algorithmic/automated trading language for MetaTrader 5
          How to start with MQL5 - General - MQL5 programming forum - Page 3 #22 (2020.03.08)
          How to start with MQL5 - MetaTrader 5 - General - MQL5 programming forum - Page 7 #61 (2020.07.05)
          How to call indicators in MQL5 - MQL5 Articles (12 March 2010

 
Roberto Jacobs:

You compare the parameters you use 13,9,9 with 13,9,5. Who is wrong?

The picture (13,9,5) means "13,9,9,6,5,3".

 
William Roeder:

Perhaps you should read the manual, especially the examples.
   How To Ask Questions The Smart Way. (2004
      How To Interpret Answers.
         RTFM and STFW: How To Tell You've Seriously Screwed Up.

They all (including iCustom) return a handle (an int). You get that in OnInit. In OnTick/OnCalculate (after the indicator has updated its buffers), you use the handle, shift and count to get the data.
          Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
          Timeseries and Indicators Access / CopyBuffer - Reference on algorithmic/automated trading language for MetaTrader 5
          How to start with MQL5 - General - MQL5 programming forum - Page 3 #22 (2020.03.08)
          How to start with MQL5 - MetaTrader 5 - General - MQL5 programming forum - Page 7 #61 (2020.07.05)
          How to call indicators in MQL5 - MQL5 Articles (12 March 2010

It is none of them business, just some bug on built-in function.

 
Yu Zhang:

It is none of them business, just some bug on built-in function.

Fix your code and all will be correct.
 

I have the same issue when using iGator mql5 call with error when changing parameters


The bug happens when I change the Teeth Shift

//+------------------------------------------------------------------+
//|                                                        Gator.mq5 |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2000-2025, MetaQuotes Ltd."
#property link        "https://www.mql5.com"
#property description "Gator Oscillator"
#property description "example of bug on shift of teeth"
//********************************************************************
//********************************************************************
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_plots   2
#property indicator_type1   DRAW_COLOR_HISTOGRAM
#property indicator_type2   DRAW_COLOR_HISTOGRAM
#property indicator_color1  Green,Red
#property indicator_color2  Green,Red
#property indicator_width1  2
#property indicator_width2  2
#property indicator_label1  "Gator Upper"
#property indicator_label2  "Gator Lower"
//--- input parameters
input int                InpJawsPeriod=25;               // Jaws period
input int                InpJawsShift=16;                 // Jaws shift
input int                InpTeethPeriod=16;               // Teeth period
input int                InpTeethShift=6;                // Teeth shift (bug here)
input int                InpLipsPeriod=5;                // Lips period
input int                InpLipsShift=3;                 // Lips shift
input ENUM_MA_METHOD     InpMAMethod=MODE_SMMA;          // Moving average method
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_MEDIAN;   // Applied price
//--- indicator buffers
double                   ExtUpperBuffer[];
double                   ExtUpColorsBuffer[];
double                   ExtLowerBuffer[];
double                   ExtLoColorsBuffer[];
int                      ExtHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtUpperBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtUpColorsBuffer,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,ExtLowerBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,ExtLoColorsBuffer,INDICATOR_COLOR_INDEX);
//--- set indicator digits
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpTeethShift+InpTeethPeriod);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpLipsShift+InpLipsPeriod);
//--- line shifts when drawing
   PlotIndexSetInteger(0,PLOT_SHIFT,InpTeethShift);
   PlotIndexSetInteger(1,PLOT_SHIFT,InpLipsShift);
//--- name for indicator subwindow label
   string short_name=StringFormat("Gator(%d,%d,%d)",InpJawsPeriod,InpTeethPeriod,InpLipsPeriod);
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
//--- sets drawing line empty value
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);

// bug is here:
   ExtHandle = iGator(
                  _Symbol,
                  PERIOD_CURRENT,
                  InpJawsPeriod,
                  InpJawsShift,
                  InpTeethPeriod,
                  InpTeethShift,
                  InpLipsPeriod,
                  InpLipsShift,
                  InpMAMethod,
                  InpAppliedPrice
               );
   if(ExtHandle == INVALID_HANDLE)
     {
      printf("Error=%d cannot create iGator",GetLastError());
      return INIT_FAILED;
     }
   return INIT_SUCCEEDED;
  }
//+------------------------------------------------------------------+
//| Gator Oscillator                                                 |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   CopyBuffer(ExtHandle,0,0,rates_total,ExtUpperBuffer);
   CopyBuffer(ExtHandle,1,0,rates_total,ExtUpColorsBuffer);
   CopyBuffer(ExtHandle,2,0,rates_total,ExtLowerBuffer);
   CopyBuffer(ExtHandle,3,0,rates_total,ExtLoColorsBuffer);
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+