ローカル環境でMetaTrader 4とFlaskアプリケーションを起動し、MetaTrader 4側からMQL4のWebRequest()関数を利用してFlaskアプリケーションにリクエストを送る際に、5200エラーが発生した。
エラーの内容を調べたところ「ERR_WEBREQUEST_INVALID_ADDRESS」ということで、URLが不正であるというのが原因。
その際に指定していたURLは、以下の通り。
Http://127.0.0.1:5000/endpoint/
Flaskアプリケーションはポート番号を指定でき、通常通り5000に設定しており、MQL4側からも、URLにポート番号を指定する形にしたのだが、MQLでは、このやり方のポート番号の指定ができず、不正なURLということでエラーが発生してしまっていたという事らしい。
さらに調べると、通常URLをhttpで送信すると、自動的にポート番号80番が指定され、httpsを指定すると443が指定されるという仕様になっているらしい。そのため、自身でURLのポート番号を指定すると衝突してしまうということなのだと推測。
解決策としては、Flaskアプリケーションの起動ポート番号を80番にして、MQL4側のエンドポイントを以下のようにした。これで接続はできた。
Http://127.0.0.1/endpoint/
ただ、解決できたものの、これは少し不便。アプリケーションを複数起動したい時もあり(FlaskとFastAPIの同時起動など)、ポート番号は分けたい。また80番のような汎用の番号を使ってしまうと、ローカルの環境内で他のポートと衝突しないのかが心配。
そこでMQL4において、エンドポイントのポート番号を指定する方法がないのか、ChatGPTに聞いてみたところ、コードの方法が必要ということで諦めた。
仕方がないので、ポート番号ではなく、エンドポイントのディレクトリ名を分ける形で区別するという運用に。
以下は、参考にさせてもらったサイト。
今回の事象に限らず、教科書的にいつも参考にさせてもらっている。
▼参考サイト
https://naruhodo-mt4.com/p_error-warning-code/
このサイト、充実度がすごくて、本当に助かってる。どんな人が作っているのか。