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[]) {   int to_copy = (rates_total - prev_calculated) * (prev_calculated < rates_total) + (1) * (prev_calculated == rates_total);   CopyBuffer(RSIHandle, 0, 0, to_copy, ExtRSIBuffer); //--- ZigZagExtremaOnBuffer.mqh calculation function   ZZOnBuffer(rates_total, prev_calculated, ExtRSIBuffer, ExtOutputBuffer, InpSearchMode, InpDepth, InpDeviation, InpBackstep);   return(rates_total); }
To get only highs or only lows there is an additional input of type EnSearchmode:
//+------------------------------------------------------------------+ //| ZigZag calculation                                              | //+------------------------------------------------------------------+ int ZZOnBuffer(const int rates,              //On a non indicator array, Arraysize can be used as 'rates_total'               const int calculated,               const double &src[],        //source buffer for calculation               double &dst[],              //destination buffer for calculation buffer               EnSearchMode mode_search,  //Set output buffer to High only, Low only or both in               const int &depth,               const int &deviation,               const int &backstep          //ZZ input parameters               ) {      ...                         ...
Only Highs:
Only Lows:
Both highs and lows in one buffer:
It is not restricted to indicator buffers, you can use it on any array, just set “rates” to the length of the array instead of rates_total.
The absolute minimum number of bars that this function can hadle is 100. So although you can use this calculation function on an array of a few hundred bars, in indicator buffers, rates_total is usually a few thousand.