MetaTrader 5(以下MT5)は、トレーダー向けの強力なプラットフォームですが、カスタムインディケーターを作成することで、さらに柔軟な分析が可能になります。本記事では、MQL5の「iMA」関数を使って移動平均線を描画する簡単なインディケーターを作成する方法を解説します。
iMAとは?
MT5の「iMA」関数は、移動平均線(Moving Average)を計算するための便利な関数です。この関数を使えば、単純移動平均(SMA)、指数移動平均(EMA)など、様々な種類の移動平均線を簡単に描画することができます。
完成コード
以下のコードは、移動平均線を描画するためのシンプルなカスタムインディケーターです。このコードを使って、チャート上に移動平均線を表示します。
mql5コピー#property indicator_chart_window // インディケーターをチャートウィンドウに表示
#property indicator_buffers 1 // インディケーターのバッファ数を1に設定
#property indicator_plots 1 // インディケーターのプロット数を1に設定
#property indicator_label1 "iMA" // プロットのラベル名を "iMA" に設定
#property indicator_type1 DRAW_LINE // プロットの描画タイプを線 (DRAW_LINE) に設定
#property indicator_color1 clrRed // プロットの色を赤 (clrRed) に設定
#property indicator_style1 STYLE_SOLID // プロットの線スタイルを実線 (STYLE_SOLID) に設定
#property indicator_width1 1 // プロットの線の太さを1に設定
//--- 入力パラメータ
input int ma_period=10; // 移動平均線の期間を指定 (デフォルトは10)
input int ma_shift=0; // 移動平均線のシフト値を指定 (デフォルトは0)
input ENUM_MA_METHOD ma_method=MODE_SMA; // 移動平均の種類を指定 (デフォルトは単純移動平均: MODE_SMA)
input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; // 計算に使用する価格を指定 (デフォルトは終値: PRICE_CLOSE)
//--- インディケーターバッファ
double iMABuffer[]; // 移動平均線の値を格納するバッファ
int handle; // iMA(移動平均線)のハンドルを格納する変数
//+------------------------------------------------------------------+
//| 初期化関数 (インディケーターの初期設定を行う) |
//+------------------------------------------------------------------+
int OnInit()
{
//--- バッファをインディケーターに登録
SetIndexBuffer(0, iMABuffer, INDICATOR_DATA); // バッファをインディケーター用に設定
PlotIndexSetInteger(0, PLOT_SHIFT, ma_shift); // プロットのシフト値を設定
//--- iMAハンドルを作成
handle = iMA(_Symbol, PERIOD_CURRENT, ma_period, ma_shift, ma_method, applied_price);
// 現在のチャートのシンボル (_Symbol) と時間軸 (PERIOD_CURRENT) を使用して移動平均線を作成
//--- ハンドルが無効な場合はエラーを表示して終了
if (handle == INVALID_HANDLE)
{
Print("Failed to create iMA handle, error: ", GetLastError()); // エラーメッセージを出力
return(INIT_FAILED); // 初期化失敗を返す
}
//--- インディケーターの短い名前を設定
IndicatorSetString(INDICATOR_SHORTNAME, StringFormat("iMA(%d)", ma_period));
// チャートに表示されるインディケーター名を設定 (例: iMA(10))
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[]) // スプレッドデータ配列
{
//--- iMA(移動平均線)の値をバッファにコピー
if (CopyBuffer(handle, 0, 0, rates_total, iMABuffer) < 0)
{
// 値のコピーが失敗した場合、エラーメッセージを出力して終了
Print("Failed to copy data from iMA, error: ", GetLastError());
return(0); // 計算を終了
}
return(rates_total); // 計算したバーの数を返す
}
//+------------------------------------------------------------------+
//| 終了関数 (インディケーターの終了処理を行う) |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- iMAハンドルを解放
if (handle != INVALID_HANDLE)
IndicatorRelease(handle); // ハンドルを解放してメモリを確保
}
コードのポイント解説
1. 入力パラメータ
ma_period: 移動平均線の期間(デフォルトは10)。ma_shift: 移動平均線をシフトする値(デフォルトは0)。ma_method: 移動平均の種類(単純移動平均 (SMA) がデフォルト)。applied_price: 計算に使用する価格(終値がデフォルト)。
これらを変更することで、自分のトレードスタイルに合った移動平均線を簡単にカスタマイズできます。
2. 初期化関数 (OnInit)
- 移動平均線を計算するための「iMA」ハンドルを作成。
- ハンドルが無効な場合はエラーを出力。
3. 計算関数 (OnCalculate)
CopyBuffer関数を使って、移動平均線の値をチャート上に描画するためのバッファにコピー。
4. 終了関数 (OnDeinit)
- ハンドルを解放してメモリを確保。
実際に試してみよう!
- MetaEditorを開く: MetaTrader 5の「MetaEditor」を起動し、新しいインディケーターを作成します。
- コードを貼り付ける: 上記のコードをエディタに貼り付けて保存します。
- コンパイル: 「コンパイル」ボタンをクリックしてコードをコンパイルします。エラーがないことを確認してください。
- チャートに適用: MetaTrader 5のチャートに新しく作成したインディケーターをドラッグ&ドロップします。
まとめ
このコードを使えば、移動平均線を簡単に描画できます。また、入力パラメータを変更することで、異なる種類の移動平均線を試すことも可能です。ぜひ、自分のトレードスタイルに合った設定を見つけてみてください!
移動平均線はトレンドの把握やエントリーポイントの判断に役立つ重要なツールです。この機会に、MQL5を使ったカスタムインディケーター作成の第一歩を踏み出してみましょう!


コメント