错误!
//---- 将批量大小标准化为最接近的标准值 lot = LOTSTEP*MathFloor(lot/LOTSTEP);
地段最小步长的计算是错误的!。
我们应该做的是
1.用最小手数减去(原始)手数,因为我们必须从经纪商规定的最小手数开始计算手数。如果结果小于 0,则没有手数。
lot -= MinLot; if (lot < 0) lot = 0; //--- not even qualify for minimum lot
2.计算达到手数需要多少步。不要使用MathFloor() 函数,因为 MathFloor() 的返回类型是双,当最终手数不符合经纪商要求时有可能出错。使用一些整数类型的变量。
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.可怕 - 这个手数计算不包括资金管理,而任何有常识的交易者都应该而且必须有资金管理。资金管理计算 开仓风险,包括但不限于亏损到止损的成本。
避免亏损是游戏的一部分。
![]()
GetLotForOpeningPos:
作者: Nikolay Kositsin