MT4カスタムインジケーターの作り方入門|最小サンプルで表示まで確認する手順
投資は自己責任であり、過去の成績は将来の利益を保証しません。本記事は投資助言ではありません。売買の判断は各自の責任において行ってください。
本記事は投資助言ではありません。公式ページで最新条件を確認してください。
はじめに:このサンプルの前提
この記事では、MT4でカスタムインジケーターを作るときの最小構成を整理します。扱うのは「作成 → コンパイル → チャート適用」までで、売買ロジックやEAの完成コードには踏み込みません。サンプルは OnCalculate() を使うため、インジケーターとして確認します。
サンプルコードは学習用・検証用です。実運用や利益を保証するものではありません。売買タイミング・銘柄・ロット数を推奨するものでもありません。実口座で使用する前提ではなく、デモ環境または検証環境で確認してください。MT4のビルドやブローカー環境により、表示や動作が異なる場合があります。
まず整理したい違い
| 種類 | 主な役割 | よく使う入口 |
|---|---|---|
| EA | 自動売買や条件実行を担う | OnTick() |
| スクリプト | 1回だけ実行する処理を担う | OnStart() |
| インジケーター | チャート上に線や表示を描く | OnCalculate() |
この記事はインジケーターに絞ります。EAの発注処理やスクリプトの単発実行は扱いません。
MT4カスタムインジケーターとは
カスタムインジケーターは、MT4のチャート上に独自の線や表示を出すためのプログラムです。標準の移動平均やRSIのような考え方で、チャートに補助線を重ねたり、独自の計算結果を見える形にできます。
- メタエディターでインジケーターを作成する
- 最小コードを書いてコンパイルする
- チャートに適用して表示を確認する
- 表示されないときは別記事で切り分ける
作成フロー全体図
- メタエディターを開く
- インジケーターのテンプレートを選ぶ
- 最小コードを書く
- コンパイルする
- MT4のチャートへ適用する
最小サンプルコード
ここでは、チャート上に1本のラインを表示するだけの最小構成を示します。SetIndexStyle、SetIndexBuffer、SetIndexLabel、OnCalculate の役割だけを確認するためのサンプルです。
#property strict
#property indicator_chart_window
#property indicator_buffers 1
double LineBuffer[];
int OnInit()
{
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1, clrDodgerBlue);
SetIndexBuffer(0, LineBuffer);
SetIndexLabel(0, "BasicLine");
IndicatorShortName("MQL4 Indicator Basic");
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(rates_total <= 0)
return(0);
int start = prev_calculated > 0 ? prev_calculated - 1 : 0;
for(int i = start; i < rates_total; i++)
LineBuffer[i] = close[i];
return(rates_total);
}
このコードは、終値を1本のラインとして描画するだけです。発注や条件分岐はありません。
メタエディターの起動とテンプレート選択
最初は MT4 からメタエディターを開き、インジケーターのテンプレートを選びます。保存先がインジケーター用フォルダになっているかも確認してください。
コンパイル手順
F7でコンパイルする- エラーが 0 件か確認する
- ナビゲーターに対象名が出るか確認する
チャートへの適用
コンパイルできたら、MT4 のナビゲーターから対象インジケーターをチャートへドラッグします。表示が追いつかないときや初回データが足りないときは、MT4のヒストリカルデータを確認・補充する手順 と MT4のアップデートが終わらないときの確認手順 を合わせて確認します。
各関数の役割の概要
OnInitは、初期設定を行う入口ですOnCalculateは、値を計算して描画する入口ですSetIndexBufferは、描画用の配列をバッファとして使えるようにする処理ですSetIndexStyleは、線の種類や色を決める処理ですSetIndexLabelは、表示名を付ける処理です
個別関数の詳細は、子記事で補完していく前提です。
FAQ
Q. EAとインジケーターの違いは何ですか?
A. EA は主に自動売買や条件実行に使い、インジケーターはチャート表示に使います。この記事はインジケーターの作成入口だけを扱います。
Q. SetIndexBuffer に値を入れても線が見えません。
A. バッファの設定、indicator_chart_window の指定、チャートの表示状態を確認してください。表示されない場合は MT4インジケーターが表示されない原因と確認手順 を確認する流れになります。
Q. 自作インジケーターは売買判断に使えますか?
A. この記事では売買判断は扱いません。まずは描画ができるところまでを確認してください。
Q. コンパイルできない場合はどこを見ればよいですか?
A. メタエディターのエラー表示を確認し、関数名、引数の数、セミコロンの抜けを見直してください。MT4のビルドやブローカー環境により、表示や動作が異なる場合があります。
まとめ
- インジケーターは
OnCalculate()を入口にする SetIndexStyle、SetIndexBuffer、SetIndexLabelで表示を組み立てる- 最初は売買ロジックを入れず、描画だけ確認する
- 表示されないときは、履歴データや更新状態も確認する
このHubを入口にして、必要なら個別関数の記事へ分けて確認していくと整理しやすくなります。サンプルコードは学習用・検証用です。動作を試すときは、デモ環境または検証環境で確認してください。