MT4 EAが動かない時の原因と対処法|ソースコードを1行ずつ確認するデバッグ方法

スーツ姿のデグーマウスがMT4 EAのコードを指しながら解説しているイラスト。ぷろぐらむFXのデフォルトアイキャッチ。
EAを自作してみよう
記事内に商品プロモーションを含む場合があります

MT4でEAを動かしてみたものの、
「なぜか一度もエントリーしない」
「コンパイルは成功しているのに、チャート上で全く反応がない」
といった経験はありませんか?

このようなケースは、EA初心者だけでなく、
ある程度EAを触っている人でも頻繁に遭遇する“定番トラブル”です。

MT4のEAが動かない・エントリーしない時によくある原因

MT4でEAを作成・設置したにも関わらず、
「コンパイルは成功したのに一度もエントリーしない」
「バックテストでは動くのに、リアル口座では全く反応しない」
といった状況に悩まされることは非常に多いです。

こうしたトラブルの多くは、
EAのロジックそのものではなく、処理の流れや確認不足が原因になっています。

EA自体が壊れているのではなく、
条件分岐・注文処理・ログ出力のどこかで処理が止まっている ケースがほとんどです。

EAが動かない時にソースコードを確認すべき理由

EAが動かない原因は、IF文の条件分岐だけとは限りません。
実際には、 Print()でログが出ていない、 OrderSendが内部で失敗している といった理由で止まっていることも非常に多いです。

以下の記事では、それぞれの原因を切り分ける具体的な確認方法を解説しています。


EAデバッグとは?動かない原因を調べる基本手順

まず、今回の(デバッグ)機能について解説します。

通常、MT4のチャートで値動きが発生すると、コンパイル済みのEAファイル(ex4ファイル)に処理がまわってEAが動くというのが基本の仕組みです。

しかし今回の『デバッグ』では、実行ファイル側ではなくMetaEditor側に処理が回ってくるようになります。そうすることでプログラムを1行ずつ実行して挙動を確認できます。

プログラミング用語的にはこういった確認方法を

『デバッグ』

といいます。

デバッグの動きを確認

デバッグのやり方は後述していますので、まずはその動きを見てみましょう。処理が回ってくるとこんな感じで、赤枠の所に黄色➡が出てきます。

EAデバッグとは?動かない原因を調べる基本手順

処理は今ここで止まっているという目印です。この状態で「F11」キーを押します。

F11キーでステップ実行し、IF文の中に処理が入ったことを確認するデバッグ画面

IF文の中に黄色➡が移動したのがわかります。「F11」キーを押すとワンステップ実行といって、黄色➡の部分の処理を実行します。黄色➡の部分は『if(int_a == 0)』で、true(int_aは0)だったのでIF文の中に入ってきたという感じです。

もし『if(int_a == 0)』で、false(int_aは0じゃない)だった場合はこんな動きになります。

IF文の条件がfalseとなり、処理が分岐してスキップされたことを確認するデバッグ画面

IF文の中には入らず、一気にIF文を抜けた所に黄色➡が来ました。こういった感じでIF文がtrueなのかfalseなのかも簡単に確認できます。

以上のことから、『IF文がちゃんと作れて分岐できているかとかどうか』や、『注文をちゃんとするか』等、色々な場面で使えます。


デバッグ開始前にやること

デバッグをスムーズに行うために、まず以下を準備しましょう。

1.通貨ペア・時間足の設定

デバッグは、リアルデータを元に実行されますが初期通貨が「USDCHF」の1時間足のリアルデータとなります。別にこれでもデバッグはできるのですが、自分が検証したい通貨ペアと時間足に設定しておいた方がデバッグ時のイメージもしやすいです。

まず、『ツール』→『オプション』をクリックします。

MT4のツールからオプション画面を開き、デバッグ用の初期設定を行う手順

そうすると、以下の画面が出てくるので設定していきます。

MetaEditorのデバッグ設定画面で通貨ペアと時間足を指定する方法

指定した設定を使用にチェックをいれ、以下のような感じに設定します。

EAデバッグ時に使用する通貨ペアと時間足を設定した具体例
※私は米ドル/円の5分足とかでよく見ています

デバッグする通貨の初期設定は以上です。

2.ブレークポイントの設定

デバッグを開始する前にもう一つやっておくことあります。それは、デバッグ中に自分が見ているプログラム上ここで止めたいといった部分の行(行数の所)をダブルクリックして、停止状態『■』にしておくことです。
※主にIF文とかの条件分岐になると思います

EAデバッグ前にブレークポイントを設定し、処理を停止させる位置を指定する方法

こんな感じに停止状態『■』をいくつか作ってデバッグ時に止まってくれる場所を作っておきます。もし1つも作っていない場合は黄色➡が出てこず止まってくれませんので注意が必要です。


実際のデバッグのやり方

デバッグのやり方は簡単で、MetaEditorで『デバッグ』をクリックして『リアルデータでスタート』という項目をクリックする事でできます。

MetaEditorでEAをリアルデータを使ってデバッグ実行する手順

リアルデータの方で値動きがあると、メタエディター側に処理が渡ってきて以下のように黄色➡が表示されます。

MT4のEAをデバッグ実行し、ソースコードを1行ずつ確認している画面

こんな感じで止まったら、あとはキーボードの「F11」キーを押せば1行ずつ実行していきます。
※「F10」のステップオーバーのような機能もありますがまずは「F11」だけでデバッグに慣れましょう

変数の中身を確認したい場合

1行ずつステップ実行していると、変数の値が何になっているのか知りたくなる場合が出てきます。

そんな時は、値が知りたい変数をダブルクリックし選択状態にし右クリックしてから、『ウォッチ式の追加』をクリックします。

デバッグ中に変数をウォッチ式に追加して現在の値を確認する方法

そうすると、画面右下に先ほど選んだ変数が表示されるので「値」の項目を見ると、現在は「3」になっている事がわかります。

なので、IF文に使われている変数等を一通り見れる状態にしておくとデバッグ中わかりやすいです。



❓ MT4 EAが動かない時のよくある質問【デバッグQ&A】

💬 EAがエントリーしない・動かない時に、初心者〜中級者の方から特によくある質問をまとめました。

コンパイルは成功しているのに、EAが一度もエントリーしないのはなぜですか?

この場合、EAのロジック自体が間違っているのではなく、if文の条件分岐が一度も成立していないケースが非常に多いです。
デバッグを使って条件が true / false のどちらになっているかを1行ずつ確認することで、原因を特定しやすくなります。

Print()でログが出ない場合、EAは動いていないのでしょうか?

はい、その可能性が高いです。
Print()のログが一切出ていない場合、OnTick自体が呼ばれていない、またはその前段階で処理が止まっていることが考えられます。
デバッグを使えば、どの行まで処理が進んでいるかを視覚的に確認できます。

バックテストでは動くのに、リアル口座でEAが動かない原因は?

リアル口座では、スプレッド・約定条件・時間帯・取引制限などがバックテストと異なります。
OrderSendが内部で失敗しているケースも多いため、デバッグやエラーコードの確認が有効です。

EAのデバッグは初心者でも使うべきですか?

はい、むしろ初心者こそ使うべき機能です。
デバッグを使えば、EAの処理が「どこで止まっているか」「どの条件で分岐しているか」を1行ずつ確認でき、プログラム理解が一気に深まります。

デバッグとPrint()はどちらを使えば良いですか?

軽い確認であれば Print()、原因が分からない場合はデバッグがおすすめです。
デバッグでは変数の中身や条件分岐の流れを直接確認できるため、「なぜエントリーしないのか」を最短で特定できます。

まとめ

以上が、『EAを動かしながらソースコードを1行ずつ確認する方法』です。

  • EAのデバッグは コードを1行ずつ実行しながら挙動を確認できる強力な機能
  • if文や変数のチェックにより「エントリーしない原因」を突き止めやすい
  • 初心者ほど活用すべきツールであり、プログラムの理解を深める最短ルート

プログラム初心者のうちは「エントリーしない=バグ探し」に時間がかかりがちですが、今回の方法を使えば効率的に原因を発見できます。

デバッグ実行で問題箇所を修正したあとは、 修正前後のソースコードを比較して 本当に意図した変更だけが入っているか確認しましょう。

コメント

タイトルとURLをコピーしました