
「アラートを出したい」「ゴールデンクロスで売買したい」など、やりたいことから MQL のコードを探せる逆引き辞典です。57件のレシピについて、MT4(MQL4)と MT5(MQL5)のそのまま使える完成コードを、コンパイル確認済みで載せています。
よく調べられるレシピ
- アラートウィンドウを出したいAlert() を使います。ポップアップの画面が開き、音も鳴ります。
- メールを送りたいSendMail(件名, 本文) を使います。事前に MT4・MT5 の「オプション」→「メール」の設定が必要です。
- スマホにプッシュ通知を送りたいSendNotification(文字列) を使います。MetaQuotes ID をターミナルに設定しておく必要があります。
- チャートに売買サイン(矢印)を出したいインジケーターのバッファを2本(買い・売り)用意し、描画を DRAW_ARROW にして、サインの足だけ価格を入れます。
- ゴールデンクロス・デッドクロスで売買したい短期 MA と長期 MA の値を「2本前」と「1本前」で比べ、上下が入れ替わったらクロスと判定します。
- 新しい足ができたときだけ処理したい今の足の開始時刻 iTime(_Symbol, PERIOD_CURRENT, 0) を前回の値と比べ、変わったら新しい足と判定します。
- 資金の◯%のリスクでロット数を計算したい「許容損失額 ÷(損切り幅 × 1ロットあたりの1ポイントの価値)」で計算し、最小ロット・刻み幅に合わせます。
- トレーリングストップを入れたい現在値から一定の幅をとった位置に損切りを計算し、今の損切りより有利なときだけ OrderModify()・PositionModify() で動かします。
- 全ポジションを決済したい(EA のポジションだけも可)ポジションの一覧を後ろから順にループして、1つずつ決済します。マジックナンバーで絞れば特定の EA の分だけ決済できます。
- 取引する時間帯を限定したいTimeCurrent(構造体) でサーバー時刻の「時」を取り出し、開始時〜終了時の範囲内かを判定します。日付をまたぐ時間帯にも対応させます。
- 保有中のポジション数を数えたいポジションの一覧をループし、通貨ペア・マジックナンバー・売買の向きで絞って数えます。
- ポジションは1つだけにしたい(重複エントリーを防ぎたい)注文の前に、この EA のポジションがすでにあるかを数え、あれば注文しないようにします。
通知・表示
アラート・メール・スマホ通知・サウンドで知らせる方法と、チャートに文字やボタンを表示する方法です。
- アラートウィンドウを出したいAlert() を使います。ポップアップの画面が開き、音も鳴ります。
- 同じ足で何度もアラートが鳴らないようにしたい最後にアラートを出した足の時刻を覚えておき、同じ足なら鳴らさないようにします。
- メールを送りたいSendMail(件名, 本文) を使います。事前に MT4・MT5 の「オプション」→「メール」の設定が必要です。
- スマホにプッシュ通知を送りたいSendNotification(文字列) を使います。MetaQuotes ID をターミナルに設定しておく必要があります。
- 音だけ鳴らしたいPlaySound("ファイル名.wav") を使います。アラート画面を出さずに音だけで知らせられます。
- チャートの左上に情報を表示したいComment() を使います。"\n" で改行しながら、残高やスプレッドなどを並べられます。
- チャートの好きな位置に文字を表示したいObjectCreate() で OBJ_LABEL を作り、OBJPROP_XDISTANCE・OBJPROP_YDISTANCE で位置、OBJPROP_TEXT で文字を設定します。
売買サイン・相場の判定
ゴールデンクロス、RSI の買われすぎ、ブレイクアウト、新しい足の判定など、売買のきっかけを判定する方法です。
- ゴールデンクロス・デッドクロスで売買したい短期 MA と長期 MA の値を「2本前」と「1本前」で比べ、上下が入れ替わったらクロスと判定します。
- チャートに売買サイン(矢印)を出したいインジケーターのバッファを2本(買い・売り)用意し、描画を DRAW_ARROW にして、サインの足だけ価格を入れます。
- 新しい足ができたときだけ処理したい今の足の開始時刻 iTime(_Symbol, PERIOD_CURRENT, 0) を前回の値と比べ、変わったら新しい足と判定します。
- RSI の買われすぎ・売られすぎでサインを出したいRSI を2本分取得し、30 を下から上に戻ったら買いサイン、70 を上から下に戻ったら売りサインと判定します。
- MACD とシグナルのクロスを判定したいMACD のメインライン(バッファ 0)とシグナルライン(バッファ 1)を2本分取得し、上下の入れ替わりを比べます。
- ボリンジャーバンドの ±2σ タッチを判定したいiBands() で上のバンド・下のバンドの値を取得し、確定足の高値・安値(または終値)と比べます。
- 直近 N 本の最高値・最安値を求めたいiHighest() で最も高い足の位置を求め、iHigh() でその足の高値を取得します(安値は iLowest() と iLow())。
- 前日の高値・安値ブレイクを判定したいiHigh(_Symbol, PERIOD_D1, 1)・iLow(_Symbol, PERIOD_D1, 1) で前日の高値・安値を取得し、現在値と比べます。
- 陽線・陰線や連続陽線を判定したい終値と始値を比べ、終値 > 始値なら陽線、終値 < 始値なら陰線です。連続は確定足を順に調べます。
- 上位足のトレンド方向を判定したいiMA() などの時間足の引数に PERIOD_H4・PERIOD_D1 などを指定し、上位足の移動平均と価格を比べます。
- 手持ちのインジケーターのサインで売買したいiCustom() でインジケーターを読み込み、矢印が出るバッファの値が 0・EMPTY_VALUE 以外ならサインと判定します。
注文・決済
成行・指値・逆指値の注文、損切り・利確の設定、一括決済、注文の再試行など、売買の操作をする方法です。
- 成行で買い・売りの注文を出したいMQL4 は OrderSend(銘柄, OP_BUY, ロット, Ask, …)、MQL5 は CTrade の trade.Buy(ロット) を使います。
- 損切り・利確を pips で指定して注文したい1pips の大きさ(5桁・3桁口座は _Point × 10)を求め、損切り・利確の価格を計算して NormalizeDouble() で丸めます。
- 指値・逆指値注文を出したいMQL4 は OrderSend() の種類に OP_BUYLIMIT・OP_BUYSTOP など、MQL5 は CTrade の BuyLimit()・BuyStop() などを使います。
- 全ポジションを決済したい(EA のポジションだけも可)ポジションの一覧を後ろから順にループして、1つずつ決済します。マジックナンバーで絞れば特定の EA の分だけ決済できます。
- 待機注文(指値・逆指値)をすべて取り消したいMQL4 は OrderType() が OP_BUYLIMIT 以上の注文を OrderDelete()、MQL5 は OrderGetTicket() で順に取り出して trade.OrderDelete() します。
- 注文に失敗したら何回か再試行したい一時的なエラー(リクオート・サーバー混雑など)のときだけ、少し待って価格を取り直してから再送します。
- 利益が出たら半分だけ決済したいMQL4 は OrderClose() のロットに保有量より小さい値、MQL5 は trade.PositionClosePartial(チケット, ロット) を使います。
ポジション管理
ポジション数の確認、トレーリングストップ、建値移動、時間での決済など、持っているポジションを管理する方法です。
- 保有中のポジション数を数えたいポジションの一覧をループし、通貨ペア・マジックナンバー・売買の向きで絞って数えます。
- ポジションは1つだけにしたい(重複エントリーを防ぎたい)注文の前に、この EA のポジションがすでにあるかを数え、あれば注文しないようにします。
- トレーリングストップを入れたい現在値から一定の幅をとった位置に損切りを計算し、今の損切りより有利なときだけ OrderModify()・PositionModify() で動かします。
- 含み益が出たら損切りを建値に移動したい含み益が一定に達したら、損切りを建値(+少しの利益)に変更します。変更は1回だけになるよう、今の損切りと比べます。
- 含み損益の合計を計算したいポジションをループして、損益にスワップと手数料を足して合計します。
- 一定時間たったポジションを決済したい現在のサーバー時刻 TimeCurrent() から約定時刻を引いて保有時間(秒)を求め、上限を超えたら決済します。
- 前回の取引が勝ちか負けかを調べたいMQL4 は口座履歴(MODE_HISTORY)、MQL5 は HistorySelect() で読んだ決済のディールから、いちばん新しいものの損益を調べます。
資金管理・リスク
リスク%からのロット計算、ロットの丸め、pips の換算、損失での停止など、資金を守るための方法です。
- 資金の◯%のリスクでロット数を計算したい「許容損失額 ÷(損切り幅 × 1ロットあたりの1ポイントの価値)」で計算し、最小ロット・刻み幅に合わせます。
- ロット数を最小ロット・刻み幅に合わせたいSYMBOL_VOLUME_STEP(刻み幅)で切り捨て、SYMBOL_VOLUME_MIN・SYMBOL_VOLUME_MAX の範囲に収めます。
- pips とポイントを正しく換算したい(3桁・5桁対応)_Digits が 3 か 5 の口座では 1pips = 10 ポイント(_Point × 10)、2 か 4 の口座では 1pips = 1 ポイントです。
- 注文する前に証拠金が足りるか確認したいMQL4 は AccountFreeMarginCheck()、MQL5 は OrderCalcMargin() で必要証拠金を計算し、余剰証拠金と比べます。
- 損失が一定を超えたら EA を止めたい有効証拠金が開始時の残高の◯%を下回ったら新規注文をやめ、必要なら ExpertRemove() で EA を外します。
- 今日の確定損益を計算したい今日(サーバー時刻)の 0 時以降に決済した取引の損益を、履歴から合計します。
時間・取引条件
取引する時間帯や曜日を限定する、スプレッドが広いときは取引しない、など取引する条件を絞る方法です。
- 取引する時間帯を限定したいTimeCurrent(構造体) でサーバー時刻の「時」を取り出し、開始時〜終了時の範囲内かを判定します。日付をまたぐ時間帯にも対応させます。
- 金曜日の指定時刻にポジションを決済したい(週末持ち越しを避けたい)サーバー時刻の曜日(day_of_week が 5)と時刻を判定し、指定時刻を過ぎたら全決済し、新規注文も止めます。
- 日本時間で時刻を判定したいTimeGMT() に 9 時間を足すと日本時間になります。ただしバックテストでは使えないため、サーバー時刻との時差を入力して使う方法もあります。
- スプレッドが広いときは注文しないようにしたいSymbolInfoInteger(_Symbol, SYMBOL_SPREAD) で現在のスプレッド(ポイント)を取得し、上限を超えていたら注文をやめます。
EA の基本・安全対策
マジックナンバー、口座番号や期限での使用制限、バックテストの判定、定期処理など、EA を安全に動かすための方法です。
- マジックナンバーで自分の EA の注文を区別したい注文にマジックナンバーを付け(MQL4 は OrderSend の引数、MQL5 は trade.SetExpertMagicNumber)、ポジションを扱うときに同じ番号のものだけを選びます。
- 特定の口座番号でだけ EA を動かしたいOnInit() で AccountInfoInteger(ACCOUNT_LOGIN) を許可した口座番号と比べ、違えば INIT_FAILED を返して起動しないようにします。
- EA に有効期限を付けたい期限の日時を D'2026.12.31 23:59' のように書いておき、TimeCurrent() が期限を過ぎていたら動かないようにします。
- バックテスト中かどうかで処理を分けたいMQLInfoInteger(MQL_TESTER) が true ならストラテジーテスターで動いています(MQL4・MQL5 共通)。
- ティックが来なくても一定時間ごとに処理したいOnInit() で EventSetTimer(秒) を呼び、OnTimer() に処理を書きます。OnDeinit() で EventKillTimer() を呼んで止めます。
オブジェクト・画面
水平線・ボタンなどのオブジェクトを作る・読む・消す方法です。
ファイル・データ保存
CSV の書き出し・読み込みや、再起動しても値を残す方法です。
- ローソク足のデータを CSV に書き出したいFileOpen() に FILE_WRITE | FILE_CSV を付けて開き、FileWrite() で1行ずつ書き、最後に FileClose() します。
- CSV ファイルを読み込みたいFileOpen() に FILE_READ | FILE_CSV を付けて開き、FileReadString() で1項目ずつ読み、FileIsLineEnding() で行の終わりを判定します。
- ターミナルを再起動しても値を残したいGlobalVariableSet(名前, 値) でターミナルのグローバル変数に保存し、起動時に GlobalVariableGet() で読み戻します。
- エントリーしたときのチャートを画像で残したいChartScreenShot(0, ファイル名, 幅, 高さ) で、チャートの画像を Files フォルダに保存します。
インジケーター作成
移動平均線・オシレーター・色が変わる線など、カスタムインジケーターを作る方法です。
該当するレシピが見つかりませんでした。短い言葉(例:通知、ロット、決済)や関数名で探してみてください。
よくある質問
コードはどこに貼り付ければいいですか?
MetaEditor(MT4・MT5 のメニュー「ツール」→「MetaQuotes Language Editor」)で「新規作成」を選び、EA ならエキスパートアドバイザ、インジケーターならカスタムインディケータを作ります。できたファイルの中身をすべて消してコードを貼り付け、「コンパイル」を押すと使えるようになります。各ページに、そのコードの種類(EA・インジケーター・スクリプト)を書いています。
MT4 用と MT5 用のどちらを使えばいいですか?
お使いのターミナルに合わせて、MT4 なら MQL4、MT5 なら MQL5 のコードを使います。MQL4 のコードは MT5 では動かず、その逆も同じです。各ページで両方のコードを切り替えて表示できます。
自分の EA に機能を足したいときは?
ページのコードの中から、目的の処理をしている関数(例:アラートを出す部分、ロットを計算する関数)だけをコピーして、自分の EA の同じ場所(OnTick() など)に組み込みます。組み込んだらコンパイルし、エラーが出たら MQLエラー解説辞典で意味を調べてください。
このコードで実際に取引しても大丈夫ですか?
コードはコンパイルできることを確認した学習用のサンプルで、利益を保証するものではありません。実際の口座で使う前に、必ずデモ口座やストラテジーテスターで、思いどおりに動くかを確かめてください。












