нужно уточнить из MarketInfo
MODE_LOTSIZE 15 Размер контракта в базовой валюте инструмента
MODE_MINLOT 23 Минимальный размер лота
MODE_LOTSTEP 24 Шаг изменения размера лота
MODE_MAXLOT 25 Максимальный размер лота
MODE_LOTSIZE 15 Размер контракта в базовой валюте инструмента
MODE_MINLOT 23 Минимальный размер лота
MODE_LOTSTEP 24 Шаг изменения размера лота
MODE_MAXLOT 25 Максимальный размер лота
Вот таким образом стало работать. NormalizeDouble может что-то не так возвращал, какие-нибудь лишние цифры после запятой.
string sLots = MathRound(AccountFreeMargin()/2000);
lots = StrToDouble(sLots) / 10.0;
if (lots > 5.0) lots = 5.0;
else if (lots < 0.1) lots = 0.1;
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пока лот был меньше 1, такого сообщения в журнале не было, начиналось с лота 0.5 при 10000 начальных баланса. Но баланс поднялся более чем в 2 раза, лот был вычислен равным 1.2 и тут пошли сообщения об ошибке.
double lots = AccountFreeMargin()/20000; lots = NormalizeDouble(lots,1); if (lots > 5.0) lots = 5.0; else if (lots < 0.1) lots = 0.1; if (nCmd == OP_BUY) ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,5,0,0); if (nCmd == OP_SELL) ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,5,0,0);