How do you call indicator data in mql5?

 

In mql4 I could just type iNameOfIndicator(Parameters), now things seem a lot more complicated, am I missing something?

 

Nvm, finally figured it out, will post how tomorrow, so tired. 

 
MetaNt:

In mql4 I could just type iNameOfIndicator(Parameters), now things seem a lot more complicated, am I missing something?

 

Nvm, finally figured it out, will post how tomorrow, so tired. 

Hi MetaNt, maybe this topic may help you too:

Forum on trading, automated trading systems and testing trading strategies

Load indicator - iCustom

Kima, 2013.02.23 14:25

Ive tried to load this indicator to my EA: https://www.mql5.com/en/forum/9660/page9#comment_411206

But i need some help.. 

Ive tried:

//---- indicator parameters - in the indicator it self
input int                  Length         =  9;    // Price Channel Period
input ENUM_APPLIED_PRICE   Price          =  PRICE_CLOSE;    // Applied Price
input double               Risk           =  3;    // Risk Factor in units (0...10) 
input int                  UseReEntry     =  1;    // Re-Entry Mode: 0-off,1-on
input int                  AlertMode      =  0;    // Alert Mode: 0-off,1-on
input int                  WarningMode    =  0;    // Warning Mode: 0-off,1-on
input string               WarningSound   =  "tick.wav"; 


// input the indicator in EA   
int OnInit()
  {
 handles2[0]=iCustom(symbol[0],Time_Frame,"PriceChannel_Signal_v1"); 
         if(handles2[0]<0)
           {
            Alert("Can not get icustom.");
            return(-1);
           }
}
// and tried
int OnInit()
  {
handles2[0]=iCustom(symbol[0],Time_Frame,"PriceChannel_Signal_v1",9,PRICE_CLOSE,3,1,0,0,"tick.wav"); 
         if(handles2[0]<0)
           {
            Alert("Can not get icustom.");
            return(-1);
           }
}

 

 My idea was that with:

handles2[0]=iCustom(symbol[0],Time_Frame,"PriceChannel_Signal_v1");

it would just load the standaard inputs from the indicator self .. But it still says "array out of range"


 

In Global

 Declare the array and the handle, the names of both must match, they can be anything inaccordance with syntax as long as they match.

double MACDMain[];         /////Array For MACD MAIN
double MACDSignal[];      /////Array For MACD Signal

int MACDMain_handle;        /////Handle For MACDMAIN
int MACDSignal_handle;     /////Handle For MACDSIGNAL

 

In Init()

Create the indicator using the handle function. 

MACDMain_handle=iMACD(Symbol(),0,5,50,5,Applied);
MACDSignal_handle=iMACD(Symbol(),0,5,50,5,Applied);

 

 In Ontick()

 Copy the data to the array.

CopyBuffer(MACDMain_handle,0,0,100,MACDMain);
CopyBuffer(MACDSignal_handle,1,0,100,MACDSignal);

 

 It will also help to use ArraySetAsSeries() in the Ontick() function, so that you can compare different MACD positions e.g.  if(MACDMain[1]>MACDMain[0]) .......;

ArraySetAsSeries(MACDMain,true);
ArraySetAsSeries(MACDSignal,true);
 
MetaNt:

 It will also help to use ArraySetAsSeries() in the Ontick() function, so that you can compare different MACD positions e.g.  if(MACDMain[1]>MACDMain[0]) .......;


Right, but not just this, as you also set the array indexing direction and it is very relevant to index as time series, as MQL4.
 
MetaNt:

In Global

 Declare the array and the handle, the names of both must match, they can be anything inaccordance with syntax as long as they match.

In Init()

Create the indicator using the handle function. 

 In Ontick()

 Copy the data to the array.

 It will also help to use ArraySetAsSeries() in the Ontick() function, so that you can compare different MACD positions e.g.  if(MACDMain[1]>MACDMain[0]) .......;

You don't need two handles for the same indicator... you can simply have

MACD_handle=iMACD(Symbol(),0,5,50,5,Applied);

and then copy the specific buffers using the CopyBuffer() function:

CopyBuffer(MACD_handle,0,0,100,MACDMain); // Buffer 0 = Main
CopyBuffer(MACD_handle,1,0,100,MACDSignal); // Buffer 1 = Signal
 
Malacarne:

You don't need two handles for the same indicator... you can simply have

and then copy the specific buffers using the CopyBuffer() function:

And check the returned value of CopyBuffer
 
Malacarne:

You don't need two handles for the same indicator... you can simply have

and then copy the specific buffers using the CopyBuffer() function:

Well observed.
Reason: