陰陽足とは、当日までの一定期間の終値の平均値と、前日までの一定期間の終値の平均値とを比較し、相場のトレンドと勢いを見極めるために使用されるものです。
陰陽足の計算式は、以下のとおりです。
- 始値:前日までの一定期間の終値の平均値
- 終値:当日までの一定期間の終値の平均値
具体的には、現在日が2015年2月20日で、計算期間を3日とした場合は、
- 始値:2015年2月17日~2月19日までの終値の平均値
- 終値:2015年2月18日~2月20日までの終値の平均値
となり、終値が始値よりも高い場合は「陽線」として表示され、終値が始値よりも低い場合は「陰線」として表示されます。
1.全体像
MetaTrader4(MT4)でインジケーターを作成するには、以下の手順に従ってプログラムを書いていくことになります。
- #property命令を記述する。
- インジケーターバッファーの宣言を行う。
- 変数の宣言を行う。
- init()関数内にインジケーターの基本的な設定を記述する。
- start()関数内に具体的な処理内容を記述する。
以下のサンプルコードをダウンロードして、記事を読み進めてください。
2.#property命令の記述
#property命令とは、インジケーターの色、ラインの太さ、インジケーターを表示させる場所などの、プログラム全体にかかわる設定を行うものです。
#property命令の詳細については「こちら」を参照してください。
「In-Yo-Ashi.mq4」における、#property命令を記述した部分の解釈を示すと、以下のようになります。
⑴ チャートウィンドウに表示させる
#property indicator_chart_window命令によって、「In-Yo-Ashi.mq4」は、チャートウィンドウに表示されます。
⑵ 6種類のデータを表示させる
「In-Yo-Ashi.mq4」では、以下の6つのデータを表示させます。
- 短期陰陽足の始値までを表すヒストグラム
- 短期陰陽足の終値までを表すヒストグラム
- 中期陰陽足の始値までを表すヒストグラム
- 中期陰陽足の終値までを表すヒストグラム
- 長期陰陽足の始値までを表すヒストグラム
- 長期陰陽足の終値までを表すヒストグラム
したがって、#property indicator_buffers命令には、「6」を指定します。
⑶ 色を指定する
「In-Yo-Ashi.mq4」で表示される6つのデータの表示色を指定します。
- #property indicator_color1 Aqua
1番目のインジケーターとして短期陰陽足の始値までを表すヒストグラムを指定し、短期陰陽足の始値が短期陰陽足の終値よりも高い場合(=陰線の場合)に、足を「Aqua」で表示させるように指定します。
具体的には、以下のように表示されます。 - #property indicator_color2 Magenta
2番目のインジケーターとして短期陰陽足の終値までを表すヒストグラムを指定し、短期陰陽足の始値が短期陰陽足の終値よりも低い場合(=陽線の場合)に、足を「Magenta」で表示させるように指定します。
具体的には、以下のように表示されます。 - #property indicator_color3 DodgerBlue
3番目のインジケーターとして中期陰陽足の始値までを表すヒストグラムを指定し、中期陰陽足の始値が中期陰陽足の終値よりも高い場合(=陰線の場合)に、足を「DodgerBlue」で表示させるように指定します。
表示の仕組みは短期陰陽足の場合と同様です。 - #property indicator_color4 Red
4番目のインジケーターとして中期陰陽足の終値までを表すヒストグラムを指定し、中期陰陽足の始値が中期陰陽足の終値よりも低い場合(=陽線の場合)に、足を「Red」で表示させるように指定します。
表示の仕組みは短期陰陽足の場合と同様です。 - #property indicator_color5 SpringGreen
5番目のインジケーターとして長期陰陽足の始値までを表すヒストグラムを指定し、長期陰陽足の始値が長期陰陽足の終値よりも高い場合(=陰線の場合)に、足を「SpringGreen」で表示させるように指定します。
表示の仕組みは短期陰陽足の場合と同様です。 - #property indicator_color6 Gold
6番目のインジケーターとして長期陰陽足の終値までを表すヒストグラムを指定し、長期陰陽足の始値が長期陰陽足の終値よりも低い場合(=陽線の場合)に、足を「Gold」で表示させるように指定します。
表示の仕組みは短期陰陽足の場合と同様です。
⑷ 線の太さを指定する
「In-Yo-Ashi.mq4」で表示される6つのデータの線の太さを指定します。
- #property indicator_width1(~6) 5
「In-Yo-Ashi.mq4」では、6つのデータは、すべて同じ太さ(=5)のヒストグラムで表示させるように指定しています。
3.インジケーターバッファーの宣言
インジケーターバッファーとは、インジケーターの計算に使用するデータを格納しておく配列のことをいいます。
インジケーターバッファーの詳細については「こちら」を参照してください。
「In-Yo-Ashi.mq4」における、インジケーターバッファーを宣言した部分の解釈を示すと、以下のようになります。
⑴ double Open_S[];
短期陰陽足の始値を格納していく配列です。
⑵ double Close_S[];
短期陰陽足の終値を格納していく配列です。
⑶ double Open_M[];
中期陰陽足の始値を格納していく配列です。
⑷ double Close_M[];
中期陰陽足の終値を格納していく配列です。
⑸ double Open_L[];
長期陰陽足の始値を格納していく配列です。
⑹ double Close_L[];
長期陰陽足の終値を格納していく配列です。
4.変数の宣言
「In-Yo-Ashi.mq4」においては、以下の項目をパラメーターとして指定します。
- 短期陰陽足の計算期間
- 中期陰陽足の計算期間
- 長期陰陽足の計算期間
上記の項目は、インジケーターをチャートに適用した際に任意の値に設定することができるようにするため、以下に示すように「外部変数」として宣言します。
- extern int Average_Period_S
短期陰陽足の計算期間 - extern int Average_Period_M
中期陰陽足の計算期間 - extern int Average_Period_L
長期陰陽足の計算期間
5.基本設定の記述
「In-Yo-Ashi.mq4」におけるinit()関数内に記述したコードについて解説します。
Initial-Settings-in-In-Yo-Ashi
⑴ SetIndexBuffer()とは
SetIndexBuffer()とは、MQL4であらかじめ定義されている関数で、各インジケーターバッファーを、インジケーターバッファー領域(データを一時的に蓄えるデータ領域)に割り当てるものです。
SetIndexBuffer()関数の詳細については「こちら」を参照してください。
⑵ SetIndexLabel()とは
SetIndexLabel()とは、MQL4であらかじめ定義されている関数で、データウィンドウにインジケーターの描画線の説明を表示させるものです。
SetIndexLabel()関数の詳細については「こちら」を参照してください。
⑶ SetIndexStyle()とは
SetIndexStyle()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画スタイル(線orヒストグラム、色など)を設定するものです。
SetIndexStyle()関数の詳細については「こちら」を参照してください。
⑷ SetIndexDrawBegin()とは
SetIndexDrawBegin()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画を開始するバーの位置を指定するものです。
SetIndexDrawBegin()関数の詳細については「こちら」を参照してください。
6.具体的な処理内容
「In-Yo-Ashi.mq4」のstart()関数内に記述したコードについて解説します。
⑴ int limit=……について
「limit」という変数を、「Bars-IndicatorCounted()」を初期値として宣言しています。
当該コードの詳細については「こちら」を参照してください。
⑵ 短期陰陽足の終値の計算
陰陽足の終値は、当日までの一定期間の終値の平均値として算出されます。
そこで、以下のような処理を行うコードを記述しています。
- 「i」が「0」の場合
「ア」の処理
終値の合計値を格納する変数として「Close_Sum」を宣言
↓
初期設定文:「j=i(=0)」
条件式:「j」が『「i+Average_Priod_S」(=3)』未満
再設定式:「jの値を1ずつ増加させる」
なので、「現在のバー」、「1本前のバー」、「2本前のバー」の終値(=Close[0]~Close[2])の合計値を変数「Close_Sum」に格納
↓
「イ」の処理
上記の値を「3(=Average_Period_S)」で除した値(=平均値)を、配列Close_S[0]に格納し、その値を提示レートの小数点以下の桁数で四捨五入 - 「i」が「1」の場合
「ア」の処理
終値の合計値を格納する変数として「Close_Sum」を宣言
↓
初期設定文:「j=i(=1)」
条件式:「j」が『「i+Average_Priod_S」(=4)』未満
再設定式:「jの値を1ずつ増加させる」
なので、「1本前のバー」、「2本前のバー」、「3本前のバー」の終値(=Close[1]~Close[3])の合計値を変数「Close_Sum」に格納
↓
「イ」の処理
上記の値を「3(=Average_Period_S)」で除した値(=平均値)を、配列Close_S[0]に格納し、その値を提示レートの小数点以下の桁数で四捨五入 - 以降、同様の処理を「i」の値を「1」ずつ増加させながら繰り返す。
⑶ 短期陰陽足の始値の計算
陰陽足の始値は、前日までの一定期間の終値の平均値として算出されます。
そこで、以下のような処理を行うコードを記述しています。
- 「i」が「0」の場合
「ウ」の処理
始値の合計値を格納する変数として「Open_Sum」を宣言
↓
初期設定文:「j=i(=0)」
条件式:「j」が『「i+Average_Priod_S」(=3)』未満
再設定式:「jの値を1ずつ増加させる」
なので、「1本前のバー」、「2本前のバー」、「3本前のバー」の終値(=Close[1]~Close[3])の合計値を変数「Open_Sum」に格納
↓
「エ」の処理
上記の値を「3(=Average_Period_S)」で除した値(=平均値)を、配列Open_S[0]に格納し、その値を提示レートの小数点以下の桁数で四捨五入 - 「i」が「1」の場合
「ウ」の処理
終値の合計値を格納する変数として「Open_Sum」を宣言
↓
初期設定文:「j=i(=1)」
条件式:「j」が『「i+Average_Priod_S」(=4)』未満
再設定式:「jの値を1ずつ増加させる」
なので、「2本前のバー」、「3本前のバー」、「4本前のバー」の終値(=Close[2]~Close[4])の合計値を変数「Open_Sum」に格納
↓
「エ」の処理
上記の値を「3(=Average_Period_S)」で除した値(=平均値)を、配列Open_S[1]に格納し、その値を提示レートの小数点以下の桁数で四捨五入 - 以降、同様の処理を「i」の値を「1」ずつ増加させながら繰り返す。
⑷ 中期陰陽足の計算
短期陰陽足の計算の場合と同様の処理を、「Average_Period_S」を「Average_Period_M」に置き換えて行います。
⑸ 長期陰陽足の計算
短期陰陽足の計算の場合と同様の処理を、「Average_Period_S」を「Average_Period_L」に置き換えて行います。