【開発裏話】MT5のアップデート後に「注文は通るのにEAがおかしい」?―まず疑いたいBuild問題と、私が使った“荒業”の復旧方法
今回は、MT5の開発中に実際に遭遇した、少し厄介なトラブルについて書いてみます。
ある日、それまで正常に動いていたEAで突然、
注文自体は正常に約定する
しかしEA側では「注文失敗」と判定される
エラー音やタイムアウト音が鳴る
注文後の処理が実行されない
という現象が発生しました。
Trade ToolboxシリーズのSmartOrderEAでいえば、注文成功後に行うパネル処理や成功音などが動かない状態です。
一見すると、EAのプログラムに問題があるように見えます。
ところが、調べていくと意外なところに原因がありました。
1.「注文成功」なのに「失敗」と判定される
まず、エキスパートログを確認しました。
すると、こんなログが出ていました。
CTrade::OrderSend: market buy 0.01 USDJPY sl: 158.716 [unknown retcode 0]
注文失敗 | Error=4756 | Retcode=0 | Comment=Doneここで気になったのが、
Comment=Done
です。
注文が完了したことを示しているように見えるのに、EA側で取得したRetcodeは0。
そのためEAは注文を失敗と判断し、後続処理を実行していませんでした。
つまり、
注文は成立しているのに、EAには「失敗」と伝わっている。
という非常に分かりにくい状態です。
2.コードではなく「MT5本体」を疑ってみる
この時点で、もちろんEAのコードを確認します。
しかし今回は、コードを変更していません。
さらに正常に動作している別の環境と比較すると、MT5のBuildが違っていました。
正常に動作していた環境はBuild 6090。
一方、不具合が発生した環境はBuild 6116でした。
そこで、MT5本体のアップデートによる影響を疑いました。
MT5のBuildは、
ヘルプ → バージョン情報
から確認できます。
今回のケースでは、Buildの違いと「DoneなのにRetcode=0」という現象が重なっており、MT5側のリターンコード処理に問題が発生している可能性が高いと判断しました。
3.そこで使った「荒業」
原因がMT5本体側にあると考えたところで、次の問題は、
「今すぐ元に戻すにはどうするか?」
です。
修正版のアップデートを待つ方法もあります。
しかし、実際に使っている環境でEAが正常に動かない状態は避けたい。
そこで私が行ったのが、
正常動作しているMT5の terminal64.exe をバックアップしておき、不具合環境へ移植する方法
です。
かなり荒っぽいやり方です(笑)。
正式な復旧手順というわけではありませんが、今回の検証ではこれが有効でした。
私が行った手順
MT5をすべて終了する
正常に動作しているMT5のインストールフォルダを開く
terminal64.exeをバックアップする不具合が発生しているMT5の
terminal64.exeと入れ替えるMT5を再起動する
これにより、正常に動作していたBuildのMT5環境へ戻し、EAの挙動も復旧しました。
もちろん、MT5本体のファイルを直接入れ替える方法なので、常用する方法ではなく、あくまで今回私が行った回避策として紹介しています。
4.この経験から「正常な環境を残す」ことの重要性を感じた
今回の件で改めて感じたのは、
正常に動いている環境を残しておくことの大切さ
です。
MT5がアップデートされたあと、
「今まで動いていたEAがおかしい」
「インジケーターの表示がおかしい」
「以前と挙動が違う」
ということが起きた場合、いきなりコードを修正するのではなく、
「MT5のBuildは変わっていないか?」
を最初の確認項目に入れてみる。
これだけでも原因の切り分けがしやすくなります。
もちろん、すべての不具合がBuildアップデートのせいとは限りません。
ただ、
「アップデート直後に突然おかしくなった」
のであれば、まずBuildを確認してみる価値はあります。
おわりに
今回の件では、最初はEAのコードを疑いました。
しかし、
コードは変えていない
↓
正常な環境と比較する
↓
MT5のBuildが違う
↓
ログにも「DoneなのにRetcode=0」という矛盾がある
という順番で確認することで、原因を切り分けることができました。
プログラムの不具合というと、ついコードだけを疑ってしまいます。
でもMT4・MT5上で動くツールの場合、実行環境そのものが変わっていないかを見ることも重要です。
もしMT5のアップデート直後からEAやインジケーターの挙動がおかしくなったら、
まず「Build」を確認する。
これを原因切り分けの第一候補として覚えておくと、無駄にコードをいじってしまうのを防げるかもしれません。
Trade Toolboxシリーズはこちら
Trade Toolboxシリーズには、無料版・お試し版・有料版があります。
気になるものがあれば、まずは実際の環境で試してみてください。
Trade_Toolbox_SmartOrder_Pro_EAはコチラ
そして、実際に使っていただいた方は、
「ここが便利だった」
「ここは改善してほしい」
「こんな使い方をしている」
など、率直な感想をレビューで教えていただけると嬉しいです。
良い評価だけではなく、実際に使った方の意見そのものが、今後の開発の参考になります。
最後まで読んでいただき、ありがとうございました。