# AN EA BASED ON B BANDS AND B WIDTH, NEED SOME URGENT HELP !!

810
2013.04.06 18:47

Dear All,

I am programing an ea which works with B Band And B Width, For the B Width I have added a custom EA, There is No Error Comeps when i compile,

But i am shure there some probs in Custom Indicator calling .

so i need some programers help to correct it, i allways to be thankfull who helps me this time, bcoz i got stoped now,

```//+------------------------------------------------------------------+
//|                                            Bolinger_Width_EA.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 bands_shift = 0;         // Bollinger Bands shift
input double deviation= 2;         // Standard deviation
input double   Lot=1;            // Lots to trade
//-----------------------
input uint ibands_period=15; //smoothing depth
input double ideviation=1.5; //deviation
input ENUM_APPLIED_PRICE  iapplied_price=PRICE_CLOSE; //type of price or handle
input int ibands_shift=0; //horizontal shift of the indicator in bars
//--- global variables
int BolBandsHandle;                // Bolinger Bands handle
double BBUp[],BBLow[],BBMidle[];   // dynamic arrays for numerical values of Bollinger Bands
//------------
double i_BB_Width[];
int BB_Handle;
//+------------------------------------------------------------------+
//| 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 Width indicators
BolBandsHandle=iBands(NULL,PERIOD_M1,bands_period,bands_shift,deviation,PRICE_CLOSE);
BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",ibands_period,ibands_shift,ideviation,PRICE_CLOSE);
//--- Check for Invalid Handle
if((BolBandsHandle<0) || (BB_Handle<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(BB_Handle);
}
//+------------------------------------------------------------------+
//| 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(i_BB_Width,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(BB_Handle,0,0,3,i_BB_Width)<0)
{
Alert("Error copying BB 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 > BBUp[1] && mrate[1].open < BBUp[1] &&  // White (bull) candle crossed the Lower Band from below to above
i_BB_Width[0]>i_BB_Width[1] && i_BB_Width[1]>i_BB_Width[2]); // and Width is growing up

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

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

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

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

if(Sell_Condition && !PositionSelect(_Symbol))   // Open short position
{                                              // Width 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
}
}
//+------------------------------------------------------------------+
```
Step on New Rails: Custom Indicators in MQL5
• 2009.11.23
• Андрей
• www.mql5.com
I will not list all of the new possibilities and features of the new terminal and language. They are numerous, and some novelties are worth the discussion in a separate article. Also there is no code here, written with object-oriented programming, it is a too serous topic to be simply mentioned in a context as additional advantages for developers. In this article we will consider the indicators, their structure, drawing, types and their programming details, as compared to MQL4. I hope that this article will be useful both for beginners and experienced developers, maybe some of them will find something new.
14766
2013.04.07 00:45
surubabs:

Dear All,

I am programing an ea which works with B Band And B Width, For the B Width I have added a custom EA, There is No Error Comeps when i compile,

But i am shure there some probs in Custom Indicator calling .

so i need some programers help to correct it, i allways to be thankfull who helps me this time, bcoz i got stoped now,

Please give attention on order of input parameter of iBand Widh :

`BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",ibands_period,ibands_shift,ideviation,PRICE_CLOSE);`

According to input order of indicator, it should :

`BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",ibands_period,ideviation,iapplied_price,ibands_shift);`
1968
2013.04.07 11:09

you don't need this custom indicator.

you have bbands, just subtract the envelopes of bbands.

Step on New Rails: Custom Indicators in MQL5
• 2009.11.23
• Андрей
• www.mql5.com
I will not list all of the new possibilities and features of the new terminal and language. They are numerous, and some novelties are worth the discussion in a separate article. Also there is no code here, written with object-oriented programming, it is a too serous topic to be simply mentioned in a context as additional advantages for developers. In this article we will consider the indicators, their structure, drawing, types and their programming details, as compared to MQL4. I hope that this article will be useful both for beginners and experienced developers, maybe some of them will find something new.
810
2013.04.08 11:26
achidayat:

Please give attention on order of input parameter of iBand Widh :

According to input order of indicator, it should :

I am adding that Custom Indicator,please fine me the correct calling method of this indicator,

```//+------------------------------------------------------------------+
//|                                                   i-BB-Width.mq5 |
//|                                             http://www.kimiv.ru/ |
//+------------------------------------------------------------------+

#property description "The width of the Bollinger Bands"
//---- indicator version number
#property version   "1.00"
//---- drawing indicator in a separate window
#property indicator_separate_window
//---- number of indicator buffers
#property indicator_buffers 1
//---- only one plot is used
#property indicator_plots   1
//+-----------------------------------+
//|  Parameters of indicator drawing  |
//+-----------------------------------+
//---- drawing the indicator as a line
#property indicator_type1   DRAW_LINE
//---- blue color is used for the indicator line
#property indicator_color1 Blue
//---- the indicator line is a continuous curve
#property indicator_style1  STYLE_SOLID
//---- Indicator line width is equal to 1
#property indicator_width1  2
//---- displaying the indicator label
#property indicator_label1  "i-BB-Width"
//+-----------------------------------+
//|  Declaration of constants         |
//+-----------------------------------+
#define RESET 0 // the constant for getting the command for the indicator recalculation back to the terminal
//+-----------------------------------+
//|  Input parameters of the indicator|
//+-----------------------------------+
input uint bands_period=20; //smoothing depth
input double deviation=2.0; //deviation
input ENUM_APPLIED_PRICE  applied_price=PRICE_CLOSE; //type of price or handle
input int Shift=0; //horizontal shift of the indicator in bars
//+-----------------------------------+

//---- declaration of a dynamic array that further
// will be used as an indicator buffer
double IndBuffer[];

//---- declaration of integer variables for the indicators handles
int BB_Handle;
//---- declaration of the integer variables for the start of data calculation
uint min_rates_total;
//+------------------------------------------------------------------+
//| i-BB-Width indicator initialization function                     |
//+------------------------------------------------------------------+
void OnInit()
{
//---- Initialization of variables of the start of data calculation
min_rates_total=bands_period;

//---- getting handle of the iBearsPower indicator
BB_Handle=iBands(NULL,0,int(bands_period),0,deviation,applied_price);
if(BB_Handle==INVALID_HANDLE) Print(" Failed to get handle of the iBands indicator");

//---- set dynamic array as an indicator buffer
SetIndexBuffer(0,IndBuffer,INDICATOR_DATA);
//---- moving the indicator 1 horizontally
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- performing the shift of beginning of indicator drawing
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- setting the indicator values that won't be visible on a chart
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- indexing elements in the buffer as in timeseries
ArraySetAsSeries(IndBuffer,true);

//---- initializations of variable for indicator short name
string shortname;
StringConcatenate(shortname,"i-BB-Width(",
bands_period,", ",deviation,", ",EnumToString(applied_price),", ",Shift,")");
//--- creation of the name to be displayed in a separate sub-window and in a pop up help
IndicatorSetString(INDICATOR_SHORTNAME,shortname);

//---- determination of accuracy of displaying the indicator values
IndicatorSetInteger(INDICATOR_DIGITS,0);
//---- end of initialization
}
//+------------------------------------------------------------------+
//| i-BB-Width iteration function                                    |
//+------------------------------------------------------------------+
int OnCalculate(
const int rates_total,    // amount of history in bars at the current tick
const int prev_calculated,// amount of history in bars at the previous tick
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
)
{
//---- checking the number of bars to be enough for calculation
if(BarsCalculated(BB_Handle)<rates_total || rates_total<int(min_rates_total)) return(RESET);

//---- declaration of variables with a floating point
double UpBB[],DnBB[];
//---- Declaration of integer variables and getting already calculated bars
int limit,bar,to_copy;

//--- calculations of the necessary amount of data to be copied and
//the "limit" starting index for loop of bars recalculation
if(prev_calculated>rates_total || prev_calculated<=0)// checking for the first start of the indicator calculation
{
limit=int(rates_total-min_rates_total-1); // starting index for calculation of all bars
}
else limit=rates_total-prev_calculated; // starting index for calculation of new bars
to_copy=limit+1;

//---- indexing elements in arrays as time series
ArraySetAsSeries(UpBB,true);
ArraySetAsSeries(DnBB,true);

//---- copy newly appeared data into the arrays
if(CopyBuffer(BB_Handle,UPPER_BAND,0,to_copy,UpBB)<=0) return(RESET);
if(CopyBuffer(BB_Handle,LOWER_BAND,0,to_copy,DnBB)<=0) return(RESET);

//---- Main cycle of calculation of the indicator
for(bar=limit; bar>=0 && !IsStopped(); bar--) IndBuffer[bar]=(UpBB[bar]-DnBB[bar])/_Point;
//----
return(rates_total);
}
//+------------------------------------------------------------------+
```
Step on New Rails: Custom Indicators in MQL5
• 2009.11.23
• Андрей
• www.mql5.com
I will not list all of the new possibilities and features of the new terminal and language. They are numerous, and some novelties are worth the discussion in a separate article. Also there is no code here, written with object-oriented programming, it is a too serous topic to be simply mentioned in a context as additional advantages for developers. In this article we will consider the indicators, their structure, drawing, types and their programming details, as compared to MQL4. I hope that this article will be useful both for beginners and experienced developers, maybe some of them will find something new.
810
2013.04.08 11:26
graziani:

you don't need this custom indicator.

you have bbands, just subtract the envelopes of bbands.

```//+------------------------------------------------------------------+
//|                                                   i-BB-Width.mq5 |
//|                                             http://www.kimiv.ru/ |
//+------------------------------------------------------------------+

#property description "The width of the Bollinger Bands"
//---- indicator version number
#property version   "1.00"
//---- drawing indicator in a separate window
#property indicator_separate_window
//---- number of indicator buffers
#property indicator_buffers 1
//---- only one plot is used
#property indicator_plots   1
//+-----------------------------------+
//|  Parameters of indicator drawing  |
//+-----------------------------------+
//---- drawing the indicator as a line
#property indicator_type1   DRAW_LINE
//---- blue color is used for the indicator line
#property indicator_color1 Blue
//---- the indicator line is a continuous curve
#property indicator_style1  STYLE_SOLID
//---- Indicator line width is equal to 1
#property indicator_width1  2
//---- displaying the indicator label
#property indicator_label1  "i-BB-Width"
//+-----------------------------------+
//|  Declaration of constants         |
//+-----------------------------------+
#define RESET 0 // the constant for getting the command for the indicator recalculation back to the terminal
//+-----------------------------------+
//|  Input parameters of the indicator|
//+-----------------------------------+
input uint bands_period=20; //smoothing depth
input double deviation=2.0; //deviation
input ENUM_APPLIED_PRICE  applied_price=PRICE_CLOSE; //type of price or handle
input int Shift=0; //horizontal shift of the indicator in bars
//+-----------------------------------+

//---- declaration of a dynamic array that further
// will be used as an indicator buffer
double IndBuffer[];

//---- declaration of integer variables for the indicators handles
int BB_Handle;
//---- declaration of the integer variables for the start of data calculation
uint min_rates_total;
//+------------------------------------------------------------------+
//| i-BB-Width indicator initialization function                     |
//+------------------------------------------------------------------+
void OnInit()
{
//---- Initialization of variables of the start of data calculation
min_rates_total=bands_period;

//---- getting handle of the iBearsPower indicator
BB_Handle=iBands(NULL,0,int(bands_period),0,deviation,applied_price);
if(BB_Handle==INVALID_HANDLE) Print(" Failed to get handle of the iBands indicator");

//---- set dynamic array as an indicator buffer
SetIndexBuffer(0,IndBuffer,INDICATOR_DATA);
//---- moving the indicator 1 horizontally
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- performing the shift of beginning of indicator drawing
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- setting the indicator values that won't be visible on a chart
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- indexing elements in the buffer as in timeseries
ArraySetAsSeries(IndBuffer,true);

//---- initializations of variable for indicator short name
string shortname;
StringConcatenate(shortname,"i-BB-Width(",
bands_period,", ",deviation,", ",EnumToString(applied_price),", ",Shift,")");
//--- creation of the name to be displayed in a separate sub-window and in a pop up help
IndicatorSetString(INDICATOR_SHORTNAME,shortname);

//---- determination of accuracy of displaying the indicator values
IndicatorSetInteger(INDICATOR_DIGITS,0);
//---- end of initialization
}
//+------------------------------------------------------------------+
//| i-BB-Width iteration function                                    |
//+------------------------------------------------------------------+
int OnCalculate(
const int rates_total,    // amount of history in bars at the current tick
const int prev_calculated,// amount of history in bars at the previous tick
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
)
{
//---- checking the number of bars to be enough for calculation
if(BarsCalculated(BB_Handle)<rates_total || rates_total<int(min_rates_total)) return(RESET);

//---- declaration of variables with a floating point
double UpBB[],DnBB[];
//---- Declaration of integer variables and getting already calculated bars
int limit,bar,to_copy;

//--- calculations of the necessary amount of data to be copied and
//the "limit" starting index for loop of bars recalculation
if(prev_calculated>rates_total || prev_calculated<=0)// checking for the first start of the indicator calculation
{
limit=int(rates_total-min_rates_total-1); // starting index for calculation of all bars
}
else limit=rates_total-prev_calculated; // starting index for calculation of new bars
to_copy=limit+1;

//---- indexing elements in arrays as time series
ArraySetAsSeries(UpBB,true);
ArraySetAsSeries(DnBB,true);

//---- copy newly appeared data into the arrays
if(CopyBuffer(BB_Handle,UPPER_BAND,0,to_copy,UpBB)<=0) return(RESET);
if(CopyBuffer(BB_Handle,LOWER_BAND,0,to_copy,DnBB)<=0) return(RESET);

//---- Main cycle of calculation of the indicator
for(bar=limit; bar>=0 && !IsStopped(); bar--) IndBuffer[bar]=(UpBB[bar]-DnBB[bar])/_Point;
//----
return(rates_total);
}
//+------------------------------------------------------------------+
```
14766
2013.04.09 01:38
surubabs:

I am adding that Custom Indicator,please fine me the correct calling method of this indicator,

As I said before you should pay attention to  the orders. So if input parameter like this :

```input uint bands_period=20; //smoothing depth
input double deviation=2.0; //deviation
input ENUM_APPLIED_PRICE  applied_price=PRICE_CLOSE; //type of price or handle
input int Shift=0; //horizontal shift of the indicator in bar```

then to call indicators you should write the same orders

`BB_Handle=iCustom(NULL,PERIOD_M1,"i-BB-Width",bands_period,deviation,applied_price,Shift);`
810
2013.04.10 11:24
achidayat:

As I said before you should pay attention to  the orders. So if input parameter like this :

then to call indicators you should write the same orders

I did it like u advaiced, but the problem i am still facing is in ontick(), when i copy the buffers, the width indicator only has a single line, and in the indicator code it shows as IndiBuffer,

Then which buffer should i copy from the width indicator, if it is like in the widthindicator code .

```//---- copy newly appeared data into the arrays
if(CopyBuffer(BB_Handle,UPPER_BAND,0,to_copy,UpBB)<=0) return(RESET);
if(CopyBuffer(BB_Handle,LOWER_BAND,0,to_copy,DnBB)<=0) return(RESET);```

i cannot use this in buy sell conditions,

please advice me to program it in the correct way, i tryed more than two whole days on this,

Moderator
31085
2013.04.10 11:59

What graziani said to you is that use of "i-BB_Width" is unnecessary. This indicator only calculate the difference between Upper and Lower bands. So you can completely remove this indicator from your EA.

After that it's up to you to check the logic of your algorithm.

Files:
810
2013.04.10 14:35
angevoyageur:

What graziani said to you is that use of "i-BB_Width" is unnecessary. This indicator only calculate the difference between Upper and Lower bands. So you can completely remove this indicator from your EA.

After that it's up to you to check the logic of your algorithm.

Ha ha nice solution, i like it :-)

Sir,i have a dought,

can i dife the width in an ea ? like width=Upband-Lowband/Baseline,

is it posible ?

Moderator
31085
2013.04.10 14:48
surubabs:

Ha ha nice solution, i like it :-)

Sir,i have a dought,

can i dife the width in an ea ? like width=Upband-Lowband/Baseline,

is it posible ?

Sorry but I don't understand your question.
810
2013.04.10 17:07
angevoyageur:
Sorry but I don't understand your question.

Sorry some spelling mistake,

i want the width of the band for this it need some calculation like

Width=(upperband-lowerband)/baseband

so is it possible to do this calculation inside the ea ?

how to define this ? when i tryed getting an error,

Width[]=(Upperband[ ]-Lowerband[ ])/Baseband[ ],