Error - Array out of Range While converting MQL4 Indicator to MQL5 EA Function

 

Any help will be highly appreciated. Error at the following line of code.

Thanks in Advance

            MinorSwingHigh[i+PeriodsInMinorSwing] = aMyRates[(i + PeriodsInMinorSwing)].high;
//+--------------------------------------------------------------------------------------+
//| SimpleTest.mq5
//| EA to test codes
//+--------------------------------------------------------------------------------------+
#define   Ask (double)SymbolInfoDouble(Symbol(),SYMBOL_ASK)
#define   Bid (double)SymbolInfoDouble(Symbol(),SYMBOL_BID)

//#include <Trade\Trade.mqh>
//CTrade   myTrade;      // Instance of MQL5 CTrade Class

#include <Custom\iFx Utility.mqh>
//#include <Custom\iFx DrawObject.mqh>
//#include <Custom\iFx CandlePattern.mqh>
//#include <Custom\iFx GlobalVariable.mqh>
//#include <Custom\iFx Strategy MATrend.mqh>
//#include <Custom\iFx Strategy MACDCross.mqh>

int MajorSwing_Size     = 3;   // Candle OpenClose Diff in Pips ???
int PeriodsInMajorSwing = 13;  // No of Candles to look for Major Swing
int MinorSwing_Size     = 1;   // Candle OpenClose Diff in Pips ???
int PeriodsInMinorSwing = 5;   // No of Candles to look for Minor Swing

double MajorSwingHigh[];
double MinorSwingHigh[];
double MajorSwingLow[];
double MinorSwingLow[];

//+--------------------------------------------------------------------------------------+
//| Expert initialization function
//+--------------------------------------------------------------------------------------+
int OnInit()
  {
    Print("Simple Test EA Started");
    hMAMedium_DEAL = iMA(Symbol(),timeFrame_Deal,MAPeriod_Medium,0,ma_Mode,PRICE_CLOSE);
    if(hMAMedium_DEAL == INVALID_HANDLE)     //--- if the handle is not created
      {
        PrintFormat("Failed to create handle for iMA Short on TimeFrame %s, error code %d",
                    EnumToString(timeFrame_Deal),
                    GetLastError());
      }
    return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------------+
//| Expert deinitialization function
//+--------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
    Print("Simple Test EA Stopped");   
  }
//+--------------------------------------------------------------------------------------+
//| Expert tick function
//+--------------------------------------------------------------------------------------+
void OnTick()
  {
    if(CheckNEW_Candle())
      {
        // test by Printing Array Values
        Get_SwingHighLow();
        Print("Previous Minor Swing High [",MinorSwingHigh[1],"]");
        Print("Previous Major Swing High [",MajorSwingHigh[1],"]");
        Print("Previous Minor Swing Low  [",MinorSwingLow[1],"]");
        Print("Previous Major Swing Low  [",MajorSwingLow[1],"]");
      }
  }
//+--------------------------------------------------------------------------------------+

//+--------------------------------------------------------------------------------------+
//| Calculate Swing High & Lows in previous BARS_ToLookBack [500] and save into Array
//+--------------------------------------------------------------------------------------+
void Get_SwingHighLow()
  {
    int limit = Bars(Symbol(),timeFrame_Deal);
    if(limit == 0)
      {
        if(BARS_ToLookBack >= MAPeriod_Medium)  // BARS_ToLookBack variable = 500
          {
            limit -= BARS_ToLookBack;
            Print("Limit is ",limit);
          }
        else
          {
            limit -= MAPeriod_Medium;
            Print("Limit is ",limit);
          }
      }
    Print("Limit is ",limit); // is shows 20098 bars on EA run
    // array for HISTORY of the price, volumes and spread
    MqlRates aMyRates[];
    ArraySetAsSeries(aMyRates,true);
    //CopyRates(Symbol(),PERIOD_M15,1,limit,aMyRates);
    if(CopyRates(Symbol(),PERIOD_M15,0,limit,aMyRates) < 0)
      {
        Alert("Error copying myRates history " + GetLastError());
        return;
      }
    ArraySetAsSeries(MajorSwingHigh,true);
    ArraySetAsSeries(MinorSwingHigh,true);
    ArraySetAsSeries(MajorSwingLow,true);
    ArraySetAsSeries(MinorSwingLow,true);
    double MAMedium[];
    ArraySetAsSeries(MAMedium,true);
    GetArray_Value(hMAMedium_DEAL,0,0,limit,MAMedium);
    
    for(int i = 1; i < limit; i++)
      {
        // LOGIC for Minor Swing High
        if(iHighest(Symbol(),PERIOD_M15,MODE_HIGH,(PeriodsInMinorSwing*2),i)
           == i + PeriodsInMinorSwing)
          {
            MinorSwingHigh[i+PeriodsInMinorSwing] = aMyRates[(i + PeriodsInMinorSwing)].high;
          }
        // LOGIC for Major Swing High
        if(iHighest(Symbol(),PERIOD_M15,MODE_HIGH,(PeriodsInMajorSwing*2),i)
           == i + PeriodsInMajorSwing)
          {
            MajorSwingHigh[i+PeriodsInMajorSwing] = aMyRates[(i + PeriodsInMajorSwing)].high;
          }
        // LOGIC for Minor Swing Low
        if(iLowest(Symbol(),PERIOD_M15,MODE_LOW,(PeriodsInMinorSwing*2),i)
           == i + PeriodsInMinorSwing)
          {
            MinorSwingLow[i+PeriodsInMinorSwing] = aMyRates[(i + PeriodsInMinorSwing)].low;
          }
        // LOGIC for Major Swing Low
        if(iLowest(Symbol(),PERIOD_M15,MODE_LOW,(PeriodsInMajorSwing*2),i)
           == i + PeriodsInMajorSwing)
          {
            MajorSwingLow[i+PeriodsInMajorSwing] = aMyRates[(i + PeriodsInMajorSwing)].low;
          }
      }
  }