【MQL4学習】エルダー線をFXで自作して使おう!書き方やサンプルコードあり!

ザフナーラボブログ

エルダー線(Elder-Ray)とは、「投資苑 - 心理・戦略・資金管理」の著者であるアレクサンダー・エルダー(Alexander Elder)氏が開発したインジケーターで、市場の水面下にある強気筋(買い圧力)と弱気筋(売り圧力)の勢力を見極めるために使用するものです。

エルダー線は、ブルパワー(Bulls Power)を表すラインとベアパワー(Bears Power)を表す2本のラインから構成されています。

  • ブルパワーの詳細については「こちら」を参照してください。
  • ベアパワーの詳細については「こちら」を参照してください。

ブルパワーの計算式とベアパワーの計算式は、以下のとおりです。

  • ブルパワー
    ブルパワー = 現在の高値 - 現在の指数移動平均線の値
  • ベアパワー
    ベアパワー = 現在の安値 - 現在の指数移動平均線の値

なお、上記の指数移動平均線の値の計算期間は、通常は「13」です。

Elder-Ray

エルダー線(Elder-Ray)

1.全体像

MetaTrader4(MT4)でインジケーターを作成するには、以下の手順に従ってプログラムを書いていくことになります。

  1. #property命令を記述する。
  2. インジケーターバッファーの宣言を行う。
  3. 変数の宣言を行う。
  4. init()関数内にインジケーターの基本的な設定を記述する。
  5. start()関数内に具体的な処理内容を記述する。

以下のサンプルコードをダウンロードして記事を読み進めてください。

Elder-Ray-Code

2.#property命令の記述

#property命令とは、インジケーターの色、ラインの太さ、インジケーターを表示する場所などの、プログラム全体にかかわる設定を行うものです。

#property命令の詳細については「こちら」を参照してください。

「Elder-Ray.mq4」における、#property命令を記述した部分の解釈を示すと、以下のようになります。

property-Elder-Ray

 

⑴ サブウィンドウに表示させる

#property indicator_separate_window命令によって、「Elder-Ray.mq4」は、サブウィンドウに表示されます。

⑵ 2種類のデータを表示させる

「Elder-Ray.mq4」では、以下の2つのデータを表示させます。

  • ブルパワーを示すライン
  • ベアパワーを示すライン

したがって、#property indicator_buffers命令には、「2」を指定します。

⑶ 色を指定する

「Elder-Ray.mq4」で表示される2つのデータの表示色を指定します。

  • #property indicator_color1 Magenta
    1番目のインジケーターとしてブルパワーを示すラインを指定する(後述の5.⑴を参照)ので、#property indicator_color命令には「1」を指定し、表示色を「Magenta」に指定しています。
  • #property indicator_color2 Aqua
    2番目のインジケーターとしてベアパワーを示すラインを指定する(後述の5.⑴を参照)ので、#proerty indicator_color命令には「2」を指定し、表示色を「Aqua」に指定しています。

⑷ レベルを設定する

エルダー線は、ブルパワーとベアパワーの値が「0」よりも大きいかどうかを、強気筋と弱気筋の勢力判断に使用するので、以下のように記述して、ブルパワーとベアパワーの値が「0」を示す位置に、Gray色の破線を表示させるようにしています。


//「0」の位置に水平線を引く
#property indicator_level1 0

//水平線の色を「Gray」にする
#property indicator_levelcolor Gray

//水平線を破線にする
#property indicator_levelstyle STYLE_DOT

 

3.インジケーターバッファーの宣言

インジケーターバッファーとは、インジケーターの計算に使用するデータを格納しておく配列のことをいいます。

配列の詳細については「こちら」を参照してください。

「Elder-Ray.mq4」における、インジケーターバッファーを宣言した部分の解釈を示すと、以下のようになります。

Indicator-Buffer-Elder-Ray

 

⑴ double Bulls[];

ブルパワーの値を格納していく配列です。

⑵ double Bears[];

ベアパワーの値を格納していく配列です。

4.変数の宣言

「Elder-Ray.mq4」においては、以下の項目をパラメーターとして指定します。

  • ブルパワーの計算期間
  • ブルパワーの計算に用いる値
  • ベアパワーの計算期間
  • ベアパワーの計算に用いる値

上記の項目は、インジケーターをチャートに適用した際に任意の値に設定することができるようにするため、以下に示すように「外部変数」として宣言します。

  • extern int Bulls_Period
    ブルパワーの計算期間
  • extern int Bulls_Applied_Price
    ブルパワーの計算に用いる値(通常は高値を使用します。)
    以下の表に従って指定します。

    種 類
    定 数
    内 容
    PRICE_CLOSE
    終 値
    PRICE_OPEN
    始 値
    PRICE_HIGH
    高 値
    PRICE_LOW
    安 値
    PRICE_MEDIAN
    中央値
    (高値+安値)÷2
    PRICE_TYPICAL
    代表値
    (高値+安値+終値)÷3
    PRICE_WEIGHTED
    加重終値
    (高値+安値+終値+終値)÷4
  • extern int Bears_Period
    ベアパワーの計算期間
  • extern int Bears_Applied_Price
    ベアパワーの計算に用いる値(通常は安値を使用します。)
    ブルパワーの場合と同様の表に従って指定します。

5.基本設定の記述

「Elder-Ray.mq4」におけるinit()関数内に記述したコードについて解説します。

Basics-Elder-Ray

 

⑴ SetIndexBuffer()とは

SetIndexBuffer()とは、MQL4であらかじめ定義されている関数で、各インジケーターバッファーを、インジケーターバッファー領域(データを一時的に蓄えるデータ領域)に割り当てるものです。

SetIndexBuffer()関数の詳細については「こちら」を参照してください。

⑵ SetIndexLabel()とは

SetIndexLabel()とは、MQL4であらかじめ定義されている関数で、データウィンドウにインジケーターの描画線の説明を表示させるものです。

SetIndexLabel()関数の詳細については「こちら」を参照してください。

⑶ IndicatorShortName()とは

IndicatorShortName()とは、MQL4であらかじめ定義されている関数で、データウィンドウとサブウィンドウに表示されるインジケーターの名前等を表示させるものです。

IndicatorShortName()関数の詳細については「こちら」を参照してください。

なお、IndicatorShortName()関数の引数はstring型であるため、「Bulls_Period」等の直前に(string)と記述してint型からstring型へ型変換(詳細は「こちら」を参照してください。)を行っています。

⑷ SetIndexStyle()とは

SetIndexStyle()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画スタイル(線orヒストグラム、色など)を設定するものです。

SetIndexStyle()関数の詳細については「こちら」を参照してください。

⑸ SetIndexDrawBegin()とは

SetIndexDrawBegin()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画を開始するバーの位置を指定するものです。

SetIndexDrawBegin()関数の詳細については「こちら」を参照してください。

6.具体的な処理内容

「Elder-Ray.mq4」のstart()関数内に記述したコードについて解説します。

Start-Function-Elder-Ray

 

⑴ int limit = ……について

「limt」という変数を、「Bars-IndicatorCounted()」を初期値として宣言しています。

当該コードの詳細については「こちら」を参照してください。

⑵ for()文で繰り返し処理を行う

for()文を用いて、ブルパワーとベアパワーの値を繰り返し算出しています。

for()文の詳細については「こちら」を参照してください。

⑶ ブルパワーの計算

iBullsPower()関数(詳細は「こちら」を参照してください。)を用いてブルパワーの値を算出し、配列Bulls[]に順次格納しています。

⑷ ベアパワーの計算

iBearsPower()関数(詳細は「こちら」を参照してください。)を用いてベアパワーの値を算出し、配列Bears[]に順次格納しています。