OriginalIndicators.mqhファイルのコード全体記述

Uncategorized

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

// Bollinger Bands インジケータの派生クラス
class CDerivediBollinger : public CBaseIndicator
{
	private:
		double upper[], lower[]; // 上部バンドと下部バンドの値を格納する配列
		
	public:
	   CDerivediBollinger(); // コンストラクタ
		int Init(string parSymbol,ENUM_TIMEFRAMES parTimeframe,int parPeriod,int parShift,double parDeviation,ENUM_APPLIED_PRICE parPrice); // 初期化関数
		double Upper(int parShift=0); // 上部バンドの値を取得する関数
		double Lower(int parShift=0); // 下部バンドの値を取得する関数
		
};

// コンストラクタ
CDerivediBollinger::CDerivediBollinger(void)
{
	ArraySetAsSeries(upper,true); // upper配列を時系列として設定
	ArraySetAsSeries(lower,true); // lower配列を時系列として設定
}

// 初期化関数
int CDerivediBollinger::Init(string parSymbol,ENUM_TIMEFRAMES parTimeframe,int parPeriod,int parShift,double parDeviation,ENUM_APPLIED_PRICE parPrice)
{
	handle = iBands(parSymbol,parTimeframe,parPeriod,parShift,parDeviation,parPrice); // Bollinger Bandsインジケータのハンドルを取得
	return(handle); // ハンドルを返す
}

// 上部バンドの値を取得する関数
double CDerivediBollinger::Upper(int parShift=0)
{
	CopyBuffer(handle,1,0,MAX_COPY,upper); // 上部バンドの値をバッファからコピー
	double value = NormalizeDouble(upper[parShift],_Digits); // 値を正規化
	return(value); // 正規化された値を返す
}

// 下部バンドの値を取得する関数
double CDerivediBollinger::Lower(int parShift=0)
{
	CopyBuffer(handle,2,0,MAX_COPY,lower); // 下部バンドの値をバッファからコピー
	double value = NormalizeDouble(lower[parShift],_Digits); // 値を正規化
	return(value); // 正規化された値を返す
}

// RSI インジケータの派生クラス
class CDerivediRSI : public CBaseIndicator
{
	public:
		int Init(string parSymbol, ENUM_TIMEFRAMES parTimeframe, int parRSIPeriod, ENUM_APPLIED_PRICE parRSIPrice); // 初期化関数
};

// 初期化関数
int CDerivediRSI::Init(string parSymbol, ENUM_TIMEFRAMES parTimeframe, int parRSIPeriod, ENUM_APPLIED_PRICE parRSIPrice)
{
	handle = iRSI(parSymbol,parTimeframe,parRSIPeriod,parRSIPrice); // RSIインジケータのハンドルを取得
	return(handle); // ハンドルを返す
}
タイトルとURLをコピーしました