zero divide in xxx.mq4
2021/8/20
引き続きFX戦略アイデア134番目の取引を自動化すべく、EA(Expert Advisor=自動売買プログラム)を作成しています。開発中に発生したエラーについて記載します。
発生したエラー(zero divide in xxx.mq4)
今回発生したのは「zero divide …」というエラーです。実はこれ、私は以前経験があります。「divide」とは英語で割り算をするという意味があったりするので、なにか計算をしている個所が怪しいと思います。
状況の整理
状況を整理する事は大切です。
- エラーに「divide」とあり計算個所のコードが怪しい
- 新規注文をしようとした際に発生している
- MM機能(通称複利機能)を搭載しており、有効証拠金から取引するロット数を決めている。
以上のことから、OrderSend関数まわりを確認して行こうと思います。3つ目に記載した、ロット数計算あたりが怪しい気がします。
デバッグの実施
状況の整理結果から、取引するロット数を計算した結果不正な値になっているという仮説を立て、デバッグをしてみます。
上から2行目が、私が手で入れたデバッグメッセージです。ロット数の計算結果を出力するようにしました。
値は0.24816436で、取引は0.24の想定通りのロット数なので、問題なさそうです。
ロット数は勝手に桁を切ってくれるようですね。知りませんでした。便利です。
ですが、仮説は外れました。また、エラー再発しないため、切り分けも難しくなりました。
結論
調べたところ、除数がゼロの場合に出るエラーのようです。
例えば、「A=B/C」という式があったとして、Cがゼロの場合に出てしまいます。
今回の私のケースでは自然復旧していたりするので、プログラミングの動くタイミングでうまく変数が引き渡されなかったとか、そんな感じでしょうか。多発するようであれば修正を試みることにします。