【MQL5】 MT5のEA作成の勉強 その18 デバッグモードで変数の値を確認する方法

【MQL5】 MT5のEA作成の勉強 その18 デバッグモードで変数の値を確認する方法

まえがき

 MQL5ではデバッグモードで変数の値を確認することができます。
前回の投稿で、 PositionModifyがうまく動かない原因を探るとき、様々な変数の確認を行ったのですが、以外に独特な仕様がいくつかあり、内容を確認できるまでに苦労したのでメモしておきます。

デバッグモードの使い方

 デバッグモードの使い方は簡単です。MetaEditer上部のツールバーにある「履歴データでデバッグのスタートと解除」ボタンを押します。MT4ではデバッグを行う前に自分で過去の相場データを入手し、それをテスターに登録するなどの煩雑な作業が必要でしたが、MT5ではそれらはベンダーからオンラインで提供され、ユーザー側で用意する必要が無いのでありがたいです。

 「履歴データでデバッグのスタートと解除」ボタン
「履歴データでデバッグのスタートと解除」ボタン

 この時、ブレークポイントを貼っていると、そこに処理が到達した時点でEAが一時停止します。ブレークポイントを貼るときは、 MetaEditerのEA作成ウィンドウ左端の、行数部分をクリックします。

ブレークポイントを貼った状態
ブレークポイントを貼った状態
デバッグモード中に一時停止した状態
デバッグモード中に一時停止した状態

デバッグモードで変数の値を確認する方法

 変数の値を確認するには、まず、上記の方法で、EAを一時停止します。この状態で値を確認したい変数をダブルクリックし→右クリックして、表示されるコンテキストメニューから、「ウォッチの追加(W)」をクリックします。

デバッグモードで変数を確認する方法①
ウォッチの追加

 すると、画面下部のツールボックスに以下のように選択した変数名と、現在の値、データ型が表示されます。もし、ツールボックスが表示されない場合は、画面上部のツールバーから、「表示(V)」→「ツールボックス(B)」と選択してください。

デバッグモードで変数の値を確認する方法②
ツールボックス

関数の戻り値は一度変数に格納しないと確認できない

 ここからは補足ですが、私が苦労したポイントです。上記の図で、「Expression could not be evaluated」となっている個所があります。ちょっとわかりにくいのですが、ここで指定している「m_symbol.Bid()」は、その上の図で、「nowprice」に代入されています。つまり同じ値のはずなのですが、代入先の「nowprice」は評価できて、その代入元の「 m_symbol.Bid() 」は評価できないというのは変な感じですね。
 どうも、MQL5のデバッガーは、関数の値は直接表示できないようです(リファレンスの記載は未確認)。多分ですが、関数によっては複数の戻り値の型を持つものがあるからではないかと思います。
 いずれにしても、

関数の値(戻り値)を確認したい場合、一度ローカル変数にその値を代入する必要がある。

ということを覚えておく必要があるようです。

まとめ

  MetaEditer のデバッグモードで変数の値を確認する方法を学びました。 MetaEditer はVisualStudioやVSCodeに近い感覚で使用できる便利なツールですが、似ているからこそ、細かな違いに戸惑ってしまいます。これからも気づいたことは都度記事にして記憶していきたいと思います。