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?
Re: Need Help With This Function Why don't you use buffers?
He is probably trying to have it buffer independent
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
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