2.移動平均線を描くカスタムインディケーターを作ろう!【MQL5入門】

こんにちは!前回は安値に線を引くインディケータを作りましたが、今回は「移動平均線」を描画するカスタムインディケーターを作成する方法を解説します。移動平均線は、トレンドを視覚化するための基本的なテクニカル指標であり、多くのトレーダーに愛用されています。

この記事では、シンプルな移動平均線を描画するインディケーターを作成する手順を、初心者にもわかりやすく説明します。コードの変更点や動作確認方法も詳しく解説しているので、ぜひ最後まで読んでみてください!


1. 完成コード

以下が今回作成する移動平均線を描画するインディケーターの完成コードです。

mql5コピー
#property indicator_chart_window // チャートウィンドウに描画
#property indicator_buffers 1 // バッファ数を1つ設定
#property indicator_color1 clrBlue // ラインの色を青に設定

double MA_Buffer[]; // 移動平均値を格納するバッファ

// パラメータ(移動平均線の期間)
input int MA_Period = 14; // 移動平均線の期間(デフォルト: 14)

// 初期化関数
int OnInit()
{
// バッファをインディケーターに登録
SetIndexBuffer(0, MA_Buffer);

// 描画タイプを線に設定
PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE);

// インディケーターの名前を設定
IndicatorSetString(INDICATOR_SHORTNAME, "Simple MA(" + IntegerToString(MA_Period) + ")");

return(INIT_SUCCEEDED);
}

// 計算関数
int OnCalculate(const int rates_total, // 利用可能なバーの総数
const int prev_calculated, // 前回計算されたバーの数
const datetime &time[], // 時間配列
const double &open[], // 始値配列
const double &high[], // 高値配列
const double &low[], // 安値配列
const double &close[], // 終値配列
const long &tick_volume[], // ティックボリューム配列
const long &volume[], // 実ボリューム配列
const int &spread[]) // スプレッド配列
{
// 初回計算または更新の必要があるバーから開始
int start = prev_calculated > 0 ? prev_calculated - 1 : 0;

// 移動平均線の計算
for (int i = start; i < rates_total; i++)
{
double sum = 0.0;
int count = 0;

// 移動平均を計算するためのループ
for (int j = i; j > i - MA_Period && j >= 0; j--)
{
sum += close[j]; // 終値を加算
count++;
}

// 平均値を計算してバッファに格納
MA_Buffer[i] = count > 0 ? sum / count : 0.0;
}

return(rates_total); // 計算されたバーの数を返す
}

2. 元のコードとの違い

今回のコードは、元の「安値(Low)」を描画するインディケーターを「移動平均線(Moving Average)」を描画するインディケーターに変更したものです。以下に変更点を詳しく解説します。


(1) バッファの変更

元のコード:

mql5コピー
double Low_Buffer[]; // 安値を格納するバッファ

変更後:

mql5コピー
double MA_Buffer[]; // 移動平均値を格納するバッファ
  • 移動平均線の値を格納するために、MA_Bufferという名前のバッファを定義しました。
  • このバッファに移動平均線の計算結果を格納します。

(2) パラメータの追加

mql5コピー
input int MA_Period = 14; // 移動平均線の期間(デフォルト: 14)
  • ユーザーが移動平均線の期間を変更できるように、input変数を追加しました。
  • デフォルト値は14に設定していますが、インディケーターのプロパティ画面から自由に変更可能です。

(3) 初期化関数の変更

元のコード:

mql5コピー
IndicatorSetString(INDICATOR_SHORTNAME, "Low Line");

変更後:

mql5コピー
IndicatorSetString(INDICATOR_SHORTNAME, "Simple MA(" + IntegerToString(MA_Period) + ")");
  • インディケーターの名前を「Simple MA(期間)」に変更しました。
  • 例えば、期間が14の場合は「Simple MA(14)」と表示されます。

(4) 計算関数の変更

元のコード:

mql5コピー
for (int i = start; i < rates_total; i++)
{
Low_Buffer[i] = low[i]; // 安値をバッファに格納
}

変更後:

mql5コピー
for (int i = start; i < rates_total; i++)
{
double sum = 0.0;
int count = 0;

// 移動平均を計算するためのループ
for (int j = i; j > i - MA_Period && j >= 0; j--)
{
sum += close[j]; // 終値を加算
count++;
}

// 平均値を計算してバッファに格納
MA_Buffer[i] = count > 0 ? sum / count : 0.0;
}
  • 移動平均線を計算するためのループを追加しました。
    • 現在のバー(i)から過去のバー(i - MA_Period)までの終値を加算します。
    • 加算した値をバーの数で割り、平均値を計算します。
    • 計算結果をMA_Bufferに格納します。

3. インディケーターの動作確認

(1) コードをMetaEditorに貼り付ける

  1. MetaTrader 5を起動し、MetaEditorを開きます。
  2. 新しいインディケーターを作成し、上記のコードを貼り付けます。

(2) コンパイル

  • MetaEditorの「コンパイル」ボタンをクリックして、エラーがないか確認します。

(3) チャートに適用

  1. MetaTrader 5のチャートを開きます。
  2. ナビゲーターウィンドウから作成したインディケーターをドラッグ&ドロップします。
  3. 必要に応じて期間(MA_Period)を変更して、移動平均線が正しく表示されることを確認してください。

4. 結果の確認

チャート上に青い移動平均線が表示されます。この移動平均線は、指定した期間(デフォルトは14)の終値の平均を基に描画されています。


5. 次のステップ

今回作成したインディケーターは、非常にシンプルな単純移動平均(SMA)を描画するものです。次のステップとして、以下のような改良に挑戦してみてはいかがでしょうか?

(1) 移動平均線の種類を追加

  • 単純移動平均(SMA)だけでなく、指数移動平均(EMA)や加重移動平均(WMA)も追加してみましょう。

(2) 複数の移動平均線を表示

  • 短期移動平均線と長期移動平均線を表示し、ゴールデンクロスやデッドクロスを分析するインディケーターを作成してみましょう。

(3) ラインの色や太さを変更

  • 見やすさを向上させるために、ラインの色や太さを変更するオプションを追加してみましょう。

まとめ

この記事では、MQL5を使った移動平均線を描画するカスタムインディケーターの作成方法を解説しました。移動平均線はテクニカル分析の基本であり、カスタムインディケーターを作る練習としても最適です。

最初はシンプルなものから始めて、少しずつ複雑なインディケーターに挑戦していきましょう!分からないことがあれば、ぜひコメントで質問してください。それでは、良いプログラミングライフを!😊

コメント

タイトルとURLをコピーしました