iMACD関数の働き・役割
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/0d7380110b5dd07704c36cf05141e378-1024x585.webp)
iMACD関数は、MACD(移動平均収束拡散手法)のハンドルを返します。
MACDは、トレンドの強さや方向性を判断するために使用される指標で、2本のラインとして表示されます。MACDラインとシグナルラインの差がMACDヒストグラム(トレンドの変化を視覚的に示す棒グラフ)として表示されることもあります。
※MACDについての詳細は↓の記事をご参照ください。
iMACD関数の引数について
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/ec3fadb4087419a4afde99d6de49a3d7-1024x585.webp)
int iMACD(
string symbol, // 銘柄名
ENUM_TIMEFRAMES period, // 期間
int fast_ema_period, // 高速移動平均計算の期間
int slow_ema_period, // 低速移動平均計算の期間
int signal_period, // シグナル線の計算期間
ENUM_APPLIED_PRICE applied_price // 価格の種類かハンドル
);
各引数の説明
- symbol
- データが指標計算に使用されるシンボル名を指定します。NULLを指定すると現在のシンボルを使用します。
- period
- 期間を指定します。ENUM_TIMEFRAMES列挙の値の1つで、0を指定すると現在の時間軸を意味します。
- fast_ema_period
- 高速移動平均計算の期間を指定します。
- slow_ema_period
- 低速移動平均計算の期間を指定します。
- signal_period
- シグナル線の計算期間を指定します。
- applied_price
- 使用される価格を指定します。ENUM_APPLIED_PRICE価格定数のいずれか、または別の指標ハンドルを使用します。
iMACD関数の戻り値について
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/90459013ef302e2b0931c75f2a4dd9de-1024x585.webp)
iMACD関数は、指定されたテクニカル指標ハンドルを返します。失敗した場合はINVALID_HANDLEを返します。取得したハンドルは、使用後にIndicatorRelease関数を使用して解放することができます。
iMACD関数を使う際の注意点
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/6710843bdbf115bfb513a11590685f13-1024x585.webp)
iMACD関数を使用する際には、次の点に注意する必要があります。まず、取得したハンドルは使用後に必ず解放してください。解放しないとメモリリークの原因となります。また、バッファ番号は0がMAIN_LINE、1がSIGNAL_LINEを表します。
<参照>
iMACD関数を使ったサンプルコード
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/f41d9fbf0a01b29469faeb4592eb3388-1024x585.webp)
以下は、iMACD関数を使用してMACDのハンドル値を取得し、その後各値を取得するサンプルコードです。
サンプルコードに使われた関数や文法要素の簡単な解説
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/036d3013b2067327159306456dcdd79d-1024x585.webp)
OnStart関数
OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出される関数です。この中にスクリプトの処理内容を記述します。
iMACD関数
iMACD関数はMACDのハンドルを取得する関数です。引数には、銘柄名、期間、高速移動平均計算の期間、低速移動平均計算の期間、シグナル線の計算期間、適用価格を指定します。
CopyBuffer関数
CopyBuffer関数は指定されたインジケータのバッファ(データを一時的に保存する領域)からデータをコピーする関数です。取得したデータは配列に格納されます。
CopyBuffer関数を2回呼び出しているのは、MACDには2つの主要なライン(MACDラインとシグナルライン)があるためです。最初のCopyBuffer関数呼び出しでは、MACDラインのデータをコピーし、2回目の呼び出しではシグナルラインのデータをコピーしています。これにより、MACDの2つの重要なデータを個別に取得し、それぞれを分析することができます。
IndicatorRelease関数
IndicatorRelease関数は使用したインジケータのハンドルを解放する関数です。メモリリーク(メモリが解放されずに無駄に消費され続けること)を防ぐために、インジケータの使用後には必ず呼び出します。