ロット数を小数第何位で四捨五入すればいいか?という話
ロット数の単位はFX業者ごとに異なります。
多くの場合は0.01単位だと思いますが、0.1単位の業者もあるでしょう。中には0.001単位もあるかもしれません。
複利等の計算式で算出したロット数が0.5472みたいな時、小数第何位で四捨五入すれば良いでしょうか?
自分専用であれば自分が使うFX業者に対応した桁数を直接指定すればOKですが、第三者に提供する場合はそうもいきません。
そのままOrderSend関数に渡してもMT4が上手いこと処理してくれるので、何もしないという選択もアリですが、できれば正確に渡したいもの。
たまに必要になるんですよね、これ。
というわけで、備忘録がてらロット数を正規化する方法を記載します。
double lots = 0.5472; // 複利計算などで算出した汚い数値 double lotstep = MarketInfo(Symbol(), MODE_LOTSTEP); lots = NormalizeDouble(lots, (int)MathAbs(MathLog10(lotstep)));
MODE_LOTSTEPはロット数の単位です。多くの場合、0.01ですね。
MathLog10関数はMQL4の組込関数で、10の対数でlog10を計算してくれます。
log10(0.01)=log10(10の-2乗)=-2*log10(10)=-2
MathAbs関数もMQL4の組込関数で絶対値を返してくれます。
-2の絶対値は2ですね。
というわけで、NormalizeDouble関数で0.5472を小数第2位で四捨五入せよということになり、lots=0.55となります。
対数、覚えてますか?