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のまま」だと分かったら、次は取得側の問題です。

記録を後から集計したい場合は、ログではなくCSVに書き出す方が扱いやすくなります。方法はMQL5でCSVを出力する方法にまとめました。

まとめ

  1. Print の出力先はエキスパートタブ、ファイルは MQL5\Logs\
  2. 🔴 MQL5\Experts\Logs は存在しない(MT4の構成)
  3. 端末側は logs\、テスターは Tester\logs\ と3系統に分かれている
  4. 🔴 Comment は上書き。2か所から呼ぶと片方しか見えない。最適化中は動かない
  5. 値より「どこまで通ったか」を出す方が速い

Printで値を確かめながら、Pythonと同じ計算をMQL5で書く練習はMQL5とPythonで移動平均を書き比べるにあります。

本記事はMQL5の仕様と実機で確認した内容を説明したものであり、特定の売買を推奨するものではありません。フォルダ構成はビルドや環境によって異なる場合があります。投資判断はご自身の責任で行ってください。