Да это здорово, меня пока банят мои мозги))
нашел вот это
Почему возникает ошибка 131. Например наш советник хочет открыть ордер с лотом 0,23. Но в МаркетИнфо уже забито что минимальный лот 0,10, а шаг изменения лота например 0,05. То есть мы может открывать лот начиная с 0,10, далее 0,15 0,20 0,25 0,30 и тд. Но нужный нам лот 0,23 не попадает в этот список, поэтому и возникает ошибка 131.
Предлагаю вам рассмотреть во такой код.
if (lot < MarketInfo(Symbol(),MODE_MINLOT)) lot = MarketInfo(Symbol(),MODE_MINLOT); // проверяем чтобы наш лот НЕ был меньше минимального
if (lot > MarketInfo(Symbol(),MODE_MAXLOT)) lot = MarketInfo(Symbol(),MODE_MAXLOT); // проверяем чтобы наш лот НЕ был больше максимального
double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP); // это шаг лота
lot = (int)(lot/lotstep) * lotstep; /// вот такая вот формула (лот делим на шаг, округляем до целых, и умножаем на шаг)
lot = NormalizeDouble(lot,2);
потыркался с куском этим, а куда приткнуть не знаю, поэтому и прошу помощи у тех кто понимает