ナンピンロット四捨五入したい

EAつくーる
ふくやん
2026/01/13 23:27
33

EAつくーるで作成したナンピンEAのコードをいじっているうちに、
最初に作成したものとナンピンの取り方が変わってしまいました。

ナンピンロットが四捨五入されず、切り捨てになっています。
例 ナンピン倍率1.6  初期ロット0.01
0.01-0.02-0.03-0.05・・・①
0.01-0.01-0.03-0.04・・・②
ロットの取り方が①から②のように変化しました。

必要なコードを削除してしまったのでしょうか。
コンパイルエラーはありません。
修復方法はありますか?

コメント

GogoJungle
2026/01/14 19:53

いつもお世話になっております。

ナンピンのロット計算が、四捨五入ではなく切り捨てになってしまったため、元の計算方法(四捨五入)に戻したいというご質問ですね。

コードを編集されているとのことですので、MQLの記述において「小数点以下の処理(正規化)」に関する部分が削除されたか、変更されてしまった可能性が高いです。

以下に、修正のヒントと具体的な確認ポイントを解説します。

原因と解決策

MT4/MT5のプログラミング(MQL)において、ロット数のような小数を計算する場合、単に掛け算をするだけでは計算機上の誤差が出たり、意図せず切り捨てられたりすることがあります。
これを防ぎ、正しい桁数で四捨五入するためにNormalizeDoubleという関数を使用するのが一般的です。

修正すべきコードのイメージ

ナンピンのロット計算を行っている箇所(lots = ... のような記述がある行)を探し、以下のように修正されているか確認してください。

現在の状態(推測:切り捨て、または調整なし)
おそらく、単純な掛け算になっているか、整数への変換が行われている可能性があります。

next_lot = current_lot * Multiplier;
// または
next_lot = (double)((int)(current_lot * Multiplier * 100)) / 100; // このような記述は切り捨てになります

修正後のイメージ(四捨五入・正規化)
NormalizeDouble関数を使って、小数点第2位(ロットの刻みによる)で正規化します。

// 第2引数の "2" は小数点以下の桁数です。0.01ロット単位の場合は2を指定します。
next_lot = NormalizeDouble(current_lot * Multiplier, 2);

具体的な修正手順

  1. MQLのエディタ(MetaEditor)を開きます。
  2. ナンピン倍率(例:1.6など)を掛けている計算式を検索します。
  • 検索ワードの例:*(掛け算記号)や、ご自身で設定した倍率の変数名など。
  1. その計算式全体を NormalizeDouble( 計算式 , 2 ) で囲んでください。

元のコードを確認する確実な方法

もし、どの行を消してしまったか特定が難しい場合は、以下の手順で「EAつくーる」の生成コードと比較することをお勧めします。

  1. 「EAつくーる」を開く
  • 現在作成中のEAと同じ設定(ナンピン倍率1.6など)を入力します。
  1. 新規にEAを生成する
  • 別名で新しいmq4/mq5ファイルを生成します。
  1. コードを比較する
  • 新しく生成されたファイルのコードを開き、ナンピン計算部分(NormalizeDoubleが使われている箇所)を探します。
  • その記述をコピーして、現在編集中のEAの該当箇所に貼り付けます。

補足:計算結果の違いについて

ご提示いただいた例において、
0.01 * 1.6 = 0.016
この数値を:

  • 四捨五入(NormalizeDouble)すると 0.02
  • 切り捨て(intキャスト等)すると 0.01
    となります。この「最初の計算」のズレが、その後の連鎖的なロット計算(②の0.01→0.01→0.03…という動き)に影響を与えています。

まずは NormalizeDouble の記述が正しく存在するかをご確認ください。

ふくやん
2026/01/14 20:19

回答ありがとうございます。
早速、EAを生成しなおして、確認してみます。

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。