Спасибо за поправку - я внес изменения в пример.
Спасибо за поправку - я внес изменения в пример.
Если уж быть точнее, то правильная формула такая :
vol=NormalizeDouble(AccountFreeMargin()*ExtMaximumRisk*AccountLeverage()/contract,nLotsDigits);
величину nLotsDigits можно вычислить, например так :
int nLotsDigits = MathCeil(MathAbs(MathLog(MarketInfo(Symbol(),MODE_MINLOT))/MathLog(10)));
;).
Удачи и попутных трендов.
величину nLotsDigits можно вычислить, например так :
int nLotsDigits = MathCeil(MathAbs(MathLog(MarketInfo(Symbol(),MODE_MINLOT))/MathLog(10)));
а может вместо MODE_MINLOT в вашей формуле использовать MODE_LOTSTEP?
Хотя, для моего брокера эти величины совпадают.
А можно, я думаю использовать и такую формулу:
double nLotStep = MarketInfo(Symbol(),MODE_LOTSTEP); vol=MathFloor(AccountFreeMargin()*ExtMaximumRisk*AccountLeverage()/contract/nLotStep)*nLotStep ;
а может вместо MODE_MINLOT в вашей формуле использовать MODE_LOTSTEP?
Хотя, для моего брокера эти величины совпадают.
Вообще было бы странно, если они не совпадали бы. Одна величина показывает размер минимально возможного лота, вторая минимально возможной "доливки". Но когда ордера выставлены, то доливка и расчитывается как количество ордеров, которое можно выставить и его минимальное значение не может быть меньше, правда может быть больше, но с какой стати то ?
Думаю, значения иметь не будет что там использовать - главное принцип: получить количество знаков мантиссы в ордере.
С уважением, Владислав.
Удачи и попутных трендов.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
https://championship.mql5.com/2012/ru/news
Вообще-то мне нужно было оставить комментарий на этой странице. Но я не участник чемпионата и время регистрации прошло. Поэтому пишу здесь. Функция выглядит таким образом
Ошибка здесь
Эта формула работает только для AccountLeverage()=100. Правильная формула должна быть такой
Опять же для AccountLeverage()=100 и contract=100000 обе формулы для vol дают один и тот же результат. Но вторая формула правильна для всех ситуаций в которых первой волютой в торгуемой паре является валюта депозита (то есть счёт открыт в USD и торговля происходит в USDxxx). Авторы сайта championship.mql4.com, пожалуйста исправьте ошибку так как ваша страница видна всем МТ пользователям и они могут использовать этот код в своих экспертах предназначенных для более широкого использования.