MQL4 お金の健康

投資でプログラミングを活用したい!チャート分析で平均足を表示した話

こんにちは、ウチダです。

投資のチャート分析って、本当にたくさんありますよね。

でも、一体どれが本当に儲かる分析法なのか悩んでいませんか?

私もどれがよいか悩みながら5年間投資した結果、平均足が結構いいことに気づきました。

そこで今回は、MT4で平均足を使ったチャート分析法について紹介します。

平均足をチャートに表示しよう!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からなる陽線と陰線によってトレンドの把握を目的とします。

プログラムで平均足をチャートに表示するには、カスタムインジケーターを使います。

カスタムインジケーターとは売買をせず、主にチャート分析に使用されるプログラムです。

平均足のプログラムを細かく区切って勉強してきます。

(参考:MT4の自動売買プログラムの作り方はこちら

平均足プログラム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つのコードを調べるのに便利ですが、まとまった理論などは本のほうが勉強しやすいですね。

ここまで読んでくださりありがとうございました!

-MQL4, お金の健康
-,