MQL5 - индикатор прохода в качестве параметра - PullRequest
0 голосов
/ 12 октября 2018

Мне было интересно, есть ли способ передать определение индикатора или индикатор в качестве параметра в конструктор класса.Суть в том, чтобы создать класс, который будет принимать индикатор и использовать его для генерации определенных значений, или даже инициализировать определение индикатора для получения значений

1 Ответ

0 голосов
/ 12 октября 2018

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);
}
...