Array out of range

 

I have coded a multi symbols expert and a loop for checking the conditions which one of them is dt cross. The problem is it's working most of the time but sometimes sends an error array out of range would somebody please kindly look at my code and let me know what I'm doing wrong, I also break the code  to  smaller piece where it  encounters the problem.


if(Bars(nameArray[i],PERIOD_W1)>13)
        {
         DT3D1_Handle=iCustom(nameAr[i],PERIOD_D1,"dtoscillator",21,13,8,8);
         ArraySetAsSeries(DT3D1_Buffer,true);
         CopyBuffer(DT3D1_Handle,2,0,3,DT3D1_Buffer);
         DT4D1_Handle=iCustom(nameAr[i],PERIOD_D1,"dtoscillator",21,13,8,8);
         ArraySetAsSeries(DT4D1_Buffer,true);
         CopyBuffer(DT4D1_Handle,3,0,3,DT4D1_Buffer);

         DT3W1_Handle=iCustom(nameAr[i],PERIOD_W1,"dtoscillator",13,8,5,5);
         ArraySetAsSeries(DT3W1_Buffer,true);
         CopyBuffer(DT3W1_Handle,2,0,3,DT3W1_Buffer);
         DT4W1_Handle=iCustom(nameAr[i],PERIOD_W1,"dtoscillator",13,8,5,5);
         ArraySetAsSeries(DT4W1_Buffer,true);
         CopyBuffer(DT4W1_Handle,3,0,3,DT4W1_Buffer);

         if((DT3W1_Buffer[0]>DT4W1_Buffer[0] && (DT3W1_Buffer[0]<70 && DT4W1_Buffer[0]<70)) || (DT3W1_Buffer[0]<25 && DT4W1_Buffer[0]<25))
           {
            if(DT3D1_Buffer[0]>DT4D1_Buffer[0] && DT3D1_Buffer[1]< DT4D1_Buffer[1])
              {
                some code
              }
           }
        }
 
         DT3W1_Handle=iCustom(nameAr[i],PERIOD_W1,"dtoscillator",13,8,5,5);
         ArraySetAsSeries(DT3W1_Buffer,true);
         CopyBuffer(DT3W1_Handle,2,0,3,DT3W1_Buffer);
  1. You don't check your return code to verify you got the requested number of bars.
  2. 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 (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

 
William Roeder:
  1. You don't check your return code to verify you got the requested number of bars.
  2. 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 (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 2010T


Thank's for the help.

Reason: