Need Help With This Function

 

Hello,

Im having issues with this function and im not able to get the right values for my EA. Im looking to get the the StdDev cross of the upper bollinger band on my ea like the picture bellow:

So far i wrote this code but i cant get the upper bollinger band(always return 0) value to compare the variables... Could anyone point me in the right direction?? Thank You

extern int StdDevPeriod = 14;

extern int StdDevBolPeriod = 21;

extern double StdDevBolDeviation = 1.5;

double StdDevBuffer[],BandsStdDevBuffer[];

int init()

{

int StdDevCount = MathMax(StdDevPeriod,StdDevBolPeriod);

ArrayResize(StdDevBuffer,StdDevCount*2);

ArraySetAsSeries(StdDevBuffer,true);

ArrayResize(BandsStdDevBuffer,StdDevCount*2);

ArraySetAsSeries(BandsStdDevBuffer,true);

}

int StdDevSignal()

{

int StdDevCount = MathMax(StdDevPeriod,StdDevBolPeriod);

for(i=0; i<StdDevCount*2; i++)

{

StdDevBuffer=iStdDev(NULL,0,StdDevPeriod,0,MODE_LWMA,PRICE_MEDIAN,i);

}

for(i=0; i<StdDevCount*2; i++)

{

BandsStdDevBuffer=iBandsOnArray(StdDevBuffer,0,StdDevBolPeriod,StdDevBolDeviation,0,MODE_UPPER,i);

Print("StdDevBuffer for ",i," = " , StdDevBuffer);

Print("BandsStdDevBuffer for ",i," = " , BandsStdDevBuffer);

}

Print("StdDevBuffer[0] = ",StdDevBuffer[0] , "|| BandsStdDevBuffer[0] = " , BandsStdDevBuffer[0]);

if(StdDevBuffer[0] > BandsStdDevBuffer[0]) return(1);

else return(0);

}

I also have this results from the terminal when running the code...

2015.06.24 17:18:13.959 2013.11.20 18:24 SESSIONS EURUSD,M30: StdDevBuffer for 3 = 0.0005

2015.06.24 17:18:13.959 2013.11.20 18:24 SESSIONS EURUSD,M30: BandsStdDevBuffer for 2 = 0

2015.06.24 17:18:13.959 2013.11.20 18:24 SESSIONS EURUSD,M30: StdDevBuffer for 2 = 0.0004

2015.06.24 17:18:13.959 2013.11.20 18:24 SESSIONS EURUSD,M30: BandsStdDevBuffer for 1 = 0

2015.06.24 17:18:13.959 2013.11.20 18:24 SESSIONS EURUSD,M30: StdDevBuffer for 1 = 0.0004

2015.06.24 17:18:13.959 2013.11.20 18:24 SESSIONS EURUSD,M30: BandsStdDevBuffer for 0 = 0

2015.06.24 17:18:13.959 2013.11.20 18:24 SESSIONS EURUSD,M30: StdDevBuffer for 0 = 0.0007

Files:
eurusdm30.jpg  80 kb
 

Found the answer =] sharing with you guys now

// Indicator parameters

extern int StdDevPeriod = 14;

extern int StdDevBolPeriod = 21;

extern double StdDevBolDeviation = 1.5;

// Global module varables

double StdDevBuffer[];

double BandsStdDevBuffer[];

double StdDevMaBuffer[];

//-----------------------------------------------------------------------------

// function: init()

// Description: Custom indicator initialization function.

//-----------------------------------------------------------------------------

int init() {

return(0);

}

//-----------------------------------------------------------------------------

// function: deinit()

// Description: Custom indicator deinitialization function.

//-----------------------------------------------------------------------------

int deinit() {

return (0);

}

///-----------------------------------------------------------------------------

// function: start()

// Description: Custom indicator iteration function.

//-----------------------------------------------------------------------------

int StdDevBolSignal() {

if(Bars < StdDevPeriod + StdDevBolPeriod) return(0);

//---- INDICATOR BUFFERS EMULATION

if(ArraySize(StdDevBuffer) < Bars)

{

ArraySetAsSeries(StdDevBuffer,false);

ArraySetAsSeries(BandsStdDevBuffer,false);

ArraySetAsSeries(StdDevMaBuffer,false);

//----

ArrayResize(StdDevBuffer,Bars);

ArrayResize(BandsStdDevBuffer,Bars);

ArrayResize(StdDevMaBuffer,Bars);

//----

ArraySetAsSeries(StdDevBuffer,true);

ArraySetAsSeries(BandsStdDevBuffer,true);

ArraySetAsSeries(StdDevMaBuffer,true);

}

//----+ INSERTION OF A STATIC INTEGER MEMORY VARIABLE

static int IndCounted;

//----+ Insertion of integer variables and getting calculated bars

int limit, MaxBar, bar, counted_bars = IndCounted;

//----+ REMEMBERING THE AMOUNT OF ALL BARS OF THE CHART

IndCounted = Bars - 1;

//---- defining the number of the oldest bar,

// starting from which new bars will be recalculated

limit = Bars - counted_bars - 1;

//---- defining the number of the oldest bar,

// starting from which new bars will be recalculated

MaxBar = Bars - 1 - (StdDevPeriod + StdDevBolPeriod);

//---- initialization of zero

if(limit > MaxBar)

{

limit = MaxBar;

for(bar = Bars - 1; bar >= 0; bar--)

{

StdDevBuffer = 0.0;

StdDevMaBuffer = 0.0;

BandsStdDevBuffer = 0.0;

}

}

//----+ THE FIRST CYCLE OF INDICATOR CALCULATION

for(bar=limit; bar>=0; bar--)

{

StdDevBuffer=iStdDev(NULL,0,StdDevPeriod,0,MODE_LWMA,PRICE_MEDIAN,bar);

}

//----+ THE SECOND CYCLE OF INDICATOR CALCULATION

for(bar=limit; bar>=0; bar--)

{

StdDevMaBuffer=iMAOnArray(StdDevBuffer,0,StdDevBolPeriod,0,MODE_SMA,bar);

BandsStdDevBuffer=StdDevMaBuffer+StdDevBolDeviation * iStdDevOnArray(StdDevBuffer,0,StdDevBolPeriod,0,MODE_SMA,bar); // MODE UPPER

//BandsStdDevBuffer=StdDevMaBuffer-StdDevBolDeviation * iStdDevOnArray(StdDevBuffer,0,StdDevBolPeriod,0,MODE_SMA,bar); // MODE LOWER

}

Print("StdDevBuffer[0] = ",StdDevBuffer[0] , "|| BandsStdDevBuffer[0] = " , BandsStdDevBuffer[0]);

if(StdDevBuffer[0] > BandsStdDevBuffer[0]) return(1);

else return(0);

}

//+------------------------------------------------------------------+

 

Why don't you use buffers?

 
on my own:
Re: Need Help With This Function Why don't you use buffers?

He is probably trying to have it buffer independent

Reason: