MT4でEAの最適化を行った際に、
「initialization failed on the pass 1」
「initialization failed on the pass 2」
と表示され、最適化バックテストが途中で停止するケースがあります。
通常のバックテストでは問題ないにも関わらず、
最適化時のみ発生する点が、このエラーを分かりにくくしています。
本記事では、実際に発生したコード例をもとに、
このエラーが起きる仕組みと、実用上の回避策を解説します。
initialization failed on the pass とは?
「initialization failed on the pass」 とは、 MT4でEAのバックテストや最適化を実行した際に、 EAの初期化処理(OnInit)が失敗したことを示すエラーです。
このエラーは主に、最適化(Optimization)を実行したときに発生し、 以下のような形で表示されます。
initialization failed on the pass 1 initialization failed on the pass 2
ここで表示される 「pass」 とは、 最適化時に試行される各パラメータ組み合わせ(1回分の試行) を指します。
つまりこのエラーは、 「最適化の途中で、あるパラメータ条件において EA の初期化が失敗した」 ことを意味しています。
なお、このエラーは通常のバックテストでは発生しないことが多く、 最適化特有の挙動が関係しています。
このエラーが発生する場合、ほとんどのケースで OnInit() 内で INIT_FAILED を返している処理が原因となっています。
なぜ最適化時だけ発生するのか
MT4の最適化では、通常のバックテストとは異なり、 パラメータの組み合わせごとに EA が毎回初期化(OnInit)されます。
つまり、1回の最適化処理の中で OnInit → テスト → OnDeinit が何度も繰り返される仕組みになっています。
このため、特定のパラメータ条件下で OnInit 内の処理が失敗すると、その時点で「initialization failed on the pass〇」 というエラーが発生します。
今回のケースでは、その原因が ラベルオブジェクトの作成処理に失敗していたことでした。
int OnInit()
{
//---
//ラベルオブジェクトの作成
if(!ObjectCreate(0, objectName, OBJ_LABEL, 0, 0, 0))
{
return(INIT_FAILED);
}
~省略~
return(INIT_SUCCEEDED);
}こんな感じで、問題となったソースコードはOnInit()でラベルオブジェクトの作成を行っていました。ラベルオブジェクトの作成に失敗したら「INIT_FAILED」を返すように作っていたのですが、どうやらここで「initialization failed on the pass〇」となっているようでした。
最適化でバックテストをおこなった場合はエラーが出て失敗している状態でした。RIKAKU=25~の所は実際に最適化でチェックしたパラメータです。

しかも最適化ではない普通のバックテストでは問題は発生せず、最適化のバックテストの場合のみ発生するので最適化のバックテストは何かロジックが違うのかな?という感じでした。
エラーメッセージ自体からは、どの処理が原因なのか判断しづらく、 パラメータ設定の問題と誤解しやすいエラーでした。
暫定的な回避策(return INIT_FAILED を避ける)
解決策は、ざっくりとした仮修正になりますが
です。この修正方法は根本修正ではないためプログラマ的には怒られそうな修正ですがとりあえず暫定の修正としました。これで、最適化をしてもエラー無くバックテストする事が可能となりました。
オブジェクトの有無をチェックしてもNG
試しに、オブジェクトの有無をチェックしてみましたが結果は変わらずエラーとなりました。
int OnInit()
{
//---
//ラベルオブジェクトのチェック
if(ObjectFind(objectName) < 0){
if(!ObjectCreate(0, objectName, OBJ_LABEL, 0, 0, 0))
{
return(INIT_FAILED);
}
}
~省略~
return(INIT_SUCCEEDED);
}最適化時の初期化処理は、通常のバックテストとは挙動が異なる点が多く、 原因の切り分けが難しくなりがちです。
さいごに
「initialization failed on the pass〇」は、 最適化中の各パラメータ試行(pass)で OnInit() が失敗した場合に表示されるエラーです。
特に、OnInit() 内で return(INIT_FAILED); を返す処理があると、 最適化時のみエラーとして顕在化するケースがあります。
根本的な解決ではありませんが、 最適化を行うEAではオブジェクト生成などの初期化処理に注意することで、 同様のエラーを回避できる可能性があります。
今回のように、最適化時のみ発生するエラーは、 EAのバックテストや最適化の仕組みを正しく理解していないと原因を特定しにくい ケースが少なくありません。
特に、最適化の挙動・パラメータの影響・バックテスト結果の見方を誤ると、 「エラーなのか」「ロジックの問題なのか」を切り分けられなくなってしまいます。
EAのバックテストや最適化について、 基礎から体系的に整理した内容は、以下の記事で詳しくまとめています。
▶ 【完全ガイド】EAバックテストのやり方・最適化・ヒストリカルデータ活用まとめ
バックテスト結果が安定しない、 最適化のたびに挙動が変わると感じた場合は、 一度あらためてバックテスト全体の考え方を整理してみることをおすすめします。







コメント