OriginalIndicators.mqhファイルのコード全体記述は以下のようになっています。
//+------------------------------------------------------------------+
//| OriginalIndicators.mqh |
//| MQL5ssei |
//| https://mqlinvestmentlab.com/ |
//+------------------------------------------------------------------+
#property copyright "MQL5ssei"
#property link "https://mqlinvestmentlab.com/"
//インジケータ値を配列にコピーす数を規定
#define MAX_COPY 100
//インジケータに共通する処理を担う基礎クラス
class CBaseIndicator
{
protected:
int handle;//インジケータのハンドル値を格納する変数
double main[];//インジケータの値を格納する配列
public:
CBaseIndicator(void);//コンストラクタ
double Main(int parIndex=0);
void Release();
virtual int Init() { return(handle); }
};
CBaseIndicator::CBaseIndicator(void)
{
ArraySetAsSeries(main,true);
}
double CBaseIndicator::Main(int parIndex=0)
{
CopyBuffer(handle,0,0,MAX_COPY,main);
double value = NormalizeDouble(main[parIndex],_Digits);
return(value);
}
void CBaseIndicator::Release(void)
{
IndicatorRelease(handle);
}
class CDerivediMA : public CBaseIndicator
{
public:
int Init(string parSymbol,ENUM_TIMEFRAMES parTimeframe,int parMAPeriod,int parMAShift,ENUM_MA_METHOD parMAMethod,ENUM_APPLIED_PRICE parMAPrice);
};
int CDerivediMA::Init(string parSymbol,ENUM_TIMEFRAMES parTimeframe,int parMAPeriod,int parMAShift,ENUM_MA_METHOD parMAMethod,ENUM_APPLIED_PRICE parMAPrice)
{
handle = iMA(parSymbol,parTimeframe,parMAPeriod,parMAShift,parMAMethod,parMAPrice);
return(handle);
}
class CDerivediStochastic : public CBaseIndicator
{
private:
double signal[];
public:
int Init(string parSymbol, ENUM_TIMEFRAMES parTimeframe, int parKPeriod, int parDPeriod, int parSlowing, ENUM_MA_METHOD parMAMethod, ENUM_STO_PRICE parPrice);
double Signal(int parShift=0);
CDerivediStochastic(void);
};
int CDerivediStochastic::Init(string parSymbol, ENUM_TIMEFRAMES parTimeframe, int parKPeriod, int parDPeriod, int parSlowing, ENUM_MA_METHOD parMAMethod, ENUM_STO_PRICE parPrice)
{
handle = iStochastic(parSymbol,parTimeframe,parKPeriod,parDPeriod,parSlowing,parMAMethod,parPrice);
return(handle);
}
CDerivediStochastic::CDerivediStochastic(void)
{
ArraySetAsSeries(signal,true);
}
double CDerivediStochastic::Signal(int parShift=0)
{
CopyBuffer(handle,1,0,MAX_COPY,signal);
double value = NormalizeDouble(signal[parShift],_Digits);
return(value);
}