MQL4 и MQL5 отличаются по показателям.Вы можете использовать индикатор там, где он вам нужен, но это обычно не удобно и требует разного кода для MQL4 и MQL5.
Вы можете создать экземпляр индикатора (конечно, разные параметры означают разные экземпляры).Разные индикаторы могут иметь разное количество параметров и буферов, поэтому имеет смысл создать класс для каждого нужного вам индикатора.Этот подход хорош как для MQL4, так и для MQL5.
#include <Indicators\Custom.mqh>
class CiMyCustomIndicator : public CiCustom
{
string m_indicatorName;
public:
int GetResult(const int index)const//as an example, buf0[0]>buf0[1] -> 1, buf0[0]<buf0[1] -> -1, else 0
{
double value=GetData(0,index),
prevValue=GetData(0,index+1);
if(value>prevValue)return(1);
if(value<prevValue)return(-1);
return(0);
}
};
int OnInit(){
CiMyCustomIndicator *myMacd=new CiMyCustomIndicator();
//lets assume myMacd gets two params:int InpPeriod=9; double InpLine=0.0001;
MqlParams[] myMacdInputs;
ArrayResize(myMacdInputs,2);
myMacdInputs[0].type=TYPE_INT;
myMacd[0].integer_value=InpPeriod;
myMacdInputs[1].type=TYPE_DOUBLE;
myMacdInputs[1].double_value=InpLine;
myMacd.Create(_Symbol,_Period,IND_CUSTOM,ArraySize(myMacdInputs),myMacdInputs);
// you can now pass myMacd as pointer into another method
// other logic
}
void OnDeinit(const int reason){delete(myMacd);}
void OnTick(){
double value=myMacd.GetData(bufferIndex, shift);
int customResult=myMacd.GetResult(shift);
}