こんにちは、ウチダです。
投資のチャート分析って、本当にたくさんありますよね。
でも、一体どれが本当に儲かる分析法なのか悩んでいませんか?
私もどれがよいか悩みながら5年間投資した結果、平均足が結構いいことに気づきました。
そこで今回は、MT4で平均足を使ったチャート分析法について紹介します。
目次
平均足をチャートに表示しよう!MT4のプログラミングで分析する方法を紹介

平均足とは、通常のローソク足の4本値の平均を取って”別の4本足値”を計算し、別のローソク足として表示するものです。
通常のローソク足を平滑化するので、陰線と陽線が連続しやすくなるといった特徴があります。
そのため、相場のトレンドを探るのによく使用されます。
i番目のバーでの平均足の始値(haOpen)、終値(haClose)、高値(haHigh)、安値(haLow)は次のように計算されます。
- haOpen=1本前のバーの「haOpen」と「haClose」の平均値
- haClose=Open[i]、High[i]、Low[i]、Close[i]の平均値
- haHigh=High[i]、haOpen、haCloseの最大値
- haLow=Low[i]、haOpen、haCloseの最小値
今回はhaOpenとhaCloseからなる陽線と陰線によってトレンドの把握を目的とします。
プログラムで平均足をチャートに表示するには、カスタムインジケーターを使います。
カスタムインジケーターとは売買をせず、主にチャート分析に使用されるプログラムです。
平均足のプログラムを細かく区切って勉強してきます。
平均足プログラム1:インジケーターの設定をしよう
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_width1 3
#property indicator_width2 3
プログラム全体に関わる設定を行います。
#property 識別子 値
#propertyは、例えばインジケーターの色や数を設定します。
#property indicator_chart_window
計算した指標をチャートウィンドウ上に表示することを指定します。
値はありません。
#property indicator_buffers 2
表示させたい指標の数を指定します。
この場合、2個です。
陽線と陰線で表示するため、2つに設定しています。
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_width1 3
#property indicator_width2 3
チャートに表示する指標の色と太さは#propertyで指定できます。
指標1は赤色、指標2は青色に設定しています。
太さはいずれも3に設定しています。
平均足プログラム2:指標バッファを設定しよう
//指標バッファ
double BufOpen[];
double BufClose[];
BufOpen[]、BufClose[]に指標の値を計算させるため、変数という”箱”を用意します。
BufOpen[]の[]は具体的な配列のサイズを指定していません。
チャート上では過去に何個のデータがあるか分からず、時間が経てばデータが次々に増えていきます。
つまり、あらかじめ配列のサイズが決められないためです。
平均足プログラム3:インジケーターの初期設定を用意しよう
//初期化関数
int init()
{
//指標バッファの割当
SetIndexBuffer(0, BufOpen);
SetIndexBuffer(1, BufClose);
//指標ラベルの設定
SetIndexLabel(0, "haOpen");
SetIndexLabel(1, "haClose");
//指標スタイルの設定
SetIndexStyle(0, DRAW_HISTOGRAM);
SetIndexStyle(1, DRAW_HISTOGRAM);
return(0);
}
int init(){コード}は、インジケーターを稼働させたときの初期設定をします。
{コード}が初期設定の内容になります。
//指標バッファの割当
SetIndexBuffer(0, BufOpen);
SetIndexBuffer(1, BufClose);
BufOpenとBufCloseは計算結果を入れる箱ですが、このままでは指標としてチャートに表示されません。
指標をチャートに表示させるためにはSetIndexBuffer()を使います。
指標は0番目から割り当てます。
//指標ラベルの設定
SetIndexLabel(0, "haOpen");
SetIndexLabel(1, "haClose");
データウィンドウにインジケーターの説明を表示させるために使用します。
今回は指標0にBufOpenを割り当て、haOpenと表示させます。
指標1はBufCloseを割り当て、haCloseと表示させます。
//指標スタイルの設定
SetIndexStyle(0, DRAW_HISTOGRAM);
SetIndexStyle(1, DRAW_HISTOGRAM);
インジケーターの描画スタイル(線orヒストグラム、色など)を指定するために使用します。
DRAW_HISTOGRAMはヒストグラムを描画することを指定します。
ヒストグラムの色と太さはindicator_color、indicator_widthで設定済です。
最後にreturn(0);があります。
関数initはint型(整数)であるため、戻り値には整数が必要です。
そこで0を戻り値に入れています。
平均足プログラム4:平均足を計算しよう
//スタート関数
int start()
{
int limit = Bars - IndicatorCounted();
for(int i=limit - 1; i>=0; i--)
{
if(i == Bars-1) BufOpen[i] = (Open[i] + High[i] + Low[i] + Close[i])/4;
else BufOpen[i] = (BufOpen[i+1] + BufClose[i+1])/2;
BufClose[i] = (Open[i] + High[i] + Low[i] + Close[i])/4;
}
return(0);
}
int start(){コード}で、ティックが動くたびに{コード}が動きます。
これがないと最初の単発でプログラムが止まってしまいます。
継続してプログラムを動かすには、start()が必要です。
Barsは、「チャートウィンドウ」に表示されているバーの本数を格納しているint型の変数です。
IndicatorCounted()は過去の変化しなかったバーの数を返します。
つまりBars-IndicatorCounted()は最新のティックの数を計算します。
インジケーターを稼働させると、最初はIndicatorCounted()=0なので、limit=Barsになります。
i=limit-1=Bars-1となり、if条件(i==Bars-1)を満たすため、BufOpen[i] = (Open[i] + High[i] + Low[i] + Close[i])/4で計算されます。
2回目(ティックが更新された後)はlimit = Bars - IndicatorCounted()=1になります。
i=limit-1=1-1=0になるので、for内のコードはティックが更新されるたびに1回ずつ動作します。
if(i==Bars-1)は満たさないので、elseのコードが実行されます。
つまりBufOpen[i] = (BufOpen[i+1] + BufClose[i+1])/2で計算されます。
最後にstart()はint(整数)型なので、return(0)で戻り値を0にします。
これで平均足を表示するインジケーターができました。
最後にチャートに適用しましょう。
平均足プログラムを適用するとトレンドが見やすい!
まず適用する前がこちら

陽線と陰線を交互に繰り返しながらトレンドを形成しています。
ただ、連続したトレンドが見づらく感じます。
そこで平均足のインジケーターを適用するとこのようになります。

平均足の陽線が青色、陰線が赤色で表示されます。
連続したトレンドが見やすくなったと感じませんか?
あとはhaOpenとhaCloseの大小関係で注文方法を変えるプログラムを作れば、自動売買もできそうです。
今回のプログラムはこちらの書籍を参考にしました。
セットもあります。
ネットは1つのコードを調べるのに便利ですが、まとまった理論などは本のほうが勉強しやすいですね。
ここまで読んでくださりありがとうございました!