こんにちは!今回から始まるこのシリーズでは、MQL5を使ったインディケータ開発について解説していきます。第1回では、トレードの基本中の基本である 移動平均線 をチャート上に描画する方法を学んでいきます。
移動平均線は、価格のトレンドを視覚的に把握するための重要なテクニカル指標です。この記事では、MQL5のコードを使って移動平均線を描画するインディケータを作成し、その仕組みを詳しく解説します。
1. 移動平均線とは?
移動平均線(Moving Average, MA)は、一定期間の価格の平均値を計算し、線としてチャート上に表示したものです。例えば、14期間の移動平均線は、直近14本のローソク足の終値の平均を計算し、それを線でつないだものになります。
移動平均線には以下の種類があります:
- 単純移動平均線(SMA):指定した期間の価格の単純な平均を計算。
- 指数移動平均線(EMA):最近の価格に重みを置いて計算。
- 加重移動平均線(WMA):価格に異なる重みを付けて計算。
今回の例では、最も基本的な 単純移動平均線(SMA) を使用します。
2. MQL5で移動平均線を描画する
それでは、移動平均線を描画するインディケータをMQL5で作成してみましょう。以下はそのコードです。
コード例
mql5コピー// インディケータがチャートウィンドウに描画されることを指定// 計算関数
#property indicator_chart_window
// インディケータのバッファ数を1つに設定
#property indicator_buffers 1
// インディケータの色を赤に設定
#property indicator_color1 Red // 移動平均線の色を赤に設定
// インディケータのデータを格納するバッファ
double ma_buffer[];
// ユーザーが設定できる移動平均線の期間
input int ma_period = 14; // 移動平均線の期間
// 移動平均を計算するためのハンドル
int ma_handle;
int OnInit()
{
// 移動平均の計算ハンドルを作成
ma_handle = iMA(NULL, 0, ma_period, 0, MODE_SMA, PRICE_CLOSE);
// ハンドルが無効であればエラーを出力し、初期化失敗を返す
if (ma_handle == INVALID_HANDLE)
{
Print("移動平均ハンドルの作成に失敗しました");
return(INIT_FAILED);
}
// インディケーターバッファを登録
SetIndexBuffer(0, ma_buffer);
// バッファの描画スタイルを設定
PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE);
// インディケータ名を設定
IndicatorSetString(INDICATOR_SHORTNAME, "移動平均線 (" + 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[]) // スプレッド配列{
// 移動平均のデータを取得
if (CopyBuffer(ma_handle, 0, 0, rates_total, ma_buffer) <= 0)
{
Print("移動平均データの取得に失敗しました");
return(0);
}
return(rates_total);
}
void OnDeinit(const int reason)
{
// ハンドルを解放
if (ma_handle != INVALID_HANDLE)
IndicatorRelease(ma_handle);
}
3. コードの解説
(1) 基本設定
mql5コピー#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_chart_windowは、インディケータがチャートウィンドウに描画されることを指定します。#property indicator_buffers 1は、インディケータが使用するバッファを1つ確保することを意味します。#property indicator_color1 Redは、移動平均線の色を赤に設定しています。
(2) 移動平均線の計算ハンドルを作成
mql5コピーma_handle = iMA(NULL, 0, ma_period, 0, MODE_SMA, PRICE_CLOSE);
iMA関数を使用して、移動平均線の計算設定を作成します。NULL: 現在のチャートを指定。0: 現在の時間枠を指定。ma_period: ユーザーが指定した移動平均の期間。0: シフトはなし。MODE_SMA: 単純移動平均を指定。PRICE_CLOSE: 終値を使用。
(3) バッファにデータを格納
mql5コピーSetIndexBuffer(0, ma_buffer);
SetIndexBuffer関数を使って、移動平均のデータを格納するためのバッファを登録します。
(4) データを取得して描画
mql5コピーif (CopyBuffer(ma_handle, 0, 0, rates_total, ma_buffer) <= 0)
{
Print("移動平均データの取得に失敗しました");
return(0);
}
CopyBuffer関数を使用して、計算された移動平均のデータをma_bufferにコピーします。- コピーが失敗した場合はエラーメッセージを出力します。
(5) ハンドルの解放
mql5コピーif (ma_handle != INVALID_HANDLE)
IndicatorRelease(ma_handle);
- インディケータが削除される際に、作成した移動平均のハンドルを解放してメモリを確保します。
4. 実行結果
上記のコードをMetaEditorに貼り付けてコンパイルし、チャートに適用すると、指定した期間の移動平均線が描画されます。デフォルトでは14期間の移動平均線が表示され、線の色は赤になっています。
5. まとめ
今回の記事では、移動平均線を描画するインディケータの作成方法を解説しました。移動平均線は、テクニカル分析の基本ツールであり、多くのトレーダーにとって非常に重要な指標です。
次回は、この移動平均線をさらにカスタマイズし、複数の移動平均線を同時に描画する方法について解説します。ぜひお楽しみに!

コメント