違う!
//---- ロットサイズを最も近い標準値に正規化する。 lot = LOTSTEP*MathFloor(lot/LOTSTEP);
そのロット最小ロットのステップ計算は間違っている !
やるべきことは
1.常にブローカーによって定義された最小ロットからロットの計算を開始しなければならないからです。結果が0より小さい場合、ロットはありません。
lot -= MinLot; if (lot < 0) lot = 0; //--- not even qualify for minimum lot
2.ステップロットがロットに到達するまでに必要なステップ数を計算する。MathFloor()関数は 使用しないでください。なぜなら、MathFloor()の戻り値の型はdoubleであり、最終ロットがブローカーの要件に適合していない場合にエラーが発生する危険性があるからです。整数型の変数を使用してください。
int the_step;
the_step = lot/LOTSTEP;
3.最終的な計算は、すべて一緒に行う。
lot = MinLot + the_step*STEPLOT;
4.完全な計算
//---- ロットサイズを最も近い標準値に正規化する。 lot -= MinLot; if (lot < 0) lot = 0; int the_step; the_step = lot/LOTSTEP; lot = MinLot + the_step*STEPLOT; //---- 許容最小値のロットをチェックする。 if (lot < MinLot) lot=0; //---- 許容最大値のロットをチェックする。 if(lot>MaxLot) lot=MaxLot;
5.恐ろしいことに、このロット計算には、常識的なトレーダーであれば必ず持っているはずの資金管理が含まれていない。資金管理とは、ポジションを建てる際のリスクを計算することで あり、ストップロスまでの損失額を計算することである。
損をしないようにすることもゲームの一部です。

取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
GetLotForOpeningPos:
作者: Nikolay Kositsin