EAの納品を受け取った時の確認|ソース・コンパイル・テスター・デモ口座の順に
外注したEAが納品されたら、①ソース(.mq5)が届いたか、②自分のPCでコンパイルして「0 errors」か、③ストラテジーテスターで仕様どおりに動くか、④デモ口座で動かして問題がないかの順に確認します。ココナラでは、納品後に何もしないと72時間で自動承諾になり、差し戻しは1回だけです。確認は、期限内に終えておきます。
この記事では、MetaEditorのヘルプとMQL5リファレンスにもとづいて確認の手順をまとめ、MetaEditorで実際にコンパイルして出たログを例に載せます。(確認日:2026年10月19日/MetaEditorは、筆者が使っているTitan FX版)
1. ソースファイルが届いたか
MetaEditorのヘルプには、コンパイル済みのEX5ファイルは、ソース(MQ5・MQH)なしで配布できると書かれ、デバッグはソースなしでは不可能と書かれています。ソースがなければ、納品後に、バグが見つかっても、仕様を変えたくなっても、自分では直せません。仕様書に、納品物として、ソース(.mq5と、使うインクルードファイル)を書いておきます(EA制作を頼む時の仕様書の項目)。
ヘルプには、デバッグの過程で作ったEX5を配布することは推奨されないとも書かれています。納品されたEX5が、通常のコンパイルで作られたものかを、出品者に確認します。
2. 自分のPCでコンパイルする
MetaEditorでソースを開き、メニューかF7でコンパイルします。結果は、[ツールボックス]の[エラー]タブに出ます。ヘルプには、コンパイルがエラーなしで通れば、できたプログラムをプラットフォームで実行できる、と書かれています。
筆者がコンパイルして出たログ(実測)
3つの小さなテスト用プログラムを、MetaEditorでコンパイルしました。
| テスト | ログの最後の行(Result) | ex5 | そのほかの行 |
|---|---|---|---|
| 正常なプログラム | Result: 0 errors, 0 warnings, 687 ms elapsed, cpu='X64 Regular' | できた(5,820バイト) | ― |
| 型の変換(double→int)を含む | Result: 0 errors, 1 warnings | できた(5,944バイト) | warning 43: possible loss of data due to type conversion from 'double' to 'int' |
| 未定義の変数を使う | Result: 1 errors, 0 warnings | できない | error 256: undeclared identifier 'UndefinedVariable' |
分かることは3つです。
- 警告があっても、EX5はできます。納品物のコンパイルでは、「0 errors」だけでなく、警告の数も確認します。警告の意味は、出品者に説明してもらいます
- エラーがあれば、EX5はできません。納品されたEX5が、渡されたソースから作られたかは、EX5を見ても確かめられません。本番では、納品されたEX5ではなく、自分でソースからコンパイルしたEX5だけを使うのが安全です(コンパイル結果が、出品者のログと同じになるかも見ます)
- ログの
cpu='X64 Regular'は、コンパイルのモードです。MetaEditorのヘルプには、公共使用や販売用のプログラムは、X64通常モードの基本命令セットでコンパイルするのが、互換性の面で最大限に確保される、とあります。自分のPCだけで使うEAなら、高度な命令でコンパイルしてもよい、とも書かれています
コマンドラインでコンパイルした時の終了コードは、筆者の環境では、正常とエラーで、期待と逆の値になりました(正常と警告で1、エラーで0)。自動化する時は、終了コードではなく、ログの「Result:」の行を読んでください。
3. 外に出ていく通信がないか、ソースで確認する
仕様書で「外部通信・DLLは使わない」と決めた場合は、ソースを検索して、使われていないかを確認します。
Get-ChildItem -Recurse -Include *.mq5,*.mqh | Select-String -Pattern "#import|WebRequest|Socket|SendMail|SendFTP|SendNotification"
- この検索は、サブフォルダのインクルードファイルも対象にしています。ただし、すべての通信を見つけられるわけではありません
- #import:MQL5リファレンスでは、外部のモジュール(DLLなど)から関数を取り込む宣言です。インポートされた関数は、コンパイルされたモジュールの外側にあるので、コンパイラは、渡されたパラメーターの妥当性を検証できない、と書かれています
- WebRequest:外部のWebサーバーと通信する関数です。使うには、MT5のオプションの[エキスパートアドバイザー]タブで、許可するURLの一覧に、サーバーのアドレスを追加する必要がある、と書かれています(WebRequestの許可URLの設定)
仕様にない#importやWebRequestなどが見つかった場合は、使う理由と、通信先を、出品者に確認します。説明を受けるまで、本番の口座では動かしません。
4. ストラテジーテスターで動きを確認する
- 仕様書に書いた条件で、テストする:銘柄・期間・モデルを、仕様書の確認条件に合わせます(MT5ストラテジーテスターのモデルの選び方)
- 仕様どおりに動くかを見る:エントリーの位置、ロット、損切り・利確、時間帯のフィルター、同時保有の上限が、仕様と一致するか。見るのは動作で、利益の大きさではありません
- 入力パラメーター:説明書の初期値と、EAの入力画面の初期値が一致するか
- ログにエラーが出ていないか:テスト中のエキスパートログに、発注の失敗などが出ていないか(操作ログとエキスパートログの違い)
テスターの結果は、過去のデータでの動作です。利益が出たことは、今後の成績を保証しません。
5. デモ口座で動かす
テスターで問題がなければ、デモ口座で、実際の値動きで動かします。テスターで再現できない点(業者のサーバーとの通信、スプレッドの変動、注文の拒否)は、デモ口座で確認します(MT5でデモ口座を開く方法)。確認する点は、注文が通るか、10030などのエラーが出ないか(MQL5の10030エラー)、再起動後に状態を引き継げるか(EAを再起動しても状態を引き継ぐ方法)、です。
ココナラの72時間の期限内に、デモ口座での確認を終えるのは難しい場合があります。その場合は、仕様書に、確認の期間と、その間の修正の扱いを書いておくか、納品の期限を長めに設定してもらうよう、出品者に相談します(ココナラの納品確認の期限や回数は、EA・インジケーターの制作を外注する時の依頼の書き方を参照)。
まとめ
- 納品物の確認は、ソースの有無→自分でコンパイル(本番は自分でコンパイルしたEX5だけを使う)→外部通信の有無→テスター→デモ口座の順
- MetaEditorのヘルプでは、EX5だけでは、デバッグができない。ソースの納品を仕様書に書く
- 警告があってもEX5はできる。ログの「Result:」の、エラーと警告の数を見る
- #import・WebRequest・Socket系などは、外部と通信する手がかり。仕様にないものは、理由を確認する。この検索で、すべての通信を見つけられるわけではない
- テスターで見るのは動作。利益は、今後の成績を保証しない


