# Were I Went Wrong?

832

Dear All,

I Edit an EA which works with BB and DEMA, I replaced DEMA as RSI, for some studyes perpous, but i get some error like,

'CopyBuffer' - no one of the overloads can be applied to the function call Bband.mq5 131 7

i am attaching the EA here,please advice me were i  went wrong, and guide me to solve it,expecing ur kind help.

```//+------------------------------------------------------------------+
//|                                                        Bband.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property version   "1.00"
//--- input parameters
input int bands_period= 20;        // Bollinger Bands period
input int rsi_period= 7;         // RSI period
input int rsi_level=50;
input int bands_shift = 0;         // Bollinger Bands shift
input double deviation= 2;         // Standard deviation
input double   Lot=1;            // Lots to trade

//--- global variables
int BolBandsHandle;                // Bolinger Bands handle
int RsiHandle;                    // RSI handle
double BBUp[],BBLow[],BBMidle[];   // dynamic arrays for numerical values of Bollinger Bands
double rsiVal[];                  // dynamic array for numerical values of Rsi
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Do we have sufficient bars to work
if(Bars(_Symbol,_Period)<60) // total number of bars is less than 60?
{
Alert("We have less than 60 bars on the chart, an Expert Advisor terminated!!");
return(-1);
}
//--- get handle of the Bollinger Bands and RSI indicators
BolBandsHandle=iBands(NULL,PERIOD_CURRENT,bands_period,bands_shift,deviation,PRICE_CLOSE);
RsiHandle=iRSI(NULL,PERIOD_CURRENT,7,PRICE_CLOSE);

//--- Check for Invalid Handle
if((BolBandsHandle<0) || (RsiHandle<0))
{
Alert("Error in creation of indicators - error: ",GetLastError(),"!!");
return(-1);
}

return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- release indicator handles
IndicatorRelease(BolBandsHandle);
IndicatorRelease(RsiHandle);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//--- we will use the static Old_Time variable to serve the bar time.
//--- at each OnTick execution we will check the current bar time with the saved one.
//--- if the bar time isn't equal to the saved time, it indicates that we have a new tick.

static datetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;

//--- copying the last bar time to the element New_Time[0]
int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, the data has been copied successfully
{
if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time
{
IsNewBar=true;   // if it isn't a first call, the new bar has appeared
if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
Old_Time=New_Time[0];            // saving bar time
}
}
else
{
Alert("Error in copying historical times data, error =",GetLastError());
ResetLastError();
return;
}

//--- EA should only check for new trade if we have a new bar
if(IsNewBar==false)
{
return;
}

//--- do we have enough bars to work with
int Mybars=Bars(_Symbol,_Period);
if(Mybars<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}

MqlRates mrate[];          // To be used to store the prices, volumes and spread of each bar

/*
Let's make sure our arrays values for the Rates and Indicators
is stored serially similar to the timeseries array
*/

// the rates arrays
ArraySetAsSeries(mrate,true);
ArraySetAsSeries(rsiVal,true);
// the indicator arrays
ArraySetAsSeries(BBUp,true);
ArraySetAsSeries(BBLow,true);
ArraySetAsSeries(BBMidle,true);

//--- Get the details of the latest 3 bars
if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
{
Alert("Error copying rates/history data - error:",GetLastError(),"!!");
return;
}

//--- Copy the new values of our indicators to buffers (arrays) using the handle
if(CopyBuffer(BolBandsHandle,0,0,3,BBMidle)<0 || CopyBuffer(BolBandsHandle,1,0,3,BBUp)<0
|| CopyBuffer(BolBandsHandle,2,0,3,BBLow)<0)
{
Alert("Error copying Bollinger Bands indicator Buffers - error:",GetLastError(),"!!");
return;
}

if(CopyBuffer(RsiHandle,0,0,rsiVal)<0)
{
Alert("Error copying RSI indicator buffer - error:",GetLastError());
return;
}

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);   // Bid price

//--- Declare bool type variables to hold our Buy and Sell Conditions
bool Buy_Condition =(mrate[1].close > BBLow[1] && mrate[1].open < BBLow[1] &&  // White (bull) candle crossed the Lower Band from below to above
rsiVal[0]>rsiVal[1] && rsiVal[1]>rsiVal[2]);          // and RSI is growing up

bool Sell_Condition = (mrate[1].close < BBUp[1] && mrate[1].open > BBUp[1] &&  // Black (bear) candle crossed the Upper Band from above to below
rsiVal[0]<rsiVal[1] && rsiVal[1]<rsiVal[2]);        // and RSI is falling down

bool Buy_Close=(mrate[1].close<BBUp[1] && mrate[1].open>BBUp[1]);              // Black candle crossed the Upper Band from above to below

bool Sell_Close=(mrate[1].close>BBLow[1] && mrate[1].open<BBLow[1]);           // White candle crossed the Lower Band from below to above

if(Buy_Condition && !PositionSelect(_Symbol))    // Open long position
{                                              // RSI is growing up
LongPositionOpen();                           // and white candle crossed the Lower Band from below to above
}

if(Sell_Condition && !PositionSelect(_Symbol))   // Open short position
{                                              // RSI is falling down
ShortPositionOpen();                          // and Black candle crossed the Upper Band from above to below
}

if(Buy_Close && PositionSelect(_Symbol))         // Close long position
{                                              // Black candle crossed the Upper Band from above to below
LongPositionClose();
}

if(Sell_Close && PositionSelect(_Symbol))        // Close short position
{                                              // White candle crossed the Lower Band from below to above
ShortPositionClose();
}

return;
}
//+------------------------------------------------------------------+
//| Open Long position                                               |
//+------------------------------------------------------------------+
void LongPositionOpen()
{

ZeroMemory(mrequest);
ZeroMemory(mresult);

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

if(!PositionSelect(_Symbol))
{
mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
mrequest.sl = 0;                                   // Stop Loss
mrequest.tp = 0;                                   // Take Profit
mrequest.symbol = _Symbol;                         // Symbol
mrequest.volume = Lot;                             // Number of lots to trade
mrequest.magic = 0;                                // Magic Number
mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
mrequest.deviation=5;                              // Deviation from current price
OrderSend(mrequest,mresult);                       // Send order
}
}
//+------------------------------------------------------------------+
//| Open Short position                                              |
//+------------------------------------------------------------------+
void ShortPositionOpen()
{

ZeroMemory(mrequest);
ZeroMemory(mresult);

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

if(!PositionSelect(_Symbol))
{
mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
mrequest.price = NormalizeDouble(Bid,_Digits);     // Lastest Bid price
mrequest.sl = 0;                                   // Stop Loss
mrequest.tp = 0;                                   // Take Profit
mrequest.symbol = _Symbol;                         // Symbol
mrequest.volume = Lot;                             // Number of lots to trade
mrequest.magic = 0;                                // Magic Number
mrequest.type= ORDER_TYPE_SELL;                    // Sell order
mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
mrequest.deviation=5;                              // Deviation from current price
OrderSend(mrequest,mresult);                       // Send order
}
}
//+------------------------------------------------------------------+
//| Close Long position                                              |
//+------------------------------------------------------------------+
void LongPositionClose()
{

ZeroMemory(mrequest);
ZeroMemory(mresult);

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

{
mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
mrequest.price = NormalizeDouble(Bid,_Digits);     // Lastest Bid price
mrequest.sl = 0;                                   // Stop Loss
mrequest.tp = 0;                                   // Take Profit
mrequest.symbol = _Symbol;                         // Symbol
mrequest.volume = Lot;                             // Number of lots to trade
mrequest.magic = 0;                                // Magic Number
mrequest.type= ORDER_TYPE_SELL;                    // Sell order
mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
mrequest.deviation=5;                              // Deviation from current price
OrderSend(mrequest,mresult);                       // Send order
}
}
//+------------------------------------------------------------------+
//| Close Short position                                             |
//+------------------------------------------------------------------+
void ShortPositionClose()
{

ZeroMemory(mrequest);
ZeroMemory(mresult);

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
mrequest.sl = 0;                                   // Stop Loss
mrequest.tp = 0;                                   // Take Profit
mrequest.symbol = _Symbol;                         // Symbol
mrequest.volume = Lot;                             // Number of lots to trade
mrequest.magic = 0;                                // Magic Number
mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
mrequest.deviation=5;                              // Deviation from current price
OrderSend(mrequest,mresult);                       // Send order
}
}
//+------------------------------------------------------------------+
```
Suresh
2181

surubabs:

Dear All,

I Edit an EA which works with BB and DEMA, I replaced DEMA as RSI, for some studyes perpous, but i get some error like,

'CopyBuffer' - no one of the overloads can be applied to the function call Bband.mq5 131 7

i am attaching the EA here,please advice me were i  went wrong, and guide me to solve it,expecing ur kind help.

Suresh

When you have an error, click on the log and MetaEditor may show you where the error location in your code.

In your code, this is the error. You only fill 4 parameters of CopyBuffer when it should be 5.

```   if(CopyBuffer(RsiHandle,0,0,rsiVal)<0)
{```

This is the correct one

```   if(CopyBuffer(RsiHandle,0,0,3,rsiVal)<0)
{```

832

phi.nuts:

When you have an error, click on the log and MetaEditor may show you where the error location in your code.

In your code, this is the error. You only fill 4 parameters of CopyBuffer when it should be 5.

This is the correct one

Thanks a lot
832

I git stoped in an other Error

which is  'rsiVal' - invalid array access Bband.mq5 143 25

i have been looking to find out were the issue actualy, the array is working fine, there were is the issue ?

```//+------------------------------------------------------------------+
//|                                                        Bband.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property version   "1.00"
//--- input parameters
input int bands_period= 20;        // Bollinger Bands period
input int rsi_period= 7;         // RSI period
input int iRSI_Max=70;
input int iRSI_Min=30;
input int bands_shift = 0;         // Bollinger Bands shift
input double deviation= 2;         // Standard deviation
input double   Lot=1;            // Lots to trade

//--- global variables
int BolBandsHandle;                // Bolinger Bands handle
int RsiHandle;                    // RSI handle
double BBUp[],BBLow[],BBMidle[];   // dynamic arrays for numerical values of Bollinger Bands
double rsiVal[];                  // dynamic array for numerical values of Rsi
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Do we have sufficient bars to work
if(Bars(_Symbol,_Period)<60) // total number of bars is less than 60?
{
Alert("We have less than 60 bars on the chart, an Expert Advisor terminated!!");
return(-1);
}
//--- get handle of the Bollinger Bands and RSI indicators
BolBandsHandle=iBands(NULL,PERIOD_CURRENT,bands_period,bands_shift,deviation,PRICE_CLOSE);
RsiHandle=iRSI(NULL,PERIOD_CURRENT,7,PRICE_CLOSE);

//--- Check for Invalid Handle
if((BolBandsHandle<0) || (RsiHandle<0))
{
Alert("Error in creation of indicators - error: ",GetLastError(),"!!");
return(-1);
}

return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- release indicator handles
IndicatorRelease(BolBandsHandle);
IndicatorRelease(RsiHandle);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//--- we will use the static Old_Time variable to serve the bar time.
//--- at each OnTick execution we will check the current bar time with the saved one.
//--- if the bar time isn't equal to the saved time, it indicates that we have a new tick.

static datetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;

//--- copying the last bar time to the element New_Time[0]
int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, the data has been copied successfully
{
if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time
{
IsNewBar=true;   // if it isn't a first call, the new bar has appeared
if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
Old_Time=New_Time[0];            // saving bar time
}
}
else
{
Alert("Error in copying historical times data, error =",GetLastError());
ResetLastError();
return;
}

//--- EA should only check for new trade if we have a new bar
if(IsNewBar==false)
{
return;
}

//--- do we have enough bars to work with
int Mybars=Bars(_Symbol,_Period);
if(Mybars<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}

MqlRates mrate[];          // To be used to store the prices, volumes and spread of each bar

/*
Let's make sure our arrays values for the Rates and Indicators
is stored serially similar to the timeseries array
*/

// the rates arrays
ArraySetAsSeries(mrate,true);
ArraySetAsSeries(rsiVal,true);
// the indicator arrays
ArraySetAsSeries(BBUp,true);
ArraySetAsSeries(BBLow,true);
ArraySetAsSeries(BBMidle,true);

//--- Get the details of the latest 3 bars
if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
{
Alert("Error copying rates/history data - error:",GetLastError(),"!!");
return;
}

//--- Copy the new values of our indicators to buffers (arrays) using the handle
if(CopyBuffer(BolBandsHandle,0,0,3,BBMidle)<0 || CopyBuffer(BolBandsHandle,1,0,3,BBUp)<0
|| CopyBuffer(BolBandsHandle,2,0,3,BBLow)<0)
{
Alert("Error copying Bollinger Bands indicator Buffers - error:",GetLastError(),"!!");
return;
}

if(CopyBuffer(RsiHandle,0,0,3,rsiVal)<0)
{
Alert("Error copying RSI indicator buffer - error:",GetLastError());
return;
}

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);   // Bid price

//--- Declare bool type variables to hold our Buy and Sell Conditions
bool Buy_Condition =(mrate[1].close > BBLow[1] && mrate[1].open < BBLow[1] &&  // White (bull) candle crossed the Lower Band from below to above
rsiVal <= iRSI_Min && rsiVal[0]>rsiVal[1] && rsiVal[1]>rsiVal[2]);          // and RSI is growing up

bool Sell_Condition = (mrate[1].close < BBUp[1] && mrate[1].open > BBUp[1] &&  // Black (bear) candle crossed the Upper Band from above to below
rsiVal >= iRSI_Max && rsiVal[0]<rsiVal[1] && rsiVal[1]<rsiVal[2]);        // and RSI is falling down

bool Buy_Close=(mrate[1].close<BBUp[1] && mrate[1].open>BBUp[1]);              // Black candle crossed the Upper Band from above to below

bool Sell_Close=(mrate[1].close>BBLow[1] && mrate[1].open<BBLow[1]);           // White candle crossed the Lower Band from below to above

if(Buy_Condition && !PositionSelect(_Symbol))    // Open long position
{                                              // RSI is growing up
LongPositionOpen();                           // and white candle crossed the Lower Band from below to above
}

if(Sell_Condition && !PositionSelect(_Symbol))   // Open short position
{                                              // RSI is falling down
ShortPositionOpen();                          // and Black candle crossed the Upper Band from above to below
}

if(Buy_Close && PositionSelect(_Symbol))         // Close long position
{                                              // Black candle crossed the Upper Band from above to below
LongPositionClose();
}

if(Sell_Close && PositionSelect(_Symbol))        // Close short position
{                                              // White candle crossed the Lower Band from below to above
ShortPositionClose();
}

return;
}
//+------------------------------------------------------------------+
//| Open Long position                                               |
//+------------------------------------------------------------------+
void LongPositionOpen()
{

ZeroMemory(mrequest);
ZeroMemory(mresult);

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

if(!PositionSelect(_Symbol))
{
mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
mrequest.sl = 0;                                   // Stop Loss
mrequest.tp = 0;                                   // Take Profit
mrequest.symbol = _Symbol;                         // Symbol
mrequest.volume = Lot;                             // Number of lots to trade
mrequest.magic = 0;                                // Magic Number
mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
mrequest.deviation=5;                              // Deviation from current price
OrderSend(mrequest,mresult);                       // Send order
}
}
//+------------------------------------------------------------------+
//| Open Short position                                              |
//+------------------------------------------------------------------+
void ShortPositionOpen()
{

ZeroMemory(mrequest);
ZeroMemory(mresult);

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

if(!PositionSelect(_Symbol))
{
mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
mrequest.price = NormalizeDouble(Bid,_Digits);     // Lastest Bid price
mrequest.sl = 0;                                   // Stop Loss
mrequest.tp = 0;                                   // Take Profit
mrequest.symbol = _Symbol;                         // Symbol
mrequest.volume = Lot;                             // Number of lots to trade
mrequest.magic = 0;                                // Magic Number
mrequest.type= ORDER_TYPE_SELL;                    // Sell order
mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
mrequest.deviation=5;                              // Deviation from current price
OrderSend(mrequest,mresult);                       // Send order
}
}
//+------------------------------------------------------------------+
//| Close Long position                                              |
//+------------------------------------------------------------------+
void LongPositionClose()
{

ZeroMemory(mrequest);
ZeroMemory(mresult);

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

{
mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
mrequest.price = NormalizeDouble(Bid,_Digits);     // Lastest Bid price
mrequest.sl = 0;                                   // Stop Loss
mrequest.tp = 0;                                   // Take Profit
mrequest.symbol = _Symbol;                         // Symbol
mrequest.volume = Lot;                             // Number of lots to trade
mrequest.magic = 0;                                // Magic Number
mrequest.type= ORDER_TYPE_SELL;                    // Sell order
mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
mrequest.deviation=5;                              // Deviation from current price
OrderSend(mrequest,mresult);                       // Send order
}
}
//+------------------------------------------------------------------+
//| Close Short position                                             |
//+------------------------------------------------------------------+
void ShortPositionClose()
{

ZeroMemory(mrequest);
ZeroMemory(mresult);

double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
mrequest.sl = 0;                                   // Stop Loss
mrequest.tp = 0;                                   // Take Profit
mrequest.symbol = _Symbol;                         // Symbol
mrequest.volume = Lot;                             // Number of lots to trade
mrequest.magic = 0;                                // Magic Number
mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
mrequest.deviation=5;                              // Deviation from current price
OrderSend(mrequest,mresult);                       // Send order
}
}
//+------------------------------------------------------------------+
```
Documentation on MQL5: Language Basics / Variables
• www.mql5.com
Language Basics / Variables - Documentation on MQL5
Moderator
18036

surubabs:

I git stoped in an other Error

which is  'rsiVal' - invalid array access Bband.mq5 143 25

i have been looking to find out were the issue actualy, the array is working fine, there were is the issue ?

The issue is here . . .

` rsiVal <= iRSI_Min`

you need to give the element number of the array   rsiVal[x]  <=  as you have for the rest of the two lines of code.

832

RaptorUK:

The issue is here . . .

you need to give the element number of the array   rsiVal[x]  <=  as you have for the rest of the two lines of code.

Thanks a lot for ur Help