MQL5のPrintとログの保存場所|3か所に分かれる
MQL5でデバッグ出力を出すには Print を使い、結果はツールボックスの「エキスパート」タブに出ます。
ファイルとして残る場所については、解説記事の間で記述が食い違っています。「エキスパートログは MQL5\Experts\Logs」と書かれていることがありますが、MT5の実機にそのフォルダは存在しません。これはMT4の構成です。
この記事は、実際のMT5インストールフォルダを開いて確認した内容です。
(確認環境:MetaTrader 5 / Windows 11)
ログは3か所に分かれている
| 場所 | 中身 | 対応するタブ |
|---|---|---|
MQL5\Logs\ |
EA・インジケーターの Print 出力 |
エキスパート |
logs\(データフォルダ直下) |
MT5本体の動作(接続・通知など) | ジャーナル |
Tester\logs\ |
ストラテジーテスター実行時 | テスター側 |
ファイル名はどれも YYYYMMDD.log です。自分が書いた Print を探すなら MQL5\Logs\ です。
フォルダへは、MT5の「ファイル」→「データフォルダを開く」から辿れます。
ログファイルはUTF-16で保存されている
実機で確認したところ、ログファイルはUTF-16で書かれています。テキストエディタや検索コマンドで開く時、文字コードを指定しないと読めません。
過去のログをまとめて検索したい場合、ここでつまずきます。「ファイルは見つかるのに中身が化ける」なら文字コードを疑ってください。
Print の書き方
Print("値=", value, " 時刻=", TimeToString(TimeTradeServer()));
カンマで並べるだけで連結されます。型変換は自動なので、DoubleToString を使わなくても出ます。
ただしdouble をそのまま渡すと桁が多く出ます。読みやすくするなら桁を指定してください。
Print("価格=", DoubleToString(price, _Digits));
Print・Comment・Alert の使い分け
| 関数 | 出る場所 | 向いている用途 |
|---|---|---|
Print |
エキスパートタブ(履歴が残る) | 経過の記録 |
Comment |
チャート左上 | 今の状態の表示 |
Alert |
別ウィンドウ | 止めて知らせたい時 |
🔴 Comment は上書きされる
公式リファレンスによると、Comment は呼ぶたびに前の内容を置き換えます。履歴は残りません。
そのため2か所から Comment を呼ぶと、後から呼んだ方しか見えません。複数の値を出したいなら、1回の呼び出しの中で改行を使ってまとめます。
Comment("状態: ", state, "\n",
"保有: ", PositionsTotal(), "件");
文字数の上限は2,045文字で、超えた分は切られます。またストラテジーテスターの最適化中は Comment が動作しません。
Alert はループの中で使わない
Alert はウィンドウが出るため、OnTick や OnCalculate の中で条件なしに呼ぶと操作できなくなります。デバッグ目的なら Print を使ってください。
何を出力すると原因にたどり着くか
値そのものより、「そこを通ったか」を出す方が速く解決します。
Print("A: OnInit到達");
...
Print("B: ハンドル取得 handle=", handle);
...
Print("C: 判定に入った value=", value);
どこまで出たかで、止まっている位置が特定できます。Aは出るがBが出ないなら、その間で return しています。
初期化で止まっている場合の切り分けはMQL5のOnInitの戻り値にまとめています。ログに何も出ていない時は、まずここを疑ってください。
出力が多すぎて読めない時
OnTick に Print を置くと、ティックのたびに出力されて埋まります。
- 足が変わった時だけ出す — 前回の足の時刻と比較する
- 状態が変わった時だけ出す — 前回の値と違う時だけ
- スイッチを用意する —
input bool InpDebug = false;で切り替える
3つ目は公開するツールでは必須です。常に出力していると、ログファイルが際限なく大きくなります。
値が取れない時の切り分け
ログを見て「値が0のまま」だと分かったら、次は取得側の問題です。
- iCustom・CopyBufferの値が取れない原因
- MQL5で足データを取得する方法(並びが逆になっていないか)
- MQL5のコンパイルエラーが消えない(そもそも新しいコードが動いていない)
記録を後から集計したい場合は、ログではなくCSVに書き出す方が扱いやすくなります。方法はMQL5でCSVを出力する方法にまとめました。
まとめ
Printの出力先はエキスパートタブ、ファイルはMQL5\Logs\- 🔴
MQL5\Experts\Logsは存在しない(MT4の構成) - 端末側は
logs\、テスターはTester\logs\と3系統に分かれている - 🔴
Commentは上書き。2か所から呼ぶと片方しか見えない。最適化中は動かない - 値より「どこまで通ったか」を出す方が速い
Printで値を確かめながら、Pythonと同じ計算をMQL5で書く練習はMQL5とPythonで移動平均を書き比べるにあります。
本記事はMQL5の仕様と実機で確認した内容を説明したものであり、特定の売買を推奨するものではありません。フォルダ構成はビルドや環境によって異なる場合があります。投資判断はご自身の責任で行ってください。


