MT5のWebRequestの許可URLの設定|-1が返る原因とエラー4014

MQL5のWebRequestでWebサイトに通信するEAは、通信先のURLを、MT5の「オプション」にある許可リストに追加しておかないと、通信できません。許可していないと、関数は-1を返します。許可リストは、セキュリティのため、初期状態では無効です。

この記事では、MetaTrader 5の公式ヘルプとMQL5リファレンスにもとづいて、設定の場所と書き方、うまくいかない時の確認、インジケーターとテスターでの制限をまとめます。

(確認:MetaTrader 5 公式ヘルプ「プラットフォームの設定」、MQL5リファレンス「WebRequest」、MT5本体に含まれる文字列。確認日:2026年10月6日。個別のEAが必要とするURLは、そのEAの説明書で確認してください)

設定する場所

  1. MT5の「ツール」→「オプション」を開く(本体の表記:Ctrl+O)
  2. 「エキスパートアドバイザー」タブを開く
  3. 「WebRequest を許可する URL リスト:」(本体の表記)にチェックを入れる
  4. リストに、通信先のURLを追加する(例:https://example.com)
  5. 「OK」を押す

公式ヘルプに、「MQL5アプリケーションが、WebRequest を送信するには、このオプションを有効にして、信頼するウェブサイトのURLを手動で明示的に指定する」と書かれています。リストから削除するには、項目を選んでDeleteキーを押します。

URLの書き方

  • MQL5リファレンスによると、ポートはプロトコルに基づいて自動で選ばれ、http:// は80、https:// は443です
  • EAが通信するURLの、ドメイン(ホスト)の部分を許可します。リファレンスの例では、https://finance.yahoo.com を許可リストに追加しています
  • EAの説明書に、追加すべきURLが書かれている場合は、その通りに入力します

うまくいかない時

症状 確認すること
WebRequest が -1 を返す URLが許可リストに入っていない可能性が高い(リファレンスの例にも「おそらくURLがリストされていない」とあります)。GetLastError() でエラーコードを確認する
エラー 4014 「Function is not allowed for call」。インジケーターから呼んでいる(WebRequest は、EAとスクリプトからのみ呼べる)
ストラテジーテスターで動かない WebRequest は、ストラテジーテスターの中では実行できません(リファレンス)
EAが固まる・遅くなる WebRequest は同期的に動き、応答を待つ間、プログラムの実行が止まります(リファレンス)。タイムアウトの値を短くし、頻繁に呼ばない
許可したのに通信できない 相手のサーバー・自分のネットワーク(セキュリティソフトなど)の側で止められていないか(一般的な確認)

エラーの出力は、「エキスパート」タブのログで確認します(MQL5のPrintとログの保存場所、操作ログとエキスパートログの違い)。

VPSに移す時も設定が要る

MQL5の仮想ホスティング(VPS)に環境を移す場合、VPS側のMT5のオプションでも、WebRequestの許可リストの設定が必要になります。公式ヘルプの「移行」のページに、「バーチャルプラットフォームで実行されるプログラムが WebRequest を使う場合は、エキスパートアドバイザータブで権限を設定し、信用されたURLのリストを設定します」と書かれています(MQL5仮想ホスティングの条件)。

外部と通信するEAを入れる前の注意(一般的な注意)

  • EAに、許可を求められたURL以外は、追加しない
  • 知らない配布元のEAは、通信先が不明なものを許可しない。公式ヘルプも、未知のEAではDLLなどのインポートを無効にするよう勧めています(MT5にインジケーターを追加する方法に、DLLの注意があります)
  • 通信の内容(口座の情報を送っていないか)は、EAの説明書で確認する

EAを入れる手順はMT5にEAを入れる方法にあります。

まとめ

  • 「ツール」→「オプション」→「エキスパートアドバイザー」で、「WebRequest を許可する URL リスト:」に、通信先のURLを追加する。初期状態は無効
  • -1 が返るのは、許可リストに無いのが典型。インジケーターからは呼べず(エラー4014)、テスターでも動かない
  • VPSに移す時は、VPS側でも同じ許可の設定が要る

本記事は設定の説明です。通信先は、信頼できるものだけを許可してください。