MT5のスクリプトとEAの違い|1回だけ動かす仕組みの使い方
MT5のスクリプトは、チャートにドラッグしたその1回だけ動いて終わるプログラムです。動かし続けるEAや、毎回描画し直すインジケーターとは動作条件が違います。
「全部まとめて閉じる」「今の値をファイルに書き出す」のような一度きりの作業は、EAではなくスクリプトで書くのが正解です。
(確認環境:MetaTrader 5 / Windows 11)
3種類の違い
| 種類 | いつ動くか | 向いている用途 |
|---|---|---|
| スクリプト | 実行した1回だけ | 一括決済、設定の一括変更、値の書き出し |
| EA(エキスパートアドバイザ) | 価格が動くたびに繰り返し | 自動売買、時間監視、条件の常時チェック |
| インジケーター | 足が更新されるたび | チャートへの描画 |
判断の目安は単純です。「押した時に1回やってほしい」ならスクリプト、「見ていない間もやってほしい」ならEAです。
スクリプトには常駐しないという利点があります。チャートに貼りっぱなしにならないため、意図しないタイミングで動く事故が起きません。
実行する手順
- ナビゲーターを開く(Ctrl + N)
- 「スクリプト」を開く
- 使いたいスクリプトをチャートへドラッグ&ドロップする
実行するとパラメータの入力画面が出て、確定した時点で処理が走ります。終わればそのまま消えます。チャート右上にアイコンは残りません。
動かない場合
- 発注を伴うスクリプトは、取引の許可が必要 — 実行画面で許可の項目にチェックが要る場合があります
- ツールバーの「アルゴリズム取引」がオフ — 売買を行うスクリプトは動きません
- ナビゲーターに出てこない — コンパイルが通っていない可能性があります(MQL5のコンパイルエラーが消えない)
自分で書く場合の最小構成
スクリプトは OnStart() という関数が1回呼ばれるだけの構造です。
#property script_show_inputs
input int InpValue = 10; // パラメータ
void OnStart()
{
Print("実行しました:", InpValue);
}
#property script_show_inputs を書かないと、パラメータの入力画面が出ません。ドラッグした瞬間に既定値で走ってしまうため、発注を伴うスクリプトでは必ず入れてください。
ファイルは MQL5\Scripts に置きます。場所はMT5の「ファイル」→「データフォルダを開く」から辿れます。
スクリプトが向いている2つの用途
1. 今の状態を一度で片付ける
保有中のポジションをまとめて閉じる、注文をまとめて消す、といった処理です。ただし標準機能でも同じことができます。手順はMT5で複数ポジションをまとめて決済する方法にまとめました。
スクリプトにする意味があるのは、標準のメニューでは選べない条件(特定の銘柄だけ、一定の含み益を超えたものだけ、など)で絞りたい場合です。
2. 値をファイルに書き出す
インジケーターの計算結果を検証したい時、画面で数えるのではなくCSVにしてしまう方が早く、間違いません。これもスクリプト向きです。書き方はMQL5でCSVを出力する方法で扱っています。
🔴 スクリプトでは埋められないこと
スクリプトは実行した瞬間の処理しかできません。「あとで自動的にやっておいて」はできない、ということです。
つまり押し忘れると何も起きません。決済の押し忘れを無くしたいという動機でスクリプトを探している場合、この点で目的と手段が食い違います。
見ていない間に動いてほしい処理はEAの領域です。時間で区切って自動的に決済する考え方はMT5で決済だけを自動化する方法にまとめています。
まとめ
- スクリプトは実行した1回だけ動く。常駐しない
- ナビゲーター(Ctrl + N)からチャートへドラッグして実行する
- 自分で書くなら
OnStart()。script_show_inputsを忘れない - 向いているのは一括処理と値の書き出し
- 🔴 押し忘れると動かない。見ていない間の処理はEAの役割
「見ていない間もやってほしい」側の実装は、タイマーを使います。MQL5で一定時間ごとに処理する方法にまとめました。
EAを実際にMT5へ入れる手順はMT5にEAを入れる方法|1つのチャートに1つまでにまとめています。
本記事は操作手順と仕様を説明したものであり、特定の売買を推奨するものではありません。投資判断はご自身の責任で行ってください。FXは元本割れの可能性があります。


