Two indicator in one to made ALARM! NEED more of 8 Arrays....how to??

 

Dear Friend I have one problem to solve.

I would make an allarm that play sound when MACD_OSMA indicator (custom indicator with 3 harrays: 2 x moving average of MACD and 1 x OSMA) and ADX_wilder indicator (custom indicator with 8 arrays) make some thing.

The problem that I found is that ADX uses 8 ARRAYS and MACD-OSMA use other 3 arrays.

TOTAL 11 ARRAYS....and setindexbuffers() can only set 8 ARRAYS.

I think that I could use multidimensional arrays but the setindexbuffer() function doesen't accept (i think) multidimensional arrays.


In the ADX_wilder indicators I disabled ADXR Arrays and I use now this free array to declare ind_buffer1 of OSMA_MACD

I need Now to declare ind_buffer2 and ind_buffer3.


P.s. I paste the code ....is correct or need to attach file?

//*****************************************************************

//+------------------------------------------------------------------+
//| WildersDMI_v1.mq4 |
//| Copyright © 2007, TrendLaboratory Ltd. |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, TrendLaboratory Ltd."
#property link "http://finance.groups.yahoo.com/group/TrendLaboratory"

#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 LightBlue
#property indicator_width1 2
#property indicator_color2 Lime
#property indicator_width2 1
#property indicator_style2 2
#property indicator_color3 Tomato
#property indicator_width3 1
#property indicator_style3 2
#property indicator_color4 Orange
#property indicator_width4 2
#property indicator_level1 20
//---- input parameters
extern int MA_Length = 1; // Period of additional smoothing
extern int DMI_Length = 14; // Period of DMI
extern int ADX_Length = 14; // Period of ADX
extern int ADXR_Length = 14; // Period of ADXR
extern int UseADX = 1; // Use ADX: 0-off,1-on
extern int UseADXR = 0; // Use ADXR: 0-off,1-on
//---- buffers

double ADX[];
double PDI[];
double MDI[];
//double ADXR[];
double sPDI[];
double sMDI[];
double STR[];
double DX[];
double ind_buffer[][3];


//******************************

extern int cont=0;
datetime bar=0;
datetime oldbar=0;
extern int a=0;

extern int FastEMA=9;
extern int SlowEMA=26;
extern int SignalSMA=4;
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];

//******************************
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(3);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ADX);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,PDI);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,MDI);
SetIndexStyle(3,DRAW_LINE);
//SetIndexBuffer(3,ADXR);
SetIndexBuffer(4,sPDI);
SetIndexBuffer(5,sMDI);
// OSMA
SetIndexBuffer(3,ind_buffer[300][3]);

//SetIndexBuffer(3,ind_buffer1);
//SetIndexBuffer(4,ind_buffer2);
//SetIndexBuffer(5,ind_buffer3);


// OSMA
SetIndexBuffer(6,STR);
SetIndexBuffer(7,DX);
//---- name for DataWindow and indicator subwindow label
string short_name="WildersDMI("+MA_Length+","+DMI_Length+","+ADX_Length+","+ADXR_Length+")";
IndicatorShortName(short_name);
SetIndexLabel(0,"ADX");
SetIndexLabel(1,"+DI");
SetIndexLabel(2,"-DI");
SetIndexLabel(3,"ADXR");
//----
SetIndexDrawBegin(0,DMI_Length+MA_Length);
SetIndexDrawBegin(1,DMI_Length+MA_Length);
SetIndexDrawBegin(2,DMI_Length+MA_Length);
SetIndexDrawBegin(3,DMI_Length+MA_Length);
//--
SetIndexShift(3,2);

// ****** OSMA ******

SetIndexBuffer(3,ind_buffer1);
//SetIndexBuffer(1,ind_buffer2);
//SetIndexBuffer(2,ind_buffer3);


// ****** END OSMA ******

return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{


Comment("Il nome account è: ",AccountName(),".\n",
"ADX: ",DoubleToStr(ADX[0],8),".\n",
"Buff1: ",DoubleToStr(ind_buffer1[0],8),".\n",
"Buff2: ",DoubleToStr(ind_buffer2[0],8),".\n",
"Buff3: ",DoubleToStr(ind_buffer3[0],8),".\n",
".");

int limits;
int counted_barss=IndicatorCounted();
//---- check for possible errors
if(counted_barss<0) return(-1);
//---- last counted bar will be recounted
if(counted_barss>0) counted_barss--;
limits=Bars-counted_barss;
//---- macd counted in the 1-st buffer
for(int i=0; i<limits; i++)
ind_buffer1[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
for(i=0; i<limits; i++)
ind_buffer2[i]=iMAOnArray(ind_buffer1,Bars,SignalSMA,0,MODE_SMA,i);
for(i=0; i<limits; i++)
ind_buffer3[i]=iOsMA(NULL,0,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,i);
//---- done



//*********************************************************
//@@@@@@@@@@@@@@@@@@@@@ INDICATORI @@@@@@@@@@@@@@@@@@@@@@@@
double ao=iAO(NULL, 0, 2);
double macd=iMACD(NULL,0,9,26,4,PRICE_CLOSE,MODE_SIGNAL,0);
double stoc1=iStochastic(NULL,0,14,2,3,MODE_SMA,0,MODE_MAIN,0);
double stoc2=iStochastic(NULL,0,42,2,3,MODE_SMA,0,MODE_MAIN,0);
//double osma=iOsMA(NULL,0,9,26,4,PRICE_CLOSE,0);


bar=Time[0];

if(a==0)
{
oldbar=Time[0];
a=1;
}
if(oldbar!=bar)
{
if((ao>=0)&&(macd>0)&&(stoc1<=80)&&((ADX[0])>=19))PlaySound("news.wav");
if((ao<=0)&&(macd<0)&&(stoc1>=20)&&((ADX[0])>=19))PlaySound("buzzer.wav");
//PlaySound("alert.wav");
oldbar=bar;




}

datetime d=Time[0];
double p=Close[1];


//+------------------------------------------------------------------+
//| Set Object Label, create if not exist yet @http://kolier.li |
//+------------------------------------------------------------------+

//*******************************************



int shift, limit, counted_bars=IndicatorCounted();
double alfa1 = 1.0/DMI_Length;
double alfa2 = 1.0/ADX_Length;
//----
if (counted_bars < 0) return(-1);

if(counted_bars<1)
for(shift=1;shift<=MA_Length+DMI_Length;shift++)
{PDI[Bars-shift]=0.0;MDI[Bars-shift]=0.0;ADX[Bars-shift]=0.0;
sPDI[Bars-shift]=0.0;sMDI[Bars-shift]=0.0;DX[Bars-shift]=0.0;
STR[Bars-shift]=0.0;/*ADXR[Bars-shift][0]=0.0;*/}

shift=Bars-MA_Length-DMI_Length-1;
if(counted_bars>=DMI_Length+MA_Length) shift=Bars-counted_bars-1;

while(shift>=0)
{


double AvgHigh = iMA(NULL,0,MA_Length,0,1,PRICE_HIGH,shift);
double AvgHigh1 = iMA(NULL,0,MA_Length,0,1,PRICE_HIGH,shift+1);
double AvgLow = iMA(NULL,0,MA_Length,0,1,PRICE_LOW,shift);
double AvgLow1 = iMA(NULL,0,MA_Length,0,1,PRICE_LOW,shift+1);
double AvgClose1= iMA(NULL,0,MA_Length,0,1,PRICE_CLOSE,shift+1);

double Bulls = 0.5*(MathAbs(AvgHigh-AvgHigh1)+(AvgHigh-AvgHigh1));
double Bears = 0.5*(MathAbs(AvgLow1-AvgLow)+(AvgLow1-AvgLow));

if (Bulls > Bears) Bears = 0;
else
if (Bulls < Bears) Bulls = 0;
else
if (Bulls == Bears) {Bulls = 0;Bears = 0;}

sPDI[shift] = sPDI[shift+1] + alfa1 * (Bulls - sPDI[shift+1]);
sMDI[shift] = sMDI[shift+1] + alfa1 * (Bears - sMDI[shift+1]);

double TR = MathMax(AvgHigh-AvgLow,AvgHigh-AvgClose1);
STR[shift] = STR[shift+1] + alfa1 * (TR - STR[shift+1]);

if(STR[shift]>0 )
{
PDI[shift] = 100*sPDI[shift]/STR[shift];
MDI[shift] = 100*sMDI[shift]/STR[shift];
}

if( UseADX > 0)
{
if((PDI[shift] + MDI[shift])>0)
DX[shift] = 100*MathAbs(PDI[shift] - MDI[shift])/(PDI[shift] + MDI[shift]);
else DX[shift] = 0;

ADX[shift] = ADX[shift+1] + alfa2 * ( DX[shift] - ADX[shift+1]);

//if(UseADXR >0) ADXR[shift] = 0.5*(ADX[shift] + ADX[shift+ADXR_Length]);
}
shift--;
}


return(0);
}
//+------------------------------------------------------------------+


//*****************************************************************



 

I have found this but the referred links are not available.

http://www.metatrader4.com/forum/2832


Can someone help me?

 
ketron82:

Dear Friend I have one problem to solve.

I would make an allarm that play sound when MACD_OSMA indicator (custom indicator with 3 harrays: 2 x moving average of MACD and 1 x OSMA) and ADX_wilder indicator (custom indicator with 8 arrays) make some thing.


  1. Use iCustom to get what values you want from the two indicators and play the sound when required. NO BUFFERS REQUIRED
 
WHRoeder:

  1. Use iCustom to get what values you want from the two indicators and play the sound when required. NO BUFFERS REQUIRED

Thanks...i will use icustom .....I hope that I'm able to use!

If I have some problem I will post now...many thanks for now!

Fabio