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

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

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

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

私もどれがよいか悩みながら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つのコードを調べるのに便利ですが、まとまった理論などは本のほうが勉強しやすいですね。

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

1995年生まれ、佐賀県出身。 高専を卒業して大手化学メーカーの研究職に就職するが、投資で1200万円作ったので好きなことをやろうと決め、5年で退職する。 現在は保険代理店に勤めながらお金から自由になる仕組みづくりに挑戦している。 趣味は国内旅行。「コロナが明けたら旅行に行こう」が妻との合言葉。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA