
MT4・MT5 実行中のログメッセージ
zero divide
- 意味
- 0 での割り算でプログラムが停止した
「zero divide」とは
割り算の分母が 0 になったため、EA・インジケーターが停止したときのメッセージです。取得できなかった値が 0 のまま計算に使われているケースがほとんどです。
ログの表示例
zero divide in 'MyEA.mq5' (142,30)
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
「zero divide」の主な原因
- SymbolInfoDouble() などが失敗して 0 を返し、その値で割った
- ティックバリューや ATR が 0 のときにロット計算をした
- 高値と安値が同じ足で、値幅で割った
- ポジション数 0 のときに平均を計算した
「zero divide」の対処法
- 割る前に分母が 0 でないか確認する(if(d == 0) return;)
- ログの (行, 列) の位置の計算式で、どの値が 0 か Print() で確認する
- 取得に失敗した値は、次のティックで取り直す
コード例(MQL4)
// 割り算の前に分母を確認する(zero divide / 4013 対策)(MQL4)
double LotsByRisk(double riskMoney, double slPips)
{
double tickValue = MarketInfo(Symbol(), MODE_TICKVALUE);
double pip = (Digits == 3 || Digits == 5) ? Point * 10 : Point;
double tickSize = MarketInfo(Symbol(), MODE_TICKSIZE);
if(tickValue <= 0 || tickSize <= 0 || slPips <= 0)
return 0; // 値が取れていないので計算しない
double moneyPerLot = slPips * pip / tickSize * tickValue;
if(moneyPerLot <= 0) return 0;
return riskMoney / moneyPerLot;
}MetaEditor(MT4)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












