再びzero divide in xxx.mq4
また出てしまいました。zero divide in xxx.mq4エラーです。
除数がゼロの場合に出るエラーだということは分かっていますが、私の作成したEAのどの部分で発生しているエラーなのか探す必要があります。
エラー原因のコードを探す
さて、どうやってエラー原因となっている関数?コード?を探しましょうか。少し面倒くさいですが、全ての関数の初めに「function A starts.」と「function A ends.」のような感じで、メッセージ出力しようと思います。
いや、かなり面倒くさいですね・・・。
void functionA(){
Print("functionA starts.");
//処理
Print("functionB starts.");
}
でも、これをすれば、「functionA starts.」→「zero divide」エラー⇁「functionA ends.」という順番でメッセージが出力されるはずです。
あとは、エラーの再発を待つしかありません。
再度エラー発生
週末を越すように運用していたら、再度エラーがでました。
私の自作関数「ykAvgPricePosByLotsMagicNum」の直後に出てますね。関数のネーミングセンスがなくて悩んでます。自分にしか分からないですよね…と、思いましたが、自分が分かれば良いのです。
一歩進みましたので、この関数の中身を見ていこうと思います。
まずは、当関数の中に除算がないか探します。ありました。除数になっている変数の値をデバッグします。これもまたエラーの再発を待つ必要がありそうですね。
zero divideエラーの困ったところ
まだしっかりと検証はしていないのですが、
zero divideエラーが出るとEAがその後動かなくなる
ということです。このエラーが出た後は売買条件を満たしても発注をしてくれていません。
結論
除数がゼロの場合に出るエラーなので、プログラム内に割り算をしている個所を探し、除数がゼロでないかを確認します。今回の私の場合は、ショートポジションのナンピン判定の個所に誤りがありました。
ショートポジションの平均約定価格を計算する関数を作っており、ポジションの約定価格とそのロット数を乗じた合計を、最後に合計保有ロット数で割っています。その際に、間違ってロングポジションのロット数を計算してしまうようなプログラムになっていました。
タイミングによって、ロング決済直後にショートの平均約定価格を計算する処理になると、除数がゼロになってしまうため、このエラーが出ていたと考えられます。
1件のピンバック
トレードアルゴリズムは快調!ナンピンEA開発中 | バイリンガルITエンジニア