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の説明書で確認してください)
設定する場所
- MT5の「ツール」→「オプション」を開く(本体の表記:Ctrl+O)
- 「エキスパートアドバイザー」タブを開く
- 「WebRequest を許可する URL リスト:」(本体の表記)にチェックを入れる
- リストに、通信先のURLを追加する(例:
https://example.com) - 「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側でも同じ許可の設定が要る
本記事は設定の説明です。通信先は、信頼できるものだけを許可してください。


