EAつくーるで作成したナンピンEAのコードをいじっているうちに、
最初に作成したものとナンピンの取り方が変わってしまいました。
ナンピンロットが四捨五入されず、切り捨てになっています。
例 ナンピン倍率1.6 初期ロット0.01
0.01-0.02-0.03-0.05・・・①
0.01-0.01-0.03-0.04・・・②
ロットの取り方が①から②のように変化しました。
必要なコードを削除してしまったのでしょうか。
コンパイルエラーはありません。
修復方法はありますか?
| 検索結果がありません。 |
| 検索結果がありません。 |
いつもお世話になっております。
ナンピンのロット計算が、四捨五入ではなく切り捨てになってしまったため、元の計算方法(四捨五入)に戻したいというご質問ですね。
コードを編集されているとのことですので、MQLの記述において「小数点以下の処理(正規化)」に関する部分が削除されたか、変更されてしまった可能性が高いです。
以下に、修正のヒントと具体的な確認ポイントを解説します。
原因と解決策
MT4/MT5のプログラミング(MQL)において、ロット数のような小数を計算する場合、単に掛け算をするだけでは計算機上の誤差が出たり、意図せず切り捨てられたりすることがあります。
これを防ぎ、正しい桁数で四捨五入するために
NormalizeDoubleという関数を使用するのが一般的です。修正すべきコードのイメージ
ナンピンのロット計算を行っている箇所(
lots = ...のような記述がある行)を探し、以下のように修正されているか確認してください。現在の状態(推測:切り捨て、または調整なし)
おそらく、単純な掛け算になっているか、整数への変換が行われている可能性があります。
修正後のイメージ(四捨五入・正規化)
NormalizeDouble関数を使って、小数点第2位(ロットの刻みによる)で正規化します。具体的な修正手順
1.6など)を掛けている計算式を検索します。*(掛け算記号)や、ご自身で設定した倍率の変数名など。NormalizeDouble( 計算式 , 2 )で囲んでください。元のコードを確認する確実な方法
もし、どの行を消してしまったか特定が難しい場合は、以下の手順で「EAつくーる」の生成コードと比較することをお勧めします。
NormalizeDoubleが使われている箇所)を探します。補足:計算結果の違いについて
ご提示いただいた例において、
0.01 * 1.6 = 0.016この数値を:
0.020.01となります。この「最初の計算」のズレが、その後の連鎖的なロット計算(②の0.01→0.01→0.03…という動き)に影響を与えています。
まずは
NormalizeDoubleの記述が正しく存在するかをご確認ください。回答ありがとうございます。
早速、EAを生成しなおして、確認してみます。